@webex/plugin-meetings 3.3.1-next.15 → 3.3.1-next.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/mediaQualityMetrics/config.js +6 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/statsAnalyzer/index.js +3 -1
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +4 -3
- package/src/mediaQualityMetrics/config.ts +5 -0
- package/src/statsAnalyzer/index.ts +3 -3
- package/test/unit/spec/stats-analyzer/index.js +30 -1
package/dist/breakouts/index.js
CHANGED
|
@@ -1046,7 +1046,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1046
1046
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1047
1047
|
}
|
|
1048
1048
|
},
|
|
1049
|
-
version: "3.3.1-next.
|
|
1049
|
+
version: "3.3.1-next.16"
|
|
1050
1050
|
});
|
|
1051
1051
|
var _default = exports.default = Breakouts;
|
|
1052
1052
|
//# sourceMappingURL=index.js.map
|
|
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
|
|
|
373
373
|
throw error;
|
|
374
374
|
});
|
|
375
375
|
},
|
|
376
|
-
version: "3.3.1-next.
|
|
376
|
+
version: "3.3.1-next.16"
|
|
377
377
|
});
|
|
378
378
|
var _default = exports.default = SimultaneousInterpretation;
|
|
379
379
|
//# sourceMappingURL=index.js.map
|
|
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
|
|
|
18
18
|
languageCode: 'number',
|
|
19
19
|
languageName: 'string'
|
|
20
20
|
},
|
|
21
|
-
version: "3.3.1-next.
|
|
21
|
+
version: "3.3.1-next.16"
|
|
22
22
|
});
|
|
23
23
|
var _default = exports.default = SILanguage;
|
|
24
24
|
//# sourceMappingURL=siLanguage.js.map
|
|
@@ -11,6 +11,12 @@ var emptyMqaInterval = exports.emptyMqaInterval = {
|
|
|
11
11
|
intervalMetadata: {
|
|
12
12
|
peerReflexiveIP: '0.0.0.0',
|
|
13
13
|
peripherals: [],
|
|
14
|
+
cpuInfo: {
|
|
15
|
+
numberOfCores: 1,
|
|
16
|
+
// default value from spec if CpuInfo.getNumLogicalCores cannot be determined
|
|
17
|
+
description: 'NA',
|
|
18
|
+
architecture: 'unknown'
|
|
19
|
+
},
|
|
14
20
|
processAverageCPU: 0,
|
|
15
21
|
processMaximumCPU: 0,
|
|
16
22
|
systemAverageCPU: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["emptyMqaInterval","exports","audioReceive","audioTransmit","intervalMetadata","peerReflexiveIP","peripherals","processAverageCPU","processMaximumCPU","systemAverageCPU","systemMaximumCPU","screenWidth","screenHeight","screenResolution","appWindowWidth","appWindowHeight","appWindowSize","networkType","intervalNumber","videoReceive","videoTransmit","emptyAudioReceive","common","direction","isMain","mariFecEnabled","mariRtxEnabled","mariQosEnabled","mariLiteEnabled","multistreamEnabled","dtlsBitrate","dtlsPackets","fecBitrate","fecPackets","maxBitrate","mediaHopByHopLost","rtcpBitrate","rtcpPackets","rtpBitrate","rtpHopByHopLost","rtpPackets","rtpRecovered","rtxBitrate","rtxPackets","srtcpUnprotectErrors","srtpUnprotectErrors","stunBitrate","stunPackets","transportType","streams","emptyAudioReceiveStream","codec","concealedFrames","csi","maxConcealRunLength","optimalBitrate","optimalFrameRate","receivedBitrate","receivedFrameRate","renderedFrameRate","requestedBitrate","requestedFrameRate","rtpEndToEndLost","maxRtpJitter","meanRtpJitter","ssci","emptyAudioTransmit","availableBitrate","queueDelay","remoteJitter","remoteLossRate","roundTripTime","emptyAudioTransmitStream","requestedFrames","transmittedBitrate","transmittedFrameRate","emptyVideoReceive","emptyVideoReceiveStream","rtpJitter","h264CodecProfile","isActiveSpeaker","optimalFrameSize","receivedFrameSize","receivedHeight","receivedKeyFrames","receivedKeyFramesForRequest","receivedKeyFramesSourceChange","receivedKeyFramesUnknown","receivedWidth","requestedFrameSize","requestedKeyFrames","emptyVideoTransmit","emptyVideoTransmitStream","duplicateSsci","isAvatar","isHardwareEncoded","localConfigurationChanges","maxFrameQp","maxNoiseLevel","minRegionQp","remoteConfigurationChanges","transmittedFrameSize","transmittedHeight","transmittedKeyFrames","transmittedKeyFramesClient","transmittedKeyFramesConfigurationChange","transmittedKeyFramesFeedback","transmittedKeyFramesLocalDrop","transmittedKeyFramesOtherLayer","transmittedKeyFramesPeriodic","transmittedKeyFramesSceneChange","transmittedKeyFramesStartup","transmittedKeyFramesUnknown","transmittedWidth"],"sources":["config.ts"],"sourcesContent":["export const emptyMqaInterval = {\n audioReceive: [],\n audioTransmit: [],\n intervalMetadata: {\n peerReflexiveIP: '0.0.0.0',\n peripherals: [],\n processAverageCPU: 0,\n processMaximumCPU: 0,\n systemAverageCPU: 0,\n systemMaximumCPU: 0,\n screenWidth: 0,\n screenHeight: 0,\n screenResolution: 0,\n appWindowWidth: 0,\n appWindowHeight: 0,\n appWindowSize: 0,\n },\n networkType: '',\n intervalNumber: 0,\n videoReceive: [],\n videoTransmit: [],\n};\n\nexport const emptyAudioReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyAudioReceiveStream = {\n common: {\n codec: 'opus',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0,\n },\n};\n\nexport const emptyAudioTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyAudioTransmitStream = {\n common: {\n codec: 'opus',\n csi: [],\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0,\n },\n};\n\nexport const emptyVideoReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true, // Not avaliable\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0, // Not avaliable\n dtlsPackets: 0, // Not avaliable\n fecBitrate: 0, // Not avaliable\n fecPackets: 0, // Not avaliable\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0, // Not avaliable\n rtcpPackets: 0, // Not avaliable\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0, // Not avaliable\n rtxBitrate: 0, // Not avaliable\n rtxPackets: 0, // Not avaliable\n srtcpUnprotectErrors: 0, // Not avaliable\n srtpUnprotectErrors: 0, // Not avaliable\n stunBitrate: 0, // Not avaliable\n stunPackets: 0, // Not avaliable\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyVideoReceiveStream = {\n common: {\n codec: 'H264',\n concealedFrames: 0, // Not avaliable\n csi: [],\n maxConcealRunLength: 0, // Not avaliable\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0, // Not avaliable\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n rtpJitter: 0,\n rtpPackets: 0,\n ssci: 0, // Not avaliable\n },\n h264CodecProfile: 'BP',\n isActiveSpeaker: false,\n optimalFrameSize: 0, // Not avaliable\n receivedFrameSize: 0,\n receivedHeight: 0,\n receivedKeyFrames: 0,\n receivedKeyFramesForRequest: 0,\n receivedKeyFramesSourceChange: 0,\n receivedKeyFramesUnknown: 0,\n receivedWidth: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0,\n};\n\nexport const emptyVideoTransmit = {\n common: {\n availableBitrate: 0, // Not avaliable currently hardcoded\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0, // Not avaliable\n dtlsPackets: 0, // Not avaliable\n fecBitrate: 0, // Not avaliable\n fecPackets: 0, // TODO: check inbound-rtp// Not avaliable\n maxBitrate: 0, // Currently hardcoded\n queueDelay: 0,\n remoteJitter: 0, // remoteInboundRtp.jitter\n remoteLossRate: 0, // comparedResults.lossRate\n roundTripTime: 0, // compareResults.roundTripTime\n rtcpBitrate: 0, // Dont have access to it\n rtcpPackets: 0, // Dont have access to rtcp\n rtpBitrate: 0, // Dont have access\n rtpPackets: 0, // outboundRtp.packetsSent\n rtxBitrate: 0, // Dont have access to it\n rtxPackets: 0, // Dont have access to it\n stunBitrate: 0, // Dont have access to it\n stunPackets: 0, // Dont have access to it\n transportType: 'UDP', // TODO: need to calculate\n },\n streams: [],\n};\n\nexport const emptyVideoTransmitStream = {\n common: {\n codec: 'H264',\n csi: [],\n duplicateSsci: 0, // Not Avaliable\n requestedBitrate: 0, // TODO: from remote SDP\n requestedFrames: 0, // TODO: from remote SDP\n rtpPackets: 0, // same as rtp packets\n ssci: 0,\n transmittedBitrate: 0, // TODO: get in the candidate pair\n transmittedFrameRate: 0, // TODO: from track info\n },\n h264CodecProfile: 'BP', // TODO: from localSDP\n isAvatar: false, // Not Avaliable\n isHardwareEncoded: false, // Not Avaliable\n localConfigurationChanges: 2, // Not Avaliable\n maxFrameQp: 0, // Not Avaliable\n maxNoiseLevel: 0, // Not Avaliable\n minRegionQp: 0, // Not Avaliable\n remoteConfigurationChanges: 0, // Not Avaliable\n requestedFrameSize: 0, // TODO: from remote SDP\n requestedKeyFrames: 0, // outbound Fir request\n transmittedFrameSize: 0, // Not Avaliable\n transmittedHeight: 0,\n transmittedKeyFrames: 0, // Key frames encoded\n transmittedKeyFramesClient: 0, // Not Avaliable\n transmittedKeyFramesConfigurationChange: 0, // Not Avaliable\n transmittedKeyFramesFeedback: 0, // Not Avaliable\n transmittedKeyFramesLocalDrop: 0, // Not Avaliable\n transmittedKeyFramesOtherLayer: 0, // Not Avaliable\n transmittedKeyFramesPeriodic: 0, // Not Avaliable\n transmittedKeyFramesSceneChange: 0, // Not Avaliable\n transmittedKeyFramesStartup: 0, // Not Avaliable\n transmittedKeyFramesUnknown: 0, // Not Avaliable\n transmittedWidth: 0,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["emptyMqaInterval","exports","audioReceive","audioTransmit","intervalMetadata","peerReflexiveIP","peripherals","cpuInfo","numberOfCores","description","architecture","processAverageCPU","processMaximumCPU","systemAverageCPU","systemMaximumCPU","screenWidth","screenHeight","screenResolution","appWindowWidth","appWindowHeight","appWindowSize","networkType","intervalNumber","videoReceive","videoTransmit","emptyAudioReceive","common","direction","isMain","mariFecEnabled","mariRtxEnabled","mariQosEnabled","mariLiteEnabled","multistreamEnabled","dtlsBitrate","dtlsPackets","fecBitrate","fecPackets","maxBitrate","mediaHopByHopLost","rtcpBitrate","rtcpPackets","rtpBitrate","rtpHopByHopLost","rtpPackets","rtpRecovered","rtxBitrate","rtxPackets","srtcpUnprotectErrors","srtpUnprotectErrors","stunBitrate","stunPackets","transportType","streams","emptyAudioReceiveStream","codec","concealedFrames","csi","maxConcealRunLength","optimalBitrate","optimalFrameRate","receivedBitrate","receivedFrameRate","renderedFrameRate","requestedBitrate","requestedFrameRate","rtpEndToEndLost","maxRtpJitter","meanRtpJitter","ssci","emptyAudioTransmit","availableBitrate","queueDelay","remoteJitter","remoteLossRate","roundTripTime","emptyAudioTransmitStream","requestedFrames","transmittedBitrate","transmittedFrameRate","emptyVideoReceive","emptyVideoReceiveStream","rtpJitter","h264CodecProfile","isActiveSpeaker","optimalFrameSize","receivedFrameSize","receivedHeight","receivedKeyFrames","receivedKeyFramesForRequest","receivedKeyFramesSourceChange","receivedKeyFramesUnknown","receivedWidth","requestedFrameSize","requestedKeyFrames","emptyVideoTransmit","emptyVideoTransmitStream","duplicateSsci","isAvatar","isHardwareEncoded","localConfigurationChanges","maxFrameQp","maxNoiseLevel","minRegionQp","remoteConfigurationChanges","transmittedFrameSize","transmittedHeight","transmittedKeyFrames","transmittedKeyFramesClient","transmittedKeyFramesConfigurationChange","transmittedKeyFramesFeedback","transmittedKeyFramesLocalDrop","transmittedKeyFramesOtherLayer","transmittedKeyFramesPeriodic","transmittedKeyFramesSceneChange","transmittedKeyFramesStartup","transmittedKeyFramesUnknown","transmittedWidth"],"sources":["config.ts"],"sourcesContent":["export const emptyMqaInterval = {\n audioReceive: [],\n audioTransmit: [],\n intervalMetadata: {\n peerReflexiveIP: '0.0.0.0',\n peripherals: [],\n cpuInfo: {\n numberOfCores: 1, // default value from spec if CpuInfo.getNumLogicalCores cannot be determined\n description: 'NA',\n architecture: 'unknown',\n },\n processAverageCPU: 0,\n processMaximumCPU: 0,\n systemAverageCPU: 0,\n systemMaximumCPU: 0,\n screenWidth: 0,\n screenHeight: 0,\n screenResolution: 0,\n appWindowWidth: 0,\n appWindowHeight: 0,\n appWindowSize: 0,\n },\n networkType: '',\n intervalNumber: 0,\n videoReceive: [],\n videoTransmit: [],\n};\n\nexport const emptyAudioReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyAudioReceiveStream = {\n common: {\n codec: 'opus',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0,\n },\n};\n\nexport const emptyAudioTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyAudioTransmitStream = {\n common: {\n codec: 'opus',\n csi: [],\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0,\n },\n};\n\nexport const emptyVideoReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true, // Not avaliable\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0, // Not avaliable\n dtlsPackets: 0, // Not avaliable\n fecBitrate: 0, // Not avaliable\n fecPackets: 0, // Not avaliable\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0, // Not avaliable\n rtcpPackets: 0, // Not avaliable\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0, // Not avaliable\n rtxBitrate: 0, // Not avaliable\n rtxPackets: 0, // Not avaliable\n srtcpUnprotectErrors: 0, // Not avaliable\n srtpUnprotectErrors: 0, // Not avaliable\n stunBitrate: 0, // Not avaliable\n stunPackets: 0, // Not avaliable\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyVideoReceiveStream = {\n common: {\n codec: 'H264',\n concealedFrames: 0, // Not avaliable\n csi: [],\n maxConcealRunLength: 0, // Not avaliable\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0, // Not avaliable\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n rtpJitter: 0,\n rtpPackets: 0,\n ssci: 0, // Not avaliable\n },\n h264CodecProfile: 'BP',\n isActiveSpeaker: false,\n optimalFrameSize: 0, // Not avaliable\n receivedFrameSize: 0,\n receivedHeight: 0,\n receivedKeyFrames: 0,\n receivedKeyFramesForRequest: 0,\n receivedKeyFramesSourceChange: 0,\n receivedKeyFramesUnknown: 0,\n receivedWidth: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0,\n};\n\nexport const emptyVideoTransmit = {\n common: {\n availableBitrate: 0, // Not avaliable currently hardcoded\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0, // Not avaliable\n dtlsPackets: 0, // Not avaliable\n fecBitrate: 0, // Not avaliable\n fecPackets: 0, // TODO: check inbound-rtp// Not avaliable\n maxBitrate: 0, // Currently hardcoded\n queueDelay: 0,\n remoteJitter: 0, // remoteInboundRtp.jitter\n remoteLossRate: 0, // comparedResults.lossRate\n roundTripTime: 0, // compareResults.roundTripTime\n rtcpBitrate: 0, // Dont have access to it\n rtcpPackets: 0, // Dont have access to rtcp\n rtpBitrate: 0, // Dont have access\n rtpPackets: 0, // outboundRtp.packetsSent\n rtxBitrate: 0, // Dont have access to it\n rtxPackets: 0, // Dont have access to it\n stunBitrate: 0, // Dont have access to it\n stunPackets: 0, // Dont have access to it\n transportType: 'UDP', // TODO: need to calculate\n },\n streams: [],\n};\n\nexport const emptyVideoTransmitStream = {\n common: {\n codec: 'H264',\n csi: [],\n duplicateSsci: 0, // Not Avaliable\n requestedBitrate: 0, // TODO: from remote SDP\n requestedFrames: 0, // TODO: from remote SDP\n rtpPackets: 0, // same as rtp packets\n ssci: 0,\n transmittedBitrate: 0, // TODO: get in the candidate pair\n transmittedFrameRate: 0, // TODO: from track info\n },\n h264CodecProfile: 'BP', // TODO: from localSDP\n isAvatar: false, // Not Avaliable\n isHardwareEncoded: false, // Not Avaliable\n localConfigurationChanges: 2, // Not Avaliable\n maxFrameQp: 0, // Not Avaliable\n maxNoiseLevel: 0, // Not Avaliable\n minRegionQp: 0, // Not Avaliable\n remoteConfigurationChanges: 0, // Not Avaliable\n requestedFrameSize: 0, // TODO: from remote SDP\n requestedKeyFrames: 0, // outbound Fir request\n transmittedFrameSize: 0, // Not Avaliable\n transmittedHeight: 0,\n transmittedKeyFrames: 0, // Key frames encoded\n transmittedKeyFramesClient: 0, // Not Avaliable\n transmittedKeyFramesConfigurationChange: 0, // Not Avaliable\n transmittedKeyFramesFeedback: 0, // Not Avaliable\n transmittedKeyFramesLocalDrop: 0, // Not Avaliable\n transmittedKeyFramesOtherLayer: 0, // Not Avaliable\n transmittedKeyFramesPeriodic: 0, // Not Avaliable\n transmittedKeyFramesSceneChange: 0, // Not Avaliable\n transmittedKeyFramesStartup: 0, // Not Avaliable\n transmittedKeyFramesUnknown: 0, // Not Avaliable\n transmittedWidth: 0,\n};\n"],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
|
|
|
23
23
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
24
24
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
25
25
|
var _lodash = require("lodash");
|
|
26
|
+
var _webCapabilities = require("@webex/web-capabilities");
|
|
26
27
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
27
28
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
28
29
|
var _constants = require("../constants");
|
|
@@ -33,7 +34,7 @@ var _mqaUtil = require("./mqaUtil");
|
|
|
33
34
|
function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
34
35
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
35
36
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
36
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
38
|
var EVENTS = exports.EVENTS = {
|
|
38
39
|
MEDIA_QUALITY: 'MEDIA_QUALITY',
|
|
39
40
|
LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
|
|
@@ -506,6 +507,7 @@ var StatsAnalyzer = exports.StatsAnalyzer = /*#__PURE__*/function (_EventsScope)
|
|
|
506
507
|
}
|
|
507
508
|
});
|
|
508
509
|
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
510
|
+
newMqa.intervalMetadata.cpuInfo.numberOfCores = _webCapabilities.CpuInfo.getNumLogicalCores() || 1;
|
|
509
511
|
|
|
510
512
|
// Adding peripheral information
|
|
511
513
|
newMqa.intervalMetadata.peripherals.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_internalMediaCore","_eventsScope","_interopRequireDefault","_constants","_config","_loggerProxy","_global","_mqaUtil","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","EVENTS","exports","MEDIA_QUALITY","LOCAL_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STARTED","REMOTE_MEDIA_STOPPED","emptySender","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","emptyReceiver","bytesReceived","meanRtpJitter","StatsAnalyzer","_EventsScope","_inherits2","_super","_ref","_this","config","_ref$receiveSlotCallb","receiveSlotCallback","undefined","_ref$networkQualityMo","networkQualityMonitor","_ref$statsResults","statsResults","defaultStats","_ref$isMultistream","isMultistream","_classCallCheck2","_assertThisInitialized2","mediaType","previousValue","currentValue","isLocal","Error","concat","lastEmittedStartStopEvent","lastEmittedEvent","local","remote","newEvent","emit","file","function","type","successfulCandidatePairId","candidates","newIpAddress","isEmpty","localCandidate","candidateType","address","relayProtocol","relatedAddress","localIpAddress","isSender","isRemote","_this$successfulCandi","id","successfulCandidatePair","localCandidateId","transport","toUpperCase","protocol","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","ipAddress","ip","relatedPort","portNumber","port","networkType","priority","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","_createClass2","key","value","resetStatsResults","_this2","_keys","includes","recv","send","updateMediaStatus","status","_this$meetingMediaSta","_this$meetingMediaSta2","meetingMediaStatus","actual","expected","sendMqaData","_this3","newMqa","cloneDeep","emptyMqaInterval","audioSender","emptyAudioTransmit","audioShareSender","audioReceiver","emptyAudioReceive","audioShareReceiver","videoSender","emptyVideoTransmit","videoShareSender","videoReceiver","emptyVideoReceive","videoShareReceiver","getAudioSenderMqa","baseMediaType","audioTransmit","getAudioReceiverMqa","audioReceive","getVideoSenderMqa","videoTransmit","getVideoReceiverMqa","videoReceive","startsWith","audioSenderStream","emptyAudioTransmitStream","getAudioSenderStreamMqa","isStreamRequested","streams","audioReceiverStream","emptyAudioReceiveStream","getAudioReceiverStreamMqa","videoSenderStream","emptyVideoTransmitStream","getVideoSenderStreamMqa","videoReceiverStream","emptyVideoReceiveStream","getVideoReceiverStreamMqa","intervalMetadata","peerReflexiveIP","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","MICROPHONE","existingVideoSender","find","item","CAMERA","screenWidth","window","screen","width","screenHeight","height","screenResolution","Math","round","appWindowWidth","innerWidth","appWindowHeight","innerHeight","appWindowSize","intervalNumber","data","updateMediaConnection","mediaConnection","getLocalIpAddress","startAnalyzer","_this4","getStatsAndParse","then","statsInterval","setInterval","analyzerInterval","mqaInterval","MQA_INTERVAL","_promise","resolve","stopAnalyzer","_this5","sendOneLastMqa","clearInterval","parseGetStatsResult","getStatsResult","processOutboundRTPResult","processInboundRTPResult","compareSentAndReceived","parseCandidate","parseAudioSource","filterAndParseGetStatsResults","statsItem","_this6","types","DEFAULT_GET_STATS_FILTER","report","state","videoSenderIndex","newType","direction","currentDirection","localTrackLabel","csi","shareVideoEncoderImplementation","encoderImplementation","_this$successfulCandi2","_this$statsResults","extractAndSetLocalIpAddressInfoForDiagnostics","audioLevel","totalAudioEnergy","compareLastStatsResult","_this7","getCurrentStatsTotals","keyPrefix","reduce","prev","cur","_this7$statsResults$c","getPreviousStatsTotals","_this7$lastStatsResul","currentStats","previousStats","sendAudio","totalPacketsSent","LoggerProxy","logger","info","emitStartStopEvents","currentAudioPacketsReceived","previousAudioPacketsReceived","currentTotalPacketsSent","previousTotalPacketsSent","currentFramesEncoded","previousFramesEncoded","currentFramesSent","previousFramesSent","doesVideoSendExist","some","sendVideo","currentVideoFramesDecoded","previousVideoFramesDecoded","sendShare","framesEncoded","framesSent","currentShareFramesDecoded","previousShareFramesDecoded","_this8","getConnectionState","ConnectionState","Failed","trace","getTransceiverStats","transceiverStats","video","receivers","receiver","i","audio","screenShareVideo","screenShareAudio","senders","sender","JSON","parse","_stringify","sendrecvType","kilobytes","frameWidth","frameHeight","hugeFramesSent","toFixed","keyFramesEncoded","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","qualityLimitationReason","qualityLimitationResolutionChanges","totalRtxPacketsSent","retransmittedPacketsSent","totalRtxBytesSent","retransmittedBytesSent","totalBytesSent","headerBytesSent","isRequested","lastRequestedUpdateTimestamp","requestedBitrate","requestedFrameSize","receiveSlot","ssrc","sourceState","idAndCsi","bytes","totalBytesReceived","currentPacketsLost","packetsLost","totalPacketsLost","packetsReceivedDiff","packetsReceived","totalPacketsReceived","videoFramesReceivedDiff","framesReceived","videoFramesDecodedDiff","framesDecoded","videoFramesDroppedDiff","framesDropped","isActiveSpeaker","lastActiveSpeakerTimestamp","lastActiveSpeakerUpdateTimestamp","currentPacketLossRatio","lastPacketReceivedTimestamp","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","headerBytesReceived","totalRtxPacketsReceived","retransmittedPacketsReceived","totalRtxBytesReceived","retransmittedBytesReceived","jitter","totalSamplesReceived","totalSamplesDecoded","concealedSamples","currentPacketLoss","totalPacketsLostOnReceiver","packetsLostOnReceiver","roundTripTime","reportsReceived","overAllPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {cloneDeep, isEmpty} from 'lodash';\nimport {ConnectionState} from '@webex/internal-media-core';\n\nimport EventsScope from '../common/events/events-scope';\nimport {\n DEFAULT_GET_STATS_FILTER,\n STATS,\n MQA_INTERVAL,\n NETWORK_TYPE,\n MEDIA_DEVICES,\n _UNKNOWN_,\n} from '../constants';\nimport {\n emptyAudioReceive,\n emptyAudioTransmit,\n emptyMqaInterval,\n emptyVideoReceive,\n emptyVideoTransmit,\n emptyAudioReceiveStream,\n emptyAudioTransmitStream,\n emptyVideoReceiveStream,\n emptyVideoTransmitStream,\n} from '../mediaQualityMetrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport defaultStats from './global';\nimport {\n getAudioSenderMqa,\n getAudioReceiverMqa,\n getVideoSenderMqa,\n getVideoReceiverMqa,\n getAudioSenderStreamMqa,\n getAudioReceiverStreamMqa,\n getVideoSenderStreamMqa,\n getVideoReceiverStreamMqa,\n isStreamRequested,\n} from './mqaUtil';\nimport {ReceiveSlot} from '../multistream/receiveSlot';\n\nexport const EVENTS = {\n MEDIA_QUALITY: 'MEDIA_QUALITY',\n LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',\n LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',\n REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',\n REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',\n};\n\nconst emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n};\n\nconst emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n};\n\ntype ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;\ntype MediaStatus = {\n actual?: any;\n expected?: any;\n};\n/**\n * Stats Analyzer class that will emit events based on detected quality\n *\n * @export\n * @class StatsAnalyzer\n * @extends {EventsScope}\n */\nexport class StatsAnalyzer extends EventsScope {\n config: any;\n correlationId: any;\n lastEmittedStartStopEvent: any;\n lastMqaDataSent: any;\n lastStatsResults: any;\n meetingMediaStatus: any;\n mqaInterval: NodeJS.Timeout;\n mqaSentCount: any;\n networkQualityMonitor: any;\n mediaConnection: any;\n statsInterval: NodeJS.Timeout;\n statsResults: any;\n statsStarted: any;\n successfulCandidatePair: any;\n localIpAddress: string; // Returns the local IP address for diagnostics. this is the local IP of the interface used for the current media connection a host can have many local Ip Addresses\n shareVideoEncoderImplementation?: string;\n receiveSlotCallback: ReceiveSlotCallback;\n isMultistream: boolean;\n\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config - SDK Configuration Object\n * @param {Function} receiveSlotCallback - Callback used to access receive slots.\n * @param {Object} networkQualityMonitor - Class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults - Default properties for stats\n * @param {boolean | undefined} isMultistream - Param indicating if the media connection is multistream or not\n */\n constructor({\n config,\n receiveSlotCallback = () => undefined,\n networkQualityMonitor = {},\n statsResults = defaultStats,\n isMultistream = false,\n }: {\n config: any;\n receiveSlotCallback: ReceiveSlotCallback;\n networkQualityMonitor: any;\n statsResults?: any;\n isMultistream?: boolean;\n }) {\n super();\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.lastEmittedStartStopEvent = {};\n this.receiveSlotCallback = receiveSlotCallback;\n this.successfulCandidatePair = {};\n this.localIpAddress = '';\n this.isMultistream = isMultistream;\n }\n\n /**\n * Resets cumulative stats arrays.\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n resetStatsResults() {\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n }\n });\n }\n\n /**\n * sets mediaStatus status for analyzing metrics\n *\n * @public\n * @param {Object} status for the audio and video\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public updateMediaStatus(status: MediaStatus) {\n this.meetingMediaStatus = {\n actual: {\n ...this.meetingMediaStatus?.actual,\n ...status?.actual,\n },\n expected: {\n ...this.meetingMediaStatus?.expected,\n ...status?.expected,\n },\n };\n }\n\n /**\n * captures MQA data from media connection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const newMqa = cloneDeep(emptyMqaInterval);\n\n // Fill in empty stats items for lastMqaDataSent\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (!this.lastMqaDataSent[mediaType]) {\n this.lastMqaDataSent[mediaType] = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {\n this.lastMqaDataSent[mediaType].send = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {\n this.lastMqaDataSent[mediaType].recv = {};\n }\n });\n\n // Create stats the first level, totals for senders and receivers\n const audioSender = cloneDeep(emptyAudioTransmit);\n const audioShareSender = cloneDeep(emptyAudioTransmit);\n const audioReceiver = cloneDeep(emptyAudioReceive);\n const audioShareReceiver = cloneDeep(emptyAudioReceive);\n const videoSender = cloneDeep(emptyVideoTransmit);\n const videoShareSender = cloneDeep(emptyVideoTransmit);\n const videoReceiver = cloneDeep(emptyVideoReceive);\n const videoShareReceiver = cloneDeep(emptyVideoReceive);\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-send',\n isMultistream: this.isMultistream,\n });\n newMqa.audioTransmit.push(audioSender);\n\n getAudioSenderMqa({\n audioSender: audioShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-send',\n isMultistream: this.isMultistream,\n });\n newMqa.audioTransmit.push(audioShareSender);\n\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.audioReceive.push(audioReceiver);\n\n getAudioReceiverMqa({\n audioReceiver: audioShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.audioReceive.push(audioShareReceiver);\n\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-send',\n isMultistream: this.isMultistream,\n });\n newMqa.videoTransmit.push(videoSender);\n\n getVideoSenderMqa({\n videoSender: videoShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-send',\n isMultistream: this.isMultistream,\n });\n newMqa.videoTransmit.push(videoShareSender);\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.videoReceive.push(videoReceiver);\n\n getVideoReceiverMqa({\n videoReceiver: videoShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.videoReceive.push(videoShareReceiver);\n\n // Add stats for individual streams\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.startsWith('audio-send')) {\n const audioSenderStream = cloneDeep(emptyAudioTransmitStream);\n\n getAudioSenderStreamMqa({\n audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.audioTransmit[0].streams.push(audioSenderStream);\n }\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-share-send')) {\n const audioSenderStream = cloneDeep(emptyAudioTransmitStream);\n\n getAudioSenderStreamMqa({\n audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.audioTransmit[1].streams.push(audioSenderStream);\n }\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-recv')) {\n const audioReceiverStream = cloneDeep(emptyAudioReceiveStream);\n\n getAudioReceiverStreamMqa({\n audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.audioReceive[0].streams.push(audioReceiverStream);\n }\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('audio-share-recv')) {\n const audioReceiverStream = cloneDeep(emptyAudioReceiveStream);\n\n getAudioReceiverStreamMqa({\n audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.audioReceive[1].streams.push(audioReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-send-layer')) {\n // We only want the stream-specific stats we get with video-send-layer-0, video-send-layer-1, etc.\n const videoSenderStream = cloneDeep(emptyVideoTransmitStream);\n\n getVideoSenderStreamMqa({\n videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.videoTransmit[0].streams.push(videoSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-share-send')) {\n const videoSenderStream = cloneDeep(emptyVideoTransmitStream);\n\n getVideoSenderStreamMqa({\n videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.videoTransmit[1].streams.push(videoSenderStream);\n }\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-recv')) {\n const videoReceiverStream = cloneDeep(emptyVideoReceiveStream);\n\n getVideoReceiverStreamMqa({\n videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.videoReceive[0].streams.push(videoReceiverStream);\n }\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-share-recv')) {\n const videoReceiverStream = cloneDeep(emptyVideoReceiveStream);\n\n getVideoReceiverStreamMqa({\n videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.videoReceive[1].streams.push(videoReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n }\n });\n\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n\n // Adding peripheral information\n newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.MICROPHONE,\n });\n }\n\n const existingVideoSender = Object.keys(this.statsResults).find((item) =>\n item.includes('video-send')\n );\n\n if (existingVideoSender) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.CAMERA,\n });\n }\n\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n\n newMqa.intervalMetadata.screenWidth = window.screen.width;\n newMqa.intervalMetadata.screenHeight = window.screen.height;\n newMqa.intervalMetadata.screenResolution = Math.round(\n (window.screen.width * window.screen.height) / 256\n );\n newMqa.intervalMetadata.appWindowWidth = window.innerWidth;\n newMqa.intervalMetadata.appWindowHeight = window.innerHeight;\n newMqa.intervalMetadata.appWindowSize = Math.round(\n (window.innerWidth * window.innerHeight) / 256\n );\n\n this.mqaSentCount += 1;\n\n newMqa.intervalNumber = this.mqaSentCount;\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData',\n },\n EVENTS.MEDIA_QUALITY,\n {\n data: newMqa,\n // @ts-ignore\n networkType: newMqa.networkType,\n }\n );\n }\n\n /**\n * updated the media connection when changed\n *\n * @private\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {void}\n */\n updateMediaConnection(mediaConnection: any) {\n this.mediaConnection = mediaConnection;\n }\n\n /**\n * Returns the local IP address for diagnostics.\n * this is the local IP of the interface used for the current media connection\n * a host can have many local Ip Addresses\n * @returns {string | undefined} The local IP address.\n */\n getLocalIpAddress(): string {\n return this.localIpAddress;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {Promise}\n */\n public startAnalyzer(mediaConnection: any) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n // Trigger initial fetch\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTERVAL);\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public stopAnalyzer() {\n const sendOneLastMqa = this.mqaInterval && this.statsInterval;\n\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Parse a single result of get stats\n *\n * @private\n * @param {*} getStatsResult\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private parseGetStatsResult(getStatsResult: any, type: string, isSender: boolean) {\n if (!getStatsResult) {\n return;\n }\n\n // Generate empty stats results\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = cloneDeep(emptyReceiver);\n }\n\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n this.parseAudioSource(getStatsResult, type);\n break;\n default:\n break;\n }\n }\n\n /**\n * Filters the get stats results for types\n * @private\n * @param {Array} statsItem\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n // get the successful candidate pair before parsing stats.\n statsItem.report.forEach((report) => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n\n let videoSenderIndex = 0;\n statsItem.report.forEach((result) => {\n if (types.includes(result.type)) {\n // if the video sender has multiple streams in the report, it is a new stream object.\n if (type === 'video-send' && result.type === 'outbound-rtp') {\n const newType = `video-send-layer-${videoSenderIndex}`;\n this.parseGetStatsResult(result, newType, isSender);\n videoSenderIndex += 1;\n\n this.statsResults[newType].direction = statsItem.currentDirection;\n this.statsResults[newType].trackLabel = statsItem.localTrackLabel;\n this.statsResults[newType].csi = statsItem.csi;\n } else if (type === 'video-share-send' && result.type === 'outbound-rtp') {\n this.shareVideoEncoderImplementation = result.encoderImplementation;\n this.parseGetStatsResult(result, type, isSender);\n } else {\n this.parseGetStatsResult(result, type, isSender);\n }\n }\n });\n\n if (this.statsResults[type]) {\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n this.extractAndSetLocalIpAddressInfoForDiagnostics(\n this.successfulCandidatePair?.localCandidateId,\n this.statsResults?.candidates\n );\n // reset the successful candidate pair.\n this.successfulCandidatePair = {};\n }\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result: any, type: any) {\n if (!result) {\n return;\n }\n\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n\n /**\n * emits started/stopped events for local/remote media by checking\n * if given values are increasing or not. The previousValue, currentValue\n * params can be any numerical value like number of receive packets or\n * decoded frames, etc.\n *\n * @private\n * @param {string} mediaType\n * @param {number} previousValue - value to compare\n * @param {number} currentValue - value to compare (must be same type of value as previousValue)\n * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n emitStartStopEvents = (\n mediaType: string,\n previousValue: number,\n currentValue: number,\n isLocal: boolean\n ) => {\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(`Unsupported mediaType: ${mediaType}`);\n }\n\n // eslint-disable-next-line no-param-reassign\n if (previousValue === undefined) previousValue = 0;\n // eslint-disable-next-line no-param-reassign\n if (currentValue === undefined) currentValue = 0;\n\n if (!this.lastEmittedStartStopEvent[mediaType]) {\n this.lastEmittedStartStopEvent[mediaType] = {};\n }\n\n const lastEmittedEvent = isLocal\n ? this.lastEmittedStartStopEvent[mediaType].local\n : this.lastEmittedStartStopEvent[mediaType].remote;\n\n let newEvent;\n\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;\n }\n\n if (newEvent && lastEmittedEvent !== newEvent) {\n if (isLocal) {\n this.lastEmittedStartStopEvent[mediaType].local = newEvent;\n } else {\n this.lastEmittedStartStopEvent[mediaType].remote = newEvent;\n }\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult',\n },\n newEvent,\n {\n type: mediaType,\n }\n );\n }\n };\n\n /**\n * compares current and previous stats to check if packets are not sent\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n private compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce(\n (prev, cur) =>\n prev +\n (this.statsResults[cur]?.[keyPrefix.includes('send') ? 'send' : 'recv'][value] || 0),\n 0\n );\n\n const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce(\n (prev, cur) =>\n prev +\n (this.lastStatsResults[cur]?.[keyPrefix.includes('send') ? 'send' : 'recv'][value] ||\n 0),\n 0\n );\n\n // Audio Transmit\n if (this.lastStatsResults['audio-send']) {\n // compare audio stats sent\n // NOTE: relies on there being only one sender.\n const currentStats = this.statsResults['audio-send'].send;\n const previousStats = this.lastStatsResults['audio-send'].send;\n\n if (\n (this.meetingMediaStatus.expected.sendAudio &&\n currentStats.totalPacketsSent === previousStats.totalPacketsSent) ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n (this.meetingMediaStatus.expected.sendAudio &&\n currentStats.totalAudioEnergy === previousStats.totalAudioEnergy) ||\n currentStats.totalAudioEnergy === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,\n currentStats.totalAudioEnergy\n );\n }\n\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user`\n );\n }\n }\n\n this.emitStartStopEvents(\n 'audio',\n previousStats.totalPacketsSent,\n currentStats.totalPacketsSent,\n true\n );\n }\n\n // Audio Receive\n const currentAudioPacketsReceived = getCurrentStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n const previousAudioPacketsReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n\n this.emitStartStopEvents(\n 'audio',\n previousAudioPacketsReceived,\n currentAudioPacketsReceived,\n false\n );\n\n const currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');\n const previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');\n\n const currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');\n const previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');\n\n const currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');\n const previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');\n\n const doesVideoSendExist = Object.keys(this.lastStatsResults).some((item) =>\n item.includes('video-send')\n );\n\n // Video Transmit\n if (doesVideoSendExist) {\n // compare video stats sent\n\n if (\n this.meetingMediaStatus.expected.sendVideo &&\n (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,\n currentTotalPacketsSent\n );\n } else {\n if (\n this.meetingMediaStatus.expected.sendVideo &&\n (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,\n currentFramesEncoded\n );\n }\n\n if (\n this.meetingMediaStatus.expected.sendVideo &&\n (currentFramesSent === previousFramesSent || currentFramesSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,\n currentFramesSent\n );\n }\n }\n\n this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);\n }\n\n // Video Receive\n const currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n const previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n\n this.emitStartStopEvents(\n 'video',\n previousVideoFramesDecoded,\n currentVideoFramesDecoded,\n false\n );\n\n // Share Transmit\n if (this.lastStatsResults['video-share-send']) {\n // compare share stats sent\n\n const currentStats = this.statsResults['video-share-send'].send;\n const previousStats = this.lastStatsResults['video-share-send'].send;\n\n if (\n this.meetingMediaStatus.expected.sendShare &&\n (currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n this.meetingMediaStatus.expected.sendShare &&\n (currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.meetingMediaStatus.expected.sendShare &&\n (this.statsResults['video-share-send'].send.framesSent ===\n this.lastStatsResults['video-share-send'].send.framesSent ||\n this.statsResults['video-share-send'].send.framesSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,\n this.statsResults['video-share-send'].send.framesSent\n );\n }\n }\n\n this.emitStartStopEvents('share', previousStats.framesSent, currentStats.framesSent, true);\n }\n\n // Share receive\n const currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n const previousShareFramesDecoded = getPreviousStatsTotals(\n 'video-share-recv',\n 'framesDecoded'\n );\n\n this.emitStartStopEvents(\n 'share',\n previousShareFramesDecoded,\n currentShareFramesDecoded,\n false\n );\n }\n }\n\n /**\n * Does a `getStats` on all the transceivers and parses the results\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {Promise}\n */\n private getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n\n if (\n this.mediaConnection &&\n this.mediaConnection.getConnectionState() === ConnectionState.Failed\n ) {\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'\n );\n\n return Promise.resolve();\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n\n return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {\n transceiverStats.video.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-recv-${i}`, false)\n );\n transceiverStats.audio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-recv-${i}`, false)\n );\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-share-recv-${i}`, false)\n );\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-share-recv-${i}`, false)\n );\n\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n\n this.compareLastStatsResult();\n\n // Save the last results to compare with the current\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'\n );\n });\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processOutboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n const kilobytes = 0;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;\n\n // Data saved to send MQA metrics\n\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation =\n result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason =\n result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =\n result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent =\n result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =\n result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp =\n result.lastRequestedUpdateTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n }\n }\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processInboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n const receiveSlot = this.receiveSlotCallback(result.ssrc);\n const sourceState = receiveSlot?.sourceState;\n const idAndCsi = receiveSlot\n ? `id: \"${receiveSlot.id || ''}\"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`\n : '';\n\n const bytes =\n result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n let currentPacketsLost =\n result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;\n if (currentPacketsLost < 0) {\n currentPacketsLost = 0;\n }\n const packetsReceivedDiff =\n result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n if (packetsReceivedDiff === 0) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total packets received on slot: `,\n result.packetsReceived\n );\n }\n }\n\n if (mediaType.startsWith('video') || mediaType.startsWith('share')) {\n const videoFramesReceivedDiff =\n result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;\n\n if (videoFramesReceivedDiff === 0) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total frames received on slot: `,\n result.framesReceived\n );\n }\n }\n\n const videoFramesDecodedDiff =\n result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;\n\n if (videoFramesDecodedDiff === 0) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total frames decoded on slot: `,\n result.framesDecoded\n );\n }\n }\n\n const videoFramesDroppedDiff =\n result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;\n\n if (videoFramesDroppedDiff > 10) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total frames dropped on slot: `,\n result.framesDropped\n );\n }\n }\n }\n\n if (mediaType.startsWith('video-recv')) {\n this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;\n this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp =\n result.lastActiveSpeakerUpdateTimestamp;\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =\n currentPacketsLost > 0\n ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost)\n : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio\n );\n }\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost =\n result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n\n // From Thin\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;\n\n this.statsResults[mediaType][sendrecvType].decoderImplementation =\n result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived =\n result.retransmittedPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived =\n result.retransmittedBytesReceived;\n\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n\n // Audio stats\n\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived =\n result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =\n result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp =\n result.lastRequestedUpdateTimestamp;\n }\n }\n\n /**\n * extracts the local Ip address from the statsResult object by looking at stats results candidates\n * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is\n * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc\n * note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address\n * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP\n * @private\n * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.\n * @param {Object} candidates - the stats result candidates\n * @returns {void}\n */\n extractAndSetLocalIpAddressInfoForDiagnostics = (\n successfulCandidatePairId: string,\n candidates: {[key: string]: Record<string, unknown>}\n ) => {\n let newIpAddress = '';\n if (successfulCandidatePairId && !isEmpty(candidates)) {\n const localCandidate = candidates[successfulCandidatePairId];\n if (localCandidate) {\n if (localCandidate.candidateType === 'host') {\n // if it's a host candidate, use the address property - it will be the local IP\n newIpAddress = `${localCandidate.address}`;\n } else if (localCandidate.candidateType === 'prflx') {\n // if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)\n // then look at the relatedAddress - it will be the local\n //\n // Firefox doesn't populate the relayProtocol property\n if (!localCandidate.relayProtocol) {\n newIpAddress = `${localCandidate.relatedAddress}`;\n } else {\n // if it's a peer reflexive candidate and we are using a relay -\n // in that case the relatedAddress will be the IP of the TURN server (Linus),\n // so we can only look at the address, but it might be local IP or public IP,\n // depending on if the user is behind a NAT or not\n newIpAddress = `${localCandidate.address}`;\n }\n }\n }\n }\n this.localIpAddress = newIpAddress;\n };\n\n /**\n * Processes remote and local candidate result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @param {boolean} isSender\n * @param {boolean} isRemote\n *\n * @returns {void}\n */\n parseCandidate = (result: any, type: any, isSender: boolean, isRemote: boolean) => {\n if (!result || !result.id) {\n return;\n }\n\n // We only care about the successful local candidate\n if (this.successfulCandidatePair?.localCandidateId !== result.id) {\n return;\n }\n\n let transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!this.statsResults.candidates) {\n this.statsResults.candidates = {};\n }\n\n this.statsResults.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip, // TODO: add ports\n relatedAddress: result.relatedAddress,\n relatedPort: result.relatedPort,\n relayProtocol: result.relayProtocol,\n protocol: result.protocol,\n address: result.address,\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type,\n };\n\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n\n this.statsResults.connectionType[ipType].networkType =\n result.networkType === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n // Don't compare on transceivers without a sender.\n if (!type || !this.statsResults[type].send) {\n return;\n }\n\n const mediaType = type;\n\n const currentPacketLoss =\n result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n\n // Total packloss ratio on this video section of the call\n this.statsResults[mediaType].send.overAllPacketLossRatio =\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0\n ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /\n this.statsResults[mediaType].send.totalPacketsSent\n : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio =\n this.statsResults[mediaType].send.packetsLostOnReceiver > 0\n ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /\n (this.statsResults[mediaType].send.packetsSent +\n this.statsResults[mediaType].send.packetsLostOnReceiver)\n : 0;\n\n if (\n this.statsResults[mediaType].send.maxPacketLossRatio <\n this.statsResults[mediaType].send.currentPacketLossRatio\n ) {\n this.statsResults[mediaType].send.maxPacketLossRatio =\n this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults,\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_webCapabilities","_internalMediaCore","_eventsScope","_interopRequireDefault","_constants","_config","_loggerProxy","_global","_mqaUtil","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","EVENTS","exports","MEDIA_QUALITY","LOCAL_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STARTED","REMOTE_MEDIA_STOPPED","emptySender","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","emptyReceiver","bytesReceived","meanRtpJitter","StatsAnalyzer","_EventsScope","_inherits2","_super","_ref","_this","config","_ref$receiveSlotCallb","receiveSlotCallback","undefined","_ref$networkQualityMo","networkQualityMonitor","_ref$statsResults","statsResults","defaultStats","_ref$isMultistream","isMultistream","_classCallCheck2","_assertThisInitialized2","mediaType","previousValue","currentValue","isLocal","Error","concat","lastEmittedStartStopEvent","lastEmittedEvent","local","remote","newEvent","emit","file","function","type","successfulCandidatePairId","candidates","newIpAddress","isEmpty","localCandidate","candidateType","address","relayProtocol","relatedAddress","localIpAddress","isSender","isRemote","_this$successfulCandi","id","successfulCandidatePair","localCandidateId","transport","toUpperCase","protocol","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","ipAddress","ip","relatedPort","portNumber","port","networkType","priority","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","_createClass2","key","value","resetStatsResults","_this2","_keys","includes","recv","send","updateMediaStatus","status","_this$meetingMediaSta","_this$meetingMediaSta2","meetingMediaStatus","actual","expected","sendMqaData","_this3","newMqa","cloneDeep","emptyMqaInterval","audioSender","emptyAudioTransmit","audioShareSender","audioReceiver","emptyAudioReceive","audioShareReceiver","videoSender","emptyVideoTransmit","videoShareSender","videoReceiver","emptyVideoReceive","videoShareReceiver","getAudioSenderMqa","baseMediaType","audioTransmit","getAudioReceiverMqa","audioReceive","getVideoSenderMqa","videoTransmit","getVideoReceiverMqa","videoReceive","startsWith","audioSenderStream","emptyAudioTransmitStream","getAudioSenderStreamMqa","isStreamRequested","streams","audioReceiverStream","emptyAudioReceiveStream","getAudioReceiverStreamMqa","videoSenderStream","emptyVideoTransmitStream","getVideoSenderStreamMqa","videoReceiverStream","emptyVideoReceiveStream","getVideoReceiverStreamMqa","intervalMetadata","peerReflexiveIP","cpuInfo","numberOfCores","CpuInfo","getNumLogicalCores","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","MICROPHONE","existingVideoSender","find","item","CAMERA","screenWidth","window","screen","width","screenHeight","height","screenResolution","Math","round","appWindowWidth","innerWidth","appWindowHeight","innerHeight","appWindowSize","intervalNumber","data","updateMediaConnection","mediaConnection","getLocalIpAddress","startAnalyzer","_this4","getStatsAndParse","then","statsInterval","setInterval","analyzerInterval","mqaInterval","MQA_INTERVAL","_promise","resolve","stopAnalyzer","_this5","sendOneLastMqa","clearInterval","parseGetStatsResult","getStatsResult","processOutboundRTPResult","processInboundRTPResult","compareSentAndReceived","parseCandidate","parseAudioSource","filterAndParseGetStatsResults","statsItem","_this6","types","DEFAULT_GET_STATS_FILTER","report","state","videoSenderIndex","newType","direction","currentDirection","localTrackLabel","csi","shareVideoEncoderImplementation","encoderImplementation","_this$successfulCandi2","_this$statsResults","extractAndSetLocalIpAddressInfoForDiagnostics","audioLevel","totalAudioEnergy","compareLastStatsResult","_this7","getCurrentStatsTotals","keyPrefix","reduce","prev","cur","_this7$statsResults$c","getPreviousStatsTotals","_this7$lastStatsResul","currentStats","previousStats","sendAudio","totalPacketsSent","LoggerProxy","logger","info","emitStartStopEvents","currentAudioPacketsReceived","previousAudioPacketsReceived","currentTotalPacketsSent","previousTotalPacketsSent","currentFramesEncoded","previousFramesEncoded","currentFramesSent","previousFramesSent","doesVideoSendExist","some","sendVideo","currentVideoFramesDecoded","previousVideoFramesDecoded","sendShare","framesEncoded","framesSent","currentShareFramesDecoded","previousShareFramesDecoded","_this8","getConnectionState","ConnectionState","Failed","trace","getTransceiverStats","transceiverStats","video","receivers","receiver","i","audio","screenShareVideo","screenShareAudio","senders","sender","JSON","parse","_stringify","sendrecvType","kilobytes","frameWidth","frameHeight","hugeFramesSent","toFixed","keyFramesEncoded","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","qualityLimitationReason","qualityLimitationResolutionChanges","totalRtxPacketsSent","retransmittedPacketsSent","totalRtxBytesSent","retransmittedBytesSent","totalBytesSent","headerBytesSent","isRequested","lastRequestedUpdateTimestamp","requestedBitrate","requestedFrameSize","receiveSlot","ssrc","sourceState","idAndCsi","bytes","totalBytesReceived","currentPacketsLost","packetsLost","totalPacketsLost","packetsReceivedDiff","packetsReceived","totalPacketsReceived","videoFramesReceivedDiff","framesReceived","videoFramesDecodedDiff","framesDecoded","videoFramesDroppedDiff","framesDropped","isActiveSpeaker","lastActiveSpeakerTimestamp","lastActiveSpeakerUpdateTimestamp","currentPacketLossRatio","lastPacketReceivedTimestamp","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","headerBytesReceived","totalRtxPacketsReceived","retransmittedPacketsReceived","totalRtxBytesReceived","retransmittedBytesReceived","jitter","totalSamplesReceived","totalSamplesDecoded","concealedSamples","currentPacketLoss","totalPacketsLostOnReceiver","packetsLostOnReceiver","roundTripTime","reportsReceived","overAllPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {cloneDeep, isEmpty} from 'lodash';\nimport {CpuInfo} from '@webex/web-capabilities';\nimport {ConnectionState} from '@webex/internal-media-core';\nimport EventsScope from '../common/events/events-scope';\nimport {\n DEFAULT_GET_STATS_FILTER,\n STATS,\n MQA_INTERVAL,\n NETWORK_TYPE,\n MEDIA_DEVICES,\n _UNKNOWN_,\n} from '../constants';\nimport {\n emptyAudioReceive,\n emptyAudioTransmit,\n emptyMqaInterval,\n emptyVideoReceive,\n emptyVideoTransmit,\n emptyAudioReceiveStream,\n emptyAudioTransmitStream,\n emptyVideoReceiveStream,\n emptyVideoTransmitStream,\n} from '../mediaQualityMetrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport defaultStats from './global';\nimport {\n getAudioSenderMqa,\n getAudioReceiverMqa,\n getVideoSenderMqa,\n getVideoReceiverMqa,\n getAudioSenderStreamMqa,\n getAudioReceiverStreamMqa,\n getVideoSenderStreamMqa,\n getVideoReceiverStreamMqa,\n isStreamRequested,\n} from './mqaUtil';\nimport {ReceiveSlot} from '../multistream/receiveSlot';\n\nexport const EVENTS = {\n MEDIA_QUALITY: 'MEDIA_QUALITY',\n LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',\n LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',\n REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',\n REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',\n};\n\nconst emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n};\n\nconst emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n};\n\ntype ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;\ntype MediaStatus = {\n actual?: any;\n expected?: any;\n};\n/**\n * Stats Analyzer class that will emit events based on detected quality\n *\n * @export\n * @class StatsAnalyzer\n * @extends {EventsScope}\n */\nexport class StatsAnalyzer extends EventsScope {\n config: any;\n correlationId: any;\n lastEmittedStartStopEvent: any;\n lastMqaDataSent: any;\n lastStatsResults: any;\n meetingMediaStatus: any;\n mqaInterval: NodeJS.Timeout;\n mqaSentCount: any;\n networkQualityMonitor: any;\n mediaConnection: any;\n statsInterval: NodeJS.Timeout;\n statsResults: any;\n statsStarted: any;\n successfulCandidatePair: any;\n localIpAddress: string; // Returns the local IP address for diagnostics. this is the local IP of the interface used for the current media connection a host can have many local Ip Addresses\n shareVideoEncoderImplementation?: string;\n receiveSlotCallback: ReceiveSlotCallback;\n isMultistream: boolean;\n\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config - SDK Configuration Object\n * @param {Function} receiveSlotCallback - Callback used to access receive slots.\n * @param {Object} networkQualityMonitor - Class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults - Default properties for stats\n * @param {boolean | undefined} isMultistream - Param indicating if the media connection is multistream or not\n */\n constructor({\n config,\n receiveSlotCallback = () => undefined,\n networkQualityMonitor = {},\n statsResults = defaultStats,\n isMultistream = false,\n }: {\n config: any;\n receiveSlotCallback: ReceiveSlotCallback;\n networkQualityMonitor: any;\n statsResults?: any;\n isMultistream?: boolean;\n }) {\n super();\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.lastEmittedStartStopEvent = {};\n this.receiveSlotCallback = receiveSlotCallback;\n this.successfulCandidatePair = {};\n this.localIpAddress = '';\n this.isMultistream = isMultistream;\n }\n\n /**\n * Resets cumulative stats arrays.\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n resetStatsResults() {\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n }\n });\n }\n\n /**\n * sets mediaStatus status for analyzing metrics\n *\n * @public\n * @param {Object} status for the audio and video\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public updateMediaStatus(status: MediaStatus) {\n this.meetingMediaStatus = {\n actual: {\n ...this.meetingMediaStatus?.actual,\n ...status?.actual,\n },\n expected: {\n ...this.meetingMediaStatus?.expected,\n ...status?.expected,\n },\n };\n }\n\n /**\n * captures MQA data from media connection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const newMqa = cloneDeep(emptyMqaInterval);\n\n // Fill in empty stats items for lastMqaDataSent\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (!this.lastMqaDataSent[mediaType]) {\n this.lastMqaDataSent[mediaType] = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {\n this.lastMqaDataSent[mediaType].send = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {\n this.lastMqaDataSent[mediaType].recv = {};\n }\n });\n\n // Create stats the first level, totals for senders and receivers\n const audioSender = cloneDeep(emptyAudioTransmit);\n const audioShareSender = cloneDeep(emptyAudioTransmit);\n const audioReceiver = cloneDeep(emptyAudioReceive);\n const audioShareReceiver = cloneDeep(emptyAudioReceive);\n const videoSender = cloneDeep(emptyVideoTransmit);\n const videoShareSender = cloneDeep(emptyVideoTransmit);\n const videoReceiver = cloneDeep(emptyVideoReceive);\n const videoShareReceiver = cloneDeep(emptyVideoReceive);\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-send',\n isMultistream: this.isMultistream,\n });\n newMqa.audioTransmit.push(audioSender);\n\n getAudioSenderMqa({\n audioSender: audioShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-send',\n isMultistream: this.isMultistream,\n });\n newMqa.audioTransmit.push(audioShareSender);\n\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.audioReceive.push(audioReceiver);\n\n getAudioReceiverMqa({\n audioReceiver: audioShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.audioReceive.push(audioShareReceiver);\n\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-send',\n isMultistream: this.isMultistream,\n });\n newMqa.videoTransmit.push(videoSender);\n\n getVideoSenderMqa({\n videoSender: videoShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-send',\n isMultistream: this.isMultistream,\n });\n newMqa.videoTransmit.push(videoShareSender);\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.videoReceive.push(videoReceiver);\n\n getVideoReceiverMqa({\n videoReceiver: videoShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-recv',\n isMultistream: this.isMultistream,\n });\n newMqa.videoReceive.push(videoShareReceiver);\n\n // Add stats for individual streams\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.startsWith('audio-send')) {\n const audioSenderStream = cloneDeep(emptyAudioTransmitStream);\n\n getAudioSenderStreamMqa({\n audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.audioTransmit[0].streams.push(audioSenderStream);\n }\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-share-send')) {\n const audioSenderStream = cloneDeep(emptyAudioTransmitStream);\n\n getAudioSenderStreamMqa({\n audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.audioTransmit[1].streams.push(audioSenderStream);\n }\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-recv')) {\n const audioReceiverStream = cloneDeep(emptyAudioReceiveStream);\n\n getAudioReceiverStreamMqa({\n audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.audioReceive[0].streams.push(audioReceiverStream);\n }\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('audio-share-recv')) {\n const audioReceiverStream = cloneDeep(emptyAudioReceiveStream);\n\n getAudioReceiverStreamMqa({\n audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.audioReceive[1].streams.push(audioReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-send-layer')) {\n // We only want the stream-specific stats we get with video-send-layer-0, video-send-layer-1, etc.\n const videoSenderStream = cloneDeep(emptyVideoTransmitStream);\n\n getVideoSenderStreamMqa({\n videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.videoTransmit[0].streams.push(videoSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-share-send')) {\n const videoSenderStream = cloneDeep(emptyVideoTransmitStream);\n\n getVideoSenderStreamMqa({\n videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.SEND_DIRECTION)) {\n newMqa.videoTransmit[1].streams.push(videoSenderStream);\n }\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-recv')) {\n const videoReceiverStream = cloneDeep(emptyVideoReceiveStream);\n\n getVideoReceiverStreamMqa({\n videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.videoReceive[0].streams.push(videoReceiverStream);\n }\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-share-recv')) {\n const videoReceiverStream = cloneDeep(emptyVideoReceiveStream);\n\n getVideoReceiverStreamMqa({\n videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n if (isStreamRequested(this.statsResults, mediaType, STATS.RECEIVE_DIRECTION)) {\n newMqa.videoReceive[1].streams.push(videoReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n }\n });\n\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n\n newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;\n\n // Adding peripheral information\n newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.MICROPHONE,\n });\n }\n\n const existingVideoSender = Object.keys(this.statsResults).find((item) =>\n item.includes('video-send')\n );\n\n if (existingVideoSender) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.CAMERA,\n });\n }\n\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n\n newMqa.intervalMetadata.screenWidth = window.screen.width;\n newMqa.intervalMetadata.screenHeight = window.screen.height;\n newMqa.intervalMetadata.screenResolution = Math.round(\n (window.screen.width * window.screen.height) / 256\n );\n newMqa.intervalMetadata.appWindowWidth = window.innerWidth;\n newMqa.intervalMetadata.appWindowHeight = window.innerHeight;\n newMqa.intervalMetadata.appWindowSize = Math.round(\n (window.innerWidth * window.innerHeight) / 256\n );\n\n this.mqaSentCount += 1;\n\n newMqa.intervalNumber = this.mqaSentCount;\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData',\n },\n EVENTS.MEDIA_QUALITY,\n {\n data: newMqa,\n // @ts-ignore\n networkType: newMqa.networkType,\n }\n );\n }\n\n /**\n * updated the media connection when changed\n *\n * @private\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {void}\n */\n updateMediaConnection(mediaConnection: any) {\n this.mediaConnection = mediaConnection;\n }\n\n /**\n * Returns the local IP address for diagnostics.\n * this is the local IP of the interface used for the current media connection\n * a host can have many local Ip Addresses\n * @returns {string | undefined} The local IP address.\n */\n getLocalIpAddress(): string {\n return this.localIpAddress;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {Promise}\n */\n public startAnalyzer(mediaConnection: any) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n // Trigger initial fetch\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTERVAL);\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public stopAnalyzer() {\n const sendOneLastMqa = this.mqaInterval && this.statsInterval;\n\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Parse a single result of get stats\n *\n * @private\n * @param {*} getStatsResult\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private parseGetStatsResult(getStatsResult: any, type: string, isSender: boolean) {\n if (!getStatsResult) {\n return;\n }\n\n // Generate empty stats results\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = cloneDeep(emptyReceiver);\n }\n\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n this.parseAudioSource(getStatsResult, type);\n break;\n default:\n break;\n }\n }\n\n /**\n * Filters the get stats results for types\n * @private\n * @param {Array} statsItem\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n // get the successful candidate pair before parsing stats.\n statsItem.report.forEach((report) => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n\n let videoSenderIndex = 0;\n statsItem.report.forEach((result) => {\n if (types.includes(result.type)) {\n // if the video sender has multiple streams in the report, it is a new stream object.\n if (type === 'video-send' && result.type === 'outbound-rtp') {\n const newType = `video-send-layer-${videoSenderIndex}`;\n this.parseGetStatsResult(result, newType, isSender);\n videoSenderIndex += 1;\n\n this.statsResults[newType].direction = statsItem.currentDirection;\n this.statsResults[newType].trackLabel = statsItem.localTrackLabel;\n this.statsResults[newType].csi = statsItem.csi;\n } else if (type === 'video-share-send' && result.type === 'outbound-rtp') {\n this.shareVideoEncoderImplementation = result.encoderImplementation;\n this.parseGetStatsResult(result, type, isSender);\n } else {\n this.parseGetStatsResult(result, type, isSender);\n }\n }\n });\n\n if (this.statsResults[type]) {\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n this.extractAndSetLocalIpAddressInfoForDiagnostics(\n this.successfulCandidatePair?.localCandidateId,\n this.statsResults?.candidates\n );\n // reset the successful candidate pair.\n this.successfulCandidatePair = {};\n }\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result: any, type: any) {\n if (!result) {\n return;\n }\n\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n\n /**\n * emits started/stopped events for local/remote media by checking\n * if given values are increasing or not. The previousValue, currentValue\n * params can be any numerical value like number of receive packets or\n * decoded frames, etc.\n *\n * @private\n * @param {string} mediaType\n * @param {number} previousValue - value to compare\n * @param {number} currentValue - value to compare (must be same type of value as previousValue)\n * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n emitStartStopEvents = (\n mediaType: string,\n previousValue: number,\n currentValue: number,\n isLocal: boolean\n ) => {\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(`Unsupported mediaType: ${mediaType}`);\n }\n\n // eslint-disable-next-line no-param-reassign\n if (previousValue === undefined) previousValue = 0;\n // eslint-disable-next-line no-param-reassign\n if (currentValue === undefined) currentValue = 0;\n\n if (!this.lastEmittedStartStopEvent[mediaType]) {\n this.lastEmittedStartStopEvent[mediaType] = {};\n }\n\n const lastEmittedEvent = isLocal\n ? this.lastEmittedStartStopEvent[mediaType].local\n : this.lastEmittedStartStopEvent[mediaType].remote;\n\n let newEvent;\n\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;\n }\n\n if (newEvent && lastEmittedEvent !== newEvent) {\n if (isLocal) {\n this.lastEmittedStartStopEvent[mediaType].local = newEvent;\n } else {\n this.lastEmittedStartStopEvent[mediaType].remote = newEvent;\n }\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult',\n },\n newEvent,\n {\n type: mediaType,\n }\n );\n }\n };\n\n /**\n * compares current and previous stats to check if packets are not sent\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n private compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce(\n (prev, cur) =>\n prev +\n (this.statsResults[cur]?.[keyPrefix.includes('send') ? 'send' : 'recv'][value] || 0),\n 0\n );\n\n const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce(\n (prev, cur) =>\n prev +\n (this.lastStatsResults[cur]?.[keyPrefix.includes('send') ? 'send' : 'recv'][value] ||\n 0),\n 0\n );\n\n // Audio Transmit\n if (this.lastStatsResults['audio-send']) {\n // compare audio stats sent\n // NOTE: relies on there being only one sender.\n const currentStats = this.statsResults['audio-send'].send;\n const previousStats = this.lastStatsResults['audio-send'].send;\n\n if (\n (this.meetingMediaStatus.expected.sendAudio &&\n currentStats.totalPacketsSent === previousStats.totalPacketsSent) ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n (this.meetingMediaStatus.expected.sendAudio &&\n currentStats.totalAudioEnergy === previousStats.totalAudioEnergy) ||\n currentStats.totalAudioEnergy === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,\n currentStats.totalAudioEnergy\n );\n }\n\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user`\n );\n }\n }\n\n this.emitStartStopEvents(\n 'audio',\n previousStats.totalPacketsSent,\n currentStats.totalPacketsSent,\n true\n );\n }\n\n // Audio Receive\n const currentAudioPacketsReceived = getCurrentStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n const previousAudioPacketsReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n\n this.emitStartStopEvents(\n 'audio',\n previousAudioPacketsReceived,\n currentAudioPacketsReceived,\n false\n );\n\n const currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');\n const previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');\n\n const currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');\n const previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');\n\n const currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');\n const previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');\n\n const doesVideoSendExist = Object.keys(this.lastStatsResults).some((item) =>\n item.includes('video-send')\n );\n\n // Video Transmit\n if (doesVideoSendExist) {\n // compare video stats sent\n\n if (\n this.meetingMediaStatus.expected.sendVideo &&\n (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,\n currentTotalPacketsSent\n );\n } else {\n if (\n this.meetingMediaStatus.expected.sendVideo &&\n (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,\n currentFramesEncoded\n );\n }\n\n if (\n this.meetingMediaStatus.expected.sendVideo &&\n (currentFramesSent === previousFramesSent || currentFramesSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,\n currentFramesSent\n );\n }\n }\n\n this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);\n }\n\n // Video Receive\n const currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n const previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n\n this.emitStartStopEvents(\n 'video',\n previousVideoFramesDecoded,\n currentVideoFramesDecoded,\n false\n );\n\n // Share Transmit\n if (this.lastStatsResults['video-share-send']) {\n // compare share stats sent\n\n const currentStats = this.statsResults['video-share-send'].send;\n const previousStats = this.lastStatsResults['video-share-send'].send;\n\n if (\n this.meetingMediaStatus.expected.sendShare &&\n (currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n this.meetingMediaStatus.expected.sendShare &&\n (currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.meetingMediaStatus.expected.sendShare &&\n (this.statsResults['video-share-send'].send.framesSent ===\n this.lastStatsResults['video-share-send'].send.framesSent ||\n this.statsResults['video-share-send'].send.framesSent === 0)\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,\n this.statsResults['video-share-send'].send.framesSent\n );\n }\n }\n\n this.emitStartStopEvents('share', previousStats.framesSent, currentStats.framesSent, true);\n }\n\n // Share receive\n const currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n const previousShareFramesDecoded = getPreviousStatsTotals(\n 'video-share-recv',\n 'framesDecoded'\n );\n\n this.emitStartStopEvents(\n 'share',\n previousShareFramesDecoded,\n currentShareFramesDecoded,\n false\n );\n }\n }\n\n /**\n * Does a `getStats` on all the transceivers and parses the results\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {Promise}\n */\n private getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n\n if (\n this.mediaConnection &&\n this.mediaConnection.getConnectionState() === ConnectionState.Failed\n ) {\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'\n );\n\n return Promise.resolve();\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n\n return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {\n transceiverStats.video.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-recv-${i}`, false)\n );\n transceiverStats.audio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-recv-${i}`, false)\n );\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-share-recv-${i}`, false)\n );\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-share-recv-${i}`, false)\n );\n\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n\n this.compareLastStatsResult();\n\n // Save the last results to compare with the current\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'\n );\n });\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processOutboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n const kilobytes = 0;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;\n\n // Data saved to send MQA metrics\n\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation =\n result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason =\n result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =\n result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent =\n result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =\n result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp =\n result.lastRequestedUpdateTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n }\n }\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processInboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n const receiveSlot = this.receiveSlotCallback(result.ssrc);\n const sourceState = receiveSlot?.sourceState;\n const idAndCsi = receiveSlot\n ? `id: \"${receiveSlot.id || ''}\"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`\n : '';\n\n const bytes =\n result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n let currentPacketsLost =\n result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;\n if (currentPacketsLost < 0) {\n currentPacketsLost = 0;\n }\n const packetsReceivedDiff =\n result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n if (packetsReceivedDiff === 0) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total packets received on slot: `,\n result.packetsReceived\n );\n }\n }\n\n if (mediaType.startsWith('video') || mediaType.startsWith('share')) {\n const videoFramesReceivedDiff =\n result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;\n\n if (videoFramesReceivedDiff === 0) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total frames received on slot: `,\n result.framesReceived\n );\n }\n }\n\n const videoFramesDecodedDiff =\n result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;\n\n if (videoFramesDecodedDiff === 0) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total frames decoded on slot: `,\n result.framesDecoded\n );\n }\n }\n\n const videoFramesDroppedDiff =\n result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;\n\n if (videoFramesDroppedDiff > 10) {\n if (receiveSlot && sourceState === 'live') {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ${mediaType}, receive slot ${idAndCsi}. Total frames dropped on slot: `,\n result.framesDropped\n );\n }\n }\n }\n\n if (mediaType.startsWith('video-recv')) {\n this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;\n this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp =\n result.lastActiveSpeakerUpdateTimestamp;\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =\n currentPacketsLost > 0\n ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost)\n : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio\n );\n }\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost =\n result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n\n // From Thin\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;\n\n this.statsResults[mediaType][sendrecvType].decoderImplementation =\n result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived =\n result.retransmittedPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived =\n result.retransmittedBytesReceived;\n\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n\n // Audio stats\n\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived =\n result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =\n result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp =\n result.lastRequestedUpdateTimestamp;\n }\n }\n\n /**\n * extracts the local Ip address from the statsResult object by looking at stats results candidates\n * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is\n * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc\n * note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address\n * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP\n * @private\n * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.\n * @param {Object} candidates - the stats result candidates\n * @returns {void}\n */\n extractAndSetLocalIpAddressInfoForDiagnostics = (\n successfulCandidatePairId: string,\n candidates: {[key: string]: Record<string, unknown>}\n ) => {\n let newIpAddress = '';\n if (successfulCandidatePairId && !isEmpty(candidates)) {\n const localCandidate = candidates[successfulCandidatePairId];\n if (localCandidate) {\n if (localCandidate.candidateType === 'host') {\n // if it's a host candidate, use the address property - it will be the local IP\n newIpAddress = `${localCandidate.address}`;\n } else if (localCandidate.candidateType === 'prflx') {\n // if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)\n // then look at the relatedAddress - it will be the local\n //\n // Firefox doesn't populate the relayProtocol property\n if (!localCandidate.relayProtocol) {\n newIpAddress = `${localCandidate.relatedAddress}`;\n } else {\n // if it's a peer reflexive candidate and we are using a relay -\n // in that case the relatedAddress will be the IP of the TURN server (Linus),\n // so we can only look at the address, but it might be local IP or public IP,\n // depending on if the user is behind a NAT or not\n newIpAddress = `${localCandidate.address}`;\n }\n }\n }\n }\n this.localIpAddress = newIpAddress;\n };\n\n /**\n * Processes remote and local candidate result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @param {boolean} isSender\n * @param {boolean} isRemote\n *\n * @returns {void}\n */\n parseCandidate = (result: any, type: any, isSender: boolean, isRemote: boolean) => {\n if (!result || !result.id) {\n return;\n }\n\n // We only care about the successful local candidate\n if (this.successfulCandidatePair?.localCandidateId !== result.id) {\n return;\n }\n\n let transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!this.statsResults.candidates) {\n this.statsResults.candidates = {};\n }\n\n this.statsResults.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip, // TODO: add ports\n relatedAddress: result.relatedAddress,\n relatedPort: result.relatedPort,\n relayProtocol: result.relayProtocol,\n protocol: result.protocol,\n address: result.address,\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type,\n };\n\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n\n this.statsResults.connectionType[ipType].networkType =\n result.networkType === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n // Don't compare on transceivers without a sender.\n if (!type || !this.statsResults[type].send) {\n return;\n }\n\n const mediaType = type;\n\n const currentPacketLoss =\n result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n\n // Total packloss ratio on this video section of the call\n this.statsResults[mediaType].send.overAllPacketLossRatio =\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0\n ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /\n this.statsResults[mediaType].send.totalPacketsSent\n : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio =\n this.statsResults[mediaType].send.packetsLostOnReceiver > 0\n ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /\n (this.statsResults[mediaType].send.packetsSent +\n this.statsResults[mediaType].send.packetsLostOnReceiver)\n : 0;\n\n if (\n this.statsResults[mediaType].send.maxPacketLossRatio <\n this.statsResults[mediaType].send.currentPacketLossRatio\n ) {\n this.statsResults[mediaType].send.maxPacketLossRatio =\n this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults,\n });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AAQA,IAAAM,OAAA,GAAAN,OAAA;AAWA,IAAAO,YAAA,GAAAH,sBAAA,CAAAJ,OAAA;AAEA,IAAAQ,OAAA,GAAAJ,sBAAA,CAAAJ,OAAA;AACA,IAAAS,QAAA,GAAAT,OAAA;AAUmB,SAAAU,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAqB,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAV,OAAA,EAAAK,OAAA,GAAAM,MAAA,MAAAL,yBAAA,QAAAM,SAAA,OAAAF,gBAAA,CAAAV,OAAA,QAAAa,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAL,KAAA,EAAAd,SAAA,EAAAiB,SAAA,YAAAD,MAAA,GAAAF,KAAA,CAAAhB,KAAA,OAAAE,SAAA,gBAAAoB,2BAAA,CAAAf,OAAA,QAAAW,MAAA;AAAA,SAAAJ,0BAAA,eAAAS,OAAA,qBAAAF,kBAAA,oBAAAA,kBAAA,CAAAG,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAR,kBAAA,CAAAK,OAAA,8CAAApC,CAAA;AAGZ,IAAMwC,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAG;EACpBE,aAAa,EAAE,eAAe;EAC9BC,mBAAmB,EAAE,qBAAqB;EAC1CC,mBAAmB,EAAE,qBAAqB;EAC1CC,oBAAoB,EAAE,sBAAsB;EAC5CC,oBAAoB,EAAE;AACxB,CAAC;AAED,IAAMC,WAAW,GAAG;EAClBC,UAAU,EAAE,EAAE;EACdC,kBAAkB,EAAE,CAAC;EACrBC,kBAAkB,EAAE,CAAC;EACrBC,SAAS,EAAE,CAAC;EACZC,gBAAgB,EAAE,EAAE;EACpBC,iBAAiB,EAAE;AACrB,CAAC;AAED,IAAMC,aAAa,GAAG;EACpBJ,kBAAkB,EAAE,CAAC;EACrBK,aAAa,EAAE,CAAC;EAChBC,aAAa,EAAE,EAAE;EACjBH,iBAAiB,EAAE;AACrB,CAAC;AAOD;AACA;AACA;AACA;AACA;AACA;AACA;AANA,IAOaI,aAAa,GAAAhB,OAAA,CAAAgB,aAAA,0BAAAC,YAAA;EAAA,IAAAC,UAAA,CAAA1C,OAAA,EAAAwC,aAAA,EAAAC,YAAA;EAAA,IAAAE,MAAA,GAAAvC,YAAA,CAAAoC,aAAA;EAoBxB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,SAAAA,cAAAI,IAAA,EAYG;IAAA,IAAAC,KAAA;IAAA,IAXDC,MAAM,GAAAF,IAAA,CAANE,MAAM;MAAAC,qBAAA,GAAAH,IAAA,CACNI,mBAAmB;MAAnBA,mBAAmB,GAAAD,qBAAA,cAAG;QAAA,OAAME,SAAS;MAAA,IAAAF,qBAAA;MAAAG,qBAAA,GAAAN,IAAA,CACrCO,qBAAqB;MAArBA,qBAAqB,GAAAD,qBAAA,cAAG,CAAC,CAAC,GAAAA,qBAAA;MAAAE,iBAAA,GAAAR,IAAA,CAC1BS,YAAY;MAAZA,YAAY,GAAAD,iBAAA,cAAGE,eAAY,GAAAF,iBAAA;MAAAG,kBAAA,GAAAX,IAAA,CAC3BY,aAAa;MAAbA,aAAa,GAAAD,kBAAA,cAAG,KAAK,GAAAA,kBAAA;IAAA,IAAAE,gBAAA,CAAAzD,OAAA,QAAAwC,aAAA;IAQrBK,KAAA,GAAAF,MAAA,CAAArB,IAAA;IAAQ,IAAAvB,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IA5Bc;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAAA,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA;IAqjBxB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAbE,IAAA9C,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA,0BAcsB,UACpBc,SAAiB,EACjBC,aAAqB,EACrBC,YAAoB,EACpBC,OAAgB,EACb;MACH,IAAIH,SAAS,KAAK,OAAO,IAAIA,SAAS,KAAK,OAAO,IAAIA,SAAS,KAAK,OAAO,EAAE;QAC3E,MAAM,IAAII,KAAK,2BAAAC,MAAA,CAA2BL,SAAS,CAAE,CAAC;MACxD;;MAEA;MACA,IAAIC,aAAa,KAAKX,SAAS,EAAEW,aAAa,GAAG,CAAC;MAClD;MACA,IAAIC,YAAY,KAAKZ,SAAS,EAAEY,YAAY,GAAG,CAAC;MAEhD,IAAI,CAAChB,KAAA,CAAKoB,yBAAyB,CAACN,SAAS,CAAC,EAAE;QAC9Cd,KAAA,CAAKoB,yBAAyB,CAACN,SAAS,CAAC,GAAG,CAAC,CAAC;MAChD;MAEA,IAAMO,gBAAgB,GAAGJ,OAAO,GAC5BjB,KAAA,CAAKoB,yBAAyB,CAACN,SAAS,CAAC,CAACQ,KAAK,GAC/CtB,KAAA,CAAKoB,yBAAyB,CAACN,SAAS,CAAC,CAACS,MAAM;MAEpD,IAAIC,QAAQ;MAEZ,IAAIR,YAAY,GAAGD,aAAa,GAAG,CAAC,EAAE;QACpCS,QAAQ,GAAGP,OAAO,GAAGvC,MAAM,CAACG,mBAAmB,GAAGH,MAAM,CAACK,oBAAoB;MAC/E,CAAC,MAAM,IAAIiC,YAAY,KAAKD,aAAa,IAAIC,YAAY,GAAG,CAAC,EAAE;QAC7DQ,QAAQ,GAAGP,OAAO,GAAGvC,MAAM,CAACI,mBAAmB,GAAGJ,MAAM,CAACM,oBAAoB;MAC/E;MAEA,IAAIwC,QAAQ,IAAIH,gBAAgB,KAAKG,QAAQ,EAAE;QAC7C,IAAIP,OAAO,EAAE;UACXjB,KAAA,CAAKoB,yBAAyB,CAACN,SAAS,CAAC,CAACQ,KAAK,GAAGE,QAAQ;QAC5D,CAAC,MAAM;UACLxB,KAAA,CAAKoB,yBAAyB,CAACN,SAAS,CAAC,CAACS,MAAM,GAAGC,QAAQ;QAC7D;QACAxB,KAAA,CAAKyB,IAAI,CACP;UACEC,IAAI,EAAE,qBAAqB;UAC3BC,QAAQ,EAAE;QACZ,CAAC,EACDH,QAAQ,EACR;UACEI,IAAI,EAAEd;QACR,CACF,CAAC;MACH;IACF,CAAC;IAofD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAVE,IAAA5D,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA,oDAWgD,UAC9C6B,yBAAiC,EACjCC,UAAoD,EACjD;MACH,IAAIC,YAAY,GAAG,EAAE;MACrB,IAAIF,yBAAyB,IAAI,CAAC,IAAAG,eAAO,EAACF,UAAU,CAAC,EAAE;QACrD,IAAMG,cAAc,GAAGH,UAAU,CAACD,yBAAyB,CAAC;QAC5D,IAAII,cAAc,EAAE;UAClB,IAAIA,cAAc,CAACC,aAAa,KAAK,MAAM,EAAE;YAC3C;YACAH,YAAY,MAAAZ,MAAA,CAAMc,cAAc,CAACE,OAAO,CAAE;UAC5C,CAAC,MAAM,IAAIF,cAAc,CAACC,aAAa,KAAK,OAAO,EAAE;YACnD;YACA;YACA;YACA;YACA,IAAI,CAACD,cAAc,CAACG,aAAa,EAAE;cACjCL,YAAY,MAAAZ,MAAA,CAAMc,cAAc,CAACI,cAAc,CAAE;YACnD,CAAC,MAAM;cACL;cACA;cACA;cACA;cACAN,YAAY,MAAAZ,MAAA,CAAMc,cAAc,CAACE,OAAO,CAAE;YAC5C;UACF;QACF;MACF;MACAnC,KAAA,CAAKsC,cAAc,GAAGP,YAAY;IACpC,CAAC;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IATE,IAAA7E,gBAAA,CAAAC,OAAA,MAAA0D,uBAAA,CAAA1D,OAAA,EAAA6C,KAAA,qBAUiB,UAAClC,MAAW,EAAE8D,IAAS,EAAEW,QAAiB,EAAEC,QAAiB,EAAK;MAAA,IAAAC,qBAAA;MACjF,IAAI,CAAC3E,MAAM,IAAI,CAACA,MAAM,CAAC4E,EAAE,EAAE;QACzB;MACF;;MAEA;MACA,IAAI,EAAAD,qBAAA,GAAAzC,KAAA,CAAK2C,uBAAuB,cAAAF,qBAAA,uBAA5BA,qBAAA,CAA8BG,gBAAgB,MAAK9E,MAAM,CAAC4E,EAAE,EAAE;QAChE;MACF;MAEA,IAAIG,SAAS;MACb,IAAI/E,MAAM,CAACsE,aAAa,EAAE;QACxBS,SAAS,GAAG/E,MAAM,CAACsE,aAAa,CAACU,WAAW,CAAC,CAAC;MAChD,CAAC,MAAM,IAAIhF,MAAM,CAACiF,QAAQ,EAAE;QAC1BF,SAAS,GAAG/E,MAAM,CAACiF,QAAQ,CAACD,WAAW,CAAC,CAAC;MAC3C;MAEA,IAAME,YAAY,GAAGT,QAAQ,GAAGU,gBAAK,CAACC,cAAc,GAAGD,gBAAK,CAACE,iBAAiB;MAC9E,IAAMC,MAAM,GAAGZ,QAAQ,GAAGS,gBAAK,CAACI,MAAM,GAAGJ,gBAAK,CAACK,KAAK;MAEpD,IAAI,CAACtD,KAAA,CAAKQ,YAAY,CAACsB,UAAU,EAAE;QACjC9B,KAAA,CAAKQ,YAAY,CAACsB,UAAU,GAAG,CAAC,CAAC;MACnC;MAEA9B,KAAA,CAAKQ,YAAY,CAACsB,UAAU,CAAChE,MAAM,CAAC4E,EAAE,CAAC,GAAG;QACxCR,aAAa,EAAEpE,MAAM,CAACoE,aAAa;QACnCqB,SAAS,EAAEzF,MAAM,CAAC0F,EAAE;QAAE;QACtBnB,cAAc,EAAEvE,MAAM,CAACuE,cAAc;QACrCoB,WAAW,EAAE3F,MAAM,CAAC2F,WAAW;QAC/BrB,aAAa,EAAEtE,MAAM,CAACsE,aAAa;QACnCW,QAAQ,EAAEjF,MAAM,CAACiF,QAAQ;QACzBZ,OAAO,EAAErE,MAAM,CAACqE,OAAO;QACvBuB,UAAU,EAAE5F,MAAM,CAAC6F,IAAI;QACvBC,WAAW,EAAE9F,MAAM,CAAC8F,WAAW;QAC/BC,QAAQ,EAAE/F,MAAM,CAAC+F,QAAQ;QACzBhB,SAAS,EAATA,SAAS;QACTiB,SAAS,EAAEhG,MAAM,CAACiG,IAAI;QACtBrB,EAAE,EAAE5E,MAAM,CAAC4E,EAAE;QACbd,IAAI,EAAE9D,MAAM,CAAC8D;MACf,CAAC;MAED5B,KAAA,CAAKQ,YAAY,CAACwD,cAAc,CAACZ,MAAM,CAAC,CAAClB,aAAa,GAAGpE,MAAM,CAACoE,aAAa;MAC7ElC,KAAA,CAAKQ,YAAY,CAACwD,cAAc,CAACZ,MAAM,CAAC,CAACG,SAAS,GAAGzF,MAAM,CAACyF,SAAS;MAErEvD,KAAA,CAAKQ,YAAY,CAACwD,cAAc,CAACZ,MAAM,CAAC,CAACQ,WAAW,GAClD9F,MAAM,CAAC8F,WAAW,KAAKK,uBAAY,CAACC,GAAG,GAAGD,uBAAY,CAACE,OAAO,GAAGrG,MAAM,CAAC8F,WAAW;MACrF5D,KAAA,CAAKQ,YAAY,CAACwD,cAAc,CAACZ,MAAM,CAAC,CAACP,SAAS,GAAGA,SAAS;MAE9D7C,KAAA,CAAKQ,YAAY,CAACoB,IAAI,CAAC,CAACoB,YAAY,CAAC,CAACoB,kBAAkB,GAAGtG,MAAM,CAACsG,kBAAkB;IACtF,CAAC;IA/qCCpE,KAAA,CAAKqE,YAAY,GAAG,KAAK;IACzBrE,KAAA,CAAKQ,YAAY,GAAGA,YAAY;IAChCR,KAAA,CAAKsE,gBAAgB,GAAG,IAAI;IAC5BtE,KAAA,CAAKC,MAAM,GAAGA,MAAM;IACpBD,KAAA,CAAKM,qBAAqB,GAAGA,qBAAqB;IAClDN,KAAA,CAAKuE,aAAa,GAAGtE,MAAM,CAACsE,aAAa;IACzCvE,KAAA,CAAKwE,YAAY,GAAG,CAAC,CAAC;IACtBxE,KAAA,CAAKyE,eAAe,GAAG,CAAC,CAAC;IACzBzE,KAAA,CAAKoB,yBAAyB,GAAG,CAAC,CAAC;IACnCpB,KAAA,CAAKG,mBAAmB,GAAGA,mBAAmB;IAC9CH,KAAA,CAAK2C,uBAAuB,GAAG,CAAC,CAAC;IACjC3C,KAAA,CAAKsC,cAAc,GAAG,EAAE;IACxBtC,KAAA,CAAKW,aAAa,GAAGA,aAAa;IAAC,OAAAX,KAAA;EACrC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE,IAAA0E,aAAA,CAAAvH,OAAA,EAAAwC,aAAA;IAAAgF,GAAA;IAAAC,KAAA,EAOA,SAAAC,kBAAA,EAAoB;MAAA,IAAAC,MAAA;MAClB,IAAAC,KAAA,CAAA5H,OAAA,EAAY,IAAI,CAACqD,YAAY,CAAC,CAACvD,OAAO,CAAC,UAAC6D,SAAS,EAAK;QACpD,IAAIA,SAAS,CAACkE,QAAQ,CAAC,MAAM,CAAC,EAAE;UAC9BF,MAAI,CAACtE,YAAY,CAACM,SAAS,CAAC,CAACmE,IAAI,CAACvF,aAAa,GAAG,EAAE;QACtD;QAEA,IAAIoB,SAAS,CAACkE,QAAQ,CAAC,MAAM,CAAC,EAAE;UAC9BF,MAAI,CAACtE,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC5F,gBAAgB,GAAG,EAAE;UACvDwF,MAAI,CAACtE,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC3F,iBAAiB,GAAG,EAAE;QAC1D;MACF,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAoF,GAAA;IAAAC,KAAA,EAQA,SAAAO,kBAAyBC,MAAmB,EAAE;MAAA,IAAAC,qBAAA,EAAAC,sBAAA;MAC5C,IAAI,CAACC,kBAAkB,GAAG;QACxBC,MAAM,EAAA3I,aAAA,CAAAA,aAAA,MAAAwI,qBAAA,GACD,IAAI,CAACE,kBAAkB,cAAAF,qBAAA,uBAAvBA,qBAAA,CAAyBG,MAAM,GAC/BJ,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEI,MAAM,CAClB;QACDC,QAAQ,EAAA5I,aAAA,CAAAA,aAAA,MAAAyI,sBAAA,GACH,IAAI,CAACC,kBAAkB,cAAAD,sBAAA,uBAAvBA,sBAAA,CAAyBG,QAAQ,GACjCL,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEK,QAAQ;MAEvB,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAd,GAAA;IAAAC,KAAA,EAOA,SAAAc,YAAA,EAAc;MAAA,IAAAC,MAAA;MACZ,IAAMC,MAAM,GAAG,IAAAC,iBAAS,EAACC,wBAAgB,CAAC;;MAE1C;MACA,IAAAf,KAAA,CAAA5H,OAAA,EAAY,IAAI,CAACqD,YAAY,CAAC,CAACvD,OAAO,CAAC,UAAC6D,SAAS,EAAK;QACpD,IAAI,CAAC6E,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,EAAE;UACpC6E,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,GAAG,CAAC,CAAC;QACtC;QAEA,IAAI,CAAC6E,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACoE,IAAI,IAAIpE,SAAS,CAACkE,QAAQ,CAAC,OAAO,CAAC,EAAE;UACxEW,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACoE,IAAI,GAAG,CAAC,CAAC;QAC3C;QAEA,IAAI,CAACS,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACmE,IAAI,IAAInE,SAAS,CAACkE,QAAQ,CAAC,OAAO,CAAC,EAAE;UACxEW,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACmE,IAAI,GAAG,CAAC,CAAC;QAC3C;MACF,CAAC,CAAC;;MAEF;MACA,IAAMc,WAAW,GAAG,IAAAF,iBAAS,EAACG,0BAAkB,CAAC;MACjD,IAAMC,gBAAgB,GAAG,IAAAJ,iBAAS,EAACG,0BAAkB,CAAC;MACtD,IAAME,aAAa,GAAG,IAAAL,iBAAS,EAACM,yBAAiB,CAAC;MAClD,IAAMC,kBAAkB,GAAG,IAAAP,iBAAS,EAACM,yBAAiB,CAAC;MACvD,IAAME,WAAW,GAAG,IAAAR,iBAAS,EAACS,0BAAkB,CAAC;MACjD,IAAMC,gBAAgB,GAAG,IAAAV,iBAAS,EAACS,0BAAkB,CAAC;MACtD,IAAME,aAAa,GAAG,IAAAX,iBAAS,EAACY,yBAAiB,CAAC;MAClD,IAAMC,kBAAkB,GAAG,IAAAb,iBAAS,EAACY,yBAAiB,CAAC;MAEvD,IAAAE,0BAAiB,EAAC;QAChBZ,WAAW,EAAXA,WAAW;QACXvF,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,YAAY;QAC3BjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACiB,aAAa,CAAClK,IAAI,CAACoJ,WAAW,CAAC;MAEtC,IAAAY,0BAAiB,EAAC;QAChBZ,WAAW,EAAEE,gBAAgB;QAC7BzF,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,kBAAkB;QACjCjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACiB,aAAa,CAAClK,IAAI,CAACsJ,gBAAgB,CAAC;MAE3C,IAAAa,4BAAmB,EAAC;QAClBZ,aAAa,EAAbA,aAAa;QACb1F,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,YAAY;QAC3BjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACmB,YAAY,CAACpK,IAAI,CAACuJ,aAAa,CAAC;MAEvC,IAAAY,4BAAmB,EAAC;QAClBZ,aAAa,EAAEE,kBAAkB;QACjC5F,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,kBAAkB;QACjCjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACmB,YAAY,CAACpK,IAAI,CAACyJ,kBAAkB,CAAC;MAE5C,IAAAY,0BAAiB,EAAC;QAChBX,WAAW,EAAXA,WAAW;QACX7F,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,YAAY;QAC3BjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACqB,aAAa,CAACtK,IAAI,CAAC0J,WAAW,CAAC;MAEtC,IAAAW,0BAAiB,EAAC;QAChBX,WAAW,EAAEE,gBAAgB;QAC7B/F,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,kBAAkB;QACjCjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACqB,aAAa,CAACtK,IAAI,CAAC4J,gBAAgB,CAAC;MAE3C,IAAAW,4BAAmB,EAAC;QAClBV,aAAa,EAAbA,aAAa;QACbhG,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,YAAY;QAC3BjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACuB,YAAY,CAACxK,IAAI,CAAC6J,aAAa,CAAC;MAEvC,IAAAU,4BAAmB,EAAC;QAClBV,aAAa,EAAEE,kBAAkB;QACjClG,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BiE,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCmC,aAAa,EAAE,kBAAkB;QACjCjG,aAAa,EAAE,IAAI,CAACA;MACtB,CAAC,CAAC;MACFiF,MAAM,CAACuB,YAAY,CAACxK,IAAI,CAAC+J,kBAAkB,CAAC;;MAE5C;MACA,IAAA3B,KAAA,CAAA5H,OAAA,EAAY,IAAI,CAACqD,YAAY,CAAC,CAACvD,OAAO,CAAC,UAAC6D,SAAS,EAAK;QACpD,IAAIA,SAAS,CAACsG,UAAU,CAAC,YAAY,CAAC,EAAE;UACtC,IAAMC,iBAAiB,GAAG,IAAAxB,iBAAS,EAACyB,gCAAwB,CAAC;UAE7D,IAAAC,gCAAuB,EAAC;YACtBF,iBAAiB,EAAjBA,iBAAiB;YACjB7G,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACC,cAAc,CAAC,EAAE;YACzE0C,MAAM,CAACiB,aAAa,CAAC,CAAC,CAAC,CAACY,OAAO,CAAC9K,IAAI,CAAC0K,iBAAiB,CAAC;UACzD;UAEA1B,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACoE,IAAI,GAAG,IAAAW,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAIpE,SAAS,CAACsG,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACnD,IAAMC,kBAAiB,GAAG,IAAAxB,iBAAS,EAACyB,gCAAwB,CAAC;UAE7D,IAAAC,gCAAuB,EAAC;YACtBF,iBAAiB,EAAjBA,kBAAiB;YACjB7G,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACC,cAAc,CAAC,EAAE;YACzE0C,MAAM,CAACiB,aAAa,CAAC,CAAC,CAAC,CAACY,OAAO,CAAC9K,IAAI,CAAC0K,kBAAiB,CAAC;UACzD;UAEA1B,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACoE,IAAI,GAAG,IAAAW,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAIpE,SAAS,CAACsG,UAAU,CAAC,YAAY,CAAC,EAAE;UAC7C,IAAMM,mBAAmB,GAAG,IAAA7B,iBAAS,EAAC8B,+BAAuB,CAAC;UAE9D,IAAAC,kCAAyB,EAAC;YACxBF,mBAAmB,EAAnBA,mBAAmB;YACnBlH,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACE,iBAAiB,CAAC,EAAE;YAC5EyC,MAAM,CAACmB,YAAY,CAAC,CAAC,CAAC,CAACU,OAAO,CAAC9K,IAAI,CAAC+K,mBAAmB,CAAC;UAC1D;UAEA/B,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACmE,IAAI,GAAG,IAAAY,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACmE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAInE,SAAS,CAACsG,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACnD,IAAMM,oBAAmB,GAAG,IAAA7B,iBAAS,EAAC8B,+BAAuB,CAAC;UAE9D,IAAAC,kCAAyB,EAAC;YACxBF,mBAAmB,EAAnBA,oBAAmB;YACnBlH,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACE,iBAAiB,CAAC,EAAE;YAC5EyC,MAAM,CAACmB,YAAY,CAAC,CAAC,CAAC,CAACU,OAAO,CAAC9K,IAAI,CAAC+K,oBAAmB,CAAC;UAC1D;UACA/B,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACmE,IAAI,GAAG,IAAAY,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACmE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAInE,SAAS,CAACsG,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACnD;UACA,IAAMS,iBAAiB,GAAG,IAAAhC,iBAAS,EAACiC,gCAAwB,CAAC;UAE7D,IAAAC,gCAAuB,EAAC;YACtBF,iBAAiB,EAAjBA,iBAAiB;YACjBrH,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACC,cAAc,CAAC,EAAE;YACzE0C,MAAM,CAACqB,aAAa,CAAC,CAAC,CAAC,CAACQ,OAAO,CAAC9K,IAAI,CAACkL,iBAAiB,CAAC;UACzD;UACAlC,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACoE,IAAI,GAAG,IAAAW,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAIpE,SAAS,CAACsG,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACnD,IAAMS,kBAAiB,GAAG,IAAAhC,iBAAS,EAACiC,gCAAwB,CAAC;UAE7D,IAAAC,gCAAuB,EAAC;YACtBF,iBAAiB,EAAjBA,kBAAiB;YACjBrH,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACC,cAAc,CAAC,EAAE;YACzE0C,MAAM,CAACqB,aAAa,CAAC,CAAC,CAAC,CAACQ,OAAO,CAAC9K,IAAI,CAACkL,kBAAiB,CAAC;UACzD;UAEAlC,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACoE,IAAI,GAAG,IAAAW,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAIpE,SAAS,CAACsG,UAAU,CAAC,YAAY,CAAC,EAAE;UAC7C,IAAMY,mBAAmB,GAAG,IAAAnC,iBAAS,EAACoC,+BAAuB,CAAC;UAE9D,IAAAC,kCAAyB,EAAC;YACxBF,mBAAmB,EAAnBA,mBAAmB;YACnBxH,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACE,iBAAiB,CAAC,EAAE;YAC5EyC,MAAM,CAACuB,YAAY,CAAC,CAAC,CAAC,CAACM,OAAO,CAAC9K,IAAI,CAACqL,mBAAmB,CAAC;UAC1D;UAEArC,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACmE,IAAI,GAAG,IAAAY,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACmE,IAAI,CAAC;QACrF,CAAC,MAAM,IAAInE,SAAS,CAACsG,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACnD,IAAMY,oBAAmB,GAAG,IAAAnC,iBAAS,EAACoC,+BAAuB,CAAC;UAE9D,IAAAC,kCAAyB,EAAC;YACxBF,mBAAmB,EAAnBA,oBAAmB;YACnBxH,YAAY,EAAEmF,MAAI,CAACnF,YAAY;YAC/BiE,eAAe,EAAEkB,MAAI,CAAClB,eAAe;YACrC3D,SAAS,EAATA;UACF,CAAC,CAAC;UACF,IAAI,IAAA0G,0BAAiB,EAAC7B,MAAI,CAACnF,YAAY,EAAEM,SAAS,EAAEmC,gBAAK,CAACE,iBAAiB,CAAC,EAAE;YAC5EyC,MAAM,CAACuB,YAAY,CAAC,CAAC,CAAC,CAACM,OAAO,CAAC9K,IAAI,CAACqL,oBAAmB,CAAC;UAC1D;UACArC,MAAI,CAAClB,eAAe,CAAC3D,SAAS,CAAC,CAACmE,IAAI,GAAG,IAAAY,iBAAS,EAACF,MAAI,CAACnF,YAAY,CAACM,SAAS,CAAC,CAACmE,IAAI,CAAC;QACrF;MACF,CAAC,CAAC;MAEFW,MAAM,CAACuC,gBAAgB,CAACC,eAAe,GAAG,IAAI,CAAC5H,YAAY,CAACwD,cAAc,CAAC1C,KAAK,CAACiC,SAAS;MAE1FqC,MAAM,CAACuC,gBAAgB,CAACE,OAAO,CAACC,aAAa,GAAGC,wBAAO,CAACC,kBAAkB,CAAC,CAAC,IAAI,CAAC;;MAEjF;MACA5C,MAAM,CAACuC,gBAAgB,CAACM,WAAW,CAAC9L,IAAI,CAAC;QAAC+L,WAAW,EAAEC,oBAAS;QAAEC,IAAI,EAAEC,wBAAa,CAACC;MAAO,CAAC,CAAC;MAC/F,IAAI,IAAI,CAACtI,YAAY,CAAC,YAAY,CAAC,EAAE;QACnCoF,MAAM,CAACuC,gBAAgB,CAACM,WAAW,CAAC9L,IAAI,CAAC;UACvC+L,WAAW,EAAE,IAAI,CAAClI,YAAY,CAAC,YAAY,CAAC,CAACtB,UAAU,IAAIyJ,oBAAS;UACpEC,IAAI,EAAEC,wBAAa,CAACE;QACtB,CAAC,CAAC;MACJ;MAEA,IAAMC,mBAAmB,GAAG,IAAAjE,KAAA,CAAA5H,OAAA,EAAY,IAAI,CAACqD,YAAY,CAAC,CAACyI,IAAI,CAAC,UAACC,IAAI;QAAA,OACnEA,IAAI,CAAClE,QAAQ,CAAC,YAAY,CAAC;MAAA,CAC7B,CAAC;MAED,IAAIgE,mBAAmB,EAAE;QACvBpD,MAAM,CAACuC,gBAAgB,CAACM,WAAW,CAAC9L,IAAI,CAAC;UACvC+L,WAAW,EAAE,IAAI,CAAClI,YAAY,CAACwI,mBAAmB,CAAC,CAAC9J,UAAU,IAAIyJ,oBAAS;UAC3EC,IAAI,EAAEC,wBAAa,CAACM;QACtB,CAAC,CAAC;MACJ;MAEAvD,MAAM,CAAChC,WAAW,GAAG,IAAI,CAACpD,YAAY,CAACwD,cAAc,CAAC1C,KAAK,CAACsC,WAAW;MAEvEgC,MAAM,CAACuC,gBAAgB,CAACiB,WAAW,GAAGC,MAAM,CAACC,MAAM,CAACC,KAAK;MACzD3D,MAAM,CAACuC,gBAAgB,CAACqB,YAAY,GAAGH,MAAM,CAACC,MAAM,CAACG,MAAM;MAC3D7D,MAAM,CAACuC,gBAAgB,CAACuB,gBAAgB,GAAGC,IAAI,CAACC,KAAK,CAClDP,MAAM,CAACC,MAAM,CAACC,KAAK,GAAGF,MAAM,CAACC,MAAM,CAACG,MAAM,GAAI,GACjD,CAAC;MACD7D,MAAM,CAACuC,gBAAgB,CAAC0B,cAAc,GAAGR,MAAM,CAACS,UAAU;MAC1DlE,MAAM,CAACuC,gBAAgB,CAAC4B,eAAe,GAAGV,MAAM,CAACW,WAAW;MAC5DpE,MAAM,CAACuC,gBAAgB,CAAC8B,aAAa,GAAGN,IAAI,CAACC,KAAK,CAC/CP,MAAM,CAACS,UAAU,GAAGT,MAAM,CAACW,WAAW,GAAI,GAC7C,CAAC;MAED,IAAI,CAACxF,YAAY,IAAI,CAAC;MAEtBoB,MAAM,CAACsE,cAAc,GAAG,IAAI,CAAC1F,YAAY;MAEzC,IAAI,CAACK,iBAAiB,CAAC,CAAC;MAExB,IAAI,CAACpD,IAAI,CACP;QACEC,IAAI,EAAE,eAAe;QACrBC,QAAQ,EAAE;MACZ,CAAC,EACDjD,MAAM,CAACE,aAAa,EACpB;QACEuL,IAAI,EAAEvE,MAAM;QACZ;QACAhC,WAAW,EAAEgC,MAAM,CAAChC;MACtB,CACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAe,GAAA;IAAAC,KAAA,EAQA,SAAAwF,sBAAsBC,eAAoB,EAAE;MAC1C,IAAI,CAACA,eAAe,GAAGA,eAAe;IACxC;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA1F,GAAA;IAAAC,KAAA,EAMA,SAAA0F,kBAAA,EAA4B;MAC1B,OAAO,IAAI,CAAChI,cAAc;IAC5B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAqC,GAAA;IAAAC,KAAA,EAQA,SAAA2F,cAAqBF,eAAoB,EAAE;MAAA,IAAAG,MAAA;MACzC,IAAI,CAAC,IAAI,CAACnG,YAAY,EAAE;QACtB,IAAI,CAACA,YAAY,GAAG,IAAI;QACxB,IAAI,CAACgG,eAAe,GAAGA,eAAe;QAEtC,OAAO,IAAI,CAACI,gBAAgB,CAAC,CAAC,CAACC,IAAI,CAAC,YAAM;UACxCF,MAAI,CAACG,aAAa,GAAGC,WAAW,CAAC,YAAM;YACrCJ,MAAI,CAACC,gBAAgB,CAAC,CAAC;UACzB,CAAC,EAAED,MAAI,CAACvK,MAAM,CAAC4K,gBAAgB,CAAC;UAChC;UACAL,MAAI,CAAC9E,WAAW,CAAC,CAAC;UAClB8E,MAAI,CAACM,WAAW,GAAGF,WAAW,CAAC,YAAM;YACnCJ,MAAI,CAAC9E,WAAW,CAAC,CAAC;UACpB,CAAC,EAAEqF,uBAAY,CAAC;QAClB,CAAC,CAAC;MACJ;MAEA,OAAOC,QAAA,CAAA7N,OAAA,CAAQ8N,OAAO,CAAC,CAAC;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAtG,GAAA;IAAAC,KAAA,EAOA,SAAAsG,aAAA,EAAsB;MAAA,IAAAC,MAAA;MACpB,IAAMC,cAAc,GAAG,IAAI,CAACN,WAAW,IAAI,IAAI,CAACH,aAAa;MAE7D,IAAI,IAAI,CAACA,aAAa,EAAE;QACtBU,aAAa,CAAC,IAAI,CAACV,aAAa,CAAC;QACjC,IAAI,CAACA,aAAa,GAAGvK,SAAS;MAChC;MAEA,IAAI,IAAI,CAAC0K,WAAW,EAAE;QACpBO,aAAa,CAAC,IAAI,CAACP,WAAW,CAAC;QAC/B,IAAI,CAACA,WAAW,GAAG1K,SAAS;MAC9B;MAEA,IAAIgL,cAAc,EAAE;QAClB,OAAO,IAAI,CAACX,gBAAgB,CAAC,CAAC,CAACC,IAAI,CAAC,YAAM;UACxCS,MAAI,CAACzF,WAAW,CAAC,CAAC;UAClByF,MAAI,CAACd,eAAe,GAAG,IAAI;QAC7B,CAAC,CAAC;MACJ;MAEA,OAAOW,QAAA,CAAA7N,OAAA,CAAQ8N,OAAO,CAAC,CAAC;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAtG,GAAA;IAAAC,KAAA,EAUA,SAAA0G,oBAA4BC,cAAmB,EAAE3J,IAAY,EAAEW,QAAiB,EAAE;MAChF,IAAI,CAACgJ,cAAc,EAAE;QACnB;MACF;;MAEA;MACA,IAAI,CAAC,IAAI,CAAC/K,YAAY,CAACoB,IAAI,CAAC,EAAE;QAC5B,IAAI,CAACpB,YAAY,CAACoB,IAAI,CAAC,GAAG,CAAC,CAAC;MAC9B;MAEA,IAAIW,QAAQ,IAAI,CAAC,IAAI,CAAC/B,YAAY,CAACoB,IAAI,CAAC,CAACsD,IAAI,EAAE;QAC7C,IAAI,CAAC1E,YAAY,CAACoB,IAAI,CAAC,CAACsD,IAAI,GAAG,IAAAW,iBAAS,EAAC5G,WAAW,CAAC;MACvD,CAAC,MAAM,IAAI,CAACsD,QAAQ,IAAI,CAAC,IAAI,CAAC/B,YAAY,CAACoB,IAAI,CAAC,CAACqD,IAAI,EAAE;QACrD,IAAI,CAACzE,YAAY,CAACoB,IAAI,CAAC,CAACqD,IAAI,GAAG,IAAAY,iBAAS,EAACrG,aAAa,CAAC;MACzD;MAEA,QAAQ+L,cAAc,CAAC3J,IAAI;QACzB,KAAK,cAAc;UACjB,IAAI,CAAC4J,wBAAwB,CAACD,cAAc,EAAE3J,IAAI,CAAC;UACnD;QACF,KAAK,aAAa;UAChB,IAAI,CAAC6J,uBAAuB,CAACF,cAAc,EAAE3J,IAAI,CAAC;UAClD;QACF,KAAK,oBAAoB;QACzB,KAAK,qBAAqB;UACxB,IAAI,CAAC8J,sBAAsB,CAACH,cAAc,EAAE3J,IAAI,CAAC;UACjD;QACF,KAAK,iBAAiB;QACtB,KAAK,kBAAkB;UACrB,IAAI,CAAC+J,cAAc,CAACJ,cAAc,EAAE3J,IAAI,EAAEW,QAAQ,EAAE,IAAI,CAAC;UACzD;QACF,KAAK,iBAAiB;UACpB,IAAI,CAACoJ,cAAc,CAACJ,cAAc,EAAE3J,IAAI,EAAEW,QAAQ,EAAE,KAAK,CAAC;UAC1D;QACF,KAAK,cAAc;UACjB,IAAI,CAACqJ,gBAAgB,CAACL,cAAc,EAAE3J,IAAI,CAAC;UAC3C;QACF;UACE;MACJ;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA+C,GAAA;IAAAC,KAAA,EAQA,SAAAiH,8BAA8BC,SAAc,EAAElK,IAAY,EAAEW,QAAiB,EAAE;MAAA,IAAAwJ,MAAA;MAC7E,IAAOC,KAAK,GAAIC,mCAAwB,CAAjCD,KAAK;;MAEZ;MACAF,SAAS,CAACI,MAAM,CAACjP,OAAO,CAAC,UAACiP,MAAM,EAAK;QACnC,IAAIA,MAAM,CAACtK,IAAI,KAAK,gBAAgB,IAAIsK,MAAM,CAACC,KAAK,KAAK,WAAW,EAAE;UACpEJ,MAAI,CAACpJ,uBAAuB,GAAGuJ,MAAM;QACvC;MACF,CAAC,CAAC;MAEF,IAAIE,gBAAgB,GAAG,CAAC;MACxBN,SAAS,CAACI,MAAM,CAACjP,OAAO,CAAC,UAACa,MAAM,EAAK;QACnC,IAAIkO,KAAK,CAAChH,QAAQ,CAAClH,MAAM,CAAC8D,IAAI,CAAC,EAAE;UAC/B;UACA,IAAIA,IAAI,KAAK,YAAY,IAAI9D,MAAM,CAAC8D,IAAI,KAAK,cAAc,EAAE;YAC3D,IAAMyK,OAAO,uBAAAlL,MAAA,CAAuBiL,gBAAgB,CAAE;YACtDL,MAAI,CAACT,mBAAmB,CAACxN,MAAM,EAAEuO,OAAO,EAAE9J,QAAQ,CAAC;YACnD6J,gBAAgB,IAAI,CAAC;YAErBL,MAAI,CAACvL,YAAY,CAAC6L,OAAO,CAAC,CAACC,SAAS,GAAGR,SAAS,CAACS,gBAAgB;YACjER,MAAI,CAACvL,YAAY,CAAC6L,OAAO,CAAC,CAACnN,UAAU,GAAG4M,SAAS,CAACU,eAAe;YACjET,MAAI,CAACvL,YAAY,CAAC6L,OAAO,CAAC,CAACI,GAAG,GAAGX,SAAS,CAACW,GAAG;UAChD,CAAC,MAAM,IAAI7K,IAAI,KAAK,kBAAkB,IAAI9D,MAAM,CAAC8D,IAAI,KAAK,cAAc,EAAE;YACxEmK,MAAI,CAACW,+BAA+B,GAAG5O,MAAM,CAAC6O,qBAAqB;YACnEZ,MAAI,CAACT,mBAAmB,CAACxN,MAAM,EAAE8D,IAAI,EAAEW,QAAQ,CAAC;UAClD,CAAC,MAAM;YACLwJ,MAAI,CAACT,mBAAmB,CAACxN,MAAM,EAAE8D,IAAI,EAAEW,QAAQ,CAAC;UAClD;QACF;MACF,CAAC,CAAC;MAEF,IAAI,IAAI,CAAC/B,YAAY,CAACoB,IAAI,CAAC,EAAE;QAAA,IAAAgL,sBAAA,EAAAC,kBAAA;QAC3B,IAAI,CAACrM,YAAY,CAACoB,IAAI,CAAC,CAAC0K,SAAS,GAAGR,SAAS,CAACS,gBAAgB;QAC9D,IAAI,CAAC/L,YAAY,CAACoB,IAAI,CAAC,CAAC1C,UAAU,GAAG4M,SAAS,CAACU,eAAe;QAC9D,IAAI,CAAChM,YAAY,CAACoB,IAAI,CAAC,CAAC6K,GAAG,GAAGX,SAAS,CAACW,GAAG;QAC3C,IAAI,CAACK,6CAA6C,EAAAF,sBAAA,GAChD,IAAI,CAACjK,uBAAuB,cAAAiK,sBAAA,uBAA5BA,sBAAA,CAA8BhK,gBAAgB,GAAAiK,kBAAA,GAC9C,IAAI,CAACrM,YAAY,cAAAqM,kBAAA,uBAAjBA,kBAAA,CAAmB/K,UACrB,CAAC;QACD;QACA,IAAI,CAACa,uBAAuB,GAAG,CAAC,CAAC;MACnC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAgC,GAAA;IAAAC,KAAA,EAMA,SAAAgH,iBAAiB9N,MAAW,EAAE8D,IAAS,EAAE;MACvC,IAAI,CAAC9D,MAAM,EAAE;QACX;MACF;MAEA,IAAI8D,IAAI,CAACoD,QAAQ,CAAC,YAAY,CAAC,EAAE;QAC/B,IAAI,CAACxE,YAAY,CAACoB,IAAI,CAAC,CAACsD,IAAI,CAAC6H,UAAU,GAAGjP,MAAM,CAACiP,UAAU;QAC3D,IAAI,CAACvM,YAAY,CAACoB,IAAI,CAAC,CAACsD,IAAI,CAAC8H,gBAAgB,GAAGlP,MAAM,CAACkP,gBAAgB;MACzE;IACF;EAAC;IAAArI,GAAA;IAAAC,KAAA;IAkED;AACF;AACA;AACA;AACA;AACA;AACA;IACE,SAAAqI,uBAAA,EAAiC;MAAA,IAAAC,MAAA;MAC/B,IAAI,IAAI,CAAC5I,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAACiB,kBAAkB,EAAE;QAC7D,IAAM4H,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIC,SAAiB,EAAExI,KAAa;UAAA,OAC7D,IAAAG,KAAA,CAAA5H,OAAA,EAAY+P,MAAI,CAAC1M,YAAY,CAAC,CAC3BhE,MAAM,CAAC,UAACmI,GAAG;YAAA,OAAKA,GAAG,CAACyC,UAAU,CAACgG,SAAS,CAAC;UAAA,EAAC,CAC1CC,MAAM,CACL,UAACC,IAAI,EAAEC,GAAG;YAAA,IAAAC,qBAAA;YAAA,OACRF,IAAI,IACH,EAAAE,qBAAA,GAAAN,MAAI,CAAC1M,YAAY,CAAC+M,GAAG,CAAC,cAAAC,qBAAA,uBAAtBA,qBAAA,CAAyBJ,SAAS,CAACpI,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAACJ,KAAK,CAAC,KAAI,CAAC,CAAC;UAAA,GACtF,CACF,CAAC;QAAA;QAEL,IAAM6I,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIL,SAAiB,EAAExI,KAAa;UAAA,OAC9D,IAAAG,KAAA,CAAA5H,OAAA,EAAY+P,MAAI,CAAC1M,YAAY,CAAC,CAC3BhE,MAAM,CAAC,UAACmI,GAAG;YAAA,OAAKA,GAAG,CAACyC,UAAU,CAACgG,SAAS,CAAC;UAAA,EAAC,CAC1CC,MAAM,CACL,UAACC,IAAI,EAAEC,GAAG;YAAA,IAAAG,qBAAA;YAAA,OACRJ,IAAI,IACH,EAAAI,qBAAA,GAAAR,MAAI,CAAC5I,gBAAgB,CAACiJ,GAAG,CAAC,cAAAG,qBAAA,uBAA1BA,qBAAA,CAA6BN,SAAS,CAACpI,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAACJ,KAAK,CAAC,KAChF,CAAC,CAAC;UAAA,GACN,CACF,CAAC;QAAA;;QAEL;QACA,IAAI,IAAI,CAACN,gBAAgB,CAAC,YAAY,CAAC,EAAE;UACvC;UACA;UACA,IAAMqJ,YAAY,GAAG,IAAI,CAACnN,YAAY,CAAC,YAAY,CAAC,CAAC0E,IAAI;UACzD,IAAM0I,aAAa,GAAG,IAAI,CAACtJ,gBAAgB,CAAC,YAAY,CAAC,CAACY,IAAI;UAE9D,IACG,IAAI,CAACK,kBAAkB,CAACE,QAAQ,CAACoI,SAAS,IACzCF,YAAY,CAACG,gBAAgB,KAAKF,aAAa,CAACE,gBAAgB,IAClEH,YAAY,CAACG,gBAAgB,KAAK,CAAC,EACnC;YACAC,oBAAW,CAACC,MAAM,CAACC,IAAI,6EAErBN,YAAY,CAACG,gBACf,CAAC;UACH,CAAC,MAAM;YACL,IACG,IAAI,CAACvI,kBAAkB,CAACE,QAAQ,CAACoI,SAAS,IACzCF,YAAY,CAACX,gBAAgB,KAAKY,aAAa,CAACZ,gBAAgB,IAClEW,YAAY,CAACX,gBAAgB,KAAK,CAAC,EACnC;cACAe,oBAAW,CAACC,MAAM,CAACC,IAAI,2EAErBN,YAAY,CAACX,gBACf,CAAC;YACH;YAEA,IAAI,IAAI,CAACzH,kBAAkB,CAACE,QAAQ,CAACoI,SAAS,IAAIF,YAAY,CAACZ,UAAU,KAAK,CAAC,EAAE;cAC/EgB,oBAAW,CAACC,MAAM,CAACC,IAAI,+EAEvB,CAAC;YACH;UACF;UAEA,IAAI,CAACC,mBAAmB,CACtB,OAAO,EACPN,aAAa,CAACE,gBAAgB,EAC9BH,YAAY,CAACG,gBAAgB,EAC7B,IACF,CAAC;QACH;;QAEA;QACA,IAAMK,2BAA2B,GAAGhB,qBAAqB,CACvD,YAAY,EACZ,sBACF,CAAC;QACD,IAAMiB,4BAA4B,GAAGX,sBAAsB,CACzD,YAAY,EACZ,sBACF,CAAC;QAED,IAAI,CAACS,mBAAmB,CACtB,OAAO,EACPE,4BAA4B,EAC5BD,2BAA2B,EAC3B,KACF,CAAC;QAED,IAAME,uBAAuB,GAAGlB,qBAAqB,CAAC,YAAY,EAAE,kBAAkB,CAAC;QACvF,IAAMmB,wBAAwB,GAAGb,sBAAsB,CAAC,YAAY,EAAE,kBAAkB,CAAC;QAEzF,IAAMc,oBAAoB,GAAGpB,qBAAqB,CAAC,YAAY,EAAE,eAAe,CAAC;QACjF,IAAMqB,qBAAqB,GAAGf,sBAAsB,CAAC,YAAY,EAAE,eAAe,CAAC;QAEnF,IAAMgB,iBAAiB,GAAGtB,qBAAqB,CAAC,YAAY,EAAE,YAAY,CAAC;QAC3E,IAAMuB,kBAAkB,GAAGjB,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC;QAE7E,IAAMkB,kBAAkB,GAAG,IAAA5J,KAAA,CAAA5H,OAAA,EAAY,IAAI,CAACmH,gBAAgB,CAAC,CAACsK,IAAI,CAAC,UAAC1F,IAAI;UAAA,OACtEA,IAAI,CAAClE,QAAQ,CAAC,YAAY,CAAC;QAAA,CAC7B,CAAC;;QAED;QACA,IAAI2J,kBAAkB,EAAE;UACtB;;UAEA,IACE,IAAI,CAACpJ,kBAAkB,CAACE,QAAQ,CAACoJ,SAAS,KACzCR,uBAAuB,KAAKC,wBAAwB,IAAID,uBAAuB,KAAK,CAAC,CAAC,EACvF;YACAN,oBAAW,CAACC,MAAM,CAACC,IAAI,6EAErBI,uBACF,CAAC;UACH,CAAC,MAAM;YACL,IACE,IAAI,CAAC9I,kBAAkB,CAACE,QAAQ,CAACoJ,SAAS,KACzCN,oBAAoB,KAAKC,qBAAqB,IAAID,oBAAoB,KAAK,CAAC,CAAC,EAC9E;cACAR,oBAAW,CAACC,MAAM,CAACC,IAAI,2EAErBM,oBACF,CAAC;YACH;YAEA,IACE,IAAI,CAAChJ,kBAAkB,CAACE,QAAQ,CAACoJ,SAAS,KACzCJ,iBAAiB,KAAKC,kBAAkB,IAAID,iBAAiB,KAAK,CAAC,CAAC,EACrE;cACAV,oBAAW,CAACC,MAAM,CAACC,IAAI,wEAErBQ,iBACF,CAAC;YACH;UACF;UAEA,IAAI,CAACP,mBAAmB,CAAC,OAAO,EAAEQ,kBAAkB,EAAED,iBAAiB,EAAE,IAAI,CAAC;QAChF;;QAEA;QACA,IAAMK,yBAAyB,GAAG3B,qBAAqB,CAAC,YAAY,EAAE,eAAe,CAAC;QACtF,IAAM4B,0BAA0B,GAAGtB,sBAAsB,CAAC,YAAY,EAAE,eAAe,CAAC;QAExF,IAAI,CAACS,mBAAmB,CACtB,OAAO,EACPa,0BAA0B,EAC1BD,yBAAyB,EACzB,KACF,CAAC;;QAED;QACA,IAAI,IAAI,CAACxK,gBAAgB,CAAC,kBAAkB,CAAC,EAAE;UAC7C;;UAEA,IAAMqJ,aAAY,GAAG,IAAI,CAACnN,YAAY,CAAC,kBAAkB,CAAC,CAAC0E,IAAI;UAC/D,IAAM0I,cAAa,GAAG,IAAI,CAACtJ,gBAAgB,CAAC,kBAAkB,CAAC,CAACY,IAAI;UAEpE,IACE,IAAI,CAACK,kBAAkB,CAACE,QAAQ,CAACuJ,SAAS,KACzCrB,aAAY,CAACG,gBAAgB,KAAKF,cAAa,CAACE,gBAAgB,IAC/DH,aAAY,CAACG,gBAAgB,KAAK,CAAC,CAAC,EACtC;YACAC,oBAAW,CAACC,MAAM,CAACC,IAAI,6EAErBN,aAAY,CAACG,gBACf,CAAC;UACH,CAAC,MAAM;YACL,IACE,IAAI,CAACvI,kBAAkB,CAACE,QAAQ,CAACuJ,SAAS,KACzCrB,aAAY,CAACsB,aAAa,KAAKrB,cAAa,CAACqB,aAAa,IACzDtB,aAAY,CAACsB,aAAa,KAAK,CAAC,CAAC,EACnC;cACAlB,oBAAW,CAACC,MAAM,CAACC,IAAI,mFAErBN,aAAY,CAACsB,aACf,CAAC;YACH;YAEA,IACE,IAAI,CAAC1J,kBAAkB,CAACE,QAAQ,CAACuJ,SAAS,KACzC,IAAI,CAACxO,YAAY,CAAC,kBAAkB,CAAC,CAAC0E,IAAI,CAACgK,UAAU,KACpD,IAAI,CAAC5K,gBAAgB,CAAC,kBAAkB,CAAC,CAACY,IAAI,CAACgK,UAAU,IACzD,IAAI,CAAC1O,YAAY,CAAC,kBAAkB,CAAC,CAAC0E,IAAI,CAACgK,UAAU,KAAK,CAAC,CAAC,EAC9D;cACAnB,oBAAW,CAACC,MAAM,CAACC,IAAI,wEAErB,IAAI,CAACzN,YAAY,CAAC,kBAAkB,CAAC,CAAC0E,IAAI,CAACgK,UAC7C,CAAC;YACH;UACF;UAEA,IAAI,CAAChB,mBAAmB,CAAC,OAAO,EAAEN,cAAa,CAACsB,UAAU,EAAEvB,aAAY,CAACuB,UAAU,EAAE,IAAI,CAAC;QAC5F;;QAEA;QACA,IAAMC,yBAAyB,GAAGhC,qBAAqB,CAAC,kBAAkB,EAAE,eAAe,CAAC;QAC5F,IAAMiC,0BAA0B,GAAG3B,sBAAsB,CACvD,kBAAkB,EAClB,eACF,CAAC;QAED,IAAI,CAACS,mBAAmB,CACtB,OAAO,EACPkB,0BAA0B,EAC1BD,yBAAyB,EACzB,KACF,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAxK,GAAA;IAAAC,KAAA,EAOA,SAAA6F,iBAAA,EAA2B;MAAA,IAAA4E,MAAA;MACzB,IAAI,CAAC,IAAI,CAAChF,eAAe,EAAE;QACzB,OAAOW,QAAA,CAAA7N,OAAA,CAAQ8N,OAAO,CAAC,CAAC;MAC1B;MAEA,IACE,IAAI,CAACZ,eAAe,IACpB,IAAI,CAACA,eAAe,CAACiF,kBAAkB,CAAC,CAAC,KAAKC,kCAAe,CAACC,MAAM,EACpE;QACAzB,oBAAW,CAACC,MAAM,CAACyB,KAAK,CACtB,8EACF,CAAC;QAED,OAAOzE,QAAA,CAAA7N,OAAA,CAAQ8N,OAAO,CAAC,CAAC;MAC1B;MAEA8C,oBAAW,CAACC,MAAM,CAACyB,KAAK,CAAC,2DAA2D,CAAC;MAErF,OAAO,IAAI,CAACpF,eAAe,CAACqF,mBAAmB,CAAC,CAAC,CAAChF,IAAI,CAAC,UAACiF,gBAAgB,EAAK;QAC3EA,gBAAgB,CAACC,KAAK,CAACC,SAAS,CAAC5S,OAAO,CAAC,UAAC6S,QAAQ,EAAEC,CAAC;UAAA,OACnDV,MAAI,CAACxD,6BAA6B,CAACiE,QAAQ,gBAAA3O,MAAA,CAAgB4O,CAAC,GAAI,KAAK,CAAC;QAAA,CACxE,CAAC;QACDJ,gBAAgB,CAACK,KAAK,CAACH,SAAS,CAAC5S,OAAO,CAAC,UAAC6S,QAAQ,EAAEC,CAAC;UAAA,OACnDV,MAAI,CAACxD,6BAA6B,CAACiE,QAAQ,gBAAA3O,MAAA,CAAgB4O,CAAC,GAAI,KAAK,CAAC;QAAA,CACxE,CAAC;QACDJ,gBAAgB,CAACM,gBAAgB,CAACJ,SAAS,CAAC5S,OAAO,CAAC,UAAC6S,QAAQ,EAAEC,CAAC;UAAA,OAC9DV,MAAI,CAACxD,6BAA6B,CAACiE,QAAQ,sBAAA3O,MAAA,CAAsB4O,CAAC,GAAI,KAAK,CAAC;QAAA,CAC9E,CAAC;QACDJ,gBAAgB,CAACO,gBAAgB,CAACL,SAAS,CAAC5S,OAAO,CAAC,UAAC6S,QAAQ,EAAEC,CAAC;UAAA,OAC9DV,MAAI,CAACxD,6BAA6B,CAACiE,QAAQ,sBAAA3O,MAAA,CAAsB4O,CAAC,GAAI,KAAK,CAAC;QAAA,CAC9E,CAAC;QAEDJ,gBAAgB,CAACC,KAAK,CAACO,OAAO,CAAClT,OAAO,CAAC,UAACmT,MAAM,EAAEL,CAAC,EAAK;UACpD,IAAIA,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI7O,KAAK,CAAC,mDAAmD,CAAC;UACtE;UACAmO,MAAI,CAACxD,6BAA6B,CAACuE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC;QAChE,CAAC,CAAC;QACFT,gBAAgB,CAACK,KAAK,CAACG,OAAO,CAAClT,OAAO,CAAC,UAACmT,MAAM,EAAEL,CAAC,EAAK;UACpD,IAAIA,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI7O,KAAK,CAAC,mDAAmD,CAAC;UACtE;UACAmO,MAAI,CAACxD,6BAA6B,CAACuE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC;QAChE,CAAC,CAAC;QACFT,gBAAgB,CAACM,gBAAgB,CAACE,OAAO,CAAClT,OAAO,CAAC,UAACmT,MAAM,EAAEL,CAAC,EAAK;UAC/D,IAAIA,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI7O,KAAK,CAAC,mDAAmD,CAAC;UACtE;UACAmO,MAAI,CAACxD,6BAA6B,CAACuE,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC;QACtE,CAAC,CAAC;QACFT,gBAAgB,CAACO,gBAAgB,CAACC,OAAO,CAAClT,OAAO,CAAC,UAACmT,MAAM,EAAEL,CAAC,EAAK;UAC/D,IAAIA,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI7O,KAAK,CAAC,mDAAmD,CAAC;UACtE;UACAmO,MAAI,CAACxD,6BAA6B,CAACuE,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC;QACtE,CAAC,CAAC;QAEFf,MAAI,CAACpC,sBAAsB,CAAC,CAAC;;QAE7B;QACA;QACAoC,MAAI,CAAC/K,gBAAgB,GAAG+L,IAAI,CAACC,KAAK,CAAC,IAAAC,UAAA,CAAApT,OAAA,EAAekS,MAAI,CAAC7O,YAAY,CAAC,CAAC;QAErEuN,oBAAW,CAACC,MAAM,CAACyB,KAAK,CACtB,oEACF,CAAC;MACH,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA9K,GAAA;IAAAC,KAAA,EAOA,SAAA4G,yBAAiC1N,MAAW,EAAEgD,SAAc,EAAE;MAC5D,IAAM0P,YAAY,GAAGvN,gBAAK,CAACC,cAAc;MAEzC,IAAIpF,MAAM,CAACuB,SAAS,EAAE;QACpB,IAAMoR,SAAS,GAAG,CAAC;QAEnB,IAAI3S,MAAM,CAAC4S,UAAU,IAAI5S,MAAM,CAAC6S,WAAW,EAAE;UAC3C,IAAI,CAACnQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACjH,KAAK,GAAGzL,MAAM,CAAC4S,UAAU;UACpE,IAAI,CAAClQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC/G,MAAM,GAAG3L,MAAM,CAAC6S,WAAW;UACtE,IAAI,CAACnQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACtB,UAAU,GAAGpR,MAAM,CAACoR,UAAU;UACzE,IAAI,CAAC1O,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACI,cAAc,GAAG9S,MAAM,CAAC8S,cAAc;QACnF;QAEA,IAAI,CAACpQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACpR,kBAAkB,GAAGqR,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;QAEpF,IAAI,CAACrQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACvB,aAAa,GAAGnR,MAAM,CAACmR,aAAa;QAC/E,IAAI,CAACzO,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACM,gBAAgB,GAAGhT,MAAM,CAACgT,gBAAgB;QACrF,IAAI,CAACtQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACO,WAAW,GAAGjT,MAAM,CAACiT,WAAW;;QAE3E;;QAEA,IAAI,CAACvQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACQ,qBAAqB,GAAGlT,MAAM,CAACgT,gBAAgB;QAC1F,IAAI,CAACtQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACS,cAAc,GAAGnT,MAAM,CAACoT,SAAS;QAC5E,IAAI,CAAC1Q,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACW,aAAa,GAAGrT,MAAM,CAACsT,QAAQ;QAC1E,IAAI,CAAC5Q,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC1C,gBAAgB,GAAGhQ,MAAM,CAACiT,WAAW;QAChF,IAAI,CAACvQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACa,aAAa,GAAGvT,MAAM,CAACwT,QAAQ;QAC1E,IAAI,CAAC9Q,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACtB,UAAU,GAAGpR,MAAM,CAACoR,UAAU;QACzE,IAAI,CAAC1O,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACvB,aAAa,GAAGnR,MAAM,CAACmR,aAAa;QAC/E,IAAI,CAACzO,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC7D,qBAAqB,GAC9D7O,MAAM,CAAC6O,qBAAqB;QAC9B,IAAI,CAACnM,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACe,uBAAuB,GAChEzT,MAAM,CAACyT,uBAAuB;QAChC,IAAI,CAAC/Q,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACgB,kCAAkC,GAC3E1T,MAAM,CAAC0T,kCAAkC;QAC3C,IAAI,CAAChR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACiB,mBAAmB,GAC5D3T,MAAM,CAAC4T,wBAAwB;QACjC,IAAI,CAAClR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACmB,iBAAiB,GAAG7T,MAAM,CAAC8T,sBAAsB;QAC5F,IAAI,CAACpR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACqB,cAAc,GAAG/T,MAAM,CAACuB,SAAS;QAC5E,IAAI,CAACmB,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACsB,eAAe,GAAGhU,MAAM,CAACgU,eAAe;QACnF,IAAI,CAACtR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACoB,sBAAsB,GAC/D9T,MAAM,CAAC8T,sBAAsB;QAC/B,IAAI,CAACpR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACuB,WAAW,GAAGjU,MAAM,CAACiU,WAAW;QAC3E,IAAI,CAACvR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACwB,4BAA4B,GACrElU,MAAM,CAACkU,4BAA4B;QACrC,IAAI,CAACxR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACyB,gBAAgB,GAAGnU,MAAM,CAACmU,gBAAgB;QACrF,IAAI,CAACzR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC0B,kBAAkB,GAAGpU,MAAM,CAACoU,kBAAkB;MAC3F;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAvN,GAAA;IAAAC,KAAA,EAOA,SAAA6G,wBAAgC3N,MAAW,EAAEgD,SAAc,EAAE;MAC3D,IAAM0P,YAAY,GAAGvN,gBAAK,CAACE,iBAAiB;MAE5C,IAAIrF,MAAM,CAAC2B,aAAa,EAAE;QACxB,IAAIgR,SAAS,GAAG,CAAC;QACjB,IAAM0B,WAAW,GAAG,IAAI,CAAChS,mBAAmB,CAACrC,MAAM,CAACsU,IAAI,CAAC;QACzD,IAAMC,WAAW,GAAGF,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEE,WAAW;QAC5C,IAAMC,QAAQ,GAAGH,WAAW,YAAAhR,MAAA,CAChBgR,WAAW,CAACzP,EAAE,IAAI,EAAE,QAAAvB,MAAA,CAAIgR,WAAW,CAAC1F,GAAG,gBAAAtL,MAAA,CAAgBgR,WAAW,CAAC1F,GAAG,IAAK,EAAE,IACrF,EAAE;QAEN,IAAM8F,KAAK,GACTzU,MAAM,CAAC2B,aAAa,GAAG,IAAI,CAACe,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACgC,kBAAkB;QAEtF/B,SAAS,GAAG8B,KAAK,GAAG,IAAI;QACxB,IAAI,CAAC/R,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACpR,kBAAkB,GAAGqR,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;QAEpF,IAAI4B,kBAAkB,GACpB3U,MAAM,CAAC4U,WAAW,GAAG,IAAI,CAAClS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACmC,gBAAgB;QAClF,IAAIF,kBAAkB,GAAG,CAAC,EAAE;UAC1BA,kBAAkB,GAAG,CAAC;QACxB;QACA,IAAMG,mBAAmB,GACvB9U,MAAM,CAAC+U,eAAe,GAAG,IAAI,CAACrS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACsC,oBAAoB;QAC1F,IAAI,CAACtS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACsC,oBAAoB,GAAGhV,MAAM,CAAC+U,eAAe;QAExF,IAAID,mBAAmB,KAAK,CAAC,EAAE;UAC7B,IAAIT,WAAW,IAAIE,WAAW,KAAK,MAAM,EAAE;YACzCtE,oBAAW,CAACC,MAAM,CAACC,IAAI,uFAAA9M,MAAA,CACiEL,SAAS,qBAAAK,MAAA,CAAkBmR,QAAQ,yCACzHxU,MAAM,CAAC+U,eACT,CAAC;UACH;QACF;QAEA,IAAI/R,SAAS,CAACsG,UAAU,CAAC,OAAO,CAAC,IAAItG,SAAS,CAACsG,UAAU,CAAC,OAAO,CAAC,EAAE;UAClE,IAAM2L,uBAAuB,GAC3BjV,MAAM,CAACkV,cAAc,GAAG,IAAI,CAACxS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACwC,cAAc;UAEnF,IAAID,uBAAuB,KAAK,CAAC,EAAE;YACjC,IAAIZ,WAAW,IAAIE,WAAW,KAAK,MAAM,EAAE;cACzCtE,oBAAW,CAACC,MAAM,CAACC,IAAI,sFAAA9M,MAAA,CACgEL,SAAS,sBAAAK,MAAA,CAAmBmR,QAAQ,wCACzHxU,MAAM,CAACkV,cACT,CAAC;YACH;UACF;UAEA,IAAMC,sBAAsB,GAC1BnV,MAAM,CAACoV,aAAa,GAAG,IAAI,CAAC1S,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC0C,aAAa;UAEjF,IAAID,sBAAsB,KAAK,CAAC,EAAE;YAChC,IAAId,WAAW,IAAIE,WAAW,KAAK,MAAM,EAAE;cACzCtE,oBAAW,CAACC,MAAM,CAACC,IAAI,qFAAA9M,MAAA,CAC+DL,SAAS,sBAAAK,MAAA,CAAmBmR,QAAQ,uCACxHxU,MAAM,CAACoV,aACT,CAAC;YACH;UACF;UAEA,IAAMC,sBAAsB,GAC1BrV,MAAM,CAACsV,aAAa,GAAG,IAAI,CAAC5S,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC4C,aAAa;UAEjF,IAAID,sBAAsB,GAAG,EAAE,EAAE;YAC/B,IAAIhB,WAAW,IAAIE,WAAW,KAAK,MAAM,EAAE;cACzCtE,oBAAW,CAACC,MAAM,CAACC,IAAI,kFAAA9M,MAAA,CAC4DL,SAAS,sBAAAK,MAAA,CAAmBmR,QAAQ,uCACrHxU,MAAM,CAACsV,aACT,CAAC;YACH;UACF;QACF;QAEA,IAAItS,SAAS,CAACsG,UAAU,CAAC,YAAY,CAAC,EAAE;UACtC,IAAI,CAAC5G,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC6C,eAAe,GAAGvV,MAAM,CAACuV,eAAe;UACnF,IAAI,CAAC7S,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC8C,0BAA0B,GACnExV,MAAM,CAACyV,gCAAgC;QAC3C;;QAEA;QACA,IAAI,CAAC/S,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACgD,sBAAsB,GAC/Df,kBAAkB,GAAG,CAAC,GAClBA,kBAAkB,IAAIG,mBAAmB,GAAGH,kBAAkB,CAAC,GAC/D,CAAC;QACP,IAAI,IAAI,CAACjS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACgD,sBAAsB,GAAG,CAAC,EAAE;UACzEzF,oBAAW,CAACC,MAAM,CAACC,IAAI,qGAAA9M,MAAA,CAC+EmR,QAAQ,GAC5G,IAAI,CAAC9R,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACgD,sBAC7C,CAAC;QACH;QAEA,IAAI1V,MAAM,CAAC4S,UAAU,IAAI5S,MAAM,CAAC6S,WAAW,EAAE;UAC3C,IAAI,CAACnQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACjH,KAAK,GAAGzL,MAAM,CAAC4S,UAAU;UACpE,IAAI,CAAClQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC/G,MAAM,GAAG3L,MAAM,CAAC6S,WAAW;UACtE,IAAI,CAACnQ,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACwC,cAAc,GAAGlV,MAAM,CAACkV,cAAc;QACnF;;QAEA;;QAEA,IAAIlV,MAAM,CAAC4U,WAAW,EAAE;UACtB,IAAI,CAAClS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACmC,gBAAgB,GACzD7U,MAAM,CAAC4U,WAAW,GAAG,CAAC,GAAG5U,MAAM,CAAC4U,WAAW,GAAG,CAAC5U,MAAM,CAAC4U,WAAW;QACrE,CAAC,MAAM;UACL,IAAI,CAAClS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACmC,gBAAgB,GAAG,CAAC;QACjE;QAEA,IAAI,CAACnS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACiD,2BAA2B,GACpE3V,MAAM,CAAC2V,2BAA2B;QACpC,IAAI,CAACjT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACyB,gBAAgB,GAAGnU,MAAM,CAACmU,gBAAgB;QACrF,IAAI,CAACzR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC0B,kBAAkB,GAAGpU,MAAM,CAACoU,kBAAkB;;QAEzF;QACA,IAAI,CAAC1R,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACS,cAAc,GAAGnT,MAAM,CAACoT,SAAS;QAC5E,IAAI,CAAC1Q,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACW,aAAa,GAAGrT,MAAM,CAACsT,QAAQ;QAC1E,IAAI,CAAC5Q,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC0C,aAAa,GAAGpV,MAAM,CAACoV,aAAa;QAC/E,IAAI,CAAC1S,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACkD,gBAAgB,GAAG5V,MAAM,CAAC4V,gBAAgB;QACrF,IAAI,CAAClT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC4C,aAAa,GAAGtV,MAAM,CAACsV,aAAa;QAE/E,IAAI,CAAC5S,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACmD,qBAAqB,GAC9D7V,MAAM,CAAC6V,qBAAqB;QAC9B,IAAI,CAACnT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACsC,oBAAoB,GAAGhV,MAAM,CAAC+U,eAAe;QAExF,IAAI,CAACrS,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACoD,mBAAmB,GAAG9V,MAAM,CAAC8V,mBAAmB;QAC3F,IAAI,CAACpT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACqD,kBAAkB,GAAG/V,MAAM,CAAC+V,kBAAkB;QACzF,IAAI,CAACrT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACgC,kBAAkB,GAAG1U,MAAM,CAAC2B,aAAa;QACpF,IAAI,CAACe,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACsD,mBAAmB,GAAGhW,MAAM,CAACgW,mBAAmB;QAC3F,IAAI,CAACtT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACuD,uBAAuB,GAChEjW,MAAM,CAACkW,4BAA4B;QACrC,IAAI,CAACxT,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACyD,qBAAqB,GAC9DnW,MAAM,CAACoW,0BAA0B;QAEnC,IAAI,CAAC1T,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC9Q,aAAa,CAAC/C,IAAI,CAACmB,MAAM,CAACqW,MAAM,CAAC;;QAE5E;;QAEA,IAAI,CAAC3T,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACzD,UAAU,GAAGjP,MAAM,CAACiP,UAAU;QACzE,IAAI,CAACvM,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACxD,gBAAgB,GAAGlP,MAAM,CAACkP,gBAAgB;QACrF,IAAI,CAACxM,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC4D,oBAAoB,GAC7DtW,MAAM,CAACsW,oBAAoB,IAAI,CAAC;QAClC,IAAI,CAAC5T,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC6D,mBAAmB,GAC5DvW,MAAM,CAACuW,mBAAmB,IAAI,CAAC;QACjC,IAAI,CAAC7T,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAAC8D,gBAAgB,GAAGxW,MAAM,CAACwW,gBAAgB,IAAI,CAAC;QAC1F,IAAI,CAAC9T,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACuB,WAAW,GAAGjU,MAAM,CAACiU,WAAW;QAC3E,IAAI,CAACvR,YAAY,CAACM,SAAS,CAAC,CAAC0P,YAAY,CAAC,CAACwB,4BAA4B,GACrElU,MAAM,CAACkU,4BAA4B;MACvC;IACF;EAAC;IAAArN,GAAA;IAAAC,KAAA;IAyGD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAAA8G,uBAAuB5N,MAAM,EAAE8D,IAAI,EAAE;MACnC;MACA,IAAI,CAACA,IAAI,IAAI,CAAC,IAAI,CAACpB,YAAY,CAACoB,IAAI,CAAC,CAACsD,IAAI,EAAE;QAC1C;MACF;MAEA,IAAMpE,SAAS,GAAGc,IAAI;MAEtB,IAAM2S,iBAAiB,GACrBzW,MAAM,CAAC4U,WAAW,GAAG,IAAI,CAAClS,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsP,0BAA0B;MAEnF,IAAI,CAAChU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACuP,qBAAqB,GAAGF,iBAAiB;MAC3E,IAAI,CAAC/T,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsP,0BAA0B,GAAG1W,MAAM,CAAC4U,WAAW;MAEjF,IAAI,CAAClS,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC5F,gBAAgB,CAAC3C,IAAI,CAACmB,MAAM,CAACqW,MAAM,CAAC;MACtE,IAAI,CAAC3T,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC3F,iBAAiB,CAAC5C,IAAI,CAACmB,MAAM,CAAC4W,aAAa,CAAC;MAE9E,IAAI,CAAClU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACpB,SAAS,GAAGhG,MAAM,CAACgG,SAAS;MAC9D,IAAI,CAACtD,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACkN,IAAI,GAAGtU,MAAM,CAACsU,IAAI;MACpD,IAAI,CAAC5R,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACyP,eAAe,GAAG7W,MAAM,CAAC6W,eAAe;;MAE1E;MACA,IAAI,CAACnU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC0P,sBAAsB,GACtD,IAAI,CAACpU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsP,0BAA0B,GAAG,CAAC,GAC5D,IAAI,CAAChU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsP,0BAA0B,GAC5D,IAAI,CAAChU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC4I,gBAAgB,GAClD,CAAC;MACP,IAAI,CAACtN,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsO,sBAAsB,GACtD,IAAI,CAAChT,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACuP,qBAAqB,GAAG,CAAC,GACtD,IAAI,CAACjU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACuP,qBAAqB,GAAG,GAAG,IAC7D,IAAI,CAACjU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC6L,WAAW,GAC5C,IAAI,CAACvQ,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACuP,qBAAqB,CAAC,GAC1D,CAAC;MAEP,IACE,IAAI,CAACjU,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC/F,kBAAkB,GACpD,IAAI,CAACqB,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsO,sBAAsB,EACxD;QACA,IAAI,CAAChT,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAAC/F,kBAAkB,GAClD,IAAI,CAACqB,YAAY,CAACM,SAAS,CAAC,CAACoE,IAAI,CAACsO,sBAAsB;MAC5D;MAEA,IAAI1V,MAAM,CAAC8D,IAAI,KAAK,oBAAoB,EAAE;QACxC,IAAI,CAACtB,qBAAqB,CAACuU,6BAA6B,CAAC;UACvD/T,SAAS,EAATA,SAAS;UACTgU,gBAAgB,EAAEhX,MAAM;UACxBiX,yBAAyB,EAAE,IAAI,CAACvU;QAClC,CAAC,CAAC;MACJ;IACF;EAAC;EAAA,OAAAb,aAAA;AAAA,EAtxCgCqV,oBAAW"}
|
|
@@ -4,6 +4,11 @@ export declare const emptyMqaInterval: {
|
|
|
4
4
|
intervalMetadata: {
|
|
5
5
|
peerReflexiveIP: string;
|
|
6
6
|
peripherals: any[];
|
|
7
|
+
cpuInfo: {
|
|
8
|
+
numberOfCores: number;
|
|
9
|
+
description: string;
|
|
10
|
+
architecture: string;
|
|
11
|
+
};
|
|
7
12
|
processAverageCPU: number;
|
|
8
13
|
processMaximumCPU: number;
|
|
9
14
|
systemAverageCPU: number;
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.3.1-next.
|
|
65
|
+
version: "3.3.1-next.16"
|
|
66
66
|
});
|
|
67
67
|
var _default = exports.default = Webinar;
|
|
68
68
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
44
44
|
"@webex/jest-config-legacy": "0.0.0",
|
|
45
45
|
"@webex/legacy-tools": "0.0.0",
|
|
46
|
-
"@webex/plugin-meetings": "3.3.1-next.
|
|
46
|
+
"@webex/plugin-meetings": "3.3.1-next.16",
|
|
47
47
|
"@webex/plugin-rooms": "3.3.1-next.3",
|
|
48
48
|
"@webex/test-helper-chai": "3.3.1-next.2",
|
|
49
49
|
"@webex/test-helper-mocha": "3.3.1-next.2",
|
|
@@ -70,10 +70,11 @@
|
|
|
70
70
|
"@webex/internal-plugin-metrics": "3.3.1-next.2",
|
|
71
71
|
"@webex/internal-plugin-support": "3.3.1-next.3",
|
|
72
72
|
"@webex/internal-plugin-user": "3.3.1-next.2",
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.3.1-next.
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.3.1-next.16",
|
|
74
74
|
"@webex/media-helpers": "3.3.1-next.4",
|
|
75
75
|
"@webex/plugin-people": "3.3.1-next.3",
|
|
76
76
|
"@webex/plugin-rooms": "3.3.1-next.3",
|
|
77
|
+
"@webex/web-capabilities": "^1.3.0",
|
|
77
78
|
"@webex/webex-core": "3.3.1-next.2",
|
|
78
79
|
"ampersand-collection": "^2.0.2",
|
|
79
80
|
"bowser": "^2.11.0",
|
|
@@ -91,5 +92,5 @@
|
|
|
91
92
|
"//": [
|
|
92
93
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
93
94
|
],
|
|
94
|
-
"version": "3.3.1-next.
|
|
95
|
+
"version": "3.3.1-next.16"
|
|
95
96
|
}
|
|
@@ -4,6 +4,11 @@ export const emptyMqaInterval = {
|
|
|
4
4
|
intervalMetadata: {
|
|
5
5
|
peerReflexiveIP: '0.0.0.0',
|
|
6
6
|
peripherals: [],
|
|
7
|
+
cpuInfo: {
|
|
8
|
+
numberOfCores: 1, // default value from spec if CpuInfo.getNumLogicalCores cannot be determined
|
|
9
|
+
description: 'NA',
|
|
10
|
+
architecture: 'unknown',
|
|
11
|
+
},
|
|
7
12
|
processAverageCPU: 0,
|
|
8
13
|
processMaximumCPU: 0,
|
|
9
14
|
systemAverageCPU: 0,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
/* eslint-disable prefer-destructuring */
|
|
2
|
-
|
|
3
1
|
import {cloneDeep, isEmpty} from 'lodash';
|
|
2
|
+
import {CpuInfo} from '@webex/web-capabilities';
|
|
4
3
|
import {ConnectionState} from '@webex/internal-media-core';
|
|
5
|
-
|
|
6
4
|
import EventsScope from '../common/events/events-scope';
|
|
7
5
|
import {
|
|
8
6
|
DEFAULT_GET_STATS_FILTER,
|
|
@@ -399,6 +397,8 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
399
397
|
|
|
400
398
|
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
401
399
|
|
|
400
|
+
newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;
|
|
401
|
+
|
|
402
402
|
// Adding peripheral information
|
|
403
403
|
newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});
|
|
404
404
|
if (this.statsResults['audio-send']) {
|
|
@@ -10,6 +10,7 @@ import testUtils from '../../../utils/testUtils';
|
|
|
10
10
|
import {MEDIA_DEVICES, MQA_INTERVAL, _UNKNOWN_} from '@webex/plugin-meetings/src/constants';
|
|
11
11
|
import LoggerProxy from '../../../../src/common/logs/logger-proxy';
|
|
12
12
|
import LoggerConfig from '../../../../src/common/logs/logger-config';
|
|
13
|
+
import {CpuInfo} from '@webex/web-capabilities';
|
|
13
14
|
|
|
14
15
|
const {assert} = chai;
|
|
15
16
|
|
|
@@ -2113,6 +2114,34 @@ describe('plugin-meetings', () => {
|
|
|
2113
2114
|
}
|
|
2114
2115
|
});
|
|
2115
2116
|
});
|
|
2116
|
-
|
|
2117
|
+
|
|
2118
|
+
describe('CPU Information Reporting', async () => {
|
|
2119
|
+
let getNumLogicalCoresStub;
|
|
2120
|
+
|
|
2121
|
+
beforeEach(async () => {
|
|
2122
|
+
getNumLogicalCoresStub = sinon.stub(CpuInfo, 'getNumLogicalCores');
|
|
2123
|
+
});
|
|
2124
|
+
|
|
2125
|
+
afterEach(() => {
|
|
2126
|
+
getNumLogicalCoresStub.restore();
|
|
2127
|
+
});
|
|
2128
|
+
|
|
2129
|
+
it('reports 1 of logical CPU cores when not available', async () => {
|
|
2130
|
+
getNumLogicalCoresStub.returns(undefined);
|
|
2131
|
+
await startStatsAnalyzer({pc, statsAnalyzer, mediaStatus: {expected: {receiveVideo: true}}});
|
|
2132
|
+
|
|
2133
|
+
await progressTime();
|
|
2134
|
+
assert.equal(mqeData.intervalMetadata.cpuInfo.numberOfCores, 1);
|
|
2135
|
+
});
|
|
2136
|
+
|
|
2137
|
+
it('reports the number of logical CPU cores', async () => {
|
|
2138
|
+
getNumLogicalCoresStub.returns(12);
|
|
2139
|
+
await startStatsAnalyzer({pc, statsAnalyzer, mediaStatus: {expected: {receiveVideo: true}}});
|
|
2140
|
+
|
|
2141
|
+
await progressTime();
|
|
2142
|
+
assert.equal(mqeData.intervalMetadata.cpuInfo.numberOfCores, 12);
|
|
2143
|
+
});
|
|
2144
|
+
});
|
|
2145
|
+
})
|
|
2117
2146
|
});
|
|
2118
2147
|
});
|