/* Metro module 4259; source: stores/MediaEngineStore.tsx; dependencies: [6, 7, 15, 17, 18, 57, 5, 4260, 4265, 4107, 4266, 4289, 1348, 1226, 4290, 4293, 1379, 4294, 1878, 12412, 661, 4286, 4661, 12413, 670, 12414, 4291, 3, 672, 477, 4406, 4041, 4662, 12415, 12416, 12417, 10750, 12418, 22, 12401, 12419, 12420, 12421, 12422, 12423, 12424, 9235, 683, 694, 10826, 12425, 12426, 4608, 12427, 12472, 12473, 12474, 12475, 12476, 12477, 12384, 4489, 4488, 3767, 587, 12478, 10269, 6731, 12482, 12483, 1244, 4222, 12484, 12485, 44, 12411, 12486, 12396, 1216, 12382, 10684, 4092, 12487, 12488, 566, 12489, 2] */ import Module00005 from '../by-id/module-00005.js'; /* Metro dependency 5 */ import ClassCallCheck from '../by-id/module-00006-ClassCallCheck.js'; /* Metro dependency 6 */ import CreateClass from '../by-id/module-00007-CreateClass.js'; /* Metro dependency 7 */ import PossibleConstructorReturn from '../by-id/module-00015-PossibleConstructorReturn.js'; /* Metro dependency 15 */ import Module00017 from '../by-id/module-00017.js'; /* Metro dependency 17 */ import Inherits from '../by-id/module-00018-Inherits.js'; /* Metro dependency 18 */ import Module00022 from '../by-id/module-00022.js'; /* Metro dependency 22 */ import Module00044 from '../by-id/module-00044.js'; /* Metro dependency 44 */ import Module00057 from '../by-id/module-00057.js'; /* Metro dependency 57 */ import Flux from '../external/discord_common/js/packages/flux/index.tsx'; /* Metro dependency 566 */ import Durations from '../utils/Durations.tsx'; /* Metro dependency 672 */ import AnalyticsUtils from '../utils/AnalyticsUtils.tsx'; /* Metro dependency 683 */ import Dispatcher from '../Dispatcher.tsx'; /* Metro dependency 694 */ import SentryUtilsNative from '../utils/SentryUtils.native.tsx'; /* Metro dependency 1216 */ import AuthenticationStore from './AuthenticationStore.tsx'; /* Metro dependency 1226 */ import UserSettingsProtoStore from '../modules/user_settings/UserSettingsProtoStore.tsx'; /* Metro dependency 1348 */ import ChannelStore from './ChannelStore.tsx'; /* Metro dependency 1379 */ import UserStore from './UserStore.tsx'; /* Metro dependency 1878 */ import ExperimentStore from '../modules/experiments/ExperimentStore.tsx'; /* Metro dependency 4107 */ import ClipsStore from '../modules/clips/ClipsStore.tsx'; /* Metro dependency 4265 */ import RunningGameStoreNative from '../modules/game_detection/RunningGameStore.native.tsx'; /* Metro dependency 4266 */ import BitRateStore from './BitRateStore.tsx'; /* Metro dependency 4290 */ import CertifiedDeviceStore from './CertifiedDeviceStore.tsx'; /* Metro dependency 4293 */ import RTCConnectionStore from './RTCConnectionStore.tsx'; /* Metro dependency 4294 */ import ProportionalVadIndicatorExperiment from '../modules/calls/ProportionalVadIndicatorExperiment.tsx'; /* Metro dependency 4608 */ import MobileAudioOutputExperiment from '../modules/media_engine/MobileAudioOutputExperiment.tsx'; /* Metro dependency 10269 */ import ExternalPipAndroid from '../modules/external_pip/ExternalPip.android.tsx'; /* Metro dependency 10684 */ import GetEffectiveNoiseCancellation from '../modules/noise_cancellation/getEffectiveNoiseCancellation.tsx'; /* Metro dependency 10826 */ import KrispUtils from '../modules/noise_cancellation/KrispUtils.tsx'; /* Metro dependency 12396 */ import VideoQualityModeStore from './VideoQualityModeStore.tsx'; /* Metro dependency 12412 */ import PTTEducationExperiment from '../modules/voice_calls/PTTEducationExperiment.tsx'; /* Metro dependency 12418 */ import HasPerformanceForKrispFullband from '../modules/device/hasPerformanceForKrispFullband.tsx'; /* Metro dependency 12477 */ import SilenceWarningExperiment from '../modules/media_engine/SilenceWarningExperiment.tsx'; /* Metro dependency 12486 */ import InputWatcher from '../modules/media_engine/InputWatcher.tsx'; /* Metro dependency 12489 */ import * as FileImportTrackerModule from '../by-id/module-00002-FileImportTracker.js'; /* Metro dependency 2 */ import * as PlatformUtilsModule from '../utils/PlatformUtils.tsx'; /* Metro dependency 477 */ import * as StorageModule from '../external/discord_common/js/packages/storage/Storage.tsx'; /* Metro dependency 587 */ import * as ConstantsModule from '../Constants.tsx'; /* Metro dependency 661 */ import * as IndexNativeModule from '../intl/index.native.tsx'; /* Metro dependency 1244 */ import * as TimersModule from '../external/discord_common/js/packages/timers/Timers.tsx'; /* Metro dependency 4041 */ import * as InjectMediaEngineNativeModule from '../lib/injectMediaEngine.native.tsx'; /* Metro dependency 4260 */ import * as SystemAnalyticsStoreNativeModule from '../modules/system_analytics/SystemAnalyticsStore.native.tsx'; /* Metro dependency 4289 */ import * as MediaEngineModule from '../external/discord_common/js/packages/media-engine/index.tsx'; /* Metro dependency 4406 */ import * as AVErrorModule from '../modules/errors/av_errors/AVError.tsx'; /* Metro dependency 9235 */ import * as IsClipsEnabledModule from '../modules/clips/isClipsEnabled.tsx'; /* Metro dependency 12382 */ import * as SpatialAudioConstantsModule from '../modules/spatial_audio/SpatialAudioConstants.tsx'; /* Metro dependency 12413 */ import * as UserSettingsVoiceAndVideoConstantsModule from '../modules/user_settings/voice/UserSettingsVoiceAndVideoConstants.tsx'; /* Metro dependency 12414 */ import * as GoLiveHdrExperimentModule from '../modules/media_engine/GoLiveHdrExperiment.tsx'; /* Metro dependency 12415 */ import * as AGC2ExperimentModule from '../modules/media_engine/AGC2Experiment.tsx'; /* Metro dependency 12417 */ import * as DisableHookFramePacerExperimentModule from '../modules/media_engine/DisableHookFramePacerExperiment.tsx'; /* Metro dependency 12422 */ import * as VideoHookDX12ExperimentModule from '../modules/media_engine/VideoHookDX12Experiment.tsx'; /* Metro dependency 12423 */ import * as LowLatencyRateControlExperimentModule from '../modules/media_engine/LowLatencyRateControlExperiment.tsx'; /* Metro dependency 12426 */ function _fun35470(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#35470, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:6, offset: 0x0107355d, size: 3665 bytes, params: 8, frame: 39 let env0_0 = require; const _arrayLikeToArray_35476 = function(a0, a1) { var r0; var r1; var r2; var value3; var length; var value5; var value = undefined; var value2 = value == null; reducibleJoin2: while (true) { if (value2) { r0 = value2; break reducibleJoin2; } value3 = value > a0.length; r0 = value3; break reducibleJoin2; } reducibleJoin4: while (true) { if (r0) { length = a0.length; r1 = length; break reducibleJoin4; } r1 = value; break reducibleJoin4; } value = (0, global.Array)(r1); var value4 = 0; if (value4 < r1) { r2 = value4; reducibleLoop5: while (true) { value[r2] = a0[r2]; value5 = typeof r2 === 'bigint' ? r2 + 1n : +r2 + 1; if (value5 < r1) { r2 = value5; continue reducibleLoop5; } break reducibleLoop5; } } return value; }; const videoFilterErrorToAVUnderlyingError = function(a0) { if (VideoFilterError.UNSUPPORTED === a0) { return require(dependencyMap[46]).AVUnderlyingError.VideoBackgroundUnsupported; } if (VideoFilterError.INIT_FAILED === a0) { return require(dependencyMap[46]).AVUnderlyingError.VideoBackgroundInitFailed; } }; const setAutomaticGainControl = function(a0, a1) { a0.setAutomaticGainControl(getAutomaticGainControlConfig(a1)); }; const closure = function(a0) { return {id: DEFAULT_DEVICE_ID, index: 0, name: a0, disabled: true, guid: undefined, hardwareId: undefined, containerId: undefined}; }; const hasHardwareMatch = function(a0, a1) { var env0_0 = a0; return a1.find(_fun35547) != null; }; const getDeviceId = function(a0, a1) { var r1; var value = a1; r1 = a0[value] ?? a0[DEFAULT_DEVICE_ID]; r1 = r1 ?? importDefault(dependencyMap[38])(a0).values().first(); return r1 == null ? value : r1.id; }; const hasHapticsOverAudioOutputDevices = function(a0) { var Object = global.Object; return Object.values(a0).some(_fun35555); }; const closure2 = function({section}) { if (section === UserSettingsSections.VOICE) { tryEnable(); } return false; }; let Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); InjectMediaEngineNativeModule; let value = ConstantsModule; const env0_23 = value.AnalyticEvents; const env0_24 = value.AppStates; const InputModes = value.InputModes; const env0_26 = value.RTCConnectionStates; const env0_27 = value.UserSettingsSections; const env0_28 = value.VideoToggleState; value = require(4286) /* metro dependency 4286: Constants */; const env0_29 = value.DARWIN_SCKIT_VERSION; const env0_30 = value.DARWIN_SCKIT_AUDIO_VERSION; const env0_31 = value.WINDOWS_GRAPHICS_CAPTURE_NEW_APIS_BUILD; const env0_32 = value.WINDOWS_GRAPHICS_CAPTURE_NEW_APIS_SEMVER; const env0_33 = value.WINDOWS_GRAPHICS_CAPTURE_BUILD; const env0_34 = value.WINDOWS_GRAPHICS_CAPTURE_SEMVER; const env0_35 = value.WINDOWS_SOUNDSHARE_HOOK_VERSION; const env0_36 = value.WINDOWS_SOUNDSHARE_NONHOOK_VERSION; value = require(4661) /* metro dependency 4661: NativePermissionConstants */; const env0_37 = value.NativePermissionStates; const NativePermissionTypes = value.NativePermissionTypes; value = require(670) /* metro dependency 670: UserSettingsConstants */; const env0_40 = value.ProtoAudioSettingsContextTypes; const env0_41 = value.UserSettingsTypes; const InputProfile = (UserSettingsVoiceAndVideoConstantsModule).InputProfile; value = require(4291) /* metro dependency 4291: Constants */; const env0_43 = value.AudioSubsystems; const env0_44 = value.DARWIN_H265_VERSION; const env0_45 = value.DEFAULT_VOLUME; const env0_46 = value.DEFAULT_STREAM_VOLUME; const DEFAULT_DEVICE_ID = value.DEFAULT_DEVICE_ID; const env0_48 = value.DeviceTypes; const DISABLED_DEVICE_ID = value.DISABLED_DEVICE_ID; const env0_50 = value.ExperimentFlags; const Features = value.Features; const MediaEngineContextTypes = value.MediaEngineContextTypes; const NoiseCancellerError = value.NoiseCancellerError; const env0_54 = value.VideoFilterError; const env0_55 = value.VideoFilterTarget; const env0_56 = value.MediaTypes; const env0_57 = value.QUEUE_METRICS_INTERVAL_MS; const env0_58 = value.VideoToggleReason; const env0_59 = value.VIEWERSIDE_CLIP_KFI_MS; const env0_60 = value.SIMULCAST_HQ_QUALITY; const env0_61 = value.SIMULCAST_LQ_QUALITY; value = importDefault(3) /* metro dependency 3: Logger */; value = new value('MediaEngineStore'); const env0_64 = {'left': 1, 'right': 1}; let Millis = (importDefault(672) /* metro dependency 672: Durations */).Millis; let SECOND = Millis.SECOND; const env0_65 = 5 * SECOND; Millis = (importDefault(672) /* metro dependency 672: Durations */).Millis; SECOND = Millis.SECOND; const env0_66 = 2 * SECOND; Millis = (importDefault(672) /* metro dependency 672: Durations */).Millis; SECOND = Millis.SECOND; const env0_67 = 30 * SECOND; Millis = (importDefault(672) /* metro dependency 672: Durations */).Millis; const MINUTE = Millis.MINUTE; const env0_68 = 1 * MINUTE; const object2 = {}; const CUSTOM = InputProfile.CUSTOM; object2[CUSTOM] = {}; const VOICE_ISOLATION = InputProfile.VOICE_ISOLATION; object2[VOICE_ISOLATION] = {'modeOptions': null, 'echoCancellation': true, 'noiseSuppression': false, 'automaticGainControl': true, 'noiseCancellation': true, 'bypassSystemInputProcessing': true, modeOptions: {'autoThreshold': true, 'vadUseKrisp': true}}; const STUDIO = InputProfile.STUDIO; const VOICE_ACTIVITY = InputModes.VOICE_ACTIVITY; object2[STUDIO] = {'mode': null, 'modeOptions': null, 'echoCancellation': false, 'noiseSuppression': false, 'automaticGainControl': false, 'noiseCancellation': false, 'bypassSystemInputProcessing': true, mode: VOICE_ACTIVITY, modeOptions: {'threshold': -84, 'autoThreshold': false, 'vadUseKrisp': false}}; ({'modeOptions': null, 'noiseCancellation': false, 'noiseSuppression': true}).modeOptions = {vadUseKrisp: false}; const initializeMediaEngine = MediaEngineModule.initializeMediaEngine; let value4 = MediaEngineModule; let value5 = Reflect.apply(initializeMediaEngine, MediaEngineModule, [value4.determineMediaEngine()]); value.enableNativeLogger(true); let env0_82 = {}; let Set = global.Set; const DEFAULT = MediaEngineContextTypes.DEFAULT; const set = new Set([DEFAULT]); const supports = value5.supports; const AUTO_ENABLE = Features.AUTO_ENABLE; const env0_84 = Reflect.apply(supports, value5, [AUTO_ENABLE]); let env0_86 = MediaEngineContextTypes.STREAM; const env0_87 = global.performance.now(); ({})[DEFAULT_DEVICE_ID] = closure('No Input Devices'); ({})[DEFAULT_DEVICE_ID] = closure('No Output Devices'); ({})[DEFAULT_DEVICE_ID] = closure('No Video Devices'); const Timeout = (TimersModule).Timeout; let timeout = new Timeout(); timeout = new Timeout(); timeout = new Timeout(); const env0_118 = []; const env0_124 = {}; timeout = importDefault(4662) /* metro dependency 4662: NativePermissionUtils */; let hasPermission = timeout.hasPermission; const AUDIO = NativePermissionTypes.AUDIO; Reflect.apply(hasPermission, timeout, [AUDIO, {showAuthorizationError: false}]); timeout = importDefault(4662) /* metro dependency 4662: NativePermissionUtils */; hasPermission = timeout.hasPermission; const CAMERA = NativePermissionTypes.CAMERA; Reflect.apply(hasPermission, timeout, [CAMERA, {showAuthorizationError: false}]); Set = global.Set; timeout = new Set(); Set = global.Set; timeout = new Set(); let env0_132 = {}; timeout = new Timeout(); const env0_143 = {}; Set = global.Set; const KRISP_INIT_ERROR = NoiseCancellerError.KRISP_INIT_ERROR; const KRISP_INIT_ERROR_NATIVE = NoiseCancellerError.KRISP_INIT_ERROR_NATIVE; const KRISP_INIT_ERROR_SSE4_NOT_SUPPORTED = NoiseCancellerError.KRISP_INIT_ERROR_SSE4_NOT_SUPPORTED; const KRISP_INIT_ERROR_AVX2_NOT_SUPPORTED = NoiseCancellerError.KRISP_INIT_ERROR_AVX2_NOT_SUPPORTED; const KRISP_INIT_ERROR_UNSIGNED = NoiseCancellerError.KRISP_INIT_ERROR_UNSIGNED; const KRISP_INIT_ERROR_GLOBAL_INIT = NoiseCancellerError.KRISP_INIT_ERROR_GLOBAL_INIT; const KRISP_INIT_ERROR_WEIGHT_8K = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_8K; const KRISP_INIT_ERROR_WEIGHT_16K = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_16K; const KRISP_INIT_ERROR_WEIGHT_32K = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_32K; const KRISP_INIT_ERROR_WEIGHT_VAD = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_VAD; timeout = new Set([KRISP_INIT_ERROR, KRISP_INIT_ERROR_NATIVE, KRISP_INIT_ERROR_SSE4_NOT_SUPPORTED, KRISP_INIT_ERROR_AVX2_NOT_SUPPORTED, KRISP_INIT_ERROR_UNSIGNED, KRISP_INIT_ERROR_GLOBAL_INIT, KRISP_INIT_ERROR_WEIGHT_8K, KRISP_INIT_ERROR_WEIGHT_16K, KRISP_INIT_ERROR_WEIGHT_32K, KRISP_INIT_ERROR_WEIGHT_VAD]); const env0_146 = RegExp('^HDAUDIO\\\\(?:SUB)?FUNC_\\d+&VEN_(?:8086|1002|10DE)', ''); const Store = (Flux).Store; _fun35597(Store).displayName = 'MediaEngineStore'; timeout = new timeout(importDefault(694) /* metro dependency 694: Dispatcher */, {VOICE_CHANNEL_SELECT: VOICE_CHANNEL_SELECT_35743, VOICE_STATE_UPDATES: function({voiceStates}) { return voiceStates.reduce(_fun35745, false); }, CONNECTION_OPEN: CONNECTION_OPEN_35746, CONNECTION_CLOSED: function() { env0_78 = null; }, POST_CONNECTION_OPEN: POST_CONNECTION_OPEN, RTC_CONNECTION_STATE: RTC_CONNECTION_STATE_35749, AUDIO_SET_TEMPORARY_SELF_MUTE: AUDIO_SET_TEMPORARY_SELF_MUTE, AUDIO_TOGGLE_SELF_MUTE: AUDIO_TOGGLE_SELF_MUTE, AUDIO_SET_SELF_MUTE: AUDIO_SET_SELF_MUTE, AUDIO_TOGGLE_SELF_DEAF: AUDIO_TOGGLE_SELF_DEAF, AUDIO_TOGGLE_LOCAL_MUTE: AUDIO_TOGGLE_LOCAL_MUTE, AUDIO_SET_LOCAL_VIDEO_DISABLED: AUDIO_SET_LOCAL_VIDEO_DISABLED, AUDIO_SET_LOCAL_VOLUME: AUDIO_SET_LOCAL_VOLUME, AUDIO_SET_AUDIO_MIXER_SETTINGS: AUDIO_SET_AUDIO_MIXER_SETTINGS, AUDIO_SET_LOCAL_PAN: AUDIO_SET_LOCAL_PAN, AUDIO_SET_MODE: AUDIO_SET_MODE, AUDIO_SET_INPUT_VOLUME: AUDIO_SET_INPUT_VOLUME, AUDIO_SET_OUTPUT_VOLUME: AUDIO_SET_OUTPUT_VOLUME, AUDIO_SET_INPUT_DEVICE: AUDIO_SET_INPUT_DEVICE, AUDIO_SET_OUTPUT_DEVICE: AUDIO_SET_OUTPUT_DEVICE, AUDIO_SET_ACTIVE_INPUT_PROFILE: AUDIO_SET_ACTIVE_INPUT_PROFILE, AUDIO_SET_ECHO_CANCELLATION: AUDIO_SET_ECHO_CANCELLATION, AUDIO_SET_SIDECHAIN_COMPRESSION: AUDIO_SET_SIDECHAIN_COMPRESSION, AUDIO_SET_SIDECHAIN_COMPRESSION_STRENGTH: AUDIO_SET_SIDECHAIN_COMPRESSION_STRENGTH, AUDIO_SET_LOOPBACK: AUDIO_SET_LOOPBACK, AUDIO_SET_NOISE_SUPPRESSION: AUDIO_SET_NOISE_SUPPRESSION, AUDIO_SET_AUTOMATIC_GAIN_CONTROL: AUDIO_SET_AUTOMATIC_GAIN_CONTROL, AUDIO_SET_NOISE_CANCELLATION: AUDIO_SET_NOISE_CANCELLATION, AUDIO_SET_KRISP_MODEL_OVERRIDE: function(a0) { importDefault(dependencyMap[77]).setKrispModelOverride(a0.model); env0_117 = a0.model; setLoopback(); }, AUDIO_SET_DISPLAY_SILENCE_WARNING: function(a0) { mergeSettings({silenceWarning: a0.enabled}); }, AUDIO_SET_DEBUG_LOGGING: AUDIO_SET_DEBUG_LOGGING, AUDIO_SET_KRISP_SUPPRESSION_LEVEL: AUDIO_SET_KRISP_SUPPRESSION_LEVEL, AUDIO_SET_NOISE_CANCELLATION_ENABLE_STATS: AUDIO_SET_NOISE_CANCELLATION_ENABLE_STATS, MEDIA_ENGINE_SET_VIDEO_HOOK: function(a0) { mergeSettings({videoHook: a0.enabled}); }, MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE: function(a0) { mergeSettings({experimentalSoundshare2: a0.enabled}); }, MEDIA_ENGINE_SET_USE_SYSTEM_SCREENSHARE_PICKER: function({enabled}) { mergeSettings({useSystemScreensharePicker: enabled}); }, AUDIO_SET_ATTENUATION: AUDIO_SET_ATTENUATION, AUDIO_SET_QOS: AUDIO_SET_QOS, MEDIA_ENGINE_DEVICES: MEDIA_ENGINE_DEVICES, AUDIO_VOLUME_CHANGE: function({inputVolume, outputVolume}) { var mergeSettingsBinding = mergeSettings; var object = {}; object.inputVolume = clampVolume(inputVolume); object.outputVolume = outputVolume; mergeSettingsBinding(object); }, AUDIO_RESET: AUDIO_RESET, AUDIO_INPUT_DETECTED: AUDIO_INPUT_DETECTED, AUDIO_INPUT_DEVICE_OS_CONFIG_FETCHED: function({osVolume, osMuted}) { env0_110 = osVolume; env0_109 = osMuted; }, AUDIO_SET_SUBSYSTEM: function(a0) { setAudioSubsystem(a0.subsystem); }, AUDIO_SET_BYPASS_SYSTEM_INPUT_PROCESSING: AUDIO_SET_BYPASS_SYSTEM_INPUT_PROCESSING, MEDIA_ENGINE_SET_AUDIO_ENABLED: MEDIA_ENGINE_SET_AUDIO_ENABLED, MEDIA_ENGINE_SET_VIDEO_ENABLED: function({enabled}) { importDefault(dependencyMap[32]).requestPermission(NativePermissionTypes.CAMERA); updateVideo(enabled); }, MEDIA_ENGINE_PERMISSION: MEDIA_ENGINE_PERMISSION, MEDIA_ENGINE_SET_GO_LIVE_SOURCE: MEDIA_ENGINE_SET_GO_LIVE_SOURCE, MEDIA_ENGINE_SET_VIDEO_DEVICE: MEDIA_ENGINE_SET_VIDEO_DEVICE, MEDIA_ENGINE_INTERACTION_REQUIRED: MEDIA_ENGINE_INTERACTION_REQUIRED, USER_SETTINGS_MODAL_INIT: closure2, USER_SETTINGS_MODAL_SET_SECTION: closure2, CERTIFIED_DEVICES_SET: CERTIFIED_DEVICES_SET, RPC_APP_CONNECTED: RPC_APP_CONNECTED, RPC_APP_DISCONNECTED: RPC_APP_DISCONNECTED, OVERLAY_INITIALIZE: function({mediaEngineState}) { env0_82 = mediaEngineState.settingsByContext; env0_90 = mediaEngineState.inputDevices; env0_91 = mediaEngineState.outputDevices; env0_132 = mediaEngineState.appSupported; env0_113 = mediaEngineState.krispModuleLoaded; env0_114 = mediaEngineState.krispFatalError; env0_115 = mediaEngineState.krispVersion; env0_86 = mediaEngineState.goLiveContext; }, APP_STATE_UPDATE: APP_STATE_UPDATE_35816, SET_CHANNEL_BITRATE: SET_CHANNEL_BITRATE, SET_VAD_PERMISSION: SET_VAD_PERMISSION, SET_NATIVE_PERMISSION: SET_NATIVE_PERMISSION, SET_CHANNEL_VIDEO_QUALITY_MODE: SET_CHANNEL_VIDEO_QUALITY_MODE, MEDIA_ENGINE_SET_AEC_DUMP: MEDIA_ENGINE_SET_AEC_DUMP, MEDIA_ENGINE_SET_OPENH264_ENABLED: MEDIA_ENGINE_SET_OPENH264_ENABLED, MEDIA_ENGINE_RESET_SETTINGS: MEDIA_ENGINE_RESET_SETTINGS, CHANNEL_DELETE: CHANNEL_DELETE_35827, MEDIA_ENGINE_NOISE_CANCELLATION_ERROR: MEDIA_ENGINE_NOISE_CANCELLATION_ERROR, MEDIA_ENGINE_VOICE_ACTIVITY_DETECTION_ERROR: MEDIA_ENGINE_VOICE_ACTIVITY_DETECTION_ERROR, MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET: MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS: MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START: function() { env0_122 = true; }, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR: function() { env0_122 = false; }, USER_SETTINGS_PROTO_UPDATE: function(a0) { var type = a0.settings.type; var local = a0.local; var wasSaved = a0.wasSaved; if (type !== UserSettingsTypes.PRELOADED_USER_SETTINGS) { return false; } if (local) { return false; } if (wasSaved != null) { return false; } applyRemoteSettings(true); }, CLIPS_INIT: CLIPS_INIT, CLIPS_SETTINGS_UPDATE: CLIPS_SETTINGS_UPDATE_35839, MEDIA_ENGINE_SET_ENABLE_HARDWARE_MUTE_NOTICE: function(a0) { env0_136 = a0.enabled; }, MEDIA_ENGINE_SET_DEVICE_AUDIO_EFFECTS: MEDIA_ENGINE_SET_DEVICE_AUDIO_EFFECTS}); const value10 = new (InputWatcher)(value5, timeout); (FileImportTrackerModule).fileFinishedImporting('stores/MediaEngineStore.tsx'); exports.default = timeout; exports.WINDOWS_NOISE_SUPPRESSION_EFFECT = 'deep_noise_suppression'; exports.LINUX_OPENH264_URL = 'https://ciscobinary.openh264.org/libopenh264-2.5.1-linux64.7.so.bz2'; exports.LINUX_OPENH264_SHA256 = 'd828a944d4d2bb64195ada89cf2cde9bc41733b1547d0788ef49fb8cb231b76f'; exports.DeviceFormFactor = {WEBCAM: 'WEBCAM', INTEGRATED: 'INTEGRATED', BLUETOOTH: 'BLUETOOTH', AIRPLAY: 'AIRPLAY', HEADSET: 'HEADSET'}; function _isNativeReflectConstruct_35471() { // fn#35471, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:1481, offset: 0x010743ae, size: 94 bytes, params: 1, frame: 18 var Boolean; var prototype; var valueOf; var call; var Reflect; var construct; var closure; var value; var error; try { Boolean = global.Boolean; prototype = Boolean.prototype; valueOf = prototype.valueOf; call = valueOf.call; Reflect = global.Reflect; construct = Reflect.construct; Boolean = global.Boolean; closure = function() { }; value = Reflect.apply(construct, Reflect, [Boolean, [], closure]); value = Reflect.apply(call, valueOf, [value]); var result = !value; } catch (error) { } return (_isNativeReflectConstruct_35471_isNativeReflectConstruct = function() { return !!result; })(); } function _createForOfIteratorHelperLoose_35474(a0, a1) { // fn#35474, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:1674, offset: 0x0107440c, size: 370 bytes, params: 3, frame: 20 var r6; var r9; var r5; var value3; var regexp; const env0_0 = a0; const Symbol = global.Symbol; let value = typeof Symbol !== 'undefined'; let r1 = value && a0[global.Symbol.iterator]; r1 = !r1 ? a0['@@iterator'] : r1; if (r1) { value = r1.call(a0); return value.next.bind(value); } const Array = global.Array; if (Array.isArray(a0)) { if (r1) { } return _fun35475; } value = undefined; if (a0) { if (typeof a0 === 'string') { value = _arrayLikeToArray_35476(a0, value); r5 = value; } else { value3 = ({}).toString.call(a0).slice(8, -1); r6 = value3 === 'Object' && a0.constructor; r9 = r6 ? a0.constructor.name : value3; if (r9 === 'Map') { r6 = global.Array.from(a0); } else if (r9 === 'Set') { r6 = global.Array.from(a0); } else if (r9 === 'Arguments') { value = _arrayLikeToArray_35476(a0, value); r6 = value; } else { regexp = RegExp('^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$', ''); if (regexp.test(r9)) { value = _arrayLikeToArray_35476(a0, value); r6 = value; } else { r6 = value; } } r5 = r6; } } else { r5 = value; } if (r5) { if (r5) { } return _fun35475; } const TypeError = global.TypeError; throw new TypeError('Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'); function _fun35475() { // fn#35475, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:2245, offset: 0x00c39d73, size: 69 bytes, params: 1, frame: 5 return env0_1 >= env0_0.length ? {done: true} : {done: false, value: env0_0[typeof env0_1 === 'bigint' ? env0_1 : +env0_1]}; } } function getDefaultSettings() { // fn#35477, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:3108, offset: 0x0107457e, size: 320 bytes, params: 1, frame: 16 const object = {'mode': null, 'modeOptions': null, 'vadUseKrispSettingVersion': 0, 'ncUseKrispSettingVersion': 0, 'ncUseKrispjsSettingVersion': 0, 'mute': false, 'deaf': false, 'echoCancellation': true, 'noiseSuppression': false, 'automaticGainControl': true, 'noiseCancellation': true, 'bypassSystemInputProcessing': true, 'hardwareEnabledVersion': 0, 'silenceWarning': true, 'attenuation': 0, 'attenuateWhileSpeakingSelf': false, 'attenuateWhileSpeakingOthers': true}; const VOICE_ACTIVITY = InputModes.VOICE_ACTIVITY; object.mode = VOICE_ACTIVITY; let isPlatformEmbedded = (PlatformUtilsModule).isPlatformEmbedded; isPlatformEmbedded = !!isPlatformEmbedded && isPlatformEmbedded; object.modeOptions = {'threshold': -60, 'autoThreshold': null, 'vadUseKrisp': true, 'vadKrispActivationThreshold': 0.5, 'vadLeading': 5, 'vadTrailing': 25, 'delay': 20, autoThreshold: isPlatformEmbedded, shortcut: [], updatedAt: undefined}; object.localMutes = {}; object.disabledLocalVideos = {}; object.videoToggleStateMap = {}; object.localVolumes = {}; const object3 = {}; copyDataProperties(object3, DEFAULT_AUDIO_MIXER_SETTINGS, undefined); object.audioMixerSettings = object3; object.audioMixerSettingsVersion = 0; object.localPans = {}; object.inputVolume = DEFAULT_VOLUME; object.outputVolume = DEFAULT_VOLUME; object.inputDeviceId = DEFAULT_DEVICE_ID; object.outputDeviceId = DEFAULT_DEVICE_ID; object.videoDeviceId = DEFAULT_DEVICE_ID; object.qos = false; object.qosMigrated = false; const binding = env0_77; const supports = binding.supports; const VIDEO_HOOK = Features.VIDEO_HOOK; object.videoHook = Reflect.apply(supports, binding, [VIDEO_HOOK]); object.experimentalSoundshare2 = null; object.useSystemScreensharePicker = null; object.h265Enabled = true; object.vadThrehsoldMigrated = false; object.aecDumpEnabled = false; object.openH264Enabled = true; object.sidechainCompression = true; object.sidechainCompressionSettingVersion = 1; object.sidechainCompressionStrength = 50; object.automaticAudioSubsystem = true; object.activeInputProfile = null; return object; } function getHdrCaptureMode(a0) { // fn#35478, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:5689, offset: 0x010746be, size: 53 bytes, params: 2, frame: 12 const getGoLiveHdrConfig = GoLiveHdrExperimentModule.getGoLiveHdrConfig; return Reflect.apply(getGoLiveHdrConfig, GoLiveHdrExperimentModule, [{location: a0}]).hdrCaptureMode; } function _detectH265HardwareDecode() { // fn#35479, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:5785, offset: 0x010746f3, size: 48 bytes, params: 1, frame: 14 return Module00005(_fun35481).apply(this, arguments); } function startH265HardwareDetection() { // fn#35482, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:6272, offset: 0x010747ea, size: 94 bytes, params: 1, frame: 13 return env0_126 ?? (typeof global.window !== 'undefined' ? (function() { return _detectH265HardwareDecode.apply(this, arguments); })().then(function(a0) { env1_125 = a0; return a0; }) : global.Promise.resolve(false)); } function getStoredSettings() { // fn#35485, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:6498, offset: 0x01074872, size: 60 bytes, params: 1, frame: 12 var r0; var defaultSettings; const value = a0; const r3 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; const property = env0_82[r3]; if (property != null) { r0 = property; } else { defaultSettings = getDefaultSettings(); env0_82[r3] = defaultSettings; r0 = defaultSettings; } return r0; } function _getSettings0() { // fn#35486, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:6602, offset: 0x010748ae, size: 355 bytes, params: 1, frame: 20 var r10; var moduleValue; var getVADBeforeProcessingExperimentConfig; var value3; let value = a0; const storedSettings = getStoredSettings(value !== undefined ? value : MediaEngineContextTypes.DEFAULT); const binding = env0_75; let r1 = storedSettings.activeInputProfile ?? InputProfile.CUSTOM; const property = binding[r1]; r1 = isKrispAvailable() ? env0_143 : env0_76; const object = {}; copyDataProperties(object, storedSettings.modeOptions ?? ({}), r10); copyDataProperties(object, property.modeOptions ?? ({}), r10); copyDataProperties(object, r1.modeOptions ?? ({}), r10); if (object.vadDuringPreProcess == null) { moduleValue = require(12416) /* metro dependency 12416: VADBeforeProcessingExperiment */; getVADBeforeProcessingExperimentConfig = moduleValue.getVADBeforeProcessingExperimentConfig; value3 = 'getSettings'; object.vadDuringPreProcess = Reflect.apply(getVADBeforeProcessingExperimentConfig, moduleValue, [{location: value3}]).enabled; r10 = value3; } if (object.vadKrispActivationThreshold != null) { if (storedSettings.automaticGainControl === true) { value = require(12417) /* metro dependency 12417: AGC2Experiment */; value = value.getAGC2ExperimentConfig({location: 'getSettings'}); if (value.vadKrispActivationThreshold != null) { object.vadKrispActivationThreshold = value.vadKrispActivationThreshold; } } } else if (property.automaticGainControl === true) { value = require(12417) /* metro dependency 12417: AGC2Experiment */; value = value.getAGC2ExperimentConfig({location: 'getSettings'}); if (value.vadKrispActivationThreshold != null) { object.vadKrispActivationThreshold = value.vadKrispActivationThreshold; } } else if (storedSettings.automaticGainControl === true) { value = require(12417) /* metro dependency 12417: AGC2Experiment */; value = value.getAGC2ExperimentConfig({location: 'getSettings'}); if (value.vadKrispActivationThreshold != null) { object.vadKrispActivationThreshold = value.vadKrispActivationThreshold; } } const object4 = {}; copyDataProperties(object4, storedSettings, r10); copyDataProperties(object4, property, r10); copyDataProperties(object4, r1, r10); object4['modeOptions'] = object; return object4; } function setInputMode(a0) { // fn#35487, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:7287, offset: 0x01074a11, size: 375 bytes, params: 2, frame: 19 const _getSettings0Binding = _getSettings0; let context = a0.context; const value2 = _getSettings0Binding(context); const mode = value2.mode; context = a0.context; const DEFAULT = MediaEngineContextTypes.DEFAULT; if (context === DEFAULT) { (require(10750) /* metro dependency 10750: MediaEngineActionCreators */).setPushToTalkState(false, false); } const defaultImport = PTTEducationExperiment; const getConfig = defaultImport.getConfig; let r6 = Reflect.apply(getConfig, defaultImport, [{location: 'setInputMode'}]).showPTTSpeakingIndicator && mode === InputModes.PUSH_TO_TALK; const setInputMode = a0.setInputMode; object = {}; object.vadThreshold = value2.modeOptions.threshold; const value4 = !!r6; object.vadAutoThreshold = r6 ? value4 : value2.modeOptions.autoThreshold; r6 = (r6 ? value4 : value2.modeOptions.vadUseKrisp) && isKrispAvailable(); object.vadUseKrisp = r6; object.vadKrispActivationThreshold = value2.modeOptions.vadKrispActivationThreshold ?? 0.5; object.vadLeading = value2.modeOptions.vadLeading; object.vadTrailing = value2.modeOptions.vadTrailing; const vadDuringPreProcess = value2.modeOptions.vadDuringPreProcess; object.vadDuringPreProcess = vadDuringPreProcess != null && vadDuringPreProcess; const Math = global.Math; object.pttReleaseDelay = Math.round(value2.modeOptions.delay); Reflect.apply(setInputMode, a0, [mode, object]); } function clampVolume(a0) { // fn#35488, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:7963, offset: 0x01074b88, size: 58 bytes, params: 2, frame: 15 undefined !== undefined; return (Module00022).clamp(a0, 0, DEFAULT_VOLUME); } function updateConnectionMuteDeaf(a0) { // fn#35489, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:8023, offset: 0x01074bc2, size: 247 bytes, params: 2, frame: 17 var r4; var r5; var defaultImport; const _getSettings0Binding = _getSettings0; let context = a0.context; const value2 = _getSettings0Binding(context); const binding = env0_84; let r6 = binding ? value2.mute : !binding; r6 = !r6 ? value2.deaf : r6; context = a0.context; let DEFAULT = MediaEngineContextTypes.DEFAULT; if (DEFAULT === context) { r4 = r6 || env0_94; r4 = !r4 ? env0_95 : r4; r4 = !r4 ? env0_96 : r4; if (!r4) { defaultImport = importDefault(4662) /* metro dependency 4662: NativePermissionUtils */; r4 = !defaultImport.didHavePermission(NativePermissionTypes.AUDIO); } r5 = r4; } else if (MediaEngineContextTypes.STREAM === context) { r5 = true; } else { a0.context; r5 = r6; } a0.setSelfMute(r5); a0.setSelfDeaf(value2.deaf); context = a0.context; DEFAULT = MediaEngineContextTypes.DEFAULT; if (context === DEFAULT) { (importDefault(12401) /* metro dependency 12401: NativeMuteManagerNative */).updateNativeMute(); } } function updateVideo() { // fn#35490, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:8348, offset: 0x01074cb9, size: 1444 bytes, params: 1, frame: 27 var id; var r4; var videoDeviceGuid; var audioDeviceGuid; var r5; var r12; var enabled; var r10; var r15; var r9; var id2; var moduleValue; var videoHook; var moduleValue2; var moduleValue3; var setGoLiveSource; var videoDeviceGuid2; var value8; var audioDeviceGuid2; var videoDeviceId; var object; var quality; var hdrCaptureMode; var value12; var isWindows2; var defaultImport; var WGCDirtyRegionsAllExperiment; var WGCDirtyRegionsExperiment; var DisableHookFramePacerExperiment; var VideoHookDX12Experiment; var object5; var moduleValue7; var object6; const value = a0; const value2 = a1; const value3 = undefined; let r2 = value !== value3 ? value : env0_98; const r8 = value2 !== value3 ? value2 : env0_79; let binding = env0_79; let desktopSource = binding == null ? value3 : binding.desktopSource; const value4 = desktopSource != null; if (value4) { desktopSource = binding.desktopSource; id2 = desktopSource.id; if (r8 == null) { id = value3; } else { desktopSource = r8.desktopSource; id = desktopSource == null ? value3 : desktopSource.id; } r4 = id2 !== id; } else { r4 = value4; } if (r4) { if (binding.desktopSource.soundshareId == null) { if (binding.desktopSource.sourcePid != null && _getSettings0().videoHook) { moduleValue2 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue2.cancelAttachToProcess(binding.desktopSource.sourcePid); } } else { moduleValue = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue.isWindows()) { moduleValue3 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue3.cancelAttachToProcess(binding.desktopSource.soundshareId); } else if (binding.desktopSource.sourcePid != null && _getSettings0().videoHook) { moduleValue2 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue2.cancelAttachToProcess(binding.desktopSource.sourcePid); } } env0_77.setGoLiveSource(null, STREAM); } let cameraSource = binding == null ? value3 : binding.cameraSource; const value7 = cameraSource == null; if (value7) { r4 = value7; } else { cameraSource = binding.cameraSource; videoDeviceGuid2 = cameraSource.videoDeviceGuid; if (r8 == null) { videoDeviceGuid = value3; } else { cameraSource = r8.cameraSource; videoDeviceGuid = cameraSource == null ? value3 : cameraSource.videoDeviceGuid; } value8 = videoDeviceGuid2 === videoDeviceGuid; if (value8) { cameraSource = binding.cameraSource; audioDeviceGuid2 = cameraSource.audioDeviceGuid; if (r8 == null) { audioDeviceGuid = value3; } else { cameraSource = r8.cameraSource; audioDeviceGuid = cameraSource == null ? value3 : cameraSource.audioDeviceGuid; } r5 = audioDeviceGuid2 === audioDeviceGuid; } else { r5 = value8; } r4 = r5; } if (!r4) { env0_77.setGoLiveSource(null, STREAM); } if (env0_98) { videoDeviceId = _getSettings0().videoDeviceId; r2 = r2 ? getDeviceId(env0_92, env0_98 ? videoDeviceId !== DEFAULT_DEVICE_ID || DISABLED_DEVICE_ID !== DEFAULT_DEVICE_ID ? videoDeviceId : DISABLED_DEVICE_ID !== DISABLED_DEVICE_ID ? DISABLED_DEVICE_ID : videoDeviceId : videoDeviceId) : DISABLED_DEVICE_ID; env0_77.setVideoInputDevice(r2); } else if (r2) { videoDeviceId = _getSettings0().videoDeviceId; r2 = r2 ? getDeviceId(env0_92, env0_98 ? videoDeviceId !== DEFAULT_DEVICE_ID || DISABLED_DEVICE_ID !== DEFAULT_DEVICE_ID ? videoDeviceId : DISABLED_DEVICE_ID !== DISABLED_DEVICE_ID ? DISABLED_DEVICE_ID : videoDeviceId : videoDeviceId) : DISABLED_DEVICE_ID; env0_77.setVideoInputDevice(r2); } if (r8 != null) { object = {}; quality = r8.quality; object.resolution = quality.resolution; quality = r8.quality; object.frameRate = quality.frameRate; desktopSource = r8.desktopSource; if (desktopSource != null) { hdrCaptureMode = getHdrCaptureMode('MediaEngineStore go live'); videoHook = _getSettings0().videoHook; value12 = supportsWindowsGraphicsCapture(); if (value12) { isWindows2 = (require(477) /* metro dependency 477: PlatformUtils */).isWindows(); if (isWindows2) { defaultImport = importDefault(12427) /* metro dependency 12427 */; r2 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value3 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, WINDOWS_GRAPHICS_CAPTURE_NEW_APIS_SEMVER); } else { r2 = isWindows2; } r2 = r2 ? WINDOWS_GRAPHICS_CAPTURE_NEW_APIS_BUILD : WINDOWS_GRAPHICS_CAPTURE_BUILD; r12 = r2; } else { r12 = 0; } r2 = (require(477) /* metro dependency 477: PlatformUtils */).isWindows() && r12 >= WINDOWS_GRAPHICS_CAPTURE_NEW_APIS_BUILD; if (r2) { if (env0_134 === true) { WGCDirtyRegionsExperiment = (require(12420) /* metro dependency 12420: WGCDirtyRegionsExperiment */).WGCDirtyRegionsExperiment; enabled = WGCDirtyRegionsExperiment.getConfig({location: 'updateVideo'}).enabled; } else { WGCDirtyRegionsAllExperiment = (require(12421) /* metro dependency 12421: WGCDirtyRegionsAllExperiment */).WGCDirtyRegionsAllExperiment; enabled = WGCDirtyRegionsAllExperiment.getConfig({location: 'updateVideo'}).enabled; } r10 = enabled; } else { r10 = false; } if (videoHook) { DisableHookFramePacerExperiment = (require(12422) /* metro dependency 12422: DisableHookFramePacerExperiment */).DisableHookFramePacerExperiment; r15 = !DisableHookFramePacerExperiment.getConfig({location: 'updateVideo'}).enabled; } else { r15 = !videoHook; } if (videoHook) { VideoHookDX12Experiment = (require(12423) /* metro dependency 12423: VideoHookDX12Experiment */).VideoHookDX12Experiment; r9 = VideoHookDX12Experiment.getConfig({location: 'updateVideo'}).enabled; } else { r9 = videoHook; } binding = env0_77; setGoLiveSource = binding.setGoLiveSource; object5 = {}; desktopSource = r8.desktopSource; object5.id = desktopSource.id; desktopSource = r8.desktopSource; object5.soundshareId = desktopSource.soundshareId; object5.useVideoHook = videoHook; object5.useHookFramePacer = r15; object5.useGraphicsCapture = value12; object5.useGraphicsCaptureApiLevel = r12; object5.useCaptureDeviceForEncode = (require(477) /* metro dependency 477: PlatformUtils */).isWindows(); object5.useLoopback = env0_74.getExperimentalSoundshare(); object5.useQuartzCapturer = true; object5.allowScreenCaptureKit = supportsScreenCaptureKit(); object5.videoHookStaleFrameTimeoutMs = 500; object5.graphicsCaptureStaleFrameTimeoutMs = env0_65; object5.hdrCaptureMode = hdrCaptureMode; moduleValue7 = require(12424) /* metro dependency 12424: GlobalFramePoolLockExperiment */; enabled = moduleValue7.getGlobalFramePoolLockExperimentConfig({location: 'updateVideo'}).enabled; object5.enableGlobalFramePoolLock = enabled; object5.useGraphicsCaptureDirtyRegions = r10; object5.videoHookAllowDx12 = r9; Reflect.apply(setGoLiveSource, binding, [{desktopDescription: object5, quality: object}, STREAM]); } cameraSource = r8.cameraSource; if (cameraSource != null) { binding = env0_77; setGoLiveSource = binding.setGoLiveSource; object6 = {}; cameraSource = r8.cameraSource; object6.videoDeviceGuid = cameraSource.videoDeviceGuid; cameraSource = r8.cameraSource; object6.audioDeviceGuid = cameraSource.sound === false ? '' : r8.cameraSource.audioDeviceGuid; Reflect.apply(setGoLiveSource, binding, [{cameraDescription: object6, quality: object}, STREAM]); } } return value3; } function noiseCancellerErrorToAVUnderlyingError(a0) { // fn#35491, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:10782, offset: 0x0107525d, size: 690 bytes, params: 2, frame: 12 const AVUnderlyingError = (AVErrorModule).AVUnderlyingError; const KRISP_CPU_OVERUSE = NoiseCancellerError.KRISP_CPU_OVERUSE; if (KRISP_CPU_OVERUSE === a0) { return AVUnderlyingError.KrispCpuOveruse; } const KRISP_FAILED = NoiseCancellerError.KRISP_FAILED; if (KRISP_FAILED === a0) { return AVUnderlyingError.KrispFailed; } const KRISP_VAD_CPU_OVERUSE = NoiseCancellerError.KRISP_VAD_CPU_OVERUSE; if (KRISP_VAD_CPU_OVERUSE === a0) { return AVUnderlyingError.KrispVadCpuOveruse; } const KRISP_INIT_ERROR = NoiseCancellerError.KRISP_INIT_ERROR; if (KRISP_INIT_ERROR === a0) { return AVUnderlyingError.KrispInitError; } const KRISP_INIT_ERROR_NATIVE = NoiseCancellerError.KRISP_INIT_ERROR_NATIVE; if (KRISP_INIT_ERROR_NATIVE === a0) { return AVUnderlyingError.KrispInitErrorNative; } const KRISP_INIT_ERROR_SSE4_NOT_SUPPORTED = NoiseCancellerError.KRISP_INIT_ERROR_SSE4_NOT_SUPPORTED; if (KRISP_INIT_ERROR_SSE4_NOT_SUPPORTED === a0) { return AVUnderlyingError.KrispInitErrorSse4NotSupported; } const KRISP_INIT_ERROR_AVX2_NOT_SUPPORTED = NoiseCancellerError.KRISP_INIT_ERROR_AVX2_NOT_SUPPORTED; if (KRISP_INIT_ERROR_AVX2_NOT_SUPPORTED === a0) { return AVUnderlyingError.KrispInitErrorAvx2NotSupported; } const KRISP_INIT_ERROR_UNSIGNED = NoiseCancellerError.KRISP_INIT_ERROR_UNSIGNED; if (KRISP_INIT_ERROR_UNSIGNED === a0) { return AVUnderlyingError.KrispInitErrorUnsigned; } const KRISP_INIT_ERROR_GLOBAL_INIT = NoiseCancellerError.KRISP_INIT_ERROR_GLOBAL_INIT; if (KRISP_INIT_ERROR_GLOBAL_INIT === a0) { return AVUnderlyingError.KrispInitErrorGlobalInit; } const KRISP_INIT_ERROR_WEIGHT_8K = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_8K; if (KRISP_INIT_ERROR_WEIGHT_8K === a0) { return AVUnderlyingError.KrispInitErrorWeight8k; } const KRISP_INIT_ERROR_WEIGHT_16K = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_16K; if (KRISP_INIT_ERROR_WEIGHT_16K === a0) { return AVUnderlyingError.KrispInitErrorWeight16k; } const KRISP_INIT_ERROR_WEIGHT_32K = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_32K; if (KRISP_INIT_ERROR_WEIGHT_32K === a0) { return AVUnderlyingError.KrispInitErrorWeight32k; } const KRISP_INIT_ERROR_WEIGHT_VAD = NoiseCancellerError.KRISP_INIT_ERROR_WEIGHT_VAD; if (KRISP_INIT_ERROR_WEIGHT_VAD === a0) { return AVUnderlyingError.KrispInitErrorWeightVad; } } function handleVoiceProcessingError(a0) { // fn#35493, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:12617, offset: 0x0107557d, size: 299 bytes, params: 2, frame: 18 let binding = env0_62; binding.warn('Voice processing error: ' + a0); const reportAVError = AVErrorModule.reportAVError; const object = {}; const AVError = AVErrorModule.AVError; const NOISE_CANCELLER_ERROR = AVError.NOISE_CANCELLER_ERROR; object.type = NOISE_CANCELLER_ERROR; object.underlyingError = noiseCancellerErrorToAVUnderlyingError(a0); Reflect.apply(reportAVError, AVErrorModule, [object]); const defaultImport = AnalyticsUtils; const track = defaultImport.track; const VOICE_PROCESSING = AnalyticEvents.VOICE_PROCESSING; Reflect.apply(track, defaultImport, [VOICE_PROCESSING, {noise_canceller_error: a0}]); binding = env0_144; if (!binding.has(a0)) { if (a0 === NoiseCancellerError.KRISP_VAD_CPU_OVERUSE) { (importDefault(694) /* metro dependency 694: Dispatcher */).dispatch({type: 'MEDIA_ENGINE_VOICE_ACTIVITY_DETECTION_ERROR', code: a0}); } else { (importDefault(694) /* metro dependency 694: Dispatcher */).dispatch({type: 'MEDIA_ENGINE_NOISE_CANCELLATION_ERROR', code: a0}); } } } function handleVideoFilterError(a0, a1) { // fn#35494, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:13103, offset: 0x010756a8, size: 229 bytes, params: 3, frame: 22 var moduleValue; var reportAVError; var object; const LIVE = VideoFilterTarget.LIVE; const value2 = a1 === LIVE; const binding = env0_62; const value3 = 'preview'; binding.warn('Video filter error: ' + a0 + ' (' + (value2 ? 'live' : value3) + ')'); if (value2) { moduleValue = require(9235) /* metro dependency 9235: AVError */; reportAVError = moduleValue.reportAVError; object = {}; object.type = (require(9235) /* metro dependency 9235: AVError */).AVError.VIDEO_BACKGROUND_UNAVAILABLE; object.underlyingError = videoFilterErrorToAVUnderlyingError(a0); Reflect.apply(reportAVError, moduleValue, [object]); } (importDefault(694) /* metro dependency 694: Dispatcher */).dispatch({type: 'MEDIA_ENGINE_VIDEO_FILTER_ERROR', code: a0, target: value2 ? 'live' : value3}); } function getAutomaticGainControlConfig(a0) { // fn#35495, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:13453, offset: 0x0107578d, size: 80 bytes, params: 2, frame: 15 const object = {enabled: a0}; const getAGC2ExperimentConfig = AGC2ExperimentModule.getAGC2ExperimentConfig; copyDataProperties(object, Reflect.apply(getAGC2ExperimentConfig, AGC2ExperimentModule, [{location: 'getAutomaticGainControlConfig', disable: !a0}]).noiseCancellationConfig, 'getAutomaticGainControlConfig'); return object; } function setNoiseCancellation(a0, a1) { // fn#35497, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:13728, offset: 0x010757fe, size: 157 bytes, params: 3, frame: 16 const defaultImport = GetEffectiveNoiseCancellation; const binding = env0_74; const getSystemMicrophoneMode = binding.getSystemMicrophoneMode; const value2 = defaultImport(a1, Reflect.apply(getSystemMicrophoneMode, binding, [])); if (value2 !== a1) { env0_62.info('Falling back to system noise suppression.'); } a0.setNoiseCancellation(value2); const getAGC2ExperimentConfig = AGC2ExperimentModule.getAGC2ExperimentConfig; a0.setNoiseCancellationDuringProcessing(Reflect.apply(getAGC2ExperimentConfig, AGC2ExperimentModule, [{location: 'setNoiseCancellation', disable: !value2}]).noiseCancellationDuringProcessing); } function updateConnectionVoiceProcessing(a0) { // fn#35498, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:14066, offset: 0x0107589b, size: 435 bytes, params: 2, frame: 21 var defaultImport; const _getSettings0Binding = _getSettings0; const value2 = undefined; const value3 = _getSettings0Binding(); const inputDeviceId = value3.inputDeviceId; const setEchoCancellation = a0.setEchoCancellation; let r4 = CertifiedDeviceStore.hasEchoCancellation(inputDeviceId) || value3.echoCancellation; Reflect.apply(setEchoCancellation, a0, [r4]); a0.setNoiseSuppression(CertifiedDeviceStore.hasNoiseSuppression(inputDeviceId) || value3.noiseSuppression); setAutomaticGainControl(a0, CertifiedDeviceStore.hasAutomaticGainControl(inputDeviceId) || value3.automaticGainControl); setNoiseCancellation(a0, value3.noiseCancellation); a0.setSpatialAudioEnabled(value3.audioMixerSettings.enabled); const isWindows2 = (PlatformUtilsModule).isWindows(); if (isWindows2) { defaultImport = importDefault(12427) /* metro dependency 12427 */; r4 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value2 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, env0_145); } else { r4 = isWindows2; } if (r4) { if (a0.context === MediaEngineContextTypes.DEFAULT) { a0.setEchoReferenceMode((require(12425) /* metro dependency 12425: SystemwideEchoCancellationExperiment */).getSystemwideEchoCancellationExperimentConfig({location: 'updateConnectionVoiceProcessing'}).echoReferenceMode); } } if (PlatformUtilsModule.isWeb()) { a0.setSilenceThreshold(value3.noiseCancellation ? -150 : -100); } return value2; } function setupMediaEngine() { // fn#35499, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:14881, offset: 0x01075a4e, size: 1043 bytes, params: 1, frame: 20 let binding = env0_93; binding.start(env0_67, _fun35500); binding = env0_77; let on = binding.on; const MediaEngineEvent = (MediaEngineModule).MediaEngineEvent; const Connection = MediaEngineEvent.Connection; Reflect.apply(on, binding, [Connection, _fun35501]); binding = env0_77; on = binding.on; const DeviceChange = MediaEngineEvent.DeviceChange; Reflect.apply(on, binding, [DeviceChange, _fun35511]); binding = env0_77; on = binding.on; const VolumeChange = MediaEngineEvent.VolumeChange; Reflect.apply(on, binding, [VolumeChange, _fun35512]); binding = env0_77; on = binding.on; const DesktopSourceEnd = MediaEngineEvent.DesktopSourceEnd; Reflect.apply(on, binding, [DesktopSourceEnd, _fun35513]); binding = env0_77; on = binding.on; const AudioPermission = MediaEngineEvent.AudioPermission; Reflect.apply(on, binding, [AudioPermission, _fun35514]); binding = env0_77; on = binding.on; const VideoPermission = MediaEngineEvent.VideoPermission; Reflect.apply(on, binding, [VideoPermission, _fun35515]); binding = env0_77; on = binding.on; const WatchdogTimeout = MediaEngineEvent.WatchdogTimeout; Reflect.apply(on, binding, [WatchdogTimeout, Module00005(_fun35517)]); binding = env0_77; on = binding.on; const VideoInputInitialized = MediaEngineEvent.VideoInputInitialized; Reflect.apply(on, binding, [VideoInputInitialized, _fun35518]); binding = env0_77; on = binding.on; const AudioInputInitialized = MediaEngineEvent.AudioInputInitialized; Reflect.apply(on, binding, [AudioInputInitialized, _fun35519]); binding = env0_77; on = binding.on; const ClipsRecordingRestartNeeded = MediaEngineEvent.ClipsRecordingRestartNeeded; Reflect.apply(on, binding, [ClipsRecordingRestartNeeded, _fun35520]); binding = env0_77; on = binding.on; const ClipsInitFailure = MediaEngineEvent.ClipsInitFailure; Reflect.apply(on, binding, [ClipsInitFailure, _fun35521]); binding = env0_77; on = binding.on; const ClipsRecordingEnded = MediaEngineEvent.ClipsRecordingEnded; Reflect.apply(on, binding, [ClipsRecordingEnded, _fun35523]); binding = env0_77; on = binding.on; const NativeScreenSharePickerUpdate = MediaEngineEvent.NativeScreenSharePickerUpdate; Reflect.apply(on, binding, [NativeScreenSharePickerUpdate, _fun35524]); binding = env0_77; on = binding.on; const NativeScreenSharePickerCancel = MediaEngineEvent.NativeScreenSharePickerCancel; Reflect.apply(on, binding, [NativeScreenSharePickerCancel, _fun35525]); binding = env0_77; on = binding.on; const NativeScreenSharePickerError = MediaEngineEvent.NativeScreenSharePickerError; Reflect.apply(on, binding, [NativeScreenSharePickerError, _fun35526]); binding = env0_77; on = binding.on; const AudioDeviceModuleError = MediaEngineEvent.AudioDeviceModuleError; Reflect.apply(on, binding, [AudioDeviceModuleError, function(a0, a1, a2) { var defaultImport = importDefault(dependencyMap[47]); var AUDIO_DEVICE_MODULE_ERROR = AnalyticEvents.AUDIO_DEVICE_MODULE_ERROR; defaultImport.track(AUDIO_DEVICE_MODULE_ERROR, {audio_device_module: a0, code: a1, device_name: a2}); }]); binding = env0_77; on = binding.on; const VideoCodecError = MediaEngineEvent.VideoCodecError; Reflect.apply(on, binding, [VideoCodecError, _fun35528]); binding = env0_77; on = binding.on; const ConnectionStats = MediaEngineEvent.ConnectionStats; Reflect.apply(on, binding, [ConnectionStats, _fun35529]); binding = env0_77; on = binding.on; const VoiceProcessingError = MediaEngineEvent.VoiceProcessingError; Reflect.apply(on, binding, [VoiceProcessingError, handleVoiceProcessingError]); binding = env0_77; on = binding.on; const VideoFilterError = MediaEngineEvent.VideoFilterError; Reflect.apply(on, binding, [VideoFilterError, handleVideoFilterError]); binding = env0_77; on = binding.on; const VoiceQueueMetrics = MediaEngineEvent.VoiceQueueMetrics; Reflect.apply(on, binding, [VoiceQueueMetrics, function(a0) { var value2 = processQueueMetricsForAnalytics(a0); if (value2 !== null) { importDefault(dependencyMap[47]).track(AnalyticEvents.VOICE_QUEUE_METRICS, value2); } }]); env0_77.setOnVideoContainerResized(_fun35532); (function() { return _setGamescopeVaapiEnabled.apply(this, arguments); })(); env0_81.reset(); getSystemAnalyticsInfo().then(_fun35535); binding = env0_77; on = binding.on; const SystemMicrophoneModeChange = MediaEngineEvent.SystemMicrophoneModeChange; Reflect.apply(on, binding, [SystemMicrophoneModeChange, _fun35536]); function _fun35500() { // fn#35500, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:14922, offset: 0x01075e61, size: 70 bytes, params: 1, frame: 14 env1_62.error('Device enumeration timed out'); const defaultImport = AnalyticsUtils; const track = defaultImport.track; const DEVICE_ENUMERATION_TIMEOUT = AnalyticEvents.DEVICE_ENUMERATION_TIMEOUT; Reflect.apply(track, defaultImport, [DEVICE_ENUMERATION_TIMEOUT, {}]); } function _fun35501(a0) { // fn#35501, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:15068, offset: 0x01075ea7, size: 2780 bytes, params: 2, frame: 26 var r2; var arch; var release; var r10; var r7; var moduleValue2; var setExperimentFlag; var H265_HARDWARE_DECODE_AVAILABLE; var openH264Enabled; var USE_LIBOPENH264_DECODER; var LOW_LATENCY_RATE_CONTROL; var SWALLOW_VOLUME_ONLY_SPEAKING_EVENTS; var hasHapticsOverAudioOutputDevices2; var setSoundshareDiscardRearChannels; var moduleValue6; var moduleValue7; var moduleValue8; var moduleValue9; var moduleValue10; var getAV1DecodeExperimentAndroidConfig; var SIGNAL_AV1_DECODE; var SIGNAL_AV1_HARDWARE_DECODE; var H265_DISABLE_ENCODE; var window; var DiscordNative; var os; var value5; var defaultImport2; var satisfies; var value6; var defaultImport3; var BROWSER_HEVC; var binding; var value7; var startsWith; var value8; var moduleValue13; var getWmfGpuEncode; var WMF_GPU_ENCODE; var value9; var value10; var moduleValue15; var getWmfGpuEncodeIntel; var value11; var value12; var value13; var value14; var moduleValue17; var getWmfCpuEncodeIntel; var INTEL_GPU; var value15; var value16; var moduleValue19; var setClipsKeyFrameInterval; var property; var authenticationStoreBinding; var getId; var setLocalMute; var value20; var setLocalVolume; var value22; var property2; var setLocalPan; var left; var right; var value24; var setLocalVideoDisabled; var value26; var SpeakingWhileMuted; var supports; var ASYNC_VIDEO_INPUT_DEVICE_INIT; var value27; var setAsyncVideoInputDeviceInit; const env0_0 = a0; const setLoopbackBinding = setLoopback; const value2 = undefined; setLoopbackBinding(); setInputMode(a0); updateConnectionMuteDeaf(a0); updateConnectionVoiceProcessing(a0); const value3 = _getSettings0(); a0.setAttenuation(value3.attenuation, value3.attenuateWhileSpeakingSelf, value3.attenuateWhileSpeakingOthers); a0.setQoS(value3.qos); const platformUtilsModule = require(477) /* metro dependency 477: PlatformUtils */; if (platformUtilsModule.isWindows()) { a0.setExperimentFlag(ExperimentFlags.H265_HARDWARE_ONLY, true); startH265HardwareDetection().then(_fun35502); } else { moduleValue2 = platformUtilsModule; reducibleJoin4: while (true) { if (moduleValue2.isMac()) { setExperimentFlag = a0.setExperimentFlag; H265_HARDWARE_DECODE_AVAILABLE = ExperimentFlags.H265_HARDWARE_DECODE_AVAILABLE; Reflect.apply(setExperimentFlag, a0, [H265_HARDWARE_DECODE_AVAILABLE, true]); break reducibleJoin4; } break reducibleJoin4; } } const isLinux2 = platformUtilsModule.isLinux(); reducibleJoin6: while (true) { if (isLinux2) { openH264Enabled = value3.openH264Enabled; r2 = openH264Enabled; break reducibleJoin6; } r2 = isLinux2; break reducibleJoin6; } reducibleJoin8: while (true) { if (r2) { setExperimentFlag = a0.setExperimentFlag; USE_LIBOPENH264_DECODER = ExperimentFlags.USE_LIBOPENH264_DECODER; Reflect.apply(setExperimentFlag, a0, [USE_LIBOPENH264_DECODER, true]); break reducibleJoin8; } break reducibleJoin8; } const getLowLatencyRateControlExperimentConfig = LowLatencyRateControlExperimentModule.getLowLatencyRateControlExperimentConfig; let enabled = Reflect.apply(getLowLatencyRateControlExperimentConfig, LowLatencyRateControlExperimentModule, [{location: 'setupMediaEngine'}]).enabled; reducibleJoin10: while (true) { if (enabled) { setExperimentFlag = a0.setExperimentFlag; LOW_LATENCY_RATE_CONTROL = ExperimentFlags.LOW_LATENCY_RATE_CONTROL; Reflect.apply(setExperimentFlag, a0, [LOW_LATENCY_RATE_CONTROL, true]); break reducibleJoin10; } break reducibleJoin10; } setExperimentFlag = a0.setExperimentFlag; const RESET_DECODER_ON_ERRORS = ExperimentFlags.RESET_DECODER_ON_ERRORS; Reflect.apply(setExperimentFlag, a0, [RESET_DECODER_ON_ERRORS, true]); setExperimentFlag = a0.setExperimentFlag; const SOFTWARE_FALLBACK_ON_CONSECUTIVE_ERRORS = ExperimentFlags.SOFTWARE_FALLBACK_ON_CONSECUTIVE_ERRORS; Reflect.apply(setExperimentFlag, a0, [SOFTWARE_FALLBACK_ON_CONSECUTIVE_ERRORS, true]); let defaultImport = ProportionalVadIndicatorExperiment; let getConfig = defaultImport.getConfig; reducibleJoin12: while (true) { if (Reflect.apply(getConfig, defaultImport, [{location: 'MediaEngineStore'}]).swallowVolumeOnlySpeakingEvents) { setExperimentFlag = a0.setExperimentFlag; SWALLOW_VOLUME_ONLY_SPEAKING_EVENTS = ExperimentFlags.SWALLOW_VOLUME_ONLY_SPEAKING_EVENTS; Reflect.apply(setExperimentFlag, a0, [SWALLOW_VOLUME_ONLY_SPEAKING_EVENTS, true]); break reducibleJoin12; } break reducibleJoin12; } a0.setMinimumJitterBufferLevel(80); let context = a0.context; const STREAM = MediaEngineContextTypes.STREAM; reducibleJoin14: while (true) { if (context !== STREAM) { break reducibleJoin14; } hasHapticsOverAudioOutputDevices2 = hasHapticsOverAudioOutputDevices(env1_91); setSoundshareDiscardRearChannels = a0.setSoundshareDiscardRearChannels; Reflect.apply(setSoundshareDiscardRearChannels, a0, [hasHapticsOverAudioOutputDevices2]); break reducibleJoin14; } const moduleValue5 = platformUtilsModule; if (moduleValue5.isWindows()) { a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_ENCODE, true); a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_DECODE, true); a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_HARDWARE_DECODE, true); } else { moduleValue6 = platformUtilsModule; if (moduleValue6.isMac()) { a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_DECODE, true); a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_HARDWARE_DECODE, true); setExperimentFlag = a0.setExperimentFlag; H265_DISABLE_ENCODE = ExperimentFlags.H265_DISABLE_ENCODE; window = global.window; reducibleJoin27: while (true) { if (window == null) { arch = value2; break reducibleJoin27; } DiscordNative = window.DiscordNative; if (DiscordNative == null) { arch = value2; break reducibleJoin27; } os = DiscordNative.os; arch = os.arch; break reducibleJoin27; } value5 = arch === 'arm64'; reducibleJoin32: while (true) { if (value5) { defaultImport2 = importDefault(12427) /* metro dependency 12427 */; satisfies = defaultImport2.satisfies; window = global.window; reducibleJoin31: while (true) { if (window == null) { release = value2; break reducibleJoin31; } DiscordNative = window.DiscordNative; if (DiscordNative == null) { release = value2; break reducibleJoin31; } os = DiscordNative.os; release = os.release; break reducibleJoin31; } value6 = Reflect.apply(satisfies, defaultImport2, [release, DARWIN_H265_VERSION]); r2 = value6; break reducibleJoin32; } r2 = value5; break reducibleJoin32; } Reflect.apply(setExperimentFlag, a0, [H265_DISABLE_ENCODE, !r2]); } else { moduleValue7 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue7.isLinux()) { a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_DECODE, true); } else { moduleValue8 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue8.isIOS()) { a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_DECODE, true); a0.setExperimentFlag(ExperimentFlags.SIGNAL_AV1_HARDWARE_DECODE, true); } else { moduleValue9 = require(477) /* metro dependency 477: PlatformUtils */; reducibleJoin34: while (true) { if (moduleValue9.isAndroid()) { if (env1_89 !== true) { break reducibleJoin34; } moduleValue10 = require(12472) /* metro dependency 12472: AV1DecodeExperimentAndroid */; getAV1DecodeExperimentAndroidConfig = moduleValue10.getAV1DecodeExperimentAndroidConfig; enabled = Reflect.apply(getAV1DecodeExperimentAndroidConfig, moduleValue10, ['MediaEngineStore']).enabled; if (enabled) { setExperimentFlag = a0.setExperimentFlag; SIGNAL_AV1_DECODE = ExperimentFlags.SIGNAL_AV1_DECODE; Reflect.apply(setExperimentFlag, a0, [SIGNAL_AV1_DECODE, true]); setExperimentFlag = a0.setExperimentFlag; SIGNAL_AV1_HARDWARE_DECODE = ExperimentFlags.SIGNAL_AV1_HARDWARE_DECODE; Reflect.apply(setExperimentFlag, a0, [SIGNAL_AV1_HARDWARE_DECODE, true]); break reducibleJoin34; } break reducibleJoin34; } break reducibleJoin34; } } } } } const moduleValue11 = platformUtilsModule; reducibleJoin36: while (true) { if (moduleValue11.isWeb()) { defaultImport3 = importDefault(12473) /* metro dependency 12473: BrowserHevcExperiment */; getConfig = defaultImport3.getConfig; enabled = Reflect.apply(getConfig, defaultImport3, [{location: 'MediaEngineStore'}]).enabled; setExperimentFlag = a0.setExperimentFlag; BROWSER_HEVC = ExperimentFlags.BROWSER_HEVC; Reflect.apply(setExperimentFlag, a0, [BROWSER_HEVC, enabled]); break reducibleJoin36; } break reducibleJoin36; } const isWindows2 = platformUtilsModule.isWindows(); reducibleJoin38: while (true) { if (isWindows2) { binding = env1_133; value7 = binding != null; r2 = value7; r10 = binding; break reducibleJoin38; } r2 = isWindows2; r10 = value2; break reducibleJoin38; } reducibleJoin40: while (true) { if (r2) { startsWith = r10.startsWith; value8 = Reflect.apply(startsWith, r10, ['AMD']); r2 = value8; break reducibleJoin40; } break reducibleJoin40; } reducibleJoin42: while (true) { if (r2) { moduleValue13 = require(12474) /* metro dependency 12474: WindowsMediaFoundationGpuEncode */; getWmfGpuEncode = moduleValue13.getWmfGpuEncode; enabled = Reflect.apply(getWmfGpuEncode, moduleValue13, ['MediaEngineStore']).enabled; r2 = enabled; break reducibleJoin42; } break reducibleJoin42; } reducibleJoin44: while (true) { if (r2) { setExperimentFlag = a0.setExperimentFlag; WMF_GPU_ENCODE = ExperimentFlags.WMF_GPU_ENCODE; Reflect.apply(setExperimentFlag, a0, [WMF_GPU_ENCODE, true]); break reducibleJoin44; } break reducibleJoin44; } const isWindows3 = platformUtilsModule.isWindows(); reducibleJoin46: while (true) { if (isWindows3) { binding = env1_133; value9 = binding != null; r2 = value9; r10 = binding; break reducibleJoin46; } r2 = isWindows3; r10 = value2; break reducibleJoin46; } reducibleJoin48: while (true) { if (r2) { startsWith = r10.startsWith; value10 = Reflect.apply(startsWith, r10, ['Intel']); r2 = value10; break reducibleJoin48; } break reducibleJoin48; } reducibleJoin50: while (true) { if (r2) { moduleValue15 = require(12475) /* metro dependency 12475: WindowsMediaFoundationGpuEncodeIntel */; getWmfGpuEncodeIntel = moduleValue15.getWmfGpuEncodeIntel; enabled = Reflect.apply(getWmfGpuEncodeIntel, moduleValue15, ['MediaEngineStore']).enabled; r2 = enabled; break reducibleJoin50; } break reducibleJoin50; } reducibleJoin52: while (true) { if (r2) { setExperimentFlag = a0.setExperimentFlag; WMF_GPU_ENCODE = ExperimentFlags.WMF_GPU_ENCODE; Reflect.apply(setExperimentFlag, a0, [WMF_GPU_ENCODE, true]); break reducibleJoin52; } break reducibleJoin52; } const isWindows4 = platformUtilsModule.isWindows(); reducibleJoin54: while (true) { if (isWindows4) { binding = env1_133; value11 = binding != null; r2 = value11; r10 = binding; break reducibleJoin54; } r2 = isWindows4; r10 = value2; break reducibleJoin54; } reducibleJoin56: while (true) { if (r2) { startsWith = r10.startsWith; value12 = Reflect.apply(startsWith, r10, ['Intel']); r2 = value12; break reducibleJoin56; } break reducibleJoin56; } reducibleJoin58: while (true) { if (r2) { value13 = env1_134 === true; r2 = value13; break reducibleJoin58; } break reducibleJoin58; } reducibleJoin60: while (true) { if (r2) { value14 = env1_135 === 1; r2 = value14; break reducibleJoin60; } break reducibleJoin60; } reducibleJoin62: while (true) { if (r2) { moduleValue17 = require(12476) /* metro dependency 12476: WindowsMediaFoundationCpuEncodeIntel */; getWmfCpuEncodeIntel = moduleValue17.getWmfCpuEncodeIntel; enabled = Reflect.apply(getWmfCpuEncodeIntel, moduleValue17, ['MediaEngineStore']).enabled; r2 = enabled; break reducibleJoin62; } break reducibleJoin62; } reducibleJoin64: while (true) { if (r2) { setExperimentFlag = a0.setExperimentFlag; INTEL_GPU = ExperimentFlags.INTEL_GPU; Reflect.apply(setExperimentFlag, a0, [INTEL_GPU, true]); break reducibleJoin64; } break reducibleJoin64; } const isWindows5 = platformUtilsModule.isWindows(); reducibleJoin66: while (true) { if (isWindows5) { binding = env1_133; value15 = binding != null; r2 = value15; r10 = binding; break reducibleJoin66; } r2 = isWindows5; r10 = value2; break reducibleJoin66; } reducibleJoin68: while (true) { if (r2) { startsWith = r10.startsWith; value16 = Reflect.apply(startsWith, r10, ['Qualcomm']); r2 = value16; break reducibleJoin68; } break reducibleJoin68; } reducibleJoin70: while (true) { if (r2) { moduleValue19 = require(12474) /* metro dependency 12474: WindowsMediaFoundationGpuEncode */; getWmfGpuEncode = moduleValue19.getWmfGpuEncode; enabled = Reflect.apply(getWmfGpuEncode, moduleValue19, ['MediaEngineStore']).enabled; r2 = enabled; break reducibleJoin70; } break reducibleJoin70; } reducibleJoin72: while (true) { if (r2) { setExperimentFlag = a0.setExperimentFlag; WMF_GPU_ENCODE = ExperimentFlags.WMF_GPU_ENCODE; Reflect.apply(setExperimentFlag, a0, [WMF_GPU_ENCODE, true]); break reducibleJoin72; } break reducibleJoin72; } env1_77.setHasFullbandPerformance((HasPerformanceForKrispFullband)()); a0.setRemoteAudioHistory(1000); reducibleJoin74: while (true) { if ((importDefault(12384) /* metro dependency 12384: isClientClipsCapable */)(env1_74)) { setClipsKeyFrameInterval = a0.setClipsKeyFrameInterval; Reflect.apply(setClipsKeyFrameInterval, a0, [VIEWERSIDE_CLIP_KFI_MS]); break reducibleJoin74; } break reducibleJoin74; } const value17 = _getSettings0(a0.context); a0.setPostponeDecodeLevel(100); let Object = global.Object; let keys = Object.keys; let localMutes = value17.localMutes; const value18 = Reflect.apply(keys, Object, [localMutes]); let length = value18.length; const value19 = 0; if (value19 < length) { r10 = value19; reducibleLoop75: while (true) { property = value18[r10]; authenticationStoreBinding = AuthenticationStore; getId = authenticationStoreBinding.getId; reducibleJoin77: while (true) { if (property === Reflect.apply(getId, authenticationStoreBinding, [])) { break reducibleJoin77; } setLocalMute = a0.setLocalMute; localMutes = value17.localMutes; Reflect.apply(setLocalMute, a0, [property, localMutes[property]]); break reducibleJoin77; } value20 = typeof r10 === 'bigint' ? r10 + 1n : +r10 + 1; length = value18.length; if (value20 < length) { r10 = value20; continue reducibleLoop75; } break reducibleLoop75; } } Object = global.Object; keys = Object.keys; let localVolumes = value17.localVolumes; const value21 = Reflect.apply(keys, Object, [localVolumes]); length = value21.length; if (value19 < length) { r10 = value19; reducibleLoop79: while (true) { property = value21[r10]; authenticationStoreBinding = AuthenticationStore; getId = authenticationStoreBinding.getId; reducibleJoin81: while (true) { if (property === Reflect.apply(getId, authenticationStoreBinding, [])) { break reducibleJoin81; } setLocalVolume = a0.setLocalVolume; localVolumes = value17.localVolumes; Reflect.apply(setLocalVolume, a0, [property, localVolumes[property]]); break reducibleJoin81; } value22 = typeof r10 === 'bigint' ? r10 + 1n : +r10 + 1; length = value21.length; if (value22 < length) { r10 = value22; continue reducibleLoop79; } break reducibleLoop79; } } Object = global.Object; keys = Object.keys; let localPans = value17.localPans; const value23 = Reflect.apply(keys, Object, [localPans]); length = value23.length; if (value19 < length) { r10 = value19; reducibleLoop83: while (true) { property = value23[r10]; localPans = value17.localPans; property2 = localPans[property]; setLocalPan = a0.setLocalPan; left = property2.left; right = property2.right; Reflect.apply(setLocalPan, a0, [property, left, right]); value24 = typeof r10 === 'bigint' ? r10 + 1n : +r10 + 1; length = value23.length; if (value24 < length) { r10 = value24; continue reducibleLoop83; } break reducibleLoop83; } } Object = global.Object; keys = Object.keys; let disabledLocalVideos = value17.disabledLocalVideos; const value25 = Reflect.apply(keys, Object, [disabledLocalVideos]); length = value25.length; if (value19 < length) { r7 = value19; reducibleLoop85: while (true) { property = value25[r7]; setLocalVideoDisabled = a0.setLocalVideoDisabled; disabledLocalVideos = value17.disabledLocalVideos; Reflect.apply(setLocalVideoDisabled, a0, [property, disabledLocalVideos[property]]); value26 = typeof r7 === 'bigint' ? r7 + 1n : +r7 + 1; length = value25.length; if (value26 < length) { r7 = value26; continue reducibleLoop85; } break reducibleLoop85; } } let on = a0.on; const BaseConnectionEvent = (MediaEngineModule).BaseConnectionEvent; const Speaking = BaseConnectionEvent.Speaking; Reflect.apply(on, a0, [Speaking, _fun35503]); context = a0.context; const DEFAULT = MediaEngineContextTypes.DEFAULT; reducibleJoin88: while (true) { if (context !== DEFAULT) { break reducibleJoin88; } env1_102 = false; on = a0.on; SpeakingWhileMuted = BaseConnectionEvent.SpeakingWhileMuted; Reflect.apply(on, a0, [SpeakingWhileMuted, _fun35504]); break reducibleJoin88; } on = a0.on; const DesktopSourceEnd = BaseConnectionEvent.DesktopSourceEnd; Reflect.apply(on, a0, [DesktopSourceEnd, _fun35506]); on = a0.on; const InteractionRequired = BaseConnectionEvent.InteractionRequired; Reflect.apply(on, a0, [InteractionRequired, _fun35507]); on = a0.on; const VideoHookInitialize = BaseConnectionEvent.VideoHookInitialize; Reflect.apply(on, a0, [VideoHookInitialize, _fun35508]); on = a0.on; const NoiseCancellationError = BaseConnectionEvent.NoiseCancellationError; const handleVoiceProcessingErrorBinding = handleVoiceProcessingError; Reflect.apply(on, a0, [NoiseCancellationError, handleVoiceProcessingErrorBinding]); on = a0.on; const VoiceActivityDetectorError = BaseConnectionEvent.VoiceActivityDetectorError; Reflect.apply(on, a0, [VoiceActivityDetectorError, handleVoiceProcessingErrorBinding]); on = a0.on; const SdpError = BaseConnectionEvent.SdpError; Reflect.apply(on, a0, [SdpError, function(a0, a1, a2, a3) { var defaultImport = importDefault(dependencyMap[47]); var SDP_ERROR = AnalyticEvents.SDP_ERROR; defaultImport.track(SDP_ERROR, {operation: a0, error: a1, type: a2, sdp: a3}); }]); on = a0.on; const VideoState = BaseConnectionEvent.VideoState; Reflect.apply(on, a0, [VideoState, _fun35510]); a0.setBitRate(BitRateStore.bitrate); a0.applyVideoQualityMode(VideoQualityModeStore.mode); const isWindows6 = platformUtilsModule.isWindows(); reducibleJoin90: while (true) { if (isWindows6) { binding = env1_77; supports = binding.supports; ASYNC_VIDEO_INPUT_DEVICE_INIT = Features.ASYNC_VIDEO_INPUT_DEVICE_INIT; value27 = Reflect.apply(supports, binding, [ASYNC_VIDEO_INPUT_DEVICE_INIT]); r2 = value27; break reducibleJoin90; } r2 = isWindows6; break reducibleJoin90; } reducibleJoin92: while (true) { if (r2) { binding = env1_77; setAsyncVideoInputDeviceInit = binding.setAsyncVideoInputDeviceInit; Reflect.apply(setAsyncVideoInputDeviceInit, binding, [true]); break reducibleJoin92; } break reducibleJoin92; } return value2; function _fun35502(a0) { // fn#35502, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:15414, offset: 0x01076983, size: 39 bytes, params: 2, frame: 13 const binding = env0_0; const setExperimentFlag = binding.setExperimentFlag; const H265_HARDWARE_DECODE_AVAILABLE = ExperimentFlags.H265_HARDWARE_DECODE_AVAILABLE; Reflect.apply(setExperimentFlag, binding, [H265_HARDWARE_DECODE_AVAILABLE, a0]); } function _fun35503(a0, a1, a2, a3) { // fn#35503, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:18603, offset: 0x010769aa, size: 86 bytes, params: 5, frame: 13 const value = environment.__proto__.__proto__; (Dispatcher).dispatch({type: 'SPEAKING', context: env0_0.context, userId: a0, speakingFlags: a1, voiceDb: a3}); } function _fun35504() { // fn#35504, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:18798, offset: 0x01076a00, size: 60 bytes, params: 1, frame: 13 let binding = env2_102; if (!binding) { env2_74.emitChange(); } binding = env2_103; binding.start(env2_66, _fun35505); function _fun35505() { // fn#35505, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:18851, offset: 0x01076a3c, size: 27 bytes, params: 1, frame: 9 env3_74.emitChange(); } } function _fun35506(a0, a1) { // fn#35506, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:18939, offset: 0x01076a57, size: 86 bytes, params: 3, frame: 14 const value = environment.__proto__.__proto__; (Dispatcher).dispatch({type: 'MEDIA_ENGINE_SET_GO_LIVE_SOURCE', settings: {context: env0_0.context}, endReason: a0, errorCode: a1}); } function _fun35507(a0) { // fn#35507, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:19123, offset: 0x01076aad, size: 57 bytes, params: 2, frame: 13 const value = environment.__proto__.__proto__; (Dispatcher).dispatch({type: 'MEDIA_ENGINE_INTERACTION_REQUIRED', required: a0}); } function _fun35508(a0, a1, a2, a3, a4, a5) { // fn#35508, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:19263, offset: 0x01076ae6, size: 170 bytes, params: 7, frame: 19 var defaultImport; var track; var VIDEOHOOK_INITIALIZED; var object; var defaultImport2; let binding = env2_79; const value2 = undefined; if ((binding == null ? value2 : binding.desktopSource) != null) { defaultImport = importDefault(dependencyMap[47]); track = defaultImport.track; VIDEOHOOK_INITIALIZED = AnalyticEvents.VIDEOHOOK_INITIALIZED; object = {backend: a0, format: a1, framebuffer_format: a2, sample_count: a3, success: a4, reinitialization: a5}; defaultImport2 = importDefault(dependencyMap[61]); binding = env2_79; copyDataProperties(object, defaultImport2(binding == null ? value2 : binding.desktopSource), dependencyMap); Reflect.apply(track, defaultImport, [VIDEOHOOK_INITIALIZED, object]); } return value2; } function _fun35510(a0) { // fn#35510, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:19869, offset: 0x01076be0, size: 73 bytes, params: 2, frame: 13 const value = environment.__proto__.__proto__; (Dispatcher).dispatch({type: 'MEDIA_ENGINE_VIDEO_STATE_CHANGED', videoState: a0, context: env0_0.context}); } } function _fun35511(a0, a1, a2) { // fn#35511, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:20185, offset: 0x01076c29, size: 85 bytes, params: 4, frame: 13 const value = environment.__proto__; env1_93.stop(); (Dispatcher).dispatch({type: 'MEDIA_ENGINE_DEVICES', inputDevices: a0, outputDevices: a1, videoDevices: a2}); } function _fun35512(a0, a1) { // fn#35512, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:20354, offset: 0x01076c7e, size: 65 bytes, params: 3, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({type: 'AUDIO_VOLUME_CHANGE', inputVolume: a0, outputVolume: a1}); } function _fun35513(a0, a1) { // fn#35513, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:20497, offset: 0x01076cbf, size: 67 bytes, params: 3, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({'type': 'MEDIA_ENGINE_SET_GO_LIVE_SOURCE', 'settings': null, endReason: a0, errorCode: a1}); } function _fun35514(a0) { // fn#35514, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:20660, offset: 0x01076d02, size: 65 bytes, params: 2, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({'type': 'MEDIA_ENGINE_PERMISSION', 'kind': 'audio', granted: a0}); } function _fun35515(a0) { // fn#35515, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:20802, offset: 0x01076d43, size: 59 bytes, params: 2, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({'type': 'MEDIA_ENGINE_PERMISSION', 'kind': 'video', granted: a0}); } function* _fun35517() { // fn#35517, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:20940, offset: 0x01076d87, size: 520 bytes, params: 1, frame: 22 var status; var r11; var window; var GLOBAL_ENV; var RELEASE_CHANNEL; var value3; var binding; var binding2; var property; var value4; var submitLiveCrashReport; var object; var object2; var value5; var value6; var value7; var error; var value8; var warn; var value9; var binding3; var value11; var track; var VOICE_WATCHDOG_TIMEOUT; var object3; var value12; var value13; var value14; var error2; var info; var value15; var value16; var binding4; var Storage; var set; var Date; var now; var value17; var toString; var value18; var app; var relaunch; let value = undefined; if (true) { reducibleJoin22: while (true) { reduciblePort21: while (true) { exceptionLanding19: while (true) { value = undefined; window = global.window; GLOBAL_ENV = window.GLOBAL_ENV; RELEASE_CHANNEL = GLOBAL_ENV.RELEASE_CHANNEL; if (RELEASE_CHANNEL !== 'canary') { status = value; break reduciblePort21; } value3 = environment.__proto__.__proto__; try { binding = env2_1; } catch (error) { break exceptionLanding19; } try { binding2 = env2_3; } catch (error) { break exceptionLanding19; } try { property = binding2[62]; } catch (error) { break exceptionLanding19; } try { value4 = binding(property); } catch (error) { break exceptionLanding19; } try { submitLiveCrashReport = value4.submitLiveCrashReport; } catch (error) { break exceptionLanding19; } try { object = {}; } catch (error) { break exceptionLanding19; } try { object2 = {}; } catch (error) { break exceptionLanding19; } try { object2.message = 'Voice Watchdog Timeout'; } catch (error) { break exceptionLanding19; } try { object.message = object2; } catch (error) { break exceptionLanding19; } try { value5 = Reflect.apply(submitLiveCrashReport, value4, [object]); } catch (error) { break exceptionLanding19; } yield value5; try { value6 = undefined; value7 = false; } catch (error) { break exceptionLanding19; } if (value7) { return value6; } status = value; break reduciblePort21; } status = error.status; reducibleJoin21: while (true) { if (typeof status !== 'number') { status = value; break reducibleJoin21; } status = error.status; break reducibleJoin21; } break reduciblePort21; } value8 = environment.__proto__.__proto__; binding = env2_62; warn = binding.warn; value9 = 200; if (status != null) { r11 = status; break reducibleJoin22; } r11 = value9; break reducibleJoin22; } Reflect.apply(warn, binding, ['Watchdog timeout, report submission status: ' + r11]); var processUtils = env2_1(env2_3[63]).processUtils; var setCrashReason = processUtils.setCrashReason; var value10 = setCrashReason != null; reducibleJoin24: while (true) { reduciblePort44: while (true) { exceptionLanding43: while (true) { try { binding = env2_1; } catch (error) { break exceptionLanding43; } break reducibleJoin24; } binding = env2_62; error2 = binding.error; Reflect.apply(error2, binding, ['Failed to flush voice watchdog timeout analytics event', error]); break reduciblePort44; } if (value10) { binding = env2_62; info = binding.info; Reflect.apply(info, binding, ['Relaunching app due to voice watchdog timeout']); binding = env2_1; processUtils = binding(env2_3[63]).processUtils; setCrashReason = processUtils.setCrashReason; yield Reflect.apply(setCrashReason, processUtils, ['voice-watchdog-timeout']); value15 = undefined; value16 = false; if (value16) { return value15; } binding = env2_0; binding4 = env2_3; Storage = binding(binding4[64]).Storage; set = Storage.set; Date = global.Date; now = Date.now; value17 = Reflect.apply(now, Date, []); toString = value17.toString; value18 = Reflect.apply(toString, value17, []); Reflect.apply(set, Storage, ['discord_watchdog_restart_timestamp', value18]); binding = env2_1; app = binding(binding4[63]).app; relaunch = app.relaunch; Reflect.apply(relaunch, app, []); } return value; } try { binding3 = env2_3; } catch (error) { break exceptionLanding43; } try { property = binding3[47]; } catch (error) { break exceptionLanding43; } try { value11 = binding(property); } catch (error) { break exceptionLanding43; } try { track = value11.track; } catch (error) { break exceptionLanding43; } try { binding = env2_23; } catch (error) { break exceptionLanding43; } try { VOICE_WATCHDOG_TIMEOUT = binding.VOICE_WATCHDOG_TIMEOUT; } catch (error) { break exceptionLanding43; } try { object = {}; } catch (error) { break exceptionLanding43; } try { object.minidump_submission_error = status; } catch (error) { break exceptionLanding43; } try { object.will_restart = value10; } catch (error) { break exceptionLanding43; } try { object3 = {}; } catch (error) { break exceptionLanding43; } try { object3.flush = true; } catch (error) { break exceptionLanding43; } try { value12 = Reflect.apply(track, value11, [VOICE_WATCHDOG_TIMEOUT, object, object3]); } catch (error) { break exceptionLanding43; } yield value12; try { value13 = undefined; value14 = false; } catch (error) { break exceptionLanding43; } if (value14) { return value13; } if (value10) { binding = env2_62; binding.info('Relaunching app due to voice watchdog timeout'); binding = env2_1; processUtils = binding(env2_3[63]).processUtils; yield processUtils.setCrashReason('voice-watchdog-timeout'); if (false) { return undefined; } binding = env2_0; binding4 = env2_3; Storage = binding(binding4[64]).Storage; Storage.set('discord_watchdog_restart_timestamp', global.Date.now().toString()); binding = env2_1; binding(binding4[63]).app.relaunch(); } } return value; } function _fun35518(a0) { // fn#35518, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:21762, offset: 0x01076f8f, size: 208 bytes, params: 2, frame: 23 const defaultImport = AnalyticsUtils; const track = defaultImport.track; const VIDEO_INPUT_INITIALIZED = AnalyticEvents.VIDEO_INPUT_INITIALIZED; const object = {}; object.device_name = a0.description.name; object.time_to_first_frame_ms = a0.initializationTimerExpired ? null : global.Math.round(a0.timeToFirstFrame * (importDefault(672) /* metro dependency 672: Durations */).Millis.SECOND); object.timed_out = a0.initializationTimerExpired; object.activity = a0.entropy; object.media_session_id = RTCConnectionStore.getMediaSessionId(); object.rtc_connection_id = RTCConnectionStore.getRTCConnectionId(); Reflect.apply(track, defaultImport, [VIDEO_INPUT_INITIALIZED, object]); } function _fun35519({description, timeToInitialized}) { // fn#35519, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:22156, offset: 0x0107705f, size: 148 bytes, params: 2, frame: 21 const defaultImport = AnalyticsUtils; const track = defaultImport.track; const AUDIO_INPUT_INITIALIZED = AnalyticEvents.AUDIO_INPUT_INITIALIZED; const object = {}; object.device_name = description.name; const Math = global.Math; const round = Math.round; const Millis = (Durations).Millis; const SECOND = Millis.SECOND; object.time_to_initialized_ms = Reflect.apply(round, Math, [timeToInitialized * SECOND]); object.rtc_connection_id = RTCConnectionStore.getRTCConnectionId(); Reflect.apply(track, defaultImport, [AUDIO_INPUT_INITIALIZED, object]); } function _fun35520() { // fn#35520, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:22426, offset: 0x010770f3, size: 49 bytes, params: 1, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({type: 'CLIPS_RESTART'}); } function _fun35521(a0, a1) { // fn#35521, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:22531, offset: 0x01077124, size: 59 bytes, params: 3, frame: 12 var environment; const env0_0 = a0; const env0_1 = a1; const value = environment.__proto__; (Dispatcher).wait(_fun35522); function _fun35522() { // fn#35522, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:22557, offset: 0x0107715f, size: 68 bytes, params: 1, frame: 14 const value = environment.__proto__.__proto__; (Dispatcher).dispatch({type: 'CLIPS_INIT_FAILURE', errMsg: env0_0, applicationName: require}); } } function _fun35523(a0, a1) { // fn#35523, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:22700, offset: 0x010771a3, size: 135 bytes, params: 3, frame: 16 const binding = env1_80; const value2 = undefined; if ((binding == null || binding.desktopSource == null ? value2 : binding.desktopSource.id) === a0) { if (a1 != null && (env1_79 == null || env1_79.desktopSource == null ? value2 : env1_79.desktopSource.soundshareId) !== a1) { (importAll(12419) /* metro dependency 12419: HookNative */).cancelAttachToProcess(a1); } } return value2; } function _fun35524(a0, a1) { // fn#35524, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:22967, offset: 0x0107722a, size: 62 bytes, params: 3, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({type: 'NATIVE_SCREEN_SHARE_PICKER_UPDATE', existing: a0, content: a1}); } function _fun35525(a0) { // fn#35525, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:23129, offset: 0x01077268, size: 57 bytes, params: 2, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({type: 'NATIVE_SCREEN_SHARE_PICKER_CANCEL', existing: a0}); } function _fun35526(a0) { // fn#35526, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:23276, offset: 0x010772a1, size: 56 bytes, params: 2, frame: 13 const value = environment.__proto__; (Dispatcher).dispatch({type: 'NATIVE_SCREEN_SHARE_PICKER_ERROR', error: a0}); } function _fun35528(a0) { // fn#35528, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:23569, offset: 0x01077324, size: 249 bytes, params: 2, frame: 18 var r1; const AVError = require(dependencyMap[46]).AVError; var object; var object2; const r7 = a0.mode === 'encode' ? AVError.VIDEO_ENCODE_ERROR : AVError.VIDEO_DECODE_ERROR; const object3 = {}; object3.videoCodec = a0.codecStandard; object3.errorMessage = a0.message; let value = environment.__proto__; value = require(dependencyMap[46]); const reportAVError = value.reportAVError; const VIDEO_ENCODE_ERROR = AVError.VIDEO_ENCODE_ERROR; if (r7 === VIDEO_ENCODE_ERROR) { object2 = {type: r7}; copyDataProperties(object2, object3, dependencyMap); object2['videoEncoder'] = a0.implName; r1 = object2; } else { object = {type: r7}; copyDataProperties(object, object3, dependencyMap); object['videoDecoder'] = a0.implName; r1 = object; } Reflect.apply(reportAVError, value, [r1]); } function _fun35529(a0) { // fn#35529, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:23925, offset: 0x0107741d, size: 72 bytes, params: 2, frame: 15 var environment; let value = environment.__proto__; value = importDefault(694) /* metro dependency 694: Dispatcher */; const dispatch = value.dispatch; const object = {type: 'MEDIA_ENGINE_CONNECTION_STATS'}; object.connectionStats = a0.map(_fun35530); Reflect.apply(dispatch, value, [object]); function _fun35530({stats, connection}) { // fn#35530, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:24011, offset: 0x01077465, size: 66 bytes, params: 2, frame: 5 const binding = env2_72; const value2 = typeof binding === 'bigint' ? binding : +binding; env2_72 = typeof value2 === 'bigint' ? value2 + 1n : +value2 + 1; return {stats: stats, mediaEngineConnectionId: connection.mediaEngineConnectionId, version: value2, context: connection.context}; } } function _fun35532(a0, a1, a2) { // fn#35532, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:24480, offset: 0x010774e9, size: 66 bytes, params: 4, frame: 12 var environment; const env0_0 = a0; const env0_1 = a1; const env0_2 = a2; const value = environment.__proto__; (Dispatcher).wait(_fun35533); function _fun35533() { // fn#35533, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:24508, offset: 0x0107752b, size: 82 bytes, params: 1, frame: 14 const value = environment.__proto__.__proto__; return (Dispatcher).dispatch({type: 'VIDEO_SIZE_UPDATE', streamId: env0_0, dimensions: {width: require, height: importDefault}}); } } function _fun35535(a0) { // fn#35535, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:24722, offset: 0x0107759b, size: 48 bytes, params: 2, frame: 3 var gpu_brand; var value; var has_intel_hybrid_igpu; var gpu_count; if (a0 != null) { gpu_brand = a0.gpu_brand; value = environment.__proto__; has_intel_hybrid_igpu = a0.has_intel_hybrid_igpu; gpu_count = a0.gpu_count; } } function _fun35536(a0) { // fn#35536, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:24859, offset: 0x010775cb, size: 47 bytes, params: 2, frame: 12 env1_131 = a0; const binding = env1_77; binding.eachConnection(updateConnectionVoiceProcessing); env1_74.emitChange(); } } function supportsWindowsGraphicsCapture() { // fn#35537, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:24960, offset: 0x010775fa, size: 128 bytes, params: 1, frame: 18 var r0; var defaultImport; const value2 = undefined; const isWindows2 = (PlatformUtilsModule).isWindows(); if (isWindows2) { defaultImport = importDefault(12427) /* metro dependency 12427 */; r0 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value2 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, WINDOWS_GRAPHICS_CAPTURE_SEMVER); } else { r0 = isWindows2; } return r0; } function supportsScreenCaptureKit() { // fn#35538, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:25106, offset: 0x0107767a, size: 156 bytes, params: 1, frame: 18 var defaultImport; const value2 = undefined; let r0 = (require(477) /* metro dependency 477: PlatformUtils */).isMac() && env0_77.supports(Features.SCREEN_CAPTURE_KIT); if (r0) { defaultImport = importDefault(12427) /* metro dependency 12427 */; r0 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value2 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, DARWIN_SCKIT_VERSION); } return r0; } function supportsAutomaticAudioSubsystem() { // fn#35539, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:25278, offset: 0x01077716, size: 93 bytes, params: 1, frame: 13 return (require(477) /* metro dependency 477: PlatformUtils */).isWindows() && env0_77.supports(Features.AUTOMATIC_AUDIO_SUBSYSTEM) && env0_77.supports(Features.AUDIO_SUBSYSTEM_DEFERRED_SWITCH); } function isReadyToMigrateToSingleAdmOffering() { // fn#35540, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:25443, offset: 0x01077773, size: 30 bytes, params: 1, frame: 11 const binding = env0_77; const supports = binding.supports; const AUDIO_BYPASS_SYSTEM_INPUT_PROCESSING = Features.AUDIO_BYPASS_SYSTEM_INPUT_PROCESSING; return Reflect.apply(supports, binding, [AUDIO_BYPASS_SYSTEM_INPUT_PROCESSING]); } function mergeSettings(a0) { // fn#35541, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:25550, offset: 0x01077791, size: 115 bytes, params: 2, frame: 16 var Storage; const value = a1; const value2 = a2; const r3 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; const r2 = !(value2 !== undefined) || value2; const storedSettings = getStoredSettings(r3); const Object = global.Object; Object.assign(storedSettings, a0); if (r2) { Storage = (require(587) /* metro dependency 587: Storage */).Storage; Storage.set(env0_63, env0_82); } return storedSettings; } function applySettings() { // fn#35542, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:25682, offset: 0x01077804, size: 395 bytes, params: 1, frame: 16 var defaultImport3; const value2 = _getSettings0(); setInputDevice(value2.inputDeviceId); let binding = env0_77; binding.setAudioOutputDevice(value2.outputDeviceId); updateVideo(); binding = env0_77; binding.setInputVolume(value2.inputVolume); const defaultImport = MobileAudioOutputExperiment; const getConfig = defaultImport.getConfig; const audioOutputPresent = Reflect.apply(getConfig, defaultImport, [{location: 'MediaEngineStore.applySettings'}]).audioOutputPresent; binding = env0_77; const setOutputVolume = binding.setOutputVolume; if (audioOutputPresent) { Reflect.apply(setOutputVolume, binding, [value2.outputVolume]); } else { Reflect.apply(setOutputVolume, binding, [DEFAULT_VOLUME]); } binding = env0_77; binding.setAecDump(value2.aecDumpEnabled); binding = env0_77; binding.setSidechainCompression(value2.sidechainCompression); binding = env0_77; binding.setSidechainCompressionStrength(value2.sidechainCompressionStrength); binding = env0_77; binding.setAudioInputBypassSystemProcessing(value2.bypassSystemInputProcessing); if (PlatformUtilsModule.isLinux()) { if (!((importDefault(6731) /* metro dependency 6731: DesktopNativeUtils */) == null || (importDefault(6731) /* metro dependency 6731: DesktopNativeUtils */).setOpenH264Enabled == null)) { defaultImport3 = importDefault(6731) /* metro dependency 6731: DesktopNativeUtils */; defaultImport3.setOpenH264Enabled(value2.openH264Enabled); } } binding = env0_77; binding.setAudioMixerOptions(value2.audioMixerSettings); } function tryEnable() { // fn#35543, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:26390, offset: 0x0107798f, size: 45 bytes, params: 1, frame: 11 if (!env0_84) { env0_77.enable().then(_fun35544); } function _fun35544() { // fn#35544, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:26433, offset: 0x010779bc, size: 51 bytes, params: 1, frame: 11 const value = environment.__proto__; return (Dispatcher).dispatch({'type': 'MEDIA_ENGINE_SET_AUDIO_ENABLED', 'enabled': true, 'unmute': false}); } } function hasHardwareMatch(a0, a1) { // fn#35546, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:26642, offset: 0x01077a22, size: 36 bytes, params: 3, frame: 11 const env0_0 = a0; return a1.find(_fun35547) != null; function _fun35547(a0) { // fn#35547, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:26694, offset: 0x01077a46, size: 127 bytes, params: 2, frame: 6 let r0 = a0.containerId != null && a0.containerId === env0_0.containerId; r0 = !r0 ? a0.hardwareId != null && a0.hardwareId === env0_0.hardwareId : r0; r0 = !r0 ? a0.originalId != null && a0.originalId === env0_0.originalId : r0; return r0; } } function inferDeviceFormFactor(a0, {inputDevices, outputDevices, videoDevices}) { // fn#35548, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:26907, offset: 0x01077ac5, size: 432 bytes, params: 3, frame: 22 if (a0.type === 'videoinput' === true) { return env0_73.WEBCAM; } if (hasHardwareMatch(a0, videoDevices) === true) { return env0_73.WEBCAM; } let items2 = ['builtin', 'displayport', 'hdmi']; const includes = items2.includes; const macosTransportType = a0.macosTransportType; const value2 = ''; if (Reflect.apply(includes, items2, [macosTransportType ?? value2]) === true) { return env0_73.INTEGRATED; } if ((a0.hardwareId != null && env0_146.test(a0.hardwareId)) === true) { return env0_73.INTEGRATED; } const value5 = (Module00022)(a0.hardwareId); if (value5.startsWith('BTHENUM') === true) { return env0_73.BLUETOOTH; } items2 = ['bluetooth', 'bluetoothle']; if (items2.includes(a0.macosTransportType ?? value2) === true) { return env0_73.BLUETOOTH; } items2 = ['airplay', 'continuitycapturewireless']; if (items2.includes(a0.macosTransportType ?? value2) === true) { return env0_73.AIRPLAY; } if ((a0.type === 'audioinput' && hasHardwareMatch(a0, outputDevices)) === true) { return env0_73.HEADSET; } if ((a0.type === 'audiooutput' && hasHardwareMatch(a0, inputDevices)) === true) { return env0_73.HEADSET; } } function convertDevices(a0, {deviceType, defaultName}) { // fn#35549, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:27656, offset: 0x01077c75, size: 156 bytes, params: 3, frame: 14 var value; const env0_0 = a0; const property = a0[({'audioinput': 'inputDevices', 'audiooutput': 'outputDevices', 'videoinput': 'videoDevices'})[deviceType]]; if (property.length === 0) { value = makeDisabledDevice(defaultName); return {[value.id]: value}; } value = (importDefault(22) /* metro dependency 22 */)(property); value = value.map(_fun35550); value = value.keyBy('id'); return value.value(); function _fun35550(a0) { // fn#35550, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:27895, offset: 0x01077d11, size: 124 bytes, params: 2, frame: 14 const object = {}; object.id = a0.id; object.index = a0.index; object.name = a0.name; object.disabled = false; object.facing = a0.facing; object.guid = a0.originalId; object.hardwareId = a0.hardwareId; object.containerId = a0.containerId; object.effects = a0.effects; object.formFactor = inferDeviceFormFactor(a0, env0_0); return object; } } function maybeProbeAudioEffects(a0) { // fn#35552, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:28234, offset: 0x01077de8, size: 161 bytes, params: 2, frame: 17 var defaultImport; var property; const value2 = undefined; if (PlatformUtilsModule.isWindows()) { defaultImport = importDefault(12482) /* metro dependency 12482: AudioEffectsExperiment */; if (defaultImport.getConfig({location: 'MediaEngineStore.setInputDevice'}).probeAudioEffects) { property = env0_90[a0]; if ((property == null ? value2 : property.guid) != null) { (importDefault(12483) /* metro dependency 12483: queryAudioEffects */)(property.guid, a0, env0_77); } } } return value2; } function setInputDevice(a0) { // fn#35553, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:28452, offset: 0x01077e89, size: 36 bytes, params: 2, frame: 12 env0_77.setAudioInputDevice(a0); maybeProbeAudioEffects(a0); } function hasHapticsOverAudioOutputDevices(a0) { // fn#35554, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:28531, offset: 0x01077ead, size: 41 bytes, params: 2, frame: 11 const Object = global.Object; return Object.values(a0).some(function({name}) { return name.toLowerCase().includes('dualsense'); }); } function setOutputDevices(a0) { // fn#35556, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:28654, offset: 0x01077efa, size: 219 bytes, params: 2, frame: 19 var hasHapticsOverAudioOutputDevicesBinding; var hasHapticsOverAudioOutputDevices2; var hasHapticsOverAudioOutputDevicesBinding2; const binding = env0_91; const convertDevicesBinding = convertDevices; const object = {}; const AUDIO_OUTPUT = DeviceTypes.AUDIO_OUTPUT; object.deviceType = AUDIO_OUTPUT; const intl = (require(1244) /* metro dependency 1244: indexNative */).intl; object.defaultName = intl.string((require(1244) /* metro dependency 1244: indexNative */).t.xlUg0v); env0_91 = convertDevicesBinding(a0, object); const defaultImport = Module00022; if (!defaultImport.isEqual(env0_91, binding)) { env0_77.setAudioOutputDevice(getDeviceId(env0_91, _getSettings0().outputDeviceId)); hasHapticsOverAudioOutputDevicesBinding = hasHapticsOverAudioOutputDevices; hasHapticsOverAudioOutputDevices2 = hasHapticsOverAudioOutputDevicesBinding(binding); hasHapticsOverAudioOutputDevicesBinding2 = hasHapticsOverAudioOutputDevicesBinding(env0_91); if (hasHapticsOverAudioOutputDevices2 !== hasHapticsOverAudioOutputDevicesBinding2) { updateConnectionsDiscardRearChannels(hasHapticsOverAudioOutputDevicesBinding2); } } function updateConnectionsDiscardRearChannels(a0) { // fn#35557, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29000, owner: setOutputDevices.updateConnectionsDiscardRearChannels, offset: 0x01077fd5, size: 36 bytes, params: 2, frame: 11 const env0_0 = a0; env1_77.eachConnection(_fun35558); function _fun35558(a0) { // fn#35558, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29068, offset: 0x01077ff9, size: 47 bytes, params: 2, frame: 11 const context = a0.context; const STREAM = MediaEngineContextTypes.STREAM; if (context === STREAM) { a0.setSoundshareDiscardRearChannels(env0_0); } } } } function applyRemoteSettings() { // fn#35559, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29141, offset: 0x01078028, size: 135 bytes, params: 1, frame: 14 var r1; var r3; var r2; var value3; let value = a0; reducibleJoin2: while (true) { if (value !== undefined) { r1 = value; break reducibleJoin2; } value = false; r1 = value; break reducibleJoin2; } var env0_2; const audioContextSettings = UserSettingsProtoStore.settings.audioContextSettings; reducibleJoin4: while (true) { if (audioContextSettings != null) { r3 = audioContextSettings; break reducibleJoin4; } r3 = {user: {}, stream: {}}; break reducibleJoin4; } const applyRemoteSettings_loop2 = applyRemoteSettings_loop; const Object = global.Object; value = Object.keys(r3); let length = value.length; const value2 = 0; if (value2 < length) { r2 = value2; reducibleLoop5: while (true) { env0_2 = value[r2]; applyRemoteSettings_loop2(); value3 = typeof r2 === 'bigint' ? r2 + 1n : +r2 + 1; length = value.length; if (value3 < length) { r2 = value3; continue reducibleLoop5; } break reducibleLoop5; } } function applyRemoteSettings_loop() { // fn#35560, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29258, owner: applyRemoteSettings._loop, offset: 0x010780af, size: 387 bytes, params: 1, frame: 26 var r15; var environment; var r10; var r9; var r6; var items2; var value6; var value7; var _createForOfIteratorHelperLoose_35474Binding; var Set; var keys; var prototype; var set; var value8; var done; var value9; var value10; let value = environment; const binding = env0_2; const USER = ProtoAudioSettingsContextTypes.USER; const r3 = binding === USER ? MediaEngineContextTypes.DEFAULT : MediaEngineContextTypes.STREAM; const env0_0 = r3; const STREAM = MediaEngineContextTypes.STREAM; let property = (r3 === STREAM ? DEFAULT_STREAM_VOLUME : DEFAULT_VOLUME)[env0_2]; reducibleJoin8: while (true) { if (property != null) { r10 = property; break reducibleJoin8; } r10 = {}; break reducibleJoin8; } const {localMutes, localVolumes} = _getSettings0(r3); let closure = _loop_loop2_35561; let Object = global.Object; const value4 = Object.entries(r10); let length = value4.length; const value5 = 0; if (value5 < length) { r9 = value5; reducibleLoop9: while (true) { property = value4[r9]; value6 = env1_9(property, 2); property = value6[value5]; closure(property, value6[1]); value7 = typeof r9 === 'bigint' ? r9 + 1n : +r9 + 1; length = value4.length; if (value7 < length) { r9 = value7; continue reducibleLoop9; } r15 = property; break reducibleLoop9; } } reducibleJoin13: while (true) { if (!env0_0) { break reducibleJoin13; } closure = _loop3; _createForOfIteratorHelperLoose_35474Binding = _createForOfIteratorHelperLoose_35474; Set = global.Set; Object = global.Object; keys = Object.keys; value = Reflect.apply(keys, Object, [localMutes]); items2 = []; value = arraySpread(items2, value, value5, r15); Object = global.Object; keys = Object.keys; arraySpread(items2, Reflect.apply(keys, Object, [localVolumes]), value, r15); prototype = Set.prototype; value = Object.create(prototype, {constructor: {value: Set}}); set = new Set(); value = set instanceof Object ? set : value; value = _createForOfIteratorHelperLoose_35474Binding(value); value8 = value(); done = value8.done; if (done) { break reducibleJoin13; } r6 = value8; reducibleLoop12: while (true) { value9 = r6.value; closure(value9); value10 = value(); done = value10.done; if (done) { break reducibleJoin13; } r6 = value10; continue reducibleLoop12; } } mergeSettings({localMutes: localMutes, localVolumes: localVolumes}, r3); function _loop_loop2_35561(a0, a1) { // fn#35561, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29413, owner: applyRemoteSettings._loop._loop2, offset: 0x01078232, size: 161 bytes, params: 3, frame: 18 const env0_0 = a0; const env0_1 = a1; if ((require(12484) /* metro dependency 12484: AudioSettingsPending */).getPendingAudioSettings(env0_0, a0) != null) { return 1; } const muted = a1.muted; const localMutesBinding = localMutes; if (muted) { localMutesBinding[a0] = true; } else { delete localMutesBinding[a0]; } if (a1.volume !== env0_1) { localVolumes[a0] = a1.volume; } else { delete localVolumes[a0]; } const binding = env2_77; binding.eachConnection(_fun35562, env0_0); function _fun35562(a0) { // fn#35562, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29571, offset: 0x010782d3, size: 54 bytes, params: 2, frame: 14 const setLocalVolume = a0.setLocalVolume; const binding = env0_0; Reflect.apply(setLocalVolume, a0, [binding, require.volume]); a0.setLocalMute(binding, require.muted); } } function _loop3(a0) { // fn#35563, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29736, owner: applyRemoteSettings._loop._loop3, offset: 0x01078309, size: 79 bytes, params: 2, frame: 14 const env0_0 = a0; if (env0_2[a0] != null) { return 1; } delete localMutes[a0]; delete localVolumes[a0]; const binding = env2_77; binding.eachConnection(_fun35564, env0_0); function _fun35564(a0) { // fn#35564, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:29814, offset: 0x01078358, size: 47 bytes, params: 2, frame: 13 const setLocalVolume = a0.setLocalVolume; const binding = env0_0; Reflect.apply(setLocalVolume, a0, [binding, env1_1]); a0.setLocalMute(binding, false); } } } } function maybeTryHookProcess(a0, a1) { // fn#35565, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:30086, offset: 0x01078387, size: 302 bytes, params: 3, frame: 17 var r5; var object2; var binding; var soundshareId; var soundshareSession; const value = a0; if (a1) { if (env0_74 != null) { binding = env0_74; r5 = binding.getExperimentalSoundshare() ? value : (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).getAudioPid(value); object2 = {soundshareId: r5, soundshareSession: r5 != null ? (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).generateSessionFromPid(r5) : ''}; } else { env0_62.info('Error: trying to get soundshare id before MediaEngineStore is instantiated.'); object2 = {'soundshareId': null, 'soundshareSession': ''}; } soundshareId = object2.soundshareId; soundshareSession = object2.soundshareSession; if (soundshareId != null) { tryHookSoundshare(soundshareId, soundshareSession); return {soundshareId: soundshareId, soundshareSession: soundshareSession}; } if (value != null && _getSettings0().videoHook) { (importAll(12419) /* metro dependency 12419: HookNative */).attachToProcess(value); } } else if (value != null && _getSettings0().videoHook) { (importAll(12419) /* metro dependency 12419: HookNative */).attachToProcess(value); } return {'soundshareId': null, 'soundshareSession': null}; function tryHookSoundshare(a0, a1) { // fn#35566, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:30535, owner: maybeTryHookProcess.tryHookSoundshare, offset: 0x010784b5, size: 116 bytes, params: 3, frame: 16 var environment; const env0_0 = a0; let value = environment.__proto__; if ((require(477) /* metro dependency 477: PlatformUtils */).isWindows() && a0 > 1) { value = importAll(12419) /* metro dependency 12419: HookNative */; value = value.attachToProcess(a0, {soundshare_session: a1}); value.then(_fun35567); } function _fun35567(a0) { // fn#35567, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:30655, offset: 0x01078529, size: 93 bytes, params: 2, frame: 13 var environment; var r1; const env0_0 = a0; let value = a0 == null; if (value) { r1 = value; } else { value = environment.__proto__.__proto__; value = RunningGameStoreNative.shouldContinueWithoutElevatedProcessForPID(env0_0); r1 = value; } if (!r1) { value = environment.__proto__.__proto__; value = importDefault(694) /* metro dependency 694: Dispatcher */; value.wait(_fun35568); } function _fun35568() { // fn#35568, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:30735, offset: 0x01078586, size: 59 bytes, params: 1, frame: 13 const value = environment.__proto__.__proto__.__proto__; (Dispatcher).dispatch({type: 'MEDIA_ENGINE_SOUNDSHARE_FAILED', errorMessage: env0_0}); } } } } function resetProbingState() { // fn#35569, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:30982, offset: 0x010785c1, size: 145 bytes, params: 1, frame: 22 var r5; var property; var value4; var property2; var AUTO_PROBING; var value5; const DEFAULT = MediaEngineContextTypes.DEFAULT; const videoToggleStateMap = _getSettings0(DEFAULT).videoToggleStateMap; const Object = global.Object; const value2 = Object.entries(videoToggleStateMap); let length = value2.length; const value3 = 0; if (value3 < length) { r5 = value3; while (true) { property = value2[r5]; value4 = Module00057(property, 2); property = value4[value3]; property2 = value4[1]; AUTO_PROBING = VideoToggleState.AUTO_PROBING; if (property2 === AUTO_PROBING) { delete videoToggleStateMap[property]; } value5 = typeof r5 === 'bigint' ? r5 + 1n : +r5 + 1; length = value2.length; if (value5 < length) { r5 = value5; continue; } break; } } mergeSettings({videoToggleStateMap: videoToggleStateMap}, DEFAULT, false); } function trackVoiceProcessing(a0) { // fn#35570, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:31217, offset: 0x01078652, size: 256 bytes, params: 2, frame: 21 const _getSettings0Binding = _getSettings0; const value2 = undefined; const value3 = _getSettings0Binding(); let binding = env0_77; const audioSubsystem = binding.getAudioSubsystem(); const audioLayer = env0_77.getAudioLayer(); const property = env0_90[getDeviceId(env0_90, value3.inputDeviceId)]; const name = property == null ? value2 : property.name; const defaultImport = GetEffectiveNoiseCancellation; const noiseCancellation = value3.noiseCancellation; binding = env0_74; const getSystemMicrophoneMode = binding.getSystemMicrophoneMode; const value7 = defaultImport(noiseCancellation, Reflect.apply(getSystemMicrophoneMode, binding, [])); const defaultImport2 = AnalyticsUtils; const track = defaultImport2.track; const VOICE_PROCESSING = AnalyticEvents.VOICE_PROCESSING; Reflect.apply(track, defaultImport2, [VOICE_PROCESSING, {echo_cancellation: value3.echoCancellation, noise_cancellation: value3.noiseCancellation, noise_suppression: value3.noiseSuppression, automatic_gain_control: value3.automaticGainControl, location: a0, bypass_system_input_processing: value3.bypassSystemInputProcessing, audio_subsystem: audioSubsystem, audio_layer: audioLayer, input_device: name, effective_noise_cancellation: value7}]); return value2; } function setLoopback() { // fn#35571, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:31799, offset: 0x01078752, size: 169 bytes, params: 1, frame: 19 const value2 = _getSettings0(); const value3 = env0_130.size > 0; const inputDeviceId = value2.inputDeviceId; const r8 = CertifiedDeviceStore.hasEchoCancellation(inputDeviceId) || value2.echoCancellation; const r7 = CertifiedDeviceStore.hasNoiseSuppression(inputDeviceId) || value2.noiseSuppression; const automaticGainControlConfig = getAutomaticGainControlConfig(CertifiedDeviceStore.hasAutomaticGainControl(inputDeviceId) || value2.automaticGainControl); const noiseCancellation = value2.noiseCancellation; const binding = env0_77; binding.setLoopback(value3, {echoCancellation: r8, echoCancellationPreEcho: !value3, noiseSuppression: r7, automaticGainControlConfig: automaticGainControlConfig, noiseCancellation: noiseCancellation}); } function _setGamescopeVaapiEnabled() { // fn#35572, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:32214, offset: 0x010787fb, size: 48 bytes, params: 1, frame: 14 return Module00005(_fun35574).apply(this, arguments); function* _fun35574() { // fn#35574, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:32287, offset: 0x01078834, size: 235 bytes, params: 1, frame: 16 var environment; var getSystemInfo; var r5; var window; var DiscordNative; var value3; var processUtils; var value4; var electronGPUInfo; if (true) { value = environment.__proto__.__proto__; var binding = env2_77; var supports = binding.supports; var VAAPI = env2_51.VAAPI; if (Reflect.apply(supports, binding, [VAAPI])) { window = global.window; DiscordNative = window.DiscordNative; value3 = undefined; getSystemInfo = DiscordNative == null || DiscordNative.processUtils == null ? value3 : DiscordNative.processUtils.getSystemInfo; if (getSystemInfo == null) { return undefined; } window = global.window; DiscordNative = window.DiscordNative; processUtils = DiscordNative.processUtils; getSystemInfo = processUtils.getSystemInfo; yield Reflect.apply(getSystemInfo, processUtils, []); value4 = undefined; if (false) { return value4; } electronGPUInfo = value4.electronGPUInfo; r5 = (electronGPUInfo == null ? value3 : electronGPUInfo.gpuDevice) ?? []; if (r5.some(function(a0) { return a0.vendorId === 4098; })) { binding = env2_77; env2_140 = binding.supports(env2_51.GAMESCOPE_CAPTURE); } } } } } function isKrispAvailable() { // fn#35576, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:32648, offset: 0x01078936, size: 12 bytes, params: 1, frame: 1 return !env0_114; } function _setupKrispNativeModule() { // fn#35577, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:32686, offset: 0x01078942, size: 48 bytes, params: 1, frame: 14 return Module00005(_fun35579).apply(this, arguments); function* _fun35579() { // fn#35579, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:32755, offset: 0x0107897b, size: 726 bytes, params: 1, frame: 24 var environment; var r9; var r3; var r6; var value; var value2; var value3; var binding; var binding2; var property; var value4; var ensureModule; var value5; var value6; var value7; var binding3; var value8; var requireModule; var value9; var getSdkVersion; var value10; var value11; var getSuppressionLevel; var value12; var value13; var value14; var value15; var getNcModels; var value16; var value17; var then; var closure; var emitChange; var binding4; var value18; var value19; var value20; var value21; var binding5; var value22; var value23; var setupKrispPath; var value24; var error; var warn; var message; var HermesInternal; var concat; var value25; var binding6; var value26; var captureException; var KRISP_INIT_ERROR; var includes; var value27; var parseInt; var substring; var message2; var indexOf; var value28; var value29; var value30; var int; var isNaN; var isNaN2; var value31; var binding7; var value32; var reportAVError; var object; var value33; var AVError; var NOISE_CANCELLER_ERROR; var value34; var value35; var track; var VOICE_PROCESSING; exceptionLanding152: while (true) { value = undefined; value2 = false; if (value2) { return value; } value = undefined; value3 = environment.__proto__.__proto__; reducibleJoin4: while (true) { reduciblePort151: while (true) { exceptionLanding80: while (true) { try { try { binding = env2_1; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } break reducibleJoin4; } try { binding = env2_62; } catch (error) { break exceptionLanding152; } try { warn = binding.warn; } catch (error) { break exceptionLanding152; } try { message = error.message; } catch (error) { break exceptionLanding152; } try { HermesInternal = global.HermesInternal; } catch (error) { break exceptionLanding152; } try { concat = HermesInternal.concat; } catch (error) { break exceptionLanding152; } try { value25 = 'Failed to load Krisp module: ' + message; } catch (error) { break exceptionLanding152; } try { Reflect.apply(warn, binding, [value25]); } catch (error) { break exceptionLanding152; } try { binding = env2_1; } catch (error) { break exceptionLanding152; } try { binding6 = env2_3; } catch (error) { break exceptionLanding152; } try { property = binding6[78]; } catch (error) { break exceptionLanding152; } try { value26 = binding(property); } catch (error) { break exceptionLanding152; } try { captureException = value26.captureException; } catch (error) { break exceptionLanding152; } try { Reflect.apply(captureException, value26, [error]); } catch (error) { break exceptionLanding152; } try { binding = env2_53; } catch (error) { break exceptionLanding152; } try { KRISP_INIT_ERROR = binding.KRISP_INIT_ERROR; } catch (error) { break exceptionLanding152; } try { message = error.message; } catch (error) { break exceptionLanding152; } try { includes = message.includes; } catch (error) { break exceptionLanding152; } try { value27 = Reflect.apply(includes, message, [': ']); } catch (error) { break exceptionLanding152; } reducibleJoin125: while (true) { if (value27) { try { parseInt = global.parseInt; } catch (error) { break exceptionLanding152; } try { message = error.message; } catch (error) { break exceptionLanding152; } try { substring = message.substring; } catch (error) { break exceptionLanding152; } try { message2 = error.message; } catch (error) { break exceptionLanding152; } try { indexOf = message2.indexOf; } catch (error) { break exceptionLanding152; } try { value28 = Reflect.apply(indexOf, message2, [': ']); } catch (error) { break exceptionLanding152; } try { value29 = value28 + 1; } catch (error) { break exceptionLanding152; } try { value30 = Reflect.apply(substring, message, [value29]); } catch (error) { break exceptionLanding152; } try { int = parseInt(value30); } catch (error) { break exceptionLanding152; } try { isNaN = global.isNaN; } catch (error) { break exceptionLanding152; } try { isNaN2 = isNaN(int); } catch (error) { break exceptionLanding152; } reducibleJoin124: while (true) { reducibleJoin123: while (true) { if (isNaN2) { try { binding = env2_53; } catch (error) { break exceptionLanding152; } break reducibleJoin123; } try { value31 = int === 0; } catch (error) { break exceptionLanding152; } if (value31) { try { binding = env2_53; } catch (error) { break exceptionLanding152; } break reducibleJoin123; } r3 = int; break reducibleJoin124; } try { KRISP_INIT_ERROR = binding.KRISP_INIT_ERROR; } catch (error) { break exceptionLanding152; } r3 = KRISP_INIT_ERROR; break reducibleJoin124; } r6 = r3; break reducibleJoin125; } r6 = KRISP_INIT_ERROR; break reducibleJoin125; } try { binding = env2_0; } catch (error) { break exceptionLanding152; } try { binding7 = env2_3; } catch (error) { break exceptionLanding152; } try { property = binding7[46]; } catch (error) { break exceptionLanding152; } try { value32 = binding(property); } catch (error) { break exceptionLanding152; } try { reportAVError = value32.reportAVError; } catch (error) { break exceptionLanding152; } try { object = {}; } catch (error) { break exceptionLanding152; } try { property = binding7[46]; } catch (error) { break exceptionLanding152; } try { value33 = binding(property); } catch (error) { break exceptionLanding152; } try { AVError = value33.AVError; } catch (error) { break exceptionLanding152; } try { NOISE_CANCELLER_ERROR = AVError.NOISE_CANCELLER_ERROR; } catch (error) { break exceptionLanding152; } try { object.type = NOISE_CANCELLER_ERROR; } catch (error) { break exceptionLanding152; } try { binding = env2_160; } catch (error) { break exceptionLanding152; } try { value34 = binding(r6); } catch (error) { break exceptionLanding152; } try { object.underlyingError = value34; } catch (error) { break exceptionLanding152; } try { Reflect.apply(reportAVError, value32, [object]); } catch (error) { break exceptionLanding152; } try { binding = env2_1; } catch (error) { break exceptionLanding152; } try { property = binding7[47]; } catch (error) { break exceptionLanding152; } try { value35 = binding(property); } catch (error) { break exceptionLanding152; } try { track = value35.track; } catch (error) { break exceptionLanding152; } try { binding = env2_23; } catch (error) { break exceptionLanding152; } try { VOICE_PROCESSING = binding.VOICE_PROCESSING; } catch (error) { break exceptionLanding152; } try { object = {}; } catch (error) { break exceptionLanding152; } try { object.noise_canceller_error = r6; } catch (error) { break exceptionLanding152; } try { Reflect.apply(track, value35, [VOICE_PROCESSING, object]); } catch (error) { break exceptionLanding152; } break reduciblePort151; } env2_112 = false; return value; } try { try { binding2 = env2_3; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { property = binding2[67]; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value4 = binding(property); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { ensureModule = value4.ensureModule; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value5 = Reflect.apply(ensureModule, value4, ['discord_krisp']); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } yield value5; try { try { value6 = undefined; value7 = false; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } if (value7) { env2_112 = false; return value6; } try { try { binding = env2_1; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { binding3 = env2_3; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { property = binding3[67]; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value8 = binding(property); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { requireModule = value8.requireModule; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value9 = Reflect.apply(requireModule, value8, ['discord_krisp']); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { env2_113 = true; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { getSdkVersion = value9.getSdkVersion; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value10 = getSdkVersion == null; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } reducibleJoin29: while (true) { if (value10) { r9 = value; break reducibleJoin29; } try { try { getSdkVersion = value9.getSdkVersion; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value11 = Reflect.apply(getSdkVersion, value9, []); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } r9 = value11; break reducibleJoin29; } try { try { env2_115 = r9; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { getSuppressionLevel = value9.getSuppressionLevel; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value12 = getSuppressionLevel == null; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } reducibleJoin37: while (true) { if (value12) { r9 = value; break reducibleJoin37; } try { try { getSuppressionLevel = value9.getSuppressionLevel; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value13 = Reflect.apply(getSuppressionLevel, value9, []); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } r9 = value13; break reducibleJoin37; } try { try { value14 = r9 != null; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } value15 = 100; reducibleJoin41: while (true) { if (value14) { break reducibleJoin41; } r9 = value15; break reducibleJoin41; } try { try { env2_116 = r9; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { getNcModels = value9.getNcModels; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value16 = getNcModels == null; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } reducibleJoin52: while (true) { if (value16) { break reducibleJoin52; } try { try { getNcModels = value9.getNcModels; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value17 = Reflect.apply(getNcModels, value9, []); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { then = value17.then; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { closure = _fun35580; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { Reflect.apply(then, value17, [closure]); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } break reducibleJoin52; } try { try { binding = env2_74; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { emitChange = binding.emitChange; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { Reflect.apply(emitChange, binding, []); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { binding = env2_1; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { binding4 = env2_3; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { property = binding4[67]; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value18 = binding(property); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { ensureModule = value18.ensureModule; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value19 = Reflect.apply(ensureModule, value18, ['discord_voice']); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } yield value19; try { try { value20 = undefined; value21 = false; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } if (value21) { env2_112 = false; return value20; } try { try { binding = env2_1; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { binding5 = env2_3; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { property = binding5[67]; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value22 = binding(property); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { requireModule = value22.requireModule; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value23 = Reflect.apply(requireModule, value22, ['discord_voice']); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { setupKrispPath = value23.setupKrispPath; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { value24 = setupKrispPath == null; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } reducibleJoin77: while (true) { if (value24) { break reducibleJoin77; } try { try { setupKrispPath = value23.setupKrispPath; } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } try { try { Reflect.apply(setupKrispPath, value23, []); } catch (error) { break exceptionLanding80; } } catch (error) { break exceptionLanding152; } break reducibleJoin77; } env2_112 = false; return value; } throw error; function _fun35580(a0) { // fn#35580, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:33051, offset: 0x01078c51, size: 28 bytes, params: 2, frame: 9 env3_118 = a0; env3_74.emitChange(); } } } function maybeSetupKrispModule() { // fn#35581, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:33724, offset: 0x01078c6d, size: 264 bytes, params: 1, frame: 14 var moduleValue4; var binding; var moduleValue5; let r2 = (require(477) /* metro dependency 477: PlatformUtils */).isWindows() || (require(477) /* metro dependency 477: PlatformUtils */).isLinux(); r2 = !r2 ? (require(477) /* metro dependency 477: PlatformUtils */).isMac() : r2; if (r2) { if (env0_112) { moduleValue4 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue4.isWeb()) { binding = env0_77; if (binding.supports(Features.NOISE_CANCELLATION)) { env0_74.emitChange(); } else { moduleValue5 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue5.isWeb()) { mergeSettings({noiseCancellation: false}); } } } else { moduleValue5 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue5.isWeb()) { mergeSettings({noiseCancellation: false}); } } } else if (env0_113) { moduleValue4 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue4.isWeb()) { binding = env0_77; if (binding.supports(Features.NOISE_CANCELLATION)) { env0_74.emitChange(); } else { moduleValue5 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue5.isWeb()) { mergeSettings({noiseCancellation: false}); } } } else { moduleValue5 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue5.isWeb()) { mergeSettings({noiseCancellation: false}); } } } else { (function() { return _setupKrispNativeModule.apply(this, arguments); })(); } } else { moduleValue4 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue4.isWeb()) { binding = env0_77; if (binding.supports(Features.NOISE_CANCELLATION)) { env0_74.emitChange(); } else { moduleValue5 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue5.isWeb()) { mergeSettings({noiseCancellation: false}); } } } else { moduleValue5 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue5.isWeb()) { mergeSettings({noiseCancellation: false}); } } } } function _downloadOpenH() { // fn#35583, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:34111, offset: 0x01078d93, size: 48 bytes, params: 1, frame: 14 return Module00005(_fun35585).apply(this, arguments); function* _fun35585() { // fn#35585, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:34162, offset: 0x01078dcc, size: 464 bytes, params: 1, frame: 26 var environment; var r5; var r10; var fetchedFromNetwork; var URL; var parse; var binding; var value5; var value6; var pathname; var split; var value7; var length; var value8; var property; var replace; var value9; var binding2; var value10; var downloadOpenH264; var binding3; var closure; var value11; var value12; var value13; var log; var error; var error2; var message; var binding4; var track; var VIDEO_OPENH264_DOWNLOADED; var object; var binding5; var cleanupUnusedOpenH264Files; var value15; var error3; let value = undefined; if (false) { return value; } const value3 = false; reducibleJoin4: while (true) { reduciblePort91: while (true) { exceptionLanding90: while (true) { try { URL = global.URL; } catch (error) { break exceptionLanding90; } break reducibleJoin4; } value = environment.__proto__.__proto__; binding = env2_62; error3 = binding.error; Reflect.apply(error3, binding, ['OpenH264 download failed', error]); break reduciblePort91; } return undefined; } try { parse = URL.parse; } catch (error) { break exceptionLanding90; } try { binding = env2_70; } catch (error) { break exceptionLanding90; } try { value5 = Reflect.apply(parse, URL, [binding]); } catch (error) { break exceptionLanding90; } try { value6 = value5 === null; } catch (error) { break exceptionLanding90; } if (value6) { try { binding = env2_62; } catch (error) { break exceptionLanding90; } try { log = binding.log; } catch (error) { break exceptionLanding90; } try { Reflect.apply(log, binding, ['OpenH264 URL ', value5, ' is invalid']); } catch (error) { break exceptionLanding90; } } else { try { pathname = value5.pathname; } catch (error) { break exceptionLanding90; } try { split = pathname.split; } catch (error) { break exceptionLanding90; } try { value7 = Reflect.apply(split, pathname, ['/']); } catch (error) { break exceptionLanding90; } try { length = value7.length; } catch (error) { break exceptionLanding90; } try { value8 = length - 1; } catch (error) { break exceptionLanding90; } try { property = value7[value8]; } catch (error) { break exceptionLanding90; } try { replace = property.replace; } catch (error) { break exceptionLanding90; } try { value9 = Reflect.apply(replace, property, ['.bz2', value]); } catch (error) { break exceptionLanding90; } reducibleJoin23: while (true) { reduciblePort53: while (true) { exceptionLanding46: while (true) { try { try { binding = env2_1; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } break reducibleJoin23; } try { binding = env2_62; } catch (error) { break exceptionLanding90; } try { error2 = binding.error; } catch (error) { break exceptionLanding90; } try { Reflect.apply(error2, binding, ['OpenH264 download failed', error]); } catch (error) { break exceptionLanding90; } try { message = error.message; } catch (error) { break exceptionLanding90; } r5 = value3; r10 = message; fetchedFromNetwork = value3; break reduciblePort53; } try { binding = env2_1; } catch (error) { break exceptionLanding90; } try { binding4 = env2_3; } catch (error) { break exceptionLanding90; } try { property = binding4[47]; } catch (error) { break exceptionLanding90; } try { value = binding(property); } catch (error) { break exceptionLanding90; } try { track = value.track; } catch (error) { break exceptionLanding90; } try { binding = env2_23; } catch (error) { break exceptionLanding90; } try { VIDEO_OPENH264_DOWNLOADED = binding.VIDEO_OPENH264_DOWNLOADED; } catch (error) { break exceptionLanding90; } try { object = {}; } catch (error) { break exceptionLanding90; } try { object.success = r5; } catch (error) { break exceptionLanding90; } try { object.fetched_from_network = fetchedFromNetwork; } catch (error) { break exceptionLanding90; } try { object.error_message = r10; } catch (error) { break exceptionLanding90; } try { Reflect.apply(track, value, [VIDEO_OPENH264_DOWNLOADED, object]); } catch (error) { break exceptionLanding90; } if (r5) { try { binding = env2_1; } catch (error) { break exceptionLanding90; } try { binding5 = env2_3; } catch (error) { break exceptionLanding90; } try { property = binding5[67]; } catch (error) { break exceptionLanding90; } try { value = binding(property); } catch (error) { break exceptionLanding90; } try { cleanupUnusedOpenH264Files = value.cleanupUnusedOpenH264Files; } catch (error) { break exceptionLanding90; } try { object = []; } catch (error) { break exceptionLanding90; } try { object[0] = value9; } catch (error) { break exceptionLanding90; } try { value = Reflect.apply(cleanupUnusedOpenH264Files, value, [object]); } catch (error) { break exceptionLanding90; } yield value; try { value = undefined; value15 = false; } catch (error) { break exceptionLanding90; } if (value15) { return value; } try { binding = env2_62; } catch (error) { break exceptionLanding90; } try { log = binding.log; } catch (error) { break exceptionLanding90; } try { Reflect.apply(log, binding, ['OpenH264 cleanup', value]); } catch (error) { break exceptionLanding90; } } return undefined; } try { try { binding2 = env2_3; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { property = binding2[67]; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { value10 = binding(property); } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { downloadOpenH264 = value10.downloadOpenH264; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { binding = env2_70; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { binding3 = env2_71; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { closure = _fun35586; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { value11 = Reflect.apply(downloadOpenH264, value10, [binding, value9, binding3, closure]); } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } yield value11; try { try { value12 = undefined; value13 = false; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } if (value13) { return value12; } try { try { binding = env2_62; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { log = binding.log; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { Reflect.apply(log, binding, ['OpenH264 is ready', value12]); } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } try { try { fetchedFromNetwork = value12.fetchedFromNetwork; } catch (error) { break exceptionLanding46; } } catch (error) { break exceptionLanding90; } r5 = true; r10 = value; try { binding = env2_1; } catch (error) { break exceptionLanding90; } try { binding4 = env2_3; } catch (error) { break exceptionLanding90; } try { property = binding4[47]; } catch (error) { break exceptionLanding90; } try { value = binding(property); } catch (error) { break exceptionLanding90; } try { track = value.track; } catch (error) { break exceptionLanding90; } try { binding = env2_23; } catch (error) { break exceptionLanding90; } try { VIDEO_OPENH264_DOWNLOADED = binding.VIDEO_OPENH264_DOWNLOADED; } catch (error) { break exceptionLanding90; } try { object = {}; } catch (error) { break exceptionLanding90; } try { object.success = r5; } catch (error) { break exceptionLanding90; } try { object.fetched_from_network = fetchedFromNetwork; } catch (error) { break exceptionLanding90; } try { object.error_message = r10; } catch (error) { break exceptionLanding90; } try { Reflect.apply(track, value, [VIDEO_OPENH264_DOWNLOADED, object]); } catch (error) { break exceptionLanding90; } if (r5) { try { binding = env2_1; } catch (error) { break exceptionLanding90; } try { binding5 = env2_3; } catch (error) { break exceptionLanding90; } try { property = binding5[67]; } catch (error) { break exceptionLanding90; } try { value = binding(property); } catch (error) { break exceptionLanding90; } try { cleanupUnusedOpenH264Files = value.cleanupUnusedOpenH264Files; } catch (error) { break exceptionLanding90; } try { object = []; } catch (error) { break exceptionLanding90; } try { object[0] = value9; } catch (error) { break exceptionLanding90; } try { value = Reflect.apply(cleanupUnusedOpenH264Files, value, [object]); } catch (error) { break exceptionLanding90; } yield value; try { value = undefined; value15 = false; } catch (error) { break exceptionLanding90; } if (value15) { return value; } try { binding = env2_62; } catch (error) { break exceptionLanding90; } try { log = binding.log; } catch (error) { break exceptionLanding90; } try { Reflect.apply(log, binding, ['OpenH264 cleanup', value]); } catch (error) { break exceptionLanding90; } } } function _fun35586(a0) { // fn#35586, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:34391, offset: 0x01078f9c, size: 32 bytes, params: 2, frame: 13 env3_62.log('OpenH264 download status', a0); } } } function maybeDownloadOpenH264() { // fn#35587, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:34823, offset: 0x01078fbc, size: 51 bytes, params: 1, frame: 11 if (PlatformUtilsModule.isLinux()) { (function() { return _downloadOpenH.apply(this, arguments); })(); } } function setAudioSubsystem(a0) { // fn#35589, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:34953, offset: 0x0107900d, size: 89 bytes, params: 2, frame: 13 const AUTOMATIC = AudioSubsystems.AUTOMATIC; if (a0 === AUTOMATIC) { mergeSettings({automaticAudioSubsystem: true}); interpretAutomaticAudioSubsystem(); } else { mergeSettings({automaticAudioSubsystem: false}); env0_77.setAudioSubsystem(a0); } } function interpretAutomaticAudioSubsystem() { // fn#35590, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:35150, offset: 0x01079066, size: 32 bytes, params: 1, frame: 11 const binding = env0_77; const queueAudioSubsystem = binding.queueAudioSubsystem; const EXPERIMENTAL = AudioSubsystems.EXPERIMENTAL; Reflect.apply(queueAudioSubsystem, binding, [EXPERIMENTAL]); } function processQueueMetricsForAnalytics(a0) { // fn#35592, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:53403, offset: 0x010790ae, size: 442 bytes, params: 2, frame: 26 var r3; var property; var value4; var name; var value5; var longestExecTimeNs; var value6; var longestQueueTimeNs; let taskMetrics = a0.taskMetrics; if (taskMetrics == null) { return null; } let length = a0.taskMetrics.length; let value = 0; if (value === length) { return null; } if (a0.taskMetrics.length === 1) { return null; } const object = {'metrics_period_ms': null, 'total_tasks': 0, 'total_exec_time_ns': 0}; object.metrics_period_ms = a0.periodMs; object.queue_name = a0.queueName; object.total_tasks = a0.taskMetrics.reduce(function(a0, a1) { return a0 + a1.count; }, value); object.total_exec_time_ns = a0.taskMetrics.reduce(function(a0, a1) { return a0 + a1.totalExecTimeNs; }, value); taskMetrics = a0.taskMetrics; const items3 = []; arraySpread(items3, taskMetrics, value, undefined); const value2 = items3.sort(function(a0, {longestExecTimeNs}) { return longestExecTimeNs - a0.longestExecTimeNs; }); taskMetrics = a0.taskMetrics; const items2 = []; arraySpread(items2, taskMetrics, value, undefined); const value3 = items2.sort(function(a0, {longestQueueTimeNs}) { return longestQueueTimeNs - a0.longestQueueTimeNs; }); let r10 = value; while (true) { length = value2.length; if (r10 < length) { property = value2[r10]; value4 = 'slow_task_' + r10 + '_name'; name = property.name; object[value4] = name; value5 = 'slow_task_' + r10 + '_longest_exec_time_ns'; longestExecTimeNs = property.longestExecTimeNs; object[value5] = longestExecTimeNs; } value6 = typeof r10 === 'bigint' ? r10 + 1n : +r10 + 1; if (value6 < 3) { r10 = value6; continue; } r3 = value; break; } while (true) { length = value3.length; if (r3 < length) { property = value3[r3]; value = 'delayed_task_' + r3 + '_name'; name = property.name; object[value] = name; value = 'delayed_task_' + r3 + '_longest_queue_time_ns'; longestQueueTimeNs = property.longestQueueTimeNs; object[value] = longestQueueTimeNs; } value = typeof r3 === 'bigint' ? r3 + 1n : +r3 + 1; if (value < 3) { r3 = value; continue; } break; } const JSON = global.JSON; object.full_task_report = JSON.stringify(value2); return object; } function _fun35597(a0) { // fn#35597, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:35321, offset: 0x010792bd, size: 2966 bytes, params: 2, frame: 16 const MediaEngineStore2 = MediaEngineStore; Inherits(MediaEngineStore2, a0); return CreateClass(MediaEngineStore2, [{key: 'initialize', value: value_35599}, {key: 'supports', value: value_35618}, {key: 'supportsInApp', value: value_35619}, {key: 'isSupported', value: value_35620}, {key: 'isNoiseSuppressionSupported', value: value_35621}, {key: 'isNoiseCancellationSupported', value: function() { return isKrispAvailable(); }}, {key: 'isNoiseCancellationError', value: value_35623}, {key: 'isAutomaticGainControlSupported', value: value_35624}, {key: 'shouldOfferManualSubsystemSelection', value: value_35625}, {key: 'showBypassSystemInputProcessing', value: value_35626}, {key: 'isAdvancedVoiceActivitySupported', value: function() { return isKrispAvailable(); }}, {key: 'isAecDumpSupported', value: value_35628}, {key: 'isSimulcastSupported', value: value_35629}, {key: 'getAecDump', value: function() { return _getSettings0().aecDumpEnabled; }}, {key: 'getMediaEngine', value: value_35631}, {key: 'getVideoComponent', value: value_35632}, {key: 'getCameraComponent', value: value_35633}, {key: 'getKrispSuppressionLevel', value: value_35634}, {key: 'getKrispEnableStats', value: value_35635}, {key: 'isEnabled', value: value_35636}, {key: 'isMute', value: value_35637}, {key: 'isDeaf', value: value_35638}, {key: 'isServerMute', value: value_35639}, {key: 'isServerDeaf', value: value_35640}, {key: 'getAudioMixerSettings', value: function() { return _getSettings0().audioMixerSettings; }}, {key: 'hasContext', value: value_35642}, {key: 'isSelfMutedTemporarily', value: value_35643}, {key: 'isSelfMute', value: value_35644}, {key: 'shouldSkipMuteUnmuteSound', value: value_35645}, {key: 'notifyMuteUnmuteSoundWasSkipped', value: function() { env1_101 = false; }}, {key: 'isHardwareMute', value: value_35647}, {key: 'isHardwareMuteNoticeEnabled', value: value_35648}, {key: 'isSelfDeaf', value: value_35649}, {key: 'isVideoEnabled', value: value_35650}, {key: 'isVideoAvailable', value: value_35651}, {key: 'hasVideoDevice', value: value_35653}, {key: 'isScreenSharing', value: value_35654}, {key: 'isSoundSharing', value: value_35655}, {key: 'isLocalMute', value: value_35656}, {key: 'supportsDisableLocalVideo', value: value_35657}, {key: 'isLocalVideoDisabled', value: value_35658}, {key: 'getVideoToggleState', value: value_35659}, {key: 'isLocalVideoAutoDisabled', value: value_35660}, {key: 'isAnyLocalVideoAutoDisabled', value: value_35661}, {key: 'isMediaFilterSettingLoading', value: value_35662}, {key: 'isNativeAudioPermissionReady', value: value_35663}, {key: 'getGoLiveSource', value: value_35664}, {key: 'getGoLiveContext', value: function() { return STREAM; }}, {key: 'getLastAudioInputDeviceChangeTimestamp', value: value_35666}, {key: 'isH264MfDecodeAvailable', value: value_35667}, {key: 'getLocalPan', value: value_35668}, {key: 'getLocalVolume', value: value_35669}, {key: 'getInputVolume', value: function() { return _getSettings0().inputVolume; }}, {key: 'getOutputVolume', value: function() { return importDefault(dependencyMap[66]).getConfig({location: 'MediaEngineStore.getOutputVolume'}).audioOutputPresent ? _getSettings0().outputVolume : DEFAULT_VOLUME; }}, {key: 'getMode', value: value_35672}, {key: 'getModeOptions', value: value_35673}, {key: 'getShortcuts', value: value_35674}, {key: 'getInputDeviceId', value: value_35676}, {key: 'getOutputDeviceId', value: value_35677}, {key: 'getVideoDeviceId', value: value_35678}, {key: 'getInputDevices', value: value_35679}, {key: 'getOutputDevices', value: value_35680}, {key: 'getVideoDevices', value: value_35681}, {key: 'getEchoCancellation', value: value_35682}, {key: 'getSidechainCompression', value: value_35683}, {key: 'getSidechainCompressionStrength', value: function() { return _getSettings0().sidechainCompressionStrength; }}, {key: 'getH265Enabled', value: function() { return _getSettings0().h265Enabled; }}, {key: 'hasH265HardwareDecode', value: value_35686}, {key: 'getOpenH264Enabled', value: function() { return require(dependencyMap[29]).isLinux() && _getSettings0().openH264Enabled; }}, {key: 'getLoopback', value: value_35688}, {key: 'getLoopbackReasons', value: value_35689}, {key: 'getNoiseSuppression', value: value_35690}, {key: 'getAutomaticGainControl', value: value_35691}, {key: 'getBypassSystemInputProcessing', value: function() { return _getSettings0().bypassSystemInputProcessing; }}, {key: 'getNoiseCancellation', value: function() { return _getSettings0().noiseCancellation; }}, {key: 'getHardwareEncoding', value: function() { return true; }}, {key: 'getEnableSilenceWarning', value: function() { return _getSettings0().silenceWarning; }}, {key: 'getDebugLogging', value: value_35696}, {key: 'getQoS', value: function() { return _getSettings0().qos; }}, {key: 'getAttenuation', value: function() { return _getSettings0().attenuation; }}, {key: 'getAttenuateWhileSpeakingSelf', value: function() { return _getSettings0().attenuateWhileSpeakingSelf; }}, {key: 'getAttenuateWhileSpeakingOthers', value: function() { return _getSettings0().attenuateWhileSpeakingOthers; }}, {key: 'getAudioSubsystem', value: value_35701}, {key: 'getMLSSigningKey', value: value_35702}, {key: 'getActiveInputProfile', value: function() { return _getSettings0().activeInputProfile; }}, {key: 'isInputProfileCustom', value: function() { var value = this.getActiveInputProfile(); return value == null || value === InputProfile.CUSTOM; }}, {key: 'getSettings', value: value_35705}, {key: 'getState', value: value_35706}, {key: 'getInputDetectedThisConnection', value: value_35707}, {key: 'getInputDetected', value: value_35708}, {key: 'getLastInputDetectedUpdateTime', value: value_35709}, {key: 'getNoInputDetectedNotice', value: value_35710}, {key: 'getInputDeviceOSMuted', value: value_35711}, {key: 'getInputDeviceOSVolume', value: value_35712}, {key: 'getPacketDelay', value: function() { return require(dependencyMap[29]).isPlatformEmbedded || this.getMode() !== InputModes.VOICE_ACTIVITY ? 0 : this.getModeOptions().vadLeading; }}, {key: 'setCanHavePriority', value: value_35714}, {key: 'isInteractionRequired', value: value_35716}, {key: 'getVideoHook', value: function() { return _getSettings0().videoHook; }}, {key: 'supportsVideoHook', value: value_35718}, {key: 'getExperimentalSoundshare', value: value_35719}, {key: 'supportsExperimentalSoundshare', value: value_35720}, {key: 'supportsHookSoundshare', value: value_35721}, {key: 'getUseSystemScreensharePicker', value: function() { var value = this.supportsSystemScreensharePicker(); var useSystemScreensharePicker = _getSettings0().useSystemScreensharePicker; return value && (useSystemScreensharePicker ?? require(dependencyMap[29]).isLinux()); }}, {key: 'supportsSystemScreensharePicker', value: value_35723}, {key: 'getUseVaapiEncoder', value: value_35724}, {key: 'getVideoEncoderExperiments', value: value_35725}, {key: 'getUseGamescopeCapture', value: value_35726}, {key: 'getSpeakingWhileMuted', value: value_35727}, {key: 'getKrispModelOverride', value: value_35728}, {key: 'getKrispModels', value: value_35729}, {key: 'getKrispVadActivationThreshold', value: value_35730}, {key: 'hasActiveCallKitCall', value: value_35731}, {key: 'setHasActiveCallKitCall', value: function(a0) { env1_139 = a0; }}, {key: 'supportsScreenSoundshare', value: value_35733}, {key: 'getSystemMicrophoneMode', value: value_35734}, {key: 'getVideoStreamParameters', value: value_35736}, {key: 'fetchAsyncResources', value: value_35737}, {key: 'startDavePreload', value: value_35738}, {key: 'getSupportedSecureFramesProtocolVersion', value: value_35740}, {key: 'hasClipsSource', value: value_35741}, {key: 'getGpuBrand', value: value_35742}]); function MediaEngineStore() { // fn#35598, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:35333, offset: 0x01079e53, size: 113 bytes, params: 1, frame: 20 const value = environment.__proto__; env1_4(this, MediaEngineStore); const value3 = env1_7(MediaEngineStore); return env1_6(this, _isNativeReflectConstruct_35471() ? global.Reflect.construct(value3, arguments, env1_7(this).constructor) : value3.apply(this, arguments)); } function value_35599() { // fn#35599, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:35631, offset: 0x01079ec4, size: 444 bytes, params: 1, frame: 32 setupMediaEngine(); loadSettings(); maybeSetupKrispModule(); maybeDownloadOpenH264(); resetProbingState(); maybeStartPollQueueMetrics(); if ((require(477) /* metro dependency 477: PlatformUtils */).isWindows() && (require(477) /* metro dependency 477: PlatformUtils */).isPlatformEmbedded) { checkH264MfDecodeAvailability(); } if ((require(477) /* metro dependency 477: PlatformUtils */).isAndroid() && (require(4092) /* metro dependency 4092: DeviceUtils */).getSystemVersion != null && global.parseInt((require(4092) /* metro dependency 4092: DeviceUtils */).getSystemVersion(), 10) >= 30) { checkAndroidAV1HwDecodeAvailability(); } const object = {}; const VIDEO = Features.VIDEO; let binding = env1_77; let supports = binding.supports; const VIDEO2 = Features.VIDEO; object[VIDEO] = Reflect.apply(supports, binding, [VIDEO2]); const DESKTOP_CAPTURE = Features.DESKTOP_CAPTURE; binding = env1_77; supports = binding.supports; const DESKTOP_CAPTURE2 = Features.DESKTOP_CAPTURE; object[DESKTOP_CAPTURE] = Reflect.apply(supports, binding, [DESKTOP_CAPTURE2]); const HYBRID_VIDEO = Features.HYBRID_VIDEO; binding = env1_77; supports = binding.supports; const HYBRID_VIDEO2 = Features.HYBRID_VIDEO; object[HYBRID_VIDEO] = Reflect.apply(supports, binding, [HYBRID_VIDEO2]); this.waitFor(AuthenticationStore, BitRateStore, CertifiedDeviceStore, ChannelStore, ClipsStore, ExperimentStore, RTCConnectionStore, RunningGameStoreNative, UserSettingsProtoStore, UserStore, VideoQualityModeStore); function loadSettings() { // fn#35600, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:35672, owner: value_35599.loadSettings, offset: 0x0107a080, size: 232 bytes, params: 1, frame: 22 const Storage = (StorageModule).Storage; const value2 = Storage.get('audio'); if (value2 != null) { Storage.set(env2_63, {[MediaEngineContextTypes.DEFAULT]: value2}); Storage.remove('audio'); } env2_82 = Storage.get(env2_63) ?? ({}); const defaultImport = Module00022; defaultImport.each(env2_82, _fun35601); applySettings(); function _fun35601(a0) { // fn#35601, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:35892, offset: 0x0107a168, size: 487 bytes, params: 2, frame: 17 var r7; var moduleValue; var object; let value = environment.__proto__.__proto__.__proto__; const value2 = undefined; const defaultImport = Module00022; defaultImport.defaultsDeep(a0, getDefaultSettings()); let modeOptions = a0.modeOptions; if (modeOptions != null && typeof a0.modeOptions.shortcut === 'string') { modeOptions = a0.modeOptions; moduleValue = require(12478) /* metro dependency 12478: KeyboardUtils */; modeOptions.shortcut = moduleValue.toCombo(a0.modeOptions.shortcut); r7 = moduleValue; } if (a0.modeOptions != null && a0.vadUseKrispSettingVersion !== 4) { a0.vadUseKrispSettingVersion = 4; a0.modeOptions.vadUseKrisp = true; } if (!a0.qosMigrated) { a0.qosMigrated = true; a0.qos = false; } if (!a0.vadThrehsoldMigrated) { a0.vadThrehsoldMigrated = true; modeOptions = a0.modeOptions; if ((modeOptions == null ? value2 : modeOptions.threshold) === -40) { a0.modeOptions.threshold = -60; } } const binding = env3_77; const supports = binding.supports; const SIDECHAIN_COMPRESSION = Features.SIDECHAIN_COMPRESSION; if (Reflect.apply(supports, binding, [SIDECHAIN_COMPRESSION]) && a0.sidechainCompressionSettingVersion < 1) { a0.sidechainCompressionSettingVersion = 1; a0.sidechainCompression = true; } if (a0.audioMixerSettingsVersion < 1) { a0.audioMixerSettingsVersion = 1; object = {}; copyDataProperties(object, DEFAULT_AUDIO_MIXER_SETTINGS, r7); a0.audioMixerSettings = object; } value = require(477) /* metro dependency 477: PlatformUtils */; if (value.isWeb()) { if (a0.ncUseKrispjsSettingVersion !== 1) { a0.ncUseKrispjsSettingVersion = 1; a0.noiseSuppression = false; a0.noiseCancellation = true; } } else if (a0.ncUseKrispSettingVersion !== 1) { a0.ncUseKrispSettingVersion = 1; a0.noiseSuppression = false; a0.noiseCancellation = true; } return value2; } } function maybeStartPollQueueMetrics() { // fn#35602, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:36939, owner: value_35599.maybeStartPollQueueMetrics, offset: 0x0107a34f, size: 112 bytes, params: 1, frame: 15 if (PlatformUtilsModule.isDesktop()) { if (PlatformUtilsModule.isPlatformEmbedded) { if (!env2_142) { global.setTimeout(_fun35603(), QUEUE_METRICS_INTERVAL_MS); } } } function _fun35603() { // fn#35603, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37052, offset: 0x0107a3bf, size: 32 bytes, params: 1, frame: 12 const env0_0 = env3_10(_fun35605); return pollMetrics; function* _fun35605() { // fn#35605, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37072, offset: 0x0107a3e8, size: 158 bytes, params: 1, frame: 18 var environment; var value5; if (true) { var Promise = global.Promise; var promise = new Promise(_fun35606); yield promise; promise = undefined; if (false) { return promise; } promise.periodMs = env5_57; promise = env5_198(promise); if (promise !== null) { value5 = env5_1(env5_3[47]); value5.track(env5_23.VOICE_QUEUE_METRICS, promise); } var setTimeout = global.setTimeout; promise = environment.__proto__.__proto__; setTimeout(env2_0, env5_57); } function _fun35606(a0) { // fn#35606, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37109, offset: 0x0107a486, size: 52 bytes, params: 2, frame: 12 var environment; const env0_0 = a0; const value = environment.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__; env6_1(env6_3[67]).pollQueueMetrics(_fun35607); function _fun35607(a0) { // fn#35607, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37143, offset: 0x00cee816, size: 19 bytes, params: 2, frame: 11 env0_0(a0); } } } function pollMetrics() { // fn#35608, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37293, offset: 0x00c3945f, size: 30 bytes, params: 1, frame: 13 return env0_0.apply(this, arguments); } } } function checkH264MfDecodeAvailability() { // fn#35609, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37427, owner: value_35599.checkH264MfDecodeAvailability, offset: 0x0107a4ba, size: 80 bytes, params: 1, frame: 12 var environment; let value = environment.__proto__.__proto__; if (env2_88 === null) { value = env2_77.getCodecSurvey(); value = value.then(_fun35610); value = value.catch(_fun35612); value.finally(_fun35613); } function _fun35610(a0) { // fn#35610, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37505, offset: 0x0107a50a, size: 149 bytes, params: 2, frame: 15 var environment; var JSON; var parse; var value; var value2; var available_video_decoders; var value3; var some; var closure; var value4; var Error; var prototype; var error; var binding; var error2; reducibleJoin3: while (true) { reduciblePort25: while (true) { exceptionLanding24: while (true) { try { JSON = global.JSON; } catch (error) { break exceptionLanding24; } break reducibleJoin3; } value = environment.__proto__.__proto__.__proto__; binding = env3_62; error2 = binding.error; Reflect.apply(error2, binding, ['Failed to parse codec survey', error]); env3_88 = false; break reduciblePort25; } return undefined; } try { parse = JSON.parse; } catch (error) { break exceptionLanding24; } try { value = Reflect.apply(parse, JSON, [a0]); } catch (error) { break exceptionLanding24; } try { value2 = value == null; } catch (error) { break exceptionLanding24; } if (!value2) { try { available_video_decoders = value.available_video_decoders; } catch (error) { break exceptionLanding24; } try { value3 = available_video_decoders == null; } catch (error) { break exceptionLanding24; } reducibleJoin17: while (true) { if (!value3) { try { available_video_decoders = value.available_video_decoders; } catch (error) { break exceptionLanding24; } try { some = available_video_decoders.some; } catch (error) { break exceptionLanding24; } try { } catch (error) { break exceptionLanding24; } try { closure = function(a0) { return a0 === 'MediaFoundation H.264'; }; } catch (error) { break exceptionLanding24; } try { value = Reflect.apply(some, available_video_decoders, [closure]); } catch (error) { break exceptionLanding24; } value4 = environment.__proto__.__proto__.__proto__; try { env3_88 = value; } catch (error) { break exceptionLanding24; } return undefined; } break reducibleJoin17; } } try { Error = global.Error; } catch (error) { break exceptionLanding24; } try { prototype = Error.prototype; } catch (error) { break exceptionLanding24; } try { } catch (error) { break exceptionLanding24; } try { error = new Error('decoder survey is not available'); } catch (error) { break exceptionLanding24; } try { value = error instanceof Object ? error : value; } catch (error) { break exceptionLanding24; } try { throw value; } catch (error) { break exceptionLanding24; } } function _fun35612(a0) { // fn#35612, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37775, offset: 0x0107a5ae, size: 37 bytes, params: 2, frame: 14 env3_62.error('Failed to get codec survey', a0); } function _fun35613() { // fn#35613, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:37838, offset: 0x0107a5d3, size: 49 bytes, params: 1, frame: 13 const value = environment.__proto__.__proto__.__proto__; (Dispatcher).dispatch({type: 'MEDIA_ENGINE_MF_AVAILABILITY_CHECKED'}); } } function checkAndroidAV1HwDecodeAvailability() { // fn#35614, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38024, owner: value_35599.checkAndroidAV1HwDecodeAvailability, offset: 0x0107a604, size: 64 bytes, params: 1, frame: 12 var environment; let value = environment.__proto__.__proto__; if (env2_89 === null) { value = env2_77.getCodecSurvey(); value = value.then(_fun35615); value.catch(_fun35617); } function _fun35615(a0) { // fn#35615, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38108, offset: 0x0107a644, size: 175 bytes, params: 2, frame: 15 var environment; var JSON; var parse; var value; var value2; var available_video_decoders; var value3; var some; var closure; var value4; var binding; var info; var binding2; var Error; var prototype; var error; var error2; reducibleJoin3: while (true) { reduciblePort30: while (true) { exceptionLanding29: while (true) { try { JSON = global.JSON; } catch (error) { break exceptionLanding29; } break reducibleJoin3; } value = environment.__proto__.__proto__.__proto__; binding = env3_62; error2 = binding.error; Reflect.apply(error2, binding, ['Failed to parse codec survey', error]); env3_89 = false; break reduciblePort30; } return undefined; } try { parse = JSON.parse; } catch (error) { break exceptionLanding29; } try { value = Reflect.apply(parse, JSON, [a0]); } catch (error) { break exceptionLanding29; } try { value2 = value == null; } catch (error) { break exceptionLanding29; } if (!value2) { try { available_video_decoders = value.available_video_decoders; } catch (error) { break exceptionLanding29; } try { value3 = available_video_decoders == null; } catch (error) { break exceptionLanding29; } reducibleJoin22: while (true) { if (!value3) { try { available_video_decoders = value.available_video_decoders; } catch (error) { break exceptionLanding29; } try { some = available_video_decoders.some; } catch (error) { break exceptionLanding29; } try { } catch (error) { break exceptionLanding29; } try { closure = function(a0) { return a0.startsWith('video/av01') && a0.endsWith('(HW)'); }; } catch (error) { break exceptionLanding29; } try { value = Reflect.apply(some, available_video_decoders, [closure]); } catch (error) { break exceptionLanding29; } value4 = environment.__proto__.__proto__.__proto__; try { env3_89 = value; } catch (error) { break exceptionLanding29; } try { binding = env3_62; } catch (error) { break exceptionLanding29; } try { info = binding.info; } catch (error) { break exceptionLanding29; } try { binding2 = env3_89; } catch (error) { break exceptionLanding29; } try { Reflect.apply(info, binding, ['AV1 decode detection complete. presence = ', binding2]); } catch (error) { break exceptionLanding29; } return undefined; } break reducibleJoin22; } } try { Error = global.Error; } catch (error) { break exceptionLanding29; } try { prototype = Error.prototype; } catch (error) { break exceptionLanding29; } try { } catch (error) { break exceptionLanding29; } try { error = new Error('decoder survey is not available'); } catch (error) { break exceptionLanding29; } try { value = error instanceof Object ? error : value; } catch (error) { break exceptionLanding29; } try { throw value; } catch (error) { break exceptionLanding29; } } function _fun35617(a0) { // fn#35617, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38454, offset: 0x0107a71d, size: 37 bytes, params: 2, frame: 14 env3_62.error('Failed to get codec survey', a0); } } } function value_35618(a0) { // fn#35618, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38709, offset: 0x0107a742, size: 23 bytes, params: 2, frame: 11 return env1_77.supports(a0); } function value_35619(a0) { // fn#35619, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38781, offset: 0x0107a759, size: 34 bytes, params: 2, frame: 12 const value = environment.__proto__; return env1_132[a0] || env1_77.supports(a0); } function value_35620() { // fn#35620, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38863, offset: 0x0107a77b, size: 19 bytes, params: 1, frame: 9 return env1_77.supported(); } function value_35621() { // fn#35621, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:38951, offset: 0x0107a78e, size: 30 bytes, params: 1, frame: 11 const binding = env1_77; const supports = binding.supports; const NOISE_SUPPRESSION = Features.NOISE_SUPPRESSION; return Reflect.apply(supports, binding, [NOISE_SUPPRESSION]); } function value_35623() { // fn#35623, offset: 0x0107a7bb, size: 9 bytes, params: 1, frame: 1 return env1_121; } function value_35624() { // fn#35624, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:39274, offset: 0x0107a7c4, size: 30 bytes, params: 1, frame: 11 const binding = env1_77; const supports = binding.supports; const AUTOMATIC_GAIN_CONTROL = Features.AUTOMATIC_GAIN_CONTROL; return Reflect.apply(supports, binding, [AUTOMATIC_GAIN_CONTROL]); } function value_35625() { // fn#35625, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:39414, offset: 0x0107a7e2, size: 77 bytes, params: 1, frame: 13 const value = environment.__proto__; return !isReadyToMigrateToSingleAdmOffering() && (env1_77.supports(Features.LEGACY_AUDIO_SUBSYSTEM) || env1_77.supports(Features.EXPERIMENTAL_AUDIO_SUBSYSTEM)); } function value_35626() { // fn#35626, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:39641, offset: 0x0107a82f, size: 55 bytes, params: 1, frame: 12 var r0; let value = environment.__proto__; const binding = env1_77; const supports = binding.supports; const AUDIO_BYPASS_SYSTEM_INPUT_PROCESSING = Features.AUDIO_BYPASS_SYSTEM_INPUT_PROCESSING; const value2 = Reflect.apply(supports, binding, [AUDIO_BYPASS_SYSTEM_INPUT_PROCESSING]); if (value2) { value = env1_77.getAudioSubsystem(); value = value === 'experimental'; r0 = value; } else { r0 = value2; } return r0; } function value_35628() { // fn#35628, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:39937, offset: 0x0107a866, size: 30 bytes, params: 1, frame: 11 const binding = env1_77; const supports = binding.supports; const AEC_DUMP = Features.AEC_DUMP; return Reflect.apply(supports, binding, [AEC_DUMP]); } function value_35629() { // fn#35629, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:40035, offset: 0x0107a884, size: 58 bytes, params: 1, frame: 12 const value = environment.__proto__; const binding = env1_77; const supports = binding.supports; const VIDEO = Features.VIDEO; return Reflect.apply(supports, binding, [VIDEO]) && env1_77.supports(Features.SIMULCAST); } function value_35631() { // fn#35631, offset: 0x0107a8d3, size: 9 bytes, params: 1, frame: 1 return env1_77; } function value_35632() { // fn#35632, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:40308, offset: 0x0107a8dc, size: 15 bytes, params: 1, frame: 1 return env1_77.Video; } function value_35633() { // fn#35633, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:40387, offset: 0x0107a8eb, size: 15 bytes, params: 1, frame: 1 return env1_77.Camera; } function value_35634() { // fn#35634, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:40474, offset: 0x0107a8fa, size: 25 bytes, params: 1, frame: 3 return env1_116 ?? 100; } function value_35635() { // fn#35635, offset: 0x0107a913, size: 9 bytes, params: 1, frame: 1 return env1_119; } function value_35636() { // fn#35636, offset: 0x0107a91c, size: 9 bytes, params: 1, frame: 1 return env1_84; } function value_35637() { // fn#35637, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:40687, offset: 0x0107a925, size: 25 bytes, params: 1, frame: 9 return this.isSelfMute() || env1_94; } function value_35638() { // fn#35638, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:40756, offset: 0x0107a93e, size: 25 bytes, params: 1, frame: 9 return this.isSelfDeaf() || env1_97; } function value_35639() { // fn#35639, offset: 0x0107a957, size: 9 bytes, params: 1, frame: 1 return env1_94; } function value_35640() { // fn#35640, offset: 0x0107a960, size: 9 bytes, params: 1, frame: 1 return env1_97; } function value_35642(a0) { // fn#35642, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:41065, offset: 0x0107a97e, size: 22 bytes, params: 2, frame: 2 return env1_82[a0] != null; } function value_35643() { // fn#35643, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:41145, offset: 0x0107a994, size: 48 bytes, params: 1, frame: 3 let value = a0; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; const DEFAULT = MediaEngineContextTypes.DEFAULT; return r2 === DEFAULT && env1_95; } function value_35644() { // fn#35644, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:41243, offset: 0x0107a9c4, size: 155 bytes, params: 1, frame: 16 var r3; var r0; var defaultImport; let value = a0; if (value !== undefined) { r3 = value; } else { value = environment.__proto__; r3 = MediaEngineContextTypes.DEFAULT; } if (value) { value = environment.__proto__; r0 = _getSettings0(r3).mute; } else { r0 = !this.isEnabled(); } if (!r0) { value = environment.__proto__; defaultImport = importDefault(4662) /* metro dependency 4662: NativePermissionUtils */; value = !defaultImport.didHavePermission(NativePermissionTypes.AUDIO); r0 = value; } r0 = !r0 ? this.isSelfDeaf(r3) : r0; r0 = !r0 ? r3 === MediaEngineContextTypes.DEFAULT && env1_96 : r0; return r0; } function value_35645() { // fn#35645, offset: 0x0107aa5f, size: 9 bytes, params: 1, frame: 1 return env1_101; } function value_35647() { // fn#35647, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:41619, offset: 0x0107aa75, size: 157 bytes, params: 1, frame: 15 let value = a0; const r4 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; return !this.isMute() && !this.isSelfMutedTemporarily(r4) && (CertifiedDeviceStore.isHardwareMute(this.getInputDeviceId()) || env1_137 && this.getSystemMicrophoneMode() !== 'voice_isolation' && _getSettings0(r4).mode === InputModes.VOICE_ACTIVITY); } function value_35648() { // fn#35648, offset: 0x0107ab12, size: 9 bytes, params: 1, frame: 1 return env1_136; } function value_35649() { // fn#35649, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:41980, offset: 0x0107ab1b, size: 61 bytes, params: 1, frame: 12 return a0 ? _getSettings0(environment.__proto__ !== undefined ? environment.__proto__ : MediaEngineContextTypes.DEFAULT).deaf : !this.isSupported(); } function value_35650() { // fn#35650, offset: 0x0107ab58, size: 16 bytes, params: 1, frame: 3 return env1_98 && env1_105; } function value_35651() { // fn#35651, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42165, offset: 0x0107ab68, size: 45 bytes, params: 1, frame: 11 var environment; const Object = global.Object; const values = Object.values; const value = environment.__proto__; return Reflect.apply(values, Object, [env1_92]).some(function(a0) { return !a0.disabled; }); } function value_35653() { // fn#35653, offset: 0x0107aba2, size: 9 bytes, params: 1, frame: 1 return env1_105; } function value_35654() { // fn#35654, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42342, offset: 0x0107abab, size: 48 bytes, params: 1, frame: 3 let value = a0; const r2 = value !== undefined ? value : MediaEngineContextTypes.STREAM; value = environment.__proto__; return STREAM === r2 && env1_79 != null; } function value_35655() { // fn#35655, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42434, offset: 0x0107abdb, size: 82 bytes, params: 1, frame: 5 let value = a0; const value2 = undefined; const r3 = value !== value2 ? value : MediaEngineContextTypes.STREAM; value = environment.__proto__; return STREAM === r3 && env1_79 != null && (env1_79.desktopSource == null ? value2 : env1_79.desktopSource.soundshareId) != null; } function value_35656(a0) { // fn#35656, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42586, offset: 0x0107ac2d, size: 78 bytes, params: 2, frame: 14 let value = a1; const r4 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; const authenticationStoreBinding = AuthenticationStore; const getId = authenticationStoreBinding.getId; return a0 !== Reflect.apply(getId, authenticationStoreBinding, []) && (_getSettings0(r4).localMutes[a0] || false); } function value_35657() { // fn#35657, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42723, offset: 0x0107ac7b, size: 30 bytes, params: 1, frame: 11 const binding = env1_77; const supports = binding.supports; const DISABLE_VIDEO = Features.DISABLE_VIDEO; return Reflect.apply(supports, binding, [DISABLE_VIDEO]); } function value_35658(a0) { // fn#35658, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42833, offset: 0x0107ac99, size: 61 bytes, params: 2, frame: 11 let value = a1; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; const property = _getSettings0(r2).disabledLocalVideos[a0]; return property != null && property; } function value_35659(a0) { // fn#35659, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:42980, offset: 0x0107acd6, size: 65 bytes, params: 2, frame: 12 let value = a1; const r3 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; return _getSettings0(r3).videoToggleStateMap[a0] ?? VideoToggleState.NONE; } function value_35660(a0) { // fn#35660, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:43137, offset: 0x0107ad17, size: 61 bytes, params: 2, frame: 12 let value = a1; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; const DEFAULT = MediaEngineContextTypes.DEFAULT; return r2 === DEFAULT && env1_128.has(a0); } function value_35661() { // fn#35661, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:43263, offset: 0x0107ad54, size: 59 bytes, params: 1, frame: 3 let value = a0; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; const DEFAULT = MediaEngineContextTypes.DEFAULT; return r2 === DEFAULT && env1_128.size > 0; } function value_35662() { // fn#35662, offset: 0x0107ad8f, size: 9 bytes, params: 1, frame: 1 return env1_122; } function value_35663() { // fn#35663, offset: 0x0107ad98, size: 9 bytes, params: 1, frame: 1 return env1_127; } function value_35664() { // fn#35664, offset: 0x0107ada1, size: 9 bytes, params: 1, frame: 1 return env1_79; } function value_35666() { // fn#35666, offset: 0x0107adaa, size: 9 bytes, params: 1, frame: 1 return env1_87; } function value_35667() { // fn#35667, offset: 0x0107adb3, size: 9 bytes, params: 1, frame: 1 return env1_88; } function value_35668(a0) { // fn#35668, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:43896, offset: 0x0107adbc, size: 59 bytes, params: 2, frame: 12 let value = a1; const r3 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; return _getSettings0(r3).localPans[a0] ?? env1_64; } function value_35669(a0) { // fn#35669, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44019, offset: 0x0107adf7, size: 82 bytes, params: 2, frame: 13 let value = a1; const r3 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; const STREAM = MediaEngineContextTypes.STREAM; let r0 = r3 === STREAM ? DEFAULT_STREAM_VOLUME : DEFAULT_VOLUME; r0 = _getSettings0(r3).localVolumes[a0] ?? r0; return r0; } function value_35672() { // fn#35672, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44435, offset: 0x0107aead, size: 41 bytes, params: 1, frame: 11 let value = a0; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; return _getSettings0(r2).mode; } function value_35673() { // fn#35673, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44525, offset: 0x0107aed6, size: 42 bytes, params: 1, frame: 11 let value = a0; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; return _getSettings0(r2).modeOptions; } function value_35674() { // fn#35674, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44627, offset: 0x0107af00, size: 56 bytes, params: 1, frame: 15 const defaultImport = Module00022; defaultImport.each(env1_82, _fun35675); return {}; function _fun35675({mode, modeOptions}, a1) { // fn#35675, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44688, offset: 0x0107af38, size: 75 bytes, params: 3, frame: 13 const shortcut = modeOptions.shortcut; const value = environment.__proto__.__proto__; const PUSH_TO_TALK = InputModes.PUSH_TO_TALK; if (mode === PUSH_TO_TALK && env2_83.has(a1)) { env0_0[a1] = shortcut; } } } function value_35676() { // fn#35676, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44805, offset: 0x0107af83, size: 35 bytes, params: 1, frame: 13 return getDeviceId(env1_90, _getSettings0().inputDeviceId); } function value_35677() { // fn#35677, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:44919, offset: 0x0107afa6, size: 35 bytes, params: 1, frame: 13 return getDeviceId(env1_91, _getSettings0().outputDeviceId); } function value_35678() { // fn#35678, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:45034, offset: 0x0107afc9, size: 35 bytes, params: 1, frame: 13 return getDeviceId(env1_92, _getSettings0().videoDeviceId); } function value_35679() { // fn#35679, offset: 0x0107afec, size: 9 bytes, params: 1, frame: 1 return env1_90; } function value_35680() { // fn#35680, offset: 0x0107aff5, size: 9 bytes, params: 1, frame: 1 return env1_91; } function value_35681() { // fn#35681, offset: 0x0107affe, size: 9 bytes, params: 1, frame: 1 return env1_92; } function value_35682() { // fn#35682, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:45356, offset: 0x0107b007, size: 45 bytes, params: 1, frame: 12 const value = environment.__proto__; const value2 = _getSettings0(); const certifiedDeviceStoreBinding = CertifiedDeviceStore; return certifiedDeviceStoreBinding.hasEchoCancellation(value2.inputDeviceId) || value2.echoCancellation; } function value_35683() { // fn#35683, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:45514, offset: 0x0107b034, size: 49 bytes, params: 1, frame: 12 const binding = env1_77; const supports = binding.supports; const SIDECHAIN_COMPRESSION = Features.SIDECHAIN_COMPRESSION; return Reflect.apply(supports, binding, [SIDECHAIN_COMPRESSION]) && _getSettings0().sidechainCompression; } function value_35686() { // fn#35686, offset: 0x0107b08f, size: 22 bytes, params: 1, frame: 3 return env1_125 !== null && env1_125; } function value_35688() { // fn#35688, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:46108, offset: 0x0107b0db, size: 20 bytes, params: 1, frame: 2 return env1_130.size > 0; } function value_35689() { // fn#35689, offset: 0x0107b0ef, size: 9 bytes, params: 1, frame: 1 return env1_130; } function value_35690() { // fn#35690, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:46257, offset: 0x0107b0f8, size: 45 bytes, params: 1, frame: 12 const value = environment.__proto__; const value2 = _getSettings0(); const certifiedDeviceStoreBinding = CertifiedDeviceStore; return certifiedDeviceStoreBinding.hasNoiseSuppression(value2.inputDeviceId) || value2.noiseSuppression; } function value_35691() { // fn#35691, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:46415, offset: 0x0107b125, size: 45 bytes, params: 1, frame: 12 const value = environment.__proto__; const value2 = _getSettings0(); const certifiedDeviceStoreBinding = CertifiedDeviceStore; return certifiedDeviceStoreBinding.hasAutomaticGainControl(value2.inputDeviceId) || value2.automaticGainControl; } function value_35696() { // fn#35696, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:47015, offset: 0x0107b191, size: 19 bytes, params: 1, frame: 9 return env1_77.getDebugLogging(); } function value_35701() { // fn#35701, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:47539, offset: 0x0107b1f8, size: 61 bytes, params: 1, frame: 10 const value = environment.__proto__; return supportsAutomaticAudioSubsystem() && _getSettings0().automaticAudioSubsystem ? AudioSubsystems.AUTOMATIC : env1_77.getAudioSubsystem(); } function value_35702(a0, a1) { // fn#35702, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:47717, offset: 0x0107b235, size: 27 bytes, params: 3, frame: 13 return env1_77.getMLSSigningKey(a0, a1); } function value_35705() { // fn#35705, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:48051, offset: 0x0107b28e, size: 36 bytes, params: 1, frame: 11 let value = a0; const r2 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; value = environment.__proto__; return _getSettings0(r2); } function value_35706() { // fn#35706, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:48134, offset: 0x0107b2b2, size: 101 bytes, params: 1, frame: 3 return {settingsByContext: env1_82, inputDevices: env1_90, outputDevices: env1_91, appSupported: env1_132, krispModuleLoaded: env1_113, krispFatalError: env1_114, krispVersion: env1_115, krispSuppressionLevel: env1_116, goLiveSource: env1_79, goLiveContext: STREAM}; } function value_35707() { // fn#35707, offset: 0x0107b317, size: 9 bytes, params: 1, frame: 1 return env1_106; } function value_35708() { // fn#35708, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:48476, offset: 0x0107b320, size: 15 bytes, params: 1, frame: 1 return env1_81.inputDetected; } function value_35709() { // fn#35709, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:48574, offset: 0x0107b32f, size: 15 bytes, params: 1, frame: 1 return env1_81.lastUpdateTime; } function value_35710() { // fn#35710, offset: 0x0107b33e, size: 9 bytes, params: 1, frame: 1 return env1_107; } function value_35711() { // fn#35711, offset: 0x0107b347, size: 9 bytes, params: 1, frame: 1 return env1_109; } function value_35712() { // fn#35712, offset: 0x0107b350, size: 9 bytes, params: 1, frame: 1 return env1_110; } function value_35714(a0, a1) { // fn#35714, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:49086, offset: 0x0107b3ac, size: 43 bytes, params: 3, frame: 11 const env0_0 = a0; const env0_1 = a1; env1_77.eachConnection(_fun35715); function _fun35715(a0) { // fn#35715, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:49138, offset: 0x0107b3d7, size: 28 bytes, params: 2, frame: 13 return a0.setCanHavePriority(env0_0, require); } } function value_35716() { // fn#35716, offset: 0x0107b3f3, size: 9 bytes, params: 1, frame: 1 return env1_85; } function value_35718() { // fn#35718, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:49367, offset: 0x0107b411, size: 30 bytes, params: 1, frame: 11 const binding = env1_77; const supports = binding.supports; const VIDEO_HOOK = Features.VIDEO_HOOK; return Reflect.apply(supports, binding, [VIDEO_HOOK]); } function value_35719() { // fn#35719, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:49471, offset: 0x0107b42f, size: 72 bytes, params: 1, frame: 12 var r1; var r0; let value = environment.__proto__; const experimentalSoundshare2 = _getSettings0().experimentalSoundshare2; value = this.supportsExperimentalSoundshare(); if (value) { r1 = experimentalSoundshare2 == null || experimentalSoundshare2; r1 = !r1 ? !this.supportsHookSoundshare() : r1; r0 = r1; } else { r0 = value; } return r0; } function value_35720() { // fn#35720, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:49691, offset: 0x0107b477, size: 123 bytes, params: 1, frame: 18 var r0; var value3; var defaultImport; const value = environment.__proto__; const binding = env1_77; const supports = binding.supports; const EXPERIMENTAL_SOUNDSHARE = Features.EXPERIMENTAL_SOUNDSHARE; const value2 = Reflect.apply(supports, binding, [EXPERIMENTAL_SOUNDSHARE]); if (value2) { value3 = undefined; defaultImport = importDefault(12427) /* metro dependency 12427 */; r0 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value3 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, WINDOWS_SOUNDSHARE_NONHOOK_VERSION); } else { r0 = value2; } return r0; } function value_35721() { // fn#35721, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:49892, offset: 0x0107b4f2, size: 156 bytes, params: 1, frame: 18 var defaultImport; const value = environment.__proto__; const value2 = undefined; let r0 = (require(477) /* metro dependency 477: PlatformUtils */).isWindows() && env1_77.supports(Features.SOUNDSHARE); if (r0) { defaultImport = importDefault(12427) /* metro dependency 12427 */; r0 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value2 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, WINDOWS_SOUNDSHARE_HOOK_VERSION); } return r0; } function value_35723() { // fn#35723, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:50328, offset: 0x0107b5df, size: 30 bytes, params: 1, frame: 11 const binding = env1_77; const supports = binding.supports; const NATIVE_SCREENSHARE_PICKER = Features.NATIVE_SCREENSHARE_PICKER; return Reflect.apply(supports, binding, [NATIVE_SCREENSHARE_PICKER]); } function value_35724() { // fn#35724, offset: 0x0107b5fd, size: 9 bytes, params: 1, frame: 1 return env1_141; } function value_35725(a0, a1) { // fn#35725, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:50536, offset: 0x0107b606, size: 328 bytes, params: 3, frame: 14 var VideoCaptureDeviceNoReuseExperiment; const Array = global.Array; const array = new Array('unk'); array.push('nvNewPresets'); let STREAM = MediaEngineContextTypes.STREAM; if (a0 === STREAM) { array.push('nvRelaxRc=250'); } else { array.push('nvRelaxRc=75'); } const getUseVaapiEncoder = this.getUseVaapiEncoder; if (Reflect.apply(getUseVaapiEncoder, this, [])) { array.push('vaapi'); } STREAM = MediaEngineContextTypes.STREAM; if (a0 === STREAM && a1 === 'streamer' && (require(477) /* metro dependency 477: PlatformUtils */).isWindows()) { array.push('useCaptureDeviceForEncode'); VideoCaptureDeviceNoReuseExperiment = (require(12487) /* metro dependency 12487: VideoCaptureDeviceNoReuse */).VideoCaptureDeviceNoReuseExperiment; if (VideoCaptureDeviceNoReuseExperiment.getConfig({location: 'handleReady'}).overrideDeviceReuse) { array.push('videoCaptureDeviceOverrideReuse'); } } array.push('linux-vulkan'); return array.join(','); } function value_35726() { // fn#35726, offset: 0x0107b74e, size: 9 bytes, params: 1, frame: 1 return env1_140; } function value_35727() { // fn#35727, offset: 0x0107b757, size: 9 bytes, params: 1, frame: 1 return env1_102; } function value_35728() { // fn#35728, offset: 0x0107b760, size: 9 bytes, params: 1, frame: 1 return env1_117; } function value_35729() { // fn#35729, offset: 0x0107b769, size: 9 bytes, params: 1, frame: 1 return env1_118; } function value_35730() { // fn#35730, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:51364, offset: 0x0107b772, size: 49 bytes, params: 1, frame: 10 const value = environment.__proto__; return _getSettings0().modeOptions.vadKrispActivationThreshold ?? 0.5; } function value_35731() { // fn#35731, offset: 0x0107b7a3, size: 9 bytes, params: 1, frame: 1 return env1_139; } function value_35733() { // fn#35733, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:51688, offset: 0x0107b7ba, size: 315 bytes, params: 1, frame: 19 var r0; var r1; var moduleValue2; var isLinux2; var binding; var value4; var defaultImport; const value = environment.__proto__; const value2 = undefined; const platformUtilsModule = require(477) /* metro dependency 477: PlatformUtils */; if (platformUtilsModule.isMac()) { binding = env1_77; value4 = binding.supports(Features.SOUNDSHARE); if (value4) { defaultImport = importDefault(12427) /* metro dependency 12427 */; r1 = defaultImport.satisfies((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null ? value2 : (importDefault(3767) /* metro dependency 3767: DiscordNative */).os.release, DARWIN_SCKIT_AUDIO_VERSION); } else { r1 = value4; } r1 = r1 && supportsScreenCaptureKit(); r0 = r1; } else { moduleValue2 = platformUtilsModule; if (moduleValue2.isWindows()) { binding = env1_77; r0 = binding.supports(Features.SCREEN_SOUNDSHARE) && this.getExperimentalSoundshare(); } else { isLinux2 = (require(477) /* metro dependency 477: PlatformUtils */).isLinux(); r0 = isLinux2 ? env1_77.supports(Features.SCREEN_SOUNDSHARE) : !!isLinux2; } } return r0; } function value_35734() { // fn#35734, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:52067, offset: 0x0107b8f5, size: 190 bytes, params: 1, frame: 14 var environment; var property; const value = environment.__proto__; const value2 = undefined; if (PlatformUtilsModule.isWindows()) { if (this.getBypassSystemInputProcessing()) { return value2; } property = env1_124[this.getInputDeviceId()]; return property == null || property.active == null ? value2 : property.active.find(_fun35735); } if (PlatformUtilsModule.isMac()) { return env1_131; } if (PlatformUtilsModule.isIOS()) { return env1_131; } return value2; function _fun35735(a0) { // fn#35735, offset: 0x0107b9b3, size: 16 bytes, params: 2, frame: 2 return a0 === env2_69; } } function value_35736() { // fn#35736, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:52367, offset: 0x0107b9c3, size: 269 bytes, params: 1, frame: 16 var DisableCameraSimulcastExperiment; let value = a0; const r4 = value !== undefined ? value : MediaEngineContextTypes.DEFAULT; const supports = this.supports; value = environment.__proto__; const VIDEO = Features.VIDEO; const r0 = Reflect.apply(supports, this, [VIDEO]) ? [{rid: '100', type: r4 === MediaEngineContextTypes.DEFAULT ? MediaTypes.VIDEO : MediaTypes.SCREEN, quality: SIMULCAST_HQ_QUALITY}] : []; let r1 = this.isSimulcastSupported() && r4 === MediaEngineContextTypes.DEFAULT; if (r1) { DisableCameraSimulcastExperiment = (require(12488) /* metro dependency 12488: DisableCameraSimulcastExperiment */).DisableCameraSimulcastExperiment; r1 = DisableCameraSimulcastExperiment.getConfig({location: 'MediaEngineStore.getVideoStreamParameters'}).enableSimulcast; } if (r1) { r0.push({rid: '50', type: MediaTypes.VIDEO, quality: SIMULCAST_LQ_QUALITY}); } return r0; } function value_35737() { // fn#35737, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:52772, offset: 0x0107bad0, size: 59 bytes, params: 1, frame: 13 const object = {}; object.fetchDave = (require(477) /* metro dependency 477: PlatformUtils */).isWeb(); return env1_77.fetchAsyncResources(object); } function value_35738() { // fn#35738, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:52905, offset: 0x0107bb0b, size: 95 bytes, params: 1, frame: 13 var environment; var moduleValue; const value = environment.__proto__; if (!env1_123) { moduleValue = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue.isWeb()) { env1_77.fetchAsyncResources({fetchDave: true}).catch(_fun35739); } } function _fun35739(a0) { // fn#35739, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:53015, offset: 0x0107bb6a, size: 62 bytes, params: 2, frame: 14 const value = environment.__proto__.__proto__; env2_62.warn('DAVE preload failed:', a0); (SentryUtilsNative).captureException(a0); } } function value_35740() { // fn#35740, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:53144, offset: 0x0107bba8, size: 19 bytes, params: 1, frame: 9 return env1_77.getSupportedSecureFramesProtocolVersion(); } function value_35741() { // fn#35741, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:53277, offset: 0x0107bbbb, size: 15 bytes, params: 1, frame: 2 return env1_80 != null; } function value_35742() { // fn#35742, offset: 0x0107bbca, size: 9 bytes, params: 1, frame: 1 return env1_133; } } function VOICE_CHANNEL_SELECT_35743({guildId, channelId, currentVoiceChannelId, video}) { // fn#35743, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:54338, offset: 0x0107bbd3, size: 157 bytes, params: 2, frame: 15 var value2; var binding; if (currentVoiceChannelId !== channelId) { updateVideo(video, null); } if (guildId == null) { if (channelId != null) { if (!env0_111) { value2 = _getSettings0(); if (value2.mute || value2.deaf) { mergeSettings({'deaf': false, 'mute': false}); binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } } } } } function VOICE_STATE_UPDATES_35744({voiceStates}) { // fn#35744, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:54643, offset: 0x0107bc70, size: 32 bytes, params: 2, frame: 13 return voiceStates.reduce(_fun35745, false); function _fun35745(a0, a1) { // fn#35745, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:54710, offset: 0x0107bc90, size: 247 bytes, params: 3, frame: 15 var r2; var r5; var r3; var updateVideoBinding; var deaf; var channelId; let binding = env1_78; if (binding === a1.sessionId) { r2 = a1.mute || a1.suppress; deaf = a1.deaf; binding = env1_77; binding.eachConnection(updateConnectionMuteDeaf); r5 = a1.guildId != null && a1.channelId != null; r5 = r5 && env1_120 != null; r5 = r5 && env1_120 !== a1.channelId; binding = env1_111; r2 = !binding && a1.channelId == null; updateVideoBinding = updateVideo; r3 = !r5 && !r2; r3 = r3 && env1_98; updateVideoBinding(r3); channelId = a1.channelId; return true; } const userId = a1.userId; const authenticationStoreBinding = AuthenticationStore; const getId = authenticationStoreBinding.getId; if (userId === Reflect.apply(getId, authenticationStoreBinding, []) && RTCConnectionStore.getChannelId() == null) { updateVideo(false, null); } return a0; } } function CONNECTION_OPEN_35746({sessionId}) { // fn#35746, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:55057, offset: 0x0107bd87, size: 268 bytes, params: 2, frame: 16 var r3; var moduleValue2; const value2 = _getSettings0(); if (supportsAutomaticAudioSubsystem()) { if (isReadyToMigrateToSingleAdmOffering()) { setAudioSubsystem(AudioSubsystems.AUTOMATIC); } else if (value2.automaticAudioSubsystem) { interpretAutomaticAudioSubsystem(); } } const binding = env0_77; const supports = binding.supports; const OFFLOAD_ADM_CONTROLS = Features.OFFLOAD_ADM_CONTROLS; if (Reflect.apply(supports, binding, [OFFLOAD_ADM_CONTROLS])) { env0_77.setOffloadAdmControls(true); } const isIOS2 = (PlatformUtilsModule).isIOS(); if (isIOS2) { moduleValue2 = require(12485) /* metro dependency 12485: IOSAudioInterruptExperiment */; r3 = moduleValue2.getIOSAudioInterruptExperimentConfig('handleConnectionOpen').enabled; } else { r3 = isIOS2; } if (r3) { env0_77.updateFieldTrial('WebRTC-Audio-iOS-Holding', 'Enabled'); } maybeProbeAudioEffects(value2.inputDeviceId); applyRemoteSettings(); } function POST_CONNECTION_OPEN() { // fn#35748, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:55678, offset: 0x0107bea0, size: 58 bytes, params: 1, frame: 12 if (PlatformUtilsModule.isWeb()) { env0_74.startDavePreload(); } return false; } function RTC_CONNECTION_STATE_35749({state}) { // fn#35749, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:55788, offset: 0x0107beda, size: 193 bytes, params: 2, frame: 11 var binding; const CONNECTING = RTCConnectionStates.CONNECTING; if (CONNECTING === state) { tryEnable(); } else if (RTCConnectionStates.RTC_CONNECTING === state) { binding = env0_138; binding.stop(); binding = env0_108; binding.stop(); binding = env0_81; binding.reset(); } else if (RTCConnectionStates.RTC_CONNECTED === state) { updateVideo(); } else if (RTCConnectionStates.DISCONNECTED === state) { env0_143 = {}; resetAutoDisabledVideoState(); resetProbingState(); } function resetAutoDisabledVideoState() { // fn#35750, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:56047, owner: RTC_CONNECTION_STATE_35749.resetAutoDisabledVideoState, offset: 0x0107bf9b, size: 114 bytes, params: 1, frame: 17 if (env1_128.size !== 0) { var DEFAULT = MediaEngineContextTypes.DEFAULT; var disabledLocalVideos = _getSettings0(DEFAULT).disabledLocalVideos; var binding = env1_128; binding.forEach(_fun35751); binding = env1_128; binding.clear(); mergeSettings({disabledLocalVideos: disabledLocalVideos}, DEFAULT, false); } function _fun35751(a0) { // fn#35751, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:56176, offset: 0x0107c00d, size: 92 bytes, params: 2, frame: 17 const env0_0 = a0; (Module00044)(disabledLocalVideos[a0], 'If you are auto-disabled, then you are also disabled.'); delete disabledLocalVideos[a0]; env2_77.eachConnection(_fun35752, DEFAULT); function _fun35752(a0) { // fn#35752, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:56285, offset: 0x0107c069, size: 26 bytes, params: 2, frame: 13 return a0.setLocalVideoDisabled(env0_0, false); } } } } function AUDIO_SET_TEMPORARY_SELF_MUTE({mute}) { // fn#35753, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:56435, offset: 0x0107c083, size: 39 bytes, params: 2, frame: 11 const binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } function AUDIO_TOGGLE_SELF_MUTE({context, playSoundEffect}) { // fn#35754, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:56554, offset: 0x0107c0aa, size: 172 bytes, params: 2, frame: 18 var r6; var binding; let {mute, deaf} = _getSettings0(context); const DEFAULT = MediaEngineContextTypes.DEFAULT; if (context !== DEFAULT) { r6 = !deaf && !mute; deaf = !!r6 && deaf; if (playSoundEffect) { } mergeSettings({mute: r6, deaf: deaf}, context); binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } else { var defaultImport = importDefault(4662) /* metro dependency 4662: NativePermissionUtils */; var requestPermission = defaultImport.requestPermission; var AUDIO = NativePermissionTypes.AUDIO; Reflect.apply(requestPermission, defaultImport, [AUDIO]); if (env0_96) { return false; } r6 = !deaf && !mute; deaf = !!r6 && deaf; if (playSoundEffect) { } mergeSettings({mute: r6, deaf: deaf}, context); binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } } function AUDIO_SET_SELF_MUTE({context, mute, playSoundEffect}) { // fn#35755, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:56856, offset: 0x0107c156, size: 72 bytes, params: 2, frame: 15 mergeSettings({mute: mute}, context); if (playSoundEffect) { } const binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } function AUDIO_TOGGLE_SELF_DEAF({context}) { // fn#35756, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:57026, offset: 0x0107c19e, size: 69 bytes, params: 2, frame: 15 const mergeSettingsBinding = mergeSettings; const object = {}; object.deaf = !_getSettings0(context).deaf; mergeSettingsBinding(object, context); const binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } function AUDIO_TOGGLE_LOCAL_MUTE({context, userId}) { // fn#35757, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:57187, offset: 0x0107c1e3, size: 124 bytes, params: 2, frame: 16 var localMutes; const authenticationStoreBinding = AuthenticationStore; const getId = authenticationStoreBinding.getId; if (userId !== Reflect.apply(getId, authenticationStoreBinding, [])) { localMutes = _getSettings0(context).localMutes; if (localMutes[userId]) { delete localMutes[userId]; } else { localMutes[userId] = true; } mergeSettings({localMutes: localMutes}, context); env0_77.eachConnection(_fun35758, context); } function _fun35758(a0) { // fn#35758, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:57368, offset: 0x0107c25f, size: 37 bytes, params: 2, frame: 14 const setLocalMute = a0.setLocalMute; const userIdBinding = userId; return Reflect.apply(setLocalMute, a0, [userIdBinding, localMutes[userIdBinding] || false]); } } function AUDIO_SET_LOCAL_VIDEO_DISABLED({context, userId, videoToggleState, persist, isAutomatic}) { // fn#35759, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:57435, offset: 0x0107c284, size: 1092 bytes, params: 2, frame: 38 var r13; var r105; var rTCConnection; var rTCConnection2; var rTCConnection3; var value15; var videoHealthManager; var rTCConnection4; var value19; var videoHealthManager2; (importDefault(44) /* metro dependency 44 */)(!(persist && isAutomatic), 'These are not allowed to both be true.'); const DISABLED = VideoToggleState.DISABLED; const value2 = videoToggleState === DISABLED; const disabledLocalVideos = _getSettings0(context).disabledLocalVideos; let property = disabledLocalVideos[userId]; const r8 = property != null && property; let binding = env0_128; const value4 = binding.has(userId); const AUTO_ENABLED = VideoToggleState.AUTO_ENABLED; const r10 = videoToggleState === AUTO_ENABLED || videoToggleState === VideoToggleState.MANUAL_ENABLED; env0_62.info('disableVideo=' + value2 + ' currentlyDisabled=' + r8 + ' currentlyAutoDisabled=' + value4 + ', isVideoShown=' + r10); (importDefault(44) /* metro dependency 44 */)(!(value4 && !r8), 'If you are auto-disabled, then you are also disabled.'); const value8 = value2 !== r8; const DEFAULT = MediaEngineContextTypes.DEFAULT; const value9 = context === DEFAULT; let r12 = isAutomatic && value8 && value9; const r104 = persist && value8 && value9; env0_62.info('changed=' + value8 + ' isDefaultContext=' + value9 + ' isUpdateCausedByVideoHealthManager=' + r12 + ' isManualToggleByUser=' + r104); const videoToggleStateMap = _getSettings0(context).videoToggleStateMap; property = videoToggleStateMap[userId]; let AUTO_PROBING = VideoToggleState.AUTO_PROBING; let r15 = property === AUTO_PROBING && videoToggleState === VideoToggleState.AUTO_ENABLED; if (r15) { (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.AUTO_DISABLE : VideoToggleReason.AUTO_ENABLE, r10); } videoToggleStateMap[userId] = videoToggleState; mergeSettings({videoToggleStateMap: videoToggleStateMap}, context, persist); AUTO_PROBING = VideoToggleState.AUTO_PROBING; if (videoToggleState === AUTO_PROBING) { rTCConnection2 = RTCConnectionStore.getRTCConnection(); if (rTCConnection2 != null) { rTCConnection2.pauseStatsCollectionForUser(userId, true); } } else { rTCConnection = RTCConnectionStore.getRTCConnection(); if (rTCConnection != null) { rTCConnection.pauseStatsCollectionForUser(userId, false); } } if (!env0_129) { binding = env0_62; binding.info('isAutoDisableAllowed=' + env0_129 + ' - disabling VideoHealthManager'); rTCConnection3 = RTCConnectionStore.getRTCConnection(); value15 = rTCConnection3 == null; if (value15) { r13 = value15; r15 = rTCConnection3; } else { videoHealthManager = rTCConnection3.getVideoHealthManager(); r13 = videoHealthManager == null; r15 = videoHealthManager; } if (!r13) { r15.disable(); } } if (r12) { if (value2) { if (value2) { if (env0_129) { (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.AUTO_DISABLE : VideoToggleReason.AUTO_ENABLE, r10); binding = env0_128; if (value2) { binding.add(userId); } else { binding.delete(userId); } if (value9 && !value2) { env0_128.delete(userId); } if (value2) { disabledLocalVideos[userId] = true; } else { delete disabledLocalVideos[userId]; } mergeSettings({disabledLocalVideos: disabledLocalVideos}, context, persist); binding = env0_77; binding.eachConnection(_fun35760, context); return undefined; } return undefined; } (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.AUTO_DISABLE : VideoToggleReason.AUTO_ENABLE, r10); binding = env0_128; if (value2) { binding.add(userId); } else { binding.delete(userId); } if (value9 && !value2) { env0_128.delete(userId); } if (value2) { disabledLocalVideos[userId] = true; } else { delete disabledLocalVideos[userId]; } mergeSettings({disabledLocalVideos: disabledLocalVideos}, context, persist); binding = env0_77; binding.eachConnection(_fun35760, context); return undefined; } if (value4) { if (value2) { if (env0_129) { (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.AUTO_DISABLE : VideoToggleReason.AUTO_ENABLE, r10); binding = env0_128; if (value2) { binding.add(userId); } else { binding.delete(userId); } if (value9 && !value2) { env0_128.delete(userId); } if (value2) { disabledLocalVideos[userId] = true; } else { delete disabledLocalVideos[userId]; } mergeSettings({disabledLocalVideos: disabledLocalVideos}, context, persist); binding = env0_77; binding.eachConnection(_fun35760, context); return undefined; } return undefined; } (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.AUTO_DISABLE : VideoToggleReason.AUTO_ENABLE, r10); binding = env0_128; if (value2) { binding.add(userId); } else { binding.delete(userId); } if (value9 && !value2) { env0_128.delete(userId); } if (value2) { disabledLocalVideos[userId] = true; } else { delete disabledLocalVideos[userId]; } mergeSettings({disabledLocalVideos: disabledLocalVideos}, context, persist); binding = env0_77; binding.eachConnection(_fun35760, context); return undefined; } } else { if (r104) { if (value4) { if (value2) { (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.MANUAL_DISABLE : VideoToggleReason.MANUAL_ENABLE, r10); } else { env0_62.info('disallowing auto-disable for this session because of manual override by user'); rTCConnection4 = RTCConnectionStore.getRTCConnection(); value19 = rTCConnection4 == null; if (value19) { r105 = value19; r12 = rTCConnection4; } else { videoHealthManager2 = rTCConnection4.getVideoHealthManager(); r105 = videoHealthManager2 == null; r12 = videoHealthManager2; } if (!r105) { r12.disable(); } (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, VideoToggleReason.MANUAL_REENABLE, r10); } } else { (importDefault(12411) /* metro dependency 12411: trackVideoToggle */)(userId, value2 ? VideoToggleReason.MANUAL_DISABLE : VideoToggleReason.MANUAL_ENABLE, r10); } } if (value9 && !value2) { env0_128.delete(userId); } if (value2) { disabledLocalVideos[userId] = true; } else { delete disabledLocalVideos[userId]; } mergeSettings({disabledLocalVideos: disabledLocalVideos}, context, persist); env0_77.eachConnection(_fun35760, context); } function _fun35760(a0) { // fn#35760, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:59095, offset: 0x0107c6c8, size: 44 bytes, params: 2, frame: 15 const setLocalVideoDisabled = a0.setLocalVideoDisabled; const userIdBinding = userId; const property = disabledLocalVideos[userIdBinding]; return Reflect.apply(setLocalVideoDisabled, a0, [userIdBinding, property != null && property]); } } function AUDIO_SET_LOCAL_VOLUME({context, userId, volume}) { // fn#35761, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:59186, offset: 0x0107c6f4, size: 147 bytes, params: 2, frame: 17 var r7; var localVolumes; const authenticationStoreBinding = AuthenticationStore; const getId = authenticationStoreBinding.getId; if (userId !== Reflect.apply(getId, authenticationStoreBinding, [])) { r7 = context === MediaEngineContextTypes.STREAM ? DEFAULT_STREAM_VOLUME : DEFAULT_VOLUME; localVolumes = _getSettings0(context).localVolumes; if (volume === r7) { delete localVolumes[userId]; } else { localVolumes[userId] = volume; } mergeSettings({localVolumes: localVolumes}, context); env0_77.eachConnection(function(a0) { return a0.setLocalVolume(userId, volume); }, context); } } function AUDIO_SET_AUDIO_MIXER_SETTINGS({context, settings}) { // fn#35763, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:59461, offset: 0x0107c7a3, size: 90 bytes, params: 2, frame: 16 mergeSettings({audioMixerSettings: settings}, context); let binding = env0_77; binding.setAudioMixerOptions(settings); binding = env0_77; const eachConnection = binding.eachConnection; const DEFAULT = MediaEngineContextTypes.DEFAULT; Reflect.apply(eachConnection, binding, [function(a0) { return a0.setSpatialAudioEnabled(settings.enabled); }, DEFAULT]); } function AUDIO_SET_LOCAL_PAN({context, userId, left, right}) { // fn#35765, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:59681, offset: 0x0107c819, size: 111 bytes, params: 2, frame: 18 const localPans = _getSettings0(context).localPans; localPans[userId] = {left: left, right: right}; mergeSettings({localPans: localPans}, context); env0_77.eachConnection(function(a0) { return a0.setLocalPan(userId, left, right); }, context); } function AUDIO_SET_MODE({context, mode, options}) { // fn#35767, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:59894, offset: 0x0107c8a9, size: 100 bytes, params: 2, frame: 16 const mergeSettingsBinding = mergeSettings; const object = {mode: mode}; const object2 = {}; copyDataProperties(object2, options, undefined); const Date = global.Date; object2['updatedAt'] = Date.now(); object.modeOptions = object2; mergeSettingsBinding(object, context); const binding = env0_77; binding.eachConnection(setInputMode); } function AUDIO_SET_INPUT_VOLUME({volume}) { // fn#35768, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:60074, offset: 0x0107c90d, size: 56 bytes, params: 2, frame: 14 const mergeSettingsBinding = mergeSettings; const object = {}; object.inputVolume = clampVolume(volume); mergeSettingsBinding(object); env0_77.setInputVolume(volume); } function AUDIO_SET_OUTPUT_VOLUME({volume}) { // fn#35769, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:60211, offset: 0x0107c945, size: 47 bytes, params: 2, frame: 13 mergeSettings({outputVolume: volume}); env0_77.setOutputVolume(volume); } function AUDIO_SET_INPUT_DEVICE({id}) { // fn#35770, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:60337, offset: 0x0107c974, size: 192 bytes, params: 2, frame: 16 const deviceId = getDeviceId(env0_90, id); env0_87 = global.performance.now(); mergeSettings({inputDeviceId: deviceId}); setInputDevice(deviceId); const binding = env0_77; binding.eachConnection(updateConnectionVoiceProcessing); env0_138.stop(); const defaultImport = SilenceWarningExperiment; const getConfig = defaultImport.getConfig; if (Reflect.apply(getConfig, defaultImport, [{location: 'MediaEngineStore.handleSetInputDevice'}]).resetSilenceWarningOnDeviceChange) { env0_81.reset(); } } function AUDIO_SET_OUTPUT_DEVICE({id}) { // fn#35771, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:60707, offset: 0x0107ca34, size: 60 bytes, params: 2, frame: 16 const mergeSettingsBinding = mergeSettings; const deviceId = getDeviceId(env0_91, id); mergeSettingsBinding({outputDeviceId: deviceId}); env0_77.setAudioOutputDevice(deviceId); } function AUDIO_SET_ACTIVE_INPUT_PROFILE({inputProfile}) { // fn#35772, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:60857, offset: 0x0107ca70, size: 91 bytes, params: 2, frame: 14 mergeSettings({activeInputProfile: inputProfile}); const value2 = _getSettings0(); let binding = env0_77; binding.eachConnection(function(a0) { setInputMode(a0); updateConnectionVoiceProcessing(a0); }); binding = env0_77; binding.setAudioInputBypassSystemProcessing(value2.bypassSystemInputProcessing); setLoopback(); } function AUDIO_SET_ECHO_CANCELLATION({enabled, location}) { // fn#35774, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:61162, offset: 0x0107cae7, size: 79 bytes, params: 2, frame: 14 const env0_0 = mergeSettings({echoCancellation: enabled}); env0_77.eachConnection(_fun35775); setLoopback(); trackVoiceProcessing(location); function _fun35775(a0) { // fn#35775, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:61269, offset: 0x0107cb36, size: 29 bytes, params: 2, frame: 11 return a0.setEchoCancellation(env0_0.echoCancellation); } } function AUDIO_SET_SIDECHAIN_COMPRESSION({enabled}) { // fn#35776, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:61396, offset: 0x0107cb53, size: 52 bytes, params: 2, frame: 12 const value2 = mergeSettings({sidechainCompression: enabled}); const binding = env0_77; binding.setSidechainCompression(value2.sidechainCompression); } function AUDIO_SET_SIDECHAIN_COMPRESSION_STRENGTH({strength}) { // fn#35777, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:61626, offset: 0x0107cb87, size: 53 bytes, params: 2, frame: 12 const value2 = mergeSettings({sidechainCompressionStrength: strength}); const binding = env0_77; binding.setSidechainCompressionStrength(value2.sidechainCompressionStrength); } function AUDIO_SET_LOOPBACK({enabled, loopbackReason}) { // fn#35778, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:61826, offset: 0x0107cbbc, size: 58 bytes, params: 2, frame: 12 const binding = env0_130; if (enabled) { binding.add(loopbackReason); } else { binding.delete(loopbackReason); } setLoopback(); } function AUDIO_SET_NOISE_SUPPRESSION({enabled, location}) { // fn#35779, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:61958, offset: 0x0107cbf6, size: 79 bytes, params: 2, frame: 14 const env0_0 = mergeSettings({noiseSuppression: enabled}); env0_77.eachConnection(_fun35780); setLoopback(); trackVoiceProcessing(location); function _fun35780(a0) { // fn#35780, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:62065, offset: 0x0107cc45, size: 29 bytes, params: 2, frame: 11 return a0.setNoiseSuppression(env0_0.noiseSuppression); } } function AUDIO_SET_AUTOMATIC_GAIN_CONTROL({enabled, location}) { // fn#35781, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:62193, offset: 0x0107cc62, size: 79 bytes, params: 2, frame: 14 const env0_0 = mergeSettings({automaticGainControl: enabled}); env0_77.eachConnection(_fun35782); setLoopback(); trackVoiceProcessing(location); function _fun35782(a0) { // fn#35782, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:62308, offset: 0x0107ccb1, size: 33 bytes, params: 2, frame: 13 setAutomaticGainControl(a0, env0_0.automaticGainControl); } } function AUDIO_SET_NOISE_CANCELLATION({enabled, location}) { // fn#35783, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:62440, offset: 0x0107ccd2, size: 79 bytes, params: 2, frame: 14 const env0_0 = mergeSettings({noiseCancellation: enabled}); env0_77.eachConnection(_fun35784); setLoopback(); trackVoiceProcessing(location); function _fun35784(a0) { // fn#35784, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:62549, offset: 0x0107cd21, size: 33 bytes, params: 2, frame: 13 setNoiseCancellation(a0, env0_0.noiseCancellation); } } function AUDIO_SET_DEBUG_LOGGING({enabled}) { // fn#35787, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:62923, offset: 0x0107cda2, size: 30 bytes, params: 2, frame: 11 env0_77.setDebugLogging(enabled); } function AUDIO_SET_KRISP_SUPPRESSION_LEVEL({level}) { // fn#35788, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:63022, offset: 0x0107cdc0, size: 51 bytes, params: 2, frame: 12 (KrispUtils).setKrispSuppressionLevel(level); } function AUDIO_SET_NOISE_CANCELLATION_ENABLE_STATS(a0) { // fn#35789, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:63161, offset: 0x0107cdf3, size: 88 bytes, params: 2, frame: 13 var enabled; var binding; if (!PlatformUtilsModule.isWeb()) { enabled = a0.enabled; if (env0_77.setNoiseCancellationEnableStats != null) { binding = env0_77; binding.setNoiseCancellationEnableStats(a0.enabled); } } } function AUDIO_SET_ATTENUATION({attenuation, attenuateWhileSpeakingSelf, attenuateWhileSpeakingOthers}) { // fn#35793, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:63743, offset: 0x0107cea8, size: 80 bytes, params: 2, frame: 15 const env0_0 = mergeSettings({attenuation: attenuation, attenuateWhileSpeakingSelf: attenuateWhileSpeakingSelf, attenuateWhileSpeakingOthers: attenuateWhileSpeakingOthers}); env0_77.eachConnection(_fun35794); function _fun35794(a0) { // fn#35794, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:63966, offset: 0x0107cef8, size: 43 bytes, params: 2, frame: 15 const setAttenuation = a0.setAttenuation; const binding = env0_0; return Reflect.apply(setAttenuation, a0, [binding.attenuation, binding.attenuateWhileSpeakingSelf, binding.attenuateWhileSpeakingOthers]); } } function AUDIO_SET_QOS({enabled}) { // fn#35795, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:64078, offset: 0x0107cf23, size: 57 bytes, params: 2, frame: 13 mergeSettings({qos: enabled}); env0_77.eachConnection(function(a0) { return a0.setQoS(enabled); }); } function MEDIA_ENGINE_DEVICES(a0) { // fn#35797, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:64194, offset: 0x0107cf73, size: 563 bytes, params: 2, frame: 21 var r4; var r3; var r2; var value3; var setInputDeviceBinding; var getDeviceIdBinding; var defaultImport2; var value4; var updateVideoBinding; let binding = env0_90; let convertDevicesBinding = convertDevices; const object = {}; const AUDIO_INPUT = DeviceTypes.AUDIO_INPUT; object.deviceType = AUDIO_INPUT; const value2 = undefined; const intl = (IndexNativeModule).intl; let string = intl.string; const t = (IndexNativeModule).t; object.defaultName = Reflect.apply(string, intl, [t['/QIjDA']]); env0_90 = convertDevicesBinding(a0, object); const defaultImport = Module00022; if (!defaultImport.isEqual(env0_90, binding)) { value3 = _getSettings0(); setInputDeviceBinding = setInputDevice; getDeviceIdBinding = getDeviceId; binding = env0_90; setInputDeviceBinding(getDeviceIdBinding(binding, value3.inputDeviceId)); binding = env0_77; binding.eachConnection(updateConnectionVoiceProcessing); } setOutputDevices(a0); result = a0.videoDevices.length > 0; binding = env0_92; convertDevicesBinding = convertDevices; const VIDEO_INPUT = DeviceTypes.VIDEO_INPUT; string = intl.string; const WKWARY = t.WKWARY; env0_92 = convertDevicesBinding(a0, {deviceType: VIDEO_INPUT, defaultName: Reflect.apply(string, intl, [WKWARY])}); if (env0_98) { defaultImport2 = defaultImport; if (!defaultImport2.isEqual(env0_92, binding)) { value4 = value2 !== env0_92[DISABLED_DEVICE_ID]; r4 = DISABLED_DEVICE_ID === DEFAULT_DEVICE_ID && (binding[DEFAULT_DEVICE_ID] == null ? value2 : binding[DEFAULT_DEVICE_ID].disabled); r3 = (importDefault(4222) /* metro dependency 4222 */).name === 'Firefox' && DISABLED_DEVICE_ID === ''; r3 = r3 && (binding[DISABLED_DEVICE_ID] == null ? value2 : binding[DISABLED_DEVICE_ID].name) === 'Default'; r3 = r3 && !(binding[DISABLED_DEVICE_ID] != null && binding[DISABLED_DEVICE_ID].disabled); updateVideoBinding = updateVideo; r2 = value4 || r4; r2 = !r2 ? r3 : r2; updateVideoBinding(r2); } } return value2; } function AUDIO_RESET() { // fn#35799, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:65114, offset: 0x0107d1da, size: 48 bytes, params: 1, frame: 12 const Storage = (StorageModule).Storage; Storage.remove(env0_63); } function AUDIO_INPUT_DETECTED({inputDetected}) { // fn#35800, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:65218, offset: 0x0107d20a, size: 281 bytes, params: 2, frame: 19 var config; var enableHardwareSilenceWarning; var resetSilenceWarningAfterNMinutes; var binding; if (inputDetected == null) { return false; } env0_107 = env0_106 !== true && !inputDetected; if (inputDetected) { binding = env0_138; binding.stop(); binding = env0_108; binding.stop(); } else if (_getSettings0().mode === InputModes.VOICE_ACTIVITY) { if (env0_106) { config = (importDefault(12486) /* metro dependency 12486: SilenceWarningExperiment */).getConfig({location: 'MediaEngineStore.handleInputDetected'}); enableHardwareSilenceWarning = config.enableHardwareSilenceWarning; resetSilenceWarningAfterNMinutes = config.resetSilenceWarningAfterNMinutes; if (enableHardwareSilenceWarning) { binding = env0_138; binding.start(env0_68, _fun35801); } if (resetSilenceWarningAfterNMinutes != null) { binding = env0_108; binding.start(resetSilenceWarningAfterNMinutes * (importDefault(672) /* metro dependency 672: Durations */).Millis.MINUTE, _fun35802); } } } function _fun35801() { // fn#35801, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:65556, offset: 0x0107d323, size: 142 bytes, params: 1, frame: 18 const value2 = undefined; const defaultImport = AnalyticsUtils; const track = defaultImport.track; const HARDWARE_MUTE_GUESSED = AnalyticEvents.HARDWARE_MUTE_GUESSED; const object = {}; const binding = env1_90; const property = binding[getDeviceId(binding, _getSettings0().inputDeviceId)]; object.input_device_name = property == null ? value2 : property.name; object.rtc_connection_id = RTCConnectionStore.getRTCConnectionId(); Reflect.apply(track, defaultImport, [HARDWARE_MUTE_GUESSED, object]); env1_74.emitChange(); return value2; } function _fun35802() { // fn#35802, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:65817, offset: 0x0107d3b1, size: 27 bytes, params: 1, frame: 9 env1_81.reset(); } } function AUDIO_SET_BYPASS_SYSTEM_INPUT_PROCESSING({bypassEnabled, location}) { // fn#35805, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:66081, offset: 0x0107d403, size: 61 bytes, params: 2, frame: 14 mergeSettings({bypassSystemInputProcessing: bypassEnabled}); env0_77.setAudioInputBypassSystemProcessing(bypassEnabled); trackVoiceProcessing(location); } function MEDIA_ENGINE_SET_AUDIO_ENABLED(a0) { // fn#35806, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:66303, offset: 0x0107d440, size: 72 bytes, params: 2, frame: 12 const enabled = a0.enabled; if (a0.unmute) { mergeSettings({'mute': false, 'deaf': false}); } const binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } function MEDIA_ENGINE_PERMISSION(a0) { // fn#35808, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:66593, offset: 0x0107d4c9, size: 83 bytes, params: 2, frame: 11 var binding; const kind = a0.kind; if (!a0.granted) { if (kind === 'audio') { binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } else if (kind === 'video') { updateVideo(false); } } } function MEDIA_ENGINE_SET_GO_LIVE_SOURCE({settings}) { // fn#35809, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:66785, offset: 0x0107d51c, size: 517 bytes, params: 2, frame: 21 var cameraSettings; var r4; var r6; var r5; var soundshareSession; var soundshareId; var updateVideoBinding; var context; var videoDeviceGuid; var audioDeviceGuid; var sound; var qualityOptions; var sourceId; var pidFromDesktopSource; var value10; let value = null; let desktopSettings = value == settings ? undefined : settings.desktopSettings; if (value != desktopSettings) { desktopSettings = settings.desktopSettings; sourceId = desktopSettings.sourceId; sound = desktopSettings.sound; context = settings.context; r4 = value != context ? context : MediaEngineContextTypes.DEFAULT; qualityOptions = settings.qualityOptions; r5 = value != qualityOptions ? qualityOptions : {'resolution': 720, 'frameRate': 30}; pidFromDesktopSource = (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).getPidFromDesktopSource(sourceId); if ((require(477) /* metro dependency 477: PlatformUtils */).isPlatformEmbedded) { value10 = maybeTryHookProcess(pidFromDesktopSource, sound); soundshareId = value10.soundshareId; soundshareSession = value10.soundshareSession; } else { soundshareSession = value; soundshareId = value; } if (r4 !== STREAM) { if (value != env0_79) { env0_77.setGoLiveSource(value, STREAM); } } updateVideoBinding = updateVideo; value = r4 === MediaEngineContextTypes.STREAM; updateVideoBinding(value && env0_98, {desktopSource: {id: sourceId, sourcePid: pidFromDesktopSource, soundshareId: soundshareId, soundshareSession: soundshareSession}, quality: {resolution: r5.resolution, frameRate: r5.frameRate}}); } else { cameraSettings = value == settings ? undefined : settings.cameraSettings; if (value != cameraSettings) { context = settings.context; r4 = value != context ? context : MediaEngineContextTypes.DEFAULT; cameraSettings = settings.cameraSettings; videoDeviceGuid = cameraSettings.videoDeviceGuid; audioDeviceGuid = cameraSettings.audioDeviceGuid; sound = cameraSettings.sound; r4 = r4 === MediaEngineContextTypes.STREAM && env0_98; qualityOptions = settings.qualityOptions; r6 = value != qualityOptions ? qualityOptions : {'resolution': 720, 'frameRate': 30}; updateVideo(r4, {cameraSource: {videoDeviceGuid: videoDeviceGuid, audioDeviceGuid: audioDeviceGuid, sound: sound}, quality: {resolution: r6.resolution, frameRate: r6.frameRate}}); } else { updateVideo(env0_98, value); } } } function MEDIA_ENGINE_SET_VIDEO_DEVICE({id}) { // fn#35810, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:67858, offset: 0x0107d721, size: 53 bytes, params: 2, frame: 16 const mergeSettingsBinding = mergeSettings; const object = {}; object.videoDeviceId = getDeviceId(env0_92, id); mergeSettingsBinding(object); updateVideo(); } function MEDIA_ENGINE_INTERACTION_REQUIRED(a0) { // fn#35811, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:67996, offset: 0x0107d756, size: 62 bytes, params: 2, frame: 11 var r0; var value3; const binding = env0_85; let required = a0.required; const value2 = binding !== required; if (value2) { required = a0.required; required = a0.required; value3 = true; if (required) { r0 = value3; } else { env0_77.interact(); r0 = value3; } } else { r0 = value2; } return r0; } function CERTIFIED_DEVICES_SET() { // fn#35812, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:68231, offset: 0x0107d794, size: 26 bytes, params: 1, frame: 11 const binding = env0_77; binding.eachConnection(updateConnectionVoiceProcessing); return false; } function RPC_APP_CONNECTED({application}) { // fn#35813, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:68348, offset: 0x0107d7ae, size: 34 bytes, params: 2, frame: 11 const binding = env0_83; binding.add(application.id); } function RPC_APP_DISCONNECTED({application}) { // fn#35814, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:68428, offset: 0x0107d7d0, size: 34 bytes, params: 2, frame: 11 env0_83.delete(application.id); } function APP_STATE_UPDATE_35816({state}) { // fn#35816, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:68744, offset: 0x0107d854, size: 132 bytes, params: 2, frame: 13 const isEnabled2 = (ExternalPipAndroid).isEnabled(); const BACKGROUND = AppStates.BACKGROUND; if (state !== BACKGROUND) { if (state !== AppStates.ACTIVE) { return false; } } else { if (env0_98) { if (isEnabled2) { if (state !== AppStates.ACTIVE) { return false; } if (env0_104) { updateVideo(true); return true; } return false; } env0_104 = true; updateVideo(false); return true; } if (state !== AppStates.ACTIVE) { return false; } } if (env0_104) { updateVideo(true); return true; } return false; } function SET_CHANNEL_BITRATE(a0) { // fn#35817, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:68943, offset: 0x0107d8d8, size: 36 bytes, params: 2, frame: 11 const env0_0 = a0; env0_77.eachConnection(_fun35818); function _fun35818(a0) { // fn#35818, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:68998, offset: 0x0107d8fc, size: 29 bytes, params: 2, frame: 11 return a0.setBitRate(env0_0.bitrate); } } function SET_VAD_PERMISSION({hasPermission}) { // fn#35819, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69047, offset: 0x0107d919, size: 54 bytes, params: 2, frame: 11 if (!hasPermission === env0_96) { return false; } const binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); } function SET_NATIVE_PERMISSION({state, permissionType}) { // fn#35820, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69201, offset: 0x0107d94f, size: 120 bytes, params: 2, frame: 12 var binding; const ACCEPTED = NativePermissionStates.ACCEPTED; const value2 = state === ACCEPTED; const AUDIO = NativePermissionTypes.AUDIO; if (AUDIO === permissionType) { binding = env0_77; binding.eachConnection(updateConnectionMuteDeaf); return undefined; } const CAMERA = NativePermissionTypes.CAMERA; if (CAMERA === permissionType) { if (!value2 && env0_98) { updateVideo(false); } return undefined; } return false; } function SET_CHANNEL_VIDEO_QUALITY_MODE(a0) { // fn#35821, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69461, offset: 0x0107d9c7, size: 36 bytes, params: 2, frame: 11 const env0_0 = a0; env0_77.eachConnection(_fun35822); function _fun35822(a0) { // fn#35822, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69525, offset: 0x0107d9eb, size: 28 bytes, params: 2, frame: 11 return a0.applyVideoQualityMode(env0_0.mode); } } function MEDIA_ENGINE_SET_AEC_DUMP({enabled}) { // fn#35823, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69589, offset: 0x0107da07, size: 52 bytes, params: 2, frame: 12 const value2 = mergeSettings({aecDumpEnabled: enabled}); const binding = env0_77; binding.setAecDump(value2.aecDumpEnabled); } function MEDIA_ENGINE_SET_OPENH264_ENABLED({enabled}) { // fn#35824, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69735, offset: 0x0107da3b, size: 118 bytes, params: 2, frame: 16 mergeSettings({openH264Enabled: enabled}); if (!((importDefault(6731) /* metro dependency 6731: DesktopNativeUtils */) == null || (importDefault(6731) /* metro dependency 6731: DesktopNativeUtils */).setOpenH264Enabled == null)) { (importDefault(6731) /* metro dependency 6731: DesktopNativeUtils */).setOpenH264Enabled(enabled); } } function MEDIA_ENGINE_RESET_SETTINGS({overrides}) { // fn#35825, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:69937, offset: 0x0107dab1, size: 120 bytes, params: 2, frame: 15 const Object = global.Object; env0_82 = Object.values(MediaEngineContextTypes).reduce(_fun35826, {}); const Storage = (StorageModule).Storage; Storage.set(env0_63, env0_82); applySettings(); function _fun35826(a0, a1) { // fn#35826, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70010, offset: 0x0107db29, size: 68 bytes, params: 3, frame: 16 let value = environment.__proto__; const defaultSettings = getDefaultSettings(); value = importDefault(22) /* metro dependency 22 */; a0[a1] = value.merge(defaultSettings, overrides[a1]); return a0; } } function CHANNEL_DELETE_35827() { // fn#35827, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70157, offset: 0x0107db6d, size: 60 bytes, params: 1, frame: 13 if (env0_98) { if (RTCConnectionStore.getRTCConnectionId() != null) { return false; } updateVideo(false, null); } else { if (env0_79 == null) { return false; } if (RTCConnectionStore.getRTCConnectionId() != null) { return false; } updateVideo(false, null); } } function MEDIA_ENGINE_NOISE_CANCELLATION_ERROR({code}) { // fn#35828, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70304, offset: 0x0107dba9, size: 107 bytes, params: 2, frame: 14 const KRISP_CPU_OVERUSE = NoiseCancellerError.KRISP_CPU_OVERUSE; if (code === KRISP_CPU_OVERUSE) { env0_143.noiseCancellation = false; env0_143.noiseSuppression = true; var env0_0 = _getSettings0(); env0_77.eachConnection(_fun35829); setLoopback(); trackVoiceProcessing(); return true; } return false; function _fun35829(a0) { // fn#35829, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70474, offset: 0x0107cd21, size: 33 bytes, params: 2, frame: 13 setNoiseCancellation(a0, env0_0.noiseCancellation); } } function MEDIA_ENGINE_VOICE_ACTIVITY_DETECTION_ERROR({code}) { // fn#35830, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70617, offset: 0x0107dc14, size: 73 bytes, params: 2, frame: 13 var r0; var binding; const KRISP_VAD_CPU_OVERUSE = NoiseCancellerError.KRISP_VAD_CPU_OVERUSE; const value2 = code === KRISP_VAD_CPU_OVERUSE; if (value2) { binding = env0_143; binding.modeOptions = {vadUseKrisp: false}; binding = env0_77; binding.eachConnection(function(a0) { setInputMode(a0); }); r0 = true; } else { r0 = value2; } return r0; } function MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET() { // fn#35832, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70827, offset: 0x0107dc70, size: 26 bytes, params: 1, frame: 3 const binding = env0_121; return binding || !!binding; } function MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS({settings}) { // fn#35833, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:70937, offset: 0x0107dc8a, size: 49 bytes, params: 2, frame: 11 env0_77.applyMediaFilterSettings(settings).finally(_fun35834); function _fun35834() { // fn#35834, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:71031, offset: 0x0107dcbb, size: 27 bytes, params: 1, frame: 9 env1_74.emitChange(); } } function CLIPS_INIT({sourceId, applicationName, quality}) { // fn#35838, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:71460, offset: 0x0107dd37, size: 816 bytes, params: 2, frame: 23 var object4; var id; var r11; var r8; var binding; var desktopSource; var setClipsSource; var moduleValue2; var soundshareId; var videoHook; var moduleValue3; var moduleValue4; var pidFromDesktopSource; var value5; var hdrCaptureMode; const DisableHookFramePacerExperiment = (DisableHookFramePacerExperimentModule).DisableHookFramePacerExperiment; const VideoHookDX12Experiment = (VideoHookDX12ExperimentModule).VideoHookDX12Experiment; var object3; var binding3; if (IsClipsEnabledModule.isDecoupledClipsEnabled()) { if ((importDefault(3767) /* metro dependency 3767: DiscordNative */) == null) { return false; } binding = object4; id = binding == null ? undefined : binding.desktopSource.id; if (id !== sourceId) { if (object4 != null) { env0_77.setClipsSource(null); moduleValue2 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue2.isWindows()) { if (object4.desktopSource.soundshareId != null) { moduleValue4 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue4.cancelAttachToProcess(object4.desktopSource.soundshareId); } else if (object4.desktopSource.sourcePid != null && _getSettings0().videoHook) { moduleValue3 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue3.cancelAttachToProcess(object4.desktopSource.sourcePid); } } } pidFromDesktopSource = (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).getPidFromDesktopSource(sourceId); value5 = maybeTryHookProcess(pidFromDesktopSource, true); soundshareId = value5.soundshareId; object4 = {desktopSource: {id: sourceId, sourcePid: pidFromDesktopSource, soundshareId: soundshareId, soundshareSession: value5.soundshareSession}, quality: quality}; hdrCaptureMode = getHdrCaptureMode('MediaEngineStore clips'); videoHook = _getSettings0().videoHook; r11 = videoHook ? !DisableHookFramePacerExperiment.getConfig({location: 'handleClipsInit'}).enabled : !videoHook; r8 = videoHook && VideoHookDX12Experiment.getConfig({location: 'handleClipsInit'}).enabled; binding = env0_77; setClipsSource = binding.setClipsSource; object3 = {}; desktopSource = object4.desktopSource; object3.id = desktopSource.id; desktopSource = object4.desktopSource; soundshareId = desktopSource.soundshareId; object3.soundshareId = soundshareId; object3.useVideoHook = videoHook; object3.useHookFramePacer = r11; object3.useGraphicsCapture = supportsWindowsGraphicsCapture(); object3.useCaptureDeviceForEncode = false; object3.useLoopback = env0_74.getExperimentalSoundshare(); object3.useQuartzCapturer = true; object3.allowScreenCaptureKit = supportsScreenCaptureKit(); object3.videoHookStaleFrameTimeoutMs = 500; object3.graphicsCaptureStaleFrameTimeoutMs = env0_65; object3.hdrCaptureMode = hdrCaptureMode; object3.videoHookAllowDx12 = r8; binding3 = env0_74; Reflect.apply(setClipsSource, binding, [{desktopDescription: object3, quality: quality, applicationName: applicationName, videoEncoderExperiments: binding3.getVideoEncoderExperiments(MediaEngineContextTypes.STREAM, 'streamer')}]); return undefined; } if (object4.quality === quality) { return false; } if (object4 != null) { env0_77.setClipsSource(null); moduleValue2 = require(477) /* metro dependency 477: PlatformUtils */; if (moduleValue2.isWindows()) { if (object4.desktopSource.soundshareId != null) { moduleValue4 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue4.cancelAttachToProcess(object4.desktopSource.soundshareId); } else if (object4.desktopSource.sourcePid != null && _getSettings0().videoHook) { moduleValue3 = importAll(12419) /* metro dependency 12419: HookNative */; moduleValue3.cancelAttachToProcess(object4.desktopSource.sourcePid); } } } pidFromDesktopSource = (importDefault(4488) /* metro dependency 4488: CrossPlatformNativeUtilsNative */).getPidFromDesktopSource(sourceId); value5 = maybeTryHookProcess(pidFromDesktopSource, true); soundshareId = value5.soundshareId; object4 = {desktopSource: {id: sourceId, sourcePid: pidFromDesktopSource, soundshareId: soundshareId, soundshareSession: value5.soundshareSession}, quality: quality}; hdrCaptureMode = getHdrCaptureMode('MediaEngineStore clips'); videoHook = _getSettings0().videoHook; r11 = videoHook ? !DisableHookFramePacerExperiment.getConfig({location: 'handleClipsInit'}).enabled : !videoHook; r8 = videoHook && VideoHookDX12Experiment.getConfig({location: 'handleClipsInit'}).enabled; binding = env0_77; setClipsSource = binding.setClipsSource; object3 = {}; desktopSource = object4.desktopSource; id = desktopSource.id; object3.id = id; desktopSource = object4.desktopSource; soundshareId = desktopSource.soundshareId; object3.soundshareId = soundshareId; object3.useVideoHook = videoHook; object3.useHookFramePacer = r11; object3.useGraphicsCapture = supportsWindowsGraphicsCapture(); object3.useCaptureDeviceForEncode = false; object3.useLoopback = env0_74.getExperimentalSoundshare(); object3.useQuartzCapturer = true; object3.allowScreenCaptureKit = supportsScreenCaptureKit(); object3.videoHookStaleFrameTimeoutMs = 500; object3.graphicsCaptureStaleFrameTimeoutMs = env0_65; object3.hdrCaptureMode = hdrCaptureMode; object3.videoHookAllowDx12 = r8; binding3 = env0_74; Reflect.apply(setClipsSource, binding, [{desktopDescription: object3, quality: quality, applicationName: applicationName, videoEncoderExperiments: binding3.getVideoEncoderExperiments(MediaEngineContextTypes.STREAM, 'streamer')}]); return undefined; } return false; } function CLIPS_SETTINGS_UPDATE_35839({settings}) { // fn#35839, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:72991, offset: 0x0107e067, size: 49 bytes, params: 2, frame: 11 if (settings.decoupledClipsEnabled === false) { env0_77.setClipsSource(null); } } function MEDIA_ENGINE_SET_DEVICE_AUDIO_EFFECTS({deviceId, active, available}) { // fn#35841, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:73248, offset: 0x0107e0ab, size: 48 bytes, params: 2, frame: 5 env0_124[deviceId] = {active: active, available: available}; } } function* _fun35481() { // fn#35481, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:5858, offset: 0x0107472c, size: 190 bytes, params: 1, frame: 14 var r2; var decodingInfo; var object; var object2; var value3; var supported; var powerEfficient; var error; let value = undefined; if (false) { return value; } if (typeof global.window === 'undefined') { return false; } let navigator = global.navigator; if (typeof navigator === 'undefined') { return false; } if (!('mediaCapabilities' in global.navigator)) { return false; } let mediaCapabilities = global.navigator.mediaCapabilities; if (mediaCapabilities == null) { return false; } try { navigator = global.navigator; } catch (error) { return false; } try { mediaCapabilities = navigator.mediaCapabilities; } catch (error) { return false; } try { decodingInfo = mediaCapabilities.decodingInfo; } catch (error) { return false; } try { object = {}; } catch (error) { return false; } try { object.type = 'file'; } catch (error) { return false; } try { object2 = {'contentType': 'video/mp4; codecs="hev1.1.6.L153.B0"', 'width': 1920, 'height': 1080, 'bitrate': 2000000, 'framerate': 30}; } catch (error) { return false; } try { object.video = object2; } catch (error) { return false; } try { value = Reflect.apply(decodingInfo, mediaCapabilities, [object]); } catch (error) { return false; } yield value; try { value = undefined; value3 = false; } catch (error) { return false; } if (value3) { return value; } try { supported = value.supported; } catch (error) { return false; } if (supported) { try { powerEfficient = value.powerEfficient; } catch (error) { return false; } r2 = powerEfficient; } else { r2 = supported; } return r2; } function _fun35555({name}) { // fn#35555, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:4431:28606, offset: 0x01077ed6, size: 36 bytes, params: 2, frame: 11 return name.toLowerCase().includes('dualsense'); } global.__d(_fun35470, 4259, [6, 7, 15, 17, 18, 57, 5, 4260, 4265, 4107, 4266, 4289, 1348, 1226, 4290, 4293, 1379, 4294, 1878, 12412, 661, 4286, 4661, 12413, 670, 12414, 4291, 3, 672, 477, 4406, 4041, 4662, 12415, 12416, 12417, 10750, 12418, 22, 12401, 12419, 12420, 12421, 12422, 12423, 12424, 9235, 683, 694, 10826, 12425, 12426, 4608, 12427, 12472, 12473, 12474, 12475, 12476, 12477, 12384, 4489, 4488, 3767, 587, 12478, 10269, 6731, 12482, 12483, 1244, 4222, 12484, 12485, 44, 12411, 12486, 12396, 1216, 12382, 10684, 4092, 12487, 12488, 566, 12489, 2]) /* metro module 4259, dependencies: [6, 7, 15, 17, 18, 57, 5, 4260, 4265, 4107, 4266, 4289, 1348, 1226, 4290, 4293, 1379, 4294, 1878, 12412, 661, 4286, 4661, 12413, 670, 12414, 4291, 3, 672, 477, 4406, 4041, 4662, 12415, 12416, 12417, 10750, 12418, 22, 12401, 12419, 12420, 12421, 12422, 12423, 12424, 9235, 683, 694, 10826, 12425, 12426, 4608, 12427, 12472, 12473, 12474, 12475, 12476, 12477, 12384, 4489, 4488, 3767, 587, 12478, 10269, 6731, 12482, 12483, 1244, 4222, 12484, 12485, 44, 12411, 12486, 12396, 1216, 12382, 10684, 4092, 12487, 12488, 566, 12489, 2] */;