From 10d035b868dfe7513807bb3ced15ca04c7c4f2dc Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 16 Mar 2026 22:43:29 +0800 Subject: [PATCH 01/10] egress v2 --- .github/workflows/slack-notifier.yaml | 2 +- protobufs/cloud_replay.proto | 38 +- protobufs/livekit_egress.proto | 658 +++++++++++++++++--------- protobufs/rpc/egress.proto | 14 +- 4 files changed, 477 insertions(+), 235 deletions(-) diff --git a/.github/workflows/slack-notifier.yaml b/.github/workflows/slack-notifier.yaml index 7770345bf..da4e22874 100644 --- a/.github/workflows/slack-notifier.yaml +++ b/.github/workflows/slack-notifier.yaml @@ -2,7 +2,7 @@ name: PR Slack Notifier on: pull_request: - types: [review_requested, reopened, closed] + types: [review_requested, reopened, closed, synchronize] pull_request_review: types: [submitted] diff --git a/protobufs/cloud_replay.proto b/protobufs/cloud_replay.proto index 705af0c5d..7de062ed3 100644 --- a/protobufs/cloud_replay.proto +++ b/protobufs/cloud_replay.proto @@ -1,3 +1,17 @@ +// Copyright 2026 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto3"; package replay; @@ -7,17 +21,25 @@ option csharp_namespace = "LiveKit.Proto"; option ruby_package = "LiveKit::Proto"; import "google/protobuf/empty.proto"; +import "livekit_egress.proto"; import "livekit_models.proto"; import "logger/options.proto"; // Experimental (not currently available) service Replay { + // List replays rpc ListReplays(ListReplaysRequest) returns (ListReplaysResponse); - rpc DeleteReplay(DeleteReplayRequest) returns (google.protobuf.Empty); + // Playback controls rpc Playback(PlaybackRequest) returns (PlaybackResponse); rpc Seek(SeekRequest) returns (google.protobuf.Empty); rpc Close(ClosePlaybackRequest) returns (google.protobuf.Empty); + + // Export a stored replay using egress + rpc Export(livekit.ExportReplayRequest) returns (livekit.EgressInfo); + + // Delete all stored data + rpc DeleteReplay(DeleteReplayRequest) returns (google.protobuf.Empty); } message ListReplaysRequest { @@ -34,17 +56,13 @@ message ReplayInfo { string replay_id = 1 [(logger.name) = "replayID"]; string room_name = 2; int64 start_time = 3; - int64 duration = 4; -} - -message DeleteReplayRequest { - string replay_id = 1 [(logger.name) = "replayID"]; + int64 duration_ms = 4; } message PlaybackRequest { string replay_id = 1 [(logger.name) = "replayID"]; string playback_room = 2; // name of room to play into - int64 seek_offset = 3; // initial timestamp (ms) + int64 seek_offset_ms = 3; // initial timestamp (ms) } message PlaybackResponse { @@ -53,9 +71,13 @@ message PlaybackResponse { message SeekRequest { string playback_id = 1 [(logger.name) = "playbackID"]; - int64 seek_offset = 2; // timestamp (ms) + int64 seek_offset_ms = 2; // timestamp (ms) } message ClosePlaybackRequest { string playback_id = 1 [(logger.name) = "playbackID"]; } + +message DeleteReplayRequest { + string replay_id = 1 [(logger.name) = "replayID"]; +} diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index 2651a5921..ab09c289b 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -24,133 +24,181 @@ option csharp_namespace = "LiveKit.Proto"; option ruby_package = "LiveKit::Proto"; service Egress { - // start recording or streaming a room, participant, or tracks - rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo); - rpc StartWebEgress(WebEgressRequest) returns (EgressInfo); - rpc StartParticipantEgress(ParticipantEgressRequest) returns (EgressInfo); - rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo); - rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo); + // Unified StartEgress RPC + rpc StartEgress(StartEgressRequest) returns (EgressInfo); - // update web composite layout - rpc UpdateLayout(UpdateLayoutRequest) returns (EgressInfo); + // Update url/template or stream outputs + rpc UpdateEgress(UpdateEgressRequest) returns (EgressInfo); - // add or remove stream endpoints - rpc UpdateStream(UpdateStreamRequest) returns (EgressInfo); - - // list available egress + // List available egress rpc ListEgress(ListEgressRequest) returns (ListEgressResponse); - // stop a recording or stream + // Stop a recording or stream rpc StopEgress(StopEgressRequest) returns (EgressInfo); + + // --- Deprecated --- + rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo) { option deprecated = true; }; + rpc StartWebEgress(WebEgressRequest) returns (EgressInfo) { option deprecated = true; }; + rpc StartParticipantEgress(ParticipantEgressRequest) returns (EgressInfo) { option deprecated = true; }; + rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo) { option deprecated = true; }; + rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo) { option deprecated = true; }; + rpc UpdateLayout(UpdateLayoutRequest) returns (EgressInfo) { option deprecated = true; }; + rpc UpdateStream(UpdateStreamRequest) returns (EgressInfo) { option deprecated = true; }; } -// composite using a web browser -message RoomCompositeEgressRequest { - string room_name = 1; // required - string layout = 2; // (optional) - bool audio_only = 3; // (default false) - AudioMixing audio_mixing = 15; // only applies to audio_only egress (default DEFAULT_MIXING) - bool video_only = 4; // (default false) - string custom_base_url = 5; // template base url (default https://recorder.livekit.io) - oneof output { // deprecated (use _output fields) - EncodedFileOutput file = 6 [deprecated = true]; - StreamOutput stream = 7 [deprecated = true]; - SegmentedFileOutput segments = 10 [deprecated = true]; +// --- Core Request --- + +message StartEgressRequest { + string room_name = 1; + + oneof source { + TemplateSource template = 2; + WebSource web = 3; + MediaSource media = 4; } - oneof options { - EncodingOptionsPreset preset = 8; // (default H264_720P_30) - EncodingOptions advanced = 9; // (optional) + + // Optional — default H264_720P_30 + oneof encoding { + EncodingOptionsPreset preset = 5; + EncodingOptions advanced = 6; } - repeated EncodedFileOutput file_outputs = 11; - repeated StreamOutput stream_outputs = 12; - repeated SegmentedFileOutput segment_outputs = 13; - repeated ImageOutput image_outputs = 14; - repeated WebhookConfig webhooks = 16; // extra webhooks to call for this request + // At least one required + repeated Output outputs = 7; + + // Request-level storage default + StorageConfig storage = 8; - // NEXT_ID: 17 + // Optional additional webhook config + repeated WebhookConfig webhooks = 9; } -// record any website -message WebEgressRequest { +// --- Source Types --- + +// Room composite recording via layout template. +// Service generates token, constructs recorder URL, awaits start signal. +message TemplateSource { + string layout = 1; + bool audio_only = 2; + bool video_only = 3; + string custom_base_url = 4; +} + +// Record a custom URL via headless browser. +message WebSource { string url = 1; bool audio_only = 2; bool video_only = 3; - bool await_start_signal = 12; - oneof output { // deprecated (use _output fields) - EncodedFileOutput file = 4 [deprecated = true]; - StreamOutput stream = 5 [deprecated = true]; - SegmentedFileOutput segments = 6 [deprecated = true]; - } - oneof options { - EncodingOptionsPreset preset = 7; - EncodingOptions advanced = 8; + bool await_start_signal = 4; +} + +// Capture tracks directly from a room via SDK. +// Unifies deprecated Participant, TrackComposite, and Track egress. +message MediaSource { + oneof video { + string video_track_id = 1 [(logger.name) = "videoTrackID"]; + ParticipantVideo participant_video = 2; } - repeated EncodedFileOutput file_outputs = 9; - repeated StreamOutput stream_outputs = 10; - repeated SegmentedFileOutput segment_outputs = 11; - repeated ImageOutput image_outputs = 13; - repeated WebhookConfig webhooks = 14; // extra webhooks to call for this request + AudioConfig audio = 3; + DataConfig data = 4; +} - // NEXT_ID: 15 +message ParticipantVideo { + string identity = 1; + bool prefer_screen_share = 2; } -// record audio and video from a single participant -message ParticipantEgressRequest { - string room_name = 1; // required - string identity = 2; // required - bool screen_share = 3; // (default false) - oneof options { - EncodingOptionsPreset preset = 4; // (default H264_720P_30) - EncodingOptions advanced = 5; // (optional) +// --- Audio Configuration --- + +// Unified audio selection and channel routing. +// Each route specifies both which audio to capture and which channel to output to. +message AudioConfig { + // If empty, all audio captured in both channels. + // If non-empty, only matching audio is captured and routed. Unmatched is excluded. + repeated AudioRoute routes = 1; +} + +message AudioRoute { + oneof match { + string track_id = 1 [(logger.name) = "trackID"]; + string participant_identity = 2; + ParticipantInfo.Kind participant_kind = 3; } - repeated EncodedFileOutput file_outputs = 6; - repeated StreamOutput stream_outputs = 7; - repeated SegmentedFileOutput segment_outputs = 8; - repeated ImageOutput image_outputs = 9; + AudioChannel channel = 4; +} + +enum AudioChannel { + AUDIO_CHANNEL_BOTH = 0; + AUDIO_CHANNEL_LEFT = 1; + AUDIO_CHANNEL_RIGHT = 2; +} - repeated WebhookConfig webhooks = 10; // extra webhooks to call for this request +// --- Data Track Configuration --- - // NEXT_ID: 11 +message DataConfig { + // If empty, all data tracks captured. + // If non-empty, only matching data tracks are captured. + repeated DataSelector selectors = 1; } -// containerize up to one audio and one video track -message TrackCompositeEgressRequest { - string room_name = 1; // required - string audio_track_id = 2 [(logger.name) = "audioTrackID"]; // (optional) - string video_track_id = 3 [(logger.name) = "videoTrackID"]; // (optional) - oneof output { // deprecated (use _output fields) - EncodedFileOutput file = 4 [deprecated = true]; - StreamOutput stream = 5 [deprecated = true]; - SegmentedFileOutput segments = 8 [deprecated = true]; - } - oneof options { - EncodingOptionsPreset preset = 6; // (default H264_720P_30) - EncodingOptions advanced = 7; // (optional) +message DataSelector { + oneof match { + string track_id = 1 [(logger.name) = "trackID"]; + string participant_identity = 2; + string topic = 3; } - repeated EncodedFileOutput file_outputs = 11; - repeated StreamOutput stream_outputs = 12; - repeated SegmentedFileOutput segment_outputs = 13; - repeated ImageOutput image_outputs = 14; +} - repeated WebhookConfig webhooks = 15; // extra webhooks to call for this request +// --- Encoding --- - // NEXT_ID: 16 +enum EncodingOptionsPreset { + H264_720P_30 = 0; // 1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS + H264_720P_60 = 1; // 1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS + H264_1080P_30 = 2; // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS + H264_1080P_60 = 3; // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS + PORTRAIT_H264_720P_30 = 4; // 720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS + PORTRAIT_H264_720P_60 = 5; // 720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS + PORTRAIT_H264_1080P_30 = 6; // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS + PORTRAIT_H264_1080P_60 = 7; // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS } -// record tracks individually, without transcoding -message TrackEgressRequest { - string room_name = 1; // required - string track_id = 2 [(logger.name) = "trackID"]; // required - oneof output { // required - DirectFileOutput file = 3; - string websocket_url = 4; +message EncodingOptions { + int32 width = 1; // (default 1920) + int32 height = 2; // (default 1080) + int32 depth = 3; // (default 24) + int32 framerate = 4; // (default 30) + AudioCodec audio_codec = 5; // (default OPUS) + int32 audio_bitrate = 6; // (default 128) + int32 audio_quality = 11; // quality setting on audio encoder + int32 audio_frequency = 7; // (default 44100) + VideoCodec video_codec = 8; // (default H264_MAIN) + int32 video_bitrate = 9; // (default 4500) + int32 video_quality = 12; // quality setting on video encoder + double key_frame_interval = 10; // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) +} + +// --- Output Types --- + +message Output { + oneof config { + FileOutput file = 1; + StreamOutput stream = 2; // reuses v1 StreamOutput + SegmentedFileOutput segments = 3; // reuses v1 SegmentedFileOutput + ImageOutput images = 4; // reuses v1 ImageOutput + McapOutput mcap = 5; } - repeated WebhookConfig webhooks = 5; // extra webhooks to call for this request + // Per-output storage override (falls back to request, then server) + StorageConfig storage = 6; +} - // NEXT_ID: 6 +// Unified file output — replaces v1 EncodedFileOutput and DirectFileOutput. +// Whether transcoded depends on encoding options on the request. +message FileOutput { + EncodedFileType file_type = 1; + string filepath = 2; + bool disable_manifest = 3; } enum EncodedFileType { @@ -160,26 +208,16 @@ enum EncodedFileType { MP3 = 3; } -message EncodedFileOutput { - EncodedFileType file_type = 1; // (optional) - string filepath = 2; // see egress docs for templating (default {room_name}-{time}) - bool disable_manifest = 6; // disable upload of manifest file (default false) - oneof output { - S3Upload s3 = 3; - GCPUpload gcp = 4; - AzureBlobUpload azure = 5; - AliOSSUpload aliOSS = 7; - } -} - -enum SegmentedFileProtocol { - DEFAULT_SEGMENTED_FILE_PROTOCOL = 0; - HLS_PROTOCOL = 1; +message StreamOutput { + StreamProtocol protocol = 1; // required + repeated string urls = 2; // required } -enum SegmentedFileSuffix { - INDEX = 0; - TIMESTAMP = 1; +enum StreamProtocol { + DEFAULT_PROTOCOL = 0; // protocol chosen based on urls + RTMP = 1; + SRT = 2; + WEBSOCKET = 3; } // Used to generate HLS segments or other kind of segmented output @@ -191,31 +229,27 @@ message SegmentedFileOutput { uint32 segment_duration = 4; // in seconds (optional) SegmentedFileSuffix filename_suffix = 10; // (optional, default INDEX) bool disable_manifest = 8; // disable upload of manifest file (default false) - oneof output { // required - S3Upload s3 = 5; - GCPUpload gcp = 6; - AzureBlobUpload azure = 7; - AliOSSUpload aliOSS = 9; - } -} -message DirectFileOutput { - string filepath = 1; // see egress docs for templating (default {track_id}-{time}) - bool disable_manifest = 5; // disable upload of manifest file (default false) + // --- Deprecated --- oneof output { - S3Upload s3 = 2; - GCPUpload gcp = 3; - AzureBlobUpload azure = 4; - AliOSSUpload aliOSS = 6; + S3Upload s3 = 5 [deprecated = true]; + GCPUpload gcp = 6 [deprecated = true]; + AzureBlobUpload azure = 7 [deprecated = true]; + AliOSSUpload aliOSS = 9 [deprecated = true]; } } -enum ImageFileSuffix { - IMAGE_SUFFIX_INDEX = 0; - IMAGE_SUFFIX_TIMESTAMP = 1; - IMAGE_SUFFIX_NONE_OVERWRITE = 2; // Do not append any suffix and overwrite the existing image with the latest +enum SegmentedFileProtocol { + DEFAULT_SEGMENTED_FILE_PROTOCOL = 0; + HLS_PROTOCOL = 1; +} + +enum SegmentedFileSuffix { + INDEX = 0; + TIMESTAMP = 1; } +// Capture images at a specified interval message ImageOutput { uint32 capture_interval = 1; // in seconds (required) int32 width = 2; // (optional, defaults to track width) @@ -224,11 +258,36 @@ message ImageOutput { ImageFileSuffix filename_suffix = 5; // (optional, default INDEX) ImageCodec image_codec = 6; // (optional) bool disable_manifest = 7; // disable upload of manifest file (default false) - oneof output { // required - S3Upload s3 = 8; - GCPUpload gcp = 9; - AzureBlobUpload azure = 10; - AliOSSUpload aliOSS = 11; + + // --- Deprecated --- + oneof output { + S3Upload s3 = 8 [deprecated = true]; + GCPUpload gcp = 9 [deprecated = true]; + AzureBlobUpload azure = 10 [deprecated = true]; + AliOSSUpload aliOSS = 11 [deprecated = true]; + } +} + +enum ImageFileSuffix { + IMAGE_SUFFIX_INDEX = 0; + IMAGE_SUFFIX_TIMESTAMP = 1; + IMAGE_SUFFIX_NONE_OVERWRITE = 2; // Do not append any suffix and overwrite the existing image with the latest +} + +// Raw track data packaged into MCAP container format. +message McapOutput { + string filepath = 1; + bool disable_manifest = 2; +} + +// --- Storage --- + +message StorageConfig { + oneof provider { + S3Upload s3 = 1; + GCPUpload gcp = 2; + AzureBlobUpload azure = 3; + AliOSSUpload ali_oss = 4; } } @@ -236,7 +295,7 @@ message S3Upload { string access_key = 1 [(logger.redact) = true]; string secret = 2 [(logger.redact) = true]; string session_token = 11 [(logger.redact) = true]; - string assume_role_arn = 12 [(logger.redact) = true]; // ARN of the role to assume for file upload. Egress will make an AssumeRole API call using the provided access_key and secret to assume that role. On LiveKit cloud, this is only available on accounts that have the feature enabled + string assume_role_arn = 12 [(logger.redact) = true]; // ARN of the role to assume for file upload. Egress will make an AssumeRole API call using the provided access_key and secret to assume that role. On LiveKit cloud, this is only available on accounts that have the feature enabled string assume_role_external_id = 13 [(logger.redact) = true, (logger.name) = "assumeRoleExternalID"]; // ExternalID to use when assuming role for upload string region = 3; string endpoint = 4; @@ -274,129 +333,95 @@ message AliOSSUpload { message ProxyConfig { string url = 1; string username = 2; - string password = 3; + string password = 3 [(logger.redact) = true]; } -enum StreamProtocol { - DEFAULT_PROTOCOL = 0; // protocol chosen based on urls - RTMP = 1; - SRT = 2; -} - -message StreamOutput { - StreamProtocol protocol = 1; // required - repeated string urls = 2; // required -} - -enum AudioMixing { - DEFAULT_MIXING = 0; // all users are mixed together - DUAL_CHANNEL_AGENT = 1; // agent audio in the left channel, all other audio in the right channel - DUAL_CHANNEL_ALTERNATE = 2; // each new audio track alternates between left and right channels -} - -message EncodingOptions { - int32 width = 1; // (default 1920) - int32 height = 2; // (default 1080) - int32 depth = 3; // (default 24) - int32 framerate = 4; // (default 30) - AudioCodec audio_codec = 5; // (default OPUS) - int32 audio_bitrate = 6; // (default 128) - int32 audio_quality = 11; // quality setting on audio encoder - int32 audio_frequency = 7; // (default 44100) - VideoCodec video_codec = 8; // (default H264_MAIN) - int32 video_bitrate = 9; // (default 4500) - int32 video_quality = 12; // quality setting on video encoder - double key_frame_interval = 10; // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) -} - -enum EncodingOptionsPreset { - H264_720P_30 = 0; // 1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS - H264_720P_60 = 1; // 1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS - H264_1080P_30 = 2; // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS - H264_1080P_60 = 3; // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS - PORTRAIT_H264_720P_30 = 4; // 720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS - PORTRAIT_H264_720P_60 = 5; // 720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS - PORTRAIT_H264_1080P_30 = 6; // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS - PORTRAIT_H264_1080P_60 = 7; // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS -} - -message UpdateLayoutRequest { - string egress_id = 1 [(logger.name) = "egressID"]; - string layout = 2; -} - -message UpdateStreamRequest { - string egress_id = 1 [(logger.name) = "egressID"]; - repeated string add_output_urls = 2; - repeated string remove_output_urls = 3; -} +// --- Control RPCs --- message ListEgressRequest { - string room_name = 1; // (optional, filter by room name) + string room_name = 1; // (optional, filter by room name) string egress_id = 2 [(logger.name) = "egressID"]; // (optional, filter by egress ID) - bool active = 3; // (optional, list active egress only) + bool active = 3; // (optional, list active egress only) } message ListEgressResponse { repeated EgressInfo items = 1; } -message StopEgressRequest { +message UpdateEgressRequest { string egress_id = 1 [(logger.name) = "egressID"]; + string url = 2; + string layout = 3; + repeated string add_stream_urls = 4; + repeated string remove_stream_urls = 5; } -enum EgressStatus { - EGRESS_STARTING = 0; - EGRESS_ACTIVE = 1; - EGRESS_ENDING = 2; - EGRESS_COMPLETE = 3; - EGRESS_FAILED = 4; - EGRESS_ABORTED = 5; - EGRESS_LIMIT_REACHED = 6; +message StopEgressRequest { + string egress_id = 1 [(logger.name) = "egressID"]; } -enum EgressSourceType { - EGRESS_SOURCE_TYPE_WEB = 0; - EGRESS_SOURCE_TYPE_SDK = 1; -} +// --- Egress Info --- message EgressInfo { string egress_id = 1 [(logger.name) = "egressID"]; string room_id = 2 [(logger.name) = "roomID"]; string room_name = 13; + EgressSourceType source_type = 26; EgressStatus status = 3; + int64 started_at = 10; int64 ended_at = 11; int64 updated_at = 18; - string details = 21; - string error = 9; - int32 error_code = 22; + oneof request { - RoomCompositeEgressRequest room_composite = 4; - WebEgressRequest web = 14; - ParticipantEgressRequest participant = 19; - TrackCompositeEgressRequest track_composite = 5; - TrackEgressRequest track = 6; - } - oneof result { // deprecated (use _result fields) - StreamInfoList stream = 7 [deprecated = true]; - FileInfo file = 8 [deprecated = true]; - SegmentsInfo segments = 12 [deprecated = true]; + StartEgressRequest egress = 29; + ExportReplayRequest replay = 30; + + RoomCompositeEgressRequest room_composite = 4 [deprecated = true]; + WebEgressRequest web = 14 [deprecated = true]; + ParticipantEgressRequest participant = 19 [deprecated = true]; + TrackCompositeEgressRequest track_composite = 5 [deprecated = true]; + TrackEgressRequest track = 6 [deprecated = true]; } + repeated StreamInfo stream_results = 15; repeated FileInfo file_results = 16; repeated SegmentsInfo segment_results = 17; repeated ImagesInfo image_results = 20; + repeated McapInfo mcap_results = 28; + + string error = 9; + int32 error_code = 22; + string details = 21; + string manifest_location = 23; bool backup_storage_used = 25; int32 retry_count = 27; - // next ID: 28 + + // next ID: 31 + + // --- Deprecated --- + oneof result { + StreamInfoList stream = 7 [deprecated = true]; + FileInfo file = 8 [deprecated = true]; + SegmentsInfo segments = 12 [deprecated = true]; + } } -message StreamInfoList { - option deprecated = true; - repeated StreamInfo info = 1; +enum EgressSourceType { + EGRESS_SOURCE_TYPE_WEB = 0; + EGRESS_SOURCE_TYPE_SDK = 1; +} + +enum EgressStatus { + EGRESS_STARTING = 0; + EGRESS_ACTIVE = 1; + EGRESS_ENDING = 2; + EGRESS_COMPLETE = 3; + EGRESS_FAILED = 4; + EGRESS_ABORTED = 5; + EGRESS_LIMIT_REACHED = 6; } message StreamInfo { @@ -444,6 +469,18 @@ message ImagesInfo { int64 ended_at = 3; } +message McapInfo { + string filename = 1; + int64 started_at = 2; + int64 ended_at = 3; + int64 duration = 4; + int64 size = 5; + string location = 6; + int64 track_count = 7; +} + +// --- Auto Egress --- + message AutoParticipantEgress { oneof options { EncodingOptionsPreset preset = 1; // (default H264_720P_30) @@ -463,3 +500,182 @@ message AutoTrackEgress { AliOSSUpload aliOSS = 6; } } + +// --- Replay Export (message only — RPC defined in cloud_replay.proto) --- + +message ExportReplayRequest { + string replay_id = 1 [(logger.name) = "replayID"]; + int64 start_offset_ms = 2; + int64 end_offset_ms = 3; + + oneof source { + TemplateSource template = 4; + WebSource web = 5; + MediaSource media = 6; + } + + oneof encoding { + EncodingOptionsPreset preset = 7; + EncodingOptions advanced = 8; + } + + repeated Output outputs = 9; + StorageConfig storage = 10; + repeated WebhookConfig webhooks = 11; +} + +// --- Deprecated --- + +message RoomCompositeEgressRequest { + option deprecated = true; + + string room_name = 1; + string layout = 2; + bool audio_only = 3; + AudioMixing audio_mixing = 15; + bool video_only = 4; + string custom_base_url = 5; + oneof output { + EncodedFileOutput file = 6 [deprecated = true]; + StreamOutput stream = 7 [deprecated = true]; + SegmentedFileOutput segments = 10 [deprecated = true]; + } + oneof options { + EncodingOptionsPreset preset = 8; + EncodingOptions advanced = 9; + } + repeated EncodedFileOutput file_outputs = 11; + repeated StreamOutput stream_outputs = 12; + repeated SegmentedFileOutput segment_outputs = 13; + repeated ImageOutput image_outputs = 14; + repeated WebhookConfig webhooks = 16; +} + +enum AudioMixing { + DEFAULT_MIXING = 0; + DUAL_CHANNEL_AGENT = 1; + DUAL_CHANNEL_ALTERNATE = 2; +} + +message WebEgressRequest { + option deprecated = true; + + string url = 1; + bool audio_only = 2; + bool video_only = 3; + bool await_start_signal = 12; + oneof output { + EncodedFileOutput file = 4 [deprecated = true]; + StreamOutput stream = 5 [deprecated = true]; + SegmentedFileOutput segments = 6 [deprecated = true]; + } + oneof options { + EncodingOptionsPreset preset = 7; + EncodingOptions advanced = 8; + } + repeated EncodedFileOutput file_outputs = 9; + repeated StreamOutput stream_outputs = 10; + repeated SegmentedFileOutput segment_outputs = 11; + repeated ImageOutput image_outputs = 13; + repeated WebhookConfig webhooks = 14; +} + +// record audio and video from a single participant +message ParticipantEgressRequest { + option deprecated = true; + + string room_name = 1; + string identity = 2; + bool screen_share = 3; + oneof options { + EncodingOptionsPreset preset = 4; + EncodingOptions advanced = 5; + } + repeated EncodedFileOutput file_outputs = 6; + repeated StreamOutput stream_outputs = 7; + repeated SegmentedFileOutput segment_outputs = 8; + repeated ImageOutput image_outputs = 9; + repeated WebhookConfig webhooks = 10; +} + +message TrackCompositeEgressRequest { + option deprecated = true; + + string room_name = 1; + string audio_track_id = 2 [(logger.name) = "audioTrackID"]; + string video_track_id = 3 [(logger.name) = "videoTrackID"]; + oneof output { + EncodedFileOutput file = 4 [deprecated = true]; + StreamOutput stream = 5 [deprecated = true]; + SegmentedFileOutput segments = 8 [deprecated = true]; + } + oneof options { + EncodingOptionsPreset preset = 6; + EncodingOptions advanced = 7; + } + repeated EncodedFileOutput file_outputs = 11; + repeated StreamOutput stream_outputs = 12; + repeated SegmentedFileOutput segment_outputs = 13; + repeated ImageOutput image_outputs = 14; + repeated WebhookConfig webhooks = 15; +} + +message TrackEgressRequest { + option deprecated = true; + + string room_name = 1; + string track_id = 2 [(logger.name) = "trackID"]; + oneof output { + DirectFileOutput file = 3; + string websocket_url = 4; + } + repeated WebhookConfig webhooks = 5; +} + +message DirectFileOutput { + option deprecated = true; + + string filepath = 1; + bool disable_manifest = 5; + oneof output { + S3Upload s3 = 2; + GCPUpload gcp = 3; + AzureBlobUpload azure = 4; + AliOSSUpload aliOSS = 6; + } +} + +message EncodedFileOutput { + option deprecated = true; + + EncodedFileType file_type = 1; + string filepath = 2; + bool disable_manifest = 6; + oneof output { + S3Upload s3 = 3; + GCPUpload gcp = 4; + AzureBlobUpload azure = 5; + AliOSSUpload aliOSS = 7; + } +} + +message UpdateLayoutRequest { + option deprecated = true; + + string egress_id = 1 [(logger.name) = "egressID"]; + string layout = 2; +} + +message UpdateStreamRequest { + option deprecated = true; + + string egress_id = 1 [(logger.name) = "egressID"]; + repeated string add_output_urls = 2; + repeated string remove_output_urls = 3; +} + +message StreamInfoList { + option deprecated = true; + + repeated StreamInfo info = 1; +} diff --git a/protobufs/rpc/egress.proto b/protobufs/rpc/egress.proto index 8ce476711..8eabe7ee3 100644 --- a/protobufs/rpc/egress.proto +++ b/protobufs/rpc/egress.proto @@ -48,11 +48,15 @@ message StartEgressRequest { // request oneof request { - livekit.RoomCompositeEgressRequest room_composite = 5; - livekit.WebEgressRequest web = 11; - livekit.ParticipantEgressRequest participant = 13; - livekit.TrackCompositeEgressRequest track_composite = 6; - livekit.TrackEgressRequest track = 7; + livekit.StartEgressRequest egress = 16; + livekit.ExportReplayRequest replay = 17; + + // --- deprecated --- + livekit.RoomCompositeEgressRequest room_composite = 5 [deprecated = true]; + livekit.WebEgressRequest web = 11 [deprecated = true]; + livekit.ParticipantEgressRequest participant = 13 [deprecated = true]; + livekit.TrackCompositeEgressRequest track_composite = 6 [deprecated = true]; + livekit.TrackEgressRequest track = 7 [deprecated = true]; } // connection info From b8653abda65d36e1727090d3ad56c2b851be52fd Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:11:32 +0000 Subject: [PATCH 02/10] generated protobuf --- livekit/livekit_egress.pb.go | 5504 +++++++++++++++++++++---------- livekit/livekit_egress.twirp.go | 1907 +++++++---- replay/cloud_replay.pb.go | 240 +- replay/cloud_replay.twirp.go | 731 ++-- rpc/egress.pb.go | 118 +- rpc/egress.psrpc.go | 81 +- 6 files changed, 5705 insertions(+), 2876 deletions(-) diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index 1bc0c4d4a..ddab641d6 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -36,6 +36,119 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type AudioChannel int32 + +const ( + AudioChannel_AUDIO_CHANNEL_BOTH AudioChannel = 0 + AudioChannel_AUDIO_CHANNEL_LEFT AudioChannel = 1 + AudioChannel_AUDIO_CHANNEL_RIGHT AudioChannel = 2 +) + +// Enum value maps for AudioChannel. +var ( + AudioChannel_name = map[int32]string{ + 0: "AUDIO_CHANNEL_BOTH", + 1: "AUDIO_CHANNEL_LEFT", + 2: "AUDIO_CHANNEL_RIGHT", + } + AudioChannel_value = map[string]int32{ + "AUDIO_CHANNEL_BOTH": 0, + "AUDIO_CHANNEL_LEFT": 1, + "AUDIO_CHANNEL_RIGHT": 2, + } +) + +func (x AudioChannel) Enum() *AudioChannel { + p := new(AudioChannel) + *p = x + return p +} + +func (x AudioChannel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AudioChannel) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_egress_proto_enumTypes[0].Descriptor() +} + +func (AudioChannel) Type() protoreflect.EnumType { + return &file_livekit_egress_proto_enumTypes[0] +} + +func (x AudioChannel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AudioChannel.Descriptor instead. +func (AudioChannel) EnumDescriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{0} +} + +type EncodingOptionsPreset int32 + +const ( + EncodingOptionsPreset_H264_720P_30 EncodingOptionsPreset = 0 // 1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS + EncodingOptionsPreset_H264_720P_60 EncodingOptionsPreset = 1 // 1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS + EncodingOptionsPreset_H264_1080P_30 EncodingOptionsPreset = 2 // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS + EncodingOptionsPreset_H264_1080P_60 EncodingOptionsPreset = 3 // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS + EncodingOptionsPreset_PORTRAIT_H264_720P_30 EncodingOptionsPreset = 4 // 720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS + EncodingOptionsPreset_PORTRAIT_H264_720P_60 EncodingOptionsPreset = 5 // 720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS + EncodingOptionsPreset_PORTRAIT_H264_1080P_30 EncodingOptionsPreset = 6 // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS + EncodingOptionsPreset_PORTRAIT_H264_1080P_60 EncodingOptionsPreset = 7 // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS +) + +// Enum value maps for EncodingOptionsPreset. +var ( + EncodingOptionsPreset_name = map[int32]string{ + 0: "H264_720P_30", + 1: "H264_720P_60", + 2: "H264_1080P_30", + 3: "H264_1080P_60", + 4: "PORTRAIT_H264_720P_30", + 5: "PORTRAIT_H264_720P_60", + 6: "PORTRAIT_H264_1080P_30", + 7: "PORTRAIT_H264_1080P_60", + } + EncodingOptionsPreset_value = map[string]int32{ + "H264_720P_30": 0, + "H264_720P_60": 1, + "H264_1080P_30": 2, + "H264_1080P_60": 3, + "PORTRAIT_H264_720P_30": 4, + "PORTRAIT_H264_720P_60": 5, + "PORTRAIT_H264_1080P_30": 6, + "PORTRAIT_H264_1080P_60": 7, + } +) + +func (x EncodingOptionsPreset) Enum() *EncodingOptionsPreset { + p := new(EncodingOptionsPreset) + *p = x + return p +} + +func (x EncodingOptionsPreset) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EncodingOptionsPreset) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_egress_proto_enumTypes[1].Descriptor() +} + +func (EncodingOptionsPreset) Type() protoreflect.EnumType { + return &file_livekit_egress_proto_enumTypes[1] +} + +func (x EncodingOptionsPreset) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EncodingOptionsPreset.Descriptor instead. +func (EncodingOptionsPreset) EnumDescriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{1} +} + type EncodedFileType int32 const ( @@ -72,11 +185,11 @@ func (x EncodedFileType) String() string { } func (EncodedFileType) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[0].Descriptor() + return file_livekit_egress_proto_enumTypes[2].Descriptor() } func (EncodedFileType) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[0] + return &file_livekit_egress_proto_enumTypes[2] } func (x EncodedFileType) Number() protoreflect.EnumNumber { @@ -85,7 +198,59 @@ func (x EncodedFileType) Number() protoreflect.EnumNumber { // Deprecated: Use EncodedFileType.Descriptor instead. func (EncodedFileType) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{0} + return file_livekit_egress_proto_rawDescGZIP(), []int{2} +} + +type StreamProtocol int32 + +const ( + StreamProtocol_DEFAULT_PROTOCOL StreamProtocol = 0 // protocol chosen based on urls + StreamProtocol_RTMP StreamProtocol = 1 + StreamProtocol_SRT StreamProtocol = 2 + StreamProtocol_WEBSOCKET StreamProtocol = 3 +) + +// Enum value maps for StreamProtocol. +var ( + StreamProtocol_name = map[int32]string{ + 0: "DEFAULT_PROTOCOL", + 1: "RTMP", + 2: "SRT", + 3: "WEBSOCKET", + } + StreamProtocol_value = map[string]int32{ + "DEFAULT_PROTOCOL": 0, + "RTMP": 1, + "SRT": 2, + "WEBSOCKET": 3, + } +) + +func (x StreamProtocol) Enum() *StreamProtocol { + p := new(StreamProtocol) + *p = x + return p +} + +func (x StreamProtocol) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StreamProtocol) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_egress_proto_enumTypes[3].Descriptor() +} + +func (StreamProtocol) Type() protoreflect.EnumType { + return &file_livekit_egress_proto_enumTypes[3] +} + +func (x StreamProtocol) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StreamProtocol.Descriptor instead. +func (StreamProtocol) EnumDescriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{3} } type SegmentedFileProtocol int32 @@ -118,11 +283,11 @@ func (x SegmentedFileProtocol) String() string { } func (SegmentedFileProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[1].Descriptor() + return file_livekit_egress_proto_enumTypes[4].Descriptor() } func (SegmentedFileProtocol) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[1] + return &file_livekit_egress_proto_enumTypes[4] } func (x SegmentedFileProtocol) Number() protoreflect.EnumNumber { @@ -131,7 +296,7 @@ func (x SegmentedFileProtocol) Number() protoreflect.EnumNumber { // Deprecated: Use SegmentedFileProtocol.Descriptor instead. func (SegmentedFileProtocol) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{1} + return file_livekit_egress_proto_rawDescGZIP(), []int{4} } type SegmentedFileSuffix int32 @@ -164,11 +329,11 @@ func (x SegmentedFileSuffix) String() string { } func (SegmentedFileSuffix) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[2].Descriptor() + return file_livekit_egress_proto_enumTypes[5].Descriptor() } func (SegmentedFileSuffix) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[2] + return &file_livekit_egress_proto_enumTypes[5] } func (x SegmentedFileSuffix) Number() protoreflect.EnumNumber { @@ -177,7 +342,7 @@ func (x SegmentedFileSuffix) Number() protoreflect.EnumNumber { // Deprecated: Use SegmentedFileSuffix.Descriptor instead. func (SegmentedFileSuffix) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{2} + return file_livekit_egress_proto_rawDescGZIP(), []int{5} } type ImageFileSuffix int32 @@ -213,11 +378,11 @@ func (x ImageFileSuffix) String() string { } func (ImageFileSuffix) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[3].Descriptor() + return file_livekit_egress_proto_enumTypes[6].Descriptor() } func (ImageFileSuffix) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[3] + return &file_livekit_egress_proto_enumTypes[6] } func (x ImageFileSuffix) Number() protoreflect.EnumNumber { @@ -226,221 +391,105 @@ func (x ImageFileSuffix) Number() protoreflect.EnumNumber { // Deprecated: Use ImageFileSuffix.Descriptor instead. func (ImageFileSuffix) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{3} + return file_livekit_egress_proto_rawDescGZIP(), []int{6} } -type StreamProtocol int32 +type EgressSourceType int32 const ( - StreamProtocol_DEFAULT_PROTOCOL StreamProtocol = 0 // protocol chosen based on urls - StreamProtocol_RTMP StreamProtocol = 1 - StreamProtocol_SRT StreamProtocol = 2 + EgressSourceType_EGRESS_SOURCE_TYPE_WEB EgressSourceType = 0 + EgressSourceType_EGRESS_SOURCE_TYPE_SDK EgressSourceType = 1 ) -// Enum value maps for StreamProtocol. +// Enum value maps for EgressSourceType. var ( - StreamProtocol_name = map[int32]string{ - 0: "DEFAULT_PROTOCOL", - 1: "RTMP", - 2: "SRT", + EgressSourceType_name = map[int32]string{ + 0: "EGRESS_SOURCE_TYPE_WEB", + 1: "EGRESS_SOURCE_TYPE_SDK", } - StreamProtocol_value = map[string]int32{ - "DEFAULT_PROTOCOL": 0, - "RTMP": 1, - "SRT": 2, + EgressSourceType_value = map[string]int32{ + "EGRESS_SOURCE_TYPE_WEB": 0, + "EGRESS_SOURCE_TYPE_SDK": 1, } ) -func (x StreamProtocol) Enum() *StreamProtocol { - p := new(StreamProtocol) +func (x EgressSourceType) Enum() *EgressSourceType { + p := new(EgressSourceType) *p = x return p } -func (x StreamProtocol) String() string { +func (x EgressSourceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (StreamProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[4].Descriptor() +func (EgressSourceType) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_egress_proto_enumTypes[7].Descriptor() } -func (StreamProtocol) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[4] +func (EgressSourceType) Type() protoreflect.EnumType { + return &file_livekit_egress_proto_enumTypes[7] } -func (x StreamProtocol) Number() protoreflect.EnumNumber { +func (x EgressSourceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use StreamProtocol.Descriptor instead. -func (StreamProtocol) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{4} +// Deprecated: Use EgressSourceType.Descriptor instead. +func (EgressSourceType) EnumDescriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{7} } -type AudioMixing int32 +type EgressStatus int32 const ( - AudioMixing_DEFAULT_MIXING AudioMixing = 0 // all users are mixed together - AudioMixing_DUAL_CHANNEL_AGENT AudioMixing = 1 // agent audio in the left channel, all other audio in the right channel - AudioMixing_DUAL_CHANNEL_ALTERNATE AudioMixing = 2 // each new audio track alternates between left and right channels + EgressStatus_EGRESS_STARTING EgressStatus = 0 + EgressStatus_EGRESS_ACTIVE EgressStatus = 1 + EgressStatus_EGRESS_ENDING EgressStatus = 2 + EgressStatus_EGRESS_COMPLETE EgressStatus = 3 + EgressStatus_EGRESS_FAILED EgressStatus = 4 + EgressStatus_EGRESS_ABORTED EgressStatus = 5 + EgressStatus_EGRESS_LIMIT_REACHED EgressStatus = 6 ) -// Enum value maps for AudioMixing. +// Enum value maps for EgressStatus. var ( - AudioMixing_name = map[int32]string{ - 0: "DEFAULT_MIXING", - 1: "DUAL_CHANNEL_AGENT", - 2: "DUAL_CHANNEL_ALTERNATE", + EgressStatus_name = map[int32]string{ + 0: "EGRESS_STARTING", + 1: "EGRESS_ACTIVE", + 2: "EGRESS_ENDING", + 3: "EGRESS_COMPLETE", + 4: "EGRESS_FAILED", + 5: "EGRESS_ABORTED", + 6: "EGRESS_LIMIT_REACHED", } - AudioMixing_value = map[string]int32{ - "DEFAULT_MIXING": 0, - "DUAL_CHANNEL_AGENT": 1, - "DUAL_CHANNEL_ALTERNATE": 2, + EgressStatus_value = map[string]int32{ + "EGRESS_STARTING": 0, + "EGRESS_ACTIVE": 1, + "EGRESS_ENDING": 2, + "EGRESS_COMPLETE": 3, + "EGRESS_FAILED": 4, + "EGRESS_ABORTED": 5, + "EGRESS_LIMIT_REACHED": 6, } ) -func (x AudioMixing) Enum() *AudioMixing { - p := new(AudioMixing) +func (x EgressStatus) Enum() *EgressStatus { + p := new(EgressStatus) *p = x return p } -func (x AudioMixing) String() string { +func (x EgressStatus) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (AudioMixing) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[5].Descriptor() -} - -func (AudioMixing) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[5] -} - -func (x AudioMixing) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AudioMixing.Descriptor instead. -func (AudioMixing) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{5} -} - -type EncodingOptionsPreset int32 - -const ( - EncodingOptionsPreset_H264_720P_30 EncodingOptionsPreset = 0 // 1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS - EncodingOptionsPreset_H264_720P_60 EncodingOptionsPreset = 1 // 1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS - EncodingOptionsPreset_H264_1080P_30 EncodingOptionsPreset = 2 // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS - EncodingOptionsPreset_H264_1080P_60 EncodingOptionsPreset = 3 // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS - EncodingOptionsPreset_PORTRAIT_H264_720P_30 EncodingOptionsPreset = 4 // 720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS - EncodingOptionsPreset_PORTRAIT_H264_720P_60 EncodingOptionsPreset = 5 // 720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS - EncodingOptionsPreset_PORTRAIT_H264_1080P_30 EncodingOptionsPreset = 6 // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS - EncodingOptionsPreset_PORTRAIT_H264_1080P_60 EncodingOptionsPreset = 7 // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS -) - -// Enum value maps for EncodingOptionsPreset. -var ( - EncodingOptionsPreset_name = map[int32]string{ - 0: "H264_720P_30", - 1: "H264_720P_60", - 2: "H264_1080P_30", - 3: "H264_1080P_60", - 4: "PORTRAIT_H264_720P_30", - 5: "PORTRAIT_H264_720P_60", - 6: "PORTRAIT_H264_1080P_30", - 7: "PORTRAIT_H264_1080P_60", - } - EncodingOptionsPreset_value = map[string]int32{ - "H264_720P_30": 0, - "H264_720P_60": 1, - "H264_1080P_30": 2, - "H264_1080P_60": 3, - "PORTRAIT_H264_720P_30": 4, - "PORTRAIT_H264_720P_60": 5, - "PORTRAIT_H264_1080P_30": 6, - "PORTRAIT_H264_1080P_60": 7, - } -) - -func (x EncodingOptionsPreset) Enum() *EncodingOptionsPreset { - p := new(EncodingOptionsPreset) - *p = x - return p -} - -func (x EncodingOptionsPreset) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (EncodingOptionsPreset) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[6].Descriptor() -} - -func (EncodingOptionsPreset) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[6] -} - -func (x EncodingOptionsPreset) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use EncodingOptionsPreset.Descriptor instead. -func (EncodingOptionsPreset) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{6} -} - -type EgressStatus int32 - -const ( - EgressStatus_EGRESS_STARTING EgressStatus = 0 - EgressStatus_EGRESS_ACTIVE EgressStatus = 1 - EgressStatus_EGRESS_ENDING EgressStatus = 2 - EgressStatus_EGRESS_COMPLETE EgressStatus = 3 - EgressStatus_EGRESS_FAILED EgressStatus = 4 - EgressStatus_EGRESS_ABORTED EgressStatus = 5 - EgressStatus_EGRESS_LIMIT_REACHED EgressStatus = 6 -) - -// Enum value maps for EgressStatus. -var ( - EgressStatus_name = map[int32]string{ - 0: "EGRESS_STARTING", - 1: "EGRESS_ACTIVE", - 2: "EGRESS_ENDING", - 3: "EGRESS_COMPLETE", - 4: "EGRESS_FAILED", - 5: "EGRESS_ABORTED", - 6: "EGRESS_LIMIT_REACHED", - } - EgressStatus_value = map[string]int32{ - "EGRESS_STARTING": 0, - "EGRESS_ACTIVE": 1, - "EGRESS_ENDING": 2, - "EGRESS_COMPLETE": 3, - "EGRESS_FAILED": 4, - "EGRESS_ABORTED": 5, - "EGRESS_LIMIT_REACHED": 6, - } -) - -func (x EgressStatus) Enum() *EgressStatus { - p := new(EgressStatus) - *p = x - return p -} - -func (x EgressStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (EgressStatus) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[7].Descriptor() +func (EgressStatus) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_egress_proto_enumTypes[8].Descriptor() } func (EgressStatus) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[7] + return &file_livekit_egress_proto_enumTypes[8] } func (x EgressStatus) Number() protoreflect.EnumNumber { @@ -449,53 +498,56 @@ func (x EgressStatus) Number() protoreflect.EnumNumber { // Deprecated: Use EgressStatus.Descriptor instead. func (EgressStatus) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{7} + return file_livekit_egress_proto_rawDescGZIP(), []int{8} } -type EgressSourceType int32 +type AudioMixing int32 const ( - EgressSourceType_EGRESS_SOURCE_TYPE_WEB EgressSourceType = 0 - EgressSourceType_EGRESS_SOURCE_TYPE_SDK EgressSourceType = 1 + AudioMixing_DEFAULT_MIXING AudioMixing = 0 + AudioMixing_DUAL_CHANNEL_AGENT AudioMixing = 1 + AudioMixing_DUAL_CHANNEL_ALTERNATE AudioMixing = 2 ) -// Enum value maps for EgressSourceType. +// Enum value maps for AudioMixing. var ( - EgressSourceType_name = map[int32]string{ - 0: "EGRESS_SOURCE_TYPE_WEB", - 1: "EGRESS_SOURCE_TYPE_SDK", + AudioMixing_name = map[int32]string{ + 0: "DEFAULT_MIXING", + 1: "DUAL_CHANNEL_AGENT", + 2: "DUAL_CHANNEL_ALTERNATE", } - EgressSourceType_value = map[string]int32{ - "EGRESS_SOURCE_TYPE_WEB": 0, - "EGRESS_SOURCE_TYPE_SDK": 1, + AudioMixing_value = map[string]int32{ + "DEFAULT_MIXING": 0, + "DUAL_CHANNEL_AGENT": 1, + "DUAL_CHANNEL_ALTERNATE": 2, } ) -func (x EgressSourceType) Enum() *EgressSourceType { - p := new(EgressSourceType) +func (x AudioMixing) Enum() *AudioMixing { + p := new(AudioMixing) *p = x return p } -func (x EgressSourceType) String() string { +func (x AudioMixing) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (EgressSourceType) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[8].Descriptor() +func (AudioMixing) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_egress_proto_enumTypes[9].Descriptor() } -func (EgressSourceType) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[8] +func (AudioMixing) Type() protoreflect.EnumType { + return &file_livekit_egress_proto_enumTypes[9] } -func (x EgressSourceType) Number() protoreflect.EnumNumber { +func (x AudioMixing) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use EgressSourceType.Descriptor instead. -func (EgressSourceType) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{8} +// Deprecated: Use AudioMixing.Descriptor instead. +func (AudioMixing) EnumDescriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{9} } type StreamInfo_Status int32 @@ -531,11 +583,11 @@ func (x StreamInfo_Status) String() string { } func (StreamInfo_Status) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_egress_proto_enumTypes[9].Descriptor() + return file_livekit_egress_proto_enumTypes[10].Descriptor() } func (StreamInfo_Status) Type() protoreflect.EnumType { - return &file_livekit_egress_proto_enumTypes[9] + return &file_livekit_egress_proto_enumTypes[10] } func (x StreamInfo_Status) Number() protoreflect.EnumNumber { @@ -544,52 +596,49 @@ func (x StreamInfo_Status) Number() protoreflect.EnumNumber { // Deprecated: Use StreamInfo_Status.Descriptor instead. func (StreamInfo_Status) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{23, 0} + return file_livekit_egress_proto_rawDescGZIP(), []int{27, 0} } -// composite using a web browser -type RoomCompositeEgressRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // required - Layout string `protobuf:"bytes,2,opt,name=layout,proto3" json:"layout,omitempty"` // (optional) - AudioOnly bool `protobuf:"varint,3,opt,name=audio_only,json=audioOnly,proto3" json:"audio_only,omitempty"` // (default false) - AudioMixing AudioMixing `protobuf:"varint,15,opt,name=audio_mixing,json=audioMixing,proto3,enum=livekit.AudioMixing" json:"audio_mixing,omitempty"` // only applies to audio_only egress (default DEFAULT_MIXING) - VideoOnly bool `protobuf:"varint,4,opt,name=video_only,json=videoOnly,proto3" json:"video_only,omitempty"` // (default false) - CustomBaseUrl string `protobuf:"bytes,5,opt,name=custom_base_url,json=customBaseUrl,proto3" json:"custom_base_url,omitempty"` // template base url (default https://recorder.livekit.io) - // Types that are valid to be assigned to Output: +type StartEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // Types that are valid to be assigned to Source: // - // *RoomCompositeEgressRequest_File - // *RoomCompositeEgressRequest_Stream - // *RoomCompositeEgressRequest_Segments - Output isRoomCompositeEgressRequest_Output `protobuf_oneof:"output"` - // Types that are valid to be assigned to Options: + // *StartEgressRequest_Template + // *StartEgressRequest_Web + // *StartEgressRequest_Media + Source isStartEgressRequest_Source `protobuf_oneof:"source"` + // Optional — default H264_720P_30 // - // *RoomCompositeEgressRequest_Preset - // *RoomCompositeEgressRequest_Advanced - Options isRoomCompositeEgressRequest_Options `protobuf_oneof:"options"` - FileOutputs []*EncodedFileOutput `protobuf:"bytes,11,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` - StreamOutputs []*StreamOutput `protobuf:"bytes,12,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` - SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,13,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` - ImageOutputs []*ImageOutput `protobuf:"bytes,14,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` - Webhooks []*WebhookConfig `protobuf:"bytes,16,rep,name=webhooks,proto3" json:"webhooks,omitempty"` // extra webhooks to call for this request - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Types that are valid to be assigned to Encoding: + // + // *StartEgressRequest_Preset + // *StartEgressRequest_Advanced + Encoding isStartEgressRequest_Encoding `protobuf_oneof:"encoding"` + // At least one required + Outputs []*Output `protobuf:"bytes,7,rep,name=outputs,proto3" json:"outputs,omitempty"` + // Request-level storage default + Storage *StorageConfig `protobuf:"bytes,8,opt,name=storage,proto3" json:"storage,omitempty"` + // Optional additional webhook config + Webhooks []*WebhookConfig `protobuf:"bytes,9,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *RoomCompositeEgressRequest) Reset() { - *x = RoomCompositeEgressRequest{} +func (x *StartEgressRequest) Reset() { + *x = StartEgressRequest{} mi := &file_livekit_egress_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *RoomCompositeEgressRequest) String() string { +func (x *StartEgressRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RoomCompositeEgressRequest) ProtoMessage() {} +func (*StartEgressRequest) ProtoMessage() {} -func (x *RoomCompositeEgressRequest) ProtoReflect() protoreflect.Message { +func (x *StartEgressRequest) ProtoReflect() protoreflect.Message { mi := &file_livekit_egress_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -601,233 +650,232 @@ func (x *RoomCompositeEgressRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RoomCompositeEgressRequest.ProtoReflect.Descriptor instead. -func (*RoomCompositeEgressRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use StartEgressRequest.ProtoReflect.Descriptor instead. +func (*StartEgressRequest) Descriptor() ([]byte, []int) { return file_livekit_egress_proto_rawDescGZIP(), []int{0} } -func (x *RoomCompositeEgressRequest) GetRoomName() string { +func (x *StartEgressRequest) GetRoomName() string { if x != nil { return x.RoomName } return "" } -func (x *RoomCompositeEgressRequest) GetLayout() string { +func (x *StartEgressRequest) GetSource() isStartEgressRequest_Source { if x != nil { - return x.Layout + return x.Source } - return "" + return nil } -func (x *RoomCompositeEgressRequest) GetAudioOnly() bool { +func (x *StartEgressRequest) GetTemplate() *TemplateSource { if x != nil { - return x.AudioOnly + if x, ok := x.Source.(*StartEgressRequest_Template); ok { + return x.Template + } } - return false + return nil } -func (x *RoomCompositeEgressRequest) GetAudioMixing() AudioMixing { +func (x *StartEgressRequest) GetWeb() *WebSource { if x != nil { - return x.AudioMixing + if x, ok := x.Source.(*StartEgressRequest_Web); ok { + return x.Web + } } - return AudioMixing_DEFAULT_MIXING + return nil } -func (x *RoomCompositeEgressRequest) GetVideoOnly() bool { +func (x *StartEgressRequest) GetMedia() *MediaSource { if x != nil { - return x.VideoOnly + if x, ok := x.Source.(*StartEgressRequest_Media); ok { + return x.Media + } } - return false + return nil } -func (x *RoomCompositeEgressRequest) GetCustomBaseUrl() string { +func (x *StartEgressRequest) GetEncoding() isStartEgressRequest_Encoding { if x != nil { - return x.CustomBaseUrl + return x.Encoding } - return "" + return nil } -func (x *RoomCompositeEgressRequest) GetOutput() isRoomCompositeEgressRequest_Output { +func (x *StartEgressRequest) GetPreset() EncodingOptionsPreset { if x != nil { - return x.Output + if x, ok := x.Encoding.(*StartEgressRequest_Preset); ok { + return x.Preset + } } - return nil + return EncodingOptionsPreset_H264_720P_30 } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *RoomCompositeEgressRequest) GetFile() *EncodedFileOutput { +func (x *StartEgressRequest) GetAdvanced() *EncodingOptions { if x != nil { - if x, ok := x.Output.(*RoomCompositeEgressRequest_File); ok { - return x.File + if x, ok := x.Encoding.(*StartEgressRequest_Advanced); ok { + return x.Advanced } } return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *RoomCompositeEgressRequest) GetStream() *StreamOutput { +func (x *StartEgressRequest) GetOutputs() []*Output { if x != nil { - if x, ok := x.Output.(*RoomCompositeEgressRequest_Stream); ok { - return x.Stream - } + return x.Outputs } return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *RoomCompositeEgressRequest) GetSegments() *SegmentedFileOutput { +func (x *StartEgressRequest) GetStorage() *StorageConfig { if x != nil { - if x, ok := x.Output.(*RoomCompositeEgressRequest_Segments); ok { - return x.Segments - } + return x.Storage } return nil } -func (x *RoomCompositeEgressRequest) GetOptions() isRoomCompositeEgressRequest_Options { +func (x *StartEgressRequest) GetWebhooks() []*WebhookConfig { if x != nil { - return x.Options + return x.Webhooks } return nil } -func (x *RoomCompositeEgressRequest) GetPreset() EncodingOptionsPreset { - if x != nil { - if x, ok := x.Options.(*RoomCompositeEgressRequest_Preset); ok { - return x.Preset - } - } - return EncodingOptionsPreset_H264_720P_30 +type isStartEgressRequest_Source interface { + isStartEgressRequest_Source() } -func (x *RoomCompositeEgressRequest) GetAdvanced() *EncodingOptions { - if x != nil { - if x, ok := x.Options.(*RoomCompositeEgressRequest_Advanced); ok { - return x.Advanced - } - } - return nil +type StartEgressRequest_Template struct { + Template *TemplateSource `protobuf:"bytes,2,opt,name=template,proto3,oneof"` } -func (x *RoomCompositeEgressRequest) GetFileOutputs() []*EncodedFileOutput { - if x != nil { - return x.FileOutputs - } - return nil +type StartEgressRequest_Web struct { + Web *WebSource `protobuf:"bytes,3,opt,name=web,proto3,oneof"` } -func (x *RoomCompositeEgressRequest) GetStreamOutputs() []*StreamOutput { - if x != nil { - return x.StreamOutputs - } - return nil +type StartEgressRequest_Media struct { + Media *MediaSource `protobuf:"bytes,4,opt,name=media,proto3,oneof"` } -func (x *RoomCompositeEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { - if x != nil { - return x.SegmentOutputs - } - return nil -} +func (*StartEgressRequest_Template) isStartEgressRequest_Source() {} -func (x *RoomCompositeEgressRequest) GetImageOutputs() []*ImageOutput { - if x != nil { - return x.ImageOutputs - } - return nil -} +func (*StartEgressRequest_Web) isStartEgressRequest_Source() {} -func (x *RoomCompositeEgressRequest) GetWebhooks() []*WebhookConfig { - if x != nil { - return x.Webhooks - } - return nil +func (*StartEgressRequest_Media) isStartEgressRequest_Source() {} + +type isStartEgressRequest_Encoding interface { + isStartEgressRequest_Encoding() } -type isRoomCompositeEgressRequest_Output interface { - isRoomCompositeEgressRequest_Output() +type StartEgressRequest_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,5,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` } -type RoomCompositeEgressRequest_File struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - File *EncodedFileOutput `protobuf:"bytes,6,opt,name=file,proto3,oneof"` +type StartEgressRequest_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,6,opt,name=advanced,proto3,oneof"` } -type RoomCompositeEgressRequest_Stream struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - Stream *StreamOutput `protobuf:"bytes,7,opt,name=stream,proto3,oneof"` +func (*StartEgressRequest_Preset) isStartEgressRequest_Encoding() {} + +func (*StartEgressRequest_Advanced) isStartEgressRequest_Encoding() {} + +// Room composite recording via layout template. +// Service generates token, constructs recorder URL, awaits start signal. +type TemplateSource struct { + state protoimpl.MessageState `protogen:"open.v1"` + Layout string `protobuf:"bytes,1,opt,name=layout,proto3" json:"layout,omitempty"` + AudioOnly bool `protobuf:"varint,2,opt,name=audio_only,json=audioOnly,proto3" json:"audio_only,omitempty"` + VideoOnly bool `protobuf:"varint,3,opt,name=video_only,json=videoOnly,proto3" json:"video_only,omitempty"` + CustomBaseUrl string `protobuf:"bytes,4,opt,name=custom_base_url,json=customBaseUrl,proto3" json:"custom_base_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type RoomCompositeEgressRequest_Segments struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - Segments *SegmentedFileOutput `protobuf:"bytes,10,opt,name=segments,proto3,oneof"` +func (x *TemplateSource) Reset() { + *x = TemplateSource{} + mi := &file_livekit_egress_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (*RoomCompositeEgressRequest_File) isRoomCompositeEgressRequest_Output() {} +func (x *TemplateSource) String() string { + return protoimpl.X.MessageStringOf(x) +} -func (*RoomCompositeEgressRequest_Stream) isRoomCompositeEgressRequest_Output() {} +func (*TemplateSource) ProtoMessage() {} -func (*RoomCompositeEgressRequest_Segments) isRoomCompositeEgressRequest_Output() {} +func (x *TemplateSource) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} -type isRoomCompositeEgressRequest_Options interface { - isRoomCompositeEgressRequest_Options() +// Deprecated: Use TemplateSource.ProtoReflect.Descriptor instead. +func (*TemplateSource) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{1} } -type RoomCompositeEgressRequest_Preset struct { - Preset EncodingOptionsPreset `protobuf:"varint,8,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` // (default H264_720P_30) +func (x *TemplateSource) GetLayout() string { + if x != nil { + return x.Layout + } + return "" } -type RoomCompositeEgressRequest_Advanced struct { - Advanced *EncodingOptions `protobuf:"bytes,9,opt,name=advanced,proto3,oneof"` // (optional) +func (x *TemplateSource) GetAudioOnly() bool { + if x != nil { + return x.AudioOnly + } + return false } -func (*RoomCompositeEgressRequest_Preset) isRoomCompositeEgressRequest_Options() {} +func (x *TemplateSource) GetVideoOnly() bool { + if x != nil { + return x.VideoOnly + } + return false +} -func (*RoomCompositeEgressRequest_Advanced) isRoomCompositeEgressRequest_Options() {} +func (x *TemplateSource) GetCustomBaseUrl() string { + if x != nil { + return x.CustomBaseUrl + } + return "" +} -// record any website -type WebEgressRequest struct { +// Record a custom URL via headless browser. +type WebSource struct { state protoimpl.MessageState `protogen:"open.v1"` Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` AudioOnly bool `protobuf:"varint,2,opt,name=audio_only,json=audioOnly,proto3" json:"audio_only,omitempty"` VideoOnly bool `protobuf:"varint,3,opt,name=video_only,json=videoOnly,proto3" json:"video_only,omitempty"` - AwaitStartSignal bool `protobuf:"varint,12,opt,name=await_start_signal,json=awaitStartSignal,proto3" json:"await_start_signal,omitempty"` - // Types that are valid to be assigned to Output: - // - // *WebEgressRequest_File - // *WebEgressRequest_Stream - // *WebEgressRequest_Segments - Output isWebEgressRequest_Output `protobuf_oneof:"output"` - // Types that are valid to be assigned to Options: - // - // *WebEgressRequest_Preset - // *WebEgressRequest_Advanced - Options isWebEgressRequest_Options `protobuf_oneof:"options"` - FileOutputs []*EncodedFileOutput `protobuf:"bytes,9,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` - StreamOutputs []*StreamOutput `protobuf:"bytes,10,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` - SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,11,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` - ImageOutputs []*ImageOutput `protobuf:"bytes,13,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` - Webhooks []*WebhookConfig `protobuf:"bytes,14,rep,name=webhooks,proto3" json:"webhooks,omitempty"` // extra webhooks to call for this request - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + AwaitStartSignal bool `protobuf:"varint,4,opt,name=await_start_signal,json=awaitStartSignal,proto3" json:"await_start_signal,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *WebEgressRequest) Reset() { - *x = WebEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[1] +func (x *WebSource) Reset() { + *x = WebSource{} + mi := &file_livekit_egress_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *WebEgressRequest) String() string { +func (x *WebSource) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WebEgressRequest) ProtoMessage() {} +func (*WebSource) ProtoMessage() {} -func (x *WebEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[1] +func (x *WebSource) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -838,212 +886,217 @@ func (x *WebEgressRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WebEgressRequest.ProtoReflect.Descriptor instead. -func (*WebEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{1} +// Deprecated: Use WebSource.ProtoReflect.Descriptor instead. +func (*WebSource) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{2} } -func (x *WebEgressRequest) GetUrl() string { +func (x *WebSource) GetUrl() string { if x != nil { return x.Url } return "" } -func (x *WebEgressRequest) GetAudioOnly() bool { +func (x *WebSource) GetAudioOnly() bool { if x != nil { return x.AudioOnly } return false } -func (x *WebEgressRequest) GetVideoOnly() bool { +func (x *WebSource) GetVideoOnly() bool { if x != nil { return x.VideoOnly } return false } -func (x *WebEgressRequest) GetAwaitStartSignal() bool { +func (x *WebSource) GetAwaitStartSignal() bool { if x != nil { return x.AwaitStartSignal } return false } -func (x *WebEgressRequest) GetOutput() isWebEgressRequest_Output { - if x != nil { - return x.Output - } - return nil +// Capture tracks directly from a room via SDK. +// Unifies deprecated Participant, TrackComposite, and Track egress. +type MediaSource struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Video: + // + // *MediaSource_VideoTrackId + // *MediaSource_ParticipantVideo + Video isMediaSource_Video `protobuf_oneof:"video"` + Audio *AudioConfig `protobuf:"bytes,3,opt,name=audio,proto3" json:"audio,omitempty"` + Data *DataConfig `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *WebEgressRequest) GetFile() *EncodedFileOutput { - if x != nil { - if x, ok := x.Output.(*WebEgressRequest_File); ok { - return x.File - } - } - return nil +func (x *MediaSource) Reset() { + *x = MediaSource{} + mi := &file_livekit_egress_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *WebEgressRequest) GetStream() *StreamOutput { - if x != nil { - if x, ok := x.Output.(*WebEgressRequest_Stream); ok { - return x.Stream - } - } - return nil +func (x *MediaSource) String() string { + return protoimpl.X.MessageStringOf(x) } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *WebEgressRequest) GetSegments() *SegmentedFileOutput { +func (*MediaSource) ProtoMessage() {} + +func (x *MediaSource) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[3] if x != nil { - if x, ok := x.Output.(*WebEgressRequest_Segments); ok { - return x.Segments + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return nil + return mi.MessageOf(x) } -func (x *WebEgressRequest) GetOptions() isWebEgressRequest_Options { +// Deprecated: Use MediaSource.ProtoReflect.Descriptor instead. +func (*MediaSource) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{3} +} + +func (x *MediaSource) GetVideo() isMediaSource_Video { if x != nil { - return x.Options + return x.Video } return nil } -func (x *WebEgressRequest) GetPreset() EncodingOptionsPreset { +func (x *MediaSource) GetVideoTrackId() string { if x != nil { - if x, ok := x.Options.(*WebEgressRequest_Preset); ok { - return x.Preset + if x, ok := x.Video.(*MediaSource_VideoTrackId); ok { + return x.VideoTrackId } } - return EncodingOptionsPreset_H264_720P_30 + return "" } -func (x *WebEgressRequest) GetAdvanced() *EncodingOptions { +func (x *MediaSource) GetParticipantVideo() *ParticipantVideo { if x != nil { - if x, ok := x.Options.(*WebEgressRequest_Advanced); ok { - return x.Advanced + if x, ok := x.Video.(*MediaSource_ParticipantVideo); ok { + return x.ParticipantVideo } } return nil } -func (x *WebEgressRequest) GetFileOutputs() []*EncodedFileOutput { +func (x *MediaSource) GetAudio() *AudioConfig { if x != nil { - return x.FileOutputs + return x.Audio } return nil } -func (x *WebEgressRequest) GetStreamOutputs() []*StreamOutput { +func (x *MediaSource) GetData() *DataConfig { if x != nil { - return x.StreamOutputs + return x.Data } return nil } -func (x *WebEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { - if x != nil { - return x.SegmentOutputs - } - return nil +type isMediaSource_Video interface { + isMediaSource_Video() } -func (x *WebEgressRequest) GetImageOutputs() []*ImageOutput { - if x != nil { - return x.ImageOutputs - } - return nil +type MediaSource_VideoTrackId struct { + VideoTrackId string `protobuf:"bytes,1,opt,name=video_track_id,json=videoTrackId,proto3,oneof"` } -func (x *WebEgressRequest) GetWebhooks() []*WebhookConfig { - if x != nil { - return x.Webhooks - } - return nil +type MediaSource_ParticipantVideo struct { + ParticipantVideo *ParticipantVideo `protobuf:"bytes,2,opt,name=participant_video,json=participantVideo,proto3,oneof"` } -type isWebEgressRequest_Output interface { - isWebEgressRequest_Output() -} +func (*MediaSource_VideoTrackId) isMediaSource_Video() {} -type WebEgressRequest_File struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - File *EncodedFileOutput `protobuf:"bytes,4,opt,name=file,proto3,oneof"` +func (*MediaSource_ParticipantVideo) isMediaSource_Video() {} + +type ParticipantVideo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + PreferScreenShare bool `protobuf:"varint,2,opt,name=prefer_screen_share,json=preferScreenShare,proto3" json:"prefer_screen_share,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type WebEgressRequest_Stream struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - Stream *StreamOutput `protobuf:"bytes,5,opt,name=stream,proto3,oneof"` +func (x *ParticipantVideo) Reset() { + *x = ParticipantVideo{} + mi := &file_livekit_egress_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type WebEgressRequest_Segments struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - Segments *SegmentedFileOutput `protobuf:"bytes,6,opt,name=segments,proto3,oneof"` +func (x *ParticipantVideo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*WebEgressRequest_File) isWebEgressRequest_Output() {} +func (*ParticipantVideo) ProtoMessage() {} -func (*WebEgressRequest_Stream) isWebEgressRequest_Output() {} +func (x *ParticipantVideo) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} -func (*WebEgressRequest_Segments) isWebEgressRequest_Output() {} +// Deprecated: Use ParticipantVideo.ProtoReflect.Descriptor instead. +func (*ParticipantVideo) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{4} +} -type isWebEgressRequest_Options interface { - isWebEgressRequest_Options() +func (x *ParticipantVideo) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" } -type WebEgressRequest_Preset struct { - Preset EncodingOptionsPreset `protobuf:"varint,7,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` +func (x *ParticipantVideo) GetPreferScreenShare() bool { + if x != nil { + return x.PreferScreenShare + } + return false } -type WebEgressRequest_Advanced struct { - Advanced *EncodingOptions `protobuf:"bytes,8,opt,name=advanced,proto3,oneof"` +// Unified audio selection and channel routing. +// Each route specifies both which audio to capture and which channel to output to. +type AudioConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + // If empty, all audio captured in both channels. + // If non-empty, only matching audio is captured and routed. Unmatched is excluded. + Routes []*AudioRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (*WebEgressRequest_Preset) isWebEgressRequest_Options() {} - -func (*WebEgressRequest_Advanced) isWebEgressRequest_Options() {} - -// record audio and video from a single participant -type ParticipantEgressRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // required - Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` // required - ScreenShare bool `protobuf:"varint,3,opt,name=screen_share,json=screenShare,proto3" json:"screen_share,omitempty"` // (default false) - // Types that are valid to be assigned to Options: - // - // *ParticipantEgressRequest_Preset - // *ParticipantEgressRequest_Advanced - Options isParticipantEgressRequest_Options `protobuf_oneof:"options"` - FileOutputs []*EncodedFileOutput `protobuf:"bytes,6,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` - StreamOutputs []*StreamOutput `protobuf:"bytes,7,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` - SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,8,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` - ImageOutputs []*ImageOutput `protobuf:"bytes,9,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` - Webhooks []*WebhookConfig `protobuf:"bytes,10,rep,name=webhooks,proto3" json:"webhooks,omitempty"` // extra webhooks to call for this request - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ParticipantEgressRequest) Reset() { - *x = ParticipantEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[2] +func (x *AudioConfig) Reset() { + *x = AudioConfig{} + mi := &file_livekit_egress_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ParticipantEgressRequest) String() string { +func (x *AudioConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ParticipantEgressRequest) ProtoMessage() {} +func (*AudioConfig) ProtoMessage() {} -func (x *ParticipantEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[2] +func (x *AudioConfig) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1054,149 +1107,148 @@ func (x *ParticipantEgressRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ParticipantEgressRequest.ProtoReflect.Descriptor instead. -func (*ParticipantEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{2} +// Deprecated: Use AudioConfig.ProtoReflect.Descriptor instead. +func (*AudioConfig) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{5} } -func (x *ParticipantEgressRequest) GetRoomName() string { +func (x *AudioConfig) GetRoutes() []*AudioRoute { if x != nil { - return x.RoomName + return x.Routes } - return "" + return nil } -func (x *ParticipantEgressRequest) GetIdentity() string { - if x != nil { - return x.Identity - } - return "" +type AudioRoute struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Match: + // + // *AudioRoute_TrackId + // *AudioRoute_ParticipantIdentity + // *AudioRoute_ParticipantKind + Match isAudioRoute_Match `protobuf_oneof:"match"` + Channel AudioChannel `protobuf:"varint,4,opt,name=channel,proto3,enum=livekit.AudioChannel" json:"channel,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ParticipantEgressRequest) GetScreenShare() bool { - if x != nil { - return x.ScreenShare - } - return false +func (x *AudioRoute) Reset() { + *x = AudioRoute{} + mi := &file_livekit_egress_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ParticipantEgressRequest) GetOptions() isParticipantEgressRequest_Options { - if x != nil { - return x.Options - } - return nil +func (x *AudioRoute) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ParticipantEgressRequest) GetPreset() EncodingOptionsPreset { +func (*AudioRoute) ProtoMessage() {} + +func (x *AudioRoute) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[6] if x != nil { - if x, ok := x.Options.(*ParticipantEgressRequest_Preset); ok { - return x.Preset + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return EncodingOptionsPreset_H264_720P_30 + return mi.MessageOf(x) } -func (x *ParticipantEgressRequest) GetAdvanced() *EncodingOptions { - if x != nil { - if x, ok := x.Options.(*ParticipantEgressRequest_Advanced); ok { - return x.Advanced - } - } - return nil +// Deprecated: Use AudioRoute.ProtoReflect.Descriptor instead. +func (*AudioRoute) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{6} } -func (x *ParticipantEgressRequest) GetFileOutputs() []*EncodedFileOutput { +func (x *AudioRoute) GetMatch() isAudioRoute_Match { if x != nil { - return x.FileOutputs + return x.Match } return nil } -func (x *ParticipantEgressRequest) GetStreamOutputs() []*StreamOutput { +func (x *AudioRoute) GetTrackId() string { if x != nil { - return x.StreamOutputs + if x, ok := x.Match.(*AudioRoute_TrackId); ok { + return x.TrackId + } } - return nil + return "" } -func (x *ParticipantEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { +func (x *AudioRoute) GetParticipantIdentity() string { if x != nil { - return x.SegmentOutputs + if x, ok := x.Match.(*AudioRoute_ParticipantIdentity); ok { + return x.ParticipantIdentity + } } - return nil + return "" } -func (x *ParticipantEgressRequest) GetImageOutputs() []*ImageOutput { +func (x *AudioRoute) GetParticipantKind() ParticipantInfo_Kind { if x != nil { - return x.ImageOutputs + if x, ok := x.Match.(*AudioRoute_ParticipantKind); ok { + return x.ParticipantKind + } } - return nil + return ParticipantInfo_STANDARD } -func (x *ParticipantEgressRequest) GetWebhooks() []*WebhookConfig { +func (x *AudioRoute) GetChannel() AudioChannel { if x != nil { - return x.Webhooks + return x.Channel } - return nil + return AudioChannel_AUDIO_CHANNEL_BOTH } -type isParticipantEgressRequest_Options interface { - isParticipantEgressRequest_Options() +type isAudioRoute_Match interface { + isAudioRoute_Match() } -type ParticipantEgressRequest_Preset struct { - Preset EncodingOptionsPreset `protobuf:"varint,4,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` // (default H264_720P_30) +type AudioRoute_TrackId struct { + TrackId string `protobuf:"bytes,1,opt,name=track_id,json=trackId,proto3,oneof"` } -type ParticipantEgressRequest_Advanced struct { - Advanced *EncodingOptions `protobuf:"bytes,5,opt,name=advanced,proto3,oneof"` // (optional) +type AudioRoute_ParticipantIdentity struct { + ParticipantIdentity string `protobuf:"bytes,2,opt,name=participant_identity,json=participantIdentity,proto3,oneof"` } -func (*ParticipantEgressRequest_Preset) isParticipantEgressRequest_Options() {} +type AudioRoute_ParticipantKind struct { + ParticipantKind ParticipantInfo_Kind `protobuf:"varint,3,opt,name=participant_kind,json=participantKind,proto3,enum=livekit.ParticipantInfo_Kind,oneof"` +} -func (*ParticipantEgressRequest_Advanced) isParticipantEgressRequest_Options() {} +func (*AudioRoute_TrackId) isAudioRoute_Match() {} -// containerize up to one audio and one video track -type TrackCompositeEgressRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // required - AudioTrackId string `protobuf:"bytes,2,opt,name=audio_track_id,json=audioTrackId,proto3" json:"audio_track_id,omitempty"` // (optional) - VideoTrackId string `protobuf:"bytes,3,opt,name=video_track_id,json=videoTrackId,proto3" json:"video_track_id,omitempty"` // (optional) - // Types that are valid to be assigned to Output: - // - // *TrackCompositeEgressRequest_File - // *TrackCompositeEgressRequest_Stream - // *TrackCompositeEgressRequest_Segments - Output isTrackCompositeEgressRequest_Output `protobuf_oneof:"output"` - // Types that are valid to be assigned to Options: - // - // *TrackCompositeEgressRequest_Preset - // *TrackCompositeEgressRequest_Advanced - Options isTrackCompositeEgressRequest_Options `protobuf_oneof:"options"` - FileOutputs []*EncodedFileOutput `protobuf:"bytes,11,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` - StreamOutputs []*StreamOutput `protobuf:"bytes,12,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` - SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,13,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` - ImageOutputs []*ImageOutput `protobuf:"bytes,14,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` - Webhooks []*WebhookConfig `protobuf:"bytes,15,rep,name=webhooks,proto3" json:"webhooks,omitempty"` // extra webhooks to call for this request - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +func (*AudioRoute_ParticipantIdentity) isAudioRoute_Match() {} + +func (*AudioRoute_ParticipantKind) isAudioRoute_Match() {} + +type DataConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + // If empty, all data tracks captured. + // If non-empty, only matching data tracks are captured. + Selectors []*DataSelector `protobuf:"bytes,1,rep,name=selectors,proto3" json:"selectors,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TrackCompositeEgressRequest) Reset() { - *x = TrackCompositeEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[3] +func (x *DataConfig) Reset() { + *x = DataConfig{} + mi := &file_livekit_egress_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TrackCompositeEgressRequest) String() string { +func (x *DataConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TrackCompositeEgressRequest) ProtoMessage() {} +func (*DataConfig) ProtoMessage() {} -func (x *TrackCompositeEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[3] +func (x *DataConfig) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1207,200 +1259,149 @@ func (x *TrackCompositeEgressRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TrackCompositeEgressRequest.ProtoReflect.Descriptor instead. -func (*TrackCompositeEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{3} +// Deprecated: Use DataConfig.ProtoReflect.Descriptor instead. +func (*DataConfig) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{7} } -func (x *TrackCompositeEgressRequest) GetRoomName() string { +func (x *DataConfig) GetSelectors() []*DataSelector { if x != nil { - return x.RoomName + return x.Selectors } - return "" + return nil } -func (x *TrackCompositeEgressRequest) GetAudioTrackId() string { - if x != nil { - return x.AudioTrackId - } - return "" +type DataSelector struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Match: + // + // *DataSelector_TrackId + // *DataSelector_ParticipantIdentity + // *DataSelector_Topic + Match isDataSelector_Match `protobuf_oneof:"match"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TrackCompositeEgressRequest) GetVideoTrackId() string { - if x != nil { - return x.VideoTrackId - } - return "" +func (x *DataSelector) Reset() { + *x = DataSelector{} + mi := &file_livekit_egress_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TrackCompositeEgressRequest) GetOutput() isTrackCompositeEgressRequest_Output { - if x != nil { - return x.Output - } - return nil +func (x *DataSelector) String() string { + return protoimpl.X.MessageStringOf(x) } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *TrackCompositeEgressRequest) GetFile() *EncodedFileOutput { - if x != nil { - if x, ok := x.Output.(*TrackCompositeEgressRequest_File); ok { - return x.File - } - } - return nil -} +func (*DataSelector) ProtoMessage() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *TrackCompositeEgressRequest) GetStream() *StreamOutput { +func (x *DataSelector) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[8] if x != nil { - if x, ok := x.Output.(*TrackCompositeEgressRequest_Stream); ok { - return x.Stream + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return nil + return mi.MessageOf(x) } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *TrackCompositeEgressRequest) GetSegments() *SegmentedFileOutput { - if x != nil { - if x, ok := x.Output.(*TrackCompositeEgressRequest_Segments); ok { - return x.Segments - } - } - return nil +// Deprecated: Use DataSelector.ProtoReflect.Descriptor instead. +func (*DataSelector) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{8} } -func (x *TrackCompositeEgressRequest) GetOptions() isTrackCompositeEgressRequest_Options { +func (x *DataSelector) GetMatch() isDataSelector_Match { if x != nil { - return x.Options + return x.Match } return nil } -func (x *TrackCompositeEgressRequest) GetPreset() EncodingOptionsPreset { +func (x *DataSelector) GetTrackId() string { if x != nil { - if x, ok := x.Options.(*TrackCompositeEgressRequest_Preset); ok { - return x.Preset + if x, ok := x.Match.(*DataSelector_TrackId); ok { + return x.TrackId } } - return EncodingOptionsPreset_H264_720P_30 + return "" } -func (x *TrackCompositeEgressRequest) GetAdvanced() *EncodingOptions { +func (x *DataSelector) GetParticipantIdentity() string { if x != nil { - if x, ok := x.Options.(*TrackCompositeEgressRequest_Advanced); ok { - return x.Advanced + if x, ok := x.Match.(*DataSelector_ParticipantIdentity); ok { + return x.ParticipantIdentity } } - return nil -} - -func (x *TrackCompositeEgressRequest) GetFileOutputs() []*EncodedFileOutput { - if x != nil { - return x.FileOutputs - } - return nil -} - -func (x *TrackCompositeEgressRequest) GetStreamOutputs() []*StreamOutput { - if x != nil { - return x.StreamOutputs - } - return nil -} - -func (x *TrackCompositeEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { - if x != nil { - return x.SegmentOutputs - } - return nil -} - -func (x *TrackCompositeEgressRequest) GetImageOutputs() []*ImageOutput { - if x != nil { - return x.ImageOutputs - } - return nil + return "" } -func (x *TrackCompositeEgressRequest) GetWebhooks() []*WebhookConfig { +func (x *DataSelector) GetTopic() string { if x != nil { - return x.Webhooks + if x, ok := x.Match.(*DataSelector_Topic); ok { + return x.Topic + } } - return nil + return "" } -type isTrackCompositeEgressRequest_Output interface { - isTrackCompositeEgressRequest_Output() +type isDataSelector_Match interface { + isDataSelector_Match() } -type TrackCompositeEgressRequest_File struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - File *EncodedFileOutput `protobuf:"bytes,4,opt,name=file,proto3,oneof"` +type DataSelector_TrackId struct { + TrackId string `protobuf:"bytes,1,opt,name=track_id,json=trackId,proto3,oneof"` } -type TrackCompositeEgressRequest_Stream struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - Stream *StreamOutput `protobuf:"bytes,5,opt,name=stream,proto3,oneof"` +type DataSelector_ParticipantIdentity struct { + ParticipantIdentity string `protobuf:"bytes,2,opt,name=participant_identity,json=participantIdentity,proto3,oneof"` } -type TrackCompositeEgressRequest_Segments struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. - Segments *SegmentedFileOutput `protobuf:"bytes,8,opt,name=segments,proto3,oneof"` +type DataSelector_Topic struct { + Topic string `protobuf:"bytes,3,opt,name=topic,proto3,oneof"` } -func (*TrackCompositeEgressRequest_File) isTrackCompositeEgressRequest_Output() {} +func (*DataSelector_TrackId) isDataSelector_Match() {} -func (*TrackCompositeEgressRequest_Stream) isTrackCompositeEgressRequest_Output() {} +func (*DataSelector_ParticipantIdentity) isDataSelector_Match() {} -func (*TrackCompositeEgressRequest_Segments) isTrackCompositeEgressRequest_Output() {} +func (*DataSelector_Topic) isDataSelector_Match() {} -type isTrackCompositeEgressRequest_Options interface { - isTrackCompositeEgressRequest_Options() -} - -type TrackCompositeEgressRequest_Preset struct { - Preset EncodingOptionsPreset `protobuf:"varint,6,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` // (default H264_720P_30) -} - -type TrackCompositeEgressRequest_Advanced struct { - Advanced *EncodingOptions `protobuf:"bytes,7,opt,name=advanced,proto3,oneof"` // (optional) -} - -func (*TrackCompositeEgressRequest_Preset) isTrackCompositeEgressRequest_Options() {} - -func (*TrackCompositeEgressRequest_Advanced) isTrackCompositeEgressRequest_Options() {} - -// record tracks individually, without transcoding -type TrackEgressRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // required - TrackId string `protobuf:"bytes,2,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` // required - // Types that are valid to be assigned to Output: - // - // *TrackEgressRequest_File - // *TrackEgressRequest_WebsocketUrl - Output isTrackEgressRequest_Output `protobuf_oneof:"output"` - Webhooks []*WebhookConfig `protobuf:"bytes,5,rep,name=webhooks,proto3" json:"webhooks,omitempty"` // extra webhooks to call for this request - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type EncodingOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + Width int32 `protobuf:"varint,1,opt,name=width,proto3" json:"width,omitempty"` // (default 1920) + Height int32 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` // (default 1080) + Depth int32 `protobuf:"varint,3,opt,name=depth,proto3" json:"depth,omitempty"` // (default 24) + Framerate int32 `protobuf:"varint,4,opt,name=framerate,proto3" json:"framerate,omitempty"` // (default 30) + AudioCodec AudioCodec `protobuf:"varint,5,opt,name=audio_codec,json=audioCodec,proto3,enum=livekit.AudioCodec" json:"audio_codec,omitempty"` // (default OPUS) + AudioBitrate int32 `protobuf:"varint,6,opt,name=audio_bitrate,json=audioBitrate,proto3" json:"audio_bitrate,omitempty"` // (default 128) + AudioQuality int32 `protobuf:"varint,11,opt,name=audio_quality,json=audioQuality,proto3" json:"audio_quality,omitempty"` // quality setting on audio encoder + AudioFrequency int32 `protobuf:"varint,7,opt,name=audio_frequency,json=audioFrequency,proto3" json:"audio_frequency,omitempty"` // (default 44100) + VideoCodec VideoCodec `protobuf:"varint,8,opt,name=video_codec,json=videoCodec,proto3,enum=livekit.VideoCodec" json:"video_codec,omitempty"` // (default H264_MAIN) + VideoBitrate int32 `protobuf:"varint,9,opt,name=video_bitrate,json=videoBitrate,proto3" json:"video_bitrate,omitempty"` // (default 4500) + VideoQuality int32 `protobuf:"varint,12,opt,name=video_quality,json=videoQuality,proto3" json:"video_quality,omitempty"` // quality setting on video encoder + KeyFrameInterval float64 `protobuf:"fixed64,10,opt,name=key_frame_interval,json=keyFrameInterval,proto3" json:"key_frame_interval,omitempty"` // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TrackEgressRequest) Reset() { - *x = TrackEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[4] +func (x *EncodingOptions) Reset() { + *x = EncodingOptions{} + mi := &file_livekit_egress_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TrackEgressRequest) String() string { +func (x *EncodingOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TrackEgressRequest) ProtoMessage() {} +func (*EncodingOptions) ProtoMessage() {} -func (x *TrackEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[4] +func (x *EncodingOptions) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1411,104 +1412,126 @@ func (x *TrackEgressRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TrackEgressRequest.ProtoReflect.Descriptor instead. -func (*TrackEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{4} +// Deprecated: Use EncodingOptions.ProtoReflect.Descriptor instead. +func (*EncodingOptions) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{9} } -func (x *TrackEgressRequest) GetRoomName() string { +func (x *EncodingOptions) GetWidth() int32 { if x != nil { - return x.RoomName + return x.Width } - return "" + return 0 } -func (x *TrackEgressRequest) GetTrackId() string { +func (x *EncodingOptions) GetHeight() int32 { if x != nil { - return x.TrackId + return x.Height } - return "" + return 0 } -func (x *TrackEgressRequest) GetOutput() isTrackEgressRequest_Output { +func (x *EncodingOptions) GetDepth() int32 { if x != nil { - return x.Output + return x.Depth } - return nil + return 0 } -func (x *TrackEgressRequest) GetFile() *DirectFileOutput { +func (x *EncodingOptions) GetFramerate() int32 { if x != nil { - if x, ok := x.Output.(*TrackEgressRequest_File); ok { - return x.File - } + return x.Framerate } - return nil + return 0 } -func (x *TrackEgressRequest) GetWebsocketUrl() string { +func (x *EncodingOptions) GetAudioCodec() AudioCodec { if x != nil { - if x, ok := x.Output.(*TrackEgressRequest_WebsocketUrl); ok { - return x.WebsocketUrl - } + return x.AudioCodec } - return "" + return AudioCodec_DEFAULT_AC } -func (x *TrackEgressRequest) GetWebhooks() []*WebhookConfig { +func (x *EncodingOptions) GetAudioBitrate() int32 { if x != nil { - return x.Webhooks + return x.AudioBitrate } - return nil + return 0 } -type isTrackEgressRequest_Output interface { - isTrackEgressRequest_Output() +func (x *EncodingOptions) GetAudioQuality() int32 { + if x != nil { + return x.AudioQuality + } + return 0 } -type TrackEgressRequest_File struct { - File *DirectFileOutput `protobuf:"bytes,3,opt,name=file,proto3,oneof"` +func (x *EncodingOptions) GetAudioFrequency() int32 { + if x != nil { + return x.AudioFrequency + } + return 0 } -type TrackEgressRequest_WebsocketUrl struct { - WebsocketUrl string `protobuf:"bytes,4,opt,name=websocket_url,json=websocketUrl,proto3,oneof"` +func (x *EncodingOptions) GetVideoCodec() VideoCodec { + if x != nil { + return x.VideoCodec + } + return VideoCodec_DEFAULT_VC } -func (*TrackEgressRequest_File) isTrackEgressRequest_Output() {} +func (x *EncodingOptions) GetVideoBitrate() int32 { + if x != nil { + return x.VideoBitrate + } + return 0 +} -func (*TrackEgressRequest_WebsocketUrl) isTrackEgressRequest_Output() {} +func (x *EncodingOptions) GetVideoQuality() int32 { + if x != nil { + return x.VideoQuality + } + return 0 +} -type EncodedFileOutput struct { - state protoimpl.MessageState `protogen:"open.v1"` - FileType EncodedFileType `protobuf:"varint,1,opt,name=file_type,json=fileType,proto3,enum=livekit.EncodedFileType" json:"file_type,omitempty"` // (optional) - Filepath string `protobuf:"bytes,2,opt,name=filepath,proto3" json:"filepath,omitempty"` // see egress docs for templating (default {room_name}-{time}) - DisableManifest bool `protobuf:"varint,6,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` // disable upload of manifest file (default false) - // Types that are valid to be assigned to Output: +func (x *EncodingOptions) GetKeyFrameInterval() float64 { + if x != nil { + return x.KeyFrameInterval + } + return 0 +} + +type Output struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Config: // - // *EncodedFileOutput_S3 - // *EncodedFileOutput_Gcp - // *EncodedFileOutput_Azure - // *EncodedFileOutput_AliOSS - Output isEncodedFileOutput_Output `protobuf_oneof:"output"` + // *Output_File + // *Output_Stream + // *Output_Segments + // *Output_Images + // *Output_Mcap + Config isOutput_Config `protobuf_oneof:"config"` + // Per-output storage override (falls back to request, then server) + Storage *StorageConfig `protobuf:"bytes,6,opt,name=storage,proto3" json:"storage,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *EncodedFileOutput) Reset() { - *x = EncodedFileOutput{} - mi := &file_livekit_egress_proto_msgTypes[5] +func (x *Output) Reset() { + *x = Output{} + mi := &file_livekit_egress_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *EncodedFileOutput) String() string { +func (x *Output) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncodedFileOutput) ProtoMessage() {} +func (*Output) ProtoMessage() {} -func (x *EncodedFileOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[5] +func (x *Output) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1519,139 +1542,130 @@ func (x *EncodedFileOutput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncodedFileOutput.ProtoReflect.Descriptor instead. -func (*EncodedFileOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{5} -} - -func (x *EncodedFileOutput) GetFileType() EncodedFileType { - if x != nil { - return x.FileType - } - return EncodedFileType_DEFAULT_FILETYPE +// Deprecated: Use Output.ProtoReflect.Descriptor instead. +func (*Output) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{10} } -func (x *EncodedFileOutput) GetFilepath() string { +func (x *Output) GetConfig() isOutput_Config { if x != nil { - return x.Filepath + return x.Config } - return "" + return nil } -func (x *EncodedFileOutput) GetDisableManifest() bool { +func (x *Output) GetFile() *FileOutput { if x != nil { - return x.DisableManifest + if x, ok := x.Config.(*Output_File); ok { + return x.File + } } - return false + return nil } -func (x *EncodedFileOutput) GetOutput() isEncodedFileOutput_Output { +func (x *Output) GetStream() *StreamOutput { if x != nil { - return x.Output + if x, ok := x.Config.(*Output_Stream); ok { + return x.Stream + } } return nil } -func (x *EncodedFileOutput) GetS3() *S3Upload { +func (x *Output) GetSegments() *SegmentedFileOutput { if x != nil { - if x, ok := x.Output.(*EncodedFileOutput_S3); ok { - return x.S3 + if x, ok := x.Config.(*Output_Segments); ok { + return x.Segments } } return nil } -func (x *EncodedFileOutput) GetGcp() *GCPUpload { +func (x *Output) GetImages() *ImageOutput { if x != nil { - if x, ok := x.Output.(*EncodedFileOutput_Gcp); ok { - return x.Gcp + if x, ok := x.Config.(*Output_Images); ok { + return x.Images } } return nil } -func (x *EncodedFileOutput) GetAzure() *AzureBlobUpload { +func (x *Output) GetMcap() *McapOutput { if x != nil { - if x, ok := x.Output.(*EncodedFileOutput_Azure); ok { - return x.Azure + if x, ok := x.Config.(*Output_Mcap); ok { + return x.Mcap } } return nil } -func (x *EncodedFileOutput) GetAliOSS() *AliOSSUpload { +func (x *Output) GetStorage() *StorageConfig { if x != nil { - if x, ok := x.Output.(*EncodedFileOutput_AliOSS); ok { - return x.AliOSS - } + return x.Storage } return nil } -type isEncodedFileOutput_Output interface { - isEncodedFileOutput_Output() +type isOutput_Config interface { + isOutput_Config() } -type EncodedFileOutput_S3 struct { - S3 *S3Upload `protobuf:"bytes,3,opt,name=s3,proto3,oneof"` +type Output_File struct { + File *FileOutput `protobuf:"bytes,1,opt,name=file,proto3,oneof"` } -type EncodedFileOutput_Gcp struct { - Gcp *GCPUpload `protobuf:"bytes,4,opt,name=gcp,proto3,oneof"` +type Output_Stream struct { + Stream *StreamOutput `protobuf:"bytes,2,opt,name=stream,proto3,oneof"` // reuses v1 StreamOutput } -type EncodedFileOutput_Azure struct { - Azure *AzureBlobUpload `protobuf:"bytes,5,opt,name=azure,proto3,oneof"` +type Output_Segments struct { + Segments *SegmentedFileOutput `protobuf:"bytes,3,opt,name=segments,proto3,oneof"` // reuses v1 SegmentedFileOutput } -type EncodedFileOutput_AliOSS struct { - AliOSS *AliOSSUpload `protobuf:"bytes,7,opt,name=aliOSS,proto3,oneof"` +type Output_Images struct { + Images *ImageOutput `protobuf:"bytes,4,opt,name=images,proto3,oneof"` // reuses v1 ImageOutput } -func (*EncodedFileOutput_S3) isEncodedFileOutput_Output() {} +type Output_Mcap struct { + Mcap *McapOutput `protobuf:"bytes,5,opt,name=mcap,proto3,oneof"` +} -func (*EncodedFileOutput_Gcp) isEncodedFileOutput_Output() {} +func (*Output_File) isOutput_Config() {} -func (*EncodedFileOutput_Azure) isEncodedFileOutput_Output() {} +func (*Output_Stream) isOutput_Config() {} -func (*EncodedFileOutput_AliOSS) isEncodedFileOutput_Output() {} +func (*Output_Segments) isOutput_Config() {} -// Used to generate HLS segments or other kind of segmented output -type SegmentedFileOutput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Protocol SegmentedFileProtocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=livekit.SegmentedFileProtocol" json:"protocol,omitempty"` // (optional) - FilenamePrefix string `protobuf:"bytes,2,opt,name=filename_prefix,json=filenamePrefix,proto3" json:"filename_prefix,omitempty"` // (optional) - PlaylistName string `protobuf:"bytes,3,opt,name=playlist_name,json=playlistName,proto3" json:"playlist_name,omitempty"` // (optional) - LivePlaylistName string `protobuf:"bytes,11,opt,name=live_playlist_name,json=livePlaylistName,proto3" json:"live_playlist_name,omitempty"` // (optional, disabled if not provided). Path of a live playlist - SegmentDuration uint32 `protobuf:"varint,4,opt,name=segment_duration,json=segmentDuration,proto3" json:"segment_duration,omitempty"` // in seconds (optional) - FilenameSuffix SegmentedFileSuffix `protobuf:"varint,10,opt,name=filename_suffix,json=filenameSuffix,proto3,enum=livekit.SegmentedFileSuffix" json:"filename_suffix,omitempty"` // (optional, default INDEX) - DisableManifest bool `protobuf:"varint,8,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` // disable upload of manifest file (default false) - // Types that are valid to be assigned to Output: - // - // *SegmentedFileOutput_S3 - // *SegmentedFileOutput_Gcp - // *SegmentedFileOutput_Azure - // *SegmentedFileOutput_AliOSS - Output isSegmentedFileOutput_Output `protobuf_oneof:"output"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +func (*Output_Images) isOutput_Config() {} + +func (*Output_Mcap) isOutput_Config() {} + +// Unified file output — replaces v1 EncodedFileOutput and DirectFileOutput. +// Whether transcoded depends on encoding options on the request. +type FileOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileType EncodedFileType `protobuf:"varint,1,opt,name=file_type,json=fileType,proto3,enum=livekit.EncodedFileType" json:"file_type,omitempty"` + Filepath string `protobuf:"bytes,2,opt,name=filepath,proto3" json:"filepath,omitempty"` + DisableManifest bool `protobuf:"varint,3,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SegmentedFileOutput) Reset() { - *x = SegmentedFileOutput{} - mi := &file_livekit_egress_proto_msgTypes[6] +func (x *FileOutput) Reset() { + *x = FileOutput{} + mi := &file_livekit_egress_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *SegmentedFileOutput) String() string { +func (x *FileOutput) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SegmentedFileOutput) ProtoMessage() {} +func (*FileOutput) ProtoMessage() {} -func (x *SegmentedFileOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[6] +func (x *FileOutput) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1662,161 +1676,122 @@ func (x *SegmentedFileOutput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SegmentedFileOutput.ProtoReflect.Descriptor instead. -func (*SegmentedFileOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{6} +// Deprecated: Use FileOutput.ProtoReflect.Descriptor instead. +func (*FileOutput) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{11} } -func (x *SegmentedFileOutput) GetProtocol() SegmentedFileProtocol { +func (x *FileOutput) GetFileType() EncodedFileType { if x != nil { - return x.Protocol + return x.FileType } - return SegmentedFileProtocol_DEFAULT_SEGMENTED_FILE_PROTOCOL + return EncodedFileType_DEFAULT_FILETYPE } -func (x *SegmentedFileOutput) GetFilenamePrefix() string { +func (x *FileOutput) GetFilepath() string { if x != nil { - return x.FilenamePrefix + return x.Filepath } return "" } -func (x *SegmentedFileOutput) GetPlaylistName() string { - if x != nil { - return x.PlaylistName - } - return "" -} - -func (x *SegmentedFileOutput) GetLivePlaylistName() string { +func (x *FileOutput) GetDisableManifest() bool { if x != nil { - return x.LivePlaylistName + return x.DisableManifest } - return "" + return false } -func (x *SegmentedFileOutput) GetSegmentDuration() uint32 { - if x != nil { - return x.SegmentDuration - } - return 0 +type StreamOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Protocol StreamProtocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=livekit.StreamProtocol" json:"protocol,omitempty"` // required + Urls []string `protobuf:"bytes,2,rep,name=urls,proto3" json:"urls,omitempty"` // required + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SegmentedFileOutput) GetFilenameSuffix() SegmentedFileSuffix { - if x != nil { - return x.FilenameSuffix - } - return SegmentedFileSuffix_INDEX +func (x *StreamOutput) Reset() { + *x = StreamOutput{} + mi := &file_livekit_egress_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SegmentedFileOutput) GetDisableManifest() bool { - if x != nil { - return x.DisableManifest - } - return false +func (x *StreamOutput) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *SegmentedFileOutput) GetOutput() isSegmentedFileOutput_Output { - if x != nil { - return x.Output - } - return nil -} +func (*StreamOutput) ProtoMessage() {} -func (x *SegmentedFileOutput) GetS3() *S3Upload { +func (x *StreamOutput) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[12] if x != nil { - if x, ok := x.Output.(*SegmentedFileOutput_S3); ok { - return x.S3 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return nil + return mi.MessageOf(x) } -func (x *SegmentedFileOutput) GetGcp() *GCPUpload { - if x != nil { - if x, ok := x.Output.(*SegmentedFileOutput_Gcp); ok { - return x.Gcp - } - } - return nil +// Deprecated: Use StreamOutput.ProtoReflect.Descriptor instead. +func (*StreamOutput) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{12} } -func (x *SegmentedFileOutput) GetAzure() *AzureBlobUpload { +func (x *StreamOutput) GetProtocol() StreamProtocol { if x != nil { - if x, ok := x.Output.(*SegmentedFileOutput_Azure); ok { - return x.Azure - } + return x.Protocol } - return nil + return StreamProtocol_DEFAULT_PROTOCOL } -func (x *SegmentedFileOutput) GetAliOSS() *AliOSSUpload { +func (x *StreamOutput) GetUrls() []string { if x != nil { - if x, ok := x.Output.(*SegmentedFileOutput_AliOSS); ok { - return x.AliOSS - } + return x.Urls } return nil } -type isSegmentedFileOutput_Output interface { - isSegmentedFileOutput_Output() -} - -type SegmentedFileOutput_S3 struct { - S3 *S3Upload `protobuf:"bytes,5,opt,name=s3,proto3,oneof"` -} - -type SegmentedFileOutput_Gcp struct { - Gcp *GCPUpload `protobuf:"bytes,6,opt,name=gcp,proto3,oneof"` -} - -type SegmentedFileOutput_Azure struct { - Azure *AzureBlobUpload `protobuf:"bytes,7,opt,name=azure,proto3,oneof"` -} - -type SegmentedFileOutput_AliOSS struct { - AliOSS *AliOSSUpload `protobuf:"bytes,9,opt,name=aliOSS,proto3,oneof"` -} - -func (*SegmentedFileOutput_S3) isSegmentedFileOutput_Output() {} - -func (*SegmentedFileOutput_Gcp) isSegmentedFileOutput_Output() {} - -func (*SegmentedFileOutput_Azure) isSegmentedFileOutput_Output() {} - -func (*SegmentedFileOutput_AliOSS) isSegmentedFileOutput_Output() {} - -type DirectFileOutput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Filepath string `protobuf:"bytes,1,opt,name=filepath,proto3" json:"filepath,omitempty"` // see egress docs for templating (default {track_id}-{time}) - DisableManifest bool `protobuf:"varint,5,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` // disable upload of manifest file (default false) +// Used to generate HLS segments or other kind of segmented output +type SegmentedFileOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Protocol SegmentedFileProtocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=livekit.SegmentedFileProtocol" json:"protocol,omitempty"` // (optional) + FilenamePrefix string `protobuf:"bytes,2,opt,name=filename_prefix,json=filenamePrefix,proto3" json:"filename_prefix,omitempty"` // (optional) + PlaylistName string `protobuf:"bytes,3,opt,name=playlist_name,json=playlistName,proto3" json:"playlist_name,omitempty"` // (optional) + LivePlaylistName string `protobuf:"bytes,11,opt,name=live_playlist_name,json=livePlaylistName,proto3" json:"live_playlist_name,omitempty"` // (optional, disabled if not provided). Path of a live playlist + SegmentDuration uint32 `protobuf:"varint,4,opt,name=segment_duration,json=segmentDuration,proto3" json:"segment_duration,omitempty"` // in seconds (optional) + FilenameSuffix SegmentedFileSuffix `protobuf:"varint,10,opt,name=filename_suffix,json=filenameSuffix,proto3,enum=livekit.SegmentedFileSuffix" json:"filename_suffix,omitempty"` // (optional, default INDEX) + DisableManifest bool `protobuf:"varint,8,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` // disable upload of manifest file (default false) + // --- Deprecated --- + // // Types that are valid to be assigned to Output: // - // *DirectFileOutput_S3 - // *DirectFileOutput_Gcp - // *DirectFileOutput_Azure - // *DirectFileOutput_AliOSS - Output isDirectFileOutput_Output `protobuf_oneof:"output"` + // *SegmentedFileOutput_S3 + // *SegmentedFileOutput_Gcp + // *SegmentedFileOutput_Azure + // *SegmentedFileOutput_AliOSS + Output isSegmentedFileOutput_Output `protobuf_oneof:"output"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *DirectFileOutput) Reset() { - *x = DirectFileOutput{} - mi := &file_livekit_egress_proto_msgTypes[7] +func (x *SegmentedFileOutput) Reset() { + *x = SegmentedFileOutput{} + mi := &file_livekit_egress_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *DirectFileOutput) String() string { +func (x *SegmentedFileOutput) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DirectFileOutput) ProtoMessage() {} +func (*SegmentedFileOutput) ProtoMessage() {} -func (x *DirectFileOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[7] +func (x *SegmentedFileOutput) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1827,96 +1802,140 @@ func (x *DirectFileOutput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DirectFileOutput.ProtoReflect.Descriptor instead. -func (*DirectFileOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{7} +// Deprecated: Use SegmentedFileOutput.ProtoReflect.Descriptor instead. +func (*SegmentedFileOutput) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{13} } -func (x *DirectFileOutput) GetFilepath() string { +func (x *SegmentedFileOutput) GetProtocol() SegmentedFileProtocol { if x != nil { - return x.Filepath + return x.Protocol + } + return SegmentedFileProtocol_DEFAULT_SEGMENTED_FILE_PROTOCOL +} + +func (x *SegmentedFileOutput) GetFilenamePrefix() string { + if x != nil { + return x.FilenamePrefix } return "" } -func (x *DirectFileOutput) GetDisableManifest() bool { +func (x *SegmentedFileOutput) GetPlaylistName() string { + if x != nil { + return x.PlaylistName + } + return "" +} + +func (x *SegmentedFileOutput) GetLivePlaylistName() string { + if x != nil { + return x.LivePlaylistName + } + return "" +} + +func (x *SegmentedFileOutput) GetSegmentDuration() uint32 { + if x != nil { + return x.SegmentDuration + } + return 0 +} + +func (x *SegmentedFileOutput) GetFilenameSuffix() SegmentedFileSuffix { + if x != nil { + return x.FilenameSuffix + } + return SegmentedFileSuffix_INDEX +} + +func (x *SegmentedFileOutput) GetDisableManifest() bool { if x != nil { return x.DisableManifest } return false } -func (x *DirectFileOutput) GetOutput() isDirectFileOutput_Output { +func (x *SegmentedFileOutput) GetOutput() isSegmentedFileOutput_Output { if x != nil { return x.Output } return nil } -func (x *DirectFileOutput) GetS3() *S3Upload { +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *SegmentedFileOutput) GetS3() *S3Upload { if x != nil { - if x, ok := x.Output.(*DirectFileOutput_S3); ok { + if x, ok := x.Output.(*SegmentedFileOutput_S3); ok { return x.S3 } } return nil } -func (x *DirectFileOutput) GetGcp() *GCPUpload { +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *SegmentedFileOutput) GetGcp() *GCPUpload { if x != nil { - if x, ok := x.Output.(*DirectFileOutput_Gcp); ok { + if x, ok := x.Output.(*SegmentedFileOutput_Gcp); ok { return x.Gcp } } return nil } -func (x *DirectFileOutput) GetAzure() *AzureBlobUpload { +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *SegmentedFileOutput) GetAzure() *AzureBlobUpload { if x != nil { - if x, ok := x.Output.(*DirectFileOutput_Azure); ok { + if x, ok := x.Output.(*SegmentedFileOutput_Azure); ok { return x.Azure } } return nil } -func (x *DirectFileOutput) GetAliOSS() *AliOSSUpload { +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *SegmentedFileOutput) GetAliOSS() *AliOSSUpload { if x != nil { - if x, ok := x.Output.(*DirectFileOutput_AliOSS); ok { + if x, ok := x.Output.(*SegmentedFileOutput_AliOSS); ok { return x.AliOSS } } return nil } -type isDirectFileOutput_Output interface { - isDirectFileOutput_Output() +type isSegmentedFileOutput_Output interface { + isSegmentedFileOutput_Output() } -type DirectFileOutput_S3 struct { - S3 *S3Upload `protobuf:"bytes,2,opt,name=s3,proto3,oneof"` +type SegmentedFileOutput_S3 struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + S3 *S3Upload `protobuf:"bytes,5,opt,name=s3,proto3,oneof"` } -type DirectFileOutput_Gcp struct { - Gcp *GCPUpload `protobuf:"bytes,3,opt,name=gcp,proto3,oneof"` +type SegmentedFileOutput_Gcp struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Gcp *GCPUpload `protobuf:"bytes,6,opt,name=gcp,proto3,oneof"` } -type DirectFileOutput_Azure struct { - Azure *AzureBlobUpload `protobuf:"bytes,4,opt,name=azure,proto3,oneof"` +type SegmentedFileOutput_Azure struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Azure *AzureBlobUpload `protobuf:"bytes,7,opt,name=azure,proto3,oneof"` } -type DirectFileOutput_AliOSS struct { - AliOSS *AliOSSUpload `protobuf:"bytes,6,opt,name=aliOSS,proto3,oneof"` +type SegmentedFileOutput_AliOSS struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + AliOSS *AliOSSUpload `protobuf:"bytes,9,opt,name=aliOSS,proto3,oneof"` } -func (*DirectFileOutput_S3) isDirectFileOutput_Output() {} +func (*SegmentedFileOutput_S3) isSegmentedFileOutput_Output() {} -func (*DirectFileOutput_Gcp) isDirectFileOutput_Output() {} +func (*SegmentedFileOutput_Gcp) isSegmentedFileOutput_Output() {} -func (*DirectFileOutput_Azure) isDirectFileOutput_Output() {} +func (*SegmentedFileOutput_Azure) isSegmentedFileOutput_Output() {} -func (*DirectFileOutput_AliOSS) isDirectFileOutput_Output() {} +func (*SegmentedFileOutput_AliOSS) isSegmentedFileOutput_Output() {} +// Capture images at a specified interval type ImageOutput struct { state protoimpl.MessageState `protogen:"open.v1"` CaptureInterval uint32 `protobuf:"varint,1,opt,name=capture_interval,json=captureInterval,proto3" json:"capture_interval,omitempty"` // in seconds (required) @@ -1926,6 +1945,8 @@ type ImageOutput struct { FilenameSuffix ImageFileSuffix `protobuf:"varint,5,opt,name=filename_suffix,json=filenameSuffix,proto3,enum=livekit.ImageFileSuffix" json:"filename_suffix,omitempty"` // (optional, default INDEX) ImageCodec ImageCodec `protobuf:"varint,6,opt,name=image_codec,json=imageCodec,proto3,enum=livekit.ImageCodec" json:"image_codec,omitempty"` // (optional) DisableManifest bool `protobuf:"varint,7,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` // disable upload of manifest file (default false) + // --- Deprecated --- + // // Types that are valid to be assigned to Output: // // *ImageOutput_S3 @@ -1939,7 +1960,7 @@ type ImageOutput struct { func (x *ImageOutput) Reset() { *x = ImageOutput{} - mi := &file_livekit_egress_proto_msgTypes[8] + mi := &file_livekit_egress_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1951,7 +1972,7 @@ func (x *ImageOutput) String() string { func (*ImageOutput) ProtoMessage() {} func (x *ImageOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[8] + mi := &file_livekit_egress_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1964,7 +1985,7 @@ func (x *ImageOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageOutput.ProtoReflect.Descriptor instead. func (*ImageOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{8} + return file_livekit_egress_proto_rawDescGZIP(), []int{14} } func (x *ImageOutput) GetCaptureInterval() uint32 { @@ -2023,6 +2044,7 @@ func (x *ImageOutput) GetOutput() isImageOutput_Output { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetS3() *S3Upload { if x != nil { if x, ok := x.Output.(*ImageOutput_S3); ok { @@ -2032,6 +2054,7 @@ func (x *ImageOutput) GetS3() *S3Upload { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetGcp() *GCPUpload { if x != nil { if x, ok := x.Output.(*ImageOutput_Gcp); ok { @@ -2041,6 +2064,7 @@ func (x *ImageOutput) GetGcp() *GCPUpload { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetAzure() *AzureBlobUpload { if x != nil { if x, ok := x.Output.(*ImageOutput_Azure); ok { @@ -2050,6 +2074,7 @@ func (x *ImageOutput) GetAzure() *AzureBlobUpload { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetAliOSS() *AliOSSUpload { if x != nil { if x, ok := x.Output.(*ImageOutput_AliOSS); ok { @@ -2064,18 +2089,22 @@ type isImageOutput_Output interface { } type ImageOutput_S3 struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. S3 *S3Upload `protobuf:"bytes,8,opt,name=s3,proto3,oneof"` } type ImageOutput_Gcp struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. Gcp *GCPUpload `protobuf:"bytes,9,opt,name=gcp,proto3,oneof"` } type ImageOutput_Azure struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. Azure *AzureBlobUpload `protobuf:"bytes,10,opt,name=azure,proto3,oneof"` } type ImageOutput_AliOSS struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. AliOSS *AliOSSUpload `protobuf:"bytes,11,opt,name=aliOSS,proto3,oneof"` } @@ -2087,6 +2116,173 @@ func (*ImageOutput_Azure) isImageOutput_Output() {} func (*ImageOutput_AliOSS) isImageOutput_Output() {} +// Raw track data packaged into MCAP container format. +type McapOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filepath string `protobuf:"bytes,1,opt,name=filepath,proto3" json:"filepath,omitempty"` + DisableManifest bool `protobuf:"varint,2,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *McapOutput) Reset() { + *x = McapOutput{} + mi := &file_livekit_egress_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *McapOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*McapOutput) ProtoMessage() {} + +func (x *McapOutput) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use McapOutput.ProtoReflect.Descriptor instead. +func (*McapOutput) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{15} +} + +func (x *McapOutput) GetFilepath() string { + if x != nil { + return x.Filepath + } + return "" +} + +func (x *McapOutput) GetDisableManifest() bool { + if x != nil { + return x.DisableManifest + } + return false +} + +type StorageConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Provider: + // + // *StorageConfig_S3 + // *StorageConfig_Gcp + // *StorageConfig_Azure + // *StorageConfig_AliOss + Provider isStorageConfig_Provider `protobuf_oneof:"provider"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StorageConfig) Reset() { + *x = StorageConfig{} + mi := &file_livekit_egress_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StorageConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageConfig) ProtoMessage() {} + +func (x *StorageConfig) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageConfig.ProtoReflect.Descriptor instead. +func (*StorageConfig) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{16} +} + +func (x *StorageConfig) GetProvider() isStorageConfig_Provider { + if x != nil { + return x.Provider + } + return nil +} + +func (x *StorageConfig) GetS3() *S3Upload { + if x != nil { + if x, ok := x.Provider.(*StorageConfig_S3); ok { + return x.S3 + } + } + return nil +} + +func (x *StorageConfig) GetGcp() *GCPUpload { + if x != nil { + if x, ok := x.Provider.(*StorageConfig_Gcp); ok { + return x.Gcp + } + } + return nil +} + +func (x *StorageConfig) GetAzure() *AzureBlobUpload { + if x != nil { + if x, ok := x.Provider.(*StorageConfig_Azure); ok { + return x.Azure + } + } + return nil +} + +func (x *StorageConfig) GetAliOss() *AliOSSUpload { + if x != nil { + if x, ok := x.Provider.(*StorageConfig_AliOss); ok { + return x.AliOss + } + } + return nil +} + +type isStorageConfig_Provider interface { + isStorageConfig_Provider() +} + +type StorageConfig_S3 struct { + S3 *S3Upload `protobuf:"bytes,1,opt,name=s3,proto3,oneof"` +} + +type StorageConfig_Gcp struct { + Gcp *GCPUpload `protobuf:"bytes,2,opt,name=gcp,proto3,oneof"` +} + +type StorageConfig_Azure struct { + Azure *AzureBlobUpload `protobuf:"bytes,3,opt,name=azure,proto3,oneof"` +} + +type StorageConfig_AliOss struct { + AliOss *AliOSSUpload `protobuf:"bytes,4,opt,name=ali_oss,json=aliOss,proto3,oneof"` +} + +func (*StorageConfig_S3) isStorageConfig_Provider() {} + +func (*StorageConfig_Gcp) isStorageConfig_Provider() {} + +func (*StorageConfig_Azure) isStorageConfig_Provider() {} + +func (*StorageConfig_AliOss) isStorageConfig_Provider() {} + type S3Upload struct { state protoimpl.MessageState `protogen:"open.v1"` AccessKey string `protobuf:"bytes,1,opt,name=access_key,json=accessKey,proto3" json:"access_key,omitempty"` @@ -2108,7 +2304,7 @@ type S3Upload struct { func (x *S3Upload) Reset() { *x = S3Upload{} - mi := &file_livekit_egress_proto_msgTypes[9] + mi := &file_livekit_egress_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2120,7 +2316,7 @@ func (x *S3Upload) String() string { func (*S3Upload) ProtoMessage() {} func (x *S3Upload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[9] + mi := &file_livekit_egress_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2133,7 +2329,7 @@ func (x *S3Upload) ProtoReflect() protoreflect.Message { // Deprecated: Use S3Upload.ProtoReflect.Descriptor instead. func (*S3Upload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{9} + return file_livekit_egress_proto_rawDescGZIP(), []int{17} } func (x *S3Upload) GetAccessKey() string { @@ -2239,7 +2435,7 @@ type GCPUpload struct { func (x *GCPUpload) Reset() { *x = GCPUpload{} - mi := &file_livekit_egress_proto_msgTypes[10] + mi := &file_livekit_egress_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2251,7 +2447,7 @@ func (x *GCPUpload) String() string { func (*GCPUpload) ProtoMessage() {} func (x *GCPUpload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[10] + mi := &file_livekit_egress_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2264,7 +2460,7 @@ func (x *GCPUpload) ProtoReflect() protoreflect.Message { // Deprecated: Use GCPUpload.ProtoReflect.Descriptor instead. func (*GCPUpload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{10} + return file_livekit_egress_proto_rawDescGZIP(), []int{18} } func (x *GCPUpload) GetCredentials() string { @@ -2299,7 +2495,7 @@ type AzureBlobUpload struct { func (x *AzureBlobUpload) Reset() { *x = AzureBlobUpload{} - mi := &file_livekit_egress_proto_msgTypes[11] + mi := &file_livekit_egress_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2311,7 +2507,7 @@ func (x *AzureBlobUpload) String() string { func (*AzureBlobUpload) ProtoMessage() {} func (x *AzureBlobUpload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[11] + mi := &file_livekit_egress_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2324,7 +2520,7 @@ func (x *AzureBlobUpload) ProtoReflect() protoreflect.Message { // Deprecated: Use AzureBlobUpload.ProtoReflect.Descriptor instead. func (*AzureBlobUpload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{11} + return file_livekit_egress_proto_rawDescGZIP(), []int{19} } func (x *AzureBlobUpload) GetAccountName() string { @@ -2361,7 +2557,7 @@ type AliOSSUpload struct { func (x *AliOSSUpload) Reset() { *x = AliOSSUpload{} - mi := &file_livekit_egress_proto_msgTypes[12] + mi := &file_livekit_egress_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2373,7 +2569,7 @@ func (x *AliOSSUpload) String() string { func (*AliOSSUpload) ProtoMessage() {} func (x *AliOSSUpload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[12] + mi := &file_livekit_egress_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2386,7 +2582,7 @@ func (x *AliOSSUpload) ProtoReflect() protoreflect.Message { // Deprecated: Use AliOSSUpload.ProtoReflect.Descriptor instead. func (*AliOSSUpload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{12} + return file_livekit_egress_proto_rawDescGZIP(), []int{20} } func (x *AliOSSUpload) GetAccessKey() string { @@ -2435,7 +2631,7 @@ type ProxyConfig struct { func (x *ProxyConfig) Reset() { *x = ProxyConfig{} - mi := &file_livekit_egress_proto_msgTypes[13] + mi := &file_livekit_egress_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2447,7 +2643,7 @@ func (x *ProxyConfig) String() string { func (*ProxyConfig) ProtoMessage() {} func (x *ProxyConfig) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[13] + mi := &file_livekit_egress_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2460,7 +2656,7 @@ func (x *ProxyConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ProxyConfig.ProtoReflect.Descriptor instead. func (*ProxyConfig) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{13} + return file_livekit_egress_proto_rawDescGZIP(), []int{21} } func (x *ProxyConfig) GetUrl() string { @@ -2484,29 +2680,30 @@ func (x *ProxyConfig) GetPassword() string { return "" } -type StreamOutput struct { +type ListEgressRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Protocol StreamProtocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=livekit.StreamProtocol" json:"protocol,omitempty"` // required - Urls []string `protobuf:"bytes,2,rep,name=urls,proto3" json:"urls,omitempty"` // required + RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // (optional, filter by room name) + EgressId string `protobuf:"bytes,2,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` // (optional, filter by egress ID) + Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"` // (optional, list active egress only) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *StreamOutput) Reset() { - *x = StreamOutput{} - mi := &file_livekit_egress_proto_msgTypes[14] +func (x *ListEgressRequest) Reset() { + *x = ListEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *StreamOutput) String() string { +func (x *ListEgressRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StreamOutput) ProtoMessage() {} +func (*ListEgressRequest) ProtoMessage() {} -func (x *StreamOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[14] +func (x *ListEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2517,58 +2714,54 @@ func (x *StreamOutput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StreamOutput.ProtoReflect.Descriptor instead. -func (*StreamOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{14} +// Deprecated: Use ListEgressRequest.ProtoReflect.Descriptor instead. +func (*ListEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{22} } -func (x *StreamOutput) GetProtocol() StreamProtocol { +func (x *ListEgressRequest) GetRoomName() string { if x != nil { - return x.Protocol + return x.RoomName } - return StreamProtocol_DEFAULT_PROTOCOL + return "" } -func (x *StreamOutput) GetUrls() []string { +func (x *ListEgressRequest) GetEgressId() string { if x != nil { - return x.Urls + return x.EgressId } - return nil + return "" } -type EncodingOptions struct { - state protoimpl.MessageState `protogen:"open.v1"` - Width int32 `protobuf:"varint,1,opt,name=width,proto3" json:"width,omitempty"` // (default 1920) - Height int32 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` // (default 1080) - Depth int32 `protobuf:"varint,3,opt,name=depth,proto3" json:"depth,omitempty"` // (default 24) - Framerate int32 `protobuf:"varint,4,opt,name=framerate,proto3" json:"framerate,omitempty"` // (default 30) - AudioCodec AudioCodec `protobuf:"varint,5,opt,name=audio_codec,json=audioCodec,proto3,enum=livekit.AudioCodec" json:"audio_codec,omitempty"` // (default OPUS) - AudioBitrate int32 `protobuf:"varint,6,opt,name=audio_bitrate,json=audioBitrate,proto3" json:"audio_bitrate,omitempty"` // (default 128) - AudioQuality int32 `protobuf:"varint,11,opt,name=audio_quality,json=audioQuality,proto3" json:"audio_quality,omitempty"` // quality setting on audio encoder - AudioFrequency int32 `protobuf:"varint,7,opt,name=audio_frequency,json=audioFrequency,proto3" json:"audio_frequency,omitempty"` // (default 44100) - VideoCodec VideoCodec `protobuf:"varint,8,opt,name=video_codec,json=videoCodec,proto3,enum=livekit.VideoCodec" json:"video_codec,omitempty"` // (default H264_MAIN) - VideoBitrate int32 `protobuf:"varint,9,opt,name=video_bitrate,json=videoBitrate,proto3" json:"video_bitrate,omitempty"` // (default 4500) - VideoQuality int32 `protobuf:"varint,12,opt,name=video_quality,json=videoQuality,proto3" json:"video_quality,omitempty"` // quality setting on video encoder - KeyFrameInterval float64 `protobuf:"fixed64,10,opt,name=key_frame_interval,json=keyFrameInterval,proto3" json:"key_frame_interval,omitempty"` // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +func (x *ListEgressRequest) GetActive() bool { + if x != nil { + return x.Active + } + return false } -func (x *EncodingOptions) Reset() { - *x = EncodingOptions{} - mi := &file_livekit_egress_proto_msgTypes[15] +type ListEgressResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*EgressInfo `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListEgressResponse) Reset() { + *x = ListEgressResponse{} + mi := &file_livekit_egress_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *EncodingOptions) String() string { +func (x *ListEgressResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncodingOptions) ProtoMessage() {} +func (*ListEgressResponse) ProtoMessage() {} -func (x *EncodingOptions) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[15] +func (x *ListEgressResponse) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2579,118 +2772,44 @@ func (x *EncodingOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncodingOptions.ProtoReflect.Descriptor instead. -func (*EncodingOptions) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{15} +// Deprecated: Use ListEgressResponse.ProtoReflect.Descriptor instead. +func (*ListEgressResponse) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{23} } -func (x *EncodingOptions) GetWidth() int32 { +func (x *ListEgressResponse) GetItems() []*EgressInfo { if x != nil { - return x.Width + return x.Items } - return 0 + return nil } -func (x *EncodingOptions) GetHeight() int32 { - if x != nil { - return x.Height - } - return 0 +type UpdateEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Layout string `protobuf:"bytes,3,opt,name=layout,proto3" json:"layout,omitempty"` + AddStreamUrls []string `protobuf:"bytes,4,rep,name=add_stream_urls,json=addStreamUrls,proto3" json:"add_stream_urls,omitempty"` + RemoveStreamUrls []string `protobuf:"bytes,5,rep,name=remove_stream_urls,json=removeStreamUrls,proto3" json:"remove_stream_urls,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *EncodingOptions) GetDepth() int32 { - if x != nil { - return x.Depth - } - return 0 -} - -func (x *EncodingOptions) GetFramerate() int32 { - if x != nil { - return x.Framerate - } - return 0 -} - -func (x *EncodingOptions) GetAudioCodec() AudioCodec { - if x != nil { - return x.AudioCodec - } - return AudioCodec_DEFAULT_AC -} - -func (x *EncodingOptions) GetAudioBitrate() int32 { - if x != nil { - return x.AudioBitrate - } - return 0 -} - -func (x *EncodingOptions) GetAudioQuality() int32 { - if x != nil { - return x.AudioQuality - } - return 0 -} - -func (x *EncodingOptions) GetAudioFrequency() int32 { - if x != nil { - return x.AudioFrequency - } - return 0 -} - -func (x *EncodingOptions) GetVideoCodec() VideoCodec { - if x != nil { - return x.VideoCodec - } - return VideoCodec_DEFAULT_VC -} - -func (x *EncodingOptions) GetVideoBitrate() int32 { - if x != nil { - return x.VideoBitrate - } - return 0 -} - -func (x *EncodingOptions) GetVideoQuality() int32 { - if x != nil { - return x.VideoQuality - } - return 0 -} - -func (x *EncodingOptions) GetKeyFrameInterval() float64 { - if x != nil { - return x.KeyFrameInterval - } - return 0 -} - -type UpdateLayoutRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` - Layout string `protobuf:"bytes,2,opt,name=layout,proto3" json:"layout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *UpdateLayoutRequest) Reset() { - *x = UpdateLayoutRequest{} - mi := &file_livekit_egress_proto_msgTypes[16] +func (x *UpdateEgressRequest) Reset() { + *x = UpdateEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *UpdateLayoutRequest) String() string { +func (x *UpdateEgressRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateLayoutRequest) ProtoMessage() {} +func (*UpdateEgressRequest) ProtoMessage() {} -func (x *UpdateLayoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[16] +func (x *UpdateEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2701,185 +2820,42 @@ func (x *UpdateLayoutRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateLayoutRequest.ProtoReflect.Descriptor instead. -func (*UpdateLayoutRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{16} +// Deprecated: Use UpdateEgressRequest.ProtoReflect.Descriptor instead. +func (*UpdateEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{24} } -func (x *UpdateLayoutRequest) GetEgressId() string { +func (x *UpdateEgressRequest) GetEgressId() string { if x != nil { return x.EgressId } return "" } -func (x *UpdateLayoutRequest) GetLayout() string { +func (x *UpdateEgressRequest) GetUrl() string { if x != nil { - return x.Layout + return x.Url } return "" } -type UpdateStreamRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` - AddOutputUrls []string `protobuf:"bytes,2,rep,name=add_output_urls,json=addOutputUrls,proto3" json:"add_output_urls,omitempty"` - RemoveOutputUrls []string `protobuf:"bytes,3,rep,name=remove_output_urls,json=removeOutputUrls,proto3" json:"remove_output_urls,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *UpdateStreamRequest) Reset() { - *x = UpdateStreamRequest{} - mi := &file_livekit_egress_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateStreamRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateStreamRequest) ProtoMessage() {} - -func (x *UpdateStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateStreamRequest.ProtoReflect.Descriptor instead. -func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{17} -} - -func (x *UpdateStreamRequest) GetEgressId() string { +func (x *UpdateEgressRequest) GetLayout() string { if x != nil { - return x.EgressId + return x.Layout } return "" } -func (x *UpdateStreamRequest) GetAddOutputUrls() []string { - if x != nil { - return x.AddOutputUrls - } - return nil -} - -func (x *UpdateStreamRequest) GetRemoveOutputUrls() []string { +func (x *UpdateEgressRequest) GetAddStreamUrls() []string { if x != nil { - return x.RemoveOutputUrls + return x.AddStreamUrls } return nil } -type ListEgressRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` // (optional, filter by room name) - EgressId string `protobuf:"bytes,2,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` // (optional, filter by egress ID) - Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"` // (optional, list active egress only) - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ListEgressRequest) Reset() { - *x = ListEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListEgressRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListEgressRequest) ProtoMessage() {} - -func (x *ListEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListEgressRequest.ProtoReflect.Descriptor instead. -func (*ListEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{18} -} - -func (x *ListEgressRequest) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -func (x *ListEgressRequest) GetEgressId() string { - if x != nil { - return x.EgressId - } - return "" -} - -func (x *ListEgressRequest) GetActive() bool { - if x != nil { - return x.Active - } - return false -} - -type ListEgressResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Items []*EgressInfo `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ListEgressResponse) Reset() { - *x = ListEgressResponse{} - mi := &file_livekit_egress_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ListEgressResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListEgressResponse) ProtoMessage() {} - -func (x *ListEgressResponse) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[19] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListEgressResponse.ProtoReflect.Descriptor instead. -func (*ListEgressResponse) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{19} -} - -func (x *ListEgressResponse) GetItems() []*EgressInfo { +func (x *UpdateEgressRequest) GetRemoveStreamUrls() []string { if x != nil { - return x.Items + return x.RemoveStreamUrls } return nil } @@ -2893,7 +2869,7 @@ type StopEgressRequest struct { func (x *StopEgressRequest) Reset() { *x = StopEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[20] + mi := &file_livekit_egress_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2905,7 +2881,7 @@ func (x *StopEgressRequest) String() string { func (*StopEgressRequest) ProtoMessage() {} func (x *StopEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[20] + mi := &file_livekit_egress_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2918,7 +2894,7 @@ func (x *StopEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopEgressRequest.ProtoReflect.Descriptor instead. func (*StopEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{20} + return file_livekit_egress_proto_rawDescGZIP(), []int{25} } func (x *StopEgressRequest) GetEgressId() string { @@ -2938,37 +2914,42 @@ type EgressInfo struct { StartedAt int64 `protobuf:"varint,10,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` EndedAt int64 `protobuf:"varint,11,opt,name=ended_at,json=endedAt,proto3" json:"ended_at,omitempty"` UpdatedAt int64 `protobuf:"varint,18,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - Details string `protobuf:"bytes,21,opt,name=details,proto3" json:"details,omitempty"` - Error string `protobuf:"bytes,9,opt,name=error,proto3" json:"error,omitempty"` - ErrorCode int32 `protobuf:"varint,22,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` // Types that are valid to be assigned to Request: // + // *EgressInfo_Egress + // *EgressInfo_Replay // *EgressInfo_RoomComposite // *EgressInfo_Web // *EgressInfo_Participant // *EgressInfo_TrackComposite // *EgressInfo_Track - Request isEgressInfo_Request `protobuf_oneof:"request"` + Request isEgressInfo_Request `protobuf_oneof:"request"` + StreamResults []*StreamInfo `protobuf:"bytes,15,rep,name=stream_results,json=streamResults,proto3" json:"stream_results,omitempty"` + FileResults []*FileInfo `protobuf:"bytes,16,rep,name=file_results,json=fileResults,proto3" json:"file_results,omitempty"` + SegmentResults []*SegmentsInfo `protobuf:"bytes,17,rep,name=segment_results,json=segmentResults,proto3" json:"segment_results,omitempty"` + ImageResults []*ImagesInfo `protobuf:"bytes,20,rep,name=image_results,json=imageResults,proto3" json:"image_results,omitempty"` + McapResults []*McapInfo `protobuf:"bytes,28,rep,name=mcap_results,json=mcapResults,proto3" json:"mcap_results,omitempty"` + Error string `protobuf:"bytes,9,opt,name=error,proto3" json:"error,omitempty"` + ErrorCode int32 `protobuf:"varint,22,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + Details string `protobuf:"bytes,21,opt,name=details,proto3" json:"details,omitempty"` + ManifestLocation string `protobuf:"bytes,23,opt,name=manifest_location,json=manifestLocation,proto3" json:"manifest_location,omitempty"` + BackupStorageUsed bool `protobuf:"varint,25,opt,name=backup_storage_used,json=backupStorageUsed,proto3" json:"backup_storage_used,omitempty"` + RetryCount int32 `protobuf:"varint,27,opt,name=retry_count,json=retryCount,proto3" json:"retry_count,omitempty"` + // --- Deprecated --- + // // Types that are valid to be assigned to Result: // // *EgressInfo_Stream // *EgressInfo_File // *EgressInfo_Segments - Result isEgressInfo_Result `protobuf_oneof:"result"` - StreamResults []*StreamInfo `protobuf:"bytes,15,rep,name=stream_results,json=streamResults,proto3" json:"stream_results,omitempty"` - FileResults []*FileInfo `protobuf:"bytes,16,rep,name=file_results,json=fileResults,proto3" json:"file_results,omitempty"` - SegmentResults []*SegmentsInfo `protobuf:"bytes,17,rep,name=segment_results,json=segmentResults,proto3" json:"segment_results,omitempty"` - ImageResults []*ImagesInfo `protobuf:"bytes,20,rep,name=image_results,json=imageResults,proto3" json:"image_results,omitempty"` - ManifestLocation string `protobuf:"bytes,23,opt,name=manifest_location,json=manifestLocation,proto3" json:"manifest_location,omitempty"` - BackupStorageUsed bool `protobuf:"varint,25,opt,name=backup_storage_used,json=backupStorageUsed,proto3" json:"backup_storage_used,omitempty"` - RetryCount int32 `protobuf:"varint,27,opt,name=retry_count,json=retryCount,proto3" json:"retry_count,omitempty"` // next ID: 28 - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Result isEgressInfo_Result `protobuf_oneof:"result"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EgressInfo) Reset() { *x = EgressInfo{} - mi := &file_livekit_egress_proto_msgTypes[21] + mi := &file_livekit_egress_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2980,7 +2961,7 @@ func (x *EgressInfo) String() string { func (*EgressInfo) ProtoMessage() {} func (x *EgressInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[21] + mi := &file_livekit_egress_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2993,7 +2974,7 @@ func (x *EgressInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use EgressInfo.ProtoReflect.Descriptor instead. func (*EgressInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{21} + return file_livekit_egress_proto_rawDescGZIP(), []int{26} } func (x *EgressInfo) GetEgressId() string { @@ -3052,34 +3033,32 @@ func (x *EgressInfo) GetUpdatedAt() int64 { return 0 } -func (x *EgressInfo) GetDetails() string { - if x != nil { - return x.Details - } - return "" -} - -func (x *EgressInfo) GetError() string { +func (x *EgressInfo) GetRequest() isEgressInfo_Request { if x != nil { - return x.Error + return x.Request } - return "" + return nil } -func (x *EgressInfo) GetErrorCode() int32 { +func (x *EgressInfo) GetEgress() *StartEgressRequest { if x != nil { - return x.ErrorCode + if x, ok := x.Request.(*EgressInfo_Egress); ok { + return x.Egress + } } - return 0 + return nil } -func (x *EgressInfo) GetRequest() isEgressInfo_Request { +func (x *EgressInfo) GetReplay() *ExportReplayRequest { if x != nil { - return x.Request + if x, ok := x.Request.(*EgressInfo_Replay); ok { + return x.Replay + } } return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetRoomComposite() *RoomCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_RoomComposite); ok { @@ -3089,6 +3068,7 @@ func (x *EgressInfo) GetRoomComposite() *RoomCompositeEgressRequest { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetWeb() *WebEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Web); ok { @@ -3098,6 +3078,7 @@ func (x *EgressInfo) GetWeb() *WebEgressRequest { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetParticipant() *ParticipantEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Participant); ok { @@ -3107,6 +3088,7 @@ func (x *EgressInfo) GetParticipant() *ParticipantEgressRequest { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetTrackComposite() *TrackCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_TrackComposite); ok { @@ -3116,6 +3098,7 @@ func (x *EgressInfo) GetTrackComposite() *TrackCompositeEgressRequest { return nil } +// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetTrack() *TrackEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Track); ok { @@ -3125,69 +3108,60 @@ func (x *EgressInfo) GetTrack() *TrackEgressRequest { return nil } -func (x *EgressInfo) GetResult() isEgressInfo_Result { +func (x *EgressInfo) GetStreamResults() []*StreamInfo { if x != nil { - return x.Result + return x.StreamResults } return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *EgressInfo) GetStream() *StreamInfoList { +func (x *EgressInfo) GetFileResults() []*FileInfo { if x != nil { - if x, ok := x.Result.(*EgressInfo_Stream); ok { - return x.Stream - } + return x.FileResults } return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *EgressInfo) GetFile() *FileInfo { +func (x *EgressInfo) GetSegmentResults() []*SegmentsInfo { if x != nil { - if x, ok := x.Result.(*EgressInfo_File); ok { - return x.File - } + return x.SegmentResults } return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. -func (x *EgressInfo) GetSegments() *SegmentsInfo { +func (x *EgressInfo) GetImageResults() []*ImagesInfo { if x != nil { - if x, ok := x.Result.(*EgressInfo_Segments); ok { - return x.Segments - } + return x.ImageResults } return nil } -func (x *EgressInfo) GetStreamResults() []*StreamInfo { +func (x *EgressInfo) GetMcapResults() []*McapInfo { if x != nil { - return x.StreamResults + return x.McapResults } return nil } -func (x *EgressInfo) GetFileResults() []*FileInfo { +func (x *EgressInfo) GetError() string { if x != nil { - return x.FileResults + return x.Error } - return nil + return "" } -func (x *EgressInfo) GetSegmentResults() []*SegmentsInfo { +func (x *EgressInfo) GetErrorCode() int32 { if x != nil { - return x.SegmentResults + return x.ErrorCode } - return nil + return 0 } -func (x *EgressInfo) GetImageResults() []*ImagesInfo { +func (x *EgressInfo) GetDetails() string { if x != nil { - return x.ImageResults + return x.Details } - return nil + return "" } func (x *EgressInfo) GetManifestLocation() string { @@ -3211,30 +3185,84 @@ func (x *EgressInfo) GetRetryCount() int32 { return 0 } +func (x *EgressInfo) GetResult() isEgressInfo_Result { + if x != nil { + return x.Result + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *EgressInfo) GetStream() *StreamInfoList { + if x != nil { + if x, ok := x.Result.(*EgressInfo_Stream); ok { + return x.Stream + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *EgressInfo) GetFile() *FileInfo { + if x != nil { + if x, ok := x.Result.(*EgressInfo_File); ok { + return x.File + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *EgressInfo) GetSegments() *SegmentsInfo { + if x != nil { + if x, ok := x.Result.(*EgressInfo_Segments); ok { + return x.Segments + } + } + return nil +} + type isEgressInfo_Request interface { isEgressInfo_Request() } +type EgressInfo_Egress struct { + Egress *StartEgressRequest `protobuf:"bytes,29,opt,name=egress,proto3,oneof"` +} + +type EgressInfo_Replay struct { + Replay *ExportReplayRequest `protobuf:"bytes,30,opt,name=replay,proto3,oneof"` +} + type EgressInfo_RoomComposite struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. RoomComposite *RoomCompositeEgressRequest `protobuf:"bytes,4,opt,name=room_composite,json=roomComposite,proto3,oneof"` } type EgressInfo_Web struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. Web *WebEgressRequest `protobuf:"bytes,14,opt,name=web,proto3,oneof"` } type EgressInfo_Participant struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. Participant *ParticipantEgressRequest `protobuf:"bytes,19,opt,name=participant,proto3,oneof"` } type EgressInfo_TrackComposite struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. TrackComposite *TrackCompositeEgressRequest `protobuf:"bytes,5,opt,name=track_composite,json=trackComposite,proto3,oneof"` } type EgressInfo_Track struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. Track *TrackEgressRequest `protobuf:"bytes,6,opt,name=track,proto3,oneof"` } +func (*EgressInfo_Egress) isEgressInfo_Request() {} + +func (*EgressInfo_Replay) isEgressInfo_Request() {} + func (*EgressInfo_RoomComposite) isEgressInfo_Request() {} func (*EgressInfo_Web) isEgressInfo_Request() {} @@ -3270,51 +3298,6 @@ func (*EgressInfo_File) isEgressInfo_Result() {} func (*EgressInfo_Segments) isEgressInfo_Result() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. -type StreamInfoList struct { - state protoimpl.MessageState `protogen:"open.v1"` - Info []*StreamInfo `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *StreamInfoList) Reset() { - *x = StreamInfoList{} - mi := &file_livekit_egress_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *StreamInfoList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamInfoList) ProtoMessage() {} - -func (x *StreamInfoList) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[22] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamInfoList.ProtoReflect.Descriptor instead. -func (*StreamInfoList) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{22} -} - -func (x *StreamInfoList) GetInfo() []*StreamInfo { - if x != nil { - return x.Info - } - return nil -} - type StreamInfo struct { state protoimpl.MessageState `protogen:"open.v1"` Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` @@ -3331,7 +3314,7 @@ type StreamInfo struct { func (x *StreamInfo) Reset() { *x = StreamInfo{} - mi := &file_livekit_egress_proto_msgTypes[23] + mi := &file_livekit_egress_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3343,7 +3326,7 @@ func (x *StreamInfo) String() string { func (*StreamInfo) ProtoMessage() {} func (x *StreamInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[23] + mi := &file_livekit_egress_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3356,7 +3339,7 @@ func (x *StreamInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamInfo.ProtoReflect.Descriptor instead. func (*StreamInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{23} + return file_livekit_egress_proto_rawDescGZIP(), []int{27} } func (x *StreamInfo) GetUrl() string { @@ -3429,7 +3412,7 @@ type FileInfo struct { func (x *FileInfo) Reset() { *x = FileInfo{} - mi := &file_livekit_egress_proto_msgTypes[24] + mi := &file_livekit_egress_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3441,7 +3424,7 @@ func (x *FileInfo) String() string { func (*FileInfo) ProtoMessage() {} func (x *FileInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[24] + mi := &file_livekit_egress_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3454,7 +3437,7 @@ func (x *FileInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FileInfo.ProtoReflect.Descriptor instead. func (*FileInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{24} + return file_livekit_egress_proto_rawDescGZIP(), []int{28} } func (x *FileInfo) GetFilename() string { @@ -3516,7 +3499,7 @@ type SegmentsInfo struct { func (x *SegmentsInfo) Reset() { *x = SegmentsInfo{} - mi := &file_livekit_egress_proto_msgTypes[25] + mi := &file_livekit_egress_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3528,7 +3511,7 @@ func (x *SegmentsInfo) String() string { func (*SegmentsInfo) ProtoMessage() {} func (x *SegmentsInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[25] + mi := &file_livekit_egress_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3541,7 +3524,7 @@ func (x *SegmentsInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SegmentsInfo.ProtoReflect.Descriptor instead. func (*SegmentsInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{25} + return file_livekit_egress_proto_rawDescGZIP(), []int{29} } func (x *SegmentsInfo) GetPlaylistName() string { @@ -3619,7 +3602,7 @@ type ImagesInfo struct { func (x *ImagesInfo) Reset() { *x = ImagesInfo{} - mi := &file_livekit_egress_proto_msgTypes[26] + mi := &file_livekit_egress_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3631,7 +3614,7 @@ func (x *ImagesInfo) String() string { func (*ImagesInfo) ProtoMessage() {} func (x *ImagesInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[26] + mi := &file_livekit_egress_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3644,7 +3627,7 @@ func (x *ImagesInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ImagesInfo.ProtoReflect.Descriptor instead. func (*ImagesInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{26} + return file_livekit_egress_proto_rawDescGZIP(), []int{30} } func (x *ImagesInfo) GetFilenamePrefix() string { @@ -3675,34 +3658,34 @@ func (x *ImagesInfo) GetEndedAt() int64 { return 0 } -type AutoParticipantEgress struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Options: - // - // *AutoParticipantEgress_Preset - // *AutoParticipantEgress_Advanced - Options isAutoParticipantEgress_Options `protobuf_oneof:"options"` - FileOutputs []*EncodedFileOutput `protobuf:"bytes,3,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` - SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,4,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type McapInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` + StartedAt int64 `protobuf:"varint,2,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + EndedAt int64 `protobuf:"varint,3,opt,name=ended_at,json=endedAt,proto3" json:"ended_at,omitempty"` + Duration int64 `protobuf:"varint,4,opt,name=duration,proto3" json:"duration,omitempty"` + Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` + Location string `protobuf:"bytes,6,opt,name=location,proto3" json:"location,omitempty"` + TrackCount int64 `protobuf:"varint,7,opt,name=track_count,json=trackCount,proto3" json:"track_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AutoParticipantEgress) Reset() { - *x = AutoParticipantEgress{} - mi := &file_livekit_egress_proto_msgTypes[27] +func (x *McapInfo) Reset() { + *x = McapInfo{} + mi := &file_livekit_egress_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AutoParticipantEgress) String() string { +func (x *McapInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AutoParticipantEgress) ProtoMessage() {} +func (*McapInfo) ProtoMessage() {} -func (x *AutoParticipantEgress) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[27] +func (x *McapInfo) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3713,60 +3696,152 @@ func (x *AutoParticipantEgress) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AutoParticipantEgress.ProtoReflect.Descriptor instead. -func (*AutoParticipantEgress) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{27} +// Deprecated: Use McapInfo.ProtoReflect.Descriptor instead. +func (*McapInfo) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{31} } -func (x *AutoParticipantEgress) GetOptions() isAutoParticipantEgress_Options { +func (x *McapInfo) GetFilename() string { if x != nil { - return x.Options + return x.Filename } - return nil + return "" } -func (x *AutoParticipantEgress) GetPreset() EncodingOptionsPreset { +func (x *McapInfo) GetStartedAt() int64 { if x != nil { - if x, ok := x.Options.(*AutoParticipantEgress_Preset); ok { - return x.Preset - } + return x.StartedAt } - return EncodingOptionsPreset_H264_720P_30 + return 0 } -func (x *AutoParticipantEgress) GetAdvanced() *EncodingOptions { +func (x *McapInfo) GetEndedAt() int64 { if x != nil { - if x, ok := x.Options.(*AutoParticipantEgress_Advanced); ok { - return x.Advanced - } + return x.EndedAt } - return nil + return 0 } -func (x *AutoParticipantEgress) GetFileOutputs() []*EncodedFileOutput { +func (x *McapInfo) GetDuration() int64 { if x != nil { - return x.FileOutputs + return x.Duration } - return nil + return 0 } -func (x *AutoParticipantEgress) GetSegmentOutputs() []*SegmentedFileOutput { +func (x *McapInfo) GetSize() int64 { if x != nil { - return x.SegmentOutputs + return x.Size } - return nil -} - -type isAutoParticipantEgress_Options interface { - isAutoParticipantEgress_Options() + return 0 } -type AutoParticipantEgress_Preset struct { - Preset EncodingOptionsPreset `protobuf:"varint,1,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` // (default H264_720P_30) +func (x *McapInfo) GetLocation() string { + if x != nil { + return x.Location + } + return "" } -type AutoParticipantEgress_Advanced struct { - Advanced *EncodingOptions `protobuf:"bytes,2,opt,name=advanced,proto3,oneof"` // (optional) +func (x *McapInfo) GetTrackCount() int64 { + if x != nil { + return x.TrackCount + } + return 0 +} + +type AutoParticipantEgress struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Options: + // + // *AutoParticipantEgress_Preset + // *AutoParticipantEgress_Advanced + Options isAutoParticipantEgress_Options `protobuf_oneof:"options"` + FileOutputs []*EncodedFileOutput `protobuf:"bytes,3,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` + SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,4,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AutoParticipantEgress) Reset() { + *x = AutoParticipantEgress{} + mi := &file_livekit_egress_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AutoParticipantEgress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AutoParticipantEgress) ProtoMessage() {} + +func (x *AutoParticipantEgress) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AutoParticipantEgress.ProtoReflect.Descriptor instead. +func (*AutoParticipantEgress) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{32} +} + +func (x *AutoParticipantEgress) GetOptions() isAutoParticipantEgress_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *AutoParticipantEgress) GetPreset() EncodingOptionsPreset { + if x != nil { + if x, ok := x.Options.(*AutoParticipantEgress_Preset); ok { + return x.Preset + } + } + return EncodingOptionsPreset_H264_720P_30 +} + +func (x *AutoParticipantEgress) GetAdvanced() *EncodingOptions { + if x != nil { + if x, ok := x.Options.(*AutoParticipantEgress_Advanced); ok { + return x.Advanced + } + } + return nil +} + +func (x *AutoParticipantEgress) GetFileOutputs() []*EncodedFileOutput { + if x != nil { + return x.FileOutputs + } + return nil +} + +func (x *AutoParticipantEgress) GetSegmentOutputs() []*SegmentedFileOutput { + if x != nil { + return x.SegmentOutputs + } + return nil +} + +type isAutoParticipantEgress_Options interface { + isAutoParticipantEgress_Options() +} + +type AutoParticipantEgress_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,1,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` // (default H264_720P_30) +} + +type AutoParticipantEgress_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,2,opt,name=advanced,proto3,oneof"` // (optional) } func (*AutoParticipantEgress_Preset) isAutoParticipantEgress_Options() {} @@ -3790,7 +3865,7 @@ type AutoTrackEgress struct { func (x *AutoTrackEgress) Reset() { *x = AutoTrackEgress{} - mi := &file_livekit_egress_proto_msgTypes[28] + mi := &file_livekit_egress_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3802,7 +3877,7 @@ func (x *AutoTrackEgress) String() string { func (*AutoTrackEgress) ProtoMessage() {} func (x *AutoTrackEgress) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[28] + mi := &file_livekit_egress_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3815,7 +3890,7 @@ func (x *AutoTrackEgress) ProtoReflect() protoreflect.Message { // Deprecated: Use AutoTrackEgress.ProtoReflect.Descriptor instead. func (*AutoTrackEgress) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{28} + return file_livekit_egress_proto_rawDescGZIP(), []int{33} } func (x *AutoTrackEgress) GetFilepath() string { @@ -3903,98 +3978,1650 @@ func (*AutoTrackEgress_Azure) isAutoTrackEgress_Output() {} func (*AutoTrackEgress_AliOSS) isAutoTrackEgress_Output() {} -var File_livekit_egress_proto protoreflect.FileDescriptor +type ExportReplayRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReplayId string `protobuf:"bytes,1,opt,name=replay_id,json=replayId,proto3" json:"replay_id,omitempty"` + StartOffsetMs int64 `protobuf:"varint,2,opt,name=start_offset_ms,json=startOffsetMs,proto3" json:"start_offset_ms,omitempty"` + EndOffsetMs int64 `protobuf:"varint,3,opt,name=end_offset_ms,json=endOffsetMs,proto3" json:"end_offset_ms,omitempty"` + // Types that are valid to be assigned to Source: + // + // *ExportReplayRequest_Template + // *ExportReplayRequest_Web + // *ExportReplayRequest_Media + Source isExportReplayRequest_Source `protobuf_oneof:"source"` + // Types that are valid to be assigned to Encoding: + // + // *ExportReplayRequest_Preset + // *ExportReplayRequest_Advanced + Encoding isExportReplayRequest_Encoding `protobuf_oneof:"encoding"` + Outputs []*Output `protobuf:"bytes,9,rep,name=outputs,proto3" json:"outputs,omitempty"` + Storage *StorageConfig `protobuf:"bytes,10,opt,name=storage,proto3" json:"storage,omitempty"` + Webhooks []*WebhookConfig `protobuf:"bytes,11,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} -const file_livekit_egress_proto_rawDesc = "" + - "\n" + - "\x14livekit_egress.proto\x12\alivekit\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"\xd5\x06\n" + - "\x1aRoomCompositeEgressRequest\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x12\x16\n" + - "\x06layout\x18\x02 \x01(\tR\x06layout\x12\x1d\n" + - "\n" + - "audio_only\x18\x03 \x01(\bR\taudioOnly\x127\n" + - "\faudio_mixing\x18\x0f \x01(\x0e2\x14.livekit.AudioMixingR\vaudioMixing\x12\x1d\n" + - "\n" + - "video_only\x18\x04 \x01(\bR\tvideoOnly\x12&\n" + - "\x0fcustom_base_url\x18\x05 \x01(\tR\rcustomBaseUrl\x124\n" + - "\x04file\x18\x06 \x01(\v2\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00R\x04file\x123\n" + - "\x06stream\x18\a \x01(\v2\x15.livekit.StreamOutputB\x02\x18\x01H\x00R\x06stream\x12>\n" + - "\bsegments\x18\n" + - " \x01(\v2\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00R\bsegments\x128\n" + - "\x06preset\x18\b \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + - "\badvanced\x18\t \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12=\n" + - "\ffile_outputs\x18\v \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + - "\x0estream_outputs\x18\f \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + - "\x0fsegment_outputs\x18\r \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + - "\rimage_outputs\x18\x0e \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\x10 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + - "\x06outputB\t\n" + - "\aoptions\"\xf5\x05\n" + - "\x10WebEgressRequest\x12\x10\n" + - "\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n" + - "\n" + - "audio_only\x18\x02 \x01(\bR\taudioOnly\x12\x1d\n" + - "\n" + - "video_only\x18\x03 \x01(\bR\tvideoOnly\x12,\n" + - "\x12await_start_signal\x18\f \x01(\bR\x10awaitStartSignal\x124\n" + - "\x04file\x18\x04 \x01(\v2\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00R\x04file\x123\n" + - "\x06stream\x18\x05 \x01(\v2\x15.livekit.StreamOutputB\x02\x18\x01H\x00R\x06stream\x12>\n" + - "\bsegments\x18\x06 \x01(\v2\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00R\bsegments\x128\n" + - "\x06preset\x18\a \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + - "\badvanced\x18\b \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12=\n" + - "\ffile_outputs\x18\t \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + - "\x0estream_outputs\x18\n" + - " \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + - "\x0fsegment_outputs\x18\v \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + - "\rimage_outputs\x18\r \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\x0e \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + - "\x06outputB\t\n" + - "\aoptions\"\xa6\x04\n" + - "\x18ParticipantEgressRequest\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x12\x1a\n" + - "\bidentity\x18\x02 \x01(\tR\bidentity\x12!\n" + - "\fscreen_share\x18\x03 \x01(\bR\vscreenShare\x128\n" + - "\x06preset\x18\x04 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x00R\x06preset\x126\n" + - "\badvanced\x18\x05 \x01(\v2\x18.livekit.EncodingOptionsH\x00R\badvanced\x12=\n" + - "\ffile_outputs\x18\x06 \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + - "\x0estream_outputs\x18\a \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + - "\x0fsegment_outputs\x18\b \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + - "\rimage_outputs\x18\t \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\n" + - " \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\t\n" + - "\aoptions\"\x8f\x06\n" + - "\x1bTrackCompositeEgressRequest\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x126\n" + - "\x0eaudio_track_id\x18\x02 \x01(\tB\x10\x9a\xec,\faudioTrackIDR\faudioTrackId\x126\n" + - "\x0evideo_track_id\x18\x03 \x01(\tB\x10\x9a\xec,\fvideoTrackIDR\fvideoTrackId\x124\n" + - "\x04file\x18\x04 \x01(\v2\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00R\x04file\x123\n" + - "\x06stream\x18\x05 \x01(\v2\x15.livekit.StreamOutputB\x02\x18\x01H\x00R\x06stream\x12>\n" + - "\bsegments\x18\b \x01(\v2\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00R\bsegments\x128\n" + - "\x06preset\x18\x06 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + - "\badvanced\x18\a \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12=\n" + - "\ffile_outputs\x18\v \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + - "\x0estream_outputs\x18\f \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + - "\x0fsegment_outputs\x18\r \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + - "\rimage_outputs\x18\x0e \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\x0f \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + - "\x06outputB\t\n" + - "\aoptions\"\xef\x01\n" + - "\x12TrackEgressRequest\x12\x1b\n" + - "\troom_name\x18\x01 \x01(\tR\broomName\x12&\n" + - "\btrack_id\x18\x02 \x01(\tB\v\x9a\xec,\atrackIDR\atrackId\x12/\n" + - "\x04file\x18\x03 \x01(\v2\x19.livekit.DirectFileOutputH\x00R\x04file\x12%\n" + - "\rwebsocket_url\x18\x04 \x01(\tH\x00R\fwebsocketUrl\x122\n" + - "\bwebhooks\x18\x05 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + - "\x06output\"\xcb\x02\n" + - "\x11EncodedFileOutput\x125\n" + +func (x *ExportReplayRequest) Reset() { + *x = ExportReplayRequest{} + mi := &file_livekit_egress_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExportReplayRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExportReplayRequest) ProtoMessage() {} + +func (x *ExportReplayRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExportReplayRequest.ProtoReflect.Descriptor instead. +func (*ExportReplayRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{34} +} + +func (x *ExportReplayRequest) GetReplayId() string { + if x != nil { + return x.ReplayId + } + return "" +} + +func (x *ExportReplayRequest) GetStartOffsetMs() int64 { + if x != nil { + return x.StartOffsetMs + } + return 0 +} + +func (x *ExportReplayRequest) GetEndOffsetMs() int64 { + if x != nil { + return x.EndOffsetMs + } + return 0 +} + +func (x *ExportReplayRequest) GetSource() isExportReplayRequest_Source { + if x != nil { + return x.Source + } + return nil +} + +func (x *ExportReplayRequest) GetTemplate() *TemplateSource { + if x != nil { + if x, ok := x.Source.(*ExportReplayRequest_Template); ok { + return x.Template + } + } + return nil +} + +func (x *ExportReplayRequest) GetWeb() *WebSource { + if x != nil { + if x, ok := x.Source.(*ExportReplayRequest_Web); ok { + return x.Web + } + } + return nil +} + +func (x *ExportReplayRequest) GetMedia() *MediaSource { + if x != nil { + if x, ok := x.Source.(*ExportReplayRequest_Media); ok { + return x.Media + } + } + return nil +} + +func (x *ExportReplayRequest) GetEncoding() isExportReplayRequest_Encoding { + if x != nil { + return x.Encoding + } + return nil +} + +func (x *ExportReplayRequest) GetPreset() EncodingOptionsPreset { + if x != nil { + if x, ok := x.Encoding.(*ExportReplayRequest_Preset); ok { + return x.Preset + } + } + return EncodingOptionsPreset_H264_720P_30 +} + +func (x *ExportReplayRequest) GetAdvanced() *EncodingOptions { + if x != nil { + if x, ok := x.Encoding.(*ExportReplayRequest_Advanced); ok { + return x.Advanced + } + } + return nil +} + +func (x *ExportReplayRequest) GetOutputs() []*Output { + if x != nil { + return x.Outputs + } + return nil +} + +func (x *ExportReplayRequest) GetStorage() *StorageConfig { + if x != nil { + return x.Storage + } + return nil +} + +func (x *ExportReplayRequest) GetWebhooks() []*WebhookConfig { + if x != nil { + return x.Webhooks + } + return nil +} + +type isExportReplayRequest_Source interface { + isExportReplayRequest_Source() +} + +type ExportReplayRequest_Template struct { + Template *TemplateSource `protobuf:"bytes,4,opt,name=template,proto3,oneof"` +} + +type ExportReplayRequest_Web struct { + Web *WebSource `protobuf:"bytes,5,opt,name=web,proto3,oneof"` +} + +type ExportReplayRequest_Media struct { + Media *MediaSource `protobuf:"bytes,6,opt,name=media,proto3,oneof"` +} + +func (*ExportReplayRequest_Template) isExportReplayRequest_Source() {} + +func (*ExportReplayRequest_Web) isExportReplayRequest_Source() {} + +func (*ExportReplayRequest_Media) isExportReplayRequest_Source() {} + +type isExportReplayRequest_Encoding interface { + isExportReplayRequest_Encoding() +} + +type ExportReplayRequest_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,7,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` +} + +type ExportReplayRequest_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,8,opt,name=advanced,proto3,oneof"` +} + +func (*ExportReplayRequest_Preset) isExportReplayRequest_Encoding() {} + +func (*ExportReplayRequest_Advanced) isExportReplayRequest_Encoding() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type RoomCompositeEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + Layout string `protobuf:"bytes,2,opt,name=layout,proto3" json:"layout,omitempty"` + AudioOnly bool `protobuf:"varint,3,opt,name=audio_only,json=audioOnly,proto3" json:"audio_only,omitempty"` + AudioMixing AudioMixing `protobuf:"varint,15,opt,name=audio_mixing,json=audioMixing,proto3,enum=livekit.AudioMixing" json:"audio_mixing,omitempty"` + VideoOnly bool `protobuf:"varint,4,opt,name=video_only,json=videoOnly,proto3" json:"video_only,omitempty"` + CustomBaseUrl string `protobuf:"bytes,5,opt,name=custom_base_url,json=customBaseUrl,proto3" json:"custom_base_url,omitempty"` + // Types that are valid to be assigned to Output: + // + // *RoomCompositeEgressRequest_File + // *RoomCompositeEgressRequest_Stream + // *RoomCompositeEgressRequest_Segments + Output isRoomCompositeEgressRequest_Output `protobuf_oneof:"output"` + // Types that are valid to be assigned to Options: + // + // *RoomCompositeEgressRequest_Preset + // *RoomCompositeEgressRequest_Advanced + Options isRoomCompositeEgressRequest_Options `protobuf_oneof:"options"` + FileOutputs []*EncodedFileOutput `protobuf:"bytes,11,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` + StreamOutputs []*StreamOutput `protobuf:"bytes,12,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` + SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,13,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` + ImageOutputs []*ImageOutput `protobuf:"bytes,14,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` + Webhooks []*WebhookConfig `protobuf:"bytes,16,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RoomCompositeEgressRequest) Reset() { + *x = RoomCompositeEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RoomCompositeEgressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomCompositeEgressRequest) ProtoMessage() {} + +func (x *RoomCompositeEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoomCompositeEgressRequest.ProtoReflect.Descriptor instead. +func (*RoomCompositeEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{35} +} + +func (x *RoomCompositeEgressRequest) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *RoomCompositeEgressRequest) GetLayout() string { + if x != nil { + return x.Layout + } + return "" +} + +func (x *RoomCompositeEgressRequest) GetAudioOnly() bool { + if x != nil { + return x.AudioOnly + } + return false +} + +func (x *RoomCompositeEgressRequest) GetAudioMixing() AudioMixing { + if x != nil { + return x.AudioMixing + } + return AudioMixing_DEFAULT_MIXING +} + +func (x *RoomCompositeEgressRequest) GetVideoOnly() bool { + if x != nil { + return x.VideoOnly + } + return false +} + +func (x *RoomCompositeEgressRequest) GetCustomBaseUrl() string { + if x != nil { + return x.CustomBaseUrl + } + return "" +} + +func (x *RoomCompositeEgressRequest) GetOutput() isRoomCompositeEgressRequest_Output { + if x != nil { + return x.Output + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *RoomCompositeEgressRequest) GetFile() *EncodedFileOutput { + if x != nil { + if x, ok := x.Output.(*RoomCompositeEgressRequest_File); ok { + return x.File + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *RoomCompositeEgressRequest) GetStream() *StreamOutput { + if x != nil { + if x, ok := x.Output.(*RoomCompositeEgressRequest_Stream); ok { + return x.Stream + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *RoomCompositeEgressRequest) GetSegments() *SegmentedFileOutput { + if x != nil { + if x, ok := x.Output.(*RoomCompositeEgressRequest_Segments); ok { + return x.Segments + } + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetOptions() isRoomCompositeEgressRequest_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetPreset() EncodingOptionsPreset { + if x != nil { + if x, ok := x.Options.(*RoomCompositeEgressRequest_Preset); ok { + return x.Preset + } + } + return EncodingOptionsPreset_H264_720P_30 +} + +func (x *RoomCompositeEgressRequest) GetAdvanced() *EncodingOptions { + if x != nil { + if x, ok := x.Options.(*RoomCompositeEgressRequest_Advanced); ok { + return x.Advanced + } + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetFileOutputs() []*EncodedFileOutput { + if x != nil { + return x.FileOutputs + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetStreamOutputs() []*StreamOutput { + if x != nil { + return x.StreamOutputs + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { + if x != nil { + return x.SegmentOutputs + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetImageOutputs() []*ImageOutput { + if x != nil { + return x.ImageOutputs + } + return nil +} + +func (x *RoomCompositeEgressRequest) GetWebhooks() []*WebhookConfig { + if x != nil { + return x.Webhooks + } + return nil +} + +type isRoomCompositeEgressRequest_Output interface { + isRoomCompositeEgressRequest_Output() +} + +type RoomCompositeEgressRequest_File struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + File *EncodedFileOutput `protobuf:"bytes,6,opt,name=file,proto3,oneof"` +} + +type RoomCompositeEgressRequest_Stream struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Stream *StreamOutput `protobuf:"bytes,7,opt,name=stream,proto3,oneof"` +} + +type RoomCompositeEgressRequest_Segments struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Segments *SegmentedFileOutput `protobuf:"bytes,10,opt,name=segments,proto3,oneof"` +} + +func (*RoomCompositeEgressRequest_File) isRoomCompositeEgressRequest_Output() {} + +func (*RoomCompositeEgressRequest_Stream) isRoomCompositeEgressRequest_Output() {} + +func (*RoomCompositeEgressRequest_Segments) isRoomCompositeEgressRequest_Output() {} + +type isRoomCompositeEgressRequest_Options interface { + isRoomCompositeEgressRequest_Options() +} + +type RoomCompositeEgressRequest_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,8,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` +} + +type RoomCompositeEgressRequest_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,9,opt,name=advanced,proto3,oneof"` +} + +func (*RoomCompositeEgressRequest_Preset) isRoomCompositeEgressRequest_Options() {} + +func (*RoomCompositeEgressRequest_Advanced) isRoomCompositeEgressRequest_Options() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type WebEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + AudioOnly bool `protobuf:"varint,2,opt,name=audio_only,json=audioOnly,proto3" json:"audio_only,omitempty"` + VideoOnly bool `protobuf:"varint,3,opt,name=video_only,json=videoOnly,proto3" json:"video_only,omitempty"` + AwaitStartSignal bool `protobuf:"varint,12,opt,name=await_start_signal,json=awaitStartSignal,proto3" json:"await_start_signal,omitempty"` + // Types that are valid to be assigned to Output: + // + // *WebEgressRequest_File + // *WebEgressRequest_Stream + // *WebEgressRequest_Segments + Output isWebEgressRequest_Output `protobuf_oneof:"output"` + // Types that are valid to be assigned to Options: + // + // *WebEgressRequest_Preset + // *WebEgressRequest_Advanced + Options isWebEgressRequest_Options `protobuf_oneof:"options"` + FileOutputs []*EncodedFileOutput `protobuf:"bytes,9,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` + StreamOutputs []*StreamOutput `protobuf:"bytes,10,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` + SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,11,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` + ImageOutputs []*ImageOutput `protobuf:"bytes,13,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` + Webhooks []*WebhookConfig `protobuf:"bytes,14,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WebEgressRequest) Reset() { + *x = WebEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WebEgressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WebEgressRequest) ProtoMessage() {} + +func (x *WebEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WebEgressRequest.ProtoReflect.Descriptor instead. +func (*WebEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{36} +} + +func (x *WebEgressRequest) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *WebEgressRequest) GetAudioOnly() bool { + if x != nil { + return x.AudioOnly + } + return false +} + +func (x *WebEgressRequest) GetVideoOnly() bool { + if x != nil { + return x.VideoOnly + } + return false +} + +func (x *WebEgressRequest) GetAwaitStartSignal() bool { + if x != nil { + return x.AwaitStartSignal + } + return false +} + +func (x *WebEgressRequest) GetOutput() isWebEgressRequest_Output { + if x != nil { + return x.Output + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *WebEgressRequest) GetFile() *EncodedFileOutput { + if x != nil { + if x, ok := x.Output.(*WebEgressRequest_File); ok { + return x.File + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *WebEgressRequest) GetStream() *StreamOutput { + if x != nil { + if x, ok := x.Output.(*WebEgressRequest_Stream); ok { + return x.Stream + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *WebEgressRequest) GetSegments() *SegmentedFileOutput { + if x != nil { + if x, ok := x.Output.(*WebEgressRequest_Segments); ok { + return x.Segments + } + } + return nil +} + +func (x *WebEgressRequest) GetOptions() isWebEgressRequest_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *WebEgressRequest) GetPreset() EncodingOptionsPreset { + if x != nil { + if x, ok := x.Options.(*WebEgressRequest_Preset); ok { + return x.Preset + } + } + return EncodingOptionsPreset_H264_720P_30 +} + +func (x *WebEgressRequest) GetAdvanced() *EncodingOptions { + if x != nil { + if x, ok := x.Options.(*WebEgressRequest_Advanced); ok { + return x.Advanced + } + } + return nil +} + +func (x *WebEgressRequest) GetFileOutputs() []*EncodedFileOutput { + if x != nil { + return x.FileOutputs + } + return nil +} + +func (x *WebEgressRequest) GetStreamOutputs() []*StreamOutput { + if x != nil { + return x.StreamOutputs + } + return nil +} + +func (x *WebEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { + if x != nil { + return x.SegmentOutputs + } + return nil +} + +func (x *WebEgressRequest) GetImageOutputs() []*ImageOutput { + if x != nil { + return x.ImageOutputs + } + return nil +} + +func (x *WebEgressRequest) GetWebhooks() []*WebhookConfig { + if x != nil { + return x.Webhooks + } + return nil +} + +type isWebEgressRequest_Output interface { + isWebEgressRequest_Output() +} + +type WebEgressRequest_File struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + File *EncodedFileOutput `protobuf:"bytes,4,opt,name=file,proto3,oneof"` +} + +type WebEgressRequest_Stream struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Stream *StreamOutput `protobuf:"bytes,5,opt,name=stream,proto3,oneof"` +} + +type WebEgressRequest_Segments struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Segments *SegmentedFileOutput `protobuf:"bytes,6,opt,name=segments,proto3,oneof"` +} + +func (*WebEgressRequest_File) isWebEgressRequest_Output() {} + +func (*WebEgressRequest_Stream) isWebEgressRequest_Output() {} + +func (*WebEgressRequest_Segments) isWebEgressRequest_Output() {} + +type isWebEgressRequest_Options interface { + isWebEgressRequest_Options() +} + +type WebEgressRequest_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,7,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` +} + +type WebEgressRequest_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,8,opt,name=advanced,proto3,oneof"` +} + +func (*WebEgressRequest_Preset) isWebEgressRequest_Options() {} + +func (*WebEgressRequest_Advanced) isWebEgressRequest_Options() {} + +// record audio and video from a single participant +// +// Deprecated: Marked as deprecated in livekit_egress.proto. +type ParticipantEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + ScreenShare bool `protobuf:"varint,3,opt,name=screen_share,json=screenShare,proto3" json:"screen_share,omitempty"` + // Types that are valid to be assigned to Options: + // + // *ParticipantEgressRequest_Preset + // *ParticipantEgressRequest_Advanced + Options isParticipantEgressRequest_Options `protobuf_oneof:"options"` + FileOutputs []*EncodedFileOutput `protobuf:"bytes,6,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` + StreamOutputs []*StreamOutput `protobuf:"bytes,7,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` + SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,8,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` + ImageOutputs []*ImageOutput `protobuf:"bytes,9,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` + Webhooks []*WebhookConfig `protobuf:"bytes,10,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ParticipantEgressRequest) Reset() { + *x = ParticipantEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ParticipantEgressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParticipantEgressRequest) ProtoMessage() {} + +func (x *ParticipantEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParticipantEgressRequest.ProtoReflect.Descriptor instead. +func (*ParticipantEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{37} +} + +func (x *ParticipantEgressRequest) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *ParticipantEgressRequest) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *ParticipantEgressRequest) GetScreenShare() bool { + if x != nil { + return x.ScreenShare + } + return false +} + +func (x *ParticipantEgressRequest) GetOptions() isParticipantEgressRequest_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *ParticipantEgressRequest) GetPreset() EncodingOptionsPreset { + if x != nil { + if x, ok := x.Options.(*ParticipantEgressRequest_Preset); ok { + return x.Preset + } + } + return EncodingOptionsPreset_H264_720P_30 +} + +func (x *ParticipantEgressRequest) GetAdvanced() *EncodingOptions { + if x != nil { + if x, ok := x.Options.(*ParticipantEgressRequest_Advanced); ok { + return x.Advanced + } + } + return nil +} + +func (x *ParticipantEgressRequest) GetFileOutputs() []*EncodedFileOutput { + if x != nil { + return x.FileOutputs + } + return nil +} + +func (x *ParticipantEgressRequest) GetStreamOutputs() []*StreamOutput { + if x != nil { + return x.StreamOutputs + } + return nil +} + +func (x *ParticipantEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { + if x != nil { + return x.SegmentOutputs + } + return nil +} + +func (x *ParticipantEgressRequest) GetImageOutputs() []*ImageOutput { + if x != nil { + return x.ImageOutputs + } + return nil +} + +func (x *ParticipantEgressRequest) GetWebhooks() []*WebhookConfig { + if x != nil { + return x.Webhooks + } + return nil +} + +type isParticipantEgressRequest_Options interface { + isParticipantEgressRequest_Options() +} + +type ParticipantEgressRequest_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,4,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` +} + +type ParticipantEgressRequest_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,5,opt,name=advanced,proto3,oneof"` +} + +func (*ParticipantEgressRequest_Preset) isParticipantEgressRequest_Options() {} + +func (*ParticipantEgressRequest_Advanced) isParticipantEgressRequest_Options() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type TrackCompositeEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + AudioTrackId string `protobuf:"bytes,2,opt,name=audio_track_id,json=audioTrackId,proto3" json:"audio_track_id,omitempty"` + VideoTrackId string `protobuf:"bytes,3,opt,name=video_track_id,json=videoTrackId,proto3" json:"video_track_id,omitempty"` + // Types that are valid to be assigned to Output: + // + // *TrackCompositeEgressRequest_File + // *TrackCompositeEgressRequest_Stream + // *TrackCompositeEgressRequest_Segments + Output isTrackCompositeEgressRequest_Output `protobuf_oneof:"output"` + // Types that are valid to be assigned to Options: + // + // *TrackCompositeEgressRequest_Preset + // *TrackCompositeEgressRequest_Advanced + Options isTrackCompositeEgressRequest_Options `protobuf_oneof:"options"` + FileOutputs []*EncodedFileOutput `protobuf:"bytes,11,rep,name=file_outputs,json=fileOutputs,proto3" json:"file_outputs,omitempty"` + StreamOutputs []*StreamOutput `protobuf:"bytes,12,rep,name=stream_outputs,json=streamOutputs,proto3" json:"stream_outputs,omitempty"` + SegmentOutputs []*SegmentedFileOutput `protobuf:"bytes,13,rep,name=segment_outputs,json=segmentOutputs,proto3" json:"segment_outputs,omitempty"` + ImageOutputs []*ImageOutput `protobuf:"bytes,14,rep,name=image_outputs,json=imageOutputs,proto3" json:"image_outputs,omitempty"` + Webhooks []*WebhookConfig `protobuf:"bytes,15,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TrackCompositeEgressRequest) Reset() { + *x = TrackCompositeEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TrackCompositeEgressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrackCompositeEgressRequest) ProtoMessage() {} + +func (x *TrackCompositeEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrackCompositeEgressRequest.ProtoReflect.Descriptor instead. +func (*TrackCompositeEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{38} +} + +func (x *TrackCompositeEgressRequest) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *TrackCompositeEgressRequest) GetAudioTrackId() string { + if x != nil { + return x.AudioTrackId + } + return "" +} + +func (x *TrackCompositeEgressRequest) GetVideoTrackId() string { + if x != nil { + return x.VideoTrackId + } + return "" +} + +func (x *TrackCompositeEgressRequest) GetOutput() isTrackCompositeEgressRequest_Output { + if x != nil { + return x.Output + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *TrackCompositeEgressRequest) GetFile() *EncodedFileOutput { + if x != nil { + if x, ok := x.Output.(*TrackCompositeEgressRequest_File); ok { + return x.File + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *TrackCompositeEgressRequest) GetStream() *StreamOutput { + if x != nil { + if x, ok := x.Output.(*TrackCompositeEgressRequest_Stream); ok { + return x.Stream + } + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *TrackCompositeEgressRequest) GetSegments() *SegmentedFileOutput { + if x != nil { + if x, ok := x.Output.(*TrackCompositeEgressRequest_Segments); ok { + return x.Segments + } + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetOptions() isTrackCompositeEgressRequest_Options { + if x != nil { + return x.Options + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetPreset() EncodingOptionsPreset { + if x != nil { + if x, ok := x.Options.(*TrackCompositeEgressRequest_Preset); ok { + return x.Preset + } + } + return EncodingOptionsPreset_H264_720P_30 +} + +func (x *TrackCompositeEgressRequest) GetAdvanced() *EncodingOptions { + if x != nil { + if x, ok := x.Options.(*TrackCompositeEgressRequest_Advanced); ok { + return x.Advanced + } + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetFileOutputs() []*EncodedFileOutput { + if x != nil { + return x.FileOutputs + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetStreamOutputs() []*StreamOutput { + if x != nil { + return x.StreamOutputs + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetSegmentOutputs() []*SegmentedFileOutput { + if x != nil { + return x.SegmentOutputs + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetImageOutputs() []*ImageOutput { + if x != nil { + return x.ImageOutputs + } + return nil +} + +func (x *TrackCompositeEgressRequest) GetWebhooks() []*WebhookConfig { + if x != nil { + return x.Webhooks + } + return nil +} + +type isTrackCompositeEgressRequest_Output interface { + isTrackCompositeEgressRequest_Output() +} + +type TrackCompositeEgressRequest_File struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + File *EncodedFileOutput `protobuf:"bytes,4,opt,name=file,proto3,oneof"` +} + +type TrackCompositeEgressRequest_Stream struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Stream *StreamOutput `protobuf:"bytes,5,opt,name=stream,proto3,oneof"` +} + +type TrackCompositeEgressRequest_Segments struct { + // Deprecated: Marked as deprecated in livekit_egress.proto. + Segments *SegmentedFileOutput `protobuf:"bytes,8,opt,name=segments,proto3,oneof"` +} + +func (*TrackCompositeEgressRequest_File) isTrackCompositeEgressRequest_Output() {} + +func (*TrackCompositeEgressRequest_Stream) isTrackCompositeEgressRequest_Output() {} + +func (*TrackCompositeEgressRequest_Segments) isTrackCompositeEgressRequest_Output() {} + +type isTrackCompositeEgressRequest_Options interface { + isTrackCompositeEgressRequest_Options() +} + +type TrackCompositeEgressRequest_Preset struct { + Preset EncodingOptionsPreset `protobuf:"varint,6,opt,name=preset,proto3,enum=livekit.EncodingOptionsPreset,oneof"` +} + +type TrackCompositeEgressRequest_Advanced struct { + Advanced *EncodingOptions `protobuf:"bytes,7,opt,name=advanced,proto3,oneof"` +} + +func (*TrackCompositeEgressRequest_Preset) isTrackCompositeEgressRequest_Options() {} + +func (*TrackCompositeEgressRequest_Advanced) isTrackCompositeEgressRequest_Options() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type TrackEgressRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + TrackId string `protobuf:"bytes,2,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` + // Types that are valid to be assigned to Output: + // + // *TrackEgressRequest_File + // *TrackEgressRequest_WebsocketUrl + Output isTrackEgressRequest_Output `protobuf_oneof:"output"` + Webhooks []*WebhookConfig `protobuf:"bytes,5,rep,name=webhooks,proto3" json:"webhooks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TrackEgressRequest) Reset() { + *x = TrackEgressRequest{} + mi := &file_livekit_egress_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TrackEgressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrackEgressRequest) ProtoMessage() {} + +func (x *TrackEgressRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrackEgressRequest.ProtoReflect.Descriptor instead. +func (*TrackEgressRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{39} +} + +func (x *TrackEgressRequest) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *TrackEgressRequest) GetTrackId() string { + if x != nil { + return x.TrackId + } + return "" +} + +func (x *TrackEgressRequest) GetOutput() isTrackEgressRequest_Output { + if x != nil { + return x.Output + } + return nil +} + +func (x *TrackEgressRequest) GetFile() *DirectFileOutput { + if x != nil { + if x, ok := x.Output.(*TrackEgressRequest_File); ok { + return x.File + } + } + return nil +} + +func (x *TrackEgressRequest) GetWebsocketUrl() string { + if x != nil { + if x, ok := x.Output.(*TrackEgressRequest_WebsocketUrl); ok { + return x.WebsocketUrl + } + } + return "" +} + +func (x *TrackEgressRequest) GetWebhooks() []*WebhookConfig { + if x != nil { + return x.Webhooks + } + return nil +} + +type isTrackEgressRequest_Output interface { + isTrackEgressRequest_Output() +} + +type TrackEgressRequest_File struct { + File *DirectFileOutput `protobuf:"bytes,3,opt,name=file,proto3,oneof"` +} + +type TrackEgressRequest_WebsocketUrl struct { + WebsocketUrl string `protobuf:"bytes,4,opt,name=websocket_url,json=websocketUrl,proto3,oneof"` +} + +func (*TrackEgressRequest_File) isTrackEgressRequest_Output() {} + +func (*TrackEgressRequest_WebsocketUrl) isTrackEgressRequest_Output() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type DirectFileOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filepath string `protobuf:"bytes,1,opt,name=filepath,proto3" json:"filepath,omitempty"` + DisableManifest bool `protobuf:"varint,5,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` + // Types that are valid to be assigned to Output: + // + // *DirectFileOutput_S3 + // *DirectFileOutput_Gcp + // *DirectFileOutput_Azure + // *DirectFileOutput_AliOSS + Output isDirectFileOutput_Output `protobuf_oneof:"output"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DirectFileOutput) Reset() { + *x = DirectFileOutput{} + mi := &file_livekit_egress_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DirectFileOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DirectFileOutput) ProtoMessage() {} + +func (x *DirectFileOutput) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DirectFileOutput.ProtoReflect.Descriptor instead. +func (*DirectFileOutput) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{40} +} + +func (x *DirectFileOutput) GetFilepath() string { + if x != nil { + return x.Filepath + } + return "" +} + +func (x *DirectFileOutput) GetDisableManifest() bool { + if x != nil { + return x.DisableManifest + } + return false +} + +func (x *DirectFileOutput) GetOutput() isDirectFileOutput_Output { + if x != nil { + return x.Output + } + return nil +} + +func (x *DirectFileOutput) GetS3() *S3Upload { + if x != nil { + if x, ok := x.Output.(*DirectFileOutput_S3); ok { + return x.S3 + } + } + return nil +} + +func (x *DirectFileOutput) GetGcp() *GCPUpload { + if x != nil { + if x, ok := x.Output.(*DirectFileOutput_Gcp); ok { + return x.Gcp + } + } + return nil +} + +func (x *DirectFileOutput) GetAzure() *AzureBlobUpload { + if x != nil { + if x, ok := x.Output.(*DirectFileOutput_Azure); ok { + return x.Azure + } + } + return nil +} + +func (x *DirectFileOutput) GetAliOSS() *AliOSSUpload { + if x != nil { + if x, ok := x.Output.(*DirectFileOutput_AliOSS); ok { + return x.AliOSS + } + } + return nil +} + +type isDirectFileOutput_Output interface { + isDirectFileOutput_Output() +} + +type DirectFileOutput_S3 struct { + S3 *S3Upload `protobuf:"bytes,2,opt,name=s3,proto3,oneof"` +} + +type DirectFileOutput_Gcp struct { + Gcp *GCPUpload `protobuf:"bytes,3,opt,name=gcp,proto3,oneof"` +} + +type DirectFileOutput_Azure struct { + Azure *AzureBlobUpload `protobuf:"bytes,4,opt,name=azure,proto3,oneof"` +} + +type DirectFileOutput_AliOSS struct { + AliOSS *AliOSSUpload `protobuf:"bytes,6,opt,name=aliOSS,proto3,oneof"` +} + +func (*DirectFileOutput_S3) isDirectFileOutput_Output() {} + +func (*DirectFileOutput_Gcp) isDirectFileOutput_Output() {} + +func (*DirectFileOutput_Azure) isDirectFileOutput_Output() {} + +func (*DirectFileOutput_AliOSS) isDirectFileOutput_Output() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type EncodedFileOutput struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileType EncodedFileType `protobuf:"varint,1,opt,name=file_type,json=fileType,proto3,enum=livekit.EncodedFileType" json:"file_type,omitempty"` + Filepath string `protobuf:"bytes,2,opt,name=filepath,proto3" json:"filepath,omitempty"` + DisableManifest bool `protobuf:"varint,6,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` + // Types that are valid to be assigned to Output: + // + // *EncodedFileOutput_S3 + // *EncodedFileOutput_Gcp + // *EncodedFileOutput_Azure + // *EncodedFileOutput_AliOSS + Output isEncodedFileOutput_Output `protobuf_oneof:"output"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EncodedFileOutput) Reset() { + *x = EncodedFileOutput{} + mi := &file_livekit_egress_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EncodedFileOutput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EncodedFileOutput) ProtoMessage() {} + +func (x *EncodedFileOutput) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EncodedFileOutput.ProtoReflect.Descriptor instead. +func (*EncodedFileOutput) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{41} +} + +func (x *EncodedFileOutput) GetFileType() EncodedFileType { + if x != nil { + return x.FileType + } + return EncodedFileType_DEFAULT_FILETYPE +} + +func (x *EncodedFileOutput) GetFilepath() string { + if x != nil { + return x.Filepath + } + return "" +} + +func (x *EncodedFileOutput) GetDisableManifest() bool { + if x != nil { + return x.DisableManifest + } + return false +} + +func (x *EncodedFileOutput) GetOutput() isEncodedFileOutput_Output { + if x != nil { + return x.Output + } + return nil +} + +func (x *EncodedFileOutput) GetS3() *S3Upload { + if x != nil { + if x, ok := x.Output.(*EncodedFileOutput_S3); ok { + return x.S3 + } + } + return nil +} + +func (x *EncodedFileOutput) GetGcp() *GCPUpload { + if x != nil { + if x, ok := x.Output.(*EncodedFileOutput_Gcp); ok { + return x.Gcp + } + } + return nil +} + +func (x *EncodedFileOutput) GetAzure() *AzureBlobUpload { + if x != nil { + if x, ok := x.Output.(*EncodedFileOutput_Azure); ok { + return x.Azure + } + } + return nil +} + +func (x *EncodedFileOutput) GetAliOSS() *AliOSSUpload { + if x != nil { + if x, ok := x.Output.(*EncodedFileOutput_AliOSS); ok { + return x.AliOSS + } + } + return nil +} + +type isEncodedFileOutput_Output interface { + isEncodedFileOutput_Output() +} + +type EncodedFileOutput_S3 struct { + S3 *S3Upload `protobuf:"bytes,3,opt,name=s3,proto3,oneof"` +} + +type EncodedFileOutput_Gcp struct { + Gcp *GCPUpload `protobuf:"bytes,4,opt,name=gcp,proto3,oneof"` +} + +type EncodedFileOutput_Azure struct { + Azure *AzureBlobUpload `protobuf:"bytes,5,opt,name=azure,proto3,oneof"` +} + +type EncodedFileOutput_AliOSS struct { + AliOSS *AliOSSUpload `protobuf:"bytes,7,opt,name=aliOSS,proto3,oneof"` +} + +func (*EncodedFileOutput_S3) isEncodedFileOutput_Output() {} + +func (*EncodedFileOutput_Gcp) isEncodedFileOutput_Output() {} + +func (*EncodedFileOutput_Azure) isEncodedFileOutput_Output() {} + +func (*EncodedFileOutput_AliOSS) isEncodedFileOutput_Output() {} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type UpdateLayoutRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` + Layout string `protobuf:"bytes,2,opt,name=layout,proto3" json:"layout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateLayoutRequest) Reset() { + *x = UpdateLayoutRequest{} + mi := &file_livekit_egress_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateLayoutRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateLayoutRequest) ProtoMessage() {} + +func (x *UpdateLayoutRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateLayoutRequest.ProtoReflect.Descriptor instead. +func (*UpdateLayoutRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{42} +} + +func (x *UpdateLayoutRequest) GetEgressId() string { + if x != nil { + return x.EgressId + } + return "" +} + +func (x *UpdateLayoutRequest) GetLayout() string { + if x != nil { + return x.Layout + } + return "" +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type UpdateStreamRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` + AddOutputUrls []string `protobuf:"bytes,2,rep,name=add_output_urls,json=addOutputUrls,proto3" json:"add_output_urls,omitempty"` + RemoveOutputUrls []string `protobuf:"bytes,3,rep,name=remove_output_urls,json=removeOutputUrls,proto3" json:"remove_output_urls,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateStreamRequest) Reset() { + *x = UpdateStreamRequest{} + mi := &file_livekit_egress_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateStreamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateStreamRequest) ProtoMessage() {} + +func (x *UpdateStreamRequest) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateStreamRequest.ProtoReflect.Descriptor instead. +func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{43} +} + +func (x *UpdateStreamRequest) GetEgressId() string { + if x != nil { + return x.EgressId + } + return "" +} + +func (x *UpdateStreamRequest) GetAddOutputUrls() []string { + if x != nil { + return x.AddOutputUrls + } + return nil +} + +func (x *UpdateStreamRequest) GetRemoveOutputUrls() []string { + if x != nil { + return x.RemoveOutputUrls + } + return nil +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +type StreamInfoList struct { + state protoimpl.MessageState `protogen:"open.v1"` + Info []*StreamInfo `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StreamInfoList) Reset() { + *x = StreamInfoList{} + mi := &file_livekit_egress_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StreamInfoList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamInfoList) ProtoMessage() {} + +func (x *StreamInfoList) ProtoReflect() protoreflect.Message { + mi := &file_livekit_egress_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamInfoList.ProtoReflect.Descriptor instead. +func (*StreamInfoList) Descriptor() ([]byte, []int) { + return file_livekit_egress_proto_rawDescGZIP(), []int{44} +} + +func (x *StreamInfoList) GetInfo() []*StreamInfo { + if x != nil { + return x.Info + } + return nil +} + +var File_livekit_egress_proto protoreflect.FileDescriptor + +const file_livekit_egress_proto_rawDesc = "" + + "\n" + + "\x14livekit_egress.proto\x12\alivekit\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"\xd7\x03\n" + + "\x12StartEgressRequest\x12\x1b\n" + + "\troom_name\x18\x01 \x01(\tR\broomName\x125\n" + + "\btemplate\x18\x02 \x01(\v2\x17.livekit.TemplateSourceH\x00R\btemplate\x12&\n" + + "\x03web\x18\x03 \x01(\v2\x12.livekit.WebSourceH\x00R\x03web\x12,\n" + + "\x05media\x18\x04 \x01(\v2\x14.livekit.MediaSourceH\x00R\x05media\x128\n" + + "\x06preset\x18\x05 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + + "\badvanced\x18\x06 \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12)\n" + + "\aoutputs\x18\a \x03(\v2\x0f.livekit.OutputR\aoutputs\x120\n" + + "\astorage\x18\b \x01(\v2\x16.livekit.StorageConfigR\astorage\x122\n" + + "\bwebhooks\x18\t \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + + "\x06sourceB\n" + + "\n" + + "\bencoding\"\x8e\x01\n" + + "\x0eTemplateSource\x12\x16\n" + + "\x06layout\x18\x01 \x01(\tR\x06layout\x12\x1d\n" + + "\n" + + "audio_only\x18\x02 \x01(\bR\taudioOnly\x12\x1d\n" + + "\n" + + "video_only\x18\x03 \x01(\bR\tvideoOnly\x12&\n" + + "\x0fcustom_base_url\x18\x04 \x01(\tR\rcustomBaseUrl\"\x89\x01\n" + + "\tWebSource\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n" + + "\n" + + "audio_only\x18\x02 \x01(\bR\taudioOnly\x12\x1d\n" + + "\n" + + "video_only\x18\x03 \x01(\bR\tvideoOnly\x12,\n" + + "\x12await_start_signal\x18\x04 \x01(\bR\x10awaitStartSignal\"\xef\x01\n" + + "\vMediaSource\x128\n" + + "\x0evideo_track_id\x18\x01 \x01(\tB\x10\x9a\xec,\fvideoTrackIDH\x00R\fvideoTrackId\x12H\n" + + "\x11participant_video\x18\x02 \x01(\v2\x19.livekit.ParticipantVideoH\x00R\x10participantVideo\x12*\n" + + "\x05audio\x18\x03 \x01(\v2\x14.livekit.AudioConfigR\x05audio\x12'\n" + + "\x04data\x18\x04 \x01(\v2\x13.livekit.DataConfigR\x04dataB\a\n" + + "\x05video\"^\n" + + "\x10ParticipantVideo\x12\x1a\n" + + "\bidentity\x18\x01 \x01(\tR\bidentity\x12.\n" + + "\x13prefer_screen_share\x18\x02 \x01(\bR\x11preferScreenShare\":\n" + + "\vAudioConfig\x12+\n" + + "\x06routes\x18\x01 \x03(\v2\x13.livekit.AudioRouteR\x06routes\"\xf1\x01\n" + + "\n" + + "AudioRoute\x12(\n" + + "\btrack_id\x18\x01 \x01(\tB\v\x9a\xec,\atrackIDH\x00R\atrackId\x123\n" + + "\x14participant_identity\x18\x02 \x01(\tH\x00R\x13participantIdentity\x12J\n" + + "\x10participant_kind\x18\x03 \x01(\x0e2\x1d.livekit.ParticipantInfo.KindH\x00R\x0fparticipantKind\x12/\n" + + "\achannel\x18\x04 \x01(\x0e2\x15.livekit.AudioChannelR\achannelB\a\n" + + "\x05match\"A\n" + + "\n" + + "DataConfig\x123\n" + + "\tselectors\x18\x01 \x03(\v2\x15.livekit.DataSelectorR\tselectors\"\x8e\x01\n" + + "\fDataSelector\x12(\n" + + "\btrack_id\x18\x01 \x01(\tB\v\x9a\xec,\atrackIDH\x00R\atrackId\x123\n" + + "\x14participant_identity\x18\x02 \x01(\tH\x00R\x13participantIdentity\x12\x16\n" + + "\x05topic\x18\x03 \x01(\tH\x00R\x05topicB\a\n" + + "\x05match\"\xca\x03\n" + + "\x0fEncodingOptions\x12\x14\n" + + "\x05width\x18\x01 \x01(\x05R\x05width\x12\x16\n" + + "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + + "\x05depth\x18\x03 \x01(\x05R\x05depth\x12\x1c\n" + + "\tframerate\x18\x04 \x01(\x05R\tframerate\x124\n" + + "\vaudio_codec\x18\x05 \x01(\x0e2\x13.livekit.AudioCodecR\n" + + "audioCodec\x12#\n" + + "\raudio_bitrate\x18\x06 \x01(\x05R\faudioBitrate\x12#\n" + + "\raudio_quality\x18\v \x01(\x05R\faudioQuality\x12'\n" + + "\x0faudio_frequency\x18\a \x01(\x05R\x0eaudioFrequency\x124\n" + + "\vvideo_codec\x18\b \x01(\x0e2\x13.livekit.VideoCodecR\n" + + "videoCodec\x12#\n" + + "\rvideo_bitrate\x18\t \x01(\x05R\fvideoBitrate\x12#\n" + + "\rvideo_quality\x18\f \x01(\x05R\fvideoQuality\x12,\n" + + "\x12key_frame_interval\x18\n" + + " \x01(\x01R\x10keyFrameInterval\"\xb7\x02\n" + + "\x06Output\x12)\n" + + "\x04file\x18\x01 \x01(\v2\x13.livekit.FileOutputH\x00R\x04file\x12/\n" + + "\x06stream\x18\x02 \x01(\v2\x15.livekit.StreamOutputH\x00R\x06stream\x12:\n" + + "\bsegments\x18\x03 \x01(\v2\x1c.livekit.SegmentedFileOutputH\x00R\bsegments\x12.\n" + + "\x06images\x18\x04 \x01(\v2\x14.livekit.ImageOutputH\x00R\x06images\x12)\n" + + "\x04mcap\x18\x05 \x01(\v2\x13.livekit.McapOutputH\x00R\x04mcap\x120\n" + + "\astorage\x18\x06 \x01(\v2\x16.livekit.StorageConfigR\astorageB\b\n" + + "\x06config\"\x8a\x01\n" + + "\n" + + "FileOutput\x125\n" + "\tfile_type\x18\x01 \x01(\x0e2\x18.livekit.EncodedFileTypeR\bfileType\x12\x1a\n" + "\bfilepath\x18\x02 \x01(\tR\bfilepath\x12)\n" + - "\x10disable_manifest\x18\x06 \x01(\bR\x0fdisableManifest\x12#\n" + - "\x02s3\x18\x03 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + - "\x03gcp\x18\x04 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + - "\x05azure\x18\x05 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + - "\x06aliOSS\x18\a \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output\"\xa4\x04\n" + + "\x10disable_manifest\x18\x03 \x01(\bR\x0fdisableManifest\"W\n" + + "\fStreamOutput\x123\n" + + "\bprotocol\x18\x01 \x01(\x0e2\x17.livekit.StreamProtocolR\bprotocol\x12\x12\n" + + "\x04urls\x18\x02 \x03(\tR\x04urls\"\xb4\x04\n" + "\x13SegmentedFileOutput\x12:\n" + "\bprotocol\x18\x01 \x01(\x0e2\x1e.livekit.SegmentedFileProtocolR\bprotocol\x12'\n" + "\x0ffilename_prefix\x18\x02 \x01(\tR\x0efilenamePrefix\x12#\n" + @@ -4003,20 +5630,12 @@ const file_livekit_egress_proto_rawDesc = "" + "\x10segment_duration\x18\x04 \x01(\rR\x0fsegmentDuration\x12E\n" + "\x0ffilename_suffix\x18\n" + " \x01(\x0e2\x1c.livekit.SegmentedFileSuffixR\x0efilenameSuffix\x12)\n" + - "\x10disable_manifest\x18\b \x01(\bR\x0fdisableManifest\x12#\n" + - "\x02s3\x18\x05 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + - "\x03gcp\x18\x06 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + - "\x05azure\x18\a \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + - "\x06aliOSS\x18\t \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output\"\x93\x02\n" + - "\x10DirectFileOutput\x12\x1a\n" + - "\bfilepath\x18\x01 \x01(\tR\bfilepath\x12)\n" + - "\x10disable_manifest\x18\x05 \x01(\bR\x0fdisableManifest\x12#\n" + - "\x02s3\x18\x02 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + - "\x03gcp\x18\x03 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + - "\x05azure\x18\x04 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + - "\x06aliOSS\x18\x06 \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output\"\xed\x03\n" + + "\x10disable_manifest\x18\b \x01(\bR\x0fdisableManifest\x12'\n" + + "\x02s3\x18\x05 \x01(\v2\x11.livekit.S3UploadB\x02\x18\x01H\x00R\x02s3\x12*\n" + + "\x03gcp\x18\x06 \x01(\v2\x12.livekit.GCPUploadB\x02\x18\x01H\x00R\x03gcp\x124\n" + + "\x05azure\x18\a \x01(\v2\x18.livekit.AzureBlobUploadB\x02\x18\x01H\x00R\x05azure\x123\n" + + "\x06aliOSS\x18\t \x01(\v2\x15.livekit.AliOSSUploadB\x02\x18\x01H\x00R\x06aliOSSB\b\n" + + "\x06output\"\xfd\x03\n" + "\vImageOutput\x12)\n" + "\x10capture_interval\x18\x01 \x01(\rR\x0fcaptureInterval\x12\x14\n" + "\x05width\x18\x02 \x01(\x05R\x05width\x12\x16\n" + @@ -4025,13 +5644,24 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0ffilename_suffix\x18\x05 \x01(\x0e2\x18.livekit.ImageFileSuffixR\x0efilenameSuffix\x124\n" + "\vimage_codec\x18\x06 \x01(\x0e2\x13.livekit.ImageCodecR\n" + "imageCodec\x12)\n" + - "\x10disable_manifest\x18\a \x01(\bR\x0fdisableManifest\x12#\n" + - "\x02s3\x18\b \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + - "\x03gcp\x18\t \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + + "\x10disable_manifest\x18\a \x01(\bR\x0fdisableManifest\x12'\n" + + "\x02s3\x18\b \x01(\v2\x11.livekit.S3UploadB\x02\x18\x01H\x00R\x02s3\x12*\n" + + "\x03gcp\x18\t \x01(\v2\x12.livekit.GCPUploadB\x02\x18\x01H\x00R\x03gcp\x124\n" + "\x05azure\x18\n" + - " \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + - "\x06aliOSS\x18\v \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output\"\xe2\x04\n" + + " \x01(\v2\x18.livekit.AzureBlobUploadB\x02\x18\x01H\x00R\x05azure\x123\n" + + "\x06aliOSS\x18\v \x01(\v2\x15.livekit.AliOSSUploadB\x02\x18\x01H\x00R\x06aliOSSB\b\n" + + "\x06output\"S\n" + + "\n" + + "McapOutput\x12\x1a\n" + + "\bfilepath\x18\x01 \x01(\tR\bfilepath\x12)\n" + + "\x10disable_manifest\x18\x02 \x01(\bR\x0fdisableManifest\"\xcc\x01\n" + + "\rStorageConfig\x12#\n" + + "\x02s3\x18\x01 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + + "\x03gcp\x18\x02 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + + "\x05azure\x18\x03 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x120\n" + + "\aali_oss\x18\x04 \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOssB\n" + + "\n" + + "\bprovider\"\xe2\x04\n" + "\bS3Upload\x12#\n" + "\n" + "access_key\x18\x01 \x01(\tB\x04\x88\xec,\x01R\taccessKey\x12\x1c\n" + @@ -4066,45 +5696,25 @@ const file_livekit_egress_proto_rawDesc = "" + "\x06secret\x18\x02 \x01(\tB\x04\x88\xec,\x01R\x06secret\x12\x16\n" + "\x06region\x18\x03 \x01(\tR\x06region\x12\x1a\n" + "\bendpoint\x18\x04 \x01(\tR\bendpoint\x12\x16\n" + - "\x06bucket\x18\x05 \x01(\tR\x06bucket\"W\n" + + "\x06bucket\x18\x05 \x01(\tR\x06bucket\"]\n" + "\vProxyConfig\x12\x10\n" + "\x03url\x18\x01 \x01(\tR\x03url\x12\x1a\n" + - "\busername\x18\x02 \x01(\tR\busername\x12\x1a\n" + - "\bpassword\x18\x03 \x01(\tR\bpassword\"W\n" + - "\fStreamOutput\x123\n" + - "\bprotocol\x18\x01 \x01(\x0e2\x17.livekit.StreamProtocolR\bprotocol\x12\x12\n" + - "\x04urls\x18\x02 \x03(\tR\x04urls\"\xca\x03\n" + - "\x0fEncodingOptions\x12\x14\n" + - "\x05width\x18\x01 \x01(\x05R\x05width\x12\x16\n" + - "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + - "\x05depth\x18\x03 \x01(\x05R\x05depth\x12\x1c\n" + - "\tframerate\x18\x04 \x01(\x05R\tframerate\x124\n" + - "\vaudio_codec\x18\x05 \x01(\x0e2\x13.livekit.AudioCodecR\n" + - "audioCodec\x12#\n" + - "\raudio_bitrate\x18\x06 \x01(\x05R\faudioBitrate\x12#\n" + - "\raudio_quality\x18\v \x01(\x05R\faudioQuality\x12'\n" + - "\x0faudio_frequency\x18\a \x01(\x05R\x0eaudioFrequency\x124\n" + - "\vvideo_codec\x18\b \x01(\x0e2\x13.livekit.VideoCodecR\n" + - "videoCodec\x12#\n" + - "\rvideo_bitrate\x18\t \x01(\x05R\fvideoBitrate\x12#\n" + - "\rvideo_quality\x18\f \x01(\x05R\fvideoQuality\x12,\n" + - "\x12key_frame_interval\x18\n" + - " \x01(\x01R\x10keyFrameInterval\"X\n" + - "\x13UpdateLayoutRequest\x12)\n" + - "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12\x16\n" + - "\x06layout\x18\x02 \x01(\tR\x06layout\"\x96\x01\n" + - "\x13UpdateStreamRequest\x12)\n" + - "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12&\n" + - "\x0fadd_output_urls\x18\x02 \x03(\tR\raddOutputUrls\x12,\n" + - "\x12remove_output_urls\x18\x03 \x03(\tR\x10removeOutputUrls\"s\n" + + "\busername\x18\x02 \x01(\tR\busername\x12 \n" + + "\bpassword\x18\x03 \x01(\tB\x04\x88\xec,\x01R\bpassword\"s\n" + "\x11ListEgressRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x12)\n" + "\tegress_id\x18\x02 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12\x16\n" + "\x06active\x18\x03 \x01(\bR\x06active\"?\n" + "\x12ListEgressResponse\x12)\n" + - "\x05items\x18\x01 \x03(\v2\x13.livekit.EgressInfoR\x05items\">\n" + + "\x05items\x18\x01 \x03(\v2\x13.livekit.EgressInfoR\x05items\"\xc0\x01\n" + + "\x13UpdateEgressRequest\x12)\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12\x10\n" + + "\x03url\x18\x02 \x01(\tR\x03url\x12\x16\n" + + "\x06layout\x18\x03 \x01(\tR\x06layout\x12&\n" + + "\x0fadd_stream_urls\x18\x04 \x03(\tR\raddStreamUrls\x12,\n" + + "\x12remove_stream_urls\x18\x05 \x03(\tR\x10removeStreamUrls\">\n" + "\x11StopEgressRequest\x12)\n" + - "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\"\xf2\t\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\"\xab\v\n" + "\n" + "EgressInfo\x12)\n" + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12#\n" + @@ -4119,31 +5729,32 @@ const file_livekit_egress_proto_rawDesc = "" + " \x01(\x03R\tstartedAt\x12\x19\n" + "\bended_at\x18\v \x01(\x03R\aendedAt\x12\x1d\n" + "\n" + - "updated_at\x18\x12 \x01(\x03R\tupdatedAt\x12\x18\n" + - "\adetails\x18\x15 \x01(\tR\adetails\x12\x14\n" + - "\x05error\x18\t \x01(\tR\x05error\x12\x1d\n" + - "\n" + - "error_code\x18\x16 \x01(\x05R\terrorCode\x12L\n" + - "\x0eroom_composite\x18\x04 \x01(\v2#.livekit.RoomCompositeEgressRequestH\x00R\rroomComposite\x12-\n" + - "\x03web\x18\x0e \x01(\v2\x19.livekit.WebEgressRequestH\x00R\x03web\x12E\n" + - "\vparticipant\x18\x13 \x01(\v2!.livekit.ParticipantEgressRequestH\x00R\vparticipant\x12O\n" + - "\x0ftrack_composite\x18\x05 \x01(\v2$.livekit.TrackCompositeEgressRequestH\x00R\x0etrackComposite\x123\n" + - "\x05track\x18\x06 \x01(\v2\x1b.livekit.TrackEgressRequestH\x00R\x05track\x125\n" + - "\x06stream\x18\a \x01(\v2\x17.livekit.StreamInfoListB\x02\x18\x01H\x01R\x06stream\x12+\n" + - "\x04file\x18\b \x01(\v2\x11.livekit.FileInfoB\x02\x18\x01H\x01R\x04file\x127\n" + - "\bsegments\x18\f \x01(\v2\x15.livekit.SegmentsInfoB\x02\x18\x01H\x01R\bsegments\x12:\n" + + "updated_at\x18\x12 \x01(\x03R\tupdatedAt\x125\n" + + "\x06egress\x18\x1d \x01(\v2\x1b.livekit.StartEgressRequestH\x00R\x06egress\x126\n" + + "\x06replay\x18\x1e \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12P\n" + + "\x0eroom_composite\x18\x04 \x01(\v2#.livekit.RoomCompositeEgressRequestB\x02\x18\x01H\x00R\rroomComposite\x121\n" + + "\x03web\x18\x0e \x01(\v2\x19.livekit.WebEgressRequestB\x02\x18\x01H\x00R\x03web\x12I\n" + + "\vparticipant\x18\x13 \x01(\v2!.livekit.ParticipantEgressRequestB\x02\x18\x01H\x00R\vparticipant\x12S\n" + + "\x0ftrack_composite\x18\x05 \x01(\v2$.livekit.TrackCompositeEgressRequestB\x02\x18\x01H\x00R\x0etrackComposite\x127\n" + + "\x05track\x18\x06 \x01(\v2\x1b.livekit.TrackEgressRequestB\x02\x18\x01H\x00R\x05track\x12:\n" + "\x0estream_results\x18\x0f \x03(\v2\x13.livekit.StreamInfoR\rstreamResults\x124\n" + "\ffile_results\x18\x10 \x03(\v2\x11.livekit.FileInfoR\vfileResults\x12>\n" + "\x0fsegment_results\x18\x11 \x03(\v2\x15.livekit.SegmentsInfoR\x0esegmentResults\x128\n" + - "\rimage_results\x18\x14 \x03(\v2\x13.livekit.ImagesInfoR\fimageResults\x12+\n" + + "\rimage_results\x18\x14 \x03(\v2\x13.livekit.ImagesInfoR\fimageResults\x124\n" + + "\fmcap_results\x18\x1c \x03(\v2\x11.livekit.McapInfoR\vmcapResults\x12\x14\n" + + "\x05error\x18\t \x01(\tR\x05error\x12\x1d\n" + + "\n" + + "error_code\x18\x16 \x01(\x05R\terrorCode\x12\x18\n" + + "\adetails\x18\x15 \x01(\tR\adetails\x12+\n" + "\x11manifest_location\x18\x17 \x01(\tR\x10manifestLocation\x12.\n" + "\x13backup_storage_used\x18\x19 \x01(\bR\x11backupStorageUsed\x12\x1f\n" + "\vretry_count\x18\x1b \x01(\x05R\n" + - "retryCountB\t\n" + + "retryCount\x125\n" + + "\x06stream\x18\a \x01(\v2\x17.livekit.StreamInfoListB\x02\x18\x01H\x01R\x06stream\x12+\n" + + "\x04file\x18\b \x01(\v2\x11.livekit.FileInfoB\x02\x18\x01H\x01R\x04file\x127\n" + + "\bsegments\x18\f \x01(\v2\x15.livekit.SegmentsInfoB\x02\x18\x01H\x01R\bsegmentsB\t\n" + "\arequestB\b\n" + - "\x06result\"=\n" + - "\x0eStreamInfoList\x12'\n" + - "\x04info\x18\x01 \x03(\v2\x13.livekit.StreamInfoR\x04info:\x02\x18\x01\"\xac\x02\n" + + "\x06result\"\xac\x02\n" + "\n" + "StreamInfo\x12\x10\n" + "\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n" + @@ -4187,7 +5798,17 @@ const file_livekit_egress_proto_rawDesc = "" + "imageCount\x12\x1d\n" + "\n" + "started_at\x18\x02 \x01(\x03R\tstartedAt\x12\x19\n" + - "\bended_at\x18\x03 \x01(\x03R\aendedAt\"\x9a\x02\n" + + "\bended_at\x18\x03 \x01(\x03R\aendedAt\"\xcd\x01\n" + + "\bMcapInfo\x12\x1a\n" + + "\bfilename\x18\x01 \x01(\tR\bfilename\x12\x1d\n" + + "\n" + + "started_at\x18\x02 \x01(\x03R\tstartedAt\x12\x19\n" + + "\bended_at\x18\x03 \x01(\x03R\aendedAt\x12\x1a\n" + + "\bduration\x18\x04 \x01(\x03R\bduration\x12\x12\n" + + "\x04size\x18\x05 \x01(\x03R\x04size\x12\x1a\n" + + "\blocation\x18\x06 \x01(\tR\blocation\x12\x1f\n" + + "\vtrack_count\x18\a \x01(\x03R\n" + + "trackCount\"\x9a\x02\n" + "\x15AutoParticipantEgress\x128\n" + "\x06preset\x18\x01 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x00R\x06preset\x126\n" + "\badvanced\x18\x02 \x01(\v2\x18.livekit.EncodingOptionsH\x00R\badvanced\x12=\n" + @@ -4201,12 +5822,150 @@ const file_livekit_egress_proto_rawDesc = "" + "\x03gcp\x18\x03 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + "\x05azure\x18\x04 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + "\x06aliOSS\x18\x06 \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output*B\n" + + "\x06output\"\xb2\x04\n" + + "\x13ExportReplayRequest\x12)\n" + + "\treplay_id\x18\x01 \x01(\tB\f\x9a\xec,\breplayIDR\breplayId\x12&\n" + + "\x0fstart_offset_ms\x18\x02 \x01(\x03R\rstartOffsetMs\x12\"\n" + + "\rend_offset_ms\x18\x03 \x01(\x03R\vendOffsetMs\x125\n" + + "\btemplate\x18\x04 \x01(\v2\x17.livekit.TemplateSourceH\x00R\btemplate\x12&\n" + + "\x03web\x18\x05 \x01(\v2\x12.livekit.WebSourceH\x00R\x03web\x12,\n" + + "\x05media\x18\x06 \x01(\v2\x14.livekit.MediaSourceH\x00R\x05media\x128\n" + + "\x06preset\x18\a \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + + "\badvanced\x18\b \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12)\n" + + "\aoutputs\x18\t \x03(\v2\x0f.livekit.OutputR\aoutputs\x120\n" + + "\astorage\x18\n" + + " \x01(\v2\x16.livekit.StorageConfigR\astorage\x122\n" + + "\bwebhooks\x18\v \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + + "\x06sourceB\n" + + "\n" + + "\bencoding\"\xd9\x06\n" + + "\x1aRoomCompositeEgressRequest\x12\x1b\n" + + "\troom_name\x18\x01 \x01(\tR\broomName\x12\x16\n" + + "\x06layout\x18\x02 \x01(\tR\x06layout\x12\x1d\n" + + "\n" + + "audio_only\x18\x03 \x01(\bR\taudioOnly\x127\n" + + "\faudio_mixing\x18\x0f \x01(\x0e2\x14.livekit.AudioMixingR\vaudioMixing\x12\x1d\n" + + "\n" + + "video_only\x18\x04 \x01(\bR\tvideoOnly\x12&\n" + + "\x0fcustom_base_url\x18\x05 \x01(\tR\rcustomBaseUrl\x124\n" + + "\x04file\x18\x06 \x01(\v2\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00R\x04file\x123\n" + + "\x06stream\x18\a \x01(\v2\x15.livekit.StreamOutputB\x02\x18\x01H\x00R\x06stream\x12>\n" + + "\bsegments\x18\n" + + " \x01(\v2\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00R\bsegments\x128\n" + + "\x06preset\x18\b \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + + "\badvanced\x18\t \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12=\n" + + "\ffile_outputs\x18\v \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + + "\x0estream_outputs\x18\f \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + + "\x0fsegment_outputs\x18\r \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + + "\rimage_outputs\x18\x0e \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + + "\bwebhooks\x18\x10 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\x06outputB\t\n" + + "\aoptions\"\xf9\x05\n" + + "\x10WebEgressRequest\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n" + + "\n" + + "audio_only\x18\x02 \x01(\bR\taudioOnly\x12\x1d\n" + + "\n" + + "video_only\x18\x03 \x01(\bR\tvideoOnly\x12,\n" + + "\x12await_start_signal\x18\f \x01(\bR\x10awaitStartSignal\x124\n" + + "\x04file\x18\x04 \x01(\v2\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00R\x04file\x123\n" + + "\x06stream\x18\x05 \x01(\v2\x15.livekit.StreamOutputB\x02\x18\x01H\x00R\x06stream\x12>\n" + + "\bsegments\x18\x06 \x01(\v2\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00R\bsegments\x128\n" + + "\x06preset\x18\a \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + + "\badvanced\x18\b \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12=\n" + + "\ffile_outputs\x18\t \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + + "\x0estream_outputs\x18\n" + + " \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + + "\x0fsegment_outputs\x18\v \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + + "\rimage_outputs\x18\r \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + + "\bwebhooks\x18\x0e \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\x06outputB\t\n" + + "\aoptions\"\xaa\x04\n" + + "\x18ParticipantEgressRequest\x12\x1b\n" + + "\troom_name\x18\x01 \x01(\tR\broomName\x12\x1a\n" + + "\bidentity\x18\x02 \x01(\tR\bidentity\x12!\n" + + "\fscreen_share\x18\x03 \x01(\bR\vscreenShare\x128\n" + + "\x06preset\x18\x04 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x00R\x06preset\x126\n" + + "\badvanced\x18\x05 \x01(\v2\x18.livekit.EncodingOptionsH\x00R\badvanced\x12=\n" + + "\ffile_outputs\x18\x06 \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + + "\x0estream_outputs\x18\a \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + + "\x0fsegment_outputs\x18\b \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + + "\rimage_outputs\x18\t \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + + "\bwebhooks\x18\n" + + " \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\t\n" + + "\aoptions\"\x93\x06\n" + + "\x1bTrackCompositeEgressRequest\x12\x1b\n" + + "\troom_name\x18\x01 \x01(\tR\broomName\x126\n" + + "\x0eaudio_track_id\x18\x02 \x01(\tB\x10\x9a\xec,\faudioTrackIDR\faudioTrackId\x126\n" + + "\x0evideo_track_id\x18\x03 \x01(\tB\x10\x9a\xec,\fvideoTrackIDR\fvideoTrackId\x124\n" + + "\x04file\x18\x04 \x01(\v2\x1a.livekit.EncodedFileOutputB\x02\x18\x01H\x00R\x04file\x123\n" + + "\x06stream\x18\x05 \x01(\v2\x15.livekit.StreamOutputB\x02\x18\x01H\x00R\x06stream\x12>\n" + + "\bsegments\x18\b \x01(\v2\x1c.livekit.SegmentedFileOutputB\x02\x18\x01H\x00R\bsegments\x128\n" + + "\x06preset\x18\x06 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x01R\x06preset\x126\n" + + "\badvanced\x18\a \x01(\v2\x18.livekit.EncodingOptionsH\x01R\badvanced\x12=\n" + + "\ffile_outputs\x18\v \x03(\v2\x1a.livekit.EncodedFileOutputR\vfileOutputs\x12<\n" + + "\x0estream_outputs\x18\f \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + + "\x0fsegment_outputs\x18\r \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + + "\rimage_outputs\x18\x0e \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + + "\bwebhooks\x18\x0f \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\x06outputB\t\n" + + "\aoptions\"\xf3\x01\n" + + "\x12TrackEgressRequest\x12\x1b\n" + + "\troom_name\x18\x01 \x01(\tR\broomName\x12&\n" + + "\btrack_id\x18\x02 \x01(\tB\v\x9a\xec,\atrackIDR\atrackId\x12/\n" + + "\x04file\x18\x03 \x01(\v2\x19.livekit.DirectFileOutputH\x00R\x04file\x12%\n" + + "\rwebsocket_url\x18\x04 \x01(\tH\x00R\fwebsocketUrl\x122\n" + + "\bwebhooks\x18\x05 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\x06output\"\x97\x02\n" + + "\x10DirectFileOutput\x12\x1a\n" + + "\bfilepath\x18\x01 \x01(\tR\bfilepath\x12)\n" + + "\x10disable_manifest\x18\x05 \x01(\bR\x0fdisableManifest\x12#\n" + + "\x02s3\x18\x02 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + + "\x03gcp\x18\x03 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + + "\x05azure\x18\x04 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + + "\x06aliOSS\x18\x06 \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSS:\x02\x18\x01B\b\n" + + "\x06output\"\xcf\x02\n" + + "\x11EncodedFileOutput\x125\n" + + "\tfile_type\x18\x01 \x01(\x0e2\x18.livekit.EncodedFileTypeR\bfileType\x12\x1a\n" + + "\bfilepath\x18\x02 \x01(\tR\bfilepath\x12)\n" + + "\x10disable_manifest\x18\x06 \x01(\bR\x0fdisableManifest\x12#\n" + + "\x02s3\x18\x03 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + + "\x03gcp\x18\x04 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + + "\x05azure\x18\x05 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + + "\x06aliOSS\x18\a \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSS:\x02\x18\x01B\b\n" + + "\x06output\"\\\n" + + "\x13UpdateLayoutRequest\x12)\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12\x16\n" + + "\x06layout\x18\x02 \x01(\tR\x06layout:\x02\x18\x01\"\x9a\x01\n" + + "\x13UpdateStreamRequest\x12)\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12&\n" + + "\x0fadd_output_urls\x18\x02 \x03(\tR\raddOutputUrls\x12,\n" + + "\x12remove_output_urls\x18\x03 \x03(\tR\x10removeOutputUrls:\x02\x18\x01\"=\n" + + "\x0eStreamInfoList\x12'\n" + + "\x04info\x18\x01 \x03(\v2\x13.livekit.StreamInfoR\x04info:\x02\x18\x01*W\n" + + "\fAudioChannel\x12\x16\n" + + "\x12AUDIO_CHANNEL_BOTH\x10\x00\x12\x16\n" + + "\x12AUDIO_CHANNEL_LEFT\x10\x01\x12\x17\n" + + "\x13AUDIO_CHANNEL_RIGHT\x10\x02*\xcf\x01\n" + + "\x15EncodingOptionsPreset\x12\x10\n" + + "\fH264_720P_30\x10\x00\x12\x10\n" + + "\fH264_720P_60\x10\x01\x12\x11\n" + + "\rH264_1080P_30\x10\x02\x12\x11\n" + + "\rH264_1080P_60\x10\x03\x12\x19\n" + + "\x15PORTRAIT_H264_720P_30\x10\x04\x12\x19\n" + + "\x15PORTRAIT_H264_720P_60\x10\x05\x12\x1a\n" + + "\x16PORTRAIT_H264_1080P_30\x10\x06\x12\x1a\n" + + "\x16PORTRAIT_H264_1080P_60\x10\a*B\n" + "\x0fEncodedFileType\x12\x14\n" + "\x10DEFAULT_FILETYPE\x10\x00\x12\a\n" + "\x03MP4\x10\x01\x12\a\n" + "\x03OGG\x10\x02\x12\a\n" + - "\x03MP3\x10\x03*N\n" + + "\x03MP3\x10\x03*H\n" + + "\x0eStreamProtocol\x12\x14\n" + + "\x10DEFAULT_PROTOCOL\x10\x00\x12\b\n" + + "\x04RTMP\x10\x01\x12\a\n" + + "\x03SRT\x10\x02\x12\r\n" + + "\tWEBSOCKET\x10\x03*N\n" + "\x15SegmentedFileProtocol\x12#\n" + "\x1fDEFAULT_SEGMENTED_FILE_PROTOCOL\x10\x00\x12\x10\n" + "\fHLS_PROTOCOL\x10\x01*/\n" + @@ -4216,24 +5975,10 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0fImageFileSuffix\x12\x16\n" + "\x12IMAGE_SUFFIX_INDEX\x10\x00\x12\x1a\n" + "\x16IMAGE_SUFFIX_TIMESTAMP\x10\x01\x12\x1f\n" + - "\x1bIMAGE_SUFFIX_NONE_OVERWRITE\x10\x02*9\n" + - "\x0eStreamProtocol\x12\x14\n" + - "\x10DEFAULT_PROTOCOL\x10\x00\x12\b\n" + - "\x04RTMP\x10\x01\x12\a\n" + - "\x03SRT\x10\x02*U\n" + - "\vAudioMixing\x12\x12\n" + - "\x0eDEFAULT_MIXING\x10\x00\x12\x16\n" + - "\x12DUAL_CHANNEL_AGENT\x10\x01\x12\x1a\n" + - "\x16DUAL_CHANNEL_ALTERNATE\x10\x02*\xcf\x01\n" + - "\x15EncodingOptionsPreset\x12\x10\n" + - "\fH264_720P_30\x10\x00\x12\x10\n" + - "\fH264_720P_60\x10\x01\x12\x11\n" + - "\rH264_1080P_30\x10\x02\x12\x11\n" + - "\rH264_1080P_60\x10\x03\x12\x19\n" + - "\x15PORTRAIT_H264_720P_30\x10\x04\x12\x19\n" + - "\x15PORTRAIT_H264_720P_60\x10\x05\x12\x1a\n" + - "\x16PORTRAIT_H264_1080P_30\x10\x06\x12\x1a\n" + - "\x16PORTRAIT_H264_1080P_60\x10\a*\x9f\x01\n" + + "\x1bIMAGE_SUFFIX_NONE_OVERWRITE\x10\x02*J\n" + + "\x10EgressSourceType\x12\x1a\n" + + "\x16EGRESS_SOURCE_TYPE_WEB\x10\x00\x12\x1a\n" + + "\x16EGRESS_SOURCE_TYPE_SDK\x10\x01*\x9f\x01\n" + "\fEgressStatus\x12\x13\n" + "\x0fEGRESS_STARTING\x10\x00\x12\x11\n" + "\rEGRESS_ACTIVE\x10\x01\x12\x11\n" + @@ -4241,22 +5986,25 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0fEGRESS_COMPLETE\x10\x03\x12\x11\n" + "\rEGRESS_FAILED\x10\x04\x12\x12\n" + "\x0eEGRESS_ABORTED\x10\x05\x12\x18\n" + - "\x14EGRESS_LIMIT_REACHED\x10\x06*J\n" + - "\x10EgressSourceType\x12\x1a\n" + - "\x16EGRESS_SOURCE_TYPE_WEB\x10\x00\x12\x1a\n" + - "\x16EGRESS_SOURCE_TYPE_SDK\x10\x012\x9c\x05\n" + - "\x06Egress\x12T\n" + - "\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12@\n" + - "\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\x12P\n" + - "\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\x12V\n" + - "\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12D\n" + - "\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\x12A\n" + - "\fUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\x12A\n" + - "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\x12E\n" + + "\x14EGRESS_LIMIT_REACHED\x10\x06*U\n" + + "\vAudioMixing\x12\x12\n" + + "\x0eDEFAULT_MIXING\x10\x00\x12\x16\n" + + "\x12DUAL_CHANNEL_AGENT\x10\x01\x12\x1a\n" + + "\x16DUAL_CHANNEL_ALTERNATE\x10\x022\xc3\x06\n" + + "\x06Egress\x12?\n" + + "\vStartEgress\x12\x1b.livekit.StartEgressRequest\x1a\x13.livekit.EgressInfo\x12A\n" + + "\fUpdateEgress\x12\x1c.livekit.UpdateEgressRequest\x1a\x13.livekit.EgressInfo\x12E\n" + "\n" + "ListEgress\x12\x1a.livekit.ListEgressRequest\x1a\x1b.livekit.ListEgressResponse\x12=\n" + "\n" + - "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" + "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfo\x12Y\n" + + "\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12E\n" + + "\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12U\n" + + "\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12[\n" + + "\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12I\n" + + "\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12F\n" + + "\fUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12F\n" + + "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01BFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" var ( file_livekit_egress_proto_rawDescOnce sync.Once @@ -4270,170 +6018,229 @@ func file_livekit_egress_proto_rawDescGZIP() []byte { return file_livekit_egress_proto_rawDescData } -var file_livekit_egress_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_livekit_egress_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_livekit_egress_proto_enumTypes = make([]protoimpl.EnumInfo, 11) +var file_livekit_egress_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_livekit_egress_proto_goTypes = []any{ - (EncodedFileType)(0), // 0: livekit.EncodedFileType - (SegmentedFileProtocol)(0), // 1: livekit.SegmentedFileProtocol - (SegmentedFileSuffix)(0), // 2: livekit.SegmentedFileSuffix - (ImageFileSuffix)(0), // 3: livekit.ImageFileSuffix - (StreamProtocol)(0), // 4: livekit.StreamProtocol - (AudioMixing)(0), // 5: livekit.AudioMixing - (EncodingOptionsPreset)(0), // 6: livekit.EncodingOptionsPreset - (EgressStatus)(0), // 7: livekit.EgressStatus - (EgressSourceType)(0), // 8: livekit.EgressSourceType - (StreamInfo_Status)(0), // 9: livekit.StreamInfo.Status - (*RoomCompositeEgressRequest)(nil), // 10: livekit.RoomCompositeEgressRequest - (*WebEgressRequest)(nil), // 11: livekit.WebEgressRequest - (*ParticipantEgressRequest)(nil), // 12: livekit.ParticipantEgressRequest - (*TrackCompositeEgressRequest)(nil), // 13: livekit.TrackCompositeEgressRequest - (*TrackEgressRequest)(nil), // 14: livekit.TrackEgressRequest - (*EncodedFileOutput)(nil), // 15: livekit.EncodedFileOutput - (*SegmentedFileOutput)(nil), // 16: livekit.SegmentedFileOutput - (*DirectFileOutput)(nil), // 17: livekit.DirectFileOutput - (*ImageOutput)(nil), // 18: livekit.ImageOutput - (*S3Upload)(nil), // 19: livekit.S3Upload - (*GCPUpload)(nil), // 20: livekit.GCPUpload - (*AzureBlobUpload)(nil), // 21: livekit.AzureBlobUpload - (*AliOSSUpload)(nil), // 22: livekit.AliOSSUpload - (*ProxyConfig)(nil), // 23: livekit.ProxyConfig - (*StreamOutput)(nil), // 24: livekit.StreamOutput - (*EncodingOptions)(nil), // 25: livekit.EncodingOptions - (*UpdateLayoutRequest)(nil), // 26: livekit.UpdateLayoutRequest - (*UpdateStreamRequest)(nil), // 27: livekit.UpdateStreamRequest - (*ListEgressRequest)(nil), // 28: livekit.ListEgressRequest - (*ListEgressResponse)(nil), // 29: livekit.ListEgressResponse - (*StopEgressRequest)(nil), // 30: livekit.StopEgressRequest - (*EgressInfo)(nil), // 31: livekit.EgressInfo - (*StreamInfoList)(nil), // 32: livekit.StreamInfoList - (*StreamInfo)(nil), // 33: livekit.StreamInfo - (*FileInfo)(nil), // 34: livekit.FileInfo - (*SegmentsInfo)(nil), // 35: livekit.SegmentsInfo - (*ImagesInfo)(nil), // 36: livekit.ImagesInfo - (*AutoParticipantEgress)(nil), // 37: livekit.AutoParticipantEgress - (*AutoTrackEgress)(nil), // 38: livekit.AutoTrackEgress - nil, // 39: livekit.S3Upload.MetadataEntry - (*WebhookConfig)(nil), // 40: livekit.WebhookConfig - (ImageCodec)(0), // 41: livekit.ImageCodec - (AudioCodec)(0), // 42: livekit.AudioCodec - (VideoCodec)(0), // 43: livekit.VideoCodec + (AudioChannel)(0), // 0: livekit.AudioChannel + (EncodingOptionsPreset)(0), // 1: livekit.EncodingOptionsPreset + (EncodedFileType)(0), // 2: livekit.EncodedFileType + (StreamProtocol)(0), // 3: livekit.StreamProtocol + (SegmentedFileProtocol)(0), // 4: livekit.SegmentedFileProtocol + (SegmentedFileSuffix)(0), // 5: livekit.SegmentedFileSuffix + (ImageFileSuffix)(0), // 6: livekit.ImageFileSuffix + (EgressSourceType)(0), // 7: livekit.EgressSourceType + (EgressStatus)(0), // 8: livekit.EgressStatus + (AudioMixing)(0), // 9: livekit.AudioMixing + (StreamInfo_Status)(0), // 10: livekit.StreamInfo.Status + (*StartEgressRequest)(nil), // 11: livekit.StartEgressRequest + (*TemplateSource)(nil), // 12: livekit.TemplateSource + (*WebSource)(nil), // 13: livekit.WebSource + (*MediaSource)(nil), // 14: livekit.MediaSource + (*ParticipantVideo)(nil), // 15: livekit.ParticipantVideo + (*AudioConfig)(nil), // 16: livekit.AudioConfig + (*AudioRoute)(nil), // 17: livekit.AudioRoute + (*DataConfig)(nil), // 18: livekit.DataConfig + (*DataSelector)(nil), // 19: livekit.DataSelector + (*EncodingOptions)(nil), // 20: livekit.EncodingOptions + (*Output)(nil), // 21: livekit.Output + (*FileOutput)(nil), // 22: livekit.FileOutput + (*StreamOutput)(nil), // 23: livekit.StreamOutput + (*SegmentedFileOutput)(nil), // 24: livekit.SegmentedFileOutput + (*ImageOutput)(nil), // 25: livekit.ImageOutput + (*McapOutput)(nil), // 26: livekit.McapOutput + (*StorageConfig)(nil), // 27: livekit.StorageConfig + (*S3Upload)(nil), // 28: livekit.S3Upload + (*GCPUpload)(nil), // 29: livekit.GCPUpload + (*AzureBlobUpload)(nil), // 30: livekit.AzureBlobUpload + (*AliOSSUpload)(nil), // 31: livekit.AliOSSUpload + (*ProxyConfig)(nil), // 32: livekit.ProxyConfig + (*ListEgressRequest)(nil), // 33: livekit.ListEgressRequest + (*ListEgressResponse)(nil), // 34: livekit.ListEgressResponse + (*UpdateEgressRequest)(nil), // 35: livekit.UpdateEgressRequest + (*StopEgressRequest)(nil), // 36: livekit.StopEgressRequest + (*EgressInfo)(nil), // 37: livekit.EgressInfo + (*StreamInfo)(nil), // 38: livekit.StreamInfo + (*FileInfo)(nil), // 39: livekit.FileInfo + (*SegmentsInfo)(nil), // 40: livekit.SegmentsInfo + (*ImagesInfo)(nil), // 41: livekit.ImagesInfo + (*McapInfo)(nil), // 42: livekit.McapInfo + (*AutoParticipantEgress)(nil), // 43: livekit.AutoParticipantEgress + (*AutoTrackEgress)(nil), // 44: livekit.AutoTrackEgress + (*ExportReplayRequest)(nil), // 45: livekit.ExportReplayRequest + (*RoomCompositeEgressRequest)(nil), // 46: livekit.RoomCompositeEgressRequest + (*WebEgressRequest)(nil), // 47: livekit.WebEgressRequest + (*ParticipantEgressRequest)(nil), // 48: livekit.ParticipantEgressRequest + (*TrackCompositeEgressRequest)(nil), // 49: livekit.TrackCompositeEgressRequest + (*TrackEgressRequest)(nil), // 50: livekit.TrackEgressRequest + (*DirectFileOutput)(nil), // 51: livekit.DirectFileOutput + (*EncodedFileOutput)(nil), // 52: livekit.EncodedFileOutput + (*UpdateLayoutRequest)(nil), // 53: livekit.UpdateLayoutRequest + (*UpdateStreamRequest)(nil), // 54: livekit.UpdateStreamRequest + (*StreamInfoList)(nil), // 55: livekit.StreamInfoList + nil, // 56: livekit.S3Upload.MetadataEntry + (*WebhookConfig)(nil), // 57: livekit.WebhookConfig + (ParticipantInfo_Kind)(0), // 58: livekit.ParticipantInfo.Kind + (AudioCodec)(0), // 59: livekit.AudioCodec + (VideoCodec)(0), // 60: livekit.VideoCodec + (ImageCodec)(0), // 61: livekit.ImageCodec } var file_livekit_egress_proto_depIdxs = []int32{ - 5, // 0: livekit.RoomCompositeEgressRequest.audio_mixing:type_name -> livekit.AudioMixing - 15, // 1: livekit.RoomCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput - 24, // 2: livekit.RoomCompositeEgressRequest.stream:type_name -> livekit.StreamOutput - 16, // 3: livekit.RoomCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 6, // 4: livekit.RoomCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 25, // 5: livekit.RoomCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions - 15, // 6: livekit.RoomCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 24, // 7: livekit.RoomCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 16, // 8: livekit.RoomCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 18, // 9: livekit.RoomCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 40, // 10: livekit.RoomCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 15, // 11: livekit.WebEgressRequest.file:type_name -> livekit.EncodedFileOutput - 24, // 12: livekit.WebEgressRequest.stream:type_name -> livekit.StreamOutput - 16, // 13: livekit.WebEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 6, // 14: livekit.WebEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 25, // 15: livekit.WebEgressRequest.advanced:type_name -> livekit.EncodingOptions - 15, // 16: livekit.WebEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 24, // 17: livekit.WebEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 16, // 18: livekit.WebEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 18, // 19: livekit.WebEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 40, // 20: livekit.WebEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 6, // 21: livekit.ParticipantEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 25, // 22: livekit.ParticipantEgressRequest.advanced:type_name -> livekit.EncodingOptions - 15, // 23: livekit.ParticipantEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 24, // 24: livekit.ParticipantEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 16, // 25: livekit.ParticipantEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 18, // 26: livekit.ParticipantEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 40, // 27: livekit.ParticipantEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 15, // 28: livekit.TrackCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput - 24, // 29: livekit.TrackCompositeEgressRequest.stream:type_name -> livekit.StreamOutput - 16, // 30: livekit.TrackCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 6, // 31: livekit.TrackCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 25, // 32: livekit.TrackCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions - 15, // 33: livekit.TrackCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 24, // 34: livekit.TrackCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 16, // 35: livekit.TrackCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 18, // 36: livekit.TrackCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 40, // 37: livekit.TrackCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 17, // 38: livekit.TrackEgressRequest.file:type_name -> livekit.DirectFileOutput - 40, // 39: livekit.TrackEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 0, // 40: livekit.EncodedFileOutput.file_type:type_name -> livekit.EncodedFileType - 19, // 41: livekit.EncodedFileOutput.s3:type_name -> livekit.S3Upload - 20, // 42: livekit.EncodedFileOutput.gcp:type_name -> livekit.GCPUpload - 21, // 43: livekit.EncodedFileOutput.azure:type_name -> livekit.AzureBlobUpload - 22, // 44: livekit.EncodedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 1, // 45: livekit.SegmentedFileOutput.protocol:type_name -> livekit.SegmentedFileProtocol - 2, // 46: livekit.SegmentedFileOutput.filename_suffix:type_name -> livekit.SegmentedFileSuffix - 19, // 47: livekit.SegmentedFileOutput.s3:type_name -> livekit.S3Upload - 20, // 48: livekit.SegmentedFileOutput.gcp:type_name -> livekit.GCPUpload - 21, // 49: livekit.SegmentedFileOutput.azure:type_name -> livekit.AzureBlobUpload - 22, // 50: livekit.SegmentedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 19, // 51: livekit.DirectFileOutput.s3:type_name -> livekit.S3Upload - 20, // 52: livekit.DirectFileOutput.gcp:type_name -> livekit.GCPUpload - 21, // 53: livekit.DirectFileOutput.azure:type_name -> livekit.AzureBlobUpload - 22, // 54: livekit.DirectFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 3, // 55: livekit.ImageOutput.filename_suffix:type_name -> livekit.ImageFileSuffix - 41, // 56: livekit.ImageOutput.image_codec:type_name -> livekit.ImageCodec - 19, // 57: livekit.ImageOutput.s3:type_name -> livekit.S3Upload - 20, // 58: livekit.ImageOutput.gcp:type_name -> livekit.GCPUpload - 21, // 59: livekit.ImageOutput.azure:type_name -> livekit.AzureBlobUpload - 22, // 60: livekit.ImageOutput.aliOSS:type_name -> livekit.AliOSSUpload - 39, // 61: livekit.S3Upload.metadata:type_name -> livekit.S3Upload.MetadataEntry - 23, // 62: livekit.S3Upload.proxy:type_name -> livekit.ProxyConfig - 23, // 63: livekit.GCPUpload.proxy:type_name -> livekit.ProxyConfig - 4, // 64: livekit.StreamOutput.protocol:type_name -> livekit.StreamProtocol - 42, // 65: livekit.EncodingOptions.audio_codec:type_name -> livekit.AudioCodec - 43, // 66: livekit.EncodingOptions.video_codec:type_name -> livekit.VideoCodec - 31, // 67: livekit.ListEgressResponse.items:type_name -> livekit.EgressInfo - 8, // 68: livekit.EgressInfo.source_type:type_name -> livekit.EgressSourceType - 7, // 69: livekit.EgressInfo.status:type_name -> livekit.EgressStatus - 10, // 70: livekit.EgressInfo.room_composite:type_name -> livekit.RoomCompositeEgressRequest - 11, // 71: livekit.EgressInfo.web:type_name -> livekit.WebEgressRequest - 12, // 72: livekit.EgressInfo.participant:type_name -> livekit.ParticipantEgressRequest - 13, // 73: livekit.EgressInfo.track_composite:type_name -> livekit.TrackCompositeEgressRequest - 14, // 74: livekit.EgressInfo.track:type_name -> livekit.TrackEgressRequest - 32, // 75: livekit.EgressInfo.stream:type_name -> livekit.StreamInfoList - 34, // 76: livekit.EgressInfo.file:type_name -> livekit.FileInfo - 35, // 77: livekit.EgressInfo.segments:type_name -> livekit.SegmentsInfo - 33, // 78: livekit.EgressInfo.stream_results:type_name -> livekit.StreamInfo - 34, // 79: livekit.EgressInfo.file_results:type_name -> livekit.FileInfo - 35, // 80: livekit.EgressInfo.segment_results:type_name -> livekit.SegmentsInfo - 36, // 81: livekit.EgressInfo.image_results:type_name -> livekit.ImagesInfo - 33, // 82: livekit.StreamInfoList.info:type_name -> livekit.StreamInfo - 9, // 83: livekit.StreamInfo.status:type_name -> livekit.StreamInfo.Status - 6, // 84: livekit.AutoParticipantEgress.preset:type_name -> livekit.EncodingOptionsPreset - 25, // 85: livekit.AutoParticipantEgress.advanced:type_name -> livekit.EncodingOptions - 15, // 86: livekit.AutoParticipantEgress.file_outputs:type_name -> livekit.EncodedFileOutput - 16, // 87: livekit.AutoParticipantEgress.segment_outputs:type_name -> livekit.SegmentedFileOutput - 19, // 88: livekit.AutoTrackEgress.s3:type_name -> livekit.S3Upload - 20, // 89: livekit.AutoTrackEgress.gcp:type_name -> livekit.GCPUpload - 21, // 90: livekit.AutoTrackEgress.azure:type_name -> livekit.AzureBlobUpload - 22, // 91: livekit.AutoTrackEgress.aliOSS:type_name -> livekit.AliOSSUpload - 10, // 92: livekit.Egress.StartRoomCompositeEgress:input_type -> livekit.RoomCompositeEgressRequest - 11, // 93: livekit.Egress.StartWebEgress:input_type -> livekit.WebEgressRequest - 12, // 94: livekit.Egress.StartParticipantEgress:input_type -> livekit.ParticipantEgressRequest - 13, // 95: livekit.Egress.StartTrackCompositeEgress:input_type -> livekit.TrackCompositeEgressRequest - 14, // 96: livekit.Egress.StartTrackEgress:input_type -> livekit.TrackEgressRequest - 26, // 97: livekit.Egress.UpdateLayout:input_type -> livekit.UpdateLayoutRequest - 27, // 98: livekit.Egress.UpdateStream:input_type -> livekit.UpdateStreamRequest - 28, // 99: livekit.Egress.ListEgress:input_type -> livekit.ListEgressRequest - 30, // 100: livekit.Egress.StopEgress:input_type -> livekit.StopEgressRequest - 31, // 101: livekit.Egress.StartRoomCompositeEgress:output_type -> livekit.EgressInfo - 31, // 102: livekit.Egress.StartWebEgress:output_type -> livekit.EgressInfo - 31, // 103: livekit.Egress.StartParticipantEgress:output_type -> livekit.EgressInfo - 31, // 104: livekit.Egress.StartTrackCompositeEgress:output_type -> livekit.EgressInfo - 31, // 105: livekit.Egress.StartTrackEgress:output_type -> livekit.EgressInfo - 31, // 106: livekit.Egress.UpdateLayout:output_type -> livekit.EgressInfo - 31, // 107: livekit.Egress.UpdateStream:output_type -> livekit.EgressInfo - 29, // 108: livekit.Egress.ListEgress:output_type -> livekit.ListEgressResponse - 31, // 109: livekit.Egress.StopEgress:output_type -> livekit.EgressInfo - 101, // [101:110] is the sub-list for method output_type - 92, // [92:101] is the sub-list for method input_type - 92, // [92:92] is the sub-list for extension type_name - 92, // [92:92] is the sub-list for extension extendee - 0, // [0:92] is the sub-list for field type_name + 12, // 0: livekit.StartEgressRequest.template:type_name -> livekit.TemplateSource + 13, // 1: livekit.StartEgressRequest.web:type_name -> livekit.WebSource + 14, // 2: livekit.StartEgressRequest.media:type_name -> livekit.MediaSource + 1, // 3: livekit.StartEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 4: livekit.StartEgressRequest.advanced:type_name -> livekit.EncodingOptions + 21, // 5: livekit.StartEgressRequest.outputs:type_name -> livekit.Output + 27, // 6: livekit.StartEgressRequest.storage:type_name -> livekit.StorageConfig + 57, // 7: livekit.StartEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 15, // 8: livekit.MediaSource.participant_video:type_name -> livekit.ParticipantVideo + 16, // 9: livekit.MediaSource.audio:type_name -> livekit.AudioConfig + 18, // 10: livekit.MediaSource.data:type_name -> livekit.DataConfig + 17, // 11: livekit.AudioConfig.routes:type_name -> livekit.AudioRoute + 58, // 12: livekit.AudioRoute.participant_kind:type_name -> livekit.ParticipantInfo.Kind + 0, // 13: livekit.AudioRoute.channel:type_name -> livekit.AudioChannel + 19, // 14: livekit.DataConfig.selectors:type_name -> livekit.DataSelector + 59, // 15: livekit.EncodingOptions.audio_codec:type_name -> livekit.AudioCodec + 60, // 16: livekit.EncodingOptions.video_codec:type_name -> livekit.VideoCodec + 22, // 17: livekit.Output.file:type_name -> livekit.FileOutput + 23, // 18: livekit.Output.stream:type_name -> livekit.StreamOutput + 24, // 19: livekit.Output.segments:type_name -> livekit.SegmentedFileOutput + 25, // 20: livekit.Output.images:type_name -> livekit.ImageOutput + 26, // 21: livekit.Output.mcap:type_name -> livekit.McapOutput + 27, // 22: livekit.Output.storage:type_name -> livekit.StorageConfig + 2, // 23: livekit.FileOutput.file_type:type_name -> livekit.EncodedFileType + 3, // 24: livekit.StreamOutput.protocol:type_name -> livekit.StreamProtocol + 4, // 25: livekit.SegmentedFileOutput.protocol:type_name -> livekit.SegmentedFileProtocol + 5, // 26: livekit.SegmentedFileOutput.filename_suffix:type_name -> livekit.SegmentedFileSuffix + 28, // 27: livekit.SegmentedFileOutput.s3:type_name -> livekit.S3Upload + 29, // 28: livekit.SegmentedFileOutput.gcp:type_name -> livekit.GCPUpload + 30, // 29: livekit.SegmentedFileOutput.azure:type_name -> livekit.AzureBlobUpload + 31, // 30: livekit.SegmentedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 6, // 31: livekit.ImageOutput.filename_suffix:type_name -> livekit.ImageFileSuffix + 61, // 32: livekit.ImageOutput.image_codec:type_name -> livekit.ImageCodec + 28, // 33: livekit.ImageOutput.s3:type_name -> livekit.S3Upload + 29, // 34: livekit.ImageOutput.gcp:type_name -> livekit.GCPUpload + 30, // 35: livekit.ImageOutput.azure:type_name -> livekit.AzureBlobUpload + 31, // 36: livekit.ImageOutput.aliOSS:type_name -> livekit.AliOSSUpload + 28, // 37: livekit.StorageConfig.s3:type_name -> livekit.S3Upload + 29, // 38: livekit.StorageConfig.gcp:type_name -> livekit.GCPUpload + 30, // 39: livekit.StorageConfig.azure:type_name -> livekit.AzureBlobUpload + 31, // 40: livekit.StorageConfig.ali_oss:type_name -> livekit.AliOSSUpload + 56, // 41: livekit.S3Upload.metadata:type_name -> livekit.S3Upload.MetadataEntry + 32, // 42: livekit.S3Upload.proxy:type_name -> livekit.ProxyConfig + 32, // 43: livekit.GCPUpload.proxy:type_name -> livekit.ProxyConfig + 37, // 44: livekit.ListEgressResponse.items:type_name -> livekit.EgressInfo + 7, // 45: livekit.EgressInfo.source_type:type_name -> livekit.EgressSourceType + 8, // 46: livekit.EgressInfo.status:type_name -> livekit.EgressStatus + 11, // 47: livekit.EgressInfo.egress:type_name -> livekit.StartEgressRequest + 45, // 48: livekit.EgressInfo.replay:type_name -> livekit.ExportReplayRequest + 46, // 49: livekit.EgressInfo.room_composite:type_name -> livekit.RoomCompositeEgressRequest + 47, // 50: livekit.EgressInfo.web:type_name -> livekit.WebEgressRequest + 48, // 51: livekit.EgressInfo.participant:type_name -> livekit.ParticipantEgressRequest + 49, // 52: livekit.EgressInfo.track_composite:type_name -> livekit.TrackCompositeEgressRequest + 50, // 53: livekit.EgressInfo.track:type_name -> livekit.TrackEgressRequest + 38, // 54: livekit.EgressInfo.stream_results:type_name -> livekit.StreamInfo + 39, // 55: livekit.EgressInfo.file_results:type_name -> livekit.FileInfo + 40, // 56: livekit.EgressInfo.segment_results:type_name -> livekit.SegmentsInfo + 41, // 57: livekit.EgressInfo.image_results:type_name -> livekit.ImagesInfo + 42, // 58: livekit.EgressInfo.mcap_results:type_name -> livekit.McapInfo + 55, // 59: livekit.EgressInfo.stream:type_name -> livekit.StreamInfoList + 39, // 60: livekit.EgressInfo.file:type_name -> livekit.FileInfo + 40, // 61: livekit.EgressInfo.segments:type_name -> livekit.SegmentsInfo + 10, // 62: livekit.StreamInfo.status:type_name -> livekit.StreamInfo.Status + 1, // 63: livekit.AutoParticipantEgress.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 64: livekit.AutoParticipantEgress.advanced:type_name -> livekit.EncodingOptions + 52, // 65: livekit.AutoParticipantEgress.file_outputs:type_name -> livekit.EncodedFileOutput + 24, // 66: livekit.AutoParticipantEgress.segment_outputs:type_name -> livekit.SegmentedFileOutput + 28, // 67: livekit.AutoTrackEgress.s3:type_name -> livekit.S3Upload + 29, // 68: livekit.AutoTrackEgress.gcp:type_name -> livekit.GCPUpload + 30, // 69: livekit.AutoTrackEgress.azure:type_name -> livekit.AzureBlobUpload + 31, // 70: livekit.AutoTrackEgress.aliOSS:type_name -> livekit.AliOSSUpload + 12, // 71: livekit.ExportReplayRequest.template:type_name -> livekit.TemplateSource + 13, // 72: livekit.ExportReplayRequest.web:type_name -> livekit.WebSource + 14, // 73: livekit.ExportReplayRequest.media:type_name -> livekit.MediaSource + 1, // 74: livekit.ExportReplayRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 75: livekit.ExportReplayRequest.advanced:type_name -> livekit.EncodingOptions + 21, // 76: livekit.ExportReplayRequest.outputs:type_name -> livekit.Output + 27, // 77: livekit.ExportReplayRequest.storage:type_name -> livekit.StorageConfig + 57, // 78: livekit.ExportReplayRequest.webhooks:type_name -> livekit.WebhookConfig + 9, // 79: livekit.RoomCompositeEgressRequest.audio_mixing:type_name -> livekit.AudioMixing + 52, // 80: livekit.RoomCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 81: livekit.RoomCompositeEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 82: livekit.RoomCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 83: livekit.RoomCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 84: livekit.RoomCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions + 52, // 85: livekit.RoomCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 86: livekit.RoomCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 87: livekit.RoomCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 88: livekit.RoomCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 57, // 89: livekit.RoomCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 52, // 90: livekit.WebEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 91: livekit.WebEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 92: livekit.WebEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 93: livekit.WebEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 94: livekit.WebEgressRequest.advanced:type_name -> livekit.EncodingOptions + 52, // 95: livekit.WebEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 96: livekit.WebEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 97: livekit.WebEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 98: livekit.WebEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 57, // 99: livekit.WebEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 1, // 100: livekit.ParticipantEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 101: livekit.ParticipantEgressRequest.advanced:type_name -> livekit.EncodingOptions + 52, // 102: livekit.ParticipantEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 103: livekit.ParticipantEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 104: livekit.ParticipantEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 105: livekit.ParticipantEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 57, // 106: livekit.ParticipantEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 52, // 107: livekit.TrackCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 108: livekit.TrackCompositeEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 109: livekit.TrackCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 110: livekit.TrackCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 111: livekit.TrackCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions + 52, // 112: livekit.TrackCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 113: livekit.TrackCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 114: livekit.TrackCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 115: livekit.TrackCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 57, // 116: livekit.TrackCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 51, // 117: livekit.TrackEgressRequest.file:type_name -> livekit.DirectFileOutput + 57, // 118: livekit.TrackEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 28, // 119: livekit.DirectFileOutput.s3:type_name -> livekit.S3Upload + 29, // 120: livekit.DirectFileOutput.gcp:type_name -> livekit.GCPUpload + 30, // 121: livekit.DirectFileOutput.azure:type_name -> livekit.AzureBlobUpload + 31, // 122: livekit.DirectFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 2, // 123: livekit.EncodedFileOutput.file_type:type_name -> livekit.EncodedFileType + 28, // 124: livekit.EncodedFileOutput.s3:type_name -> livekit.S3Upload + 29, // 125: livekit.EncodedFileOutput.gcp:type_name -> livekit.GCPUpload + 30, // 126: livekit.EncodedFileOutput.azure:type_name -> livekit.AzureBlobUpload + 31, // 127: livekit.EncodedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 38, // 128: livekit.StreamInfoList.info:type_name -> livekit.StreamInfo + 11, // 129: livekit.Egress.StartEgress:input_type -> livekit.StartEgressRequest + 35, // 130: livekit.Egress.UpdateEgress:input_type -> livekit.UpdateEgressRequest + 33, // 131: livekit.Egress.ListEgress:input_type -> livekit.ListEgressRequest + 36, // 132: livekit.Egress.StopEgress:input_type -> livekit.StopEgressRequest + 46, // 133: livekit.Egress.StartRoomCompositeEgress:input_type -> livekit.RoomCompositeEgressRequest + 47, // 134: livekit.Egress.StartWebEgress:input_type -> livekit.WebEgressRequest + 48, // 135: livekit.Egress.StartParticipantEgress:input_type -> livekit.ParticipantEgressRequest + 49, // 136: livekit.Egress.StartTrackCompositeEgress:input_type -> livekit.TrackCompositeEgressRequest + 50, // 137: livekit.Egress.StartTrackEgress:input_type -> livekit.TrackEgressRequest + 53, // 138: livekit.Egress.UpdateLayout:input_type -> livekit.UpdateLayoutRequest + 54, // 139: livekit.Egress.UpdateStream:input_type -> livekit.UpdateStreamRequest + 37, // 140: livekit.Egress.StartEgress:output_type -> livekit.EgressInfo + 37, // 141: livekit.Egress.UpdateEgress:output_type -> livekit.EgressInfo + 34, // 142: livekit.Egress.ListEgress:output_type -> livekit.ListEgressResponse + 37, // 143: livekit.Egress.StopEgress:output_type -> livekit.EgressInfo + 37, // 144: livekit.Egress.StartRoomCompositeEgress:output_type -> livekit.EgressInfo + 37, // 145: livekit.Egress.StartWebEgress:output_type -> livekit.EgressInfo + 37, // 146: livekit.Egress.StartParticipantEgress:output_type -> livekit.EgressInfo + 37, // 147: livekit.Egress.StartTrackCompositeEgress:output_type -> livekit.EgressInfo + 37, // 148: livekit.Egress.StartTrackEgress:output_type -> livekit.EgressInfo + 37, // 149: livekit.Egress.UpdateLayout:output_type -> livekit.EgressInfo + 37, // 150: livekit.Egress.UpdateStream:output_type -> livekit.EgressInfo + 140, // [140:151] is the sub-list for method output_type + 129, // [129:140] is the sub-list for method input_type + 129, // [129:129] is the sub-list for extension type_name + 129, // [129:129] is the sub-list for extension extendee + 0, // [0:129] is the sub-list for field type_name } func init() { file_livekit_egress_proto_init() } @@ -4443,59 +6250,54 @@ func file_livekit_egress_proto_init() { } file_livekit_models_proto_init() file_livekit_egress_proto_msgTypes[0].OneofWrappers = []any{ - (*RoomCompositeEgressRequest_File)(nil), - (*RoomCompositeEgressRequest_Stream)(nil), - (*RoomCompositeEgressRequest_Segments)(nil), - (*RoomCompositeEgressRequest_Preset)(nil), - (*RoomCompositeEgressRequest_Advanced)(nil), - } - file_livekit_egress_proto_msgTypes[1].OneofWrappers = []any{ - (*WebEgressRequest_File)(nil), - (*WebEgressRequest_Stream)(nil), - (*WebEgressRequest_Segments)(nil), - (*WebEgressRequest_Preset)(nil), - (*WebEgressRequest_Advanced)(nil), - } - file_livekit_egress_proto_msgTypes[2].OneofWrappers = []any{ - (*ParticipantEgressRequest_Preset)(nil), - (*ParticipantEgressRequest_Advanced)(nil), + (*StartEgressRequest_Template)(nil), + (*StartEgressRequest_Web)(nil), + (*StartEgressRequest_Media)(nil), + (*StartEgressRequest_Preset)(nil), + (*StartEgressRequest_Advanced)(nil), } file_livekit_egress_proto_msgTypes[3].OneofWrappers = []any{ - (*TrackCompositeEgressRequest_File)(nil), - (*TrackCompositeEgressRequest_Stream)(nil), - (*TrackCompositeEgressRequest_Segments)(nil), - (*TrackCompositeEgressRequest_Preset)(nil), - (*TrackCompositeEgressRequest_Advanced)(nil), - } - file_livekit_egress_proto_msgTypes[4].OneofWrappers = []any{ - (*TrackEgressRequest_File)(nil), - (*TrackEgressRequest_WebsocketUrl)(nil), - } - file_livekit_egress_proto_msgTypes[5].OneofWrappers = []any{ - (*EncodedFileOutput_S3)(nil), - (*EncodedFileOutput_Gcp)(nil), - (*EncodedFileOutput_Azure)(nil), - (*EncodedFileOutput_AliOSS)(nil), + (*MediaSource_VideoTrackId)(nil), + (*MediaSource_ParticipantVideo)(nil), } file_livekit_egress_proto_msgTypes[6].OneofWrappers = []any{ + (*AudioRoute_TrackId)(nil), + (*AudioRoute_ParticipantIdentity)(nil), + (*AudioRoute_ParticipantKind)(nil), + } + file_livekit_egress_proto_msgTypes[8].OneofWrappers = []any{ + (*DataSelector_TrackId)(nil), + (*DataSelector_ParticipantIdentity)(nil), + (*DataSelector_Topic)(nil), + } + file_livekit_egress_proto_msgTypes[10].OneofWrappers = []any{ + (*Output_File)(nil), + (*Output_Stream)(nil), + (*Output_Segments)(nil), + (*Output_Images)(nil), + (*Output_Mcap)(nil), + } + file_livekit_egress_proto_msgTypes[13].OneofWrappers = []any{ (*SegmentedFileOutput_S3)(nil), (*SegmentedFileOutput_Gcp)(nil), (*SegmentedFileOutput_Azure)(nil), (*SegmentedFileOutput_AliOSS)(nil), } - file_livekit_egress_proto_msgTypes[7].OneofWrappers = []any{ - (*DirectFileOutput_S3)(nil), - (*DirectFileOutput_Gcp)(nil), - (*DirectFileOutput_Azure)(nil), - (*DirectFileOutput_AliOSS)(nil), - } - file_livekit_egress_proto_msgTypes[8].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[14].OneofWrappers = []any{ (*ImageOutput_S3)(nil), (*ImageOutput_Gcp)(nil), (*ImageOutput_Azure)(nil), (*ImageOutput_AliOSS)(nil), } - file_livekit_egress_proto_msgTypes[21].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[16].OneofWrappers = []any{ + (*StorageConfig_S3)(nil), + (*StorageConfig_Gcp)(nil), + (*StorageConfig_Azure)(nil), + (*StorageConfig_AliOss)(nil), + } + file_livekit_egress_proto_msgTypes[26].OneofWrappers = []any{ + (*EgressInfo_Egress)(nil), + (*EgressInfo_Replay)(nil), (*EgressInfo_RoomComposite)(nil), (*EgressInfo_Web)(nil), (*EgressInfo_Participant)(nil), @@ -4505,23 +6307,71 @@ func file_livekit_egress_proto_init() { (*EgressInfo_File)(nil), (*EgressInfo_Segments)(nil), } - file_livekit_egress_proto_msgTypes[27].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[32].OneofWrappers = []any{ (*AutoParticipantEgress_Preset)(nil), (*AutoParticipantEgress_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[28].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[33].OneofWrappers = []any{ (*AutoTrackEgress_S3)(nil), (*AutoTrackEgress_Gcp)(nil), (*AutoTrackEgress_Azure)(nil), (*AutoTrackEgress_AliOSS)(nil), } + file_livekit_egress_proto_msgTypes[34].OneofWrappers = []any{ + (*ExportReplayRequest_Template)(nil), + (*ExportReplayRequest_Web)(nil), + (*ExportReplayRequest_Media)(nil), + (*ExportReplayRequest_Preset)(nil), + (*ExportReplayRequest_Advanced)(nil), + } + file_livekit_egress_proto_msgTypes[35].OneofWrappers = []any{ + (*RoomCompositeEgressRequest_File)(nil), + (*RoomCompositeEgressRequest_Stream)(nil), + (*RoomCompositeEgressRequest_Segments)(nil), + (*RoomCompositeEgressRequest_Preset)(nil), + (*RoomCompositeEgressRequest_Advanced)(nil), + } + file_livekit_egress_proto_msgTypes[36].OneofWrappers = []any{ + (*WebEgressRequest_File)(nil), + (*WebEgressRequest_Stream)(nil), + (*WebEgressRequest_Segments)(nil), + (*WebEgressRequest_Preset)(nil), + (*WebEgressRequest_Advanced)(nil), + } + file_livekit_egress_proto_msgTypes[37].OneofWrappers = []any{ + (*ParticipantEgressRequest_Preset)(nil), + (*ParticipantEgressRequest_Advanced)(nil), + } + file_livekit_egress_proto_msgTypes[38].OneofWrappers = []any{ + (*TrackCompositeEgressRequest_File)(nil), + (*TrackCompositeEgressRequest_Stream)(nil), + (*TrackCompositeEgressRequest_Segments)(nil), + (*TrackCompositeEgressRequest_Preset)(nil), + (*TrackCompositeEgressRequest_Advanced)(nil), + } + file_livekit_egress_proto_msgTypes[39].OneofWrappers = []any{ + (*TrackEgressRequest_File)(nil), + (*TrackEgressRequest_WebsocketUrl)(nil), + } + file_livekit_egress_proto_msgTypes[40].OneofWrappers = []any{ + (*DirectFileOutput_S3)(nil), + (*DirectFileOutput_Gcp)(nil), + (*DirectFileOutput_Azure)(nil), + (*DirectFileOutput_AliOSS)(nil), + } + file_livekit_egress_proto_msgTypes[41].OneofWrappers = []any{ + (*EncodedFileOutput_S3)(nil), + (*EncodedFileOutput_Gcp)(nil), + (*EncodedFileOutput_Azure)(nil), + (*EncodedFileOutput_AliOSS)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_livekit_egress_proto_rawDesc), len(file_livekit_egress_proto_rawDesc)), - NumEnums: 10, - NumMessages: 30, + NumEnums: 11, + NumMessages: 46, NumExtensions: 0, NumServices: 1, }, diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index b84f1dc0e..41d9607be 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -27,7 +27,19 @@ const _ = twirp.TwirpPackageMinVersion_8_1_0 // ================ type Egress interface { - // start recording or streaming a room, participant, or tracks + // Unified StartEgress RPC + StartEgress(context.Context, *StartEgressRequest) (*EgressInfo, error) + + // Update url/template or stream outputs + UpdateEgress(context.Context, *UpdateEgressRequest) (*EgressInfo, error) + + // List available egress + ListEgress(context.Context, *ListEgressRequest) (*ListEgressResponse, error) + + // Stop a recording or stream + StopEgress(context.Context, *StopEgressRequest) (*EgressInfo, error) + + // --- Deprecated --- StartRoomCompositeEgress(context.Context, *RoomCompositeEgressRequest) (*EgressInfo, error) StartWebEgress(context.Context, *WebEgressRequest) (*EgressInfo, error) @@ -38,17 +50,9 @@ type Egress interface { StartTrackEgress(context.Context, *TrackEgressRequest) (*EgressInfo, error) - // update web composite layout UpdateLayout(context.Context, *UpdateLayoutRequest) (*EgressInfo, error) - // add or remove stream endpoints UpdateStream(context.Context, *UpdateStreamRequest) (*EgressInfo, error) - - // list available egress - ListEgress(context.Context, *ListEgressRequest) (*ListEgressResponse, error) - - // stop a recording or stream - StopEgress(context.Context, *StopEgressRequest) (*EgressInfo, error) } // ====================== @@ -57,7 +61,7 @@ type Egress interface { type egressProtobufClient struct { client HTTPClient - urls [9]string + urls [11]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -85,7 +89,11 @@ func NewEgressProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Cl // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(pathPrefix, "livekit", "Egress") - urls := [9]string{ + urls := [11]string{ + serviceURL + "StartEgress", + serviceURL + "UpdateEgress", + serviceURL + "ListEgress", + serviceURL + "StopEgress", serviceURL + "StartRoomCompositeEgress", serviceURL + "StartWebEgress", serviceURL + "StartParticipantEgress", @@ -93,8 +101,6 @@ func NewEgressProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Cl serviceURL + "StartTrackEgress", serviceURL + "UpdateLayout", serviceURL + "UpdateStream", - serviceURL + "ListEgress", - serviceURL + "StopEgress", } return &egressProtobufClient{ @@ -105,20 +111,20 @@ func NewEgressProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Cl } } -func (c *egressProtobufClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") - caller := c.callStartRoomCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") + caller := c.callStartEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*StartEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") } - return c.callStartRoomCompositeEgress(ctx, typedReq) + return c.callStartEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -134,7 +140,7 @@ func (c *egressProtobufClient) StartRoomCompositeEgress(ctx context.Context, in return caller(ctx, in) } -func (c *egressProtobufClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) if err != nil { @@ -151,20 +157,20 @@ func (c *egressProtobufClient) callStartRoomCompositeEgress(ctx context.Context, return out, nil } -func (c *egressProtobufClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) UpdateEgress(ctx context.Context, in *UpdateEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") - caller := c.callStartWebEgress + ctx = ctxsetters.WithMethodName(ctx, "UpdateEgress") + caller := c.callUpdateEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *UpdateEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*UpdateEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateEgressRequest) when calling interceptor") } - return c.callStartWebEgress(ctx, typedReq) + return c.callUpdateEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -180,7 +186,7 @@ func (c *egressProtobufClient) StartWebEgress(ctx context.Context, in *WebEgress return caller(ctx, in) } -func (c *egressProtobufClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callUpdateEgress(ctx context.Context, in *UpdateEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) if err != nil { @@ -197,26 +203,26 @@ func (c *egressProtobufClient) callStartWebEgress(ctx context.Context, in *WebEg return out, nil } -func (c *egressProtobufClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") - caller := c.callStartParticipantEgress + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + caller := c.callListEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*ListEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") } - return c.callStartParticipantEgress(ctx, typedReq) + return c.callListEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*EgressInfo) + typedResp, ok := resp.(*ListEgressResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") } return typedResp, err } @@ -226,8 +232,8 @@ func (c *egressProtobufClient) StartParticipantEgress(ctx context.Context, in *P return caller(ctx, in) } -func (c *egressProtobufClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { - out := new(EgressInfo) +func (c *egressProtobufClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { + out := new(ListEgressResponse) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -243,20 +249,20 @@ func (c *egressProtobufClient) callStartParticipantEgress(ctx context.Context, i return out, nil } -func (c *egressProtobufClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") - caller := c.callStartTrackCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + caller := c.callStopEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return c.callStartTrackCompositeEgress(ctx, typedReq) + return c.callStopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -272,7 +278,7 @@ func (c *egressProtobufClient) StartTrackCompositeEgress(ctx context.Context, in return caller(ctx, in) } -func (c *egressProtobufClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) if err != nil { @@ -289,20 +295,20 @@ func (c *egressProtobufClient) callStartTrackCompositeEgress(ctx context.Context return out, nil } -func (c *egressProtobufClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") - caller := c.callStartTrackEgress + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + caller := c.callStartRoomCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return c.callStartTrackEgress(ctx, typedReq) + return c.callStartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -318,7 +324,7 @@ func (c *egressProtobufClient) StartTrackEgress(ctx context.Context, in *TrackEg return caller(ctx, in) } -func (c *egressProtobufClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) if err != nil { @@ -335,20 +341,20 @@ func (c *egressProtobufClient) callStartTrackEgress(ctx context.Context, in *Tra return out, nil } -func (c *egressProtobufClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") - caller := c.callUpdateLayout + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + caller := c.callStartWebEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return c.callUpdateLayout(ctx, typedReq) + return c.callStartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -364,7 +370,7 @@ func (c *egressProtobufClient) UpdateLayout(ctx context.Context, in *UpdateLayou return caller(ctx, in) } -func (c *egressProtobufClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[5], in, out) if err != nil { @@ -381,20 +387,20 @@ func (c *egressProtobufClient) callUpdateLayout(ctx context.Context, in *UpdateL return out, nil } -func (c *egressProtobufClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") - caller := c.callUpdateStream + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + caller := c.callStartParticipantEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return c.callUpdateStream(ctx, typedReq) + return c.callStartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -410,7 +416,7 @@ func (c *egressProtobufClient) UpdateStream(ctx context.Context, in *UpdateStrea return caller(ctx, in) } -func (c *egressProtobufClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[6], in, out) if err != nil { @@ -427,26 +433,26 @@ func (c *egressProtobufClient) callUpdateStream(ctx context.Context, in *UpdateS return out, nil } -func (c *egressProtobufClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { +func (c *egressProtobufClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") - caller := c.callListEgress + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + caller := c.callStartTrackCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return c.callListEgress(ctx, typedReq) + return c.callStartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -456,8 +462,8 @@ func (c *egressProtobufClient) ListEgress(ctx context.Context, in *ListEgressReq return caller(ctx, in) } -func (c *egressProtobufClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { - out := new(ListEgressResponse) +func (c *egressProtobufClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { + out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -473,20 +479,20 @@ func (c *egressProtobufClient) callListEgress(ctx context.Context, in *ListEgres return out, nil } -func (c *egressProtobufClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") - caller := c.callStopEgress + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + caller := c.callStartTrackEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*TrackEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") } - return c.callStopEgress(ctx, typedReq) + return c.callStartTrackEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -502,7 +508,7 @@ func (c *egressProtobufClient) StopEgress(ctx context.Context, in *StopEgressReq return caller(ctx, in) } -func (c *egressProtobufClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressProtobufClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[8], in, out) if err != nil { @@ -519,13 +525,105 @@ func (c *egressProtobufClient) callStopEgress(ctx context.Context, in *StopEgres return out, nil } +func (c *egressProtobufClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + caller := c.callUpdateLayout + if c.interceptor != nil { + caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*UpdateLayoutRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + } + return c.callUpdateLayout(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *egressProtobufClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { + out := new(EgressInfo) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[9], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + +func (c *egressProtobufClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + caller := c.callUpdateStream + if c.interceptor != nil { + caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*UpdateStreamRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + } + return c.callUpdateStream(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *egressProtobufClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { + out := new(EgressInfo) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[10], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ================== // Egress JSON Client // ================== type egressJSONClient struct { client HTTPClient - urls [9]string + urls [11]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -553,7 +651,11 @@ func NewEgressJSONClient(baseURL string, client HTTPClient, opts ...twirp.Client // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(pathPrefix, "livekit", "Egress") - urls := [9]string{ + urls := [11]string{ + serviceURL + "StartEgress", + serviceURL + "UpdateEgress", + serviceURL + "ListEgress", + serviceURL + "StopEgress", serviceURL + "StartRoomCompositeEgress", serviceURL + "StartWebEgress", serviceURL + "StartParticipantEgress", @@ -561,8 +663,6 @@ func NewEgressJSONClient(baseURL string, client HTTPClient, opts ...twirp.Client serviceURL + "StartTrackEgress", serviceURL + "UpdateLayout", serviceURL + "UpdateStream", - serviceURL + "ListEgress", - serviceURL + "StopEgress", } return &egressJSONClient{ @@ -573,20 +673,20 @@ func NewEgressJSONClient(baseURL string, client HTTPClient, opts ...twirp.Client } } -func (c *egressJSONClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") - caller := c.callStartRoomCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") + caller := c.callStartEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*StartEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") } - return c.callStartRoomCompositeEgress(ctx, typedReq) + return c.callStartEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -602,7 +702,7 @@ func (c *egressJSONClient) StartRoomCompositeEgress(ctx context.Context, in *Roo return caller(ctx, in) } -func (c *egressJSONClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartEgress(ctx context.Context, in *StartEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) if err != nil { @@ -619,20 +719,20 @@ func (c *egressJSONClient) callStartRoomCompositeEgress(ctx context.Context, in return out, nil } -func (c *egressJSONClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) UpdateEgress(ctx context.Context, in *UpdateEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") - caller := c.callStartWebEgress + ctx = ctxsetters.WithMethodName(ctx, "UpdateEgress") + caller := c.callUpdateEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *UpdateEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*UpdateEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateEgressRequest) when calling interceptor") } - return c.callStartWebEgress(ctx, typedReq) + return c.callUpdateEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -648,7 +748,7 @@ func (c *egressJSONClient) StartWebEgress(ctx context.Context, in *WebEgressRequ return caller(ctx, in) } -func (c *egressJSONClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callUpdateEgress(ctx context.Context, in *UpdateEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) if err != nil { @@ -665,26 +765,26 @@ func (c *egressJSONClient) callStartWebEgress(ctx context.Context, in *WebEgress return out, nil } -func (c *egressJSONClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") - caller := c.callStartParticipantEgress + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + caller := c.callListEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*ListEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") } - return c.callStartParticipantEgress(ctx, typedReq) + return c.callListEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*EgressInfo) + typedResp, ok := resp.(*ListEgressResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") } return typedResp, err } @@ -694,8 +794,8 @@ func (c *egressJSONClient) StartParticipantEgress(ctx context.Context, in *Parti return caller(ctx, in) } -func (c *egressJSONClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { - out := new(EgressInfo) +func (c *egressJSONClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { + out := new(ListEgressResponse) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -711,20 +811,20 @@ func (c *egressJSONClient) callStartParticipantEgress(ctx context.Context, in *P return out, nil } -func (c *egressJSONClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") - caller := c.callStartTrackCompositeEgress + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + caller := c.callStopEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return c.callStartTrackCompositeEgress(ctx, typedReq) + return c.callStopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -740,7 +840,7 @@ func (c *egressJSONClient) StartTrackCompositeEgress(ctx context.Context, in *Tr return caller(ctx, in) } -func (c *egressJSONClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) if err != nil { @@ -757,20 +857,20 @@ func (c *egressJSONClient) callStartTrackCompositeEgress(ctx context.Context, in return out, nil } -func (c *egressJSONClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") - caller := c.callStartTrackEgress + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + caller := c.callStartRoomCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return c.callStartTrackEgress(ctx, typedReq) + return c.callStartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -786,7 +886,7 @@ func (c *egressJSONClient) StartTrackEgress(ctx context.Context, in *TrackEgress return caller(ctx, in) } -func (c *egressJSONClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartRoomCompositeEgress(ctx context.Context, in *RoomCompositeEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) if err != nil { @@ -803,20 +903,20 @@ func (c *egressJSONClient) callStartTrackEgress(ctx context.Context, in *TrackEg return out, nil } -func (c *egressJSONClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") - caller := c.callUpdateLayout + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + caller := c.callStartWebEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return c.callUpdateLayout(ctx, typedReq) + return c.callStartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -832,7 +932,7 @@ func (c *egressJSONClient) UpdateLayout(ctx context.Context, in *UpdateLayoutReq return caller(ctx, in) } -func (c *egressJSONClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartWebEgress(ctx context.Context, in *WebEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[5], in, out) if err != nil { @@ -849,20 +949,20 @@ func (c *egressJSONClient) callUpdateLayout(ctx context.Context, in *UpdateLayou return out, nil } -func (c *egressJSONClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") - caller := c.callUpdateStream + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + caller := c.callStartParticipantEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return c.callUpdateStream(ctx, typedReq) + return c.callStartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -878,7 +978,7 @@ func (c *egressJSONClient) UpdateStream(ctx context.Context, in *UpdateStreamReq return caller(ctx, in) } -func (c *egressJSONClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartParticipantEgress(ctx context.Context, in *ParticipantEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[6], in, out) if err != nil { @@ -895,26 +995,26 @@ func (c *egressJSONClient) callUpdateStream(ctx context.Context, in *UpdateStrea return out, nil } -func (c *egressJSONClient) ListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { +func (c *egressJSONClient) StartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") - caller := c.callListEgress + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + caller := c.callStartTrackCompositeEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + caller = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return c.callListEgress(ctx, typedReq) + return c.callStartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -924,8 +1024,8 @@ func (c *egressJSONClient) ListEgress(ctx context.Context, in *ListEgressRequest return caller(ctx, in) } -func (c *egressJSONClient) callListEgress(ctx context.Context, in *ListEgressRequest) (*ListEgressResponse, error) { - out := new(ListEgressResponse) +func (c *egressJSONClient) callStartTrackCompositeEgress(ctx context.Context, in *TrackCompositeEgressRequest) (*EgressInfo, error) { + out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -941,20 +1041,20 @@ func (c *egressJSONClient) callListEgress(ctx context.Context, in *ListEgressReq return out, nil } -func (c *egressJSONClient) StopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) StartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "livekit") ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") - caller := c.callStopEgress + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + caller := c.callStartTrackEgress if c.interceptor != nil { - caller = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + caller = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*TrackEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") } - return c.callStopEgress(ctx, typedReq) + return c.callStartTrackEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -970,7 +1070,7 @@ func (c *egressJSONClient) StopEgress(ctx context.Context, in *StopEgressRequest return caller(ctx, in) } -func (c *egressJSONClient) callStopEgress(ctx context.Context, in *StopEgressRequest) (*EgressInfo, error) { +func (c *egressJSONClient) callStartTrackEgress(ctx context.Context, in *TrackEgressRequest) (*EgressInfo, error) { out := new(EgressInfo) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[8], in, out) if err != nil { @@ -987,6 +1087,98 @@ func (c *egressJSONClient) callStopEgress(ctx context.Context, in *StopEgressReq return out, nil } +func (c *egressJSONClient) UpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + caller := c.callUpdateLayout + if c.interceptor != nil { + caller = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*UpdateLayoutRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + } + return c.callUpdateLayout(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *egressJSONClient) callUpdateLayout(ctx context.Context, in *UpdateLayoutRequest) (*EgressInfo, error) { + out := new(EgressInfo) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[9], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + +func (c *egressJSONClient) UpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + caller := c.callUpdateStream + if c.interceptor != nil { + caller = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*UpdateStreamRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + } + return c.callUpdateStream(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *egressJSONClient) callUpdateStream(ctx context.Context, in *UpdateStreamRequest) (*EgressInfo, error) { + out := new(EgressInfo) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[10], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ===================== // Egress Server Handler // ===================== @@ -1042,83 +1234,449 @@ func (s *egressServer) handleRequestBodyError(ctx context.Context, resp http.Res s.writeError(ctx, resp, twirp.NewError(twirp.DeadlineExceeded, "failed to read request: deadline exceeded")) return } - s.writeError(ctx, resp, twirp.WrapError(malformedRequestError(msg), err)) + s.writeError(ctx, resp, twirp.WrapError(malformedRequestError(msg), err)) +} + +// EgressPathPrefix is a convenience constant that may identify URL paths. +// Should be used with caution, it only matches routes generated by Twirp Go clients, +// with the default "/twirp" prefix and default CamelCase service and method names. +// More info: https://twitchtv.github.io/twirp/docs/routing.html +const EgressPathPrefix = "/twirp/livekit.Egress/" + +func (s *egressServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { + ctx := req.Context() + ctx = ctxsetters.WithPackageName(ctx, "livekit") + ctx = ctxsetters.WithServiceName(ctx, "Egress") + ctx = ctxsetters.WithResponseWriter(ctx, resp) + + var err error + ctx, err = callRequestReceived(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + if req.Method != "POST" { + msg := fmt.Sprintf("unsupported method %q (only POST is allowed)", req.Method) + s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + return + } + + // Verify path format: []/./ + prefix, pkgService, method := parseTwirpPath(req.URL.Path) + if pkgService != "livekit.Egress" { + msg := fmt.Sprintf("no handler for path %q", req.URL.Path) + s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + return + } + if prefix != s.pathPrefix { + msg := fmt.Sprintf("invalid path prefix %q, expected %q, on path %q", prefix, s.pathPrefix, req.URL.Path) + s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + return + } + + switch method { + case "StartEgress": + s.serveStartEgress(ctx, resp, req) + return + case "UpdateEgress": + s.serveUpdateEgress(ctx, resp, req) + return + case "ListEgress": + s.serveListEgress(ctx, resp, req) + return + case "StopEgress": + s.serveStopEgress(ctx, resp, req) + return + case "StartRoomCompositeEgress": + s.serveStartRoomCompositeEgress(ctx, resp, req) + return + case "StartWebEgress": + s.serveStartWebEgress(ctx, resp, req) + return + case "StartParticipantEgress": + s.serveStartParticipantEgress(ctx, resp, req) + return + case "StartTrackCompositeEgress": + s.serveStartTrackCompositeEgress(ctx, resp, req) + return + case "StartTrackEgress": + s.serveStartTrackEgress(ctx, resp, req) + return + case "UpdateLayout": + s.serveUpdateLayout(ctx, resp, req) + return + case "UpdateStream": + s.serveUpdateStream(ctx, resp, req) + return + default: + msg := fmt.Sprintf("no handler for path %q", req.URL.Path) + s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + return + } +} + +func (s *egressServer) serveStartEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveStartEgressJSON(ctx, resp, req) + case "application/protobuf": + s.serveStartEgressProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *egressServer) serveStartEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + d := json.NewDecoder(req.Body) + rawReqBody := json.RawMessage{} + if err := d.Decode(&rawReqBody); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + reqContent := new(StartEgressRequest) + unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} + if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + + handler := s.Egress.StartEgress + if s.interceptor != nil { + handler = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*StartEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") + } + return s.Egress.StartEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *EgressInfo + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartEgress. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} + respBytes, err := marshaler.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *egressServer) serveStartEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "StartEgress") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + buf, err := io.ReadAll(req.Body) + if err != nil { + s.handleRequestBodyError(ctx, resp, "failed to read request body", err) + return + } + reqContent := new(StartEgressRequest) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) + return + } + + handler := s.Egress.StartEgress + if s.interceptor != nil { + handler = func(ctx context.Context, req *StartEgressRequest) (*EgressInfo, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*StartEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*StartEgressRequest) when calling interceptor") + } + return s.Egress.StartEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *EgressInfo + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartEgress. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *egressServer) serveUpdateEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveUpdateEgressJSON(ctx, resp, req) + case "application/protobuf": + s.serveUpdateEgressProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *egressServer) serveUpdateEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "UpdateEgress") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + d := json.NewDecoder(req.Body) + rawReqBody := json.RawMessage{} + if err := d.Decode(&rawReqBody); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + reqContent := new(UpdateEgressRequest) + unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} + if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + + handler := s.Egress.UpdateEgress + if s.interceptor != nil { + handler = func(ctx context.Context, req *UpdateEgressRequest) (*EgressInfo, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*UpdateEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*UpdateEgressRequest) when calling interceptor") + } + return s.Egress.UpdateEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *EgressInfo + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateEgress. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} + respBytes, err := marshaler.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) } -// EgressPathPrefix is a convenience constant that may identify URL paths. -// Should be used with caution, it only matches routes generated by Twirp Go clients, -// with the default "/twirp" prefix and default CamelCase service and method names. -// More info: https://twitchtv.github.io/twirp/docs/routing.html -const EgressPathPrefix = "/twirp/livekit.Egress/" - -func (s *egressServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - ctx := req.Context() - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "Egress") - ctx = ctxsetters.WithResponseWriter(ctx, resp) - +func (s *egressServer) serveUpdateEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx, err = callRequestReceived(ctx, s.hooks) + ctx = ctxsetters.WithMethodName(ctx, "UpdateEgress") + ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) return } - if req.Method != "POST" { - msg := fmt.Sprintf("unsupported method %q (only POST is allowed)", req.Method) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + buf, err := io.ReadAll(req.Body) + if err != nil { + s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - - // Verify path format: []/./ - prefix, pkgService, method := parseTwirpPath(req.URL.Path) - if pkgService != "livekit.Egress" { - msg := fmt.Sprintf("no handler for path %q", req.URL.Path) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + reqContent := new(UpdateEgressRequest) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - if prefix != s.pathPrefix { - msg := fmt.Sprintf("invalid path prefix %q, expected %q, on path %q", prefix, s.pathPrefix, req.URL.Path) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) - return + + handler := s.Egress.UpdateEgress + if s.interceptor != nil { + handler = func(ctx context.Context, req *UpdateEgressRequest) (*EgressInfo, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*UpdateEgressRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*UpdateEgressRequest) when calling interceptor") + } + return s.Egress.UpdateEgress(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } } - switch method { - case "StartRoomCompositeEgress": - s.serveStartRoomCompositeEgress(ctx, resp, req) - return - case "StartWebEgress": - s.serveStartWebEgress(ctx, resp, req) - return - case "StartParticipantEgress": - s.serveStartParticipantEgress(ctx, resp, req) - return - case "StartTrackCompositeEgress": - s.serveStartTrackCompositeEgress(ctx, resp, req) - return - case "StartTrackEgress": - s.serveStartTrackEgress(ctx, resp, req) - return - case "UpdateLayout": - s.serveUpdateLayout(ctx, resp, req) - return - case "UpdateStream": - s.serveUpdateStream(ctx, resp, req) - return - case "ListEgress": - s.serveListEgress(ctx, resp, req) + // Call service method + var respContent *EgressInfo + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) return - case "StopEgress": - s.serveStopEgress(ctx, resp, req) + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateEgress. nil responses are not supported")) return - default: - msg := fmt.Sprintf("no handler for path %q", req.URL.Path) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) return } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1126,9 +1684,9 @@ func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp h } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartRoomCompositeEgressJSON(ctx, resp, req) + s.serveListEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartRoomCompositeEgressProtobuf(ctx, resp, req) + s.serveListEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1136,9 +1694,9 @@ func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp h } } -func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1151,29 +1709,29 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(RoomCompositeEgressRequest) + reqContent := new(ListEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartRoomCompositeEgress + handler := s.Egress.ListEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*ListEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") } - return s.Egress.StartRoomCompositeEgress(ctx, typedReq) + return s.Egress.ListEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*EgressInfo) + typedResp, ok := resp.(*ListEgressResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") } return typedResp, err } @@ -1182,7 +1740,7 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re } // Call service method - var respContent *EgressInfo + var respContent *ListEgressResponse func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -1193,7 +1751,7 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) return } @@ -1219,9 +1777,9 @@ func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, re callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "ListEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1233,28 +1791,28 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(RoomCompositeEgressRequest) + reqContent := new(ListEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartRoomCompositeEgress + handler := s.Egress.ListEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RoomCompositeEgressRequest) + typedReq, ok := req.(*ListEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") } - return s.Egress.StartRoomCompositeEgress(ctx, typedReq) + return s.Egress.ListEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*EgressInfo) + typedResp, ok := resp.(*ListEgressResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") } return typedResp, err } @@ -1263,7 +1821,7 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context } // Call service method - var respContent *EgressInfo + var respContent *ListEgressResponse func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -1274,7 +1832,7 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) return } @@ -1298,7 +1856,7 @@ func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1306,9 +1864,9 @@ func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.Respon } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartWebEgressJSON(ctx, resp, req) + s.serveStopEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartWebEgressProtobuf(ctx, resp, req) + s.serveStopEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1316,9 +1874,9 @@ func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.Respon } } -func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1331,23 +1889,23 @@ func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.Re s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(WebEgressRequest) + reqContent := new(StopEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartWebEgress + handler := s.Egress.StopEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return s.Egress.StartWebEgress(ctx, typedReq) + return s.Egress.StopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1373,7 +1931,7 @@ func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.Re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) return } @@ -1399,9 +1957,9 @@ func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.Re callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") + ctx = ctxsetters.WithMethodName(ctx, "StopEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1413,22 +1971,22 @@ func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp htt s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(WebEgressRequest) + reqContent := new(StopEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartWebEgress + handler := s.Egress.StopEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*WebEgressRequest) + typedReq, ok := req.(*StopEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") } - return s.Egress.StartWebEgress(ctx, typedReq) + return s.Egress.StopEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1454,7 +2012,7 @@ func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp htt return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) return } @@ -1478,7 +2036,7 @@ func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp htt callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartRoomCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1486,9 +2044,9 @@ func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp htt } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartParticipantEgressJSON(ctx, resp, req) + s.serveStartRoomCompositeEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartParticipantEgressProtobuf(ctx, resp, req) + s.serveStartRoomCompositeEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1496,9 +2054,9 @@ func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp htt } } -func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartRoomCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1511,23 +2069,23 @@ func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(ParticipantEgressRequest) + reqContent := new(RoomCompositeEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartParticipantEgress + handler := s.Egress.StartRoomCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return s.Egress.StartParticipantEgress(ctx, typedReq) + return s.Egress.StartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1553,7 +2111,7 @@ func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) return } @@ -1579,9 +2137,9 @@ func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartRoomCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartRoomCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1593,22 +2151,22 @@ func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(ParticipantEgressRequest) + reqContent := new(RoomCompositeEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartParticipantEgress + handler := s.Egress.StartRoomCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *RoomCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ParticipantEgressRequest) + typedReq, ok := req.(*RoomCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*RoomCompositeEgressRequest) when calling interceptor") } - return s.Egress.StartParticipantEgress(ctx, typedReq) + return s.Egress.StartRoomCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1634,7 +2192,7 @@ func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartRoomCompositeEgress. nil responses are not supported")) return } @@ -1658,7 +2216,7 @@ func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartWebEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1666,9 +2224,9 @@ func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartTrackCompositeEgressJSON(ctx, resp, req) + s.serveStartWebEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartTrackCompositeEgressProtobuf(ctx, resp, req) + s.serveStartWebEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1676,9 +2234,9 @@ func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp } } -func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartWebEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1691,23 +2249,23 @@ func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, r s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(TrackCompositeEgressRequest) + reqContent := new(WebEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartTrackCompositeEgress + handler := s.Egress.StartWebEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return s.Egress.StartTrackCompositeEgress(ctx, typedReq) + return s.Egress.StartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1733,7 +2291,7 @@ func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, r return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) return } @@ -1759,9 +2317,9 @@ func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, r callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartWebEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartWebEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1773,22 +2331,22 @@ func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Contex s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(TrackCompositeEgressRequest) + reqContent := new(WebEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartTrackCompositeEgress + handler := s.Egress.StartWebEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *WebEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackCompositeEgressRequest) + typedReq, ok := req.(*WebEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*WebEgressRequest) when calling interceptor") } - return s.Egress.StartTrackCompositeEgress(ctx, typedReq) + return s.Egress.StartWebEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1814,7 +2372,7 @@ func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Contex return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartWebEgress. nil responses are not supported")) return } @@ -1838,7 +2396,7 @@ func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Contex callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartParticipantEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1846,9 +2404,9 @@ func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.Resp } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStartTrackEgressJSON(ctx, resp, req) + s.serveStartParticipantEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveStartTrackEgressProtobuf(ctx, resp, req) + s.serveStartParticipantEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1856,9 +2414,9 @@ func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.Resp } } -func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartParticipantEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1871,23 +2429,23 @@ func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(TrackEgressRequest) + reqContent := new(ParticipantEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StartTrackEgress + handler := s.Egress.StartParticipantEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return s.Egress.StartTrackEgress(ctx, typedReq) + return s.Egress.StartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1913,7 +2471,7 @@ func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) return } @@ -1939,9 +2497,9 @@ func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartParticipantEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") + ctx = ctxsetters.WithMethodName(ctx, "StartParticipantEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1953,22 +2511,22 @@ func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp h s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(TrackEgressRequest) + reqContent := new(ParticipantEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StartTrackEgress + handler := s.Egress.StartParticipantEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *ParticipantEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*TrackEgressRequest) + typedReq, ok := req.(*ParticipantEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ParticipantEgressRequest) when calling interceptor") } - return s.Egress.StartTrackEgress(ctx, typedReq) + return s.Egress.StartParticipantEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1994,7 +2552,7 @@ func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp h return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartParticipantEgress. nil responses are not supported")) return } @@ -2018,7 +2576,7 @@ func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp h callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackCompositeEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2026,9 +2584,9 @@ func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.Response } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveUpdateLayoutJSON(ctx, resp, req) + s.serveStartTrackCompositeEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveUpdateLayoutProtobuf(ctx, resp, req) + s.serveStartTrackCompositeEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2036,9 +2594,9 @@ func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.Response } } -func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackCompositeEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2051,23 +2609,23 @@ func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.Resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(UpdateLayoutRequest) + reqContent := new(TrackCompositeEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.UpdateLayout + handler := s.Egress.StartTrackCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return s.Egress.UpdateLayout(ctx, typedReq) + return s.Egress.StartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2093,7 +2651,7 @@ func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.Resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) return } @@ -2119,9 +2677,9 @@ func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.Resp callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackCompositeEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackCompositeEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2133,22 +2691,22 @@ func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(UpdateLayoutRequest) + reqContent := new(TrackCompositeEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.UpdateLayout + handler := s.Egress.StartTrackCompositeEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *TrackCompositeEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateLayoutRequest) + typedReq, ok := req.(*TrackCompositeEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackCompositeEgressRequest) when calling interceptor") } - return s.Egress.UpdateLayout(ctx, typedReq) + return s.Egress.StartTrackCompositeEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2174,7 +2732,7 @@ func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackCompositeEgress. nil responses are not supported")) return } @@ -2198,7 +2756,7 @@ func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2206,9 +2764,9 @@ func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.Response } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveUpdateStreamJSON(ctx, resp, req) + s.serveStartTrackEgressJSON(ctx, resp, req) case "application/protobuf": - s.serveUpdateStreamProtobuf(ctx, resp, req) + s.serveStartTrackEgressProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2216,9 +2774,9 @@ func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.Response } } -func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2231,23 +2789,23 @@ func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.Resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(UpdateStreamRequest) + reqContent := new(TrackEgressRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.UpdateStream + handler := s.Egress.StartTrackEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*TrackEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") } - return s.Egress.UpdateStream(ctx, typedReq) + return s.Egress.StartTrackEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2273,7 +2831,7 @@ func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.Resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) return } @@ -2299,9 +2857,9 @@ func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.Resp callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveStartTrackEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") + ctx = ctxsetters.WithMethodName(ctx, "StartTrackEgress") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2313,22 +2871,22 @@ func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(UpdateStreamRequest) + reqContent := new(TrackEgressRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.UpdateStream + handler := s.Egress.StartTrackEgress if s.interceptor != nil { - handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *TrackEgressRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*UpdateStreamRequest) + typedReq, ok := req.(*TrackEgressRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*TrackEgressRequest) when calling interceptor") } - return s.Egress.UpdateStream(ctx, typedReq) + return s.Egress.StartTrackEgress(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2354,7 +2912,7 @@ func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StartTrackEgress. nil responses are not supported")) return } @@ -2378,7 +2936,7 @@ func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateLayout(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2386,9 +2944,9 @@ func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWr } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveListEgressJSON(ctx, resp, req) + s.serveUpdateLayoutJSON(ctx, resp, req) case "application/protobuf": - s.serveListEgressProtobuf(ctx, resp, req) + s.serveUpdateLayoutProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2396,9 +2954,9 @@ func (s *egressServer) serveListEgress(ctx context.Context, resp http.ResponseWr } } -func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateLayoutJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2411,29 +2969,29 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(ListEgressRequest) + reqContent := new(UpdateLayoutRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.ListEgress + handler := s.Egress.UpdateLayout if s.interceptor != nil { - handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*UpdateLayoutRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") } - return s.Egress.ListEgress(ctx, typedReq) + return s.Egress.UpdateLayout(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -2442,7 +3000,7 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon } // Call service method - var respContent *ListEgressResponse + var respContent *EgressInfo func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -2453,7 +3011,7 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) return } @@ -2479,9 +3037,9 @@ func (s *egressServer) serveListEgressJSON(ctx context.Context, resp http.Respon callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateLayoutProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "ListEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateLayout") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2493,28 +3051,28 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(ListEgressRequest) + reqContent := new(UpdateLayoutRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.ListEgress + handler := s.Egress.UpdateLayout if s.interceptor != nil { - handler = func(ctx context.Context, req *ListEgressRequest) (*ListEgressResponse, error) { + handler = func(ctx context.Context, req *UpdateLayoutRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ListEgressRequest) + typedReq, ok := req.(*UpdateLayoutRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ListEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateLayoutRequest) when calling interceptor") } - return s.Egress.ListEgress(ctx, typedReq) + return s.Egress.UpdateLayout(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*ListEgressResponse) + typedResp, ok := resp.(*EgressInfo) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*ListEgressResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*EgressInfo) when calling interceptor") } return typedResp, err } @@ -2523,7 +3081,7 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re } // Call service method - var respContent *ListEgressResponse + var respContent *EgressInfo func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -2534,7 +3092,7 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *ListEgressResponse and nil error while calling ListEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateLayout. nil responses are not supported")) return } @@ -2558,7 +3116,7 @@ func (s *egressServer) serveListEgressProtobuf(ctx context.Context, resp http.Re callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateStream(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -2566,9 +3124,9 @@ func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWr } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveStopEgressJSON(ctx, resp, req) + s.serveUpdateStreamJSON(ctx, resp, req) case "application/protobuf": - s.serveStopEgressProtobuf(ctx, resp, req) + s.serveUpdateStreamProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -2576,9 +3134,9 @@ func (s *egressServer) serveStopEgress(ctx context.Context, resp http.ResponseWr } } -func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateStreamJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2591,23 +3149,23 @@ func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.Respon s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(StopEgressRequest) + reqContent := new(UpdateStreamRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Egress.StopEgress + handler := s.Egress.UpdateStream if s.interceptor != nil { - handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*UpdateStreamRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") } - return s.Egress.StopEgress(ctx, typedReq) + return s.Egress.UpdateStream(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2633,7 +3191,7 @@ func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.Respon return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) return } @@ -2659,9 +3217,9 @@ func (s *egressServer) serveStopEgressJSON(ctx context.Context, resp http.Respon callResponseSent(ctx, s.hooks) } -func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *egressServer) serveUpdateStreamProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "StopEgress") + ctx = ctxsetters.WithMethodName(ctx, "UpdateStream") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -2673,22 +3231,22 @@ func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.Re s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(StopEgressRequest) + reqContent := new(UpdateStreamRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Egress.StopEgress + handler := s.Egress.UpdateStream if s.interceptor != nil { - handler = func(ctx context.Context, req *StopEgressRequest) (*EgressInfo, error) { + handler = func(ctx context.Context, req *UpdateStreamRequest) (*EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StopEgressRequest) + typedReq, ok := req.(*UpdateStreamRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StopEgressRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*UpdateStreamRequest) when calling interceptor") } - return s.Egress.StopEgress(ctx, typedReq) + return s.Egress.UpdateStream(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -2714,7 +3272,7 @@ func (s *egressServer) serveStopEgressProtobuf(ctx context.Context, resp http.Re return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling StopEgress. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *EgressInfo and nil error while calling UpdateStream. nil responses are not supported")) return } @@ -2754,218 +3312,279 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor1 = []byte{ - // 3407 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0x4b, 0x6f, 0x1b, 0xd7, - 0xf5, 0xd7, 0xf0, 0xcd, 0xc3, 0x87, 0x46, 0x57, 0xb2, 0x42, 0xcb, 0x4e, 0xec, 0x50, 0xff, 0x38, - 0xb6, 0xa2, 0xc8, 0xfa, 0x5b, 0x8e, 0xe3, 0x38, 0x4d, 0x5a, 0x4a, 0x1c, 0x49, 0x6c, 0xf4, 0x60, - 0x2f, 0x29, 0xdb, 0xed, 0x66, 0x30, 0x22, 0xaf, 0xa8, 0x81, 0xc8, 0x19, 0x66, 0xe6, 0x52, 0x32, - 0xf3, 0x09, 0xb2, 0x6b, 0xd1, 0x02, 0x5d, 0x18, 0x2d, 0xba, 0x29, 0xba, 0x28, 0xf2, 0x49, 0xda, - 0x45, 0x17, 0x45, 0xbf, 0x40, 0x97, 0x85, 0x8b, 0x02, 0x05, 0xba, 0x2f, 0xee, 0x63, 0x1e, 0xa4, - 0x46, 0xb2, 0x64, 0x19, 0xe8, 0xa2, 0x5d, 0x69, 0xee, 0x79, 0xf1, 0xcc, 0x9d, 0xdf, 0x39, 0xe7, - 0x9e, 0x73, 0x05, 0x33, 0x5d, 0xf3, 0x98, 0x1c, 0x99, 0x54, 0x27, 0x1d, 0x87, 0xb8, 0xee, 0x52, - 0xdf, 0xb1, 0xa9, 0x8d, 0xd2, 0x92, 0x3a, 0xe7, 0xb3, 0x7b, 0x76, 0x9b, 0x74, 0x25, 0x7b, 0x6e, - 0xa6, 0x6b, 0x77, 0x3a, 0xc4, 0xb9, 0x6f, 0xf7, 0xa9, 0x69, 0x5b, 0x92, 0x5a, 0xfe, 0x4b, 0x0a, - 0xe6, 0xb0, 0x6d, 0xf7, 0xd6, 0xec, 0x5e, 0xdf, 0x76, 0x4d, 0x4a, 0x34, 0x6e, 0x12, 0x93, 0xaf, - 0x07, 0xc4, 0xa5, 0xe8, 0x06, 0x64, 0x1d, 0xdb, 0xee, 0xe9, 0x96, 0xd1, 0x23, 0x25, 0xe5, 0xb6, - 0x72, 0x37, 0x8b, 0x33, 0x8c, 0xb0, 0x63, 0xf4, 0x08, 0x9a, 0x85, 0x54, 0xd7, 0x18, 0xda, 0x03, - 0x5a, 0x8a, 0x71, 0x8e, 0x5c, 0xa1, 0x77, 0x01, 0x8c, 0x41, 0xdb, 0xb4, 0x75, 0xdb, 0xea, 0x0e, - 0x4b, 0xf1, 0xdb, 0xca, 0xdd, 0x0c, 0xce, 0x72, 0xca, 0xae, 0xd5, 0x1d, 0xa2, 0x4f, 0x21, 0x2f, - 0xd8, 0x3d, 0xf3, 0x85, 0x69, 0x75, 0x4a, 0x93, 0xb7, 0x95, 0xbb, 0xc5, 0x07, 0x33, 0x4b, 0xd2, - 0xeb, 0xa5, 0x0a, 0x63, 0x6e, 0x73, 0x1e, 0xce, 0x19, 0xc1, 0x82, 0xd9, 0x3d, 0x36, 0xdb, 0x44, - 0xda, 0x4d, 0x08, 0xbb, 0x9c, 0xc2, 0xed, 0xde, 0x81, 0xc9, 0xd6, 0xc0, 0xa5, 0x76, 0x4f, 0xdf, - 0x37, 0x5c, 0xa2, 0x0f, 0x9c, 0x6e, 0x29, 0xc9, 0xfd, 0x2a, 0x08, 0xf2, 0xaa, 0xe1, 0x92, 0x3d, - 0xa7, 0x8b, 0x1e, 0x42, 0xe2, 0xc0, 0xec, 0x92, 0x52, 0xea, 0xb6, 0x72, 0x37, 0xf7, 0x60, 0xce, - 0xff, 0x5d, 0xcd, 0x6a, 0xd9, 0x6d, 0xd2, 0x5e, 0x37, 0xbb, 0x64, 0x77, 0x40, 0xfb, 0x03, 0xba, - 0x1a, 0x2b, 0x29, 0x9b, 0x13, 0x98, 0x4b, 0xa3, 0x15, 0x48, 0xb9, 0xd4, 0x21, 0x46, 0xaf, 0x94, - 0xe6, 0x7a, 0xd7, 0x7c, 0xbd, 0x06, 0x27, 0x8f, 0xa8, 0x48, 0x51, 0xf4, 0x25, 0x64, 0x5c, 0xd2, - 0xe9, 0x11, 0x8b, 0xba, 0x25, 0xe0, 0x6a, 0x37, 0x03, 0x35, 0xc1, 0x88, 0xf8, 0x41, 0x5f, 0x07, - 0x3d, 0x86, 0x54, 0xdf, 0x21, 0x2e, 0xa1, 0xa5, 0x0c, 0xdf, 0xa4, 0xf7, 0x46, 0x9d, 0x35, 0xad, - 0xce, 0xae, 0xf8, 0x9a, 0x75, 0x2e, 0xb5, 0xa9, 0x60, 0x29, 0x8f, 0x1e, 0x41, 0xc6, 0x68, 0x1f, - 0x1b, 0x56, 0x8b, 0xb4, 0x4b, 0x59, 0xfe, 0xcb, 0xa5, 0xb3, 0x74, 0x37, 0x15, 0xec, 0xcb, 0xa2, - 0x2f, 0x20, 0xcf, 0x5e, 0x57, 0xb7, 0xb9, 0x43, 0x6e, 0x29, 0x77, 0x3b, 0x7e, 0xfe, 0x26, 0xe1, - 0xdc, 0x81, 0xff, 0xec, 0xa2, 0xef, 0x41, 0x51, 0xbc, 0xba, 0x6f, 0x20, 0xcf, 0x0d, 0x44, 0xef, - 0x16, 0x2e, 0xb8, 0xa1, 0x95, 0x8b, 0x34, 0x98, 0x94, 0xaf, 0xee, 0xab, 0x17, 0xb8, 0xfa, 0xb9, - 0xbb, 0x86, 0x8b, 0x52, 0xc9, 0x33, 0xf3, 0x19, 0x14, 0xcc, 0x9e, 0xd1, 0x09, 0x5e, 0xa2, 0xc8, - 0x8d, 0x04, 0x08, 0xab, 0x31, 0xae, 0x54, 0xce, 0x9b, 0xc1, 0xc2, 0x45, 0x0f, 0x20, 0x73, 0x42, - 0xf6, 0x0f, 0x6d, 0xfb, 0xc8, 0x2d, 0xa9, 0x5c, 0x6b, 0xd6, 0xd7, 0x7a, 0x26, 0x18, 0x6b, 0xb6, - 0x75, 0x60, 0x76, 0xb0, 0x2f, 0xb7, 0x9a, 0x81, 0x94, 0xf8, 0xa1, 0xd5, 0x2c, 0xa4, 0x65, 0x74, - 0x95, 0xff, 0x95, 0x04, 0xf5, 0x19, 0xd9, 0x1f, 0x8d, 0x26, 0x15, 0xe2, 0x0c, 0x95, 0x22, 0x8e, - 0xd8, 0xe3, 0x58, 0xa8, 0xc4, 0xc6, 0x43, 0x65, 0x14, 0xf1, 0xf1, 0x71, 0xc4, 0x2f, 0x02, 0x32, - 0x4e, 0x0c, 0x93, 0xea, 0x2e, 0x35, 0x1c, 0xaa, 0xbb, 0x66, 0xc7, 0x32, 0xba, 0xa5, 0x3c, 0x17, - 0x53, 0x39, 0xa7, 0xc1, 0x18, 0x0d, 0x4e, 0xf7, 0x71, 0x9f, 0x78, 0x43, 0xdc, 0x27, 0xdf, 0x0c, - 0xf7, 0xa9, 0x2b, 0xe1, 0x3e, 0x7d, 0x05, 0xdc, 0x67, 0xae, 0x80, 0xfb, 0xec, 0x55, 0x71, 0x0f, - 0x57, 0xc3, 0x7d, 0xee, 0x6d, 0xe0, 0xbe, 0xf0, 0x46, 0xb8, 0x2f, 0x5e, 0x05, 0xf7, 0xbf, 0x4b, - 0x40, 0xa9, 0x6e, 0x38, 0xd4, 0x6c, 0x99, 0x7d, 0xc3, 0xa2, 0x97, 0xa8, 0x26, 0x73, 0x90, 0x31, - 0xdb, 0xc4, 0xa2, 0x26, 0x1d, 0xca, 0x7a, 0xe2, 0xaf, 0xd1, 0xfb, 0x90, 0x77, 0x5b, 0x0e, 0x21, - 0x96, 0xee, 0x1e, 0x1a, 0x0e, 0x91, 0x91, 0x90, 0x13, 0xb4, 0x06, 0x23, 0x85, 0x20, 0x93, 0xb8, - 0x10, 0x64, 0x26, 0x22, 0x21, 0x93, 0x7c, 0x0d, 0x64, 0x26, 0xce, 0x81, 0x4c, 0xea, 0xaa, 0x90, - 0x49, 0x5f, 0x0d, 0x32, 0x99, 0xb7, 0x01, 0x99, 0xec, 0x1b, 0x41, 0x06, 0x2e, 0x08, 0x99, 0x10, - 0x50, 0x7e, 0x9a, 0x82, 0x1b, 0x4d, 0xc7, 0x68, 0x1d, 0xbd, 0xc9, 0xc9, 0xe3, 0x11, 0x14, 0x45, - 0xda, 0xa4, 0xcc, 0x82, 0x6e, 0xb6, 0x05, 0x62, 0x56, 0xd5, 0x97, 0xaf, 0x16, 0xc5, 0xe1, 0x82, - 0x9b, 0xae, 0x55, 0x71, 0x78, 0xd5, 0x66, 0x7a, 0x22, 0x9f, 0xfa, 0x7a, 0xf1, 0x40, 0x8f, 0x73, - 0x7c, 0xbd, 0xd0, 0xaa, 0xfd, 0x9f, 0x4a, 0x9d, 0x99, 0x2b, 0xa5, 0xce, 0xd4, 0x15, 0x52, 0x67, - 0xfa, 0x7f, 0x47, 0x86, 0x37, 0x89, 0x83, 0xc9, 0xab, 0xa4, 0xce, 0x7f, 0x28, 0x80, 0x38, 0xe0, - 0x2e, 0x11, 0x08, 0x77, 0x20, 0x33, 0x16, 0x02, 0xb9, 0x97, 0xaf, 0x16, 0xd3, 0x54, 0xa2, 0x58, - 0x3e, 0xb4, 0xd1, 0x7d, 0x09, 0xe0, 0x38, 0xff, 0xae, 0xd7, 0x7d, 0x07, 0xab, 0xa6, 0x43, 0x5a, - 0x34, 0xd8, 0x18, 0x1f, 0xbb, 0x1f, 0x40, 0xe1, 0x84, 0xec, 0xbb, 0x76, 0xeb, 0x88, 0x50, 0x7e, - 0x94, 0x66, 0xd0, 0xcf, 0x6e, 0x4e, 0xe0, 0xbc, 0x4f, 0x66, 0x67, 0xe9, 0xf0, 0xcb, 0x27, 0x2f, - 0xfb, 0xf2, 0xe5, 0x3f, 0xc6, 0x60, 0xea, 0x14, 0x3a, 0xd0, 0x27, 0x90, 0xe5, 0x78, 0xa2, 0xc3, - 0xbe, 0x78, 0xe1, 0xe2, 0x38, 0x10, 0x85, 0x78, 0x73, 0xd8, 0x27, 0x38, 0x73, 0x20, 0x9f, 0x58, - 0xfd, 0x60, 0xcf, 0x7d, 0x83, 0x1e, 0x7a, 0xf5, 0xc3, 0x5b, 0xa3, 0x7b, 0xa0, 0xb6, 0x4d, 0xd7, - 0xd8, 0xef, 0x12, 0xbd, 0x67, 0x58, 0xe6, 0x01, 0x71, 0x45, 0x78, 0x64, 0xf0, 0xa4, 0xa4, 0x6f, - 0x4b, 0x32, 0x9a, 0x87, 0x98, 0xbb, 0x22, 0xf7, 0x69, 0x2a, 0xc0, 0xd0, 0xca, 0x5e, 0xbf, 0x6b, - 0x1b, 0xed, 0xcd, 0x09, 0x1c, 0x73, 0x57, 0xd0, 0x1d, 0x88, 0x77, 0x5a, 0x7d, 0x99, 0x0e, 0x90, - 0x2f, 0xb5, 0xb1, 0x56, 0xf7, 0xc5, 0x98, 0x00, 0x5a, 0x86, 0xa4, 0xf1, 0xcd, 0xc0, 0x21, 0xa7, - 0xea, 0x4a, 0x85, 0x51, 0x57, 0xbb, 0xf6, 0xbe, 0x2f, 0x2f, 0x04, 0xd1, 0x7d, 0x48, 0x19, 0x5d, - 0x73, 0xb7, 0xd1, 0x38, 0xd5, 0x66, 0x54, 0x38, 0xd9, 0x97, 0x97, 0x62, 0xa1, 0xdd, 0xfc, 0x6d, - 0x02, 0xa6, 0x23, 0xb0, 0x8e, 0x9e, 0x40, 0x86, 0xf7, 0x7a, 0x2d, 0xbb, 0x2b, 0xb7, 0xf3, 0xbd, - 0xe8, 0xd8, 0xa8, 0x4b, 0x29, 0xec, 0xcb, 0xa3, 0x0f, 0x61, 0x92, 0x6d, 0x22, 0xc3, 0x9e, 0xde, - 0x77, 0xc8, 0x81, 0xf9, 0x42, 0xee, 0x6d, 0xd1, 0x23, 0xd7, 0x39, 0x15, 0xcd, 0x43, 0xa1, 0xdf, - 0x35, 0x86, 0x5d, 0xd3, 0xa5, 0x02, 0xa9, 0x3c, 0xb1, 0xe2, 0xbc, 0x47, 0xe4, 0x68, 0x5d, 0x04, - 0xc4, 0x7e, 0x58, 0x1f, 0x95, 0xcc, 0x71, 0x49, 0x95, 0x71, 0xea, 0x61, 0xe9, 0x7b, 0xa0, 0x7a, - 0xa1, 0xdd, 0x1e, 0x38, 0x06, 0x0b, 0x12, 0xbe, 0xe3, 0x05, 0xec, 0x85, 0x7c, 0x55, 0x92, 0x59, - 0x16, 0xf0, 0xdd, 0x74, 0x07, 0x07, 0xcc, 0x4d, 0xe0, 0x6f, 0x7a, 0x46, 0x16, 0x68, 0x70, 0x99, - 0xe0, 0x25, 0xc4, 0x3a, 0x12, 0x26, 0x99, 0xf3, 0x60, 0x92, 0xbc, 0x10, 0x4c, 0x52, 0x17, 0x86, - 0x49, 0xfa, 0xf2, 0x30, 0xc9, 0x5e, 0x16, 0x26, 0xbf, 0x88, 0x81, 0x3a, 0x1e, 0xf6, 0x23, 0xc1, - 0xa3, 0x5c, 0x20, 0x78, 0x92, 0xe7, 0xed, 0x4a, 0xec, 0x42, 0xbb, 0x12, 0xbf, 0xf0, 0xae, 0x24, - 0x2e, 0xbf, 0x2b, 0xa9, 0xcb, 0xee, 0xca, 0xdf, 0xe3, 0x90, 0x0b, 0xe5, 0x78, 0xf6, 0xd2, 0x2d, - 0xa3, 0x4f, 0x07, 0x0e, 0xd1, 0x4d, 0x8b, 0x12, 0xe7, 0xd8, 0x10, 0xc1, 0x53, 0xc0, 0x93, 0x92, - 0x5e, 0x93, 0x64, 0x34, 0x03, 0xc9, 0x13, 0xb3, 0x2d, 0xb3, 0x4e, 0x12, 0x8b, 0x05, 0x9a, 0x85, - 0xd4, 0x21, 0x31, 0x3b, 0x87, 0x94, 0xbf, 0x68, 0x12, 0xcb, 0x55, 0x54, 0x44, 0x25, 0x22, 0x23, - 0xaa, 0x72, 0x1a, 0xd3, 0xc9, 0xb1, 0x64, 0xc8, 0x1d, 0x3e, 0x07, 0xcf, 0x0f, 0x21, 0x27, 0xaa, - 0x1a, 0xcb, 0x99, 0x2d, 0x79, 0x20, 0x98, 0x1e, 0x55, 0x5f, 0x63, 0x2c, 0x0c, 0xa6, 0xff, 0x1c, - 0xf9, 0xbd, 0xd3, 0xe7, 0x7d, 0xef, 0xcc, 0x85, 0xbe, 0x77, 0xf6, 0xc2, 0xdf, 0x1b, 0x2e, 0xff, - 0xbd, 0x73, 0x97, 0xfd, 0xde, 0x7f, 0x4d, 0x40, 0xc6, 0xf3, 0x13, 0xcd, 0x03, 0x18, 0xad, 0x16, - 0x71, 0x5d, 0xfd, 0x88, 0x0c, 0x05, 0xfe, 0x57, 0x13, 0xdf, 0xbe, 0x5a, 0x54, 0x70, 0x56, 0xd0, - 0xbf, 0x22, 0x43, 0x74, 0x13, 0x52, 0x2e, 0x69, 0x39, 0x44, 0x4e, 0xbb, 0xa4, 0x80, 0xa4, 0xa1, - 0x7b, 0x50, 0x70, 0x89, 0xeb, 0x9a, 0xb6, 0xa5, 0x53, 0xfb, 0x88, 0x58, 0x22, 0xab, 0x49, 0xa1, - 0xbc, 0x64, 0x35, 0x19, 0x07, 0x2d, 0xc2, 0xa4, 0xe1, 0xba, 0x83, 0x1e, 0xd1, 0x1d, 0xbb, 0x4b, - 0x74, 0xc3, 0xb1, 0x78, 0xcb, 0xee, 0x09, 0x17, 0x04, 0x13, 0xdb, 0x5d, 0x52, 0x71, 0x2c, 0xd4, - 0x80, 0x77, 0xc2, 0xd2, 0xe4, 0x05, 0x25, 0x8e, 0x65, 0x74, 0x59, 0xc1, 0x2f, 0x70, 0xad, 0x9b, - 0x4c, 0xeb, 0xe5, 0xab, 0xc5, 0x99, 0x40, 0x4f, 0x93, 0x42, 0xb5, 0x2a, 0x8e, 0xa2, 0xb6, 0x19, - 0x38, 0x1d, 0xd2, 0x61, 0x09, 0x55, 0xa4, 0x69, 0xb9, 0x62, 0x69, 0x80, 0x58, 0xed, 0xbe, 0x6d, - 0x5a, 0x54, 0xa2, 0xd2, 0x5f, 0x33, 0x9d, 0xfd, 0x01, 0xab, 0xfb, 0x72, 0xaa, 0x26, 0x57, 0xe8, - 0x2e, 0xa8, 0x07, 0xb6, 0xd3, 0x22, 0x3a, 0x4b, 0x16, 0xba, 0x4b, 0x87, 0x72, 0xb4, 0x96, 0xc1, - 0x45, 0x4e, 0xaf, 0x1b, 0xf4, 0xb0, 0xc1, 0xa8, 0xe8, 0x73, 0xc8, 0xf4, 0x08, 0x35, 0xda, 0x06, - 0x35, 0x64, 0xaf, 0x73, 0xeb, 0x14, 0x66, 0x96, 0xb6, 0xa5, 0x84, 0x66, 0x51, 0x67, 0x88, 0x7d, - 0x05, 0x54, 0x82, 0x34, 0x35, 0x3a, 0x1d, 0xd3, 0xea, 0x70, 0xbc, 0x65, 0xb1, 0xb7, 0x44, 0xf7, - 0x61, 0xba, 0x65, 0x5b, 0x94, 0xd7, 0x09, 0xd3, 0xe5, 0xbd, 0x04, 0x7b, 0xb3, 0x2c, 0x97, 0x42, - 0x92, 0x55, 0x0d, 0x38, 0x68, 0x01, 0x92, 0x7d, 0xc7, 0x7e, 0x31, 0x94, 0x40, 0x0b, 0x0e, 0x79, - 0x75, 0x46, 0x95, 0xe7, 0x15, 0x21, 0x32, 0xf7, 0x39, 0x14, 0x46, 0x3c, 0x42, 0x2a, 0xc4, 0x7d, - 0x90, 0x60, 0xf6, 0xc8, 0xe2, 0xff, 0xd8, 0xe8, 0x0e, 0x88, 0xac, 0x8c, 0x62, 0xf1, 0x24, 0xf6, - 0x58, 0x29, 0x9f, 0x40, 0xd6, 0x47, 0x39, 0xba, 0x03, 0xb9, 0x96, 0x43, 0x78, 0x47, 0x6b, 0x74, - 0xdd, 0x11, 0x94, 0x85, 0x19, 0xa1, 0x7d, 0x8e, 0x8d, 0xec, 0xb3, 0xef, 0x75, 0xfc, 0xb5, 0x5e, - 0x97, 0xbf, 0x55, 0x60, 0x72, 0x2c, 0x6a, 0xd0, 0x87, 0x90, 0x37, 0x5a, 0x2d, 0x7b, 0x60, 0xd1, - 0xd0, 0x51, 0xd2, 0x73, 0x40, 0x72, 0x78, 0xdd, 0xfd, 0x00, 0xbc, 0x25, 0x0f, 0x87, 0x30, 0xda, - 0x41, 0x32, 0x58, 0x3c, 0x7c, 0x00, 0x45, 0xb6, 0xb7, 0x86, 0x69, 0x11, 0x27, 0x5c, 0xf2, 0x0b, - 0x3e, 0x95, 0x59, 0x2b, 0xff, 0x5a, 0x81, 0x7c, 0x38, 0x1a, 0xdf, 0x46, 0xb0, 0xbd, 0x45, 0xf8, - 0x96, 0x9f, 0x41, 0x2e, 0xb4, 0x81, 0x11, 0x23, 0xba, 0x39, 0xc8, 0x0c, 0x5c, 0x16, 0x38, 0x3d, - 0xef, 0x0b, 0xfb, 0x6b, 0xc6, 0xeb, 0x1b, 0xae, 0x7b, 0x62, 0x3b, 0xb2, 0x93, 0xc4, 0xfe, 0xba, - 0xfc, 0x0c, 0xf2, 0xe1, 0xc6, 0x05, 0xad, 0x9c, 0x3a, 0x86, 0xbd, 0x33, 0xd6, 0xe1, 0x44, 0x9c, - 0xbf, 0x10, 0x24, 0x06, 0x4e, 0xd7, 0x2d, 0xc5, 0x6e, 0xc7, 0xef, 0x66, 0x31, 0x7f, 0x2e, 0xff, - 0x21, 0x0e, 0x93, 0x63, 0xfd, 0x58, 0x50, 0x83, 0x94, 0xe8, 0x1a, 0x14, 0x1b, 0xa9, 0x41, 0x33, - 0x90, 0x6c, 0x93, 0x3e, 0x3d, 0x94, 0xa5, 0x49, 0x2c, 0xd0, 0x4d, 0xc8, 0x1e, 0x38, 0x46, 0x8f, - 0x38, 0x06, 0x15, 0x35, 0x37, 0x89, 0x03, 0x02, 0xab, 0x25, 0xa2, 0xe5, 0x16, 0xb5, 0x24, 0x39, - 0x56, 0x4b, 0xf8, 0xd0, 0x5e, 0xd6, 0x12, 0xc3, 0x7f, 0x66, 0xc7, 0x42, 0xa1, 0xb5, 0x6f, 0x52, - 0x6e, 0x37, 0xc5, 0xed, 0x8a, 0xae, 0x7c, 0x55, 0xd0, 0x02, 0xa1, 0xaf, 0x07, 0x46, 0xd7, 0xa4, - 0x43, 0x9e, 0x3b, 0x3d, 0xa1, 0x1f, 0x09, 0x1a, 0xab, 0x9b, 0x42, 0xe8, 0xc0, 0x61, 0x8d, 0x91, - 0xd5, 0x1a, 0xf2, 0xa2, 0x94, 0xc4, 0x62, 0x12, 0xb0, 0xee, 0x51, 0x99, 0xa3, 0xa2, 0xc7, 0x17, - 0x8e, 0x66, 0xc6, 0x1c, 0x7d, 0xca, 0x78, 0xd2, 0xd1, 0x63, 0xff, 0x99, 0xf9, 0x20, 0xb4, 0x3c, - 0x47, 0xb3, 0xc2, 0x07, 0x4e, 0x0c, 0x39, 0x2a, 0x84, 0x3c, 0x47, 0xf3, 0x21, 0x21, 0xcf, 0xd1, - 0x45, 0x40, 0x47, 0x64, 0xa8, 0xf3, 0x9d, 0x0b, 0xce, 0x0e, 0x2c, 0xd5, 0x28, 0x58, 0x3d, 0x22, - 0xc3, 0x75, 0xc6, 0xf0, 0x0e, 0x0f, 0xe5, 0xe7, 0x30, 0xbd, 0xd7, 0x6f, 0x1b, 0x94, 0x6c, 0xf1, - 0xbb, 0x13, 0xaf, 0xe9, 0xbb, 0x07, 0x59, 0x71, 0xb7, 0xc3, 0xf2, 0xbc, 0x88, 0x91, 0xfc, 0xcb, - 0x57, 0x8b, 0x19, 0x41, 0xac, 0x55, 0xb1, 0xf7, 0xd4, 0x3e, 0xeb, 0x16, 0xa6, 0xfc, 0x4b, 0xc5, - 0x33, 0x2d, 0xd0, 0xf5, 0x06, 0xa6, 0xef, 0xc0, 0xa4, 0xd1, 0x6e, 0xcb, 0x9e, 0x58, 0x0f, 0x01, - 0xb1, 0x60, 0xb4, 0xdb, 0x02, 0xd6, 0x7b, 0x4e, 0xd7, 0x65, 0xaf, 0xec, 0x90, 0x9e, 0x7d, 0x4c, - 0x46, 0x44, 0xe3, 0x5c, 0x54, 0x15, 0x9c, 0x40, 0xba, 0xec, 0xc2, 0xd4, 0x96, 0xe9, 0x5e, 0x66, - 0x34, 0x38, 0xe2, 0x72, 0xec, 0x75, 0xbb, 0x61, 0xb4, 0xa8, 0x79, 0xec, 0xcd, 0x08, 0xe5, 0xaa, - 0xfc, 0x7d, 0x40, 0xe1, 0x1f, 0x75, 0xfb, 0xb6, 0xe5, 0x32, 0xc3, 0x49, 0x93, 0x92, 0x1e, 0xcb, - 0xc6, 0xac, 0x1c, 0x05, 0x28, 0x11, 0x72, 0x35, 0xeb, 0xc0, 0xc6, 0x42, 0xa2, 0xfc, 0x25, 0x4c, - 0x35, 0xa8, 0xdd, 0x1f, 0xf5, 0xfa, 0xe2, 0x7b, 0x59, 0xfe, 0x67, 0x16, 0x20, 0xb0, 0x7a, 0x99, - 0xaf, 0x30, 0x0f, 0x69, 0xbe, 0x35, 0xfe, 0xbb, 0xc3, 0xcb, 0x57, 0x8b, 0x29, 0x46, 0xaa, 0x55, - 0xb1, 0xf8, 0xdb, 0x1e, 0xdd, 0xbf, 0xc2, 0xd8, 0xfe, 0x3d, 0x81, 0x9c, 0x6b, 0x0f, 0x58, 0x8d, - 0xe6, 0x3d, 0xf5, 0x1c, 0x0f, 0x89, 0xeb, 0x63, 0x2f, 0xdb, 0xe0, 0x12, 0xbc, 0xa9, 0x06, 0xd7, - 0x7f, 0x46, 0x1f, 0x43, 0xca, 0xa5, 0x06, 0x1d, 0xb8, 0x7c, 0x43, 0x8b, 0xa1, 0x33, 0x96, 0x54, - 0xe3, 0x4c, 0x2c, 0x85, 0xd0, 0xbb, 0x00, 0xfc, 0x32, 0x82, 0xb4, 0x75, 0x83, 0x72, 0xd4, 0xc7, - 0x71, 0x56, 0x52, 0x2a, 0x14, 0x5d, 0xe7, 0x19, 0x5a, 0x30, 0x73, 0x9c, 0x99, 0xe6, 0xeb, 0x0a, - 0xbf, 0x35, 0x1c, 0x70, 0xb8, 0x72, 0x26, 0x12, 0x9a, 0x92, 0x52, 0xa1, 0xac, 0xfe, 0xb7, 0x09, - 0x35, 0xcc, 0xae, 0x5b, 0xba, 0x26, 0xea, 0xbf, 0x5c, 0xb2, 0x6c, 0x46, 0x1c, 0xc7, 0x76, 0x64, - 0xc5, 0x17, 0x0b, 0x66, 0x8e, 0x3f, 0xf0, 0x34, 0x50, 0x9a, 0x15, 0xe9, 0x8c, 0x53, 0x58, 0xc0, - 0xa3, 0x2d, 0x28, 0xf2, 0xfd, 0x6a, 0x79, 0xd3, 0x47, 0xd9, 0x65, 0xcc, 0xfb, 0xaf, 0x77, 0xf6, - 0xad, 0xe8, 0xe6, 0x04, 0x2e, 0x38, 0x61, 0x2e, 0xfa, 0x18, 0xe2, 0x27, 0x64, 0xbf, 0x54, 0x1c, - 0x9b, 0xae, 0x8c, 0x5f, 0x00, 0xb1, 0x93, 0xee, 0x09, 0xd9, 0x47, 0x1a, 0xe4, 0xfa, 0xc1, 0x8c, - 0xbc, 0x34, 0xcd, 0xd5, 0xde, 0x0f, 0x0a, 0xfa, 0x19, 0xf3, 0xf3, 0xcd, 0x09, 0x1c, 0xd6, 0x43, - 0xbb, 0x30, 0x29, 0x86, 0x3f, 0xc1, 0x4b, 0x88, 0x86, 0xf4, 0xff, 0x7c, 0x53, 0xe7, 0x4c, 0x58, - 0x37, 0x27, 0x70, 0x91, 0x8e, 0xb0, 0xd1, 0x0a, 0x24, 0x39, 0x45, 0xb6, 0x4f, 0x37, 0x46, 0xcd, - 0x8c, 0x6b, 0x0b, 0x59, 0xf4, 0xc9, 0xd8, 0xc5, 0xe8, 0x78, 0x55, 0x63, 0x70, 0x67, 0xa1, 0xc7, - 0x27, 0x95, 0x8a, 0x3f, 0xe7, 0xfc, 0x48, 0x4e, 0xa4, 0xc6, 0x9b, 0x07, 0xd6, 0xce, 0x30, 0x15, - 0x29, 0x2e, 0xa6, 0x51, 0x9f, 0x86, 0x86, 0xa2, 0xf9, 0xf1, 0x59, 0xaa, 0x64, 0x84, 0x94, 0x82, - 0x69, 0xe8, 0x13, 0x7f, 0xb8, 0xe8, 0x10, 0x77, 0xd0, 0xa5, 0xde, 0x88, 0x6e, 0x3a, 0xc2, 0x49, - 0x6f, 0xb4, 0x88, 0x85, 0x24, 0x7a, 0x28, 0xe7, 0x9a, 0x9e, 0xa6, 0xb8, 0x0f, 0x3c, 0xed, 0xa9, - 0x18, 0x67, 0x7a, 0x5a, 0x5f, 0x06, 0x03, 0x49, 0x4f, 0x71, 0x6a, 0x7c, 0x9e, 0x19, 0xf2, 0xd8, - 0x9f, 0x44, 0x7a, 0xfa, 0x8f, 0xbd, 0x49, 0xa4, 0xa7, 0x3d, 0x33, 0xe6, 0x30, 0xef, 0xda, 0x84, - 0xae, 0x18, 0x44, 0x7a, 0x9a, 0x1f, 0xc1, 0x94, 0xd7, 0xaf, 0xe9, 0x5d, 0xbb, 0x25, 0x06, 0x26, - 0xef, 0x88, 0xe1, 0x8a, 0xc7, 0xd8, 0x92, 0x74, 0xb4, 0x04, 0xd3, 0xfb, 0x46, 0xeb, 0x68, 0xd0, - 0xd7, 0x5d, 0x6a, 0x3b, 0xec, 0xf7, 0x06, 0x2e, 0x69, 0x97, 0xae, 0xf3, 0xa4, 0x39, 0x25, 0x58, - 0x0d, 0xc1, 0xd9, 0x73, 0x49, 0x1b, 0xdd, 0x82, 0x9c, 0x43, 0xa8, 0x33, 0xd4, 0xf9, 0xf9, 0xaf, - 0x74, 0x83, 0xc7, 0x13, 0x70, 0xd2, 0x1a, 0xa3, 0xac, 0x66, 0x21, 0xed, 0x08, 0x68, 0xb0, 0x2e, - 0x4b, 0x38, 0x5f, 0xfe, 0x02, 0x8a, 0xa3, 0x20, 0x40, 0x1f, 0x42, 0xc2, 0xb4, 0x0e, 0xec, 0x53, - 0x09, 0x37, 0xf4, 0x19, 0xb8, 0xc0, 0x93, 0x58, 0x49, 0x29, 0x7f, 0x17, 0x03, 0x08, 0x18, 0xd1, - 0xd7, 0xa7, 0xa1, 0x6c, 0x13, 0x3b, 0x2f, 0xdb, 0xc4, 0x47, 0xb3, 0xcd, 0x1c, 0x64, 0x46, 0x86, - 0x4a, 0x71, 0xec, 0xaf, 0xd1, 0x03, 0x3f, 0xe5, 0x89, 0x53, 0xce, 0x5c, 0x84, 0x97, 0x4b, 0x63, - 0x79, 0xcf, 0x4f, 0x42, 0xa9, 0x70, 0x12, 0x2a, 0x43, 0xa1, 0x6b, 0xb8, 0x0c, 0x09, 0x6c, 0xeb, - 0x0c, 0xd1, 0x47, 0xc7, 0x71, 0x8e, 0x11, 0x31, 0xa3, 0x89, 0xc4, 0xc6, 0xd8, 0x26, 0x11, 0xf3, - 0xfe, 0x02, 0xf6, 0x96, 0xe5, 0x25, 0x48, 0x89, 0x5f, 0x41, 0x00, 0xa9, 0xca, 0x5a, 0xb3, 0xf6, - 0x54, 0x53, 0x27, 0x50, 0x1e, 0x32, 0xeb, 0xb5, 0x9d, 0x5a, 0x63, 0x53, 0xab, 0xaa, 0x0a, 0xe3, - 0xac, 0x57, 0x6a, 0x5b, 0x5a, 0x55, 0x8d, 0x95, 0xbf, 0x53, 0x20, 0xe3, 0x81, 0xd2, 0x9b, 0xe8, - 0x84, 0xeb, 0xa9, 0xb7, 0x7e, 0x4b, 0xdb, 0x96, 0x1a, 0xdb, 0x36, 0x04, 0x09, 0xd7, 0xfc, 0x86, - 0xc8, 0xed, 0xe4, 0xcf, 0x4c, 0xde, 0x87, 0xa2, 0x38, 0x77, 0xfb, 0xeb, 0xf2, 0x9f, 0x63, 0x90, - 0x0f, 0x87, 0xc2, 0xe9, 0x19, 0xa2, 0x72, 0xe1, 0x19, 0x62, 0xe6, 0x8c, 0x19, 0x62, 0xd8, 0xdf, - 0xd8, 0x19, 0xfe, 0xc6, 0x43, 0xfe, 0x7e, 0x04, 0x53, 0xbe, 0x61, 0xdf, 0x71, 0xd1, 0x4a, 0xa8, - 0x1e, 0xc3, 0x8f, 0xa1, 0x87, 0x30, 0x3b, 0xea, 0x8a, 0xaf, 0x21, 0x2a, 0xd1, 0x4c, 0xd8, 0x1d, - 0x5f, 0x6b, 0x1e, 0x0a, 0x5e, 0x82, 0x10, 0xb1, 0x94, 0xe4, 0xbf, 0x9f, 0x97, 0x44, 0x1e, 0x4d, - 0x63, 0x5f, 0x28, 0x75, 0xde, 0x17, 0x4a, 0x8f, 0x7c, 0xa1, 0xf2, 0xcf, 0x14, 0x80, 0x20, 0x45, - 0x5c, 0x7c, 0xdc, 0x74, 0x2b, 0x98, 0x15, 0x31, 0xa7, 0x14, 0x6e, 0xd5, 0x1b, 0x0b, 0x9d, 0x76, - 0xe9, 0x12, 0xa0, 0x29, 0xbf, 0x8c, 0xc1, 0xb5, 0xca, 0x80, 0xda, 0xa7, 0xea, 0x5a, 0xe8, 0xb2, - 0x4a, 0xb9, 0xc2, 0xa5, 0x6d, 0xec, 0x0a, 0x97, 0xb6, 0xf1, 0xcb, 0x5d, 0x56, 0x45, 0x5c, 0x37, - 0x25, 0x2e, 0x7f, 0xdd, 0x14, 0xbe, 0xf5, 0xf9, 0x79, 0x0c, 0x26, 0xd9, 0xe6, 0x84, 0x4a, 0xec, - 0x7f, 0xfd, 0x34, 0x76, 0x61, 0x55, 0x76, 0xb8, 0xc1, 0x45, 0x0f, 0x9a, 0x01, 0xb5, 0xaa, 0xad, - 0x57, 0xf6, 0xb6, 0x9a, 0xfa, 0x7a, 0x6d, 0x4b, 0x6b, 0xfe, 0xb8, 0xce, 0x92, 0x61, 0x1a, 0xe2, - 0xdb, 0xf5, 0x87, 0xaa, 0xc2, 0x1e, 0x76, 0x37, 0x36, 0xd4, 0x98, 0xa0, 0xac, 0xa8, 0xf1, 0x85, - 0x1d, 0xb8, 0x16, 0x79, 0xbb, 0x81, 0xe6, 0xe1, 0x96, 0x67, 0xa9, 0xa1, 0x6d, 0x6c, 0x6b, 0x3b, - 0x4d, 0xad, 0xca, 0x6d, 0xea, 0x75, 0xbc, 0xdb, 0xdc, 0x5d, 0xdb, 0xdd, 0x52, 0x27, 0x90, 0x0a, - 0xf9, 0xcd, 0xad, 0x46, 0x40, 0x51, 0x16, 0xee, 0x8f, 0xdd, 0xae, 0xc8, 0x19, 0x6b, 0x16, 0x92, - 0xb5, 0x9d, 0xaa, 0xf6, 0x5c, 0x9d, 0x40, 0x05, 0xc8, 0x36, 0x6b, 0xdb, 0x5a, 0xa3, 0x59, 0xd9, - 0xae, 0xab, 0xca, 0xc2, 0x01, 0x4c, 0x8e, 0x0d, 0x68, 0xd1, 0x2c, 0xa0, 0xda, 0x76, 0x65, 0x43, - 0xd3, 0x1b, 0x7b, 0xeb, 0xeb, 0xb5, 0xe7, 0xba, 0xa7, 0x39, 0x07, 0xb3, 0x23, 0xf4, 0x90, 0x19, - 0x74, 0x0b, 0x6e, 0x8c, 0xf0, 0x76, 0x76, 0x77, 0x34, 0x7d, 0xf7, 0xa9, 0x86, 0x9f, 0xe1, 0x5a, - 0x53, 0x53, 0x63, 0x0b, 0x9f, 0x79, 0x45, 0xd6, 0x7f, 0xc3, 0xd0, 0x5e, 0x85, 0x5e, 0x29, 0x03, - 0x09, 0xdc, 0xe4, 0x26, 0xd3, 0x10, 0x6f, 0xe0, 0xa6, 0x1a, 0x5b, 0xd8, 0x83, 0x5c, 0xe8, 0xbf, - 0xed, 0x10, 0x82, 0xa2, 0xa7, 0xb7, 0x5d, 0x7b, 0x5e, 0xdb, 0xd9, 0x50, 0x27, 0x98, 0xcb, 0xd5, - 0xbd, 0xca, 0x96, 0xbe, 0xb6, 0x59, 0xd9, 0xd9, 0xd1, 0xb6, 0xf4, 0xca, 0x86, 0xb6, 0xd3, 0x54, - 0x15, 0xe6, 0xf2, 0x28, 0x7d, 0xab, 0xa9, 0xe1, 0x9d, 0x0a, 0xf7, 0xe8, 0x4f, 0x0a, 0x5c, 0x8b, - 0x0c, 0x60, 0xbe, 0xad, 0x0f, 0x1e, 0x3d, 0xd4, 0x3f, 0x7d, 0xb0, 0x5c, 0xd7, 0x57, 0x96, 0xe5, - 0x46, 0xfb, 0x94, 0x47, 0xcb, 0xaa, 0x82, 0xa6, 0xa0, 0xc0, 0x29, 0xff, 0xbf, 0xfc, 0x58, 0x08, - 0xc5, 0xc6, 0x48, 0x8f, 0x96, 0xd5, 0x38, 0xba, 0x0e, 0xd7, 0xea, 0xbb, 0xb8, 0x89, 0x2b, 0xb5, - 0xa6, 0x3e, 0x62, 0x32, 0x71, 0x06, 0xeb, 0xd1, 0xb2, 0x9a, 0x64, 0x5e, 0x8f, 0xb2, 0xfc, 0x1f, - 0x49, 0x9d, 0xc5, 0x7b, 0xb4, 0xac, 0xa6, 0x17, 0x7e, 0xa3, 0x40, 0x3e, 0xdc, 0xef, 0xa0, 0x69, - 0x98, 0xd4, 0x36, 0xb0, 0xd6, 0x68, 0xe8, 0x8d, 0x66, 0x05, 0x37, 0xc5, 0x5e, 0x4d, 0x41, 0x41, - 0x12, 0x65, 0xb5, 0x56, 0x42, 0x24, 0x6d, 0xa7, 0xca, 0xa4, 0x62, 0x21, 0xd5, 0xb5, 0xdd, 0xed, - 0xfa, 0x96, 0xd6, 0xd4, 0xd4, 0x78, 0x48, 0x4e, 0x96, 0xf3, 0x04, 0xfb, 0x1a, 0x9e, 0xb5, 0xd5, - 0x5d, 0xdc, 0xd4, 0xaa, 0x6a, 0x12, 0x95, 0x60, 0x46, 0xd2, 0xb6, 0x6a, 0xdb, 0xb5, 0xa6, 0x8e, - 0xb5, 0xca, 0x1a, 0x3b, 0x08, 0xa4, 0x16, 0x7e, 0x08, 0xea, 0x78, 0x1f, 0xc7, 0xde, 0xc8, 0x73, - 0x72, 0x77, 0x0f, 0xaf, 0x69, 0x3a, 0x8b, 0x1a, 0xfd, 0x99, 0xb6, 0x2a, 0x20, 0x17, 0xc1, 0x6b, - 0x54, 0xbf, 0x52, 0x95, 0x07, 0xbf, 0x4a, 0x42, 0x4a, 0xa6, 0xa2, 0x26, 0x94, 0xf8, 0xff, 0x90, - 0x45, 0x74, 0x43, 0xe8, 0x22, 0xbd, 0xd2, 0x5c, 0x54, 0x4f, 0x8d, 0x7e, 0xc0, 0x20, 0x6b, 0x38, - 0xd4, 0x6f, 0x90, 0xd0, 0xd9, 0x4d, 0x53, 0xb4, 0x85, 0x3a, 0xcc, 0x72, 0x0b, 0xa7, 0x6b, 0xca, - 0xeb, 0xfb, 0xa8, 0x68, 0x8b, 0x4f, 0xe1, 0x3a, 0xb7, 0x18, 0xd5, 0x32, 0xa1, 0x0b, 0x75, 0x54, - 0xd1, 0x76, 0xab, 0xa0, 0x06, 0x76, 0xa5, 0xb9, 0xf3, 0x3a, 0xab, 0x68, 0x2b, 0x15, 0xc8, 0x87, - 0xe7, 0x44, 0x28, 0xa8, 0x37, 0x11, 0xe3, 0xa3, 0xd7, 0x98, 0x10, 0xd9, 0xe2, 0x94, 0x89, 0x91, - 0x31, 0x51, 0xb4, 0x09, 0x0d, 0x20, 0x98, 0xa2, 0xa0, 0xa0, 0x6a, 0x9e, 0x9a, 0xe7, 0xcc, 0xdd, - 0x88, 0xe4, 0xc9, 0xb1, 0xcb, 0x17, 0xec, 0x58, 0xef, 0xcd, 0x52, 0x50, 0xf8, 0x78, 0x3d, 0x36, - 0x60, 0x89, 0xf4, 0x62, 0x75, 0xfd, 0x27, 0xf3, 0x1d, 0x93, 0x1e, 0x0e, 0xf6, 0x97, 0x5a, 0x76, - 0xef, 0xbe, 0x14, 0xb8, 0xef, 0xcd, 0x4c, 0x3d, 0xc2, 0xef, 0x63, 0x85, 0x2d, 0xf3, 0x98, 0x7c, - 0x25, 0x26, 0xe4, 0xd4, 0xfe, 0x5b, 0xac, 0x28, 0xd7, 0x4f, 0x9e, 0x70, 0xc2, 0x7e, 0x8a, 0xab, - 0xac, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xed, 0x05, 0x5a, 0x3a, 0x4f, 0x2d, 0x00, 0x00, + // 4371 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0xdc, 0x58, + 0x72, 0x62, 0x7f, 0x77, 0xf5, 0x87, 0xa8, 0x27, 0x59, 0xd3, 0x96, 0x3d, 0x63, 0x6f, 0x3b, 0xe3, + 0x0f, 0x8d, 0x22, 0x6b, 0x25, 0xaf, 0xc7, 0xf1, 0x66, 0x66, 0xd1, 0x92, 0x28, 0xab, 0xd7, 0x92, + 0x5a, 0x61, 0xb7, 0xc6, 0xb3, 0xf9, 0x22, 0x28, 0xf2, 0x49, 0x22, 0xd4, 0x4d, 0xf6, 0x92, 0x6c, + 0xdb, 0xda, 0x5f, 0x30, 0xc9, 0x21, 0x08, 0x92, 0x43, 0x00, 0x03, 0x41, 0xee, 0x9b, 0x3d, 0x05, + 0x01, 0x72, 0x0d, 0x90, 0x5b, 0x90, 0x60, 0x0f, 0x39, 0x04, 0xb9, 0xe6, 0x18, 0x18, 0x08, 0x82, + 0x9c, 0x72, 0x08, 0x10, 0xbc, 0x0f, 0x92, 0x8f, 0x14, 0xd5, 0xd3, 0x92, 0x9c, 0xc9, 0x21, 0x7b, + 0x52, 0xbf, 0xaa, 0x7a, 0x8f, 0xf5, 0xea, 0x55, 0xd5, 0xab, 0xaa, 0x57, 0x82, 0xb9, 0xbe, 0xf5, + 0x1a, 0x9f, 0x5a, 0xbe, 0x86, 0x8f, 0x5d, 0xec, 0x79, 0xcb, 0x43, 0xd7, 0xf1, 0x1d, 0x54, 0xe4, + 0xd0, 0x85, 0x10, 0x3d, 0x70, 0x4c, 0xdc, 0xe7, 0xe8, 0x85, 0xb9, 0xbe, 0x73, 0x7c, 0x8c, 0xdd, + 0xc7, 0xce, 0xd0, 0xb7, 0x1c, 0x9b, 0x43, 0x9b, 0xff, 0x9c, 0x05, 0xd4, 0xf5, 0x75, 0xd7, 0x57, + 0xe8, 0x52, 0x2a, 0xfe, 0xe9, 0x08, 0x7b, 0x3e, 0xba, 0x05, 0x65, 0xd7, 0x71, 0x06, 0x9a, 0xad, + 0x0f, 0x70, 0x43, 0xba, 0x2b, 0x3d, 0x2c, 0xab, 0x25, 0x02, 0xd8, 0xd3, 0x07, 0x18, 0xfd, 0x00, + 0x4a, 0x3e, 0x1e, 0x0c, 0xfb, 0xba, 0x8f, 0x1b, 0x99, 0xbb, 0xd2, 0xc3, 0xca, 0xea, 0x47, 0xcb, + 0xfc, 0x93, 0xcb, 0x3d, 0x8e, 0xe8, 0x3a, 0x23, 0xd7, 0xc0, 0xdb, 0x53, 0x6a, 0x48, 0x8a, 0xee, + 0x43, 0xf6, 0x0d, 0x3e, 0x6c, 0x64, 0xe9, 0x0c, 0x14, 0xce, 0x78, 0x85, 0x0f, 0x43, 0x62, 0x42, + 0x80, 0x96, 0x20, 0x3f, 0xc0, 0xa6, 0xa5, 0x37, 0x72, 0x94, 0x72, 0x2e, 0xa4, 0xdc, 0x25, 0xd0, + 0x90, 0x96, 0x11, 0xa1, 0x67, 0x50, 0x18, 0xba, 0xd8, 0xc3, 0x7e, 0x23, 0x7f, 0x57, 0x7a, 0x58, + 0x5f, 0xfd, 0x24, 0x24, 0x57, 0x6c, 0xc3, 0x31, 0x2d, 0xfb, 0xb8, 0xc3, 0x36, 0xbc, 0x4f, 0xa9, + 0xb6, 0x25, 0x95, 0xd3, 0xa3, 0xa7, 0x50, 0xd2, 0xcd, 0xd7, 0xba, 0x6d, 0x60, 0xb3, 0x51, 0xa0, + 0x9f, 0x6a, 0x5c, 0x34, 0x77, 0x5b, 0x52, 0x43, 0x5a, 0xf4, 0x08, 0x8a, 0xce, 0xc8, 0x1f, 0x8e, + 0x7c, 0xaf, 0x51, 0xbc, 0x9b, 0x7d, 0x58, 0x59, 0x9d, 0x0e, 0xa7, 0x75, 0x28, 0x5c, 0x0d, 0xf0, + 0x68, 0x05, 0x8a, 0x9e, 0xef, 0xb8, 0xfa, 0x31, 0x6e, 0x94, 0xe8, 0x17, 0xe6, 0x43, 0xd2, 0x2e, + 0x83, 0x6f, 0x38, 0xf6, 0x91, 0x75, 0xac, 0x06, 0x64, 0x68, 0x15, 0x4a, 0x6f, 0xf0, 0xe1, 0x89, + 0xe3, 0x9c, 0x7a, 0x8d, 0x32, 0x5d, 0x7d, 0x5e, 0x94, 0x14, 0x41, 0xf0, 0x29, 0x21, 0xdd, 0x7a, + 0x09, 0x0a, 0x1e, 0x95, 0xca, 0x3a, 0x40, 0x09, 0x73, 0xce, 0x9b, 0x7f, 0x24, 0x41, 0x3d, 0x7e, + 0x1a, 0x68, 0x1e, 0x0a, 0x7d, 0xfd, 0xcc, 0x19, 0xf9, 0xfc, 0x48, 0xf9, 0x08, 0x7d, 0x0c, 0xa0, + 0x8f, 0x4c, 0xcb, 0xd1, 0x1c, 0xbb, 0x7f, 0x46, 0x8f, 0xb4, 0xa4, 0x96, 0x29, 0xa4, 0x63, 0xf7, + 0xcf, 0x08, 0xfa, 0xb5, 0x65, 0x62, 0x8e, 0xce, 0x32, 0x34, 0x85, 0x50, 0xf4, 0x7d, 0x98, 0x36, + 0x46, 0x9e, 0xef, 0x0c, 0xb4, 0x43, 0xdd, 0xc3, 0xda, 0xc8, 0xed, 0xd3, 0x93, 0x2b, 0xab, 0x35, + 0x06, 0x5e, 0xd7, 0x3d, 0x7c, 0xe0, 0xf6, 0x9b, 0x7f, 0x20, 0x41, 0x39, 0x3c, 0x6c, 0x24, 0x43, + 0x96, 0x50, 0x32, 0x46, 0xc8, 0xcf, 0x6b, 0x72, 0xb1, 0x04, 0x48, 0x7f, 0xa3, 0x5b, 0xbe, 0xe6, + 0x11, 0x6d, 0xd6, 0x3c, 0xeb, 0xd8, 0xd6, 0x19, 0x23, 0x25, 0x55, 0xa6, 0x18, 0xaa, 0xe6, 0x5d, + 0x0a, 0x6f, 0xfe, 0xbb, 0x04, 0x15, 0x41, 0x9d, 0xd0, 0x33, 0xa8, 0xb3, 0xc5, 0x7d, 0x57, 0x37, + 0x4e, 0x35, 0xcb, 0x64, 0x8c, 0xad, 0xcb, 0xef, 0xde, 0x2f, 0x55, 0x29, 0xa6, 0x47, 0x10, 0xed, + 0xcd, 0xed, 0x29, 0x55, 0x1c, 0x9b, 0x68, 0x1b, 0x66, 0x86, 0xba, 0xeb, 0x5b, 0x86, 0x35, 0xd4, + 0x6d, 0x5f, 0xa3, 0x38, 0x6e, 0x15, 0x37, 0xc3, 0x93, 0xdb, 0x8f, 0x28, 0xbe, 0x22, 0x04, 0xdb, + 0x53, 0xaa, 0x3c, 0x4c, 0xc0, 0xd0, 0x22, 0xe4, 0xe9, 0x6e, 0xb9, 0x85, 0x44, 0x7a, 0xdf, 0x22, + 0x50, 0x7e, 0xea, 0x8c, 0x04, 0x3d, 0x80, 0x9c, 0xa9, 0xfb, 0x81, 0x89, 0xcc, 0x86, 0xa4, 0x9b, + 0xba, 0xaf, 0x73, 0x4a, 0x4a, 0xb0, 0x5e, 0x84, 0x3c, 0x65, 0xa9, 0xf9, 0xfb, 0x20, 0x27, 0xb9, + 0x40, 0x0b, 0x50, 0xb2, 0x4c, 0x6c, 0xfb, 0x96, 0x7f, 0x16, 0x18, 0x79, 0x30, 0x46, 0xcb, 0x30, + 0x3b, 0x74, 0xf1, 0x11, 0x76, 0x35, 0xcf, 0x70, 0x31, 0xb6, 0x35, 0xef, 0x44, 0x77, 0x31, 0x3f, + 0x96, 0x19, 0x86, 0xea, 0x52, 0x4c, 0x97, 0x20, 0x9a, 0xcf, 0xa1, 0x22, 0xf0, 0x89, 0x3e, 0x83, + 0x82, 0xeb, 0x8c, 0x7c, 0xec, 0x35, 0x24, 0xaa, 0xc5, 0xb3, 0xf1, 0xdd, 0xa8, 0x04, 0xa7, 0x72, + 0x92, 0xe6, 0x7f, 0x48, 0x00, 0x11, 0x18, 0x3d, 0x84, 0x52, 0xe2, 0x18, 0x2a, 0xef, 0xde, 0x2f, + 0x15, 0xfd, 0xf0, 0x04, 0xf8, 0x4f, 0x13, 0xad, 0xc1, 0x9c, 0x28, 0xfc, 0x70, 0x33, 0x84, 0xcb, + 0xf2, 0xf6, 0x94, 0x3a, 0x2b, 0x60, 0xdb, 0xc1, 0xce, 0x7e, 0x0c, 0xa2, 0xec, 0xb5, 0x53, 0xcb, + 0x36, 0xa9, 0xc8, 0xeb, 0xab, 0x1f, 0xa7, 0x1d, 0x58, 0xdb, 0x3e, 0x72, 0x96, 0x5f, 0x5a, 0xb6, + 0xb9, 0x3d, 0xa5, 0x4e, 0x0b, 0x13, 0x09, 0x08, 0x3d, 0x86, 0xa2, 0x71, 0xa2, 0xdb, 0x36, 0x66, + 0xaa, 0x56, 0x5f, 0xbd, 0x91, 0x38, 0x35, 0x86, 0x54, 0x03, 0x2a, 0x72, 0x1e, 0x03, 0xdd, 0x37, + 0x4e, 0x9a, 0x2d, 0x80, 0xe8, 0xb0, 0xd0, 0x1a, 0x94, 0x3d, 0xdc, 0xc7, 0x86, 0xef, 0xb8, 0x81, + 0xc4, 0x6e, 0xc4, 0x0e, 0xb5, 0xcb, 0xb1, 0x6a, 0x44, 0x47, 0x2c, 0xbc, 0x2a, 0xe2, 0xfe, 0xb7, + 0x05, 0x37, 0x0f, 0x79, 0xdf, 0x19, 0x5a, 0x06, 0x95, 0x16, 0xa1, 0x62, 0xc3, 0x68, 0x4f, 0x7f, + 0x9f, 0x85, 0xe9, 0x84, 0xe7, 0x44, 0x73, 0x90, 0x7f, 0x63, 0x99, 0xfe, 0x09, 0x65, 0x28, 0xaf, + 0xb2, 0x01, 0xf1, 0x44, 0x27, 0xd8, 0x3a, 0x3e, 0xf1, 0xe9, 0x17, 0xf3, 0x2a, 0x1f, 0x11, 0x6a, + 0x13, 0x0f, 0xfd, 0x13, 0xfa, 0x89, 0xbc, 0xca, 0x06, 0xe8, 0x36, 0x94, 0x8f, 0x5c, 0x7d, 0x80, + 0x5d, 0x72, 0xe3, 0xe4, 0x28, 0x26, 0x02, 0xa0, 0x27, 0x50, 0x61, 0x7e, 0xc3, 0x70, 0x4c, 0x6c, + 0xf0, 0x6b, 0x60, 0x36, 0x69, 0x3d, 0x26, 0x36, 0x54, 0xe6, 0x5f, 0xe8, 0x6f, 0x74, 0x0f, 0x6a, + 0x6c, 0xd6, 0xa1, 0xe5, 0xd3, 0x75, 0x0b, 0x74, 0xdd, 0x2a, 0x05, 0xae, 0x33, 0x58, 0x44, 0xf4, + 0xd3, 0x91, 0xde, 0x27, 0xf2, 0xa9, 0x08, 0x44, 0xbf, 0xc5, 0x60, 0xe8, 0x01, 0x4c, 0x33, 0xa2, + 0x23, 0x97, 0xdc, 0x9e, 0xb6, 0x71, 0xd6, 0x28, 0x52, 0xb2, 0x3a, 0x05, 0x6f, 0x05, 0x50, 0xc2, + 0x28, 0x73, 0x32, 0x8c, 0xd1, 0x52, 0x82, 0x51, 0x6a, 0x93, 0x9c, 0xd1, 0xd7, 0xe1, 0x6f, 0xc2, + 0x03, 0x9b, 0x15, 0x30, 0x5a, 0x66, 0x3c, 0x50, 0xa0, 0xc0, 0x28, 0x23, 0x0a, 0x18, 0xad, 0x0a, + 0x44, 0x01, 0xa3, 0x4b, 0x80, 0x4e, 0xf1, 0x99, 0x46, 0x25, 0xa7, 0x59, 0xb6, 0x8f, 0xdd, 0xd7, + 0x7a, 0xbf, 0x01, 0x77, 0xa5, 0x87, 0x92, 0x2a, 0x9f, 0xe2, 0xb3, 0x2d, 0x82, 0x68, 0x73, 0x78, + 0xf3, 0x6f, 0x32, 0x50, 0x60, 0xf7, 0x19, 0x7a, 0x04, 0xb9, 0x23, 0xab, 0xcf, 0x02, 0x01, 0xd1, + 0x94, 0xb7, 0xac, 0x3e, 0x66, 0x24, 0xdb, 0x53, 0x2a, 0x25, 0x41, 0x8f, 0xa1, 0xe0, 0xf9, 0x2e, + 0xd6, 0x07, 0xdc, 0x07, 0xde, 0x10, 0x2e, 0x3c, 0x02, 0x0e, 0xc9, 0x39, 0x19, 0x7a, 0x0e, 0x25, + 0x0f, 0x1f, 0x0f, 0xb0, 0xed, 0x7b, 0xdc, 0xf1, 0xdd, 0x8e, 0xa6, 0x30, 0x04, 0x36, 0x63, 0x1f, + 0x0a, 0xe9, 0xd1, 0x32, 0x14, 0xac, 0x81, 0x7e, 0x8c, 0xbd, 0x73, 0xa1, 0x42, 0x9b, 0x80, 0xa3, + 0x6f, 0x31, 0x2a, 0xb2, 0x8f, 0x81, 0xa1, 0x0f, 0xa9, 0x8a, 0x88, 0xfb, 0xd8, 0x35, 0xf4, 0x61, + 0xb4, 0x0f, 0x42, 0x22, 0xde, 0xdc, 0x85, 0x89, 0x6e, 0x6e, 0x72, 0x0b, 0x1b, 0x14, 0xd4, 0xfc, + 0x43, 0x09, 0x20, 0xe2, 0x18, 0xfd, 0x00, 0xca, 0x44, 0x34, 0x9a, 0x7f, 0x36, 0x64, 0x22, 0xac, + 0x27, 0x03, 0x0d, 0xb6, 0xc1, 0xde, 0xd9, 0x10, 0xab, 0xa5, 0x23, 0xfe, 0x8b, 0x38, 0x67, 0xf2, + 0x7b, 0xa8, 0xfb, 0x27, 0xcc, 0x2c, 0xd5, 0x70, 0x8c, 0x1e, 0x81, 0x6c, 0x5a, 0x9e, 0x7e, 0xd8, + 0xc7, 0xda, 0x40, 0xb7, 0xad, 0x23, 0xec, 0xf9, 0xfc, 0x46, 0x9c, 0xe6, 0xf0, 0x5d, 0x0e, 0x6e, + 0xbe, 0x82, 0xaa, 0x28, 0x79, 0xb4, 0x06, 0x25, 0x1a, 0xf9, 0x19, 0x4e, 0x9f, 0x33, 0xf3, 0x51, + 0xe2, 0x88, 0xf6, 0x39, 0x5a, 0x0d, 0x09, 0x11, 0x82, 0xdc, 0xc8, 0xed, 0x7b, 0x8d, 0xcc, 0xdd, + 0xec, 0xc3, 0xb2, 0x4a, 0x7f, 0x37, 0xff, 0x3a, 0x07, 0xb3, 0x29, 0x07, 0x44, 0x0e, 0x34, 0xf1, + 0x81, 0x4f, 0xd2, 0x0f, 0x34, 0xe5, 0x3b, 0x0f, 0x60, 0x9a, 0xec, 0x91, 0x44, 0x9d, 0x1a, 0xb9, + 0x62, 0xac, 0xb7, 0x7c, 0xeb, 0xf5, 0x00, 0xbc, 0x4f, 0xa1, 0x44, 0xdf, 0x87, 0x7d, 0xfd, 0xac, + 0x6f, 0x79, 0x3e, 0x8b, 0x51, 0xa9, 0x4b, 0x52, 0xab, 0x01, 0x90, 0xc6, 0xa9, 0x4b, 0x80, 0xc8, + 0x87, 0xb5, 0x38, 0x65, 0x85, 0x52, 0xca, 0x04, 0xb3, 0x2f, 0x52, 0x3f, 0x02, 0x99, 0x2b, 0x96, + 0x66, 0x8e, 0x5c, 0x9d, 0x78, 0x2f, 0xaa, 0x56, 0x35, 0x75, 0x9a, 0xc3, 0x37, 0x39, 0x18, 0x29, + 0x02, 0x9b, 0xde, 0xe8, 0x88, 0xb0, 0x09, 0x74, 0xa7, 0x17, 0xa8, 0x6e, 0x97, 0xd2, 0x44, 0x9b, + 0x60, 0xe3, 0xd4, 0x53, 0x2c, 0xa5, 0x9e, 0x22, 0x7a, 0x00, 0x19, 0x6f, 0x8d, 0xeb, 0xed, 0x4c, + 0xf4, 0x91, 0xb5, 0x83, 0x61, 0xdf, 0xd1, 0xcd, 0xf5, 0x4c, 0x43, 0xda, 0x9e, 0x52, 0x33, 0xde, + 0x1a, 0x5a, 0x84, 0xec, 0xb1, 0x31, 0xe4, 0x3a, 0x1b, 0x05, 0xd9, 0x2f, 0x36, 0xf6, 0x63, 0xa4, + 0x84, 0x08, 0x3d, 0x81, 0xbc, 0xfe, 0xb3, 0x91, 0x8b, 0xa9, 0xbb, 0x12, 0xa3, 0xdf, 0x16, 0x81, + 0xae, 0xf7, 0x9d, 0xc3, 0xd8, 0x1c, 0x46, 0x8c, 0xd6, 0xa0, 0xa0, 0xf7, 0xad, 0x4e, 0xb7, 0x4b, + 0x1d, 0x91, 0x68, 0xe1, 0x2d, 0x0a, 0x8e, 0xcd, 0xe1, 0xa4, 0xc4, 0x38, 0x58, 0x4c, 0xdc, 0xfc, + 0xef, 0x2c, 0x54, 0x04, 0xeb, 0x24, 0x42, 0x30, 0xf4, 0xa1, 0x3f, 0x72, 0x05, 0x97, 0x24, 0x31, + 0xb1, 0x73, 0x78, 0xe0, 0x91, 0xa2, 0xab, 0x24, 0x93, 0x7e, 0x95, 0x64, 0x63, 0x57, 0x49, 0x8a, + 0x2e, 0xe5, 0x52, 0x75, 0xa9, 0x75, 0xfe, 0x34, 0xf3, 0x09, 0x2b, 0xa5, 0x0c, 0x8f, 0x39, 0xc9, + 0x27, 0x50, 0xa1, 0x2e, 0x86, 0x7b, 0xf6, 0x42, 0xc2, 0xb3, 0xd3, 0xe9, 0xdc, 0xb3, 0x5b, 0xe1, + 0xef, 0xd4, 0xf3, 0x2f, 0x8e, 0x3b, 0xff, 0xd2, 0xc4, 0xe7, 0x5f, 0xbe, 0xd4, 0xf9, 0xc3, 0xd5, + 0xce, 0xbf, 0x72, 0x95, 0xf3, 0xef, 0x02, 0x44, 0xee, 0x36, 0xe6, 0xe4, 0xa4, 0x09, 0x9c, 0x5c, + 0x26, 0xdd, 0xc9, 0xfd, 0x83, 0x04, 0xb5, 0x98, 0x5b, 0x46, 0xf7, 0xa8, 0xc0, 0xa4, 0x0b, 0x04, + 0xc6, 0x85, 0x75, 0x9f, 0x09, 0x2b, 0x73, 0x91, 0xb0, 0x02, 0x41, 0xad, 0x04, 0x82, 0xca, 0x8e, + 0x17, 0x54, 0x24, 0xa4, 0x15, 0x28, 0xea, 0x7d, 0x4b, 0x73, 0xbc, 0xe0, 0x6a, 0x4a, 0x97, 0x52, + 0x20, 0x21, 0xcf, 0x23, 0xa9, 0xdb, 0xd0, 0x75, 0xc8, 0x7d, 0xed, 0x36, 0xff, 0x35, 0x07, 0xa5, + 0x80, 0x55, 0x74, 0x0f, 0x40, 0x37, 0x0c, 0xec, 0x79, 0xda, 0x29, 0xe6, 0x61, 0xfa, 0x7a, 0xee, + 0x9b, 0xf7, 0x4b, 0x92, 0x5a, 0x66, 0xf0, 0x97, 0xf8, 0x0c, 0xdd, 0x86, 0x82, 0x87, 0x0d, 0x17, + 0x33, 0x09, 0x05, 0x04, 0x1c, 0x86, 0x1e, 0x41, 0xcd, 0xc3, 0x9e, 0x67, 0x39, 0xb6, 0xe6, 0x3b, + 0xa7, 0xd8, 0x66, 0x3e, 0x90, 0x13, 0x55, 0x39, 0xaa, 0x47, 0x30, 0x68, 0x09, 0xa6, 0x75, 0xcf, + 0x1b, 0x0d, 0xb0, 0xe6, 0x3a, 0x7d, 0xac, 0xe9, 0xae, 0x4d, 0x43, 0x89, 0x80, 0xb8, 0xc6, 0x90, + 0xaa, 0xd3, 0xc7, 0x2d, 0xd7, 0x46, 0x5d, 0xf8, 0x48, 0xa4, 0xc6, 0x6f, 0x7d, 0xec, 0xda, 0x7a, + 0x9f, 0xc4, 0x9f, 0x35, 0x3a, 0xeb, 0x36, 0x99, 0xf5, 0xee, 0xfd, 0xd2, 0x5c, 0x34, 0x4f, 0xe1, + 0x44, 0xed, 0x4d, 0x35, 0x0d, 0x6a, 0x12, 0x83, 0x76, 0xf1, 0x31, 0x71, 0xbf, 0xcc, 0xa9, 0xf3, + 0x11, 0xd1, 0x15, 0x6c, 0x9b, 0x43, 0xc7, 0xb2, 0x7d, 0x6e, 0xc9, 0xe1, 0x98, 0xcc, 0x39, 0x1c, + 0x19, 0xa7, 0xbc, 0x0a, 0x50, 0x56, 0xf9, 0x08, 0x3d, 0x04, 0xf9, 0xc8, 0x71, 0x0d, 0xac, 0x11, + 0x8d, 0xd2, 0x3c, 0xff, 0xac, 0xcf, 0xee, 0xf3, 0x92, 0x5a, 0xa7, 0xf0, 0x7d, 0xdd, 0x3f, 0xe9, + 0x12, 0x28, 0xfa, 0x21, 0x94, 0x06, 0xd8, 0xd7, 0x69, 0x56, 0xc5, 0xd2, 0xfa, 0x3b, 0xe7, 0xd4, + 0x66, 0x79, 0x97, 0x53, 0x28, 0xb6, 0xef, 0x9e, 0xa9, 0xe1, 0x04, 0xd4, 0x80, 0xa2, 0xaf, 0x1f, + 0x1f, 0x5b, 0xf6, 0x31, 0xb5, 0xd1, 0xb2, 0x1a, 0x0c, 0xd1, 0x63, 0x98, 0x35, 0x1c, 0xdb, 0xa7, + 0xb7, 0x8a, 0xe5, 0x0d, 0x1d, 0xcf, 0xa2, 0x17, 0x4b, 0x99, 0x52, 0x21, 0x8e, 0xda, 0x8c, 0x30, + 0x24, 0x0b, 0x1c, 0xba, 0xce, 0xdb, 0x33, 0x6e, 0x94, 0x51, 0x48, 0xb3, 0x4f, 0xa0, 0x41, 0x16, + 0x48, 0x49, 0x16, 0x7e, 0x08, 0xb5, 0x18, 0x47, 0x24, 0xa9, 0x0e, 0x95, 0x44, 0x25, 0x3f, 0x89, + 0xcf, 0x7c, 0xad, 0xf7, 0x47, 0x98, 0xdf, 0xa3, 0x6c, 0xf0, 0x3c, 0xf3, 0x4c, 0x6a, 0xbe, 0x81, + 0x72, 0xa8, 0xe8, 0xe8, 0x3e, 0x54, 0x0c, 0x17, 0xd3, 0x40, 0x5f, 0xef, 0x7b, 0x31, 0x2d, 0x13, + 0x11, 0x82, 0x9c, 0x33, 0x31, 0x39, 0x87, 0x5c, 0x67, 0xbf, 0x95, 0xeb, 0xe6, 0x37, 0x12, 0x4c, + 0x27, 0x0c, 0x07, 0x3d, 0x80, 0xaa, 0x6e, 0x18, 0xce, 0xc8, 0xf6, 0x85, 0x92, 0x53, 0xc0, 0x00, + 0xc7, 0xd0, 0x5b, 0xfa, 0x53, 0x08, 0x86, 0xd4, 0x1c, 0x44, 0x6d, 0x07, 0x8e, 0x20, 0xf6, 0xf0, + 0x29, 0xd4, 0x89, 0x6c, 0x75, 0xcb, 0xc6, 0xae, 0x18, 0x20, 0xd4, 0x42, 0x28, 0x59, 0xad, 0xf9, + 0xe7, 0x12, 0x54, 0x45, 0x7b, 0xfc, 0x10, 0xc6, 0xf6, 0x01, 0xd5, 0xb7, 0xf9, 0x7b, 0x50, 0x11, + 0x04, 0x98, 0x52, 0x33, 0x59, 0x80, 0xd2, 0xc8, 0x23, 0x86, 0x33, 0x08, 0x4e, 0x38, 0x1c, 0xa3, + 0xbb, 0x50, 0x1a, 0xea, 0x9e, 0xf7, 0xc6, 0x71, 0x59, 0x7e, 0x1b, 0x30, 0x1a, 0x42, 0x9b, 0x1e, + 0xcc, 0xec, 0x58, 0xde, 0x65, 0x4a, 0x7f, 0x8f, 0xa0, 0xcc, 0x6a, 0x8e, 0xc4, 0xc4, 0xd9, 0xee, + 0xab, 0xef, 0xde, 0x2f, 0x95, 0x18, 0xb0, 0xbd, 0xa9, 0x06, 0xbf, 0xa8, 0x19, 0xeb, 0x86, 0x6f, + 0xbd, 0xc6, 0x3c, 0x32, 0xe5, 0xa3, 0xe6, 0x8f, 0x00, 0x89, 0x1f, 0xf5, 0x86, 0x8e, 0xed, 0x91, + 0x85, 0xf3, 0x96, 0x8f, 0x07, 0xe7, 0xcb, 0x05, 0x8c, 0x8e, 0x24, 0xe1, 0x2a, 0xa3, 0x68, 0xfe, + 0xad, 0x04, 0xb3, 0x07, 0x43, 0x53, 0xf7, 0x71, 0x9c, 0xf1, 0x18, 0x6f, 0xd2, 0x58, 0xde, 0xb8, + 0x20, 0x33, 0x91, 0x20, 0xa3, 0xd2, 0x58, 0x36, 0x56, 0x1a, 0xbb, 0x0f, 0xd3, 0xba, 0x69, 0x6a, + 0x2c, 0x59, 0xd1, 0x68, 0x10, 0x9c, 0xa3, 0x41, 0x70, 0x4d, 0x37, 0x4d, 0x16, 0x2f, 0x1f, 0xb8, + 0x7d, 0x8f, 0xc4, 0x9a, 0x2e, 0x1e, 0x38, 0xaf, 0x71, 0x8c, 0x34, 0x4f, 0x49, 0x65, 0x86, 0x89, + 0xa8, 0x9b, 0x5f, 0xc2, 0x4c, 0xd7, 0x77, 0x86, 0x57, 0xe5, 0xbf, 0xf9, 0x97, 0x15, 0x80, 0x48, + 0x30, 0x97, 0xd9, 0xf9, 0x3d, 0x28, 0xd2, 0xd3, 0x0d, 0x8f, 0x0f, 0xde, 0xbd, 0x5f, 0x2a, 0x10, + 0x50, 0x7b, 0x53, 0x65, 0x7f, 0xcd, 0xb8, 0x0a, 0xd4, 0x12, 0x2a, 0xf0, 0x1c, 0x2a, 0xac, 0xda, + 0xc8, 0x12, 0x9a, 0x05, 0x1a, 0xeb, 0xdc, 0x4c, 0x9c, 0x17, 0x2b, 0xab, 0xd1, 0x8c, 0x06, 0xbc, + 0xf0, 0x37, 0xfa, 0x75, 0x92, 0x1d, 0xea, 0xfe, 0xc8, 0xe3, 0x05, 0x97, 0x1b, 0xc9, 0x69, 0x14, + 0xa9, 0x72, 0x22, 0xf4, 0x31, 0x00, 0xad, 0xe6, 0x61, 0x53, 0xd3, 0x7d, 0xea, 0x10, 0xb3, 0x6a, + 0x99, 0x43, 0x5a, 0x3e, 0xba, 0x49, 0x2d, 0x8a, 0x21, 0x2b, 0x14, 0x59, 0xa4, 0xe3, 0x16, 0xad, + 0x68, 0x8e, 0xa8, 0x8a, 0x50, 0x24, 0x62, 0x33, 0x39, 0xa4, 0x45, 0x52, 0xb2, 0x02, 0x93, 0x48, + 0xe3, 0x63, 0xea, 0xaf, 0x6e, 0x09, 0x29, 0x50, 0xb2, 0x16, 0x4e, 0xee, 0x68, 0x46, 0x8c, 0x9e, + 0x12, 0xd3, 0x26, 0xd9, 0x44, 0xe3, 0x93, 0x44, 0xa6, 0xaa, 0xbc, 0x1d, 0x3a, 0xae, 0xaf, 0x52, + 0xa4, 0x30, 0x8f, 0x51, 0xa3, 0x7d, 0xa8, 0x53, 0x79, 0x1a, 0xce, 0x80, 0xfa, 0x79, 0xcc, 0x83, + 0x82, 0x7b, 0xe1, 0x7c, 0xd5, 0x71, 0x06, 0x1b, 0x01, 0x36, 0xf6, 0x79, 0x1e, 0x48, 0xd5, 0x5c, + 0x91, 0x02, 0x7d, 0x9f, 0xd5, 0xd2, 0xeb, 0x89, 0x3a, 0xe3, 0x2b, 0x7c, 0x98, 0x36, 0x99, 0x96, + 0xd5, 0xdb, 0x50, 0x11, 0x8a, 0x3a, 0x8d, 0x59, 0x3a, 0xf5, 0x7b, 0x69, 0x15, 0xaf, 0xb4, 0x25, + 0xc4, 0xb9, 0xa8, 0x0b, 0xd3, 0xac, 0xce, 0x14, 0x6d, 0x88, 0xa5, 0x26, 0xbf, 0x16, 0xbd, 0x03, + 0x10, 0xfc, 0xd8, 0x1d, 0xd5, 0xfd, 0x18, 0x09, 0xfa, 0x1c, 0xf2, 0x14, 0xc2, 0x73, 0x97, 0x5b, + 0xf1, 0xa5, 0xd2, 0x56, 0x60, 0xf4, 0xe8, 0x39, 0xd4, 0xb9, 0xcd, 0xb9, 0xd8, 0x1b, 0xf5, 0x7d, + 0xaf, 0x31, 0x9d, 0xf0, 0x21, 0xcc, 0xf2, 0xa8, 0x0f, 0xa9, 0x31, 0x52, 0x95, 0x51, 0xa2, 0x27, + 0x50, 0xa5, 0xb9, 0x79, 0x30, 0x53, 0xa6, 0x33, 0x67, 0x62, 0x15, 0x0e, 0x3a, 0xaf, 0x42, 0xc8, + 0x82, 0x59, 0x5f, 0x42, 0x90, 0x12, 0x86, 0x13, 0x67, 0x12, 0x35, 0x3b, 0x9e, 0xff, 0x31, 0xc7, + 0x55, 0xe7, 0xd4, 0xc1, 0xfc, 0x67, 0x50, 0x63, 0xe9, 0x42, 0x30, 0x7b, 0x2e, 0xc1, 0x30, 0x4d, + 0x18, 0xd8, 0xdc, 0x2a, 0xa5, 0x14, 0xf8, 0x1d, 0x18, 0xfa, 0x30, 0x9c, 0x78, 0x3b, 0xc1, 0x2f, + 0x09, 0xad, 0x19, 0xbf, 0x84, 0x2c, 0x98, 0x35, 0x07, 0x79, 0xec, 0xba, 0x8e, 0xcb, 0xc3, 0x0e, + 0x36, 0x20, 0x36, 0x42, 0x7f, 0xd0, 0xa4, 0xa5, 0x31, 0xcf, 0xca, 0x6a, 0x14, 0x42, 0xd2, 0x13, + 0x12, 0xd3, 0x98, 0xd8, 0xd7, 0xad, 0xbe, 0xd7, 0xb8, 0xc1, 0x62, 0x1a, 0x3e, 0x44, 0x9f, 0xc1, + 0x4c, 0x10, 0x90, 0x6b, 0x7d, 0xc7, 0x60, 0xa9, 0xf2, 0x47, 0x2c, 0xad, 0x0e, 0x10, 0x3b, 0x1c, + 0x8e, 0x96, 0x61, 0xf6, 0x50, 0x37, 0x4e, 0x47, 0x43, 0x8d, 0x17, 0x4a, 0xb4, 0x91, 0x87, 0xcd, + 0xc6, 0x4d, 0x56, 0x47, 0x66, 0x28, 0x1e, 0xba, 0x1f, 0x78, 0xd8, 0x44, 0x77, 0xa0, 0xe2, 0x62, + 0xdf, 0x3d, 0xd3, 0xe8, 0x5d, 0xde, 0xb8, 0x45, 0xd9, 0x02, 0x0a, 0xda, 0x20, 0x10, 0x62, 0xbb, + 0xbc, 0xc2, 0x54, 0x4c, 0xbc, 0x3d, 0x45, 0xc7, 0x4c, 0x2e, 0x18, 0xaa, 0x24, 0x52, 0x58, 0x67, + 0xfa, 0x8c, 0xd7, 0xb0, 0x92, 0x39, 0x54, 0x70, 0xc2, 0x9c, 0x9c, 0x55, 0xb1, 0x3e, 0x17, 0x8a, + 0x52, 0xd5, 0x64, 0x1d, 0x4b, 0x38, 0x59, 0x3e, 0x29, 0x24, 0x5e, 0x2f, 0x43, 0xd1, 0xe5, 0x3a, + 0x5a, 0x22, 0xce, 0x82, 0xc8, 0xbf, 0xf9, 0x8b, 0x0c, 0x40, 0xc4, 0x5b, 0xfa, 0xcb, 0x87, 0xe0, + 0xe7, 0x32, 0xe3, 0xfc, 0x5c, 0x36, 0xee, 0xe7, 0x16, 0xa0, 0x14, 0x2b, 0x56, 0x64, 0xd5, 0x70, + 0x8c, 0x56, 0x43, 0x67, 0xcb, 0xd2, 0xd9, 0x85, 0x14, 0x41, 0x2d, 0x27, 0x3c, 0x6e, 0xa8, 0x29, + 0x05, 0x51, 0x53, 0x9a, 0x50, 0xeb, 0xeb, 0x1e, 0x51, 0x76, 0x72, 0x30, 0x3a, 0xcb, 0x52, 0xb3, + 0x6a, 0x85, 0x00, 0x55, 0x02, 0x6b, 0xf9, 0x44, 0x5d, 0x08, 0xda, 0xc2, 0x1e, 0x15, 0x71, 0x4d, + 0x0d, 0x86, 0xcd, 0x65, 0x28, 0xb0, 0xaf, 0x20, 0x80, 0x42, 0x6b, 0xa3, 0xd7, 0xfe, 0x4a, 0x91, + 0xa7, 0x50, 0x15, 0x4a, 0x5b, 0xed, 0xbd, 0x76, 0x77, 0x5b, 0xd9, 0x94, 0x25, 0x82, 0xd9, 0x6a, + 0xb5, 0x77, 0x94, 0x4d, 0x39, 0xd3, 0xfc, 0x85, 0x04, 0xa5, 0xe0, 0x54, 0x82, 0x04, 0x51, 0x0c, + 0x46, 0x82, 0xf1, 0x07, 0x12, 0x5b, 0x21, 0x21, 0x36, 0x04, 0x39, 0xcf, 0xfa, 0x19, 0xe6, 0xe2, + 0xa4, 0xbf, 0x09, 0x7d, 0xa8, 0xe8, 0x2c, 0x42, 0x0b, 0xc7, 0xcd, 0x7f, 0xca, 0x40, 0x55, 0xd4, + 0x89, 0xf3, 0xb5, 0x29, 0x69, 0xe2, 0xda, 0x54, 0xe9, 0x82, 0xda, 0x94, 0xc8, 0x6f, 0xe6, 0x02, + 0x7e, 0xb3, 0x02, 0xbf, 0x9f, 0xc1, 0x4c, 0xb8, 0x70, 0xc8, 0x38, 0x0b, 0x3a, 0xe5, 0x00, 0x11, + 0x5a, 0xe8, 0x13, 0x98, 0x8f, 0xb3, 0x12, 0xce, 0x60, 0xee, 0x62, 0x4e, 0x64, 0x27, 0x9c, 0x75, + 0x8f, 0xe4, 0x94, 0xcc, 0x07, 0x32, 0x4b, 0xcd, 0xd3, 0xef, 0x57, 0x39, 0x90, 0xd9, 0x6a, 0xfc, + 0x84, 0x0a, 0xe3, 0x4e, 0xa8, 0x18, 0x3b, 0xa1, 0xe6, 0x1f, 0x4b, 0x00, 0x91, 0x17, 0x9c, 0xbc, + 0x98, 0x73, 0x27, 0xaa, 0xc4, 0x10, 0xa6, 0x24, 0xba, 0x6a, 0x50, 0x74, 0x39, 0xcf, 0xd2, 0x25, + 0x94, 0xa6, 0xf9, 0x8f, 0x12, 0x94, 0x02, 0xff, 0xfa, 0x1d, 0xe8, 0x65, 0xee, 0x82, 0x73, 0xce, + 0x5f, 0xa0, 0x97, 0x85, 0xb8, 0x5e, 0x12, 0x49, 0x04, 0x97, 0x34, 0x91, 0x04, 0x93, 0x2f, 0xf0, + 0x4b, 0x77, 0x64, 0xfb, 0xcd, 0x77, 0x19, 0xb8, 0xd1, 0x1a, 0xf9, 0xce, 0xb9, 0x9b, 0x5f, 0x78, + 0x53, 0x97, 0x26, 0x7a, 0x53, 0x9f, 0x4a, 0x7d, 0x53, 0xcf, 0x7c, 0xcb, 0x9b, 0xfa, 0x94, 0xf0, + 0xa6, 0xfe, 0x05, 0xbf, 0x87, 0x83, 0x87, 0xf5, 0x2c, 0xbd, 0xd7, 0x16, 0xd2, 0xca, 0xe4, 0xfc, + 0x8d, 0x9d, 0x5e, 0xc8, 0x1d, 0xfe, 0xce, 0xae, 0x44, 0x17, 0x72, 0xb0, 0x42, 0x8e, 0xae, 0x30, + 0xf6, 0x2d, 0x21, 0xbc, 0x97, 0xf9, 0x32, 0xc4, 0x7b, 0xf3, 0xee, 0x88, 0xe6, 0x9f, 0x64, 0x60, + 0x9a, 0x08, 0x47, 0x08, 0x3e, 0x2e, 0x5d, 0xac, 0xca, 0xa7, 0xd7, 0xf2, 0x58, 0x69, 0x2a, 0x33, + 0x51, 0x69, 0x2a, 0x3b, 0x71, 0x69, 0x2a, 0x37, 0x69, 0x69, 0xea, 0x71, 0x58, 0xbf, 0x2b, 0x4c, + 0x50, 0x99, 0x8a, 0xd5, 0xee, 0xfe, 0x2a, 0x07, 0xb3, 0x29, 0x91, 0x2e, 0xc9, 0x3f, 0x58, 0xa4, + 0x9b, 0xc8, 0x3f, 0x18, 0x90, 0xe4, 0x1f, 0xfc, 0x97, 0x49, 0xf2, 0x29, 0xf6, 0x40, 0xef, 0x1c, + 0x1d, 0x79, 0xd8, 0xd7, 0x06, 0x1e, 0x37, 0x90, 0x1a, 0x05, 0x77, 0x28, 0x74, 0xd7, 0x23, 0x57, + 0x0e, 0xb6, 0x4d, 0x81, 0x8a, 0x59, 0x4a, 0x05, 0xdb, 0x66, 0x48, 0x23, 0xf6, 0xa1, 0xe4, 0x2e, + 0xdd, 0x87, 0x92, 0x9f, 0xb8, 0x0f, 0xa5, 0x70, 0xb9, 0x3e, 0x94, 0xe2, 0x35, 0xfa, 0x50, 0x4a, + 0x57, 0xeb, 0x43, 0x29, 0x4f, 0xde, 0x87, 0x02, 0x97, 0xef, 0x43, 0xa9, 0x5c, 0xab, 0x0f, 0xe5, + 0x5f, 0x0a, 0xb0, 0x70, 0x71, 0x7a, 0x33, 0xbe, 0xdc, 0x10, 0x65, 0xe5, 0x99, 0x31, 0x0d, 0x2b, + 0xd9, 0x64, 0xab, 0xc8, 0xe7, 0xc0, 0x5e, 0x68, 0xb5, 0x81, 0xf5, 0xd6, 0xb2, 0x8f, 0x1b, 0xd3, + 0xf4, 0x44, 0x12, 0x0d, 0x15, 0xbb, 0x14, 0xa7, 0xb2, 0xb7, 0x63, 0x36, 0x48, 0xf4, 0x98, 0xe4, + 0x26, 0xe8, 0x74, 0xc9, 0xa7, 0x74, 0xba, 0xa0, 0x27, 0x3c, 0xd6, 0x64, 0x8a, 0x33, 0xc6, 0x8b, + 0xf1, 0x44, 0x86, 0x05, 0x9d, 0x6b, 0x89, 0xc0, 0x36, 0xfd, 0xe9, 0x34, 0x28, 0xac, 0xf3, 0xb0, + 0xf6, 0x4b, 0x21, 0x52, 0x85, 0x6f, 0x7f, 0x3e, 0xe5, 0xb3, 0xa3, 0x27, 0xd4, 0x48, 0x6d, 0x4b, + 0xd7, 0x50, 0xdb, 0xf2, 0x25, 0xd4, 0x36, 0xe9, 0xea, 0x2b, 0x97, 0x73, 0xf5, 0xbf, 0x19, 0x66, + 0x7b, 0xc1, 0x02, 0xd5, 0x64, 0xea, 0x25, 0x48, 0x2b, 0xc8, 0xf7, 0xc6, 0x5c, 0x14, 0xb5, 0xcb, + 0x5f, 0x14, 0xe8, 0x37, 0x82, 0x04, 0x2e, 0x58, 0xa4, 0x4e, 0x17, 0x49, 0x7d, 0x7f, 0xe6, 0x19, + 0x5c, 0x30, 0x55, 0x34, 0x2c, 0x79, 0x32, 0xc3, 0x7a, 0x9e, 0x69, 0x48, 0x91, 0x17, 0x16, 0x6f, + 0xa9, 0xff, 0xca, 0x83, 0x9c, 0xcc, 0xf9, 0xbf, 0xa3, 0xce, 0xaa, 0x6a, 0x7a, 0x67, 0x55, 0xa8, + 0xfb, 0xb9, 0x2b, 0xea, 0x7e, 0xfe, 0x6a, 0xba, 0x5f, 0xb8, 0x96, 0xee, 0x7f, 0x57, 0x2e, 0x3b, + 0xa9, 0xfb, 0xe5, 0xeb, 0xea, 0x3e, 0x5c, 0x4f, 0xf7, 0x2b, 0x1f, 0x42, 0xf7, 0x6b, 0x57, 0xd2, + 0xfd, 0xfa, 0x75, 0x75, 0xff, 0xe7, 0x39, 0x68, 0x5c, 0x54, 0xb4, 0x1a, 0x7f, 0xab, 0x88, 0x6d, + 0x6f, 0x99, 0x44, 0xdb, 0xdb, 0xf7, 0xa0, 0x1a, 0xeb, 0x77, 0x63, 0xd6, 0x50, 0xf1, 0xa2, 0x4e, + 0x37, 0x41, 0x6d, 0x72, 0xd7, 0x88, 0x8e, 0xf3, 0xd7, 0x88, 0x8e, 0x0b, 0xd7, 0x55, 0x9b, 0xe2, + 0xf5, 0xd4, 0xa6, 0xf4, 0x21, 0xd4, 0xa6, 0x7c, 0x25, 0xb5, 0x81, 0x4b, 0xa8, 0x8d, 0xa0, 0x2c, + 0x7f, 0x5a, 0x80, 0x5b, 0x63, 0x4a, 0x92, 0xe3, 0xf5, 0xe5, 0x29, 0xb0, 0x4e, 0xae, 0xa8, 0x39, + 0x34, 0x13, 0x35, 0x87, 0x52, 0x0c, 0x6f, 0x0e, 0x55, 0xc5, 0x91, 0x49, 0xe6, 0x25, 0x9a, 0x4a, + 0xb3, 0xe9, 0x4d, 0xa5, 0x89, 0x96, 0xd2, 0xff, 0x23, 0x17, 0x5a, 0xba, 0x96, 0x0b, 0x2d, 0x5c, + 0xc3, 0x85, 0x16, 0x7f, 0x15, 0x3e, 0x5c, 0xc5, 0x16, 0xa6, 0xaf, 0xeb, 0x42, 0xff, 0x53, 0x02, + 0x74, 0xbe, 0xba, 0x3e, 0xde, 0x18, 0xee, 0x0b, 0x3d, 0xa6, 0x99, 0x73, 0x3d, 0xa6, 0x51, 0x87, + 0xe9, 0x63, 0xae, 0xc4, 0xd9, 0xc4, 0x13, 0xc5, 0xa6, 0xe5, 0x62, 0xc3, 0x4f, 0xe9, 0x1c, 0xfc, + 0x14, 0x6a, 0x6f, 0xf0, 0xa1, 0xe7, 0x18, 0xa7, 0xd8, 0x8f, 0x9a, 0xc8, 0xb7, 0xa7, 0xd4, 0x6a, + 0x08, 0x26, 0xb1, 0xb5, 0x28, 0x80, 0xfc, 0x55, 0x04, 0xd0, 0xfc, 0xb3, 0x0c, 0xc8, 0x49, 0x2e, + 0xfe, 0x9f, 0xe6, 0xf6, 0x09, 0xc9, 0xfc, 0x32, 0x03, 0x33, 0xe7, 0xec, 0xe7, 0xbb, 0xea, 0x5f, + 0x2c, 0x8c, 0x93, 0x68, 0x76, 0x22, 0x89, 0xe6, 0x26, 0x96, 0x68, 0xfe, 0xf2, 0x12, 0x2d, 0x5e, + 0x45, 0xa2, 0xbf, 0x1b, 0x3c, 0x55, 0xef, 0xd0, 0xc4, 0xf5, 0x0a, 0x4f, 0xd5, 0x17, 0xa4, 0xc0, + 0xe4, 0x3b, 0xcd, 0x77, 0xe1, 0x4b, 0x78, 0x97, 0xbf, 0x6a, 0x5d, 0x7a, 0x79, 0xfe, 0xbe, 0xcd, + 0xd8, 0xd5, 0x84, 0x26, 0xcf, 0x9a, 0x6e, 0x9a, 0x4c, 0x01, 0x12, 0xef, 0xdb, 0x22, 0x69, 0x56, + 0x7c, 0xdf, 0x8e, 0xa8, 0x29, 0x73, 0x5f, 0x40, 0x3d, 0xfe, 0x20, 0x83, 0x1e, 0x40, 0xce, 0xb2, + 0x8f, 0x9c, 0x73, 0x4f, 0xfc, 0xc2, 0xf3, 0x1c, 0x25, 0x20, 0xd3, 0x17, 0x5f, 0x41, 0x55, 0xec, + 0xa0, 0x47, 0xf3, 0x80, 0x5a, 0x07, 0x9b, 0xed, 0x8e, 0xb6, 0xb1, 0xdd, 0xda, 0xdb, 0x53, 0x76, + 0xb4, 0xf5, 0x4e, 0x6f, 0x5b, 0x9e, 0x3a, 0x0f, 0xdf, 0x51, 0xb6, 0x7a, 0xb2, 0x84, 0x3e, 0x82, + 0xd9, 0x38, 0x5c, 0x6d, 0xbf, 0xd8, 0xee, 0xc9, 0x99, 0xc5, 0x5f, 0x4a, 0x70, 0x23, 0xf5, 0x72, + 0x42, 0x32, 0x54, 0xb7, 0x57, 0x9f, 0x3e, 0xd1, 0x3e, 0x5f, 0x5d, 0xd9, 0xd7, 0xd6, 0x56, 0xe4, + 0xa9, 0x38, 0xe4, 0xe9, 0x8a, 0x2c, 0xa1, 0x19, 0xa8, 0x51, 0xc8, 0xf7, 0x57, 0x9e, 0x31, 0xa2, + 0x4c, 0x02, 0xf4, 0x74, 0x45, 0xce, 0xa2, 0x9b, 0x70, 0x63, 0xbf, 0xa3, 0xf6, 0xd4, 0x56, 0xbb, + 0xa7, 0xc5, 0x96, 0xcc, 0x5d, 0x80, 0x7a, 0xba, 0x22, 0xe7, 0xd1, 0x02, 0xcc, 0xc7, 0x51, 0xe1, + 0x47, 0x0a, 0x17, 0xe1, 0x9e, 0xae, 0xc8, 0xc5, 0xc5, 0x75, 0xde, 0x75, 0x1f, 0x99, 0x21, 0x9a, + 0x03, 0x79, 0x53, 0xd9, 0x6a, 0x1d, 0xec, 0xf4, 0xb4, 0xad, 0xf6, 0x8e, 0xd2, 0xfb, 0xc9, 0xbe, + 0x22, 0x4f, 0xa1, 0x22, 0x64, 0x77, 0xf7, 0x9f, 0xc8, 0x12, 0xf9, 0xd1, 0x79, 0xf1, 0x42, 0xce, + 0x30, 0xc8, 0x9a, 0x9c, 0x5d, 0xdc, 0x0e, 0x4e, 0x2b, 0xe8, 0xca, 0x15, 0x97, 0xd8, 0x57, 0x3b, + 0xbd, 0xce, 0x46, 0x67, 0x47, 0x9e, 0x42, 0x25, 0xc8, 0xa9, 0xbd, 0xdd, 0x7d, 0xb6, 0x46, 0x57, + 0xed, 0xc9, 0x19, 0x54, 0x83, 0xf2, 0x2b, 0x65, 0xbd, 0xdb, 0xd9, 0x78, 0xa9, 0xf4, 0xe4, 0xec, + 0xe2, 0x1e, 0xdc, 0x48, 0x6d, 0xf3, 0x45, 0xf7, 0xe0, 0x4e, 0xb0, 0x60, 0x57, 0x79, 0xb1, 0xab, + 0xec, 0xf5, 0x94, 0x4d, 0xca, 0x9d, 0xb8, 0x3e, 0x91, 0xf8, 0x4e, 0x37, 0x82, 0x48, 0x8b, 0x8f, + 0x13, 0x6d, 0xc6, 0xbc, 0xe5, 0xb2, 0x0c, 0xf9, 0xf6, 0xde, 0xa6, 0xf2, 0xb5, 0x3c, 0x45, 0x18, + 0xe8, 0xb5, 0x77, 0x95, 0x6e, 0xaf, 0x45, 0x18, 0x5b, 0x3c, 0x82, 0xe9, 0x44, 0xbf, 0x26, 0x51, + 0x92, 0xf6, 0x6e, 0xeb, 0x85, 0xa2, 0x75, 0x0f, 0xb6, 0xb6, 0xda, 0x5f, 0x6b, 0xc1, 0xcc, 0x05, + 0x98, 0x8f, 0xc1, 0x85, 0x65, 0xd0, 0x1d, 0xb8, 0x15, 0xc3, 0xed, 0x75, 0xf6, 0x14, 0xad, 0xf3, + 0x95, 0xa2, 0xbe, 0x52, 0xdb, 0x3d, 0x45, 0xce, 0x2c, 0xfe, 0x18, 0xe4, 0x64, 0xb3, 0x03, 0x59, + 0x50, 0x79, 0xa1, 0x2a, 0xdd, 0xae, 0xd6, 0xed, 0x1c, 0xa8, 0x1b, 0x8a, 0x46, 0x24, 0xaf, 0xbd, + 0x52, 0xd6, 0xd9, 0xc7, 0x52, 0x70, 0xdd, 0xcd, 0x97, 0xb2, 0xb4, 0xf8, 0x17, 0x12, 0x54, 0xc5, + 0x16, 0x08, 0x34, 0x0b, 0xd3, 0x01, 0x71, 0xaf, 0xa5, 0xf6, 0xda, 0x7b, 0x2f, 0xe4, 0x29, 0xa2, + 0x69, 0x1c, 0xc8, 0x9f, 0xd1, 0x24, 0x01, 0xa4, 0xec, 0x6d, 0x12, 0xaa, 0x8c, 0x30, 0x75, 0xa3, + 0xb3, 0xbb, 0xbf, 0xa3, 0xf4, 0x14, 0x39, 0x2b, 0xd0, 0xf1, 0x77, 0xb6, 0x1c, 0x42, 0x50, 0x0f, + 0x56, 0x5b, 0xef, 0xa8, 0x3d, 0x65, 0x53, 0xce, 0xa3, 0x06, 0xcc, 0x71, 0xd8, 0x4e, 0x7b, 0xb7, + 0xdd, 0xd3, 0x54, 0xa5, 0xb5, 0xb1, 0xad, 0x6c, 0xca, 0x85, 0xc5, 0x03, 0xfe, 0xff, 0x3d, 0xbc, + 0x52, 0x86, 0xa0, 0x1e, 0x1c, 0xe6, 0x6e, 0xfb, 0x6b, 0xc6, 0xde, 0x3c, 0xa0, 0xcd, 0x83, 0xd6, + 0x4e, 0x68, 0x71, 0xad, 0x17, 0xca, 0x1e, 0x31, 0xc5, 0x05, 0x98, 0x8f, 0xc3, 0x77, 0x7a, 0x8a, + 0xba, 0xd7, 0x22, 0x42, 0x5c, 0xfd, 0xbb, 0x02, 0x14, 0x78, 0x79, 0xfd, 0x47, 0x50, 0x11, 0xba, + 0x2f, 0xd0, 0xb8, 0x9e, 0x8c, 0x85, 0xb4, 0xfe, 0x20, 0xd4, 0x82, 0xaa, 0xd8, 0x17, 0x84, 0xa2, + 0xa0, 0x2c, 0xa5, 0x5d, 0x28, 0x7d, 0x09, 0x05, 0x20, 0x6a, 0x4e, 0x42, 0x51, 0x54, 0x79, 0xae, + 0x4d, 0x6a, 0xe1, 0x56, 0x2a, 0x8e, 0x77, 0x33, 0x7d, 0x01, 0x10, 0xf5, 0xf7, 0x20, 0xf1, 0xe1, + 0x35, 0xd1, 0xf4, 0x93, 0xce, 0xc5, 0x4f, 0xa0, 0x41, 0xf7, 0x9c, 0x52, 0x36, 0x45, 0x93, 0xf4, + 0x8c, 0xa4, 0xae, 0xda, 0xcc, 0x7e, 0x93, 0x91, 0x90, 0x42, 0xec, 0x5c, 0x77, 0xfd, 0xb0, 0x6a, + 0x84, 0x2e, 0xee, 0x1e, 0x19, 0xb3, 0xcc, 0x01, 0xcc, 0xd3, 0x65, 0xce, 0xbf, 0x1d, 0x7d, 0x7b, + 0x47, 0xc9, 0x98, 0x65, 0x7f, 0x07, 0x6e, 0xd2, 0x65, 0xd3, 0x52, 0x35, 0x34, 0x51, 0x73, 0xc9, + 0x98, 0xc5, 0xdb, 0x20, 0x47, 0x8b, 0x9f, 0x53, 0xb2, 0xf3, 0x71, 0xf0, 0x98, 0xa5, 0xb6, 0x02, + 0x4d, 0x63, 0xd7, 0xfa, 0x39, 0x4d, 0x8b, 0xdd, 0xf6, 0x93, 0xac, 0xc3, 0x7c, 0xef, 0xb9, 0x75, + 0x62, 0xd7, 0xfa, 0xc5, 0xeb, 0xac, 0x6f, 0xfd, 0xf6, 0xbd, 0x63, 0xcb, 0x3f, 0x19, 0x1d, 0x2e, + 0x1b, 0xce, 0xe0, 0x31, 0xa7, 0x7a, 0x1c, 0xfc, 0x5b, 0x45, 0x00, 0xf8, 0x79, 0xa6, 0xb6, 0x63, + 0xbd, 0xc6, 0x2f, 0x59, 0x5b, 0xa6, 0xef, 0xfc, 0x5b, 0xa6, 0xce, 0xc7, 0xcf, 0x9f, 0x53, 0xc0, + 0x61, 0x81, 0x4e, 0x59, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x28, 0x7d, 0x69, 0x61, + 0x3c, 0x00, 0x00, } diff --git a/replay/cloud_replay.pb.go b/replay/cloud_replay.pb.go index 6bec570d5..524493318 100644 --- a/replay/cloud_replay.pb.go +++ b/replay/cloud_replay.pb.go @@ -1,3 +1,17 @@ +// Copyright 2026 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 @@ -133,7 +147,7 @@ type ReplayInfo struct { ReplayId string `protobuf:"bytes,1,opt,name=replay_id,json=replayId,proto3" json:"replay_id,omitempty"` RoomName string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` StartTime int64 `protobuf:"varint,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - Duration int64 `protobuf:"varint,4,opt,name=duration,proto3" json:"duration,omitempty"` + DurationMs int64 `protobuf:"varint,4,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -189,69 +203,25 @@ func (x *ReplayInfo) GetStartTime() int64 { return 0 } -func (x *ReplayInfo) GetDuration() int64 { +func (x *ReplayInfo) GetDurationMs() int64 { if x != nil { - return x.Duration + return x.DurationMs } return 0 } -type DeleteReplayRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - ReplayId string `protobuf:"bytes,1,opt,name=replay_id,json=replayId,proto3" json:"replay_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *DeleteReplayRequest) Reset() { - *x = DeleteReplayRequest{} - mi := &file_cloud_replay_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *DeleteReplayRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteReplayRequest) ProtoMessage() {} - -func (x *DeleteReplayRequest) ProtoReflect() protoreflect.Message { - mi := &file_cloud_replay_proto_msgTypes[3] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteReplayRequest.ProtoReflect.Descriptor instead. -func (*DeleteReplayRequest) Descriptor() ([]byte, []int) { - return file_cloud_replay_proto_rawDescGZIP(), []int{3} -} - -func (x *DeleteReplayRequest) GetReplayId() string { - if x != nil { - return x.ReplayId - } - return "" -} - type PlaybackRequest struct { state protoimpl.MessageState `protogen:"open.v1"` ReplayId string `protobuf:"bytes,1,opt,name=replay_id,json=replayId,proto3" json:"replay_id,omitempty"` - PlaybackRoom string `protobuf:"bytes,2,opt,name=playback_room,json=playbackRoom,proto3" json:"playback_room,omitempty"` // name of room to play into - SeekOffset int64 `protobuf:"varint,3,opt,name=seek_offset,json=seekOffset,proto3" json:"seek_offset,omitempty"` // initial timestamp (ms) + PlaybackRoom string `protobuf:"bytes,2,opt,name=playback_room,json=playbackRoom,proto3" json:"playback_room,omitempty"` // name of room to play into + SeekOffsetMs int64 `protobuf:"varint,3,opt,name=seek_offset_ms,json=seekOffsetMs,proto3" json:"seek_offset_ms,omitempty"` // initial timestamp (ms) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *PlaybackRequest) Reset() { *x = PlaybackRequest{} - mi := &file_cloud_replay_proto_msgTypes[4] + mi := &file_cloud_replay_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -263,7 +233,7 @@ func (x *PlaybackRequest) String() string { func (*PlaybackRequest) ProtoMessage() {} func (x *PlaybackRequest) ProtoReflect() protoreflect.Message { - mi := &file_cloud_replay_proto_msgTypes[4] + mi := &file_cloud_replay_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -276,7 +246,7 @@ func (x *PlaybackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PlaybackRequest.ProtoReflect.Descriptor instead. func (*PlaybackRequest) Descriptor() ([]byte, []int) { - return file_cloud_replay_proto_rawDescGZIP(), []int{4} + return file_cloud_replay_proto_rawDescGZIP(), []int{3} } func (x *PlaybackRequest) GetReplayId() string { @@ -293,9 +263,9 @@ func (x *PlaybackRequest) GetPlaybackRoom() string { return "" } -func (x *PlaybackRequest) GetSeekOffset() int64 { +func (x *PlaybackRequest) GetSeekOffsetMs() int64 { if x != nil { - return x.SeekOffset + return x.SeekOffsetMs } return 0 } @@ -309,7 +279,7 @@ type PlaybackResponse struct { func (x *PlaybackResponse) Reset() { *x = PlaybackResponse{} - mi := &file_cloud_replay_proto_msgTypes[5] + mi := &file_cloud_replay_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -321,7 +291,7 @@ func (x *PlaybackResponse) String() string { func (*PlaybackResponse) ProtoMessage() {} func (x *PlaybackResponse) ProtoReflect() protoreflect.Message { - mi := &file_cloud_replay_proto_msgTypes[5] + mi := &file_cloud_replay_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -334,7 +304,7 @@ func (x *PlaybackResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PlaybackResponse.ProtoReflect.Descriptor instead. func (*PlaybackResponse) Descriptor() ([]byte, []int) { - return file_cloud_replay_proto_rawDescGZIP(), []int{5} + return file_cloud_replay_proto_rawDescGZIP(), []int{4} } func (x *PlaybackResponse) GetPlaybackId() string { @@ -347,14 +317,14 @@ func (x *PlaybackResponse) GetPlaybackId() string { type SeekRequest struct { state protoimpl.MessageState `protogen:"open.v1"` PlaybackId string `protobuf:"bytes,1,opt,name=playback_id,json=playbackId,proto3" json:"playback_id,omitempty"` - SeekOffset int64 `protobuf:"varint,2,opt,name=seek_offset,json=seekOffset,proto3" json:"seek_offset,omitempty"` // timestamp (ms) + SeekOffsetMs int64 `protobuf:"varint,2,opt,name=seek_offset_ms,json=seekOffsetMs,proto3" json:"seek_offset_ms,omitempty"` // timestamp (ms) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *SeekRequest) Reset() { *x = SeekRequest{} - mi := &file_cloud_replay_proto_msgTypes[6] + mi := &file_cloud_replay_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -366,7 +336,7 @@ func (x *SeekRequest) String() string { func (*SeekRequest) ProtoMessage() {} func (x *SeekRequest) ProtoReflect() protoreflect.Message { - mi := &file_cloud_replay_proto_msgTypes[6] + mi := &file_cloud_replay_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -379,7 +349,7 @@ func (x *SeekRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SeekRequest.ProtoReflect.Descriptor instead. func (*SeekRequest) Descriptor() ([]byte, []int) { - return file_cloud_replay_proto_rawDescGZIP(), []int{6} + return file_cloud_replay_proto_rawDescGZIP(), []int{5} } func (x *SeekRequest) GetPlaybackId() string { @@ -389,9 +359,9 @@ func (x *SeekRequest) GetPlaybackId() string { return "" } -func (x *SeekRequest) GetSeekOffset() int64 { +func (x *SeekRequest) GetSeekOffsetMs() int64 { if x != nil { - return x.SeekOffset + return x.SeekOffsetMs } return 0 } @@ -405,7 +375,7 @@ type ClosePlaybackRequest struct { func (x *ClosePlaybackRequest) Reset() { *x = ClosePlaybackRequest{} - mi := &file_cloud_replay_proto_msgTypes[7] + mi := &file_cloud_replay_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -417,7 +387,7 @@ func (x *ClosePlaybackRequest) String() string { func (*ClosePlaybackRequest) ProtoMessage() {} func (x *ClosePlaybackRequest) ProtoReflect() protoreflect.Message { - mi := &file_cloud_replay_proto_msgTypes[7] + mi := &file_cloud_replay_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -430,7 +400,7 @@ func (x *ClosePlaybackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClosePlaybackRequest.ProtoReflect.Descriptor instead. func (*ClosePlaybackRequest) Descriptor() ([]byte, []int) { - return file_cloud_replay_proto_rawDescGZIP(), []int{7} + return file_cloud_replay_proto_rawDescGZIP(), []int{6} } func (x *ClosePlaybackRequest) GetPlaybackId() string { @@ -440,52 +410,96 @@ func (x *ClosePlaybackRequest) GetPlaybackId() string { return "" } +type DeleteReplayRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReplayId string `protobuf:"bytes,1,opt,name=replay_id,json=replayId,proto3" json:"replay_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReplayRequest) Reset() { + *x = DeleteReplayRequest{} + mi := &file_cloud_replay_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReplayRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReplayRequest) ProtoMessage() {} + +func (x *DeleteReplayRequest) ProtoReflect() protoreflect.Message { + mi := &file_cloud_replay_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReplayRequest.ProtoReflect.Descriptor instead. +func (*DeleteReplayRequest) Descriptor() ([]byte, []int) { + return file_cloud_replay_proto_rawDescGZIP(), []int{7} +} + +func (x *DeleteReplayRequest) GetReplayId() string { + if x != nil { + return x.ReplayId + } + return "" +} + var File_cloud_replay_proto protoreflect.FileDescriptor const file_cloud_replay_proto_rawDesc = "" + "\n" + - "\x12cloud_replay.proto\x12\x06replay\x1a\x1bgoogle/protobuf/empty.proto\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"j\n" + + "\x12cloud_replay.proto\x12\x06replay\x1a\x1bgoogle/protobuf/empty.proto\x1a\x14livekit_egress.proto\x1a\x14livekit_models.proto\x1a\x14logger/options.proto\"j\n" + "\x12ListReplaysRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x127\n" + "\n" + "page_token\x18\x02 \x01(\v2\x18.livekit.TokenPaginationR\tpageToken\"\x85\x01\n" + "\x13ListReplaysResponse\x12,\n" + "\areplays\x18\x01 \x03(\v2\x12.replay.ReplayInfoR\areplays\x12@\n" + - "\x0fnext_page_token\x18\x02 \x01(\v2\x18.livekit.TokenPaginationR\rnextPageToken\"\x8f\x01\n" + + "\x0fnext_page_token\x18\x02 \x01(\v2\x18.livekit.TokenPaginationR\rnextPageToken\"\x94\x01\n" + "\n" + "ReplayInfo\x12)\n" + "\treplay_id\x18\x01 \x01(\tB\f\x9a\xec,\breplayIDR\breplayId\x12\x1b\n" + "\troom_name\x18\x02 \x01(\tR\broomName\x12\x1d\n" + "\n" + - "start_time\x18\x03 \x01(\x03R\tstartTime\x12\x1a\n" + - "\bduration\x18\x04 \x01(\x03R\bduration\"@\n" + - "\x13DeleteReplayRequest\x12)\n" + - "\treplay_id\x18\x01 \x01(\tB\f\x9a\xec,\breplayIDR\breplayId\"\x82\x01\n" + + "start_time\x18\x03 \x01(\x03R\tstartTime\x12\x1f\n" + + "\vduration_ms\x18\x04 \x01(\x03R\n" + + "durationMs\"\x87\x01\n" + "\x0fPlaybackRequest\x12)\n" + "\treplay_id\x18\x01 \x01(\tB\f\x9a\xec,\breplayIDR\breplayId\x12#\n" + - "\rplayback_room\x18\x02 \x01(\tR\fplaybackRoom\x12\x1f\n" + - "\vseek_offset\x18\x03 \x01(\x03R\n" + - "seekOffset\"C\n" + + "\rplayback_room\x18\x02 \x01(\tR\fplaybackRoom\x12$\n" + + "\x0eseek_offset_ms\x18\x03 \x01(\x03R\fseekOffsetMs\"C\n" + "\x10PlaybackResponse\x12/\n" + "\vplayback_id\x18\x01 \x01(\tB\x0e\x9a\xec,\n" + "playbackIDR\n" + - "playbackId\"_\n" + + "playbackId\"d\n" + "\vSeekRequest\x12/\n" + "\vplayback_id\x18\x01 \x01(\tB\x0e\x9a\xec,\n" + "playbackIDR\n" + - "playbackId\x12\x1f\n" + - "\vseek_offset\x18\x02 \x01(\x03R\n" + - "seekOffset\"G\n" + + "playbackId\x12$\n" + + "\x0eseek_offset_ms\x18\x02 \x01(\x03R\fseekOffsetMs\"G\n" + "\x14ClosePlaybackRequest\x12/\n" + "\vplayback_id\x18\x01 \x01(\tB\x0e\x9a\xec,\n" + "playbackIDR\n" + - "playbackId2\xc8\x02\n" + + "playbackId\"@\n" + + "\x13DeleteReplayRequest\x12)\n" + + "\treplay_id\x18\x01 \x01(\tB\f\x9a\xec,\breplayIDR\breplayId2\x85\x03\n" + "\x06Replay\x12F\n" + - "\vListReplays\x12\x1a.replay.ListReplaysRequest\x1a\x1b.replay.ListReplaysResponse\x12C\n" + - "\fDeleteReplay\x12\x1b.replay.DeleteReplayRequest\x1a\x16.google.protobuf.Empty\x12=\n" + + "\vListReplays\x12\x1a.replay.ListReplaysRequest\x1a\x1b.replay.ListReplaysResponse\x12=\n" + "\bPlayback\x12\x17.replay.PlaybackRequest\x1a\x18.replay.PlaybackResponse\x123\n" + "\x04Seek\x12\x13.replay.SeekRequest\x1a\x16.google.protobuf.Empty\x12=\n" + - "\x05Close\x12\x1c.replay.ClosePlaybackRequest\x1a\x16.google.protobuf.EmptyBEZ\"github.com/livekit/protocol/replay\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" + "\x05Close\x12\x1c.replay.ClosePlaybackRequest\x1a\x16.google.protobuf.Empty\x12;\n" + + "\x06Export\x12\x1c.livekit.ExportReplayRequest\x1a\x13.livekit.EgressInfo\x12C\n" + + "\fDeleteReplay\x12\x1b.replay.DeleteReplayRequest\x1a\x16.google.protobuf.EmptyBEZ\"github.com/livekit/protocol/replay\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" var ( file_cloud_replay_proto_rawDescOnce sync.Once @@ -501,36 +515,40 @@ func file_cloud_replay_proto_rawDescGZIP() []byte { var file_cloud_replay_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_cloud_replay_proto_goTypes = []any{ - (*ListReplaysRequest)(nil), // 0: replay.ListReplaysRequest - (*ListReplaysResponse)(nil), // 1: replay.ListReplaysResponse - (*ReplayInfo)(nil), // 2: replay.ReplayInfo - (*DeleteReplayRequest)(nil), // 3: replay.DeleteReplayRequest - (*PlaybackRequest)(nil), // 4: replay.PlaybackRequest - (*PlaybackResponse)(nil), // 5: replay.PlaybackResponse - (*SeekRequest)(nil), // 6: replay.SeekRequest - (*ClosePlaybackRequest)(nil), // 7: replay.ClosePlaybackRequest - (*livekit.TokenPagination)(nil), // 8: livekit.TokenPagination - (*emptypb.Empty)(nil), // 9: google.protobuf.Empty + (*ListReplaysRequest)(nil), // 0: replay.ListReplaysRequest + (*ListReplaysResponse)(nil), // 1: replay.ListReplaysResponse + (*ReplayInfo)(nil), // 2: replay.ReplayInfo + (*PlaybackRequest)(nil), // 3: replay.PlaybackRequest + (*PlaybackResponse)(nil), // 4: replay.PlaybackResponse + (*SeekRequest)(nil), // 5: replay.SeekRequest + (*ClosePlaybackRequest)(nil), // 6: replay.ClosePlaybackRequest + (*DeleteReplayRequest)(nil), // 7: replay.DeleteReplayRequest + (*livekit.TokenPagination)(nil), // 8: livekit.TokenPagination + (*livekit.ExportReplayRequest)(nil), // 9: livekit.ExportReplayRequest + (*emptypb.Empty)(nil), // 10: google.protobuf.Empty + (*livekit.EgressInfo)(nil), // 11: livekit.EgressInfo } var file_cloud_replay_proto_depIdxs = []int32{ - 8, // 0: replay.ListReplaysRequest.page_token:type_name -> livekit.TokenPagination - 2, // 1: replay.ListReplaysResponse.replays:type_name -> replay.ReplayInfo - 8, // 2: replay.ListReplaysResponse.next_page_token:type_name -> livekit.TokenPagination - 0, // 3: replay.Replay.ListReplays:input_type -> replay.ListReplaysRequest - 3, // 4: replay.Replay.DeleteReplay:input_type -> replay.DeleteReplayRequest - 4, // 5: replay.Replay.Playback:input_type -> replay.PlaybackRequest - 6, // 6: replay.Replay.Seek:input_type -> replay.SeekRequest - 7, // 7: replay.Replay.Close:input_type -> replay.ClosePlaybackRequest - 1, // 8: replay.Replay.ListReplays:output_type -> replay.ListReplaysResponse - 9, // 9: replay.Replay.DeleteReplay:output_type -> google.protobuf.Empty - 5, // 10: replay.Replay.Playback:output_type -> replay.PlaybackResponse - 9, // 11: replay.Replay.Seek:output_type -> google.protobuf.Empty - 9, // 12: replay.Replay.Close:output_type -> google.protobuf.Empty - 8, // [8:13] is the sub-list for method output_type - 3, // [3:8] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 8, // 0: replay.ListReplaysRequest.page_token:type_name -> livekit.TokenPagination + 2, // 1: replay.ListReplaysResponse.replays:type_name -> replay.ReplayInfo + 8, // 2: replay.ListReplaysResponse.next_page_token:type_name -> livekit.TokenPagination + 0, // 3: replay.Replay.ListReplays:input_type -> replay.ListReplaysRequest + 3, // 4: replay.Replay.Playback:input_type -> replay.PlaybackRequest + 5, // 5: replay.Replay.Seek:input_type -> replay.SeekRequest + 6, // 6: replay.Replay.Close:input_type -> replay.ClosePlaybackRequest + 9, // 7: replay.Replay.Export:input_type -> livekit.ExportReplayRequest + 7, // 8: replay.Replay.DeleteReplay:input_type -> replay.DeleteReplayRequest + 1, // 9: replay.Replay.ListReplays:output_type -> replay.ListReplaysResponse + 4, // 10: replay.Replay.Playback:output_type -> replay.PlaybackResponse + 10, // 11: replay.Replay.Seek:output_type -> google.protobuf.Empty + 10, // 12: replay.Replay.Close:output_type -> google.protobuf.Empty + 11, // 13: replay.Replay.Export:output_type -> livekit.EgressInfo + 10, // 14: replay.Replay.DeleteReplay:output_type -> google.protobuf.Empty + 9, // [9:15] is the sub-list for method output_type + 3, // [3:9] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_cloud_replay_proto_init() } diff --git a/replay/cloud_replay.twirp.go b/replay/cloud_replay.twirp.go index 2500234c5..f9ed64b36 100644 --- a/replay/cloud_replay.twirp.go +++ b/replay/cloud_replay.twirp.go @@ -17,6 +17,7 @@ import twirp "github.com/twitchtv/twirp" import ctxsetters "github.com/twitchtv/twirp/ctxsetters" import google_protobuf "google.golang.org/protobuf/types/known/emptypb" +import livekit2 "github.com/livekit/protocol/livekit" import bytes "bytes" import errors "errors" @@ -35,15 +36,21 @@ const _ = twirp.TwirpPackageMinVersion_8_1_0 // Experimental (not currently available) type Replay interface { + // List replays ListReplays(context.Context, *ListReplaysRequest) (*ListReplaysResponse, error) - DeleteReplay(context.Context, *DeleteReplayRequest) (*google_protobuf.Empty, error) - + // Playback controls Playback(context.Context, *PlaybackRequest) (*PlaybackResponse, error) Seek(context.Context, *SeekRequest) (*google_protobuf.Empty, error) Close(context.Context, *ClosePlaybackRequest) (*google_protobuf.Empty, error) + + // Export a stored replay using egress + Export(context.Context, *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) + + // Delete all stored data + DeleteReplay(context.Context, *DeleteReplayRequest) (*google_protobuf.Empty, error) } // ====================== @@ -52,7 +59,7 @@ type Replay interface { type replayProtobufClient struct { client HTTPClient - urls [5]string + urls [6]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -80,12 +87,13 @@ func NewReplayProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Cl // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(pathPrefix, "replay", "Replay") - urls := [5]string{ + urls := [6]string{ serviceURL + "ListReplays", - serviceURL + "DeleteReplay", serviceURL + "Playback", serviceURL + "Seek", serviceURL + "Close", + serviceURL + "Export", + serviceURL + "DeleteReplay", } return &replayProtobufClient{ @@ -142,26 +150,26 @@ func (c *replayProtobufClient) callListReplays(ctx context.Context, in *ListRepl return out, nil } -func (c *replayProtobufClient) DeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { +func (c *replayProtobufClient) Playback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") - caller := c.callDeleteReplay + ctx = ctxsetters.WithMethodName(ctx, "Playback") + caller := c.callPlayback if c.interceptor != nil { - caller = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + caller = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*DeleteReplayRequest) + typedReq, ok := req.(*PlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") } - return c.callDeleteReplay(ctx, typedReq) + return c.callPlayback(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) + typedResp, ok := resp.(*PlaybackResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") } return typedResp, err } @@ -171,8 +179,8 @@ func (c *replayProtobufClient) DeleteReplay(ctx context.Context, in *DeleteRepla return caller(ctx, in) } -func (c *replayProtobufClient) callDeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) +func (c *replayProtobufClient) callPlayback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { + out := new(PlaybackResponse) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -188,26 +196,26 @@ func (c *replayProtobufClient) callDeleteReplay(ctx context.Context, in *DeleteR return out, nil } -func (c *replayProtobufClient) Playback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { +func (c *replayProtobufClient) Seek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "Playback") - caller := c.callPlayback + ctx = ctxsetters.WithMethodName(ctx, "Seek") + caller := c.callSeek if c.interceptor != nil { - caller = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { + caller = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*PlaybackRequest) + typedReq, ok := req.(*SeekRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") } - return c.callPlayback(ctx, typedReq) + return c.callSeek(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*PlaybackResponse) + typedResp, ok := resp.(*google_protobuf.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") } return typedResp, err } @@ -217,8 +225,8 @@ func (c *replayProtobufClient) Playback(ctx context.Context, in *PlaybackRequest return caller(ctx, in) } -func (c *replayProtobufClient) callPlayback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { - out := new(PlaybackResponse) +func (c *replayProtobufClient) callSeek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -234,20 +242,20 @@ func (c *replayProtobufClient) callPlayback(ctx context.Context, in *PlaybackReq return out, nil } -func (c *replayProtobufClient) Seek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { +func (c *replayProtobufClient) Close(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "Seek") - caller := c.callSeek + ctx = ctxsetters.WithMethodName(ctx, "Close") + caller := c.callClose if c.interceptor != nil { - caller = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { + caller = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*SeekRequest) + typedReq, ok := req.(*ClosePlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") } - return c.callSeek(ctx, typedReq) + return c.callClose(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -263,7 +271,7 @@ func (c *replayProtobufClient) Seek(ctx context.Context, in *SeekRequest) (*goog return caller(ctx, in) } -func (c *replayProtobufClient) callSeek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { +func (c *replayProtobufClient) callClose(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { out := new(google_protobuf.Empty) ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) if err != nil { @@ -280,20 +288,66 @@ func (c *replayProtobufClient) callSeek(ctx context.Context, in *SeekRequest) (* return out, nil } -func (c *replayProtobufClient) Close(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { +func (c *replayProtobufClient) Export(ctx context.Context, in *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "Close") - caller := c.callClose + ctx = ctxsetters.WithMethodName(ctx, "Export") + caller := c.callExport if c.interceptor != nil { - caller = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { + caller = func(ctx context.Context, req *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ClosePlaybackRequest) + typedReq, ok := req.(*livekit2.ExportReplayRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*livekit2.ExportReplayRequest) when calling interceptor") } - return c.callClose(ctx, typedReq) + return c.callExport(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*livekit2.EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*livekit2.EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *replayProtobufClient) callExport(ctx context.Context, in *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { + out := new(livekit2.EgressInfo) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + +func (c *replayProtobufClient) DeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { + ctx = ctxsetters.WithPackageName(ctx, "replay") + ctx = ctxsetters.WithServiceName(ctx, "Replay") + ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") + caller := c.callDeleteReplay + if c.interceptor != nil { + caller = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*DeleteReplayRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + } + return c.callDeleteReplay(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -309,9 +363,9 @@ func (c *replayProtobufClient) Close(ctx context.Context, in *ClosePlaybackReque return caller(ctx, in) } -func (c *replayProtobufClient) callClose(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { +func (c *replayProtobufClient) callDeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { out := new(google_protobuf.Empty) - ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[5], in, out) if err != nil { twerr, ok := err.(twirp.Error) if !ok { @@ -332,7 +386,7 @@ func (c *replayProtobufClient) callClose(ctx context.Context, in *ClosePlaybackR type replayJSONClient struct { client HTTPClient - urls [5]string + urls [6]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -360,12 +414,13 @@ func NewReplayJSONClient(baseURL string, client HTTPClient, opts ...twirp.Client // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(pathPrefix, "replay", "Replay") - urls := [5]string{ + urls := [6]string{ serviceURL + "ListReplays", - serviceURL + "DeleteReplay", serviceURL + "Playback", serviceURL + "Seek", serviceURL + "Close", + serviceURL + "Export", + serviceURL + "DeleteReplay", } return &replayJSONClient{ @@ -422,26 +477,26 @@ func (c *replayJSONClient) callListReplays(ctx context.Context, in *ListReplaysR return out, nil } -func (c *replayJSONClient) DeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { +func (c *replayJSONClient) Playback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") - caller := c.callDeleteReplay + ctx = ctxsetters.WithMethodName(ctx, "Playback") + caller := c.callPlayback if c.interceptor != nil { - caller = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + caller = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*DeleteReplayRequest) + typedReq, ok := req.(*PlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") } - return c.callDeleteReplay(ctx, typedReq) + return c.callPlayback(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) + typedResp, ok := resp.(*PlaybackResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") } return typedResp, err } @@ -451,8 +506,8 @@ func (c *replayJSONClient) DeleteReplay(ctx context.Context, in *DeleteReplayReq return caller(ctx, in) } -func (c *replayJSONClient) callDeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) +func (c *replayJSONClient) callPlayback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { + out := new(PlaybackResponse) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -468,26 +523,26 @@ func (c *replayJSONClient) callDeleteReplay(ctx context.Context, in *DeleteRepla return out, nil } -func (c *replayJSONClient) Playback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { +func (c *replayJSONClient) Seek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "Playback") - caller := c.callPlayback + ctx = ctxsetters.WithMethodName(ctx, "Seek") + caller := c.callSeek if c.interceptor != nil { - caller = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { + caller = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*PlaybackRequest) + typedReq, ok := req.(*SeekRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") } - return c.callPlayback(ctx, typedReq) + return c.callSeek(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*PlaybackResponse) + typedResp, ok := resp.(*google_protobuf.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") } return typedResp, err } @@ -497,8 +552,8 @@ func (c *replayJSONClient) Playback(ctx context.Context, in *PlaybackRequest) (* return caller(ctx, in) } -func (c *replayJSONClient) callPlayback(ctx context.Context, in *PlaybackRequest) (*PlaybackResponse, error) { - out := new(PlaybackResponse) +func (c *replayJSONClient) callSeek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { + out := new(google_protobuf.Empty) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) if err != nil { twerr, ok := err.(twirp.Error) @@ -514,20 +569,20 @@ func (c *replayJSONClient) callPlayback(ctx context.Context, in *PlaybackRequest return out, nil } -func (c *replayJSONClient) Seek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { +func (c *replayJSONClient) Close(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "Seek") - caller := c.callSeek + ctx = ctxsetters.WithMethodName(ctx, "Close") + caller := c.callClose if c.interceptor != nil { - caller = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { + caller = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*SeekRequest) + typedReq, ok := req.(*ClosePlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") } - return c.callSeek(ctx, typedReq) + return c.callClose(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -543,7 +598,7 @@ func (c *replayJSONClient) Seek(ctx context.Context, in *SeekRequest) (*google_p return caller(ctx, in) } -func (c *replayJSONClient) callSeek(ctx context.Context, in *SeekRequest) (*google_protobuf.Empty, error) { +func (c *replayJSONClient) callClose(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { out := new(google_protobuf.Empty) ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) if err != nil { @@ -560,20 +615,66 @@ func (c *replayJSONClient) callSeek(ctx context.Context, in *SeekRequest) (*goog return out, nil } -func (c *replayJSONClient) Close(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { +func (c *replayJSONClient) Export(ctx context.Context, in *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { ctx = ctxsetters.WithPackageName(ctx, "replay") ctx = ctxsetters.WithServiceName(ctx, "Replay") - ctx = ctxsetters.WithMethodName(ctx, "Close") - caller := c.callClose + ctx = ctxsetters.WithMethodName(ctx, "Export") + caller := c.callExport if c.interceptor != nil { - caller = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { + caller = func(ctx context.Context, req *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { resp, err := c.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ClosePlaybackRequest) + typedReq, ok := req.(*livekit2.ExportReplayRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*livekit2.ExportReplayRequest) when calling interceptor") } - return c.callClose(ctx, typedReq) + return c.callExport(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*livekit2.EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*livekit2.EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *replayJSONClient) callExport(ctx context.Context, in *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { + out := new(livekit2.EgressInfo) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + +func (c *replayJSONClient) DeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { + ctx = ctxsetters.WithPackageName(ctx, "replay") + ctx = ctxsetters.WithServiceName(ctx, "Replay") + ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") + caller := c.callDeleteReplay + if c.interceptor != nil { + caller = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*DeleteReplayRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + } + return c.callDeleteReplay(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -589,9 +690,9 @@ func (c *replayJSONClient) Close(ctx context.Context, in *ClosePlaybackRequest) return caller(ctx, in) } -func (c *replayJSONClient) callClose(ctx context.Context, in *ClosePlaybackRequest) (*google_protobuf.Empty, error) { +func (c *replayJSONClient) callDeleteReplay(ctx context.Context, in *DeleteReplayRequest) (*google_protobuf.Empty, error) { out := new(google_protobuf.Empty) - ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[5], in, out) if err != nil { twerr, ok := err.(twirp.Error) if !ok { @@ -706,9 +807,6 @@ func (s *replayServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { case "ListReplays": s.serveListReplays(ctx, resp, req) return - case "DeleteReplay": - s.serveDeleteReplay(ctx, resp, req) - return case "Playback": s.servePlayback(ctx, resp, req) return @@ -718,6 +816,12 @@ func (s *replayServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { case "Close": s.serveClose(ctx, resp, req) return + case "Export": + s.serveExport(ctx, resp, req) + return + case "DeleteReplay": + s.serveDeleteReplay(ctx, resp, req) + return default: msg := fmt.Sprintf("no handler for path %q", req.URL.Path) s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) @@ -905,7 +1009,7 @@ func (s *replayServer) serveListReplaysProtobuf(ctx context.Context, resp http.R callResponseSent(ctx, s.hooks) } -func (s *replayServer) serveDeleteReplay(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) servePlayback(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -913,9 +1017,9 @@ func (s *replayServer) serveDeleteReplay(ctx context.Context, resp http.Response } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveDeleteReplayJSON(ctx, resp, req) + s.servePlaybackJSON(ctx, resp, req) case "application/protobuf": - s.serveDeleteReplayProtobuf(ctx, resp, req) + s.servePlaybackProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -923,9 +1027,9 @@ func (s *replayServer) serveDeleteReplay(ctx context.Context, resp http.Response } } -func (s *replayServer) serveDeleteReplayJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) servePlaybackJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") + ctx = ctxsetters.WithMethodName(ctx, "Playback") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -938,29 +1042,29 @@ func (s *replayServer) serveDeleteReplayJSON(ctx context.Context, resp http.Resp s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(DeleteReplayRequest) + reqContent := new(PlaybackRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Replay.DeleteReplay + handler := s.Replay.Playback if s.interceptor != nil { - handler = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + handler = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*DeleteReplayRequest) + typedReq, ok := req.(*PlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") } - return s.Replay.DeleteReplay(ctx, typedReq) + return s.Replay.Playback(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) + typedResp, ok := resp.(*PlaybackResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") } return typedResp, err } @@ -969,7 +1073,7 @@ func (s *replayServer) serveDeleteReplayJSON(ctx context.Context, resp http.Resp } // Call service method - var respContent *google_protobuf.Empty + var respContent *PlaybackResponse func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -980,7 +1084,7 @@ func (s *replayServer) serveDeleteReplayJSON(ctx context.Context, resp http.Resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling DeleteReplay. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *PlaybackResponse and nil error while calling Playback. nil responses are not supported")) return } @@ -1006,9 +1110,9 @@ func (s *replayServer) serveDeleteReplayJSON(ctx context.Context, resp http.Resp callResponseSent(ctx, s.hooks) } -func (s *replayServer) serveDeleteReplayProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) servePlaybackProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") + ctx = ctxsetters.WithMethodName(ctx, "Playback") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1020,28 +1124,28 @@ func (s *replayServer) serveDeleteReplayProtobuf(ctx context.Context, resp http. s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(DeleteReplayRequest) + reqContent := new(PlaybackRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Replay.DeleteReplay + handler := s.Replay.Playback if s.interceptor != nil { - handler = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + handler = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*DeleteReplayRequest) + typedReq, ok := req.(*PlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") } - return s.Replay.DeleteReplay(ctx, typedReq) + return s.Replay.Playback(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) + typedResp, ok := resp.(*PlaybackResponse) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") } return typedResp, err } @@ -1050,7 +1154,7 @@ func (s *replayServer) serveDeleteReplayProtobuf(ctx context.Context, resp http. } // Call service method - var respContent *google_protobuf.Empty + var respContent *PlaybackResponse func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -1061,7 +1165,7 @@ func (s *replayServer) serveDeleteReplayProtobuf(ctx context.Context, resp http. return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling DeleteReplay. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *PlaybackResponse and nil error while calling Playback. nil responses are not supported")) return } @@ -1085,7 +1189,7 @@ func (s *replayServer) serveDeleteReplayProtobuf(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } -func (s *replayServer) servePlayback(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveSeek(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1093,9 +1197,9 @@ func (s *replayServer) servePlayback(ctx context.Context, resp http.ResponseWrit } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.servePlaybackJSON(ctx, resp, req) + s.serveSeekJSON(ctx, resp, req) case "application/protobuf": - s.servePlaybackProtobuf(ctx, resp, req) + s.serveSeekProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1103,9 +1207,9 @@ func (s *replayServer) servePlayback(ctx context.Context, resp http.ResponseWrit } } -func (s *replayServer) servePlaybackJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveSeekJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "Playback") + ctx = ctxsetters.WithMethodName(ctx, "Seek") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1118,29 +1222,29 @@ func (s *replayServer) servePlaybackJSON(ctx context.Context, resp http.Response s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(PlaybackRequest) + reqContent := new(SeekRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Replay.Playback + handler := s.Replay.Seek if s.interceptor != nil { - handler = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { + handler = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*PlaybackRequest) + typedReq, ok := req.(*SeekRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") } - return s.Replay.Playback(ctx, typedReq) + return s.Replay.Seek(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*PlaybackResponse) + typedResp, ok := resp.(*google_protobuf.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") } return typedResp, err } @@ -1149,7 +1253,7 @@ func (s *replayServer) servePlaybackJSON(ctx context.Context, resp http.Response } // Call service method - var respContent *PlaybackResponse + var respContent *google_protobuf.Empty func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -1160,7 +1264,7 @@ func (s *replayServer) servePlaybackJSON(ctx context.Context, resp http.Response return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *PlaybackResponse and nil error while calling Playback. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Seek. nil responses are not supported")) return } @@ -1186,9 +1290,9 @@ func (s *replayServer) servePlaybackJSON(ctx context.Context, resp http.Response callResponseSent(ctx, s.hooks) } -func (s *replayServer) servePlaybackProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveSeekProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "Playback") + ctx = ctxsetters.WithMethodName(ctx, "Seek") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1200,28 +1304,28 @@ func (s *replayServer) servePlaybackProtobuf(ctx context.Context, resp http.Resp s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(PlaybackRequest) + reqContent := new(SeekRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Replay.Playback + handler := s.Replay.Seek if s.interceptor != nil { - handler = func(ctx context.Context, req *PlaybackRequest) (*PlaybackResponse, error) { + handler = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*PlaybackRequest) + typedReq, ok := req.(*SeekRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*PlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") } - return s.Replay.Playback(ctx, typedReq) + return s.Replay.Seek(ctx, typedReq) }, )(ctx, req) if resp != nil { - typedResp, ok := resp.(*PlaybackResponse) + typedResp, ok := resp.(*google_protobuf.Empty) if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*PlaybackResponse) when calling interceptor") + return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") } return typedResp, err } @@ -1230,7 +1334,7 @@ func (s *replayServer) servePlaybackProtobuf(ctx context.Context, resp http.Resp } // Call service method - var respContent *PlaybackResponse + var respContent *google_protobuf.Empty func() { defer ensurePanicResponses(ctx, resp, s.hooks) respContent, err = handler(ctx, reqContent) @@ -1241,7 +1345,7 @@ func (s *replayServer) servePlaybackProtobuf(ctx context.Context, resp http.Resp return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *PlaybackResponse and nil error while calling Playback. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Seek. nil responses are not supported")) return } @@ -1265,7 +1369,7 @@ func (s *replayServer) servePlaybackProtobuf(ctx context.Context, resp http.Resp callResponseSent(ctx, s.hooks) } -func (s *replayServer) serveSeek(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveClose(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1273,9 +1377,9 @@ func (s *replayServer) serveSeek(ctx context.Context, resp http.ResponseWriter, } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveSeekJSON(ctx, resp, req) + s.serveCloseJSON(ctx, resp, req) case "application/protobuf": - s.serveSeekProtobuf(ctx, resp, req) + s.serveCloseProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1283,9 +1387,9 @@ func (s *replayServer) serveSeek(ctx context.Context, resp http.ResponseWriter, } } -func (s *replayServer) serveSeekJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveCloseJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "Seek") + ctx = ctxsetters.WithMethodName(ctx, "Close") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1298,23 +1402,23 @@ func (s *replayServer) serveSeekJSON(ctx context.Context, resp http.ResponseWrit s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(SeekRequest) + reqContent := new(ClosePlaybackRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Replay.Seek + handler := s.Replay.Close if s.interceptor != nil { - handler = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { + handler = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*SeekRequest) + typedReq, ok := req.(*ClosePlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") } - return s.Replay.Seek(ctx, typedReq) + return s.Replay.Close(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1340,7 +1444,7 @@ func (s *replayServer) serveSeekJSON(ctx context.Context, resp http.ResponseWrit return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Seek. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Close. nil responses are not supported")) return } @@ -1366,9 +1470,9 @@ func (s *replayServer) serveSeekJSON(ctx context.Context, resp http.ResponseWrit callResponseSent(ctx, s.hooks) } -func (s *replayServer) serveSeekProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveCloseProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "Seek") + ctx = ctxsetters.WithMethodName(ctx, "Close") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1380,22 +1484,22 @@ func (s *replayServer) serveSeekProtobuf(ctx context.Context, resp http.Response s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(SeekRequest) + reqContent := new(ClosePlaybackRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Replay.Seek + handler := s.Replay.Close if s.interceptor != nil { - handler = func(ctx context.Context, req *SeekRequest) (*google_protobuf.Empty, error) { + handler = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*SeekRequest) + typedReq, ok := req.(*ClosePlaybackRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*SeekRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") } - return s.Replay.Seek(ctx, typedReq) + return s.Replay.Close(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1421,7 +1525,7 @@ func (s *replayServer) serveSeekProtobuf(ctx context.Context, resp http.Response return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Seek. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Close. nil responses are not supported")) return } @@ -1445,7 +1549,7 @@ func (s *replayServer) serveSeekProtobuf(ctx context.Context, resp http.Response callResponseSent(ctx, s.hooks) } -func (s *replayServer) serveClose(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveExport(ctx context.Context, resp http.ResponseWriter, req *http.Request) { header := req.Header.Get("Content-Type") i := strings.Index(header, ";") if i == -1 { @@ -1453,9 +1557,9 @@ func (s *replayServer) serveClose(ctx context.Context, resp http.ResponseWriter, } switch strings.TrimSpace(strings.ToLower(header[:i])) { case "application/json": - s.serveCloseJSON(ctx, resp, req) + s.serveExportJSON(ctx, resp, req) case "application/protobuf": - s.serveCloseProtobuf(ctx, resp, req) + s.serveExportProtobuf(ctx, resp, req) default: msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) twerr := badRouteError(msg, req.Method, req.URL.Path) @@ -1463,9 +1567,9 @@ func (s *replayServer) serveClose(ctx context.Context, resp http.ResponseWriter, } } -func (s *replayServer) serveCloseJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveExportJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "Close") + ctx = ctxsetters.WithMethodName(ctx, "Export") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1478,23 +1582,203 @@ func (s *replayServer) serveCloseJSON(ctx context.Context, resp http.ResponseWri s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - reqContent := new(ClosePlaybackRequest) + reqContent := new(livekit2.ExportReplayRequest) unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) return } - handler := s.Replay.Close + handler := s.Replay.Export if s.interceptor != nil { - handler = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { + handler = func(ctx context.Context, req *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ClosePlaybackRequest) + typedReq, ok := req.(*livekit2.ExportReplayRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*livekit2.ExportReplayRequest) when calling interceptor") } - return s.Replay.Close(ctx, typedReq) + return s.Replay.Export(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*livekit2.EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*livekit2.EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *livekit2.EgressInfo + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *livekit2.EgressInfo and nil error while calling Export. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} + respBytes, err := marshaler.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *replayServer) serveExportProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "Export") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + buf, err := io.ReadAll(req.Body) + if err != nil { + s.handleRequestBodyError(ctx, resp, "failed to read request body", err) + return + } + reqContent := new(livekit2.ExportReplayRequest) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) + return + } + + handler := s.Replay.Export + if s.interceptor != nil { + handler = func(ctx context.Context, req *livekit2.ExportReplayRequest) (*livekit2.EgressInfo, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*livekit2.ExportReplayRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*livekit2.ExportReplayRequest) when calling interceptor") + } + return s.Replay.Export(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*livekit2.EgressInfo) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*livekit2.EgressInfo) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *livekit2.EgressInfo + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *livekit2.EgressInfo and nil error while calling Export. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *replayServer) serveDeleteReplay(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveDeleteReplayJSON(ctx, resp, req) + case "application/protobuf": + s.serveDeleteReplayProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *replayServer) serveDeleteReplayJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + d := json.NewDecoder(req.Body) + rawReqBody := json.RawMessage{} + if err := d.Decode(&rawReqBody); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + reqContent := new(DeleteReplayRequest) + unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} + if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { + s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) + return + } + + handler := s.Replay.DeleteReplay + if s.interceptor != nil { + handler = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*DeleteReplayRequest) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") + } + return s.Replay.DeleteReplay(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1520,7 +1804,7 @@ func (s *replayServer) serveCloseJSON(ctx context.Context, resp http.ResponseWri return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Close. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling DeleteReplay. nil responses are not supported")) return } @@ -1546,9 +1830,9 @@ func (s *replayServer) serveCloseJSON(ctx context.Context, resp http.ResponseWri callResponseSent(ctx, s.hooks) } -func (s *replayServer) serveCloseProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { +func (s *replayServer) serveDeleteReplayProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { var err error - ctx = ctxsetters.WithMethodName(ctx, "Close") + ctx = ctxsetters.WithMethodName(ctx, "DeleteReplay") ctx, err = callRequestRouted(ctx, s.hooks) if err != nil { s.writeError(ctx, resp, err) @@ -1560,22 +1844,22 @@ func (s *replayServer) serveCloseProtobuf(ctx context.Context, resp http.Respons s.handleRequestBodyError(ctx, resp, "failed to read request body", err) return } - reqContent := new(ClosePlaybackRequest) + reqContent := new(DeleteReplayRequest) if err = proto.Unmarshal(buf, reqContent); err != nil { s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) return } - handler := s.Replay.Close + handler := s.Replay.DeleteReplay if s.interceptor != nil { - handler = func(ctx context.Context, req *ClosePlaybackRequest) (*google_protobuf.Empty, error) { + handler = func(ctx context.Context, req *DeleteReplayRequest) (*google_protobuf.Empty, error) { resp, err := s.interceptor( func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*ClosePlaybackRequest) + typedReq, ok := req.(*DeleteReplayRequest) if !ok { - return nil, twirp.InternalError("failed type assertion req.(*ClosePlaybackRequest) when calling interceptor") + return nil, twirp.InternalError("failed type assertion req.(*DeleteReplayRequest) when calling interceptor") } - return s.Replay.Close(ctx, typedReq) + return s.Replay.DeleteReplay(ctx, typedReq) }, )(ctx, req) if resp != nil { @@ -1601,7 +1885,7 @@ func (s *replayServer) serveCloseProtobuf(ctx context.Context, resp http.Respons return } if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling Close. nil responses are not supported")) + s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling DeleteReplay. nil responses are not supported")) return } @@ -2206,41 +2490,44 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 574 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcf, 0x6e, 0xd3, 0x4e, - 0x10, 0x96, 0xdd, 0xfe, 0xfa, 0x4b, 0xc6, 0x49, 0x8b, 0x36, 0x15, 0x58, 0x0e, 0x88, 0xc8, 0x5c, - 0x82, 0x14, 0xd9, 0x52, 0x7a, 0x40, 0xaa, 0x84, 0x54, 0x35, 0x29, 0x28, 0xa2, 0x82, 0xc8, 0xf4, - 0xc4, 0xc5, 0x72, 0xe2, 0x89, 0x31, 0xb1, 0xbd, 0xc6, 0xde, 0x54, 0xf4, 0x8a, 0xc4, 0x99, 0x7b, - 0x1f, 0x81, 0x27, 0xe1, 0x59, 0x50, 0x1f, 0x02, 0xd9, 0xbb, 0xeb, 0xa4, 0x49, 0x40, 0xe4, 0xe6, - 0xfd, 0xe6, 0xdf, 0xf7, 0xcd, 0x8c, 0x07, 0xc8, 0x34, 0xa2, 0x0b, 0xdf, 0xcd, 0x30, 0x8d, 0xbc, - 0x1b, 0x2b, 0xcd, 0x28, 0xa3, 0xe4, 0x80, 0xbf, 0x8c, 0x76, 0x40, 0x69, 0x10, 0xa1, 0x5d, 0xa2, - 0x93, 0xc5, 0xcc, 0xc6, 0x38, 0x65, 0xc2, 0xc9, 0x38, 0x8e, 0xc2, 0x6b, 0x9c, 0x87, 0xcc, 0x8d, - 0xa9, 0x8f, 0x51, 0x5e, 0xa1, 0x34, 0x08, 0x30, 0xb3, 0x69, 0xca, 0x42, 0x9a, 0x08, 0xd4, 0xfc, - 0x04, 0xe4, 0x32, 0xcc, 0x99, 0x53, 0xa6, 0xcd, 0x1d, 0xfc, 0xbc, 0xc0, 0x9c, 0x91, 0x36, 0xd4, - 0x33, 0x4a, 0x63, 0x37, 0xf1, 0x62, 0xd4, 0x95, 0x8e, 0xd2, 0xad, 0x3b, 0xb5, 0x02, 0x78, 0xeb, - 0xc5, 0x48, 0x5e, 0x00, 0xa4, 0x5e, 0x80, 0x2e, 0xa3, 0x73, 0x4c, 0x74, 0xb5, 0xa3, 0x74, 0xb5, - 0xbe, 0x6e, 0x89, 0x9a, 0xd6, 0x55, 0x81, 0x8e, 0xbd, 0x20, 0x4c, 0xbc, 0xa2, 0x8e, 0x53, 0x2f, - 0x7c, 0x4b, 0xd0, 0xfc, 0xa6, 0x40, 0xeb, 0x5e, 0xb1, 0x3c, 0xa5, 0x49, 0x8e, 0xa4, 0x07, 0xff, - 0x73, 0x59, 0xb9, 0xae, 0x74, 0xf6, 0xba, 0x5a, 0x9f, 0x58, 0x42, 0x34, 0xf7, 0x1c, 0x25, 0x33, - 0xea, 0x48, 0x17, 0x72, 0x06, 0x47, 0x09, 0x7e, 0x61, 0xee, 0x0e, 0x1c, 0x9a, 0x45, 0xc0, 0xb8, - 0xe2, 0xf1, 0x5d, 0x01, 0x58, 0x66, 0x26, 0xcf, 0xa1, 0xce, 0x73, 0xbb, 0xa1, 0xcf, 0xc5, 0x9e, - 0x37, 0x6e, 0xef, 0x7a, 0x35, 0x0e, 0x8e, 0x86, 0x8e, 0xfc, 0xf2, 0xef, 0xf7, 0x45, 0x5d, 0xeb, - 0xcb, 0x13, 0x80, 0x9c, 0x79, 0x19, 0x73, 0x59, 0x18, 0xa3, 0xbe, 0xd7, 0x51, 0xba, 0x7b, 0x4e, - 0xbd, 0x44, 0xae, 0xc2, 0x18, 0x89, 0x01, 0x35, 0x7f, 0x91, 0x95, 0x84, 0xf4, 0xfd, 0xd2, 0x58, - 0xbd, 0xcd, 0x33, 0x68, 0x0d, 0x31, 0x42, 0x86, 0x9c, 0x96, 0x1c, 0xc3, 0xbf, 0x33, 0x33, 0xbf, - 0x2a, 0x70, 0x34, 0x8e, 0xbc, 0x9b, 0x89, 0x37, 0x9d, 0xef, 0x1e, 0x4e, 0x9e, 0x41, 0x33, 0x15, - 0xd1, 0x6e, 0x21, 0x48, 0x88, 0x6b, 0x48, 0xd0, 0xa1, 0x34, 0x26, 0x4f, 0x41, 0xcb, 0x11, 0xe7, - 0x2e, 0x9d, 0xcd, 0x72, 0x64, 0x42, 0x21, 0x14, 0xd0, 0xbb, 0x12, 0x31, 0x07, 0xf0, 0x60, 0xc9, - 0x41, 0x0c, 0xd7, 0x06, 0xad, 0xca, 0x5c, 0xd1, 0x38, 0xbc, 0xbd, 0xeb, 0x81, 0x84, 0x47, 0x43, - 0x67, 0xf9, 0xed, 0x9b, 0x2e, 0x68, 0xef, 0x11, 0x2b, 0x11, 0xbb, 0xc6, 0xaf, 0xb3, 0x54, 0x37, - 0x58, 0xbe, 0x86, 0xe3, 0x41, 0x44, 0x73, 0x5c, 0x6f, 0xd7, 0xae, 0x95, 0xfa, 0x3f, 0x55, 0x38, - 0xe0, 0x03, 0x23, 0xaf, 0x40, 0x5b, 0xd9, 0x6c, 0x62, 0xc8, 0x05, 0xde, 0xfc, 0xb7, 0x8c, 0xf6, - 0x56, 0x9b, 0xe8, 0xd6, 0x00, 0x1a, 0xab, 0x8b, 0x40, 0x2a, 0xe7, 0x2d, 0xeb, 0x61, 0x3c, 0xb4, - 0xf8, 0x15, 0xb0, 0xe4, 0x15, 0xb0, 0x2e, 0x8a, 0x2b, 0x40, 0x5e, 0x42, 0x4d, 0x6a, 0x23, 0x8f, - 0x64, 0x82, 0x35, 0xb5, 0x86, 0xbe, 0x69, 0x10, 0x1c, 0x4e, 0x60, 0xbf, 0x18, 0x00, 0x69, 0x49, - 0x8f, 0x95, 0x71, 0xfc, 0xa5, 0xe6, 0x7f, 0x65, 0x53, 0xc9, 0x63, 0x19, 0xb5, 0xad, 0xc7, 0x7f, - 0x0a, 0x3f, 0xbf, 0xf8, 0x60, 0x06, 0x21, 0xfb, 0xb8, 0x98, 0x58, 0x53, 0x1a, 0xdb, 0xe2, 0x3f, - 0xe6, 0xd7, 0x6d, 0x4a, 0x23, 0x9b, 0xa7, 0xfc, 0xa1, 0x36, 0x2f, 0xc3, 0x6b, 0x7c, 0x13, 0x32, - 0x6b, 0x5c, 0x58, 0x7e, 0xa9, 0x87, 0xe2, 0x7d, 0x7a, 0x5a, 0x02, 0x93, 0x83, 0x32, 0xe2, 0xe4, - 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x8a, 0x6d, 0xf2, 0x3b, 0x05, 0x00, 0x00, + // 611 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x4e, 0xdb, 0x4c, + 0x10, 0x95, 0x13, 0xbe, 0x7c, 0x64, 0x1c, 0xa0, 0xda, 0xa0, 0xd6, 0x32, 0x54, 0x8d, 0xdc, 0x5e, + 0xa4, 0x12, 0xb2, 0x25, 0xb8, 0xa8, 0x44, 0x85, 0x84, 0xf8, 0x69, 0x15, 0x15, 0xda, 0xc8, 0xe5, + 0xaa, 0x37, 0x96, 0x13, 0x4f, 0x5c, 0x37, 0xb6, 0xd7, 0xf5, 0x6e, 0x10, 0x3c, 0x00, 0xea, 0x0b, + 0xf4, 0x8a, 0x47, 0xe8, 0xa3, 0x55, 0x3c, 0x44, 0xe5, 0x5d, 0xaf, 0xf3, 0x43, 0xb8, 0xc8, 0x9d, + 0x7d, 0x66, 0xce, 0xce, 0x99, 0x33, 0xbb, 0x03, 0x64, 0x18, 0xd3, 0x49, 0xe0, 0xe5, 0x98, 0xc5, + 0xfe, 0xad, 0x9d, 0xe5, 0x94, 0x53, 0xd2, 0x90, 0x7f, 0xe6, 0x4e, 0x48, 0x69, 0x18, 0xa3, 0x23, + 0xd0, 0xc1, 0x64, 0xe4, 0x60, 0x92, 0xf1, 0x32, 0xc9, 0xdc, 0x8e, 0xa3, 0x6b, 0x1c, 0x47, 0xdc, + 0xc3, 0x30, 0x47, 0xc6, 0x16, 0xd1, 0x84, 0x06, 0x18, 0x4f, 0x51, 0x1a, 0x86, 0x98, 0x3b, 0x34, + 0xe3, 0x11, 0x4d, 0x4b, 0xd4, 0xfa, 0x01, 0xe4, 0x22, 0x62, 0xdc, 0x15, 0xc5, 0x98, 0x8b, 0x3f, + 0x27, 0xc8, 0x38, 0xd9, 0x81, 0x66, 0x4e, 0x69, 0xe2, 0xa5, 0x7e, 0x82, 0x86, 0xd6, 0xd1, 0xba, + 0x4d, 0x77, 0xbd, 0x00, 0x3e, 0xfb, 0x09, 0x92, 0x77, 0x00, 0x99, 0x1f, 0xa2, 0xc7, 0xe9, 0x18, + 0x53, 0xa3, 0xd6, 0xd1, 0xba, 0xfa, 0xbe, 0x61, 0x97, 0x35, 0xed, 0xab, 0x02, 0xed, 0xfb, 0x61, + 0x94, 0xfa, 0x45, 0x1d, 0xb7, 0x59, 0xe4, 0x0a, 0xd0, 0xba, 0xd3, 0xa0, 0x3d, 0x57, 0x8c, 0x65, + 0x34, 0x65, 0x48, 0xf6, 0xe0, 0x7f, 0xd9, 0x2c, 0x33, 0xb4, 0x4e, 0xbd, 0xab, 0xef, 0x13, 0xbb, + 0xb4, 0x42, 0x66, 0xf6, 0xd2, 0x11, 0x75, 0x55, 0x0a, 0x39, 0x86, 0xad, 0x14, 0x6f, 0xb8, 0xb7, + 0x82, 0x86, 0x8d, 0x82, 0xd0, 0xaf, 0x74, 0xfc, 0xd6, 0x00, 0xa6, 0x27, 0x93, 0xb7, 0xd0, 0x94, + 0x67, 0x7b, 0x51, 0x20, 0x9b, 0x3d, 0x69, 0xdd, 0x3f, 0xec, 0xad, 0x4b, 0xb0, 0x77, 0xe6, 0xaa, + 0xaf, 0x60, 0xde, 0x97, 0xda, 0x82, 0x2f, 0x2f, 0x01, 0x18, 0xf7, 0x73, 0xee, 0xf1, 0x28, 0x41, + 0xa3, 0xde, 0xd1, 0xba, 0x75, 0xb7, 0x29, 0x90, 0xab, 0x28, 0x41, 0xf2, 0x0a, 0xf4, 0x60, 0x92, + 0x0b, 0x41, 0x5e, 0xc2, 0x8c, 0x35, 0x11, 0x07, 0x05, 0x5d, 0x32, 0xeb, 0x97, 0x06, 0x5b, 0xfd, + 0xd8, 0xbf, 0x1d, 0xf8, 0xc3, 0xb1, 0x1a, 0xc4, 0x0a, 0xda, 0x5e, 0xc3, 0x46, 0x56, 0xb2, 0xbd, + 0x42, 0x53, 0xa9, 0xaf, 0xa5, 0x40, 0x97, 0xd2, 0x84, 0xbc, 0x81, 0x4d, 0x86, 0x38, 0xf6, 0xe8, + 0x68, 0xc4, 0x90, 0x17, 0x3a, 0xa4, 0xce, 0x56, 0x81, 0x7e, 0x11, 0xe0, 0x25, 0xb3, 0x4e, 0xe1, + 0xd9, 0x54, 0x48, 0x39, 0x24, 0x07, 0xf4, 0xea, 0xf8, 0x4a, 0xcb, 0xe6, 0xfd, 0xc3, 0x1e, 0x28, + 0xb8, 0x77, 0xe6, 0x4e, 0xbf, 0x03, 0x2b, 0x00, 0xfd, 0x2b, 0x62, 0xd5, 0xc9, 0xaa, 0xfc, 0x25, + 0x52, 0x6b, 0x4b, 0xa4, 0x7e, 0x84, 0xed, 0xd3, 0x98, 0x32, 0x5c, 0x34, 0x6e, 0x65, 0xb9, 0xc7, + 0xd0, 0x3e, 0xc3, 0x18, 0x39, 0xca, 0x9b, 0xb1, 0xfa, 0x00, 0xf6, 0xef, 0xea, 0xd0, 0x90, 0x64, + 0xf2, 0x01, 0xf4, 0x99, 0x8b, 0x4e, 0x4c, 0x75, 0x9f, 0x1f, 0x3f, 0x35, 0x73, 0x67, 0x69, 0xac, + 0x34, 0xfd, 0x08, 0xd6, 0x55, 0x63, 0xe4, 0x85, 0x4a, 0x5c, 0x68, 0xd5, 0x34, 0x1e, 0x07, 0x4a, + 0xfa, 0x01, 0xac, 0x15, 0x23, 0x20, 0x6d, 0x95, 0x31, 0x33, 0x10, 0xf3, 0xb9, 0x2d, 0x37, 0x8b, + 0xad, 0x36, 0x8b, 0x7d, 0x5e, 0x6c, 0x16, 0x72, 0x04, 0xff, 0x09, 0x47, 0xc9, 0xae, 0x62, 0x2d, + 0x33, 0xf8, 0x49, 0xfa, 0x7b, 0x68, 0x9c, 0xdf, 0x64, 0x34, 0xe7, 0x64, 0xb7, 0x7a, 0x8f, 0x12, + 0x98, 0x33, 0xd6, 0x6c, 0x4f, 0xa3, 0x62, 0x77, 0x89, 0xa7, 0x78, 0x0a, 0xad, 0xd9, 0x21, 0x90, + 0xca, 0x9c, 0x25, 0xa3, 0x79, 0x4a, 0xc1, 0xc9, 0xf9, 0x37, 0x2b, 0x8c, 0xf8, 0xf7, 0xc9, 0xc0, + 0x1e, 0xd2, 0xc4, 0x29, 0xab, 0xc8, 0xfd, 0x39, 0xa4, 0xb1, 0x23, 0x4f, 0xfc, 0x53, 0xdb, 0xb8, + 0x88, 0xae, 0xf1, 0x53, 0xc4, 0xed, 0x7e, 0x11, 0xf9, 0x5b, 0xdb, 0x2c, 0xff, 0x0f, 0x0f, 0x05, + 0x30, 0x68, 0x08, 0xc6, 0xc1, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x5e, 0xa3, 0x2b, 0x9d, + 0x05, 0x00, 0x00, } diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index c9f9225ca..9eac155f9 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -46,6 +46,8 @@ type StartEgressRequest struct { // // Types that are valid to be assigned to Request: // + // *StartEgressRequest_Egress + // *StartEgressRequest_Replay // *StartEgressRequest_RoomComposite // *StartEgressRequest_Web // *StartEgressRequest_Participant @@ -108,6 +110,25 @@ func (x *StartEgressRequest) GetRequest() isStartEgressRequest_Request { return nil } +func (x *StartEgressRequest) GetEgress() *livekit.StartEgressRequest { + if x != nil { + if x, ok := x.Request.(*StartEgressRequest_Egress); ok { + return x.Egress + } + } + return nil +} + +func (x *StartEgressRequest) GetReplay() *livekit.ExportReplayRequest { + if x != nil { + if x, ok := x.Request.(*StartEgressRequest_Replay); ok { + return x.Replay + } + } + return nil +} + +// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetRoomComposite() *livekit.RoomCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_RoomComposite); ok { @@ -117,6 +138,7 @@ func (x *StartEgressRequest) GetRoomComposite() *livekit.RoomCompositeEgressRequ return nil } +// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetWeb() *livekit.WebEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_Web); ok { @@ -126,6 +148,7 @@ func (x *StartEgressRequest) GetWeb() *livekit.WebEgressRequest { return nil } +// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetParticipant() *livekit.ParticipantEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_Participant); ok { @@ -135,6 +158,7 @@ func (x *StartEgressRequest) GetParticipant() *livekit.ParticipantEgressRequest return nil } +// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetTrackComposite() *livekit.TrackCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_TrackComposite); ok { @@ -144,6 +168,7 @@ func (x *StartEgressRequest) GetTrackComposite() *livekit.TrackCompositeEgressRe return nil } +// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetTrack() *livekit.TrackEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_Track); ok { @@ -199,26 +224,45 @@ type isStartEgressRequest_Request interface { isStartEgressRequest_Request() } +type StartEgressRequest_Egress struct { + Egress *livekit.StartEgressRequest `protobuf:"bytes,16,opt,name=egress,proto3,oneof"` +} + +type StartEgressRequest_Replay struct { + Replay *livekit.ExportReplayRequest `protobuf:"bytes,17,opt,name=replay,proto3,oneof"` +} + type StartEgressRequest_RoomComposite struct { + // --- deprecated --- + // + // Deprecated: Marked as deprecated in rpc/egress.proto. RoomComposite *livekit.RoomCompositeEgressRequest `protobuf:"bytes,5,opt,name=room_composite,json=roomComposite,proto3,oneof"` } type StartEgressRequest_Web struct { + // Deprecated: Marked as deprecated in rpc/egress.proto. Web *livekit.WebEgressRequest `protobuf:"bytes,11,opt,name=web,proto3,oneof"` } type StartEgressRequest_Participant struct { + // Deprecated: Marked as deprecated in rpc/egress.proto. Participant *livekit.ParticipantEgressRequest `protobuf:"bytes,13,opt,name=participant,proto3,oneof"` } type StartEgressRequest_TrackComposite struct { + // Deprecated: Marked as deprecated in rpc/egress.proto. TrackComposite *livekit.TrackCompositeEgressRequest `protobuf:"bytes,6,opt,name=track_composite,json=trackComposite,proto3,oneof"` } type StartEgressRequest_Track struct { + // Deprecated: Marked as deprecated in rpc/egress.proto. Track *livekit.TrackEgressRequest `protobuf:"bytes,7,opt,name=track,proto3,oneof"` } +func (*StartEgressRequest_Egress) isStartEgressRequest_Request() {} + +func (*StartEgressRequest_Replay) isStartEgressRequest_Request() {} + func (*StartEgressRequest_RoomComposite) isStartEgressRequest_Request() {} func (*StartEgressRequest_Web) isStartEgressRequest_Request() {} @@ -313,14 +357,16 @@ var File_rpc_egress_proto protoreflect.FileDescriptor const file_rpc_egress_proto_rawDesc = "" + "\n" + - "\x10rpc/egress.proto\x12\x03rpc\x1a\roptions.proto\x1a\x14logger/options.proto\x1a\x14livekit_egress.proto\"\xe4\x04\n" + + "\x10rpc/egress.proto\x12\x03rpc\x1a\roptions.proto\x1a\x14logger/options.proto\x1a\x14livekit_egress.proto\"\xe7\x05\n" + "\x12StartEgressRequest\x12)\n" + - "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12L\n" + - "\x0eroom_composite\x18\x05 \x01(\v2#.livekit.RoomCompositeEgressRequestH\x00R\rroomComposite\x12-\n" + - "\x03web\x18\v \x01(\v2\x19.livekit.WebEgressRequestH\x00R\x03web\x12E\n" + - "\vparticipant\x18\r \x01(\v2!.livekit.ParticipantEgressRequestH\x00R\vparticipant\x12O\n" + - "\x0ftrack_composite\x18\x06 \x01(\v2$.livekit.TrackCompositeEgressRequestH\x00R\x0etrackComposite\x123\n" + - "\x05track\x18\a \x01(\v2\x1b.livekit.TrackEgressRequestH\x00R\x05track\x12#\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x125\n" + + "\x06egress\x18\x10 \x01(\v2\x1b.livekit.StartEgressRequestH\x00R\x06egress\x126\n" + + "\x06replay\x18\x11 \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12P\n" + + "\x0eroom_composite\x18\x05 \x01(\v2#.livekit.RoomCompositeEgressRequestB\x02\x18\x01H\x00R\rroomComposite\x121\n" + + "\x03web\x18\v \x01(\v2\x19.livekit.WebEgressRequestB\x02\x18\x01H\x00R\x03web\x12I\n" + + "\vparticipant\x18\r \x01(\v2!.livekit.ParticipantEgressRequestB\x02\x18\x01H\x00R\vparticipant\x12S\n" + + "\x0ftrack_composite\x18\x06 \x01(\v2$.livekit.TrackCompositeEgressRequestB\x02\x18\x01H\x00R\x0etrackComposite\x127\n" + + "\x05track\x18\a \x01(\v2\x1b.livekit.TrackEgressRequestB\x02\x18\x01H\x00R\x05track\x12#\n" + "\aroom_id\x18\x03 \x01(\tB\n" + "\x9a\xec,\x06roomIDR\x06roomId\x12\x1a\n" + "\x05token\x18\b \x01(\tB\x04\x88\xec,\x01R\x05token\x12\x15\n" + @@ -360,34 +406,38 @@ var file_rpc_egress_proto_goTypes = []any{ (*StartEgressRequest)(nil), // 0: rpc.StartEgressRequest (*ListActiveEgressRequest)(nil), // 1: rpc.ListActiveEgressRequest (*ListActiveEgressResponse)(nil), // 2: rpc.ListActiveEgressResponse - (*livekit.RoomCompositeEgressRequest)(nil), // 3: livekit.RoomCompositeEgressRequest - (*livekit.WebEgressRequest)(nil), // 4: livekit.WebEgressRequest - (*livekit.ParticipantEgressRequest)(nil), // 5: livekit.ParticipantEgressRequest - (*livekit.TrackCompositeEgressRequest)(nil), // 6: livekit.TrackCompositeEgressRequest - (*livekit.TrackEgressRequest)(nil), // 7: livekit.TrackEgressRequest - (*livekit.UpdateStreamRequest)(nil), // 8: livekit.UpdateStreamRequest - (*livekit.StopEgressRequest)(nil), // 9: livekit.StopEgressRequest - (*livekit.EgressInfo)(nil), // 10: livekit.EgressInfo + (*livekit.StartEgressRequest)(nil), // 3: livekit.StartEgressRequest + (*livekit.ExportReplayRequest)(nil), // 4: livekit.ExportReplayRequest + (*livekit.RoomCompositeEgressRequest)(nil), // 5: livekit.RoomCompositeEgressRequest + (*livekit.WebEgressRequest)(nil), // 6: livekit.WebEgressRequest + (*livekit.ParticipantEgressRequest)(nil), // 7: livekit.ParticipantEgressRequest + (*livekit.TrackCompositeEgressRequest)(nil), // 8: livekit.TrackCompositeEgressRequest + (*livekit.TrackEgressRequest)(nil), // 9: livekit.TrackEgressRequest + (*livekit.UpdateStreamRequest)(nil), // 10: livekit.UpdateStreamRequest + (*livekit.StopEgressRequest)(nil), // 11: livekit.StopEgressRequest + (*livekit.EgressInfo)(nil), // 12: livekit.EgressInfo } var file_rpc_egress_proto_depIdxs = []int32{ - 3, // 0: rpc.StartEgressRequest.room_composite:type_name -> livekit.RoomCompositeEgressRequest - 4, // 1: rpc.StartEgressRequest.web:type_name -> livekit.WebEgressRequest - 5, // 2: rpc.StartEgressRequest.participant:type_name -> livekit.ParticipantEgressRequest - 6, // 3: rpc.StartEgressRequest.track_composite:type_name -> livekit.TrackCompositeEgressRequest - 7, // 4: rpc.StartEgressRequest.track:type_name -> livekit.TrackEgressRequest - 0, // 5: rpc.EgressInternal.StartEgress:input_type -> rpc.StartEgressRequest - 1, // 6: rpc.EgressInternal.ListActiveEgress:input_type -> rpc.ListActiveEgressRequest - 8, // 7: rpc.EgressHandler.UpdateStream:input_type -> livekit.UpdateStreamRequest - 9, // 8: rpc.EgressHandler.StopEgress:input_type -> livekit.StopEgressRequest - 10, // 9: rpc.EgressInternal.StartEgress:output_type -> livekit.EgressInfo - 2, // 10: rpc.EgressInternal.ListActiveEgress:output_type -> rpc.ListActiveEgressResponse - 10, // 11: rpc.EgressHandler.UpdateStream:output_type -> livekit.EgressInfo - 10, // 12: rpc.EgressHandler.StopEgress:output_type -> livekit.EgressInfo - 9, // [9:13] is the sub-list for method output_type - 5, // [5:9] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 3, // 0: rpc.StartEgressRequest.egress:type_name -> livekit.StartEgressRequest + 4, // 1: rpc.StartEgressRequest.replay:type_name -> livekit.ExportReplayRequest + 5, // 2: rpc.StartEgressRequest.room_composite:type_name -> livekit.RoomCompositeEgressRequest + 6, // 3: rpc.StartEgressRequest.web:type_name -> livekit.WebEgressRequest + 7, // 4: rpc.StartEgressRequest.participant:type_name -> livekit.ParticipantEgressRequest + 8, // 5: rpc.StartEgressRequest.track_composite:type_name -> livekit.TrackCompositeEgressRequest + 9, // 6: rpc.StartEgressRequest.track:type_name -> livekit.TrackEgressRequest + 0, // 7: rpc.EgressInternal.StartEgress:input_type -> rpc.StartEgressRequest + 1, // 8: rpc.EgressInternal.ListActiveEgress:input_type -> rpc.ListActiveEgressRequest + 10, // 9: rpc.EgressHandler.UpdateStream:input_type -> livekit.UpdateStreamRequest + 11, // 10: rpc.EgressHandler.StopEgress:input_type -> livekit.StopEgressRequest + 12, // 11: rpc.EgressInternal.StartEgress:output_type -> livekit.EgressInfo + 2, // 12: rpc.EgressInternal.ListActiveEgress:output_type -> rpc.ListActiveEgressResponse + 12, // 13: rpc.EgressHandler.UpdateStream:output_type -> livekit.EgressInfo + 12, // 14: rpc.EgressHandler.StopEgress:output_type -> livekit.EgressInfo + 11, // [11:15] is the sub-list for method output_type + 7, // [7:11] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_rpc_egress_proto_init() } @@ -396,6 +446,8 @@ func file_rpc_egress_proto_init() { return } file_rpc_egress_proto_msgTypes[0].OneofWrappers = []any{ + (*StartEgressRequest_Egress)(nil), + (*StartEgressRequest_Replay)(nil), (*StartEgressRequest_RoomComposite)(nil), (*StartEgressRequest_Web)(nil), (*StartEgressRequest_Participant)(nil), diff --git a/rpc/egress.psrpc.go b/rpc/egress.psrpc.go index 582e894f5..67275f9a3 100644 --- a/rpc/egress.psrpc.go +++ b/rpc/egress.psrpc.go @@ -312,43 +312,46 @@ func (UnimplementedEgressHandlerServer) StopEgress(context.Context, *livekit4.St } var psrpcFileDescriptor2 = []byte{ - // 601 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xd1, 0x4e, 0xdb, 0x30, - 0x14, 0x86, 0x67, 0x4a, 0x0b, 0x3d, 0xa5, 0xa5, 0xf2, 0x98, 0x30, 0x1d, 0x88, 0x52, 0x76, 0x91, - 0x49, 0xac, 0x45, 0x70, 0xb5, 0xbb, 0xad, 0x50, 0x8d, 0x4a, 0x48, 0x9b, 0xc2, 0xd0, 0xa4, 0xed, - 0x22, 0x4a, 0x1d, 0xaf, 0xb3, 0x9a, 0xc4, 0x9e, 0xed, 0x80, 0xf6, 0x06, 0xe3, 0x15, 0xb8, 0xdb, - 0x2b, 0x70, 0xb1, 0x27, 0xda, 0x25, 0x0f, 0x31, 0xd5, 0x69, 0x43, 0x5a, 0xd4, 0x69, 0x57, 0x6d, - 0xfe, 0xef, 0xfc, 0xbf, 0xcf, 0x71, 0x8e, 0x02, 0x75, 0x25, 0x69, 0x87, 0x0d, 0x15, 0xd3, 0xba, - 0x2d, 0x95, 0x30, 0x02, 0x17, 0x94, 0xa4, 0x8d, 0xaa, 0x90, 0x86, 0x8b, 0x78, 0xa2, 0x35, 0x36, - 0x42, 0x31, 0x1c, 0x32, 0xd5, 0x99, 0x57, 0xf9, 0x15, 0x1b, 0x71, 0xe3, 0xe5, 0xfd, 0xad, 0x3f, - 0xcb, 0x80, 0x2f, 0x8c, 0xaf, 0x4c, 0xcf, 0xaa, 0x2e, 0xfb, 0x9e, 0x30, 0x6d, 0xf0, 0x4b, 0x28, - 0xa7, 0x65, 0x1e, 0x0f, 0x08, 0x6a, 0x22, 0xa7, 0xdc, 0x5d, 0xbb, 0xbd, 0x3f, 0x58, 0x4d, 0xc5, - 0xfe, 0xa9, 0x3b, 0xfd, 0x17, 0xe0, 0x73, 0xa8, 0x29, 0x21, 0x22, 0x8f, 0x8a, 0x48, 0x0a, 0xcd, - 0x0d, 0x23, 0xc5, 0x26, 0x72, 0x2a, 0x47, 0xfb, 0xed, 0xc9, 0x81, 0x6d, 0x57, 0x88, 0xe8, 0x64, - 0x4a, 0x67, 0xce, 0x39, 0x7b, 0xe2, 0x56, 0x55, 0x9e, 0xe2, 0x57, 0x50, 0xb8, 0x66, 0x03, 0x52, - 0xb1, 0x11, 0x5b, 0x59, 0xc4, 0x27, 0x36, 0x98, 0x37, 0x8e, 0xeb, 0x70, 0x0f, 0x2a, 0xd2, 0x57, - 0x86, 0x53, 0x2e, 0xfd, 0xd8, 0x90, 0xaa, 0xb5, 0xed, 0x65, 0xb6, 0x0f, 0x0f, 0x6c, 0xde, 0x9e, - 0xf7, 0xe1, 0xf7, 0xb0, 0x6e, 0x94, 0x4f, 0x47, 0xb9, 0x21, 0x4a, 0x36, 0xea, 0x45, 0x16, 0xf5, - 0x71, 0xcc, 0x17, 0x4e, 0x51, 0x33, 0x33, 0x18, 0x1f, 0x43, 0xd1, 0x2a, 0x64, 0xc5, 0xc6, 0x3c, - 0x9f, 0x8d, 0x99, 0x77, 0xa7, 0xb5, 0x78, 0x1f, 0x56, 0xec, 0x4d, 0xf2, 0x80, 0x14, 0xec, 0x95, - 0xc3, 0xed, 0xfd, 0x41, 0x69, 0x2c, 0xf5, 0x4f, 0xdd, 0xf4, 0x37, 0xc0, 0x0d, 0x28, 0x1a, 0x31, - 0x62, 0x31, 0x59, 0xb5, 0x25, 0xcb, 0x3f, 0xef, 0x0f, 0x90, 0x9b, 0x4a, 0xf8, 0x19, 0x94, 0xae, - 0xb5, 0x97, 0xa8, 0x90, 0x94, 0xc7, 0xd0, 0x2d, 0x5e, 0xeb, 0x4b, 0x15, 0xe2, 0x43, 0xd8, 0xa0, - 0xa1, 0x48, 0x02, 0x6f, 0xe0, 0xd3, 0x51, 0x22, 0x3d, 0x16, 0xfb, 0x83, 0x90, 0x05, 0x04, 0x9a, - 0xc8, 0x59, 0x75, 0xb1, 0x65, 0x5d, 0x8b, 0x7a, 0x29, 0xc1, 0xfb, 0x50, 0x65, 0xda, 0xf0, 0xc8, - 0x37, 0x2c, 0xf0, 0xa8, 0x4c, 0x48, 0xad, 0x89, 0x1c, 0xe4, 0xae, 0x65, 0xe2, 0x89, 0x4c, 0xf0, - 0x2e, 0x54, 0x14, 0x33, 0xea, 0x87, 0x47, 0x45, 0x12, 0x1b, 0xb2, 0xde, 0x44, 0x4e, 0xd1, 0x05, - 0x2b, 0x9d, 0x8c, 0x95, 0x6e, 0x19, 0x56, 0x54, 0x3a, 0x63, 0x6b, 0x0b, 0x36, 0xcf, 0xb9, 0x36, - 0x6f, 0xa9, 0xe1, 0x57, 0xb3, 0x97, 0xd7, 0x7a, 0x0d, 0xe4, 0x31, 0xd2, 0x52, 0xc4, 0x9a, 0xe1, - 0x1d, 0x80, 0x6c, 0x0d, 0x35, 0x41, 0xcd, 0x82, 0x53, 0x76, 0xcb, 0xd3, 0xcd, 0xd3, 0x47, 0xbf, - 0x11, 0xd4, 0x52, 0x47, 0x3f, 0x36, 0x4c, 0xc5, 0x7e, 0x88, 0xdf, 0x41, 0x25, 0xb7, 0xce, 0x78, - 0xb3, 0xad, 0x24, 0x6d, 0x3f, 0x5e, 0xf0, 0xc6, 0xd3, 0xec, 0x8d, 0x4c, 0x03, 0xbe, 0x8a, 0x16, - 0xdc, 0xdd, 0xa0, 0x52, 0x1d, 0xbd, 0x41, 0x87, 0x08, 0x7f, 0x81, 0xfa, 0x7c, 0x5b, 0x78, 0xdb, - 0xa6, 0x2d, 0x18, 0xa4, 0xb1, 0xb3, 0x80, 0xa6, 0xb3, 0x64, 0xe1, 0x4b, 0x0e, 0x3a, 0xfa, 0x85, - 0xa0, 0x9a, 0xe2, 0x33, 0x3f, 0x0e, 0x42, 0xa6, 0x70, 0x1f, 0xd6, 0x2e, 0x65, 0xe0, 0x1b, 0x76, - 0x61, 0x14, 0xf3, 0x23, 0xbc, 0x9d, 0xf5, 0x97, 0x97, 0xff, 0xd9, 0x7d, 0xe9, 0xee, 0x06, 0x2d, - 0xd5, 0x11, 0xee, 0x01, 0x5c, 0x18, 0x21, 0x27, 0x3d, 0x37, 0xb2, 0xd2, 0x07, 0xf1, 0x7f, 0x62, - 0xba, 0x7b, 0x9f, 0x77, 0x87, 0xdc, 0x7c, 0x4b, 0x06, 0x6d, 0x2a, 0xa2, 0xce, 0xa4, 0xb0, 0x63, - 0xbf, 0x1a, 0x54, 0x84, 0x1d, 0x25, 0xe9, 0xa0, 0x64, 0x9f, 0x8e, 0xff, 0x06, 0x00, 0x00, 0xff, - 0xff, 0x86, 0x81, 0x14, 0x7a, 0x97, 0x04, 0x00, 0x00, + // 645 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcf, 0x4e, 0xdb, 0x3e, + 0x1c, 0xc7, 0xf4, 0xd7, 0x40, 0xbf, 0xa5, 0xa5, 0x3f, 0x8f, 0x09, 0xd3, 0x81, 0x28, 0x65, 0x87, + 0x4c, 0x42, 0x2d, 0x63, 0xda, 0xa6, 0xdd, 0xb6, 0x42, 0x35, 0x2a, 0xed, 0x80, 0xdc, 0xa1, 0x49, + 0xdb, 0x21, 0x4a, 0x1d, 0xaf, 0x8b, 0x9a, 0xc6, 0x9e, 0xe3, 0xc0, 0x78, 0x83, 0xf1, 0x0a, 0xdc, + 0xf6, 0x0a, 0x1c, 0xf6, 0x4a, 0xbb, 0xf0, 0x10, 0x53, 0x9d, 0x34, 0x04, 0x28, 0x68, 0xa7, 0x38, + 0x9f, 0x7f, 0xf6, 0xd7, 0xf6, 0xd7, 0x50, 0x53, 0x92, 0xb5, 0xf9, 0x50, 0xf1, 0x28, 0x6a, 0x49, + 0x25, 0xb4, 0xc0, 0x05, 0x25, 0x59, 0xbd, 0x22, 0xa4, 0xf6, 0x45, 0x98, 0x62, 0xf5, 0x95, 0x40, + 0x0c, 0x87, 0x5c, 0xb5, 0x6f, 0xa3, 0xfe, 0x09, 0x1f, 0xf9, 0xda, 0xc9, 0xfb, 0x9b, 0x7f, 0x8a, + 0x80, 0xfb, 0xda, 0x55, 0xba, 0x6b, 0x50, 0xca, 0xbf, 0xc7, 0x3c, 0xd2, 0xf8, 0x19, 0x94, 0x12, + 0x99, 0xe3, 0x7b, 0x04, 0x35, 0x90, 0x5d, 0xea, 0x2c, 0x5d, 0x5c, 0xed, 0x2c, 0x26, 0x60, 0xef, + 0x80, 0x4e, 0x47, 0x1e, 0x7e, 0x09, 0x56, 0x32, 0x26, 0xb5, 0x06, 0xb2, 0xcb, 0x7b, 0x4f, 0x5a, + 0xe9, 0x44, 0xad, 0xbb, 0xb9, 0x87, 0x73, 0x34, 0x15, 0xe3, 0x57, 0x60, 0x29, 0x2e, 0x03, 0xf7, + 0x8c, 0xfc, 0x6f, 0x6c, 0xeb, 0x99, 0xad, 0xfb, 0x43, 0x0a, 0xa5, 0xa9, 0x21, 0x73, 0xbe, 0x44, + 0x8d, 0x8f, 0xa0, 0xaa, 0x84, 0x18, 0x3b, 0x4c, 0x8c, 0xa5, 0x88, 0x7c, 0xcd, 0x49, 0xd1, 0xf8, + 0xb7, 0x33, 0x3f, 0x15, 0x62, 0xbc, 0x3f, 0x65, 0x6f, 0x4c, 0xdf, 0x99, 0x27, 0xe8, 0x70, 0x8e, + 0x56, 0x54, 0x5e, 0x81, 0x9f, 0x43, 0xe1, 0x94, 0x0f, 0x48, 0xd9, 0xc4, 0xac, 0x65, 0x31, 0x9f, + 0xf8, 0x60, 0x96, 0x79, 0xa2, 0xc5, 0x3d, 0x28, 0x4b, 0x57, 0x69, 0x9f, 0xf9, 0xd2, 0x0d, 0x35, + 0xa9, 0x18, 0xeb, 0x56, 0x66, 0x3d, 0xba, 0xe6, 0x66, 0x45, 0xe4, 0xbd, 0xb8, 0x0f, 0xcb, 0x5a, + 0xb9, 0x6c, 0x94, 0x2b, 0xc8, 0x32, 0x71, 0x4f, 0xb3, 0xb8, 0x8f, 0x13, 0xfe, 0xc1, 0x8a, 0xaa, + 0xfa, 0x86, 0x04, 0xbf, 0x86, 0xa2, 0x41, 0xc8, 0xc2, 0xad, 0x23, 0x31, 0x51, 0xb3, 0x12, 0x12, + 0x3d, 0xde, 0x86, 0x05, 0xb3, 0xbb, 0xbe, 0x47, 0x0a, 0xe6, 0xd4, 0xe1, 0xe2, 0x6a, 0xc7, 0x9a, + 0x40, 0xbd, 0x03, 0x9a, 0x7c, 0x3d, 0x5c, 0x87, 0xa2, 0x16, 0x23, 0x1e, 0x92, 0x45, 0x23, 0xf9, + 0xef, 0xe7, 0xd5, 0x0e, 0xa2, 0x09, 0x84, 0x1f, 0x83, 0x75, 0x1a, 0x39, 0xb1, 0x0a, 0x48, 0x69, + 0x42, 0xd2, 0xe2, 0x69, 0x74, 0xac, 0x02, 0xbc, 0x0b, 0x2b, 0x2c, 0x10, 0xb1, 0xe7, 0x0c, 0x5c, + 0x36, 0x8a, 0xa5, 0xc3, 0x43, 0x77, 0x10, 0x70, 0x8f, 0x40, 0x03, 0xd9, 0x8b, 0x14, 0x1b, 0xae, + 0x63, 0xa8, 0x6e, 0xc2, 0xe0, 0x6d, 0xa8, 0xf0, 0x48, 0xfb, 0x63, 0x57, 0x73, 0xcf, 0x61, 0x32, + 0x26, 0xd5, 0x06, 0xb2, 0x11, 0x5d, 0xca, 0xc0, 0x7d, 0x19, 0xe3, 0x4d, 0x28, 0x2b, 0xae, 0xd5, + 0x99, 0xc3, 0x44, 0x1c, 0x6a, 0xb2, 0xdc, 0x40, 0x76, 0x91, 0x82, 0x81, 0xf6, 0x27, 0x48, 0xa7, + 0x04, 0x0b, 0x2a, 0xa9, 0xb3, 0xb9, 0x06, 0xab, 0x1f, 0xfc, 0x48, 0xbf, 0x63, 0xda, 0x3f, 0xb9, + 0xb9, 0x89, 0xcd, 0x37, 0x40, 0xee, 0x52, 0x91, 0x14, 0x61, 0xc4, 0xf1, 0x06, 0x40, 0xd6, 0x09, + 0x11, 0x41, 0x8d, 0x82, 0x5d, 0xa2, 0xa5, 0xe9, 0xe5, 0x8f, 0xf6, 0x7e, 0x23, 0xa8, 0x26, 0x8e, + 0x5e, 0xa8, 0xb9, 0x0a, 0xdd, 0x00, 0xbf, 0x87, 0x72, 0xee, 0xe6, 0xe3, 0xd5, 0x96, 0x92, 0x6c, + 0x46, 0x2f, 0xd4, 0x1f, 0x5d, 0xdf, 0xf8, 0x34, 0xe0, 0xab, 0x68, 0xc2, 0xe5, 0x39, 0xb2, 0x6a, + 0xe8, 0x2d, 0xda, 0x45, 0xf8, 0x0b, 0xd4, 0x6e, 0x2f, 0x0b, 0xaf, 0x9b, 0xb4, 0x7b, 0x0a, 0xa9, + 0x6f, 0xdc, 0xc3, 0x26, 0xb5, 0x64, 0xe1, 0xf3, 0x36, 0xda, 0xfb, 0x85, 0xa0, 0x92, 0xd0, 0x87, + 0x6e, 0xe8, 0x05, 0x5c, 0xe1, 0x1e, 0x2c, 0x1d, 0x4b, 0xcf, 0xd5, 0xbc, 0xaf, 0x15, 0x77, 0xc7, + 0xf8, 0xba, 0x23, 0xf3, 0xf0, 0x83, 0xab, 0xb7, 0x2e, 0xcf, 0xd1, 0x7c, 0x0d, 0xe1, 0x2e, 0x40, + 0x5f, 0x0b, 0x99, 0xae, 0xb9, 0x9e, 0x7b, 0x11, 0xa6, 0xe0, 0xbf, 0xc4, 0x74, 0xb6, 0x3e, 0x6f, + 0x0e, 0x7d, 0xfd, 0x2d, 0x1e, 0xb4, 0x98, 0x18, 0xb7, 0x53, 0x61, 0xdb, 0x3c, 0x5c, 0x4c, 0x04, + 0x6d, 0x25, 0xd9, 0xc0, 0x32, 0x7f, 0x2f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x74, 0x13, 0x5f, + 0x66, 0x1a, 0x05, 0x00, 0x00, } From 10803f36a740093d55fc42f9e4f9598b54992204 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 16 Mar 2026 23:30:23 +0800 Subject: [PATCH 03/10] undo deprecations --- protobufs/livekit_egress.proto | 61 +++++++++++----------------------- protobufs/rpc/egress.proto | 10 +++--- 2 files changed, 25 insertions(+), 46 deletions(-) diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index ab09c289b..93f023b6a 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -37,13 +37,13 @@ service Egress { rpc StopEgress(StopEgressRequest) returns (EgressInfo); // --- Deprecated --- - rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo) { option deprecated = true; }; - rpc StartWebEgress(WebEgressRequest) returns (EgressInfo) { option deprecated = true; }; - rpc StartParticipantEgress(ParticipantEgressRequest) returns (EgressInfo) { option deprecated = true; }; - rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo) { option deprecated = true; }; - rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo) { option deprecated = true; }; - rpc UpdateLayout(UpdateLayoutRequest) returns (EgressInfo) { option deprecated = true; }; - rpc UpdateStream(UpdateStreamRequest) returns (EgressInfo) { option deprecated = true; }; + rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo); + rpc StartWebEgress(WebEgressRequest) returns (EgressInfo); + rpc StartParticipantEgress(ParticipantEgressRequest) returns (EgressInfo); + rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo); + rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo); + rpc UpdateLayout(UpdateLayoutRequest) returns (EgressInfo); + rpc UpdateStream(UpdateStreamRequest) returns (EgressInfo); } // --- Core Request --- @@ -232,10 +232,10 @@ message SegmentedFileOutput { // --- Deprecated --- oneof output { - S3Upload s3 = 5 [deprecated = true]; - GCPUpload gcp = 6 [deprecated = true]; - AzureBlobUpload azure = 7 [deprecated = true]; - AliOSSUpload aliOSS = 9 [deprecated = true]; + S3Upload s3 = 5; + GCPUpload gcp = 6; + AzureBlobUpload azure = 7; + AliOSSUpload aliOSS = 9; } } @@ -261,10 +261,10 @@ message ImageOutput { // --- Deprecated --- oneof output { - S3Upload s3 = 8 [deprecated = true]; - GCPUpload gcp = 9 [deprecated = true]; - AzureBlobUpload azure = 10 [deprecated = true]; - AliOSSUpload aliOSS = 11 [deprecated = true]; + S3Upload s3 = 8; + GCPUpload gcp = 9; + AzureBlobUpload azure = 10; + AliOSSUpload aliOSS = 11; } } @@ -378,11 +378,11 @@ message EgressInfo { StartEgressRequest egress = 29; ExportReplayRequest replay = 30; - RoomCompositeEgressRequest room_composite = 4 [deprecated = true]; - WebEgressRequest web = 14 [deprecated = true]; - ParticipantEgressRequest participant = 19 [deprecated = true]; - TrackCompositeEgressRequest track_composite = 5 [deprecated = true]; - TrackEgressRequest track = 6 [deprecated = true]; + RoomCompositeEgressRequest room_composite = 4; + WebEgressRequest web = 14; + ParticipantEgressRequest participant = 19; + TrackCompositeEgressRequest track_composite = 5; + TrackEgressRequest track = 6; } repeated StreamInfo stream_results = 15; @@ -527,8 +527,6 @@ message ExportReplayRequest { // --- Deprecated --- message RoomCompositeEgressRequest { - option deprecated = true; - string room_name = 1; string layout = 2; bool audio_only = 3; @@ -558,8 +556,6 @@ enum AudioMixing { } message WebEgressRequest { - option deprecated = true; - string url = 1; bool audio_only = 2; bool video_only = 3; @@ -580,10 +576,7 @@ message WebEgressRequest { repeated WebhookConfig webhooks = 14; } -// record audio and video from a single participant message ParticipantEgressRequest { - option deprecated = true; - string room_name = 1; string identity = 2; bool screen_share = 3; @@ -599,8 +592,6 @@ message ParticipantEgressRequest { } message TrackCompositeEgressRequest { - option deprecated = true; - string room_name = 1; string audio_track_id = 2 [(logger.name) = "audioTrackID"]; string video_track_id = 3 [(logger.name) = "videoTrackID"]; @@ -621,8 +612,6 @@ message TrackCompositeEgressRequest { } message TrackEgressRequest { - option deprecated = true; - string room_name = 1; string track_id = 2 [(logger.name) = "trackID"]; oneof output { @@ -633,8 +622,6 @@ message TrackEgressRequest { } message DirectFileOutput { - option deprecated = true; - string filepath = 1; bool disable_manifest = 5; oneof output { @@ -646,8 +633,6 @@ message DirectFileOutput { } message EncodedFileOutput { - option deprecated = true; - EncodedFileType file_type = 1; string filepath = 2; bool disable_manifest = 6; @@ -660,22 +645,16 @@ message EncodedFileOutput { } message UpdateLayoutRequest { - option deprecated = true; - string egress_id = 1 [(logger.name) = "egressID"]; string layout = 2; } message UpdateStreamRequest { - option deprecated = true; - string egress_id = 1 [(logger.name) = "egressID"]; repeated string add_output_urls = 2; repeated string remove_output_urls = 3; } message StreamInfoList { - option deprecated = true; - repeated StreamInfo info = 1; } diff --git a/protobufs/rpc/egress.proto b/protobufs/rpc/egress.proto index 8eabe7ee3..587d7497d 100644 --- a/protobufs/rpc/egress.proto +++ b/protobufs/rpc/egress.proto @@ -52,11 +52,11 @@ message StartEgressRequest { livekit.ExportReplayRequest replay = 17; // --- deprecated --- - livekit.RoomCompositeEgressRequest room_composite = 5 [deprecated = true]; - livekit.WebEgressRequest web = 11 [deprecated = true]; - livekit.ParticipantEgressRequest participant = 13 [deprecated = true]; - livekit.TrackCompositeEgressRequest track_composite = 6 [deprecated = true]; - livekit.TrackEgressRequest track = 7 [deprecated = true]; + livekit.RoomCompositeEgressRequest room_composite = 5; + livekit.WebEgressRequest web = 11; + livekit.ParticipantEgressRequest participant = 13; + livekit.TrackCompositeEgressRequest track_composite = 6; + livekit.TrackEgressRequest track = 7; } // connection info From ebda97e1ebae52181a6f0dc207588ac376c8295f Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:31:16 +0000 Subject: [PATCH 04/10] generated protobuf --- livekit/livekit_egress.pb.go | 130 +++----- livekit/livekit_egress.twirp.go | 546 ++++++++++++++++---------------- rpc/egress.pb.go | 25 +- rpc/egress.psrpc.go | 83 +++-- 4 files changed, 365 insertions(+), 419 deletions(-) diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index ddab641d6..37f9a6554 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -1863,7 +1863,6 @@ func (x *SegmentedFileOutput) GetOutput() isSegmentedFileOutput_Output { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *SegmentedFileOutput) GetS3() *S3Upload { if x != nil { if x, ok := x.Output.(*SegmentedFileOutput_S3); ok { @@ -1873,7 +1872,6 @@ func (x *SegmentedFileOutput) GetS3() *S3Upload { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *SegmentedFileOutput) GetGcp() *GCPUpload { if x != nil { if x, ok := x.Output.(*SegmentedFileOutput_Gcp); ok { @@ -1883,7 +1881,6 @@ func (x *SegmentedFileOutput) GetGcp() *GCPUpload { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *SegmentedFileOutput) GetAzure() *AzureBlobUpload { if x != nil { if x, ok := x.Output.(*SegmentedFileOutput_Azure); ok { @@ -1893,7 +1890,6 @@ func (x *SegmentedFileOutput) GetAzure() *AzureBlobUpload { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *SegmentedFileOutput) GetAliOSS() *AliOSSUpload { if x != nil { if x, ok := x.Output.(*SegmentedFileOutput_AliOSS); ok { @@ -1908,22 +1904,18 @@ type isSegmentedFileOutput_Output interface { } type SegmentedFileOutput_S3 struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. S3 *S3Upload `protobuf:"bytes,5,opt,name=s3,proto3,oneof"` } type SegmentedFileOutput_Gcp struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Gcp *GCPUpload `protobuf:"bytes,6,opt,name=gcp,proto3,oneof"` } type SegmentedFileOutput_Azure struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Azure *AzureBlobUpload `protobuf:"bytes,7,opt,name=azure,proto3,oneof"` } type SegmentedFileOutput_AliOSS struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. AliOSS *AliOSSUpload `protobuf:"bytes,9,opt,name=aliOSS,proto3,oneof"` } @@ -2044,7 +2036,6 @@ func (x *ImageOutput) GetOutput() isImageOutput_Output { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetS3() *S3Upload { if x != nil { if x, ok := x.Output.(*ImageOutput_S3); ok { @@ -2054,7 +2045,6 @@ func (x *ImageOutput) GetS3() *S3Upload { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetGcp() *GCPUpload { if x != nil { if x, ok := x.Output.(*ImageOutput_Gcp); ok { @@ -2064,7 +2054,6 @@ func (x *ImageOutput) GetGcp() *GCPUpload { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetAzure() *AzureBlobUpload { if x != nil { if x, ok := x.Output.(*ImageOutput_Azure); ok { @@ -2074,7 +2063,6 @@ func (x *ImageOutput) GetAzure() *AzureBlobUpload { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *ImageOutput) GetAliOSS() *AliOSSUpload { if x != nil { if x, ok := x.Output.(*ImageOutput_AliOSS); ok { @@ -2089,22 +2077,18 @@ type isImageOutput_Output interface { } type ImageOutput_S3 struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. S3 *S3Upload `protobuf:"bytes,8,opt,name=s3,proto3,oneof"` } type ImageOutput_Gcp struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Gcp *GCPUpload `protobuf:"bytes,9,opt,name=gcp,proto3,oneof"` } type ImageOutput_Azure struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Azure *AzureBlobUpload `protobuf:"bytes,10,opt,name=azure,proto3,oneof"` } type ImageOutput_AliOSS struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. AliOSS *AliOSSUpload `protobuf:"bytes,11,opt,name=aliOSS,proto3,oneof"` } @@ -3058,7 +3042,6 @@ func (x *EgressInfo) GetReplay() *ExportReplayRequest { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetRoomComposite() *RoomCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_RoomComposite); ok { @@ -3068,7 +3051,6 @@ func (x *EgressInfo) GetRoomComposite() *RoomCompositeEgressRequest { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetWeb() *WebEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Web); ok { @@ -3078,7 +3060,6 @@ func (x *EgressInfo) GetWeb() *WebEgressRequest { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetParticipant() *ParticipantEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Participant); ok { @@ -3088,7 +3069,6 @@ func (x *EgressInfo) GetParticipant() *ParticipantEgressRequest { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetTrackComposite() *TrackCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_TrackComposite); ok { @@ -3098,7 +3078,6 @@ func (x *EgressInfo) GetTrackComposite() *TrackCompositeEgressRequest { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. func (x *EgressInfo) GetTrack() *TrackEgressRequest { if x != nil { if x, ok := x.Request.(*EgressInfo_Track); ok { @@ -3235,27 +3214,22 @@ type EgressInfo_Replay struct { } type EgressInfo_RoomComposite struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. RoomComposite *RoomCompositeEgressRequest `protobuf:"bytes,4,opt,name=room_composite,json=roomComposite,proto3,oneof"` } type EgressInfo_Web struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Web *WebEgressRequest `protobuf:"bytes,14,opt,name=web,proto3,oneof"` } type EgressInfo_Participant struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Participant *ParticipantEgressRequest `protobuf:"bytes,19,opt,name=participant,proto3,oneof"` } type EgressInfo_TrackComposite struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. TrackComposite *TrackCompositeEgressRequest `protobuf:"bytes,5,opt,name=track_composite,json=trackComposite,proto3,oneof"` } type EgressInfo_Track struct { - // Deprecated: Marked as deprecated in livekit_egress.proto. Track *TrackEgressRequest `protobuf:"bytes,6,opt,name=track,proto3,oneof"` } @@ -4170,7 +4144,6 @@ func (*ExportReplayRequest_Preset) isExportReplayRequest_Encoding() {} func (*ExportReplayRequest_Advanced) isExportReplayRequest_Encoding() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type RoomCompositeEgressRequest struct { state protoimpl.MessageState `protogen:"open.v1"` RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` @@ -4409,7 +4382,6 @@ func (*RoomCompositeEgressRequest_Preset) isRoomCompositeEgressRequest_Options() func (*RoomCompositeEgressRequest_Advanced) isRoomCompositeEgressRequest_Options() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type WebEgressRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` @@ -4632,9 +4604,6 @@ func (*WebEgressRequest_Preset) isWebEgressRequest_Options() {} func (*WebEgressRequest_Advanced) isWebEgressRequest_Options() {} -// record audio and video from a single participant -// -// Deprecated: Marked as deprecated in livekit_egress.proto. type ParticipantEgressRequest struct { state protoimpl.MessageState `protogen:"open.v1"` RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` @@ -4781,7 +4750,6 @@ func (*ParticipantEgressRequest_Preset) isParticipantEgressRequest_Options() {} func (*ParticipantEgressRequest_Advanced) isParticipantEgressRequest_Options() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type TrackCompositeEgressRequest struct { state protoimpl.MessageState `protogen:"open.v1"` RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` @@ -4996,7 +4964,6 @@ func (*TrackCompositeEgressRequest_Preset) isTrackCompositeEgressRequest_Options func (*TrackCompositeEgressRequest_Advanced) isTrackCompositeEgressRequest_Options() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type TrackEgressRequest struct { state protoimpl.MessageState `protogen:"open.v1"` RoomName string `protobuf:"bytes,1,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` @@ -5103,7 +5070,6 @@ func (*TrackEgressRequest_File) isTrackEgressRequest_Output() {} func (*TrackEgressRequest_WebsocketUrl) isTrackEgressRequest_Output() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type DirectFileOutput struct { state protoimpl.MessageState `protogen:"open.v1"` Filepath string `protobuf:"bytes,1,opt,name=filepath,proto3" json:"filepath,omitempty"` @@ -5234,7 +5200,6 @@ func (*DirectFileOutput_Azure) isDirectFileOutput_Output() {} func (*DirectFileOutput_AliOSS) isDirectFileOutput_Output() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type EncodedFileOutput struct { state protoimpl.MessageState `protogen:"open.v1"` FileType EncodedFileType `protobuf:"varint,1,opt,name=file_type,json=fileType,proto3,enum=livekit.EncodedFileType" json:"file_type,omitempty"` @@ -5373,7 +5338,6 @@ func (*EncodedFileOutput_Azure) isEncodedFileOutput_Output() {} func (*EncodedFileOutput_AliOSS) isEncodedFileOutput_Output() {} -// Deprecated: Marked as deprecated in livekit_egress.proto. type UpdateLayoutRequest struct { state protoimpl.MessageState `protogen:"open.v1"` EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` @@ -5426,7 +5390,6 @@ func (x *UpdateLayoutRequest) GetLayout() string { return "" } -// Deprecated: Marked as deprecated in livekit_egress.proto. type UpdateStreamRequest struct { state protoimpl.MessageState `protogen:"open.v1"` EgressId string `protobuf:"bytes,1,opt,name=egress_id,json=egressId,proto3" json:"egress_id,omitempty"` @@ -5487,7 +5450,6 @@ func (x *UpdateStreamRequest) GetRemoveOutputUrls() []string { return nil } -// Deprecated: Marked as deprecated in livekit_egress.proto. type StreamInfoList struct { state protoimpl.MessageState `protogen:"open.v1"` Info []*StreamInfo `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` @@ -5621,7 +5583,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\x10disable_manifest\x18\x03 \x01(\bR\x0fdisableManifest\"W\n" + "\fStreamOutput\x123\n" + "\bprotocol\x18\x01 \x01(\x0e2\x17.livekit.StreamProtocolR\bprotocol\x12\x12\n" + - "\x04urls\x18\x02 \x03(\tR\x04urls\"\xb4\x04\n" + + "\x04urls\x18\x02 \x03(\tR\x04urls\"\xa4\x04\n" + "\x13SegmentedFileOutput\x12:\n" + "\bprotocol\x18\x01 \x01(\x0e2\x1e.livekit.SegmentedFileProtocolR\bprotocol\x12'\n" + "\x0ffilename_prefix\x18\x02 \x01(\tR\x0efilenamePrefix\x12#\n" + @@ -5630,12 +5592,12 @@ const file_livekit_egress_proto_rawDesc = "" + "\x10segment_duration\x18\x04 \x01(\rR\x0fsegmentDuration\x12E\n" + "\x0ffilename_suffix\x18\n" + " \x01(\x0e2\x1c.livekit.SegmentedFileSuffixR\x0efilenameSuffix\x12)\n" + - "\x10disable_manifest\x18\b \x01(\bR\x0fdisableManifest\x12'\n" + - "\x02s3\x18\x05 \x01(\v2\x11.livekit.S3UploadB\x02\x18\x01H\x00R\x02s3\x12*\n" + - "\x03gcp\x18\x06 \x01(\v2\x12.livekit.GCPUploadB\x02\x18\x01H\x00R\x03gcp\x124\n" + - "\x05azure\x18\a \x01(\v2\x18.livekit.AzureBlobUploadB\x02\x18\x01H\x00R\x05azure\x123\n" + - "\x06aliOSS\x18\t \x01(\v2\x15.livekit.AliOSSUploadB\x02\x18\x01H\x00R\x06aliOSSB\b\n" + - "\x06output\"\xfd\x03\n" + + "\x10disable_manifest\x18\b \x01(\bR\x0fdisableManifest\x12#\n" + + "\x02s3\x18\x05 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + + "\x03gcp\x18\x06 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + + "\x05azure\x18\a \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + + "\x06aliOSS\x18\t \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + + "\x06output\"\xed\x03\n" + "\vImageOutput\x12)\n" + "\x10capture_interval\x18\x01 \x01(\rR\x0fcaptureInterval\x12\x14\n" + "\x05width\x18\x02 \x01(\x05R\x05width\x12\x16\n" + @@ -5644,12 +5606,12 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0ffilename_suffix\x18\x05 \x01(\x0e2\x18.livekit.ImageFileSuffixR\x0efilenameSuffix\x124\n" + "\vimage_codec\x18\x06 \x01(\x0e2\x13.livekit.ImageCodecR\n" + "imageCodec\x12)\n" + - "\x10disable_manifest\x18\a \x01(\bR\x0fdisableManifest\x12'\n" + - "\x02s3\x18\b \x01(\v2\x11.livekit.S3UploadB\x02\x18\x01H\x00R\x02s3\x12*\n" + - "\x03gcp\x18\t \x01(\v2\x12.livekit.GCPUploadB\x02\x18\x01H\x00R\x03gcp\x124\n" + + "\x10disable_manifest\x18\a \x01(\bR\x0fdisableManifest\x12#\n" + + "\x02s3\x18\b \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + + "\x03gcp\x18\t \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + "\x05azure\x18\n" + - " \x01(\v2\x18.livekit.AzureBlobUploadB\x02\x18\x01H\x00R\x05azure\x123\n" + - "\x06aliOSS\x18\v \x01(\v2\x15.livekit.AliOSSUploadB\x02\x18\x01H\x00R\x06aliOSSB\b\n" + + " \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + + "\x06aliOSS\x18\v \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + "\x06output\"S\n" + "\n" + "McapOutput\x12\x1a\n" + @@ -5714,7 +5676,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0fadd_stream_urls\x18\x04 \x03(\tR\raddStreamUrls\x12,\n" + "\x12remove_stream_urls\x18\x05 \x03(\tR\x10removeStreamUrls\">\n" + "\x11StopEgressRequest\x12)\n" + - "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\"\xab\v\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\"\x97\v\n" + "\n" + "EgressInfo\x12)\n" + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12#\n" + @@ -5731,12 +5693,12 @@ const file_livekit_egress_proto_rawDesc = "" + "\n" + "updated_at\x18\x12 \x01(\x03R\tupdatedAt\x125\n" + "\x06egress\x18\x1d \x01(\v2\x1b.livekit.StartEgressRequestH\x00R\x06egress\x126\n" + - "\x06replay\x18\x1e \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12P\n" + - "\x0eroom_composite\x18\x04 \x01(\v2#.livekit.RoomCompositeEgressRequestB\x02\x18\x01H\x00R\rroomComposite\x121\n" + - "\x03web\x18\x0e \x01(\v2\x19.livekit.WebEgressRequestB\x02\x18\x01H\x00R\x03web\x12I\n" + - "\vparticipant\x18\x13 \x01(\v2!.livekit.ParticipantEgressRequestB\x02\x18\x01H\x00R\vparticipant\x12S\n" + - "\x0ftrack_composite\x18\x05 \x01(\v2$.livekit.TrackCompositeEgressRequestB\x02\x18\x01H\x00R\x0etrackComposite\x127\n" + - "\x05track\x18\x06 \x01(\v2\x1b.livekit.TrackEgressRequestB\x02\x18\x01H\x00R\x05track\x12:\n" + + "\x06replay\x18\x1e \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12L\n" + + "\x0eroom_composite\x18\x04 \x01(\v2#.livekit.RoomCompositeEgressRequestH\x00R\rroomComposite\x12-\n" + + "\x03web\x18\x0e \x01(\v2\x19.livekit.WebEgressRequestH\x00R\x03web\x12E\n" + + "\vparticipant\x18\x13 \x01(\v2!.livekit.ParticipantEgressRequestH\x00R\vparticipant\x12O\n" + + "\x0ftrack_composite\x18\x05 \x01(\v2$.livekit.TrackCompositeEgressRequestH\x00R\x0etrackComposite\x123\n" + + "\x05track\x18\x06 \x01(\v2\x1b.livekit.TrackEgressRequestH\x00R\x05track\x12:\n" + "\x0estream_results\x18\x0f \x03(\v2\x13.livekit.StreamInfoR\rstreamResults\x124\n" + "\ffile_results\x18\x10 \x03(\v2\x11.livekit.FileInfoR\vfileResults\x12>\n" + "\x0fsegment_results\x18\x11 \x03(\v2\x15.livekit.SegmentsInfoR\x0esegmentResults\x128\n" + @@ -5838,7 +5800,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\bwebhooks\x18\v \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + "\x06sourceB\n" + "\n" + - "\bencoding\"\xd9\x06\n" + + "\bencoding\"\xd5\x06\n" + "\x1aRoomCompositeEgressRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x12\x16\n" + "\x06layout\x18\x02 \x01(\tR\x06layout\x12\x1d\n" + @@ -5858,9 +5820,9 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0estream_outputs\x18\f \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + "\x0fsegment_outputs\x18\r \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + "\rimage_outputs\x18\x0e \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\x10 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\bwebhooks\x18\x10 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + "\x06outputB\t\n" + - "\aoptions\"\xf9\x05\n" + + "\aoptions\"\xf5\x05\n" + "\x10WebEgressRequest\x12\x10\n" + "\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n" + "\n" + @@ -5878,9 +5840,9 @@ const file_livekit_egress_proto_rawDesc = "" + " \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + "\x0fsegment_outputs\x18\v \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + "\rimage_outputs\x18\r \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\x0e \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\bwebhooks\x18\x0e \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + "\x06outputB\t\n" + - "\aoptions\"\xaa\x04\n" + + "\aoptions\"\xa6\x04\n" + "\x18ParticipantEgressRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x12\x1a\n" + "\bidentity\x18\x02 \x01(\tR\bidentity\x12!\n" + @@ -5892,8 +5854,8 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0fsegment_outputs\x18\b \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + "\rimage_outputs\x18\t \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + "\bwebhooks\x18\n" + - " \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\t\n" + - "\aoptions\"\x93\x06\n" + + " \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\t\n" + + "\aoptions\"\x8f\x06\n" + "\x1bTrackCompositeEgressRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x126\n" + "\x0eaudio_track_id\x18\x02 \x01(\tB\x10\x9a\xec,\faudioTrackIDR\faudioTrackId\x126\n" + @@ -5907,24 +5869,24 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0estream_outputs\x18\f \x03(\v2\x15.livekit.StreamOutputR\rstreamOutputs\x12E\n" + "\x0fsegment_outputs\x18\r \x03(\v2\x1c.livekit.SegmentedFileOutputR\x0esegmentOutputs\x129\n" + "\rimage_outputs\x18\x0e \x03(\v2\x14.livekit.ImageOutputR\fimageOutputs\x122\n" + - "\bwebhooks\x18\x0f \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + + "\bwebhooks\x18\x0f \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + "\x06outputB\t\n" + - "\aoptions\"\xf3\x01\n" + + "\aoptions\"\xef\x01\n" + "\x12TrackEgressRequest\x12\x1b\n" + "\troom_name\x18\x01 \x01(\tR\broomName\x12&\n" + "\btrack_id\x18\x02 \x01(\tB\v\x9a\xec,\atrackIDR\atrackId\x12/\n" + "\x04file\x18\x03 \x01(\v2\x19.livekit.DirectFileOutputH\x00R\x04file\x12%\n" + "\rwebsocket_url\x18\x04 \x01(\tH\x00R\fwebsocketUrl\x122\n" + - "\bwebhooks\x18\x05 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooks:\x02\x18\x01B\b\n" + - "\x06output\"\x97\x02\n" + + "\bwebhooks\x18\x05 \x03(\v2\x16.livekit.WebhookConfigR\bwebhooksB\b\n" + + "\x06output\"\x93\x02\n" + "\x10DirectFileOutput\x12\x1a\n" + "\bfilepath\x18\x01 \x01(\tR\bfilepath\x12)\n" + "\x10disable_manifest\x18\x05 \x01(\bR\x0fdisableManifest\x12#\n" + "\x02s3\x18\x02 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + "\x03gcp\x18\x03 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + "\x05azure\x18\x04 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + - "\x06aliOSS\x18\x06 \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSS:\x02\x18\x01B\b\n" + - "\x06output\"\xcf\x02\n" + + "\x06aliOSS\x18\x06 \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + + "\x06output\"\xcb\x02\n" + "\x11EncodedFileOutput\x125\n" + "\tfile_type\x18\x01 \x01(\x0e2\x18.livekit.EncodedFileTypeR\bfileType\x12\x1a\n" + "\bfilepath\x18\x02 \x01(\tR\bfilepath\x12)\n" + @@ -5932,17 +5894,17 @@ const file_livekit_egress_proto_rawDesc = "" + "\x02s3\x18\x03 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + "\x03gcp\x18\x04 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + "\x05azure\x18\x05 \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + - "\x06aliOSS\x18\a \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSS:\x02\x18\x01B\b\n" + - "\x06output\"\\\n" + + "\x06aliOSS\x18\a \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + + "\x06output\"X\n" + "\x13UpdateLayoutRequest\x12)\n" + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12\x16\n" + - "\x06layout\x18\x02 \x01(\tR\x06layout:\x02\x18\x01\"\x9a\x01\n" + + "\x06layout\x18\x02 \x01(\tR\x06layout\"\x96\x01\n" + "\x13UpdateStreamRequest\x12)\n" + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12&\n" + "\x0fadd_output_urls\x18\x02 \x03(\tR\raddOutputUrls\x12,\n" + - "\x12remove_output_urls\x18\x03 \x03(\tR\x10removeOutputUrls:\x02\x18\x01\"=\n" + + "\x12remove_output_urls\x18\x03 \x03(\tR\x10removeOutputUrls\"9\n" + "\x0eStreamInfoList\x12'\n" + - "\x04info\x18\x01 \x03(\v2\x13.livekit.StreamInfoR\x04info:\x02\x18\x01*W\n" + + "\x04info\x18\x01 \x03(\v2\x13.livekit.StreamInfoR\x04info*W\n" + "\fAudioChannel\x12\x16\n" + "\x12AUDIO_CHANNEL_BOTH\x10\x00\x12\x16\n" + "\x12AUDIO_CHANNEL_LEFT\x10\x01\x12\x17\n" + @@ -5990,21 +5952,21 @@ const file_livekit_egress_proto_rawDesc = "" + "\vAudioMixing\x12\x12\n" + "\x0eDEFAULT_MIXING\x10\x00\x12\x16\n" + "\x12DUAL_CHANNEL_AGENT\x10\x01\x12\x1a\n" + - "\x16DUAL_CHANNEL_ALTERNATE\x10\x022\xc3\x06\n" + + "\x16DUAL_CHANNEL_ALTERNATE\x10\x022\xa0\x06\n" + "\x06Egress\x12?\n" + "\vStartEgress\x12\x1b.livekit.StartEgressRequest\x1a\x13.livekit.EgressInfo\x12A\n" + "\fUpdateEgress\x12\x1c.livekit.UpdateEgressRequest\x1a\x13.livekit.EgressInfo\x12E\n" + "\n" + "ListEgress\x12\x1a.livekit.ListEgressRequest\x1a\x1b.livekit.ListEgressResponse\x12=\n" + "\n" + - "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfo\x12Y\n" + - "\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12E\n" + - "\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12U\n" + - "\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12[\n" + - "\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12I\n" + - "\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12F\n" + - "\fUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01\x12F\n" + - "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\"\x03\x88\x02\x01BFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" + "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfo\x12T\n" + + "\x18StartRoomCompositeEgress\x12#.livekit.RoomCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12@\n" + + "\x0eStartWebEgress\x12\x19.livekit.WebEgressRequest\x1a\x13.livekit.EgressInfo\x12P\n" + + "\x16StartParticipantEgress\x12!.livekit.ParticipantEgressRequest\x1a\x13.livekit.EgressInfo\x12V\n" + + "\x19StartTrackCompositeEgress\x12$.livekit.TrackCompositeEgressRequest\x1a\x13.livekit.EgressInfo\x12D\n" + + "\x10StartTrackEgress\x12\x1b.livekit.TrackEgressRequest\x1a\x13.livekit.EgressInfo\x12A\n" + + "\fUpdateLayout\x12\x1c.livekit.UpdateLayoutRequest\x1a\x13.livekit.EgressInfo\x12A\n" + + "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfoBFZ#github.com/livekit/protocol/livekit\xaa\x02\rLiveKit.Proto\xea\x02\x0eLiveKit::Protob\x06proto3" var ( file_livekit_egress_proto_rawDescOnce sync.Once diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index 41d9607be..d343b8284 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -3312,279 +3312,275 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor1 = []byte{ - // 4371 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0xdc, 0x58, - 0x72, 0x62, 0x7f, 0x77, 0xf5, 0x87, 0xa8, 0x27, 0x59, 0xd3, 0x96, 0x3d, 0x63, 0x6f, 0x3b, 0xe3, - 0x0f, 0x8d, 0x22, 0x6b, 0x25, 0xaf, 0xc7, 0xf1, 0x66, 0x66, 0xd1, 0x92, 0x28, 0xab, 0xd7, 0x92, - 0x5a, 0x61, 0xb7, 0xc6, 0xb3, 0xf9, 0x22, 0x28, 0xf2, 0x49, 0x22, 0xd4, 0x4d, 0xf6, 0x92, 0x6c, - 0xdb, 0xda, 0x5f, 0x30, 0xc9, 0x21, 0x08, 0x92, 0x43, 0x00, 0x03, 0x41, 0xee, 0x9b, 0x3d, 0x05, - 0x01, 0x72, 0x0d, 0x90, 0x5b, 0x90, 0x60, 0x0f, 0x39, 0x04, 0xb9, 0xe6, 0x18, 0x18, 0x08, 0x82, - 0x9c, 0x72, 0x08, 0x10, 0xbc, 0x0f, 0x92, 0x8f, 0x14, 0xd5, 0xd3, 0x92, 0x9c, 0xc9, 0x21, 0x7b, - 0x52, 0xbf, 0xaa, 0x7a, 0x8f, 0xf5, 0xea, 0x55, 0xd5, 0xab, 0xaa, 0x57, 0x82, 0xb9, 0xbe, 0xf5, - 0x1a, 0x9f, 0x5a, 0xbe, 0x86, 0x8f, 0x5d, 0xec, 0x79, 0xcb, 0x43, 0xd7, 0xf1, 0x1d, 0x54, 0xe4, - 0xd0, 0x85, 0x10, 0x3d, 0x70, 0x4c, 0xdc, 0xe7, 0xe8, 0x85, 0xb9, 0xbe, 0x73, 0x7c, 0x8c, 0xdd, - 0xc7, 0xce, 0xd0, 0xb7, 0x1c, 0x9b, 0x43, 0x9b, 0xff, 0x9c, 0x05, 0xd4, 0xf5, 0x75, 0xd7, 0x57, - 0xe8, 0x52, 0x2a, 0xfe, 0xe9, 0x08, 0x7b, 0x3e, 0xba, 0x05, 0x65, 0xd7, 0x71, 0x06, 0x9a, 0xad, - 0x0f, 0x70, 0x43, 0xba, 0x2b, 0x3d, 0x2c, 0xab, 0x25, 0x02, 0xd8, 0xd3, 0x07, 0x18, 0xfd, 0x00, - 0x4a, 0x3e, 0x1e, 0x0c, 0xfb, 0xba, 0x8f, 0x1b, 0x99, 0xbb, 0xd2, 0xc3, 0xca, 0xea, 0x47, 0xcb, - 0xfc, 0x93, 0xcb, 0x3d, 0x8e, 0xe8, 0x3a, 0x23, 0xd7, 0xc0, 0xdb, 0x53, 0x6a, 0x48, 0x8a, 0xee, - 0x43, 0xf6, 0x0d, 0x3e, 0x6c, 0x64, 0xe9, 0x0c, 0x14, 0xce, 0x78, 0x85, 0x0f, 0x43, 0x62, 0x42, - 0x80, 0x96, 0x20, 0x3f, 0xc0, 0xa6, 0xa5, 0x37, 0x72, 0x94, 0x72, 0x2e, 0xa4, 0xdc, 0x25, 0xd0, - 0x90, 0x96, 0x11, 0xa1, 0x67, 0x50, 0x18, 0xba, 0xd8, 0xc3, 0x7e, 0x23, 0x7f, 0x57, 0x7a, 0x58, - 0x5f, 0xfd, 0x24, 0x24, 0x57, 0x6c, 0xc3, 0x31, 0x2d, 0xfb, 0xb8, 0xc3, 0x36, 0xbc, 0x4f, 0xa9, - 0xb6, 0x25, 0x95, 0xd3, 0xa3, 0xa7, 0x50, 0xd2, 0xcd, 0xd7, 0xba, 0x6d, 0x60, 0xb3, 0x51, 0xa0, - 0x9f, 0x6a, 0x5c, 0x34, 0x77, 0x5b, 0x52, 0x43, 0x5a, 0xf4, 0x08, 0x8a, 0xce, 0xc8, 0x1f, 0x8e, - 0x7c, 0xaf, 0x51, 0xbc, 0x9b, 0x7d, 0x58, 0x59, 0x9d, 0x0e, 0xa7, 0x75, 0x28, 0x5c, 0x0d, 0xf0, - 0x68, 0x05, 0x8a, 0x9e, 0xef, 0xb8, 0xfa, 0x31, 0x6e, 0x94, 0xe8, 0x17, 0xe6, 0x43, 0xd2, 0x2e, - 0x83, 0x6f, 0x38, 0xf6, 0x91, 0x75, 0xac, 0x06, 0x64, 0x68, 0x15, 0x4a, 0x6f, 0xf0, 0xe1, 0x89, - 0xe3, 0x9c, 0x7a, 0x8d, 0x32, 0x5d, 0x7d, 0x5e, 0x94, 0x14, 0x41, 0xf0, 0x29, 0x21, 0xdd, 0x7a, - 0x09, 0x0a, 0x1e, 0x95, 0xca, 0x3a, 0x40, 0x09, 0x73, 0xce, 0x9b, 0x7f, 0x24, 0x41, 0x3d, 0x7e, - 0x1a, 0x68, 0x1e, 0x0a, 0x7d, 0xfd, 0xcc, 0x19, 0xf9, 0xfc, 0x48, 0xf9, 0x08, 0x7d, 0x0c, 0xa0, - 0x8f, 0x4c, 0xcb, 0xd1, 0x1c, 0xbb, 0x7f, 0x46, 0x8f, 0xb4, 0xa4, 0x96, 0x29, 0xa4, 0x63, 0xf7, - 0xcf, 0x08, 0xfa, 0xb5, 0x65, 0x62, 0x8e, 0xce, 0x32, 0x34, 0x85, 0x50, 0xf4, 0x7d, 0x98, 0x36, - 0x46, 0x9e, 0xef, 0x0c, 0xb4, 0x43, 0xdd, 0xc3, 0xda, 0xc8, 0xed, 0xd3, 0x93, 0x2b, 0xab, 0x35, - 0x06, 0x5e, 0xd7, 0x3d, 0x7c, 0xe0, 0xf6, 0x9b, 0x7f, 0x20, 0x41, 0x39, 0x3c, 0x6c, 0x24, 0x43, - 0x96, 0x50, 0x32, 0x46, 0xc8, 0xcf, 0x6b, 0x72, 0xb1, 0x04, 0x48, 0x7f, 0xa3, 0x5b, 0xbe, 0xe6, - 0x11, 0x6d, 0xd6, 0x3c, 0xeb, 0xd8, 0xd6, 0x19, 0x23, 0x25, 0x55, 0xa6, 0x18, 0xaa, 0xe6, 0x5d, - 0x0a, 0x6f, 0xfe, 0xbb, 0x04, 0x15, 0x41, 0x9d, 0xd0, 0x33, 0xa8, 0xb3, 0xc5, 0x7d, 0x57, 0x37, - 0x4e, 0x35, 0xcb, 0x64, 0x8c, 0xad, 0xcb, 0xef, 0xde, 0x2f, 0x55, 0x29, 0xa6, 0x47, 0x10, 0xed, - 0xcd, 0xed, 0x29, 0x55, 0x1c, 0x9b, 0x68, 0x1b, 0x66, 0x86, 0xba, 0xeb, 0x5b, 0x86, 0x35, 0xd4, - 0x6d, 0x5f, 0xa3, 0x38, 0x6e, 0x15, 0x37, 0xc3, 0x93, 0xdb, 0x8f, 0x28, 0xbe, 0x22, 0x04, 0xdb, - 0x53, 0xaa, 0x3c, 0x4c, 0xc0, 0xd0, 0x22, 0xe4, 0xe9, 0x6e, 0xb9, 0x85, 0x44, 0x7a, 0xdf, 0x22, - 0x50, 0x7e, 0xea, 0x8c, 0x04, 0x3d, 0x80, 0x9c, 0xa9, 0xfb, 0x81, 0x89, 0xcc, 0x86, 0xa4, 0x9b, - 0xba, 0xaf, 0x73, 0x4a, 0x4a, 0xb0, 0x5e, 0x84, 0x3c, 0x65, 0xa9, 0xf9, 0xfb, 0x20, 0x27, 0xb9, - 0x40, 0x0b, 0x50, 0xb2, 0x4c, 0x6c, 0xfb, 0x96, 0x7f, 0x16, 0x18, 0x79, 0x30, 0x46, 0xcb, 0x30, - 0x3b, 0x74, 0xf1, 0x11, 0x76, 0x35, 0xcf, 0x70, 0x31, 0xb6, 0x35, 0xef, 0x44, 0x77, 0x31, 0x3f, - 0x96, 0x19, 0x86, 0xea, 0x52, 0x4c, 0x97, 0x20, 0x9a, 0xcf, 0xa1, 0x22, 0xf0, 0x89, 0x3e, 0x83, - 0x82, 0xeb, 0x8c, 0x7c, 0xec, 0x35, 0x24, 0xaa, 0xc5, 0xb3, 0xf1, 0xdd, 0xa8, 0x04, 0xa7, 0x72, - 0x92, 0xe6, 0x7f, 0x48, 0x00, 0x11, 0x18, 0x3d, 0x84, 0x52, 0xe2, 0x18, 0x2a, 0xef, 0xde, 0x2f, - 0x15, 0xfd, 0xf0, 0x04, 0xf8, 0x4f, 0x13, 0xad, 0xc1, 0x9c, 0x28, 0xfc, 0x70, 0x33, 0x84, 0xcb, - 0xf2, 0xf6, 0x94, 0x3a, 0x2b, 0x60, 0xdb, 0xc1, 0xce, 0x7e, 0x0c, 0xa2, 0xec, 0xb5, 0x53, 0xcb, - 0x36, 0xa9, 0xc8, 0xeb, 0xab, 0x1f, 0xa7, 0x1d, 0x58, 0xdb, 0x3e, 0x72, 0x96, 0x5f, 0x5a, 0xb6, - 0xb9, 0x3d, 0xa5, 0x4e, 0x0b, 0x13, 0x09, 0x08, 0x3d, 0x86, 0xa2, 0x71, 0xa2, 0xdb, 0x36, 0x66, - 0xaa, 0x56, 0x5f, 0xbd, 0x91, 0x38, 0x35, 0x86, 0x54, 0x03, 0x2a, 0x72, 0x1e, 0x03, 0xdd, 0x37, - 0x4e, 0x9a, 0x2d, 0x80, 0xe8, 0xb0, 0xd0, 0x1a, 0x94, 0x3d, 0xdc, 0xc7, 0x86, 0xef, 0xb8, 0x81, - 0xc4, 0x6e, 0xc4, 0x0e, 0xb5, 0xcb, 0xb1, 0x6a, 0x44, 0x47, 0x2c, 0xbc, 0x2a, 0xe2, 0xfe, 0xb7, - 0x05, 0x37, 0x0f, 0x79, 0xdf, 0x19, 0x5a, 0x06, 0x95, 0x16, 0xa1, 0x62, 0xc3, 0x68, 0x4f, 0x7f, - 0x9f, 0x85, 0xe9, 0x84, 0xe7, 0x44, 0x73, 0x90, 0x7f, 0x63, 0x99, 0xfe, 0x09, 0x65, 0x28, 0xaf, - 0xb2, 0x01, 0xf1, 0x44, 0x27, 0xd8, 0x3a, 0x3e, 0xf1, 0xe9, 0x17, 0xf3, 0x2a, 0x1f, 0x11, 0x6a, - 0x13, 0x0f, 0xfd, 0x13, 0xfa, 0x89, 0xbc, 0xca, 0x06, 0xe8, 0x36, 0x94, 0x8f, 0x5c, 0x7d, 0x80, - 0x5d, 0x72, 0xe3, 0xe4, 0x28, 0x26, 0x02, 0xa0, 0x27, 0x50, 0x61, 0x7e, 0xc3, 0x70, 0x4c, 0x6c, - 0xf0, 0x6b, 0x60, 0x36, 0x69, 0x3d, 0x26, 0x36, 0x54, 0xe6, 0x5f, 0xe8, 0x6f, 0x74, 0x0f, 0x6a, - 0x6c, 0xd6, 0xa1, 0xe5, 0xd3, 0x75, 0x0b, 0x74, 0xdd, 0x2a, 0x05, 0xae, 0x33, 0x58, 0x44, 0xf4, - 0xd3, 0x91, 0xde, 0x27, 0xf2, 0xa9, 0x08, 0x44, 0xbf, 0xc5, 0x60, 0xe8, 0x01, 0x4c, 0x33, 0xa2, - 0x23, 0x97, 0xdc, 0x9e, 0xb6, 0x71, 0xd6, 0x28, 0x52, 0xb2, 0x3a, 0x05, 0x6f, 0x05, 0x50, 0xc2, - 0x28, 0x73, 0x32, 0x8c, 0xd1, 0x52, 0x82, 0x51, 0x6a, 0x93, 0x9c, 0xd1, 0xd7, 0xe1, 0x6f, 0xc2, - 0x03, 0x9b, 0x15, 0x30, 0x5a, 0x66, 0x3c, 0x50, 0xa0, 0xc0, 0x28, 0x23, 0x0a, 0x18, 0xad, 0x0a, - 0x44, 0x01, 0xa3, 0x4b, 0x80, 0x4e, 0xf1, 0x99, 0x46, 0x25, 0xa7, 0x59, 0xb6, 0x8f, 0xdd, 0xd7, - 0x7a, 0xbf, 0x01, 0x77, 0xa5, 0x87, 0x92, 0x2a, 0x9f, 0xe2, 0xb3, 0x2d, 0x82, 0x68, 0x73, 0x78, - 0xf3, 0x6f, 0x32, 0x50, 0x60, 0xf7, 0x19, 0x7a, 0x04, 0xb9, 0x23, 0xab, 0xcf, 0x02, 0x01, 0xd1, - 0x94, 0xb7, 0xac, 0x3e, 0x66, 0x24, 0xdb, 0x53, 0x2a, 0x25, 0x41, 0x8f, 0xa1, 0xe0, 0xf9, 0x2e, - 0xd6, 0x07, 0xdc, 0x07, 0xde, 0x10, 0x2e, 0x3c, 0x02, 0x0e, 0xc9, 0x39, 0x19, 0x7a, 0x0e, 0x25, - 0x0f, 0x1f, 0x0f, 0xb0, 0xed, 0x7b, 0xdc, 0xf1, 0xdd, 0x8e, 0xa6, 0x30, 0x04, 0x36, 0x63, 0x1f, - 0x0a, 0xe9, 0xd1, 0x32, 0x14, 0xac, 0x81, 0x7e, 0x8c, 0xbd, 0x73, 0xa1, 0x42, 0x9b, 0x80, 0xa3, - 0x6f, 0x31, 0x2a, 0xb2, 0x8f, 0x81, 0xa1, 0x0f, 0xa9, 0x8a, 0x88, 0xfb, 0xd8, 0x35, 0xf4, 0x61, - 0xb4, 0x0f, 0x42, 0x22, 0xde, 0xdc, 0x85, 0x89, 0x6e, 0x6e, 0x72, 0x0b, 0x1b, 0x14, 0xd4, 0xfc, - 0x43, 0x09, 0x20, 0xe2, 0x18, 0xfd, 0x00, 0xca, 0x44, 0x34, 0x9a, 0x7f, 0x36, 0x64, 0x22, 0xac, - 0x27, 0x03, 0x0d, 0xb6, 0xc1, 0xde, 0xd9, 0x10, 0xab, 0xa5, 0x23, 0xfe, 0x8b, 0x38, 0x67, 0xf2, - 0x7b, 0xa8, 0xfb, 0x27, 0xcc, 0x2c, 0xd5, 0x70, 0x8c, 0x1e, 0x81, 0x6c, 0x5a, 0x9e, 0x7e, 0xd8, - 0xc7, 0xda, 0x40, 0xb7, 0xad, 0x23, 0xec, 0xf9, 0xfc, 0x46, 0x9c, 0xe6, 0xf0, 0x5d, 0x0e, 0x6e, - 0xbe, 0x82, 0xaa, 0x28, 0x79, 0xb4, 0x06, 0x25, 0x1a, 0xf9, 0x19, 0x4e, 0x9f, 0x33, 0xf3, 0x51, - 0xe2, 0x88, 0xf6, 0x39, 0x5a, 0x0d, 0x09, 0x11, 0x82, 0xdc, 0xc8, 0xed, 0x7b, 0x8d, 0xcc, 0xdd, - 0xec, 0xc3, 0xb2, 0x4a, 0x7f, 0x37, 0xff, 0x3a, 0x07, 0xb3, 0x29, 0x07, 0x44, 0x0e, 0x34, 0xf1, - 0x81, 0x4f, 0xd2, 0x0f, 0x34, 0xe5, 0x3b, 0x0f, 0x60, 0x9a, 0xec, 0x91, 0x44, 0x9d, 0x1a, 0xb9, - 0x62, 0xac, 0xb7, 0x7c, 0xeb, 0xf5, 0x00, 0xbc, 0x4f, 0xa1, 0x44, 0xdf, 0x87, 0x7d, 0xfd, 0xac, - 0x6f, 0x79, 0x3e, 0x8b, 0x51, 0xa9, 0x4b, 0x52, 0xab, 0x01, 0x90, 0xc6, 0xa9, 0x4b, 0x80, 0xc8, - 0x87, 0xb5, 0x38, 0x65, 0x85, 0x52, 0xca, 0x04, 0xb3, 0x2f, 0x52, 0x3f, 0x02, 0x99, 0x2b, 0x96, - 0x66, 0x8e, 0x5c, 0x9d, 0x78, 0x2f, 0xaa, 0x56, 0x35, 0x75, 0x9a, 0xc3, 0x37, 0x39, 0x18, 0x29, - 0x02, 0x9b, 0xde, 0xe8, 0x88, 0xb0, 0x09, 0x74, 0xa7, 0x17, 0xa8, 0x6e, 0x97, 0xd2, 0x44, 0x9b, - 0x60, 0xe3, 0xd4, 0x53, 0x2c, 0xa5, 0x9e, 0x22, 0x7a, 0x00, 0x19, 0x6f, 0x8d, 0xeb, 0xed, 0x4c, - 0xf4, 0x91, 0xb5, 0x83, 0x61, 0xdf, 0xd1, 0xcd, 0xf5, 0x4c, 0x43, 0xda, 0x9e, 0x52, 0x33, 0xde, - 0x1a, 0x5a, 0x84, 0xec, 0xb1, 0x31, 0xe4, 0x3a, 0x1b, 0x05, 0xd9, 0x2f, 0x36, 0xf6, 0x63, 0xa4, - 0x84, 0x08, 0x3d, 0x81, 0xbc, 0xfe, 0xb3, 0x91, 0x8b, 0xa9, 0xbb, 0x12, 0xa3, 0xdf, 0x16, 0x81, - 0xae, 0xf7, 0x9d, 0xc3, 0xd8, 0x1c, 0x46, 0x8c, 0xd6, 0xa0, 0xa0, 0xf7, 0xad, 0x4e, 0xb7, 0x4b, - 0x1d, 0x91, 0x68, 0xe1, 0x2d, 0x0a, 0x8e, 0xcd, 0xe1, 0xa4, 0xc4, 0x38, 0x58, 0x4c, 0xdc, 0xfc, - 0xef, 0x2c, 0x54, 0x04, 0xeb, 0x24, 0x42, 0x30, 0xf4, 0xa1, 0x3f, 0x72, 0x05, 0x97, 0x24, 0x31, - 0xb1, 0x73, 0x78, 0xe0, 0x91, 0xa2, 0xab, 0x24, 0x93, 0x7e, 0x95, 0x64, 0x63, 0x57, 0x49, 0x8a, - 0x2e, 0xe5, 0x52, 0x75, 0xa9, 0x75, 0xfe, 0x34, 0xf3, 0x09, 0x2b, 0xa5, 0x0c, 0x8f, 0x39, 0xc9, - 0x27, 0x50, 0xa1, 0x2e, 0x86, 0x7b, 0xf6, 0x42, 0xc2, 0xb3, 0xd3, 0xe9, 0xdc, 0xb3, 0x5b, 0xe1, - 0xef, 0xd4, 0xf3, 0x2f, 0x8e, 0x3b, 0xff, 0xd2, 0xc4, 0xe7, 0x5f, 0xbe, 0xd4, 0xf9, 0xc3, 0xd5, - 0xce, 0xbf, 0x72, 0x95, 0xf3, 0xef, 0x02, 0x44, 0xee, 0x36, 0xe6, 0xe4, 0xa4, 0x09, 0x9c, 0x5c, - 0x26, 0xdd, 0xc9, 0xfd, 0x83, 0x04, 0xb5, 0x98, 0x5b, 0x46, 0xf7, 0xa8, 0xc0, 0xa4, 0x0b, 0x04, - 0xc6, 0x85, 0x75, 0x9f, 0x09, 0x2b, 0x73, 0x91, 0xb0, 0x02, 0x41, 0xad, 0x04, 0x82, 0xca, 0x8e, - 0x17, 0x54, 0x24, 0xa4, 0x15, 0x28, 0xea, 0x7d, 0x4b, 0x73, 0xbc, 0xe0, 0x6a, 0x4a, 0x97, 0x52, - 0x20, 0x21, 0xcf, 0x23, 0xa9, 0xdb, 0xd0, 0x75, 0xc8, 0x7d, 0xed, 0x36, 0xff, 0x35, 0x07, 0xa5, - 0x80, 0x55, 0x74, 0x0f, 0x40, 0x37, 0x0c, 0xec, 0x79, 0xda, 0x29, 0xe6, 0x61, 0xfa, 0x7a, 0xee, - 0x9b, 0xf7, 0x4b, 0x92, 0x5a, 0x66, 0xf0, 0x97, 0xf8, 0x0c, 0xdd, 0x86, 0x82, 0x87, 0x0d, 0x17, - 0x33, 0x09, 0x05, 0x04, 0x1c, 0x86, 0x1e, 0x41, 0xcd, 0xc3, 0x9e, 0x67, 0x39, 0xb6, 0xe6, 0x3b, - 0xa7, 0xd8, 0x66, 0x3e, 0x90, 0x13, 0x55, 0x39, 0xaa, 0x47, 0x30, 0x68, 0x09, 0xa6, 0x75, 0xcf, - 0x1b, 0x0d, 0xb0, 0xe6, 0x3a, 0x7d, 0xac, 0xe9, 0xae, 0x4d, 0x43, 0x89, 0x80, 0xb8, 0xc6, 0x90, - 0xaa, 0xd3, 0xc7, 0x2d, 0xd7, 0x46, 0x5d, 0xf8, 0x48, 0xa4, 0xc6, 0x6f, 0x7d, 0xec, 0xda, 0x7a, - 0x9f, 0xc4, 0x9f, 0x35, 0x3a, 0xeb, 0x36, 0x99, 0xf5, 0xee, 0xfd, 0xd2, 0x5c, 0x34, 0x4f, 0xe1, - 0x44, 0xed, 0x4d, 0x35, 0x0d, 0x6a, 0x12, 0x83, 0x76, 0xf1, 0x31, 0x71, 0xbf, 0xcc, 0xa9, 0xf3, - 0x11, 0xd1, 0x15, 0x6c, 0x9b, 0x43, 0xc7, 0xb2, 0x7d, 0x6e, 0xc9, 0xe1, 0x98, 0xcc, 0x39, 0x1c, - 0x19, 0xa7, 0xbc, 0x0a, 0x50, 0x56, 0xf9, 0x08, 0x3d, 0x04, 0xf9, 0xc8, 0x71, 0x0d, 0xac, 0x11, - 0x8d, 0xd2, 0x3c, 0xff, 0xac, 0xcf, 0xee, 0xf3, 0x92, 0x5a, 0xa7, 0xf0, 0x7d, 0xdd, 0x3f, 0xe9, - 0x12, 0x28, 0xfa, 0x21, 0x94, 0x06, 0xd8, 0xd7, 0x69, 0x56, 0xc5, 0xd2, 0xfa, 0x3b, 0xe7, 0xd4, - 0x66, 0x79, 0x97, 0x53, 0x28, 0xb6, 0xef, 0x9e, 0xa9, 0xe1, 0x04, 0xd4, 0x80, 0xa2, 0xaf, 0x1f, - 0x1f, 0x5b, 0xf6, 0x31, 0xb5, 0xd1, 0xb2, 0x1a, 0x0c, 0xd1, 0x63, 0x98, 0x35, 0x1c, 0xdb, 0xa7, - 0xb7, 0x8a, 0xe5, 0x0d, 0x1d, 0xcf, 0xa2, 0x17, 0x4b, 0x99, 0x52, 0x21, 0x8e, 0xda, 0x8c, 0x30, - 0x24, 0x0b, 0x1c, 0xba, 0xce, 0xdb, 0x33, 0x6e, 0x94, 0x51, 0x48, 0xb3, 0x4f, 0xa0, 0x41, 0x16, - 0x48, 0x49, 0x16, 0x7e, 0x08, 0xb5, 0x18, 0x47, 0x24, 0xa9, 0x0e, 0x95, 0x44, 0x25, 0x3f, 0x89, - 0xcf, 0x7c, 0xad, 0xf7, 0x47, 0x98, 0xdf, 0xa3, 0x6c, 0xf0, 0x3c, 0xf3, 0x4c, 0x6a, 0xbe, 0x81, - 0x72, 0xa8, 0xe8, 0xe8, 0x3e, 0x54, 0x0c, 0x17, 0xd3, 0x40, 0x5f, 0xef, 0x7b, 0x31, 0x2d, 0x13, - 0x11, 0x82, 0x9c, 0x33, 0x31, 0x39, 0x87, 0x5c, 0x67, 0xbf, 0x95, 0xeb, 0xe6, 0x37, 0x12, 0x4c, - 0x27, 0x0c, 0x07, 0x3d, 0x80, 0xaa, 0x6e, 0x18, 0xce, 0xc8, 0xf6, 0x85, 0x92, 0x53, 0xc0, 0x00, - 0xc7, 0xd0, 0x5b, 0xfa, 0x53, 0x08, 0x86, 0xd4, 0x1c, 0x44, 0x6d, 0x07, 0x8e, 0x20, 0xf6, 0xf0, - 0x29, 0xd4, 0x89, 0x6c, 0x75, 0xcb, 0xc6, 0xae, 0x18, 0x20, 0xd4, 0x42, 0x28, 0x59, 0xad, 0xf9, - 0xe7, 0x12, 0x54, 0x45, 0x7b, 0xfc, 0x10, 0xc6, 0xf6, 0x01, 0xd5, 0xb7, 0xf9, 0x7b, 0x50, 0x11, - 0x04, 0x98, 0x52, 0x33, 0x59, 0x80, 0xd2, 0xc8, 0x23, 0x86, 0x33, 0x08, 0x4e, 0x38, 0x1c, 0xa3, - 0xbb, 0x50, 0x1a, 0xea, 0x9e, 0xf7, 0xc6, 0x71, 0x59, 0x7e, 0x1b, 0x30, 0x1a, 0x42, 0x9b, 0x1e, - 0xcc, 0xec, 0x58, 0xde, 0x65, 0x4a, 0x7f, 0x8f, 0xa0, 0xcc, 0x6a, 0x8e, 0xc4, 0xc4, 0xd9, 0xee, - 0xab, 0xef, 0xde, 0x2f, 0x95, 0x18, 0xb0, 0xbd, 0xa9, 0x06, 0xbf, 0xa8, 0x19, 0xeb, 0x86, 0x6f, - 0xbd, 0xc6, 0x3c, 0x32, 0xe5, 0xa3, 0xe6, 0x8f, 0x00, 0x89, 0x1f, 0xf5, 0x86, 0x8e, 0xed, 0x91, - 0x85, 0xf3, 0x96, 0x8f, 0x07, 0xe7, 0xcb, 0x05, 0x8c, 0x8e, 0x24, 0xe1, 0x2a, 0xa3, 0x68, 0xfe, - 0xad, 0x04, 0xb3, 0x07, 0x43, 0x53, 0xf7, 0x71, 0x9c, 0xf1, 0x18, 0x6f, 0xd2, 0x58, 0xde, 0xb8, - 0x20, 0x33, 0x91, 0x20, 0xa3, 0xd2, 0x58, 0x36, 0x56, 0x1a, 0xbb, 0x0f, 0xd3, 0xba, 0x69, 0x6a, - 0x2c, 0x59, 0xd1, 0x68, 0x10, 0x9c, 0xa3, 0x41, 0x70, 0x4d, 0x37, 0x4d, 0x16, 0x2f, 0x1f, 0xb8, - 0x7d, 0x8f, 0xc4, 0x9a, 0x2e, 0x1e, 0x38, 0xaf, 0x71, 0x8c, 0x34, 0x4f, 0x49, 0x65, 0x86, 0x89, - 0xa8, 0x9b, 0x5f, 0xc2, 0x4c, 0xd7, 0x77, 0x86, 0x57, 0xe5, 0xbf, 0xf9, 0x97, 0x15, 0x80, 0x48, - 0x30, 0x97, 0xd9, 0xf9, 0x3d, 0x28, 0xd2, 0xd3, 0x0d, 0x8f, 0x0f, 0xde, 0xbd, 0x5f, 0x2a, 0x10, - 0x50, 0x7b, 0x53, 0x65, 0x7f, 0xcd, 0xb8, 0x0a, 0xd4, 0x12, 0x2a, 0xf0, 0x1c, 0x2a, 0xac, 0xda, - 0xc8, 0x12, 0x9a, 0x05, 0x1a, 0xeb, 0xdc, 0x4c, 0x9c, 0x17, 0x2b, 0xab, 0xd1, 0x8c, 0x06, 0xbc, - 0xf0, 0x37, 0xfa, 0x75, 0x92, 0x1d, 0xea, 0xfe, 0xc8, 0xe3, 0x05, 0x97, 0x1b, 0xc9, 0x69, 0x14, - 0xa9, 0x72, 0x22, 0xf4, 0x31, 0x00, 0xad, 0xe6, 0x61, 0x53, 0xd3, 0x7d, 0xea, 0x10, 0xb3, 0x6a, - 0x99, 0x43, 0x5a, 0x3e, 0xba, 0x49, 0x2d, 0x8a, 0x21, 0x2b, 0x14, 0x59, 0xa4, 0xe3, 0x16, 0xad, - 0x68, 0x8e, 0xa8, 0x8a, 0x50, 0x24, 0x62, 0x33, 0x39, 0xa4, 0x45, 0x52, 0xb2, 0x02, 0x93, 0x48, - 0xe3, 0x63, 0xea, 0xaf, 0x6e, 0x09, 0x29, 0x50, 0xb2, 0x16, 0x4e, 0xee, 0x68, 0x46, 0x8c, 0x9e, - 0x12, 0xd3, 0x26, 0xd9, 0x44, 0xe3, 0x93, 0x44, 0xa6, 0xaa, 0xbc, 0x1d, 0x3a, 0xae, 0xaf, 0x52, - 0xa4, 0x30, 0x8f, 0x51, 0xa3, 0x7d, 0xa8, 0x53, 0x79, 0x1a, 0xce, 0x80, 0xfa, 0x79, 0xcc, 0x83, - 0x82, 0x7b, 0xe1, 0x7c, 0xd5, 0x71, 0x06, 0x1b, 0x01, 0x36, 0xf6, 0x79, 0x1e, 0x48, 0xd5, 0x5c, - 0x91, 0x02, 0x7d, 0x9f, 0xd5, 0xd2, 0xeb, 0x89, 0x3a, 0xe3, 0x2b, 0x7c, 0x98, 0x36, 0x99, 0x96, - 0xd5, 0xdb, 0x50, 0x11, 0x8a, 0x3a, 0x8d, 0x59, 0x3a, 0xf5, 0x7b, 0x69, 0x15, 0xaf, 0xb4, 0x25, - 0xc4, 0xb9, 0xa8, 0x0b, 0xd3, 0xac, 0xce, 0x14, 0x6d, 0x88, 0xa5, 0x26, 0xbf, 0x16, 0xbd, 0x03, - 0x10, 0xfc, 0xd8, 0x1d, 0xd5, 0xfd, 0x18, 0x09, 0xfa, 0x1c, 0xf2, 0x14, 0xc2, 0x73, 0x97, 0x5b, - 0xf1, 0xa5, 0xd2, 0x56, 0x60, 0xf4, 0xe8, 0x39, 0xd4, 0xb9, 0xcd, 0xb9, 0xd8, 0x1b, 0xf5, 0x7d, - 0xaf, 0x31, 0x9d, 0xf0, 0x21, 0xcc, 0xf2, 0xa8, 0x0f, 0xa9, 0x31, 0x52, 0x95, 0x51, 0xa2, 0x27, - 0x50, 0xa5, 0xb9, 0x79, 0x30, 0x53, 0xa6, 0x33, 0x67, 0x62, 0x15, 0x0e, 0x3a, 0xaf, 0x42, 0xc8, - 0x82, 0x59, 0x5f, 0x42, 0x90, 0x12, 0x86, 0x13, 0x67, 0x12, 0x35, 0x3b, 0x9e, 0xff, 0x31, 0xc7, - 0x55, 0xe7, 0xd4, 0xc1, 0xfc, 0x67, 0x50, 0x63, 0xe9, 0x42, 0x30, 0x7b, 0x2e, 0xc1, 0x30, 0x4d, - 0x18, 0xd8, 0xdc, 0x2a, 0xa5, 0x14, 0xf8, 0x1d, 0x18, 0xfa, 0x30, 0x9c, 0x78, 0x3b, 0xc1, 0x2f, - 0x09, 0xad, 0x19, 0xbf, 0x84, 0x2c, 0x98, 0x35, 0x07, 0x79, 0xec, 0xba, 0x8e, 0xcb, 0xc3, 0x0e, - 0x36, 0x20, 0x36, 0x42, 0x7f, 0xd0, 0xa4, 0xa5, 0x31, 0xcf, 0xca, 0x6a, 0x14, 0x42, 0xd2, 0x13, - 0x12, 0xd3, 0x98, 0xd8, 0xd7, 0xad, 0xbe, 0xd7, 0xb8, 0xc1, 0x62, 0x1a, 0x3e, 0x44, 0x9f, 0xc1, - 0x4c, 0x10, 0x90, 0x6b, 0x7d, 0xc7, 0x60, 0xa9, 0xf2, 0x47, 0x2c, 0xad, 0x0e, 0x10, 0x3b, 0x1c, - 0x8e, 0x96, 0x61, 0xf6, 0x50, 0x37, 0x4e, 0x47, 0x43, 0x8d, 0x17, 0x4a, 0xb4, 0x91, 0x87, 0xcd, - 0xc6, 0x4d, 0x56, 0x47, 0x66, 0x28, 0x1e, 0xba, 0x1f, 0x78, 0xd8, 0x44, 0x77, 0xa0, 0xe2, 0x62, - 0xdf, 0x3d, 0xd3, 0xe8, 0x5d, 0xde, 0xb8, 0x45, 0xd9, 0x02, 0x0a, 0xda, 0x20, 0x10, 0x62, 0xbb, - 0xbc, 0xc2, 0x54, 0x4c, 0xbc, 0x3d, 0x45, 0xc7, 0x4c, 0x2e, 0x18, 0xaa, 0x24, 0x52, 0x58, 0x67, - 0xfa, 0x8c, 0xd7, 0xb0, 0x92, 0x39, 0x54, 0x70, 0xc2, 0x9c, 0x9c, 0x55, 0xb1, 0x3e, 0x17, 0x8a, - 0x52, 0xd5, 0x64, 0x1d, 0x4b, 0x38, 0x59, 0x3e, 0x29, 0x24, 0x5e, 0x2f, 0x43, 0xd1, 0xe5, 0x3a, - 0x5a, 0x22, 0xce, 0x82, 0xc8, 0xbf, 0xf9, 0x8b, 0x0c, 0x40, 0xc4, 0x5b, 0xfa, 0xcb, 0x87, 0xe0, - 0xe7, 0x32, 0xe3, 0xfc, 0x5c, 0x36, 0xee, 0xe7, 0x16, 0xa0, 0x14, 0x2b, 0x56, 0x64, 0xd5, 0x70, - 0x8c, 0x56, 0x43, 0x67, 0xcb, 0xd2, 0xd9, 0x85, 0x14, 0x41, 0x2d, 0x27, 0x3c, 0x6e, 0xa8, 0x29, - 0x05, 0x51, 0x53, 0x9a, 0x50, 0xeb, 0xeb, 0x1e, 0x51, 0x76, 0x72, 0x30, 0x3a, 0xcb, 0x52, 0xb3, - 0x6a, 0x85, 0x00, 0x55, 0x02, 0x6b, 0xf9, 0x44, 0x5d, 0x08, 0xda, 0xc2, 0x1e, 0x15, 0x71, 0x4d, - 0x0d, 0x86, 0xcd, 0x65, 0x28, 0xb0, 0xaf, 0x20, 0x80, 0x42, 0x6b, 0xa3, 0xd7, 0xfe, 0x4a, 0x91, - 0xa7, 0x50, 0x15, 0x4a, 0x5b, 0xed, 0xbd, 0x76, 0x77, 0x5b, 0xd9, 0x94, 0x25, 0x82, 0xd9, 0x6a, - 0xb5, 0x77, 0x94, 0x4d, 0x39, 0xd3, 0xfc, 0x85, 0x04, 0xa5, 0xe0, 0x54, 0x82, 0x04, 0x51, 0x0c, - 0x46, 0x82, 0xf1, 0x07, 0x12, 0x5b, 0x21, 0x21, 0x36, 0x04, 0x39, 0xcf, 0xfa, 0x19, 0xe6, 0xe2, - 0xa4, 0xbf, 0x09, 0x7d, 0xa8, 0xe8, 0x2c, 0x42, 0x0b, 0xc7, 0xcd, 0x7f, 0xca, 0x40, 0x55, 0xd4, - 0x89, 0xf3, 0xb5, 0x29, 0x69, 0xe2, 0xda, 0x54, 0xe9, 0x82, 0xda, 0x94, 0xc8, 0x6f, 0xe6, 0x02, - 0x7e, 0xb3, 0x02, 0xbf, 0x9f, 0xc1, 0x4c, 0xb8, 0x70, 0xc8, 0x38, 0x0b, 0x3a, 0xe5, 0x00, 0x11, - 0x5a, 0xe8, 0x13, 0x98, 0x8f, 0xb3, 0x12, 0xce, 0x60, 0xee, 0x62, 0x4e, 0x64, 0x27, 0x9c, 0x75, - 0x8f, 0xe4, 0x94, 0xcc, 0x07, 0x32, 0x4b, 0xcd, 0xd3, 0xef, 0x57, 0x39, 0x90, 0xd9, 0x6a, 0xfc, - 0x84, 0x0a, 0xe3, 0x4e, 0xa8, 0x18, 0x3b, 0xa1, 0xe6, 0x1f, 0x4b, 0x00, 0x91, 0x17, 0x9c, 0xbc, - 0x98, 0x73, 0x27, 0xaa, 0xc4, 0x10, 0xa6, 0x24, 0xba, 0x6a, 0x50, 0x74, 0x39, 0xcf, 0xd2, 0x25, - 0x94, 0xa6, 0xf9, 0x8f, 0x12, 0x94, 0x02, 0xff, 0xfa, 0x1d, 0xe8, 0x65, 0xee, 0x82, 0x73, 0xce, - 0x5f, 0xa0, 0x97, 0x85, 0xb8, 0x5e, 0x12, 0x49, 0x04, 0x97, 0x34, 0x91, 0x04, 0x93, 0x2f, 0xf0, - 0x4b, 0x77, 0x64, 0xfb, 0xcd, 0x77, 0x19, 0xb8, 0xd1, 0x1a, 0xf9, 0xce, 0xb9, 0x9b, 0x5f, 0x78, - 0x53, 0x97, 0x26, 0x7a, 0x53, 0x9f, 0x4a, 0x7d, 0x53, 0xcf, 0x7c, 0xcb, 0x9b, 0xfa, 0x94, 0xf0, - 0xa6, 0xfe, 0x05, 0xbf, 0x87, 0x83, 0x87, 0xf5, 0x2c, 0xbd, 0xd7, 0x16, 0xd2, 0xca, 0xe4, 0xfc, - 0x8d, 0x9d, 0x5e, 0xc8, 0x1d, 0xfe, 0xce, 0xae, 0x44, 0x17, 0x72, 0xb0, 0x42, 0x8e, 0xae, 0x30, - 0xf6, 0x2d, 0x21, 0xbc, 0x97, 0xf9, 0x32, 0xc4, 0x7b, 0xf3, 0xee, 0x88, 0xe6, 0x9f, 0x64, 0x60, - 0x9a, 0x08, 0x47, 0x08, 0x3e, 0x2e, 0x5d, 0xac, 0xca, 0xa7, 0xd7, 0xf2, 0x58, 0x69, 0x2a, 0x33, - 0x51, 0x69, 0x2a, 0x3b, 0x71, 0x69, 0x2a, 0x37, 0x69, 0x69, 0xea, 0x71, 0x58, 0xbf, 0x2b, 0x4c, - 0x50, 0x99, 0x8a, 0xd5, 0xee, 0xfe, 0x2a, 0x07, 0xb3, 0x29, 0x91, 0x2e, 0xc9, 0x3f, 0x58, 0xa4, - 0x9b, 0xc8, 0x3f, 0x18, 0x90, 0xe4, 0x1f, 0xfc, 0x97, 0x49, 0xf2, 0x29, 0xf6, 0x40, 0xef, 0x1c, - 0x1d, 0x79, 0xd8, 0xd7, 0x06, 0x1e, 0x37, 0x90, 0x1a, 0x05, 0x77, 0x28, 0x74, 0xd7, 0x23, 0x57, - 0x0e, 0xb6, 0x4d, 0x81, 0x8a, 0x59, 0x4a, 0x05, 0xdb, 0x66, 0x48, 0x23, 0xf6, 0xa1, 0xe4, 0x2e, - 0xdd, 0x87, 0x92, 0x9f, 0xb8, 0x0f, 0xa5, 0x70, 0xb9, 0x3e, 0x94, 0xe2, 0x35, 0xfa, 0x50, 0x4a, - 0x57, 0xeb, 0x43, 0x29, 0x4f, 0xde, 0x87, 0x02, 0x97, 0xef, 0x43, 0xa9, 0x5c, 0xab, 0x0f, 0xe5, - 0x5f, 0x0a, 0xb0, 0x70, 0x71, 0x7a, 0x33, 0xbe, 0xdc, 0x10, 0x65, 0xe5, 0x99, 0x31, 0x0d, 0x2b, - 0xd9, 0x64, 0xab, 0xc8, 0xe7, 0xc0, 0x5e, 0x68, 0xb5, 0x81, 0xf5, 0xd6, 0xb2, 0x8f, 0x1b, 0xd3, - 0xf4, 0x44, 0x12, 0x0d, 0x15, 0xbb, 0x14, 0xa7, 0xb2, 0xb7, 0x63, 0x36, 0x48, 0xf4, 0x98, 0xe4, - 0x26, 0xe8, 0x74, 0xc9, 0xa7, 0x74, 0xba, 0xa0, 0x27, 0x3c, 0xd6, 0x64, 0x8a, 0x33, 0xc6, 0x8b, - 0xf1, 0x44, 0x86, 0x05, 0x9d, 0x6b, 0x89, 0xc0, 0x36, 0xfd, 0xe9, 0x34, 0x28, 0xac, 0xf3, 0xb0, - 0xf6, 0x4b, 0x21, 0x52, 0x85, 0x6f, 0x7f, 0x3e, 0xe5, 0xb3, 0xa3, 0x27, 0xd4, 0x48, 0x6d, 0x4b, - 0xd7, 0x50, 0xdb, 0xf2, 0x25, 0xd4, 0x36, 0xe9, 0xea, 0x2b, 0x97, 0x73, 0xf5, 0xbf, 0x19, 0x66, - 0x7b, 0xc1, 0x02, 0xd5, 0x64, 0xea, 0x25, 0x48, 0x2b, 0xc8, 0xf7, 0xc6, 0x5c, 0x14, 0xb5, 0xcb, - 0x5f, 0x14, 0xe8, 0x37, 0x82, 0x04, 0x2e, 0x58, 0xa4, 0x4e, 0x17, 0x49, 0x7d, 0x7f, 0xe6, 0x19, - 0x5c, 0x30, 0x55, 0x34, 0x2c, 0x79, 0x32, 0xc3, 0x7a, 0x9e, 0x69, 0x48, 0x91, 0x17, 0x16, 0x6f, - 0xa9, 0xff, 0xca, 0x83, 0x9c, 0xcc, 0xf9, 0xbf, 0xa3, 0xce, 0xaa, 0x6a, 0x7a, 0x67, 0x55, 0xa8, - 0xfb, 0xb9, 0x2b, 0xea, 0x7e, 0xfe, 0x6a, 0xba, 0x5f, 0xb8, 0x96, 0xee, 0x7f, 0x57, 0x2e, 0x3b, - 0xa9, 0xfb, 0xe5, 0xeb, 0xea, 0x3e, 0x5c, 0x4f, 0xf7, 0x2b, 0x1f, 0x42, 0xf7, 0x6b, 0x57, 0xd2, - 0xfd, 0xfa, 0x75, 0x75, 0xff, 0xe7, 0x39, 0x68, 0x5c, 0x54, 0xb4, 0x1a, 0x7f, 0xab, 0x88, 0x6d, - 0x6f, 0x99, 0x44, 0xdb, 0xdb, 0xf7, 0xa0, 0x1a, 0xeb, 0x77, 0x63, 0xd6, 0x50, 0xf1, 0xa2, 0x4e, - 0x37, 0x41, 0x6d, 0x72, 0xd7, 0x88, 0x8e, 0xf3, 0xd7, 0x88, 0x8e, 0x0b, 0xd7, 0x55, 0x9b, 0xe2, - 0xf5, 0xd4, 0xa6, 0xf4, 0x21, 0xd4, 0xa6, 0x7c, 0x25, 0xb5, 0x81, 0x4b, 0xa8, 0x8d, 0xa0, 0x2c, - 0x7f, 0x5a, 0x80, 0x5b, 0x63, 0x4a, 0x92, 0xe3, 0xf5, 0xe5, 0x29, 0xb0, 0x4e, 0xae, 0xa8, 0x39, - 0x34, 0x13, 0x35, 0x87, 0x52, 0x0c, 0x6f, 0x0e, 0x55, 0xc5, 0x91, 0x49, 0xe6, 0x25, 0x9a, 0x4a, - 0xb3, 0xe9, 0x4d, 0xa5, 0x89, 0x96, 0xd2, 0xff, 0x23, 0x17, 0x5a, 0xba, 0x96, 0x0b, 0x2d, 0x5c, - 0xc3, 0x85, 0x16, 0x7f, 0x15, 0x3e, 0x5c, 0xc5, 0x16, 0xa6, 0xaf, 0xeb, 0x42, 0xff, 0x53, 0x02, - 0x74, 0xbe, 0xba, 0x3e, 0xde, 0x18, 0xee, 0x0b, 0x3d, 0xa6, 0x99, 0x73, 0x3d, 0xa6, 0x51, 0x87, - 0xe9, 0x63, 0xae, 0xc4, 0xd9, 0xc4, 0x13, 0xc5, 0xa6, 0xe5, 0x62, 0xc3, 0x4f, 0xe9, 0x1c, 0xfc, - 0x14, 0x6a, 0x6f, 0xf0, 0xa1, 0xe7, 0x18, 0xa7, 0xd8, 0x8f, 0x9a, 0xc8, 0xb7, 0xa7, 0xd4, 0x6a, - 0x08, 0x26, 0xb1, 0xb5, 0x28, 0x80, 0xfc, 0x55, 0x04, 0xd0, 0xfc, 0xb3, 0x0c, 0xc8, 0x49, 0x2e, - 0xfe, 0x9f, 0xe6, 0xf6, 0x09, 0xc9, 0xfc, 0x32, 0x03, 0x33, 0xe7, 0xec, 0xe7, 0xbb, 0xea, 0x5f, - 0x2c, 0x8c, 0x93, 0x68, 0x76, 0x22, 0x89, 0xe6, 0x26, 0x96, 0x68, 0xfe, 0xf2, 0x12, 0x2d, 0x5e, - 0x45, 0xa2, 0xbf, 0x1b, 0x3c, 0x55, 0xef, 0xd0, 0xc4, 0xf5, 0x0a, 0x4f, 0xd5, 0x17, 0xa4, 0xc0, - 0xe4, 0x3b, 0xcd, 0x77, 0xe1, 0x4b, 0x78, 0x97, 0xbf, 0x6a, 0x5d, 0x7a, 0x79, 0xfe, 0xbe, 0xcd, - 0xd8, 0xd5, 0x84, 0x26, 0xcf, 0x9a, 0x6e, 0x9a, 0x4c, 0x01, 0x12, 0xef, 0xdb, 0x22, 0x69, 0x56, - 0x7c, 0xdf, 0x8e, 0xa8, 0x29, 0x73, 0x5f, 0x40, 0x3d, 0xfe, 0x20, 0x83, 0x1e, 0x40, 0xce, 0xb2, - 0x8f, 0x9c, 0x73, 0x4f, 0xfc, 0xc2, 0xf3, 0x1c, 0x25, 0x20, 0xd3, 0x17, 0x5f, 0x41, 0x55, 0xec, - 0xa0, 0x47, 0xf3, 0x80, 0x5a, 0x07, 0x9b, 0xed, 0x8e, 0xb6, 0xb1, 0xdd, 0xda, 0xdb, 0x53, 0x76, - 0xb4, 0xf5, 0x4e, 0x6f, 0x5b, 0x9e, 0x3a, 0x0f, 0xdf, 0x51, 0xb6, 0x7a, 0xb2, 0x84, 0x3e, 0x82, - 0xd9, 0x38, 0x5c, 0x6d, 0xbf, 0xd8, 0xee, 0xc9, 0x99, 0xc5, 0x5f, 0x4a, 0x70, 0x23, 0xf5, 0x72, - 0x42, 0x32, 0x54, 0xb7, 0x57, 0x9f, 0x3e, 0xd1, 0x3e, 0x5f, 0x5d, 0xd9, 0xd7, 0xd6, 0x56, 0xe4, - 0xa9, 0x38, 0xe4, 0xe9, 0x8a, 0x2c, 0xa1, 0x19, 0xa8, 0x51, 0xc8, 0xf7, 0x57, 0x9e, 0x31, 0xa2, - 0x4c, 0x02, 0xf4, 0x74, 0x45, 0xce, 0xa2, 0x9b, 0x70, 0x63, 0xbf, 0xa3, 0xf6, 0xd4, 0x56, 0xbb, - 0xa7, 0xc5, 0x96, 0xcc, 0x5d, 0x80, 0x7a, 0xba, 0x22, 0xe7, 0xd1, 0x02, 0xcc, 0xc7, 0x51, 0xe1, - 0x47, 0x0a, 0x17, 0xe1, 0x9e, 0xae, 0xc8, 0xc5, 0xc5, 0x75, 0xde, 0x75, 0x1f, 0x99, 0x21, 0x9a, - 0x03, 0x79, 0x53, 0xd9, 0x6a, 0x1d, 0xec, 0xf4, 0xb4, 0xad, 0xf6, 0x8e, 0xd2, 0xfb, 0xc9, 0xbe, - 0x22, 0x4f, 0xa1, 0x22, 0x64, 0x77, 0xf7, 0x9f, 0xc8, 0x12, 0xf9, 0xd1, 0x79, 0xf1, 0x42, 0xce, - 0x30, 0xc8, 0x9a, 0x9c, 0x5d, 0xdc, 0x0e, 0x4e, 0x2b, 0xe8, 0xca, 0x15, 0x97, 0xd8, 0x57, 0x3b, - 0xbd, 0xce, 0x46, 0x67, 0x47, 0x9e, 0x42, 0x25, 0xc8, 0xa9, 0xbd, 0xdd, 0x7d, 0xb6, 0x46, 0x57, - 0xed, 0xc9, 0x19, 0x54, 0x83, 0xf2, 0x2b, 0x65, 0xbd, 0xdb, 0xd9, 0x78, 0xa9, 0xf4, 0xe4, 0xec, - 0xe2, 0x1e, 0xdc, 0x48, 0x6d, 0xf3, 0x45, 0xf7, 0xe0, 0x4e, 0xb0, 0x60, 0x57, 0x79, 0xb1, 0xab, - 0xec, 0xf5, 0x94, 0x4d, 0xca, 0x9d, 0xb8, 0x3e, 0x91, 0xf8, 0x4e, 0x37, 0x82, 0x48, 0x8b, 0x8f, - 0x13, 0x6d, 0xc6, 0xbc, 0xe5, 0xb2, 0x0c, 0xf9, 0xf6, 0xde, 0xa6, 0xf2, 0xb5, 0x3c, 0x45, 0x18, - 0xe8, 0xb5, 0x77, 0x95, 0x6e, 0xaf, 0x45, 0x18, 0x5b, 0x3c, 0x82, 0xe9, 0x44, 0xbf, 0x26, 0x51, - 0x92, 0xf6, 0x6e, 0xeb, 0x85, 0xa2, 0x75, 0x0f, 0xb6, 0xb6, 0xda, 0x5f, 0x6b, 0xc1, 0xcc, 0x05, - 0x98, 0x8f, 0xc1, 0x85, 0x65, 0xd0, 0x1d, 0xb8, 0x15, 0xc3, 0xed, 0x75, 0xf6, 0x14, 0xad, 0xf3, - 0x95, 0xa2, 0xbe, 0x52, 0xdb, 0x3d, 0x45, 0xce, 0x2c, 0xfe, 0x18, 0xe4, 0x64, 0xb3, 0x03, 0x59, - 0x50, 0x79, 0xa1, 0x2a, 0xdd, 0xae, 0xd6, 0xed, 0x1c, 0xa8, 0x1b, 0x8a, 0x46, 0x24, 0xaf, 0xbd, - 0x52, 0xd6, 0xd9, 0xc7, 0x52, 0x70, 0xdd, 0xcd, 0x97, 0xb2, 0xb4, 0xf8, 0x17, 0x12, 0x54, 0xc5, - 0x16, 0x08, 0x34, 0x0b, 0xd3, 0x01, 0x71, 0xaf, 0xa5, 0xf6, 0xda, 0x7b, 0x2f, 0xe4, 0x29, 0xa2, - 0x69, 0x1c, 0xc8, 0x9f, 0xd1, 0x24, 0x01, 0xa4, 0xec, 0x6d, 0x12, 0xaa, 0x8c, 0x30, 0x75, 0xa3, - 0xb3, 0xbb, 0xbf, 0xa3, 0xf4, 0x14, 0x39, 0x2b, 0xd0, 0xf1, 0x77, 0xb6, 0x1c, 0x42, 0x50, 0x0f, - 0x56, 0x5b, 0xef, 0xa8, 0x3d, 0x65, 0x53, 0xce, 0xa3, 0x06, 0xcc, 0x71, 0xd8, 0x4e, 0x7b, 0xb7, - 0xdd, 0xd3, 0x54, 0xa5, 0xb5, 0xb1, 0xad, 0x6c, 0xca, 0x85, 0xc5, 0x03, 0xfe, 0xff, 0x3d, 0xbc, - 0x52, 0x86, 0xa0, 0x1e, 0x1c, 0xe6, 0x6e, 0xfb, 0x6b, 0xc6, 0xde, 0x3c, 0xa0, 0xcd, 0x83, 0xd6, - 0x4e, 0x68, 0x71, 0xad, 0x17, 0xca, 0x1e, 0x31, 0xc5, 0x05, 0x98, 0x8f, 0xc3, 0x77, 0x7a, 0x8a, - 0xba, 0xd7, 0x22, 0x42, 0x5c, 0xfd, 0xbb, 0x02, 0x14, 0x78, 0x79, 0xfd, 0x47, 0x50, 0x11, 0xba, - 0x2f, 0xd0, 0xb8, 0x9e, 0x8c, 0x85, 0xb4, 0xfe, 0x20, 0xd4, 0x82, 0xaa, 0xd8, 0x17, 0x84, 0xa2, - 0xa0, 0x2c, 0xa5, 0x5d, 0x28, 0x7d, 0x09, 0x05, 0x20, 0x6a, 0x4e, 0x42, 0x51, 0x54, 0x79, 0xae, - 0x4d, 0x6a, 0xe1, 0x56, 0x2a, 0x8e, 0x77, 0x33, 0x7d, 0x01, 0x10, 0xf5, 0xf7, 0x20, 0xf1, 0xe1, - 0x35, 0xd1, 0xf4, 0x93, 0xce, 0xc5, 0x4f, 0xa0, 0x41, 0xf7, 0x9c, 0x52, 0x36, 0x45, 0x93, 0xf4, - 0x8c, 0xa4, 0xae, 0xda, 0xcc, 0x7e, 0x93, 0x91, 0x90, 0x42, 0xec, 0x5c, 0x77, 0xfd, 0xb0, 0x6a, - 0x84, 0x2e, 0xee, 0x1e, 0x19, 0xb3, 0xcc, 0x01, 0xcc, 0xd3, 0x65, 0xce, 0xbf, 0x1d, 0x7d, 0x7b, - 0x47, 0xc9, 0x98, 0x65, 0x7f, 0x07, 0x6e, 0xd2, 0x65, 0xd3, 0x52, 0x35, 0x34, 0x51, 0x73, 0xc9, - 0x98, 0xc5, 0xdb, 0x20, 0x47, 0x8b, 0x9f, 0x53, 0xb2, 0xf3, 0x71, 0xf0, 0x98, 0xa5, 0xb6, 0x02, - 0x4d, 0x63, 0xd7, 0xfa, 0x39, 0x4d, 0x8b, 0xdd, 0xf6, 0x93, 0xac, 0xc3, 0x7c, 0xef, 0xb9, 0x75, - 0x62, 0xd7, 0xfa, 0xc5, 0xeb, 0xac, 0x6f, 0xfd, 0xf6, 0xbd, 0x63, 0xcb, 0x3f, 0x19, 0x1d, 0x2e, - 0x1b, 0xce, 0xe0, 0x31, 0xa7, 0x7a, 0x1c, 0xfc, 0x5b, 0x45, 0x00, 0xf8, 0x79, 0xa6, 0xb6, 0x63, - 0xbd, 0xc6, 0x2f, 0x59, 0x5b, 0xa6, 0xef, 0xfc, 0x5b, 0xa6, 0xce, 0xc7, 0xcf, 0x9f, 0x53, 0xc0, - 0x61, 0x81, 0x4e, 0x59, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x28, 0x7d, 0x69, 0x61, - 0x3c, 0x00, 0x00, + // 4314 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0xdc, 0x48, + 0x76, 0x62, 0x7f, 0xf7, 0xeb, 0x0f, 0x51, 0x25, 0x59, 0xd3, 0x96, 0x3d, 0x63, 0x6f, 0x3b, 0xe3, + 0x0f, 0x8d, 0x56, 0x56, 0x24, 0xaf, 0xc7, 0xeb, 0xcd, 0xce, 0xa6, 0xa5, 0xa6, 0xac, 0x5e, 0x4b, + 0x6a, 0x85, 0xdd, 0x1a, 0x4f, 0x02, 0x24, 0x04, 0x45, 0x96, 0x24, 0x42, 0xdd, 0x64, 0x2f, 0xc9, + 0x96, 0xad, 0xfd, 0x05, 0x9b, 0x1c, 0x92, 0x20, 0x01, 0x12, 0xc0, 0x40, 0x90, 0x1c, 0x82, 0x1c, + 0x82, 0x3d, 0xe5, 0x92, 0x6b, 0xce, 0xf9, 0x40, 0x0e, 0x41, 0x90, 0x7b, 0x8e, 0x81, 0x83, 0x45, + 0x0e, 0xb9, 0x07, 0xf5, 0x41, 0xb2, 0x48, 0x51, 0x72, 0xcb, 0x72, 0x66, 0x2f, 0x7b, 0x52, 0xd7, + 0x7b, 0xaf, 0x8a, 0xaf, 0xea, 0x7d, 0xd4, 0x7b, 0xaf, 0x9e, 0x60, 0x6e, 0x60, 0x9d, 0xe2, 0x13, + 0xcb, 0xd7, 0xf0, 0x91, 0x8b, 0x3d, 0x6f, 0x79, 0xe4, 0x3a, 0xbe, 0x83, 0x8a, 0x1c, 0xba, 0x10, + 0xa2, 0x87, 0x8e, 0x89, 0x07, 0x1c, 0xbd, 0x30, 0x37, 0x70, 0x8e, 0x8e, 0xb0, 0xfb, 0xd8, 0x19, + 0xf9, 0x96, 0x63, 0x73, 0x68, 0xf3, 0x3f, 0xb2, 0x80, 0x7a, 0xbe, 0xee, 0xfa, 0x0a, 0x5d, 0x4a, + 0xc5, 0x3f, 0x19, 0x63, 0xcf, 0x47, 0xb7, 0xa0, 0xec, 0x3a, 0xce, 0x50, 0xb3, 0xf5, 0x21, 0x6e, + 0x48, 0x77, 0xa5, 0x87, 0x65, 0xb5, 0x44, 0x00, 0xbb, 0xfa, 0x10, 0xa3, 0xef, 0x41, 0xc9, 0xc7, + 0xc3, 0xd1, 0x40, 0xf7, 0x71, 0x23, 0x73, 0x57, 0x7a, 0x58, 0x59, 0xfd, 0x64, 0x99, 0x7f, 0x72, + 0xb9, 0xcf, 0x11, 0x3d, 0x67, 0xec, 0x1a, 0x78, 0x6b, 0x4a, 0x0d, 0x49, 0xd1, 0x7d, 0xc8, 0xbe, + 0xc6, 0x07, 0x8d, 0x2c, 0x9d, 0x81, 0xc2, 0x19, 0xaf, 0xf0, 0x41, 0x48, 0x4c, 0x08, 0xd0, 0x12, + 0xe4, 0x87, 0xd8, 0xb4, 0xf4, 0x46, 0x8e, 0x52, 0xce, 0x85, 0x94, 0x3b, 0x04, 0x1a, 0xd2, 0x32, + 0x22, 0xf4, 0x0c, 0x0a, 0x23, 0x17, 0x7b, 0xd8, 0x6f, 0xe4, 0xef, 0x4a, 0x0f, 0xeb, 0xab, 0x9f, + 0x85, 0xe4, 0x8a, 0x6d, 0x38, 0xa6, 0x65, 0x1f, 0x75, 0xd9, 0x86, 0xf7, 0x28, 0xd5, 0x96, 0xa4, + 0x72, 0x7a, 0xf4, 0x14, 0x4a, 0xba, 0x79, 0xaa, 0xdb, 0x06, 0x36, 0x1b, 0x05, 0xfa, 0xa9, 0xc6, + 0x45, 0x73, 0xb7, 0x24, 0x35, 0xa4, 0x45, 0x8f, 0xa0, 0xe8, 0x8c, 0xfd, 0xd1, 0xd8, 0xf7, 0x1a, + 0xc5, 0xbb, 0xd9, 0x87, 0x95, 0xd5, 0xe9, 0x70, 0x5a, 0x97, 0xc2, 0xd5, 0x00, 0x8f, 0x56, 0xa0, + 0xe8, 0xf9, 0x8e, 0xab, 0x1f, 0xe1, 0x46, 0x89, 0x7e, 0x61, 0x3e, 0x24, 0xed, 0x31, 0xf8, 0x86, + 0x63, 0x1f, 0x5a, 0x47, 0x6a, 0x40, 0x86, 0x56, 0xa1, 0xf4, 0x1a, 0x1f, 0x1c, 0x3b, 0xce, 0x89, + 0xd7, 0x28, 0xd3, 0xd5, 0xe7, 0xc5, 0x93, 0x22, 0x08, 0x3e, 0x25, 0xa4, 0x5b, 0x2f, 0x41, 0xc1, + 0xa3, 0xa7, 0xb2, 0x0e, 0x50, 0xc2, 0x9c, 0xf3, 0xe6, 0x1f, 0x4a, 0x50, 0x8f, 0x4b, 0x03, 0xcd, + 0x43, 0x61, 0xa0, 0x9f, 0x39, 0x63, 0x9f, 0x8b, 0x94, 0x8f, 0xd0, 0xa7, 0x00, 0xfa, 0xd8, 0xb4, + 0x1c, 0xcd, 0xb1, 0x07, 0x67, 0x54, 0xa4, 0x25, 0xb5, 0x4c, 0x21, 0x5d, 0x7b, 0x70, 0x46, 0xd0, + 0xa7, 0x96, 0x89, 0x39, 0x3a, 0xcb, 0xd0, 0x14, 0x42, 0xd1, 0xf7, 0x61, 0xda, 0x18, 0x7b, 0xbe, + 0x33, 0xd4, 0x0e, 0x74, 0x0f, 0x6b, 0x63, 0x77, 0x40, 0x25, 0x57, 0x56, 0x6b, 0x0c, 0xbc, 0xae, + 0x7b, 0x78, 0xdf, 0x1d, 0x34, 0x7f, 0x5f, 0x82, 0x72, 0x28, 0x6c, 0x24, 0x43, 0x96, 0x50, 0x32, + 0x46, 0xc8, 0xcf, 0x6b, 0x72, 0xb1, 0x04, 0x48, 0x7f, 0xad, 0x5b, 0xbe, 0xe6, 0x11, 0x6d, 0xd6, + 0x3c, 0xeb, 0xc8, 0xd6, 0x19, 0x23, 0x25, 0x55, 0xa6, 0x18, 0xaa, 0xe6, 0x3d, 0x0a, 0x6f, 0xfe, + 0x42, 0x82, 0x8a, 0xa0, 0x4e, 0xe8, 0x19, 0xd4, 0xd9, 0xe2, 0xbe, 0xab, 0x1b, 0x27, 0x9a, 0x65, + 0x32, 0xc6, 0xd6, 0xe5, 0xb7, 0xef, 0x96, 0xaa, 0x14, 0xd3, 0x27, 0x88, 0x4e, 0x7b, 0x6b, 0x4a, + 0x15, 0xc7, 0x26, 0xda, 0x82, 0x99, 0x91, 0xee, 0xfa, 0x96, 0x61, 0x8d, 0x74, 0xdb, 0xd7, 0x28, + 0x8e, 0x5b, 0xc5, 0xcd, 0x50, 0x72, 0x7b, 0x11, 0xc5, 0xd7, 0x84, 0x60, 0x6b, 0x4a, 0x95, 0x47, + 0x09, 0x18, 0x5a, 0x84, 0x3c, 0xdd, 0x2d, 0xb7, 0x90, 0x48, 0xef, 0x5b, 0x04, 0xca, 0xa5, 0xce, + 0x48, 0xd0, 0x03, 0xc8, 0x99, 0xba, 0x1f, 0x98, 0xc8, 0x6c, 0x48, 0xda, 0xd6, 0x7d, 0x9d, 0x53, + 0x52, 0x82, 0xf5, 0x22, 0xe4, 0x29, 0x4b, 0xcd, 0xdf, 0x03, 0x39, 0xc9, 0x05, 0x5a, 0x80, 0x92, + 0x65, 0x62, 0xdb, 0xb7, 0xfc, 0xb3, 0xc0, 0xc8, 0x83, 0x31, 0x5a, 0x86, 0xd9, 0x91, 0x8b, 0x0f, + 0xb1, 0xab, 0x79, 0x86, 0x8b, 0xb1, 0xad, 0x79, 0xc7, 0xba, 0x8b, 0xb9, 0x58, 0x66, 0x18, 0xaa, + 0x47, 0x31, 0x3d, 0x82, 0x68, 0x3e, 0x87, 0x8a, 0xc0, 0x27, 0xfa, 0x02, 0x0a, 0xae, 0x33, 0xf6, + 0xb1, 0xd7, 0x90, 0xa8, 0x16, 0xcf, 0xc6, 0x77, 0xa3, 0x12, 0x9c, 0xca, 0x49, 0x9a, 0xff, 0x23, + 0x01, 0x44, 0x60, 0xf4, 0x10, 0x4a, 0x09, 0x31, 0x54, 0xde, 0xbe, 0x5b, 0x2a, 0xfa, 0xa1, 0x04, + 0xf8, 0x4f, 0x13, 0xad, 0xc1, 0x9c, 0x78, 0xf8, 0xe1, 0x66, 0x08, 0x97, 0xe5, 0xad, 0x29, 0x75, + 0x56, 0xc0, 0x76, 0x82, 0x9d, 0xfd, 0x18, 0xc4, 0xb3, 0xd7, 0x4e, 0x2c, 0xdb, 0xa4, 0x47, 0x5e, + 0x5f, 0xfd, 0x34, 0x4d, 0x60, 0x1d, 0xfb, 0xd0, 0x59, 0x7e, 0x69, 0xd9, 0xe6, 0xd6, 0x94, 0x3a, + 0x2d, 0x4c, 0x24, 0x20, 0xf4, 0x18, 0x8a, 0xc6, 0xb1, 0x6e, 0xdb, 0x98, 0xa9, 0x5a, 0x7d, 0xf5, + 0x46, 0x42, 0x6a, 0x0c, 0xa9, 0x06, 0x54, 0x44, 0x1e, 0x43, 0xdd, 0x37, 0x8e, 0x9b, 0x2d, 0x80, + 0x48, 0x58, 0x68, 0x0d, 0xca, 0x1e, 0x1e, 0x60, 0xc3, 0x77, 0xdc, 0xe0, 0xc4, 0x6e, 0xc4, 0x84, + 0xda, 0xe3, 0x58, 0x35, 0xa2, 0x23, 0x16, 0x5e, 0x15, 0x71, 0xff, 0xdf, 0x07, 0x37, 0x0f, 0x79, + 0xdf, 0x19, 0x59, 0x06, 0x3d, 0x2d, 0x42, 0xc5, 0x86, 0xd1, 0x9e, 0xfe, 0x31, 0x0b, 0xd3, 0x09, + 0xcf, 0x89, 0xe6, 0x20, 0xff, 0xda, 0x32, 0xfd, 0x63, 0xca, 0x50, 0x5e, 0x65, 0x03, 0xe2, 0x89, + 0x8e, 0xb1, 0x75, 0x74, 0xec, 0xd3, 0x2f, 0xe6, 0x55, 0x3e, 0x22, 0xd4, 0x26, 0x1e, 0xf9, 0xc7, + 0xf4, 0x13, 0x79, 0x95, 0x0d, 0xd0, 0x6d, 0x28, 0x1f, 0xba, 0xfa, 0x10, 0xbb, 0xe4, 0xc6, 0xc9, + 0x51, 0x4c, 0x04, 0x40, 0x4f, 0xa0, 0xc2, 0xfc, 0x86, 0xe1, 0x98, 0xd8, 0xe0, 0xd7, 0xc0, 0x6c, + 0xd2, 0x7a, 0x4c, 0x6c, 0xa8, 0xcc, 0xbf, 0xd0, 0xdf, 0xe8, 0x1e, 0xd4, 0xd8, 0xac, 0x03, 0xcb, + 0xa7, 0xeb, 0x16, 0xe8, 0xba, 0x55, 0x0a, 0x5c, 0x67, 0xb0, 0x88, 0xe8, 0x27, 0x63, 0x7d, 0x40, + 0xce, 0xa7, 0x22, 0x10, 0xfd, 0x16, 0x83, 0xa1, 0x07, 0x30, 0xcd, 0x88, 0x0e, 0x5d, 0x72, 0x7b, + 0xda, 0xc6, 0x59, 0xa3, 0x48, 0xc9, 0xea, 0x14, 0xbc, 0x19, 0x40, 0x09, 0xa3, 0xcc, 0xc9, 0x30, + 0x46, 0x4b, 0x09, 0x46, 0xa9, 0x4d, 0x72, 0x46, 0x4f, 0xc3, 0xdf, 0x84, 0x07, 0x36, 0x2b, 0x60, + 0xb4, 0xcc, 0x78, 0xa0, 0x40, 0x81, 0x51, 0x46, 0x14, 0x30, 0x5a, 0x15, 0x88, 0x02, 0x46, 0x97, + 0x00, 0x9d, 0xe0, 0x33, 0x8d, 0x9e, 0x9c, 0x66, 0xd9, 0x3e, 0x76, 0x4f, 0xf5, 0x41, 0x03, 0xee, + 0x4a, 0x0f, 0x25, 0x55, 0x3e, 0xc1, 0x67, 0x9b, 0x04, 0xd1, 0xe1, 0xf0, 0xe6, 0xdf, 0x67, 0xa0, + 0xc0, 0xee, 0x33, 0xf4, 0x08, 0x72, 0x87, 0xd6, 0x80, 0x05, 0x02, 0xa2, 0x29, 0x6f, 0x5a, 0x03, + 0xcc, 0x48, 0xb6, 0xa6, 0x54, 0x4a, 0x82, 0x1e, 0x43, 0xc1, 0xf3, 0x5d, 0xac, 0x0f, 0xb9, 0x0f, + 0xbc, 0x21, 0x5c, 0x78, 0x04, 0x1c, 0x92, 0x73, 0x32, 0xf4, 0x1c, 0x4a, 0x1e, 0x3e, 0x1a, 0x62, + 0xdb, 0xf7, 0xb8, 0xe3, 0xbb, 0x1d, 0x4d, 0x61, 0x08, 0x6c, 0xc6, 0x3e, 0x14, 0xd2, 0xa3, 0x65, + 0x28, 0x58, 0x43, 0xfd, 0x08, 0x7b, 0xe7, 0x42, 0x85, 0x0e, 0x01, 0x47, 0xdf, 0x62, 0x54, 0x64, + 0x1f, 0x43, 0x43, 0x1f, 0x51, 0x15, 0x11, 0xf7, 0xb1, 0x63, 0xe8, 0xa3, 0x68, 0x1f, 0x84, 0x44, + 0xbc, 0xb9, 0x0b, 0x13, 0xdd, 0xdc, 0xe4, 0x16, 0x36, 0x28, 0xa8, 0xf9, 0x07, 0x12, 0x40, 0xc4, + 0x31, 0xfa, 0x1e, 0x94, 0xc9, 0xd1, 0x68, 0xfe, 0xd9, 0x88, 0x1d, 0x61, 0x3d, 0x19, 0x68, 0xb0, + 0x0d, 0xf6, 0xcf, 0x46, 0x58, 0x2d, 0x1d, 0xf2, 0x5f, 0xc4, 0x39, 0x93, 0xdf, 0x23, 0xdd, 0x3f, + 0x66, 0x66, 0xa9, 0x86, 0x63, 0xf4, 0x08, 0x64, 0xd3, 0xf2, 0xf4, 0x83, 0x01, 0xd6, 0x86, 0xba, + 0x6d, 0x1d, 0x62, 0xcf, 0xe7, 0x37, 0xe2, 0x34, 0x87, 0xef, 0x70, 0x70, 0xf3, 0x15, 0x54, 0xc5, + 0x93, 0x47, 0x6b, 0x50, 0xa2, 0x91, 0x9f, 0xe1, 0x0c, 0x38, 0x33, 0x9f, 0x24, 0x44, 0xb4, 0xc7, + 0xd1, 0x6a, 0x48, 0x88, 0x10, 0xe4, 0xc6, 0xee, 0xc0, 0x6b, 0x64, 0xee, 0x66, 0x1f, 0x96, 0x55, + 0xfa, 0xbb, 0xf9, 0xd7, 0x39, 0x98, 0x4d, 0x11, 0x10, 0x11, 0x68, 0xe2, 0x03, 0x9f, 0xa5, 0x0b, + 0x34, 0xe5, 0x3b, 0x0f, 0x60, 0x9a, 0xec, 0x91, 0x44, 0x9d, 0x1a, 0xb9, 0x62, 0xac, 0x37, 0x7c, + 0xeb, 0xf5, 0x00, 0xbc, 0x47, 0xa1, 0x44, 0xdf, 0x47, 0x03, 0xfd, 0x6c, 0x60, 0x79, 0x3e, 0x8b, + 0x51, 0xa9, 0x4b, 0x52, 0xab, 0x01, 0x90, 0xc6, 0xa9, 0x4b, 0x80, 0xc8, 0x87, 0xb5, 0x38, 0x65, + 0x85, 0x52, 0xca, 0x04, 0xb3, 0x27, 0x52, 0x3f, 0x02, 0x99, 0x2b, 0x96, 0x66, 0x8e, 0x5d, 0x9d, + 0x78, 0x2f, 0xaa, 0x56, 0x35, 0x75, 0x9a, 0xc3, 0xdb, 0x1c, 0x8c, 0x14, 0x81, 0x4d, 0x6f, 0x7c, + 0x48, 0xd8, 0x04, 0xba, 0xd3, 0x0b, 0x54, 0xb7, 0x47, 0x69, 0xa2, 0x4d, 0xb0, 0x71, 0xaa, 0x14, + 0x4b, 0xa9, 0x52, 0x44, 0xf7, 0x20, 0xe3, 0xad, 0x71, 0xbd, 0x9d, 0x89, 0x3e, 0xb2, 0xb6, 0x3f, + 0x1a, 0x38, 0x3a, 0xb9, 0x99, 0x32, 0xde, 0x1a, 0x09, 0xb0, 0x8f, 0x8c, 0x11, 0xd7, 0xd7, 0x28, + 0xc0, 0x7e, 0xb1, 0xb1, 0x17, 0x92, 0x11, 0x02, 0xb4, 0x02, 0x79, 0xfd, 0xa7, 0x63, 0x17, 0x53, + 0x37, 0x25, 0x46, 0xbd, 0x2d, 0x02, 0x5d, 0x1f, 0x38, 0x07, 0x21, 0x3d, 0x23, 0x24, 0x56, 0xad, + 0x0f, 0xac, 0x6e, 0xaf, 0x47, 0x9d, 0x8f, 0x68, 0xd5, 0x2d, 0x0a, 0x0e, 0xe9, 0x39, 0x19, 0x31, + 0x06, 0x16, 0x03, 0x37, 0xff, 0x3b, 0x0b, 0x15, 0xc1, 0x1a, 0xc9, 0xa6, 0x0d, 0x7d, 0xe4, 0x8f, + 0x5d, 0xc1, 0x05, 0x49, 0xec, 0x98, 0x39, 0x3c, 0xf0, 0x40, 0xd1, 0xd5, 0x91, 0x49, 0xbf, 0x3a, + 0xb2, 0xb1, 0xab, 0x23, 0x45, 0x77, 0x72, 0xa9, 0xba, 0xd3, 0x3a, 0x2f, 0xbd, 0x7c, 0xc2, 0x2a, + 0x29, 0xc3, 0x97, 0x48, 0xee, 0x09, 0x54, 0xa8, 0x4b, 0xe1, 0x9e, 0xbc, 0x90, 0xf0, 0xe4, 0x74, + 0x3a, 0xf7, 0xe4, 0x56, 0xf8, 0x3b, 0x55, 0xde, 0xc5, 0xcb, 0xe4, 0x5d, 0x9a, 0x48, 0xde, 0xe5, + 0x89, 0xe5, 0x0d, 0x57, 0x97, 0x77, 0xe5, 0xaa, 0xf2, 0xee, 0x01, 0x44, 0xee, 0x34, 0xe6, 0xc4, + 0xa4, 0x09, 0x9c, 0x58, 0x26, 0xdd, 0x89, 0xfd, 0xb3, 0x04, 0xb5, 0x98, 0xdb, 0xe5, 0x07, 0x24, + 0x4d, 0x74, 0x40, 0x99, 0x89, 0x0f, 0x28, 0x3b, 0xe9, 0x01, 0xad, 0x40, 0x51, 0x1f, 0x58, 0x9a, + 0xe3, 0x05, 0x57, 0xcf, 0xe5, 0x27, 0xe4, 0x79, 0x24, 0x35, 0x1b, 0xb9, 0x0e, 0xb9, 0x8f, 0xdd, + 0xe6, 0x7f, 0xe6, 0xa0, 0x14, 0xb0, 0x8a, 0xee, 0x01, 0xe8, 0x86, 0x81, 0x3d, 0x4f, 0x3b, 0xc1, + 0x3c, 0x0c, 0x5f, 0xcf, 0xfd, 0xec, 0xdd, 0x92, 0xa4, 0x96, 0x19, 0xfc, 0x25, 0x3e, 0x43, 0xb7, + 0xa1, 0xe0, 0x61, 0xc3, 0xc5, 0xec, 0x84, 0x02, 0x02, 0x0e, 0x43, 0x8f, 0xa0, 0xe6, 0x61, 0xcf, + 0xb3, 0x1c, 0x5b, 0xf3, 0x9d, 0x13, 0x6c, 0x33, 0x1f, 0xc7, 0x89, 0xaa, 0x1c, 0xd5, 0x27, 0x18, + 0xb4, 0x04, 0xd3, 0xba, 0xe7, 0x8d, 0x87, 0x58, 0x73, 0x9d, 0x01, 0xd6, 0x74, 0xd7, 0xa6, 0xa1, + 0x42, 0x40, 0x5c, 0x63, 0x48, 0xd5, 0x19, 0xe0, 0x96, 0x6b, 0xa3, 0x1e, 0x7c, 0x22, 0x52, 0xe3, + 0x37, 0x3e, 0x76, 0x6d, 0x7d, 0x40, 0xe2, 0xcb, 0x1a, 0x9d, 0x75, 0x9b, 0xcc, 0x7a, 0xfb, 0x6e, + 0x69, 0x2e, 0x9a, 0xa7, 0x70, 0xa2, 0x4e, 0x5b, 0x4d, 0x83, 0x9a, 0xc4, 0x80, 0x5d, 0x7c, 0x44, + 0xdc, 0x2b, 0x73, 0xda, 0x7c, 0x44, 0x74, 0x05, 0xdb, 0xe6, 0xc8, 0xb1, 0x6c, 0x9f, 0x5b, 0x6e, + 0x38, 0x26, 0x73, 0x0e, 0xc6, 0xc6, 0x09, 0xcf, 0xf2, 0xcb, 0x2a, 0x1f, 0xa1, 0x87, 0x20, 0x1f, + 0x3a, 0xae, 0x81, 0x35, 0xa2, 0x51, 0x9a, 0xe7, 0x9f, 0x0d, 0xd8, 0x7d, 0x5d, 0x52, 0xeb, 0x14, + 0xbe, 0xa7, 0xfb, 0xc7, 0x3d, 0x02, 0x45, 0x3f, 0x80, 0xd2, 0x10, 0xfb, 0x3a, 0xcd, 0x9a, 0x58, + 0xda, 0x7e, 0xe7, 0x9c, 0xda, 0x2c, 0xef, 0x70, 0x0a, 0xc5, 0xf6, 0xdd, 0x33, 0x35, 0x9c, 0x80, + 0x1a, 0x50, 0xf4, 0xf5, 0xa3, 0x23, 0xcb, 0x3e, 0xa2, 0x36, 0x59, 0x56, 0x83, 0x21, 0x7a, 0x0c, + 0xb3, 0x86, 0x63, 0xfb, 0xf4, 0xd6, 0xb0, 0xbc, 0x91, 0xe3, 0x59, 0xf4, 0xe2, 0x28, 0x53, 0x2a, + 0xc4, 0x51, 0xed, 0x08, 0x43, 0xb2, 0xbc, 0x91, 0xeb, 0xbc, 0x39, 0xe3, 0xc6, 0x18, 0x85, 0x2c, + 0x7b, 0x04, 0x1a, 0x64, 0x79, 0x94, 0x64, 0xe1, 0x07, 0x50, 0x8b, 0x71, 0x44, 0x92, 0xe6, 0x50, + 0x49, 0x54, 0xf2, 0x93, 0xf8, 0xc8, 0x53, 0x7d, 0x30, 0xc6, 0xfc, 0x9e, 0x64, 0x83, 0xe7, 0x99, + 0x67, 0x52, 0xf3, 0x35, 0x94, 0x43, 0x45, 0x47, 0xf7, 0xa1, 0x62, 0xb8, 0x98, 0x06, 0xf2, 0xfa, + 0xc0, 0x8b, 0x69, 0x99, 0x88, 0x10, 0xce, 0x39, 0x13, 0x3b, 0xe7, 0x90, 0xeb, 0xec, 0x7b, 0xb9, + 0x6e, 0xfe, 0x4c, 0x82, 0xe9, 0x84, 0xe1, 0xa0, 0x07, 0x50, 0xd5, 0x0d, 0xc3, 0x19, 0xdb, 0xbe, + 0x50, 0x52, 0x0a, 0x18, 0xe0, 0x18, 0x7a, 0x0b, 0x7f, 0x0e, 0xc1, 0x90, 0x9a, 0x83, 0xa8, 0xed, + 0xc0, 0x11, 0xc4, 0x1e, 0x3e, 0x87, 0x3a, 0x39, 0x5b, 0xdd, 0xb2, 0xb1, 0x2b, 0x06, 0x00, 0xb5, + 0x10, 0x4a, 0x56, 0x6b, 0xfe, 0x85, 0x04, 0x55, 0xd1, 0x1e, 0x3f, 0x86, 0xb1, 0x7d, 0x44, 0xf5, + 0x6d, 0xfe, 0x2e, 0x54, 0x84, 0x03, 0x4c, 0xa9, 0x89, 0x2c, 0x40, 0x69, 0xec, 0x11, 0xc3, 0x19, + 0x06, 0x12, 0x0e, 0xc7, 0xe8, 0x2e, 0x94, 0x46, 0xba, 0xe7, 0xbd, 0x76, 0x5c, 0x96, 0xbf, 0x06, + 0x8c, 0x86, 0xd0, 0xa6, 0x07, 0x33, 0xdb, 0x96, 0x77, 0x95, 0xd2, 0xde, 0x23, 0x28, 0xb3, 0x9a, + 0x22, 0x31, 0x71, 0xb6, 0xfb, 0xea, 0xdb, 0x77, 0x4b, 0x25, 0x06, 0xec, 0xb4, 0xd5, 0xe0, 0x17, + 0x35, 0x63, 0xdd, 0xf0, 0xad, 0x53, 0xcc, 0x23, 0x4f, 0x3e, 0x6a, 0xfe, 0x08, 0x90, 0xf8, 0x51, + 0x6f, 0xe4, 0xd8, 0x1e, 0x59, 0x38, 0x6f, 0xf9, 0x78, 0x78, 0xbe, 0x1c, 0xc0, 0xe8, 0x48, 0x92, + 0xad, 0x32, 0x8a, 0xe6, 0x3f, 0x48, 0x30, 0xbb, 0x3f, 0x32, 0x75, 0x1f, 0xc7, 0x19, 0x8f, 0xf1, + 0x26, 0x5d, 0xca, 0x1b, 0x3f, 0xc8, 0x4c, 0x74, 0x90, 0x51, 0xe9, 0x2b, 0x1b, 0x2b, 0x7d, 0xdd, + 0x87, 0x69, 0xdd, 0x34, 0x35, 0x96, 0x8c, 0x68, 0x34, 0xc8, 0xcd, 0xd1, 0x20, 0xb7, 0xa6, 0x9b, + 0x26, 0x8b, 0x87, 0xf7, 0xdd, 0x81, 0x47, 0x62, 0x49, 0x17, 0x0f, 0x9d, 0x53, 0x1c, 0x23, 0xcd, + 0x53, 0x52, 0x99, 0x61, 0x22, 0xea, 0xe6, 0x57, 0x30, 0xd3, 0xf3, 0x9d, 0xd1, 0x87, 0xf2, 0xdf, + 0xfc, 0xf3, 0x0a, 0x40, 0x74, 0x30, 0x57, 0xd9, 0xf9, 0x3d, 0x28, 0x52, 0xe9, 0x86, 0xe2, 0x83, + 0xb7, 0xef, 0x96, 0x0a, 0x04, 0xd4, 0x69, 0xab, 0xec, 0xaf, 0x19, 0x57, 0x81, 0x5a, 0x42, 0x05, + 0x9e, 0x43, 0x85, 0x55, 0x13, 0x59, 0xc2, 0xb2, 0x40, 0x63, 0x9b, 0x9b, 0x09, 0x79, 0xb1, 0xb2, + 0x19, 0xcd, 0x58, 0xc0, 0x0b, 0x7f, 0xa3, 0xef, 0x92, 0xec, 0x4f, 0xf7, 0xc7, 0x1e, 0x2f, 0xa8, + 0xdc, 0x48, 0x4e, 0xa3, 0x48, 0x95, 0x13, 0xa1, 0x4f, 0x01, 0x68, 0xb5, 0x0e, 0x9b, 0x9a, 0xee, + 0x53, 0x87, 0x98, 0x55, 0xcb, 0x1c, 0xd2, 0xf2, 0xd1, 0x4d, 0x6a, 0x51, 0x0c, 0x59, 0xa1, 0xc8, + 0x22, 0x1d, 0xb7, 0x68, 0xc5, 0x72, 0x4c, 0x55, 0x84, 0x22, 0x11, 0x9b, 0xc9, 0x21, 0x2d, 0x92, + 0x72, 0x15, 0xd8, 0x89, 0x34, 0x3e, 0xa5, 0xfe, 0xea, 0x96, 0x90, 0xe2, 0x24, 0x6b, 0xdd, 0xe4, + 0x8e, 0x66, 0xc4, 0xe8, 0x29, 0x31, 0x6d, 0x92, 0x2d, 0x34, 0x3e, 0x4b, 0x64, 0xa2, 0xca, 0x9b, + 0x91, 0xe3, 0xfa, 0x2a, 0x45, 0x0a, 0xf3, 0x18, 0x35, 0xda, 0x86, 0x3a, 0x3d, 0x4f, 0xc3, 0x19, + 0x52, 0x3f, 0x8f, 0x79, 0x50, 0x70, 0x2f, 0x9c, 0xaf, 0x3a, 0xce, 0x70, 0x23, 0xc0, 0x26, 0x3f, + 0x5f, 0x73, 0x45, 0x2c, 0xfa, 0x2e, 0xab, 0x93, 0xd7, 0x13, 0x35, 0xc4, 0x57, 0xf8, 0x20, 0x39, + 0x91, 0x96, 0xcb, 0x15, 0xa8, 0x08, 0xc5, 0x9a, 0xc6, 0x2c, 0x9d, 0xf6, 0x9d, 0xb4, 0x4a, 0x56, + 0x72, 0xba, 0x38, 0x0f, 0x75, 0x61, 0x9a, 0xd5, 0x8e, 0xa2, 0x4d, 0xb0, 0x74, 0xe3, 0xd7, 0xa2, + 0xda, 0x3e, 0xc1, 0x5f, 0xb8, 0x8b, 0xba, 0x1f, 0x43, 0xa3, 0x35, 0xc8, 0x53, 0x08, 0xcf, 0x47, + 0x6e, 0xc5, 0x97, 0x49, 0xce, 0x66, 0xb4, 0xe8, 0x39, 0xd4, 0xb9, 0x7d, 0xb9, 0xd8, 0x1b, 0x0f, + 0x7c, 0xaf, 0x31, 0x9d, 0xf0, 0x17, 0xcc, 0xca, 0xa8, 0xbf, 0xa8, 0x31, 0x52, 0x95, 0x51, 0xa2, + 0x27, 0x50, 0xa5, 0x79, 0x76, 0x30, 0x53, 0xa6, 0x33, 0x67, 0x62, 0xd5, 0x0a, 0x3a, 0xaf, 0x42, + 0xc8, 0x82, 0x59, 0x5f, 0x41, 0x90, 0xde, 0x85, 0x13, 0x67, 0x12, 0xf5, 0x37, 0x9e, 0xcb, 0x31, + 0x27, 0x55, 0xe7, 0xd4, 0xc1, 0xfc, 0x67, 0x50, 0x63, 0xa9, 0x40, 0x30, 0x7b, 0x2e, 0xc1, 0x30, + 0x4d, 0x06, 0xd8, 0xdc, 0x2a, 0xa5, 0x14, 0xf8, 0x1d, 0x1a, 0xfa, 0x28, 0x9c, 0x78, 0x3b, 0xc1, + 0x2f, 0x09, 0xa3, 0x19, 0xbf, 0x84, 0x2c, 0x98, 0x35, 0x07, 0x79, 0xec, 0xba, 0x8e, 0xcb, 0x43, + 0x0c, 0x36, 0x20, 0xf6, 0x40, 0x7f, 0xd0, 0x84, 0xa4, 0x31, 0xcf, 0x4a, 0x64, 0x14, 0x42, 0x52, + 0x0f, 0x12, 0xbf, 0x98, 0xd8, 0xd7, 0xad, 0x81, 0xd7, 0xb8, 0xc1, 0xe2, 0x17, 0x3e, 0x44, 0x5f, + 0xc0, 0x4c, 0x10, 0x7c, 0x6b, 0x03, 0xc7, 0x60, 0x69, 0xef, 0x27, 0x2c, 0x45, 0x0e, 0x10, 0xdb, + 0x1c, 0x8e, 0x96, 0x61, 0xf6, 0x40, 0x37, 0x4e, 0xc6, 0x23, 0x8d, 0x17, 0x3d, 0xb4, 0xb1, 0x87, + 0xcd, 0xc6, 0x4d, 0x56, 0x13, 0x66, 0x28, 0x1e, 0xa6, 0xef, 0x7b, 0xd8, 0x44, 0x77, 0xa0, 0xe2, + 0x62, 0xdf, 0x3d, 0xd3, 0xe8, 0xbd, 0xdd, 0xb8, 0x45, 0xd9, 0x02, 0x0a, 0xda, 0x20, 0x10, 0x62, + 0xa7, 0xbc, 0x5a, 0x54, 0x4c, 0xbc, 0x23, 0x45, 0x62, 0x26, 0x97, 0xc9, 0x7a, 0xa6, 0x21, 0x6d, + 0x49, 0x61, 0xcd, 0xe8, 0x0b, 0x5e, 0x8f, 0x4a, 0xe6, 0x47, 0x81, 0x84, 0x39, 0x39, 0xab, 0x48, + 0x7d, 0x29, 0x14, 0x98, 0xaa, 0xc9, 0x9a, 0x94, 0x20, 0x59, 0x3e, 0x29, 0x24, 0x5e, 0x2f, 0x43, + 0xd1, 0x65, 0xfa, 0x49, 0xd2, 0x1b, 0x26, 0xa5, 0xe6, 0xcf, 0x33, 0x00, 0x11, 0x6f, 0xe9, 0xaf, + 0x18, 0x82, 0x4f, 0xcb, 0x5c, 0xe6, 0xd3, 0xb2, 0x71, 0x9f, 0xb6, 0x00, 0xa5, 0x58, 0xe1, 0x21, + 0xab, 0x86, 0x63, 0xb4, 0x1a, 0x3a, 0x56, 0x96, 0xaa, 0x2e, 0xa4, 0x1c, 0xd4, 0x72, 0xc2, 0xbb, + 0x86, 0x9a, 0x52, 0x10, 0x35, 0xa5, 0x09, 0xb5, 0x81, 0xee, 0x11, 0x65, 0x27, 0x82, 0xd1, 0x59, + 0x06, 0x9a, 0x55, 0x2b, 0x04, 0xa8, 0x12, 0x58, 0xcb, 0x27, 0xea, 0x42, 0xd0, 0x16, 0xf6, 0xe8, + 0x11, 0xd7, 0xd4, 0x60, 0xd8, 0x5c, 0x86, 0x02, 0xfb, 0x0a, 0x02, 0x28, 0xb4, 0x36, 0xfa, 0x9d, + 0xaf, 0x15, 0x79, 0x0a, 0x55, 0xa1, 0xb4, 0xd9, 0xd9, 0xed, 0xf4, 0xb6, 0x94, 0xb6, 0x2c, 0x11, + 0xcc, 0x66, 0xab, 0xb3, 0xad, 0xb4, 0xe5, 0x4c, 0xf3, 0xe7, 0x12, 0x94, 0x02, 0xa9, 0x04, 0xc9, + 0xa0, 0x18, 0x78, 0x04, 0xe3, 0x8f, 0x74, 0x6c, 0x85, 0xc4, 0xb1, 0x21, 0xc8, 0x79, 0xd6, 0x4f, + 0x31, 0x3f, 0x4e, 0xfa, 0x9b, 0xd0, 0x87, 0x8a, 0xce, 0xa2, 0xb1, 0x70, 0xdc, 0xfc, 0xb7, 0x0c, + 0x54, 0x45, 0x9d, 0x38, 0x5f, 0x67, 0x92, 0x26, 0xae, 0x33, 0x95, 0x2e, 0xa8, 0x33, 0x89, 0xfc, + 0x66, 0x2e, 0xe0, 0x37, 0x2b, 0xf0, 0xfb, 0x05, 0xcc, 0x84, 0x0b, 0x87, 0x8c, 0xb3, 0x00, 0x53, + 0x0e, 0x10, 0xa1, 0x85, 0x3e, 0x81, 0xf9, 0x38, 0x2b, 0xe1, 0x0c, 0xe6, 0x2e, 0xe6, 0x44, 0x76, + 0xc2, 0x59, 0xf7, 0x48, 0xfe, 0xc8, 0x7c, 0x20, 0xb3, 0xd4, 0x3c, 0xfd, 0x7e, 0x95, 0x03, 0x99, + 0xad, 0xc6, 0x25, 0x54, 0xb8, 0x4c, 0x42, 0xc5, 0x98, 0x84, 0x9a, 0x7f, 0x2c, 0x01, 0x44, 0x5e, + 0x70, 0xf2, 0x42, 0xcd, 0x9d, 0xa8, 0xca, 0x42, 0x98, 0x92, 0xe8, 0xaa, 0x41, 0x41, 0xe5, 0x3c, + 0x4b, 0x57, 0x50, 0x9a, 0xe6, 0xbf, 0x48, 0x50, 0x0a, 0xfc, 0xeb, 0xb7, 0xa0, 0x97, 0xb9, 0x0b, + 0xe4, 0x9c, 0xbf, 0x40, 0x2f, 0x0b, 0x71, 0xbd, 0x24, 0x27, 0x11, 0x5c, 0xce, 0xe4, 0x24, 0xd8, + 0xf9, 0x02, 0xbf, 0x70, 0xc7, 0xb6, 0xdf, 0x7c, 0x9b, 0x81, 0x1b, 0xad, 0xb1, 0xef, 0x9c, 0xbb, + 0xed, 0x85, 0xf7, 0x71, 0x69, 0xa2, 0xf7, 0xf1, 0xa9, 0xd4, 0xf7, 0xf1, 0xcc, 0x7b, 0xde, 0xc7, + 0xa7, 0x84, 0xf7, 0xf1, 0x1f, 0xf2, 0x7b, 0x38, 0x78, 0x24, 0xcf, 0xd2, 0x7b, 0x6d, 0x21, 0xad, + 0xe4, 0xcd, 0xdf, 0xcb, 0xe9, 0x85, 0xdc, 0xe5, 0x6f, 0xe6, 0x4a, 0x74, 0x21, 0x07, 0x2b, 0xe4, + 0xe8, 0x0a, 0x97, 0xbe, 0x0b, 0x84, 0xf7, 0x32, 0x5f, 0x86, 0x78, 0x6f, 0xde, 0xe9, 0xd0, 0xfc, + 0x93, 0x0c, 0x4c, 0x93, 0xc3, 0x11, 0x02, 0x8f, 0x2b, 0x17, 0xa6, 0xf2, 0x97, 0xd5, 0xe9, 0x32, + 0x13, 0x95, 0xa1, 0xb2, 0x13, 0x97, 0xa1, 0x72, 0x57, 0xaf, 0xd3, 0x15, 0xae, 0x5a, 0xa7, 0xfb, + 0xbb, 0x1c, 0xcc, 0xa6, 0x44, 0xb5, 0x24, 0xd7, 0x60, 0x51, 0x6d, 0x22, 0xd7, 0x60, 0x40, 0x92, + 0x6b, 0xf0, 0x5f, 0x26, 0xc9, 0x9d, 0xd8, 0x63, 0xbb, 0x73, 0x78, 0xe8, 0x61, 0x5f, 0x1b, 0x7a, + 0xdc, 0x40, 0x6a, 0x14, 0xdc, 0xa5, 0xd0, 0x1d, 0x8f, 0x5c, 0x39, 0xd8, 0x36, 0x05, 0x2a, 0x66, + 0x29, 0x15, 0x6c, 0x9b, 0x21, 0x8d, 0xd8, 0x53, 0x92, 0xbb, 0x72, 0x4f, 0x49, 0x7e, 0xe2, 0x9e, + 0x92, 0xc2, 0xd5, 0x7a, 0x4a, 0x8a, 0xd7, 0xe8, 0x29, 0x29, 0x7d, 0x58, 0x4f, 0x49, 0x79, 0xf2, + 0x9e, 0x12, 0xb8, 0x7a, 0x4f, 0x49, 0xe5, 0x5a, 0x3d, 0x25, 0xff, 0x5e, 0x80, 0x85, 0x8b, 0x53, + 0x99, 0xcb, 0x4b, 0x0b, 0x51, 0x06, 0x9e, 0xb9, 0xa4, 0xf9, 0x24, 0x9b, 0x6c, 0xfb, 0xf8, 0x12, + 0xd8, 0x6b, 0xab, 0x36, 0xb4, 0xde, 0x58, 0xf6, 0x51, 0x63, 0x9a, 0x4a, 0x24, 0xd1, 0x1c, 0xb1, + 0x43, 0x71, 0x2a, 0x7b, 0x07, 0x66, 0x83, 0x44, 0xbf, 0x48, 0x6e, 0x82, 0xae, 0x95, 0x7c, 0x4a, + 0xd7, 0x0a, 0x7a, 0xc2, 0x63, 0x4d, 0xa6, 0x38, 0x97, 0x78, 0x31, 0x1a, 0x3f, 0x06, 0xcf, 0xa0, + 0x6b, 0x89, 0xc0, 0x36, 0xfd, 0x19, 0x94, 0x4f, 0x09, 0xc2, 0xda, 0xaf, 0x84, 0x48, 0x15, 0xde, + 0xff, 0x14, 0xca, 0x67, 0x47, 0xcf, 0xa1, 0x91, 0xda, 0x96, 0xae, 0xa1, 0xb6, 0xe5, 0x2b, 0xa8, + 0x6d, 0xd2, 0xd5, 0x57, 0xae, 0xe6, 0xea, 0x7f, 0x23, 0xcc, 0xf6, 0x82, 0x05, 0xaa, 0xc9, 0xd4, + 0x4b, 0x38, 0xad, 0x20, 0xdf, 0xbb, 0xe4, 0xa2, 0xa8, 0x5d, 0xfd, 0xa2, 0x40, 0xdf, 0x0f, 0x12, + 0xb8, 0x60, 0x91, 0x3a, 0x5d, 0x24, 0xf5, 0x2d, 0x99, 0x67, 0x70, 0xc1, 0x54, 0xd1, 0xb0, 0xe4, + 0xc9, 0x0d, 0x8b, 0x7d, 0x48, 0xbc, 0xa1, 0xfe, 0x37, 0x0f, 0x72, 0x32, 0xbf, 0xff, 0x96, 0x3a, + 0xa4, 0xaa, 0xe9, 0x1d, 0x52, 0xa1, 0xde, 0xe7, 0x3e, 0x50, 0xef, 0xf3, 0x1f, 0xa6, 0xf7, 0x85, + 0x6b, 0xe9, 0xfd, 0xb7, 0xe5, 0xae, 0x93, 0x7a, 0x5f, 0xbe, 0xae, 0xde, 0xc3, 0xf5, 0xf4, 0xbe, + 0xf2, 0x31, 0xf4, 0xbe, 0xf6, 0x41, 0x7a, 0x5f, 0xbf, 0x8e, 0xde, 0xff, 0x4d, 0x0e, 0x1a, 0x17, + 0x15, 0xa8, 0x2e, 0xbf, 0x4d, 0xc4, 0xd6, 0xb5, 0x4c, 0xa2, 0x75, 0xed, 0x3b, 0x50, 0x8d, 0xf5, + 0xac, 0x31, 0x4b, 0xa8, 0x78, 0x51, 0xb7, 0x9a, 0xa0, 0x32, 0xb9, 0x6b, 0x44, 0xc5, 0xf9, 0x6b, + 0x44, 0xc5, 0x85, 0xeb, 0xaa, 0x4c, 0xf1, 0x7a, 0x2a, 0x53, 0xfa, 0x18, 0x2a, 0x53, 0xfe, 0x20, + 0x95, 0x81, 0x09, 0x55, 0x46, 0x50, 0x94, 0x3f, 0x2a, 0xc0, 0xad, 0x4b, 0xca, 0x8f, 0x97, 0xeb, + 0xca, 0x53, 0x60, 0x9d, 0x58, 0x51, 0x73, 0x67, 0x26, 0x6a, 0xee, 0xa4, 0x18, 0xde, 0xdc, 0xa9, + 0x8a, 0x23, 0x93, 0xcc, 0x4b, 0x34, 0x85, 0x66, 0xd3, 0x9b, 0x42, 0x13, 0x2d, 0xa1, 0xbf, 0x24, + 0xd7, 0x59, 0xba, 0x96, 0xeb, 0x2c, 0x5c, 0xc3, 0x75, 0x16, 0x7f, 0x15, 0x32, 0x7c, 0x88, 0x1d, + 0x4c, 0x5f, 0xc7, 0x75, 0xfe, 0x42, 0x02, 0x74, 0xbe, 0x92, 0x7e, 0xb9, 0x21, 0xdc, 0x17, 0xfa, + 0x43, 0x33, 0xe7, 0xfa, 0x43, 0xa3, 0xee, 0xd0, 0xc7, 0x5c, 0x81, 0xb3, 0x89, 0x27, 0x88, 0xb6, + 0xe5, 0x62, 0xc3, 0x4f, 0xe9, 0xfa, 0xfb, 0x1c, 0x6a, 0xaf, 0xf1, 0x81, 0xe7, 0x18, 0x27, 0xd8, + 0x8f, 0x1a, 0xc0, 0xb7, 0xa6, 0xd4, 0x6a, 0x08, 0x26, 0xb1, 0xb4, 0xb8, 0xf9, 0xfc, 0x55, 0x37, + 0xdf, 0xfc, 0xd3, 0x0c, 0xc8, 0x49, 0x0e, 0x7e, 0x95, 0xc7, 0xff, 0x53, 0x06, 0x66, 0xce, 0xd9, + 0xcc, 0xb7, 0xd5, 0x73, 0x58, 0xb8, 0xec, 0x34, 0xb3, 0x13, 0x9d, 0x66, 0x6e, 0xe2, 0xd3, 0xcc, + 0x5f, 0xfd, 0x34, 0x8b, 0x57, 0x3d, 0xcd, 0x6f, 0x82, 0xa7, 0xe7, 0x6d, 0x9a, 0x9c, 0x7e, 0xc0, + 0xd3, 0xf3, 0x05, 0x69, 0x6e, 0xf3, 0xcf, 0xc2, 0x57, 0xed, 0x1e, 0x7f, 0xb5, 0xba, 0xf2, 0xd2, + 0xfc, 0xad, 0x9a, 0xb1, 0xaa, 0x09, 0x0d, 0x99, 0x35, 0xdd, 0x34, 0x99, 0xe0, 0x13, 0x6f, 0xd5, + 0x22, 0x69, 0x56, 0x7c, 0xab, 0x8e, 0xa8, 0x9b, 0xdf, 0x87, 0x7a, 0xfc, 0xb1, 0x05, 0x3d, 0x80, + 0x9c, 0x65, 0x1f, 0x3a, 0xe7, 0x9e, 0xea, 0x85, 0xa7, 0x37, 0x4a, 0xb0, 0xf8, 0x0a, 0xaa, 0x62, + 0x97, 0x3b, 0x9a, 0x07, 0xd4, 0xda, 0x6f, 0x77, 0xba, 0xda, 0xc6, 0x56, 0x6b, 0x77, 0x57, 0xd9, + 0xd6, 0xd6, 0xbb, 0xfd, 0x2d, 0x79, 0xea, 0x3c, 0x7c, 0x5b, 0xd9, 0xec, 0xcb, 0x12, 0xfa, 0x04, + 0x66, 0xe3, 0x70, 0xb5, 0xf3, 0x62, 0xab, 0x2f, 0x67, 0x16, 0xff, 0x55, 0x82, 0x1b, 0xa9, 0x17, + 0x10, 0x92, 0xa1, 0xba, 0xb5, 0xfa, 0xf4, 0x89, 0xf6, 0xe5, 0xea, 0xca, 0x9e, 0xb6, 0xb6, 0x22, + 0x4f, 0xc5, 0x21, 0x4f, 0x57, 0x64, 0x09, 0xcd, 0x40, 0x8d, 0x42, 0x7e, 0x7d, 0xe5, 0x19, 0x23, + 0xca, 0x24, 0x40, 0x4f, 0x57, 0xe4, 0x2c, 0xba, 0x09, 0x37, 0xf6, 0xba, 0x6a, 0x5f, 0x6d, 0x75, + 0xfa, 0x5a, 0x6c, 0xc9, 0xdc, 0x05, 0xa8, 0xa7, 0x2b, 0x72, 0x1e, 0x2d, 0xc0, 0x7c, 0x1c, 0x15, + 0x7e, 0xa4, 0x70, 0x11, 0xee, 0xe9, 0x8a, 0x5c, 0x5c, 0x5c, 0xe7, 0x9d, 0xf1, 0x91, 0xd9, 0xa1, + 0x39, 0x90, 0xdb, 0xca, 0x66, 0x6b, 0x7f, 0xbb, 0xaf, 0x6d, 0x76, 0xb6, 0x95, 0xfe, 0x6f, 0xef, + 0x29, 0xf2, 0x14, 0x2a, 0x42, 0x76, 0x67, 0xef, 0x89, 0x2c, 0x91, 0x1f, 0xdd, 0x17, 0x2f, 0xe4, + 0x0c, 0x83, 0xac, 0xc9, 0xd9, 0xc5, 0xad, 0x40, 0x52, 0x41, 0xe7, 0xac, 0xb8, 0xc4, 0x9e, 0xda, + 0xed, 0x77, 0x37, 0xba, 0xdb, 0xf2, 0x14, 0x2a, 0x41, 0x4e, 0xed, 0xef, 0xec, 0xb1, 0x35, 0x7a, + 0x6a, 0x5f, 0xce, 0xa0, 0x1a, 0x94, 0x5f, 0x29, 0xeb, 0xbd, 0xee, 0xc6, 0x4b, 0xa5, 0x2f, 0x67, + 0x17, 0x77, 0xe1, 0x46, 0x6a, 0x2b, 0x2e, 0xba, 0x07, 0x77, 0x82, 0x05, 0x7b, 0xca, 0x8b, 0x1d, + 0x65, 0xb7, 0xaf, 0xb4, 0x29, 0x77, 0xe2, 0xfa, 0xe4, 0xc4, 0xb7, 0x7b, 0x11, 0x44, 0x5a, 0x7c, + 0x9c, 0x68, 0x05, 0xe6, 0x6d, 0x92, 0x65, 0xc8, 0x77, 0x76, 0xdb, 0xca, 0x37, 0xf2, 0x14, 0x61, + 0xa0, 0xdf, 0xd9, 0x51, 0x7a, 0xfd, 0x16, 0x61, 0x6c, 0xf1, 0x10, 0xa6, 0x13, 0x3d, 0x96, 0x44, + 0x49, 0x3a, 0x3b, 0xad, 0x17, 0x8a, 0xd6, 0xdb, 0xdf, 0xdc, 0xec, 0x7c, 0xa3, 0x05, 0x33, 0x17, + 0x60, 0x3e, 0x06, 0x17, 0x96, 0x41, 0x77, 0xe0, 0x56, 0x0c, 0xb7, 0xdb, 0xdd, 0x55, 0xb4, 0xee, + 0xd7, 0x8a, 0xfa, 0x4a, 0xed, 0xf4, 0x15, 0x39, 0xb3, 0xf8, 0x63, 0x90, 0x93, 0x0d, 0x0b, 0x64, + 0x41, 0xe5, 0x85, 0xaa, 0xf4, 0x7a, 0x5a, 0xaf, 0xbb, 0xaf, 0x6e, 0x28, 0x1a, 0x39, 0x79, 0xed, + 0x95, 0xb2, 0xce, 0x3e, 0x96, 0x82, 0xeb, 0xb5, 0x5f, 0xca, 0xd2, 0xe2, 0x5f, 0x4a, 0x50, 0x15, + 0xdb, 0x18, 0xd0, 0x2c, 0x4c, 0x07, 0xc4, 0xfd, 0x96, 0xda, 0xef, 0xec, 0xbe, 0x90, 0xa7, 0x88, + 0xa6, 0x71, 0x20, 0x7f, 0x1e, 0x93, 0x04, 0x90, 0xb2, 0xdb, 0x26, 0x54, 0x19, 0x61, 0xea, 0x46, + 0x77, 0x67, 0x6f, 0x5b, 0xe9, 0x2b, 0x72, 0x56, 0xa0, 0xe3, 0xef, 0x67, 0x39, 0x84, 0xa0, 0x1e, + 0xac, 0xb6, 0xde, 0x55, 0xfb, 0x4a, 0x5b, 0xce, 0xa3, 0x06, 0xcc, 0x71, 0xd8, 0x76, 0x67, 0xa7, + 0xd3, 0xd7, 0x54, 0xa5, 0xb5, 0xb1, 0xa5, 0xb4, 0xe5, 0xc2, 0xe2, 0x3e, 0xff, 0x1f, 0x1c, 0x5e, + 0x01, 0x43, 0x50, 0x0f, 0x84, 0xb9, 0xd3, 0xf9, 0x86, 0xb1, 0x37, 0x0f, 0xa8, 0xbd, 0xdf, 0xda, + 0x0e, 0x2d, 0xae, 0xf5, 0x42, 0xd9, 0x25, 0xa6, 0xb8, 0x00, 0xf3, 0x71, 0xf8, 0x76, 0x5f, 0x51, + 0x77, 0x5b, 0xe4, 0x10, 0x57, 0xff, 0xaa, 0x00, 0x05, 0x5e, 0x36, 0xff, 0x11, 0x54, 0x84, 0x0e, + 0x0a, 0x74, 0x59, 0x5f, 0xc5, 0x42, 0x5a, 0x8f, 0x0f, 0x6a, 0x41, 0x55, 0xec, 0xed, 0x41, 0x51, + 0xe0, 0x95, 0xd2, 0xf2, 0x93, 0xbe, 0x84, 0x02, 0x10, 0x35, 0x18, 0xa1, 0x28, 0x72, 0x3c, 0xd7, + 0xea, 0xb4, 0x70, 0x2b, 0x15, 0xc7, 0x3b, 0x92, 0x7e, 0x08, 0x10, 0xf5, 0xe8, 0x20, 0xf1, 0x41, + 0x35, 0xd1, 0xb8, 0x93, 0xce, 0x45, 0x1f, 0x1a, 0x74, 0xcf, 0x29, 0xe5, 0x50, 0x34, 0x49, 0xdf, + 0x47, 0xfa, 0xaa, 0xbf, 0x49, 0x4c, 0x5c, 0x77, 0xfd, 0xb0, 0x18, 0x84, 0x2e, 0x6e, 0x00, 0x49, + 0x5f, 0x61, 0x0f, 0xe6, 0xe9, 0x0a, 0xe7, 0x5f, 0x82, 0xde, 0xdf, 0x13, 0x92, 0xbe, 0xe2, 0xd7, + 0x70, 0x93, 0xae, 0x98, 0x96, 0x7f, 0xa1, 0x89, 0xba, 0x43, 0xd2, 0xd7, 0x6d, 0x83, 0x1c, 0xad, + 0x7b, 0x4e, 0xa1, 0xce, 0xc7, 0xb6, 0xef, 0x51, 0x28, 0x76, 0x63, 0x9f, 0x53, 0xa8, 0xd8, 0x45, + 0xfe, 0x9e, 0x25, 0x98, 0x77, 0x3d, 0xb7, 0x44, 0xec, 0xc2, 0x4e, 0x5d, 0x62, 0x7d, 0xf3, 0x77, + 0xee, 0x1d, 0x59, 0xfe, 0xf1, 0xf8, 0x60, 0xd9, 0x70, 0x86, 0x8f, 0x39, 0xc1, 0xe3, 0xe0, 0xff, + 0x1a, 0x02, 0xc0, 0xdf, 0x66, 0x6a, 0xdb, 0xd6, 0x29, 0x7e, 0xc9, 0xfa, 0x26, 0x7d, 0xe7, 0xbf, + 0x32, 0x75, 0x3e, 0x7e, 0xfe, 0x9c, 0x02, 0x0e, 0x0a, 0x74, 0xca, 0xda, 0xff, 0x05, 0x00, 0x00, + 0xff, 0xff, 0x93, 0x5f, 0xa9, 0x80, 0xe2, 0x3b, 0x00, 0x00, } diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index 9eac155f9..0fd832bdc 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -128,7 +128,6 @@ func (x *StartEgressRequest) GetReplay() *livekit.ExportReplayRequest { return nil } -// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetRoomComposite() *livekit.RoomCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_RoomComposite); ok { @@ -138,7 +137,6 @@ func (x *StartEgressRequest) GetRoomComposite() *livekit.RoomCompositeEgressRequ return nil } -// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetWeb() *livekit.WebEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_Web); ok { @@ -148,7 +146,6 @@ func (x *StartEgressRequest) GetWeb() *livekit.WebEgressRequest { return nil } -// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetParticipant() *livekit.ParticipantEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_Participant); ok { @@ -158,7 +155,6 @@ func (x *StartEgressRequest) GetParticipant() *livekit.ParticipantEgressRequest return nil } -// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetTrackComposite() *livekit.TrackCompositeEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_TrackComposite); ok { @@ -168,7 +164,6 @@ func (x *StartEgressRequest) GetTrackComposite() *livekit.TrackCompositeEgressRe return nil } -// Deprecated: Marked as deprecated in rpc/egress.proto. func (x *StartEgressRequest) GetTrack() *livekit.TrackEgressRequest { if x != nil { if x, ok := x.Request.(*StartEgressRequest_Track); ok { @@ -234,28 +229,22 @@ type StartEgressRequest_Replay struct { type StartEgressRequest_RoomComposite struct { // --- deprecated --- - // - // Deprecated: Marked as deprecated in rpc/egress.proto. RoomComposite *livekit.RoomCompositeEgressRequest `protobuf:"bytes,5,opt,name=room_composite,json=roomComposite,proto3,oneof"` } type StartEgressRequest_Web struct { - // Deprecated: Marked as deprecated in rpc/egress.proto. Web *livekit.WebEgressRequest `protobuf:"bytes,11,opt,name=web,proto3,oneof"` } type StartEgressRequest_Participant struct { - // Deprecated: Marked as deprecated in rpc/egress.proto. Participant *livekit.ParticipantEgressRequest `protobuf:"bytes,13,opt,name=participant,proto3,oneof"` } type StartEgressRequest_TrackComposite struct { - // Deprecated: Marked as deprecated in rpc/egress.proto. TrackComposite *livekit.TrackCompositeEgressRequest `protobuf:"bytes,6,opt,name=track_composite,json=trackComposite,proto3,oneof"` } type StartEgressRequest_Track struct { - // Deprecated: Marked as deprecated in rpc/egress.proto. Track *livekit.TrackEgressRequest `protobuf:"bytes,7,opt,name=track,proto3,oneof"` } @@ -357,16 +346,16 @@ var File_rpc_egress_proto protoreflect.FileDescriptor const file_rpc_egress_proto_rawDesc = "" + "\n" + - "\x10rpc/egress.proto\x12\x03rpc\x1a\roptions.proto\x1a\x14logger/options.proto\x1a\x14livekit_egress.proto\"\xe7\x05\n" + + "\x10rpc/egress.proto\x12\x03rpc\x1a\roptions.proto\x1a\x14logger/options.proto\x1a\x14livekit_egress.proto\"\xd3\x05\n" + "\x12StartEgressRequest\x12)\n" + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x125\n" + "\x06egress\x18\x10 \x01(\v2\x1b.livekit.StartEgressRequestH\x00R\x06egress\x126\n" + - "\x06replay\x18\x11 \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12P\n" + - "\x0eroom_composite\x18\x05 \x01(\v2#.livekit.RoomCompositeEgressRequestB\x02\x18\x01H\x00R\rroomComposite\x121\n" + - "\x03web\x18\v \x01(\v2\x19.livekit.WebEgressRequestB\x02\x18\x01H\x00R\x03web\x12I\n" + - "\vparticipant\x18\r \x01(\v2!.livekit.ParticipantEgressRequestB\x02\x18\x01H\x00R\vparticipant\x12S\n" + - "\x0ftrack_composite\x18\x06 \x01(\v2$.livekit.TrackCompositeEgressRequestB\x02\x18\x01H\x00R\x0etrackComposite\x127\n" + - "\x05track\x18\a \x01(\v2\x1b.livekit.TrackEgressRequestB\x02\x18\x01H\x00R\x05track\x12#\n" + + "\x06replay\x18\x11 \x01(\v2\x1c.livekit.ExportReplayRequestH\x00R\x06replay\x12L\n" + + "\x0eroom_composite\x18\x05 \x01(\v2#.livekit.RoomCompositeEgressRequestH\x00R\rroomComposite\x12-\n" + + "\x03web\x18\v \x01(\v2\x19.livekit.WebEgressRequestH\x00R\x03web\x12E\n" + + "\vparticipant\x18\r \x01(\v2!.livekit.ParticipantEgressRequestH\x00R\vparticipant\x12O\n" + + "\x0ftrack_composite\x18\x06 \x01(\v2$.livekit.TrackCompositeEgressRequestH\x00R\x0etrackComposite\x123\n" + + "\x05track\x18\a \x01(\v2\x1b.livekit.TrackEgressRequestH\x00R\x05track\x12#\n" + "\aroom_id\x18\x03 \x01(\tB\n" + "\x9a\xec,\x06roomIDR\x06roomId\x12\x1a\n" + "\x05token\x18\b \x01(\tB\x04\x88\xec,\x01R\x05token\x12\x15\n" + diff --git a/rpc/egress.psrpc.go b/rpc/egress.psrpc.go index 67275f9a3..1ee57bae2 100644 --- a/rpc/egress.psrpc.go +++ b/rpc/egress.psrpc.go @@ -312,46 +312,45 @@ func (UnimplementedEgressHandlerServer) StopEgress(context.Context, *livekit4.St } var psrpcFileDescriptor2 = []byte{ - // 645 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcf, 0x4e, 0xdb, 0x3e, - 0x1c, 0xc7, 0xf4, 0xd7, 0x40, 0xbf, 0xa5, 0xa5, 0x3f, 0x8f, 0x09, 0xd3, 0x81, 0x28, 0x65, 0x87, - 0x4c, 0x42, 0x2d, 0x63, 0xda, 0xa6, 0xdd, 0xb6, 0x42, 0x35, 0x2a, 0xed, 0x80, 0xdc, 0xa1, 0x49, - 0xdb, 0x21, 0x4a, 0x1d, 0xaf, 0x8b, 0x9a, 0xc6, 0x9e, 0xe3, 0xc0, 0x78, 0x83, 0xf1, 0x0a, 0xdc, - 0xf6, 0x0a, 0x1c, 0xf6, 0x4a, 0xbb, 0xf0, 0x10, 0x53, 0x9d, 0x34, 0x04, 0x28, 0x68, 0xa7, 0x38, - 0x9f, 0x7f, 0xf6, 0xd7, 0xf6, 0xd7, 0x50, 0x53, 0x92, 0xb5, 0xf9, 0x50, 0xf1, 0x28, 0x6a, 0x49, - 0x25, 0xb4, 0xc0, 0x05, 0x25, 0x59, 0xbd, 0x22, 0xa4, 0xf6, 0x45, 0x98, 0x62, 0xf5, 0x95, 0x40, - 0x0c, 0x87, 0x5c, 0xb5, 0x6f, 0xa3, 0xfe, 0x09, 0x1f, 0xf9, 0xda, 0xc9, 0xfb, 0x9b, 0x7f, 0x8a, - 0x80, 0xfb, 0xda, 0x55, 0xba, 0x6b, 0x50, 0xca, 0xbf, 0xc7, 0x3c, 0xd2, 0xf8, 0x19, 0x94, 0x12, - 0x99, 0xe3, 0x7b, 0x04, 0x35, 0x90, 0x5d, 0xea, 0x2c, 0x5d, 0x5c, 0xed, 0x2c, 0x26, 0x60, 0xef, - 0x80, 0x4e, 0x47, 0x1e, 0x7e, 0x09, 0x56, 0x32, 0x26, 0xb5, 0x06, 0xb2, 0xcb, 0x7b, 0x4f, 0x5a, - 0xe9, 0x44, 0xad, 0xbb, 0xb9, 0x87, 0x73, 0x34, 0x15, 0xe3, 0x57, 0x60, 0x29, 0x2e, 0x03, 0xf7, - 0x8c, 0xfc, 0x6f, 0x6c, 0xeb, 0x99, 0xad, 0xfb, 0x43, 0x0a, 0xa5, 0xa9, 0x21, 0x73, 0xbe, 0x44, - 0x8d, 0x8f, 0xa0, 0xaa, 0x84, 0x18, 0x3b, 0x4c, 0x8c, 0xa5, 0x88, 0x7c, 0xcd, 0x49, 0xd1, 0xf8, - 0xb7, 0x33, 0x3f, 0x15, 0x62, 0xbc, 0x3f, 0x65, 0x6f, 0x4c, 0xdf, 0x99, 0x27, 0xe8, 0x70, 0x8e, - 0x56, 0x54, 0x5e, 0x81, 0x9f, 0x43, 0xe1, 0x94, 0x0f, 0x48, 0xd9, 0xc4, 0xac, 0x65, 0x31, 0x9f, - 0xf8, 0x60, 0x96, 0x79, 0xa2, 0xc5, 0x3d, 0x28, 0x4b, 0x57, 0x69, 0x9f, 0xf9, 0xd2, 0x0d, 0x35, - 0xa9, 0x18, 0xeb, 0x56, 0x66, 0x3d, 0xba, 0xe6, 0x66, 0x45, 0xe4, 0xbd, 0xb8, 0x0f, 0xcb, 0x5a, - 0xb9, 0x6c, 0x94, 0x2b, 0xc8, 0x32, 0x71, 0x4f, 0xb3, 0xb8, 0x8f, 0x13, 0xfe, 0xc1, 0x8a, 0xaa, - 0xfa, 0x86, 0x04, 0xbf, 0x86, 0xa2, 0x41, 0xc8, 0xc2, 0xad, 0x23, 0x31, 0x51, 0xb3, 0x12, 0x12, - 0x3d, 0xde, 0x86, 0x05, 0xb3, 0xbb, 0xbe, 0x47, 0x0a, 0xe6, 0xd4, 0xe1, 0xe2, 0x6a, 0xc7, 0x9a, - 0x40, 0xbd, 0x03, 0x9a, 0x7c, 0x3d, 0x5c, 0x87, 0xa2, 0x16, 0x23, 0x1e, 0x92, 0x45, 0x23, 0xf9, - 0xef, 0xe7, 0xd5, 0x0e, 0xa2, 0x09, 0x84, 0x1f, 0x83, 0x75, 0x1a, 0x39, 0xb1, 0x0a, 0x48, 0x69, - 0x42, 0xd2, 0xe2, 0x69, 0x74, 0xac, 0x02, 0xbc, 0x0b, 0x2b, 0x2c, 0x10, 0xb1, 0xe7, 0x0c, 0x5c, - 0x36, 0x8a, 0xa5, 0xc3, 0x43, 0x77, 0x10, 0x70, 0x8f, 0x40, 0x03, 0xd9, 0x8b, 0x14, 0x1b, 0xae, - 0x63, 0xa8, 0x6e, 0xc2, 0xe0, 0x6d, 0xa8, 0xf0, 0x48, 0xfb, 0x63, 0x57, 0x73, 0xcf, 0x61, 0x32, - 0x26, 0xd5, 0x06, 0xb2, 0x11, 0x5d, 0xca, 0xc0, 0x7d, 0x19, 0xe3, 0x4d, 0x28, 0x2b, 0xae, 0xd5, - 0x99, 0xc3, 0x44, 0x1c, 0x6a, 0xb2, 0xdc, 0x40, 0x76, 0x91, 0x82, 0x81, 0xf6, 0x27, 0x48, 0xa7, - 0x04, 0x0b, 0x2a, 0xa9, 0xb3, 0xb9, 0x06, 0xab, 0x1f, 0xfc, 0x48, 0xbf, 0x63, 0xda, 0x3f, 0xb9, - 0xb9, 0x89, 0xcd, 0x37, 0x40, 0xee, 0x52, 0x91, 0x14, 0x61, 0xc4, 0xf1, 0x06, 0x40, 0xd6, 0x09, - 0x11, 0x41, 0x8d, 0x82, 0x5d, 0xa2, 0xa5, 0xe9, 0xe5, 0x8f, 0xf6, 0x7e, 0x23, 0xa8, 0x26, 0x8e, - 0x5e, 0xa8, 0xb9, 0x0a, 0xdd, 0x00, 0xbf, 0x87, 0x72, 0xee, 0xe6, 0xe3, 0xd5, 0x96, 0x92, 0x6c, - 0x46, 0x2f, 0xd4, 0x1f, 0x5d, 0xdf, 0xf8, 0x34, 0xe0, 0xab, 0x68, 0xc2, 0xe5, 0x39, 0xb2, 0x6a, - 0xe8, 0x2d, 0xda, 0x45, 0xf8, 0x0b, 0xd4, 0x6e, 0x2f, 0x0b, 0xaf, 0x9b, 0xb4, 0x7b, 0x0a, 0xa9, - 0x6f, 0xdc, 0xc3, 0x26, 0xb5, 0x64, 0xe1, 0xf3, 0x36, 0xda, 0xfb, 0x85, 0xa0, 0x92, 0xd0, 0x87, - 0x6e, 0xe8, 0x05, 0x5c, 0xe1, 0x1e, 0x2c, 0x1d, 0x4b, 0xcf, 0xd5, 0xbc, 0xaf, 0x15, 0x77, 0xc7, - 0xf8, 0xba, 0x23, 0xf3, 0xf0, 0x83, 0xab, 0xb7, 0x2e, 0xcf, 0xd1, 0x7c, 0x0d, 0xe1, 0x2e, 0x40, - 0x5f, 0x0b, 0x99, 0xae, 0xb9, 0x9e, 0x7b, 0x11, 0xa6, 0xe0, 0xbf, 0xc4, 0x74, 0xb6, 0x3e, 0x6f, - 0x0e, 0x7d, 0xfd, 0x2d, 0x1e, 0xb4, 0x98, 0x18, 0xb7, 0x53, 0x61, 0xdb, 0x3c, 0x5c, 0x4c, 0x04, - 0x6d, 0x25, 0xd9, 0xc0, 0x32, 0x7f, 0x2f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x74, 0x13, 0x5f, - 0x66, 0x1a, 0x05, 0x00, 0x00, + // 639 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x4e, 0x13, 0x4d, + 0x14, 0xff, 0x86, 0x7e, 0x5d, 0xe8, 0x29, 0x2d, 0xf5, 0x88, 0x61, 0xa8, 0x10, 0x4a, 0xf1, 0xa2, + 0x26, 0xd8, 0x12, 0x88, 0x26, 0xde, 0x69, 0xa1, 0x91, 0x26, 0x24, 0x9a, 0x45, 0x62, 0xa2, 0x17, + 0x9b, 0xed, 0xec, 0x58, 0x37, 0xdd, 0xee, 0x8c, 0xb3, 0xb3, 0x20, 0x6f, 0x20, 0xaf, 0xc0, 0x9d, + 0xaf, 0xc0, 0x85, 0x2f, 0xe2, 0x6b, 0xf0, 0x10, 0xa6, 0xb3, 0xed, 0xb2, 0x2c, 0x62, 0xbc, 0xea, + 0xf4, 0xf7, 0x6f, 0xce, 0x99, 0x39, 0xb3, 0x50, 0x53, 0x92, 0x75, 0xf8, 0x50, 0xf1, 0x28, 0x6a, + 0x4b, 0x25, 0xb4, 0xc0, 0x82, 0x92, 0xac, 0x5e, 0x11, 0x52, 0xfb, 0x22, 0x9c, 0x62, 0xf5, 0xe5, + 0x40, 0x0c, 0x87, 0x5c, 0x75, 0xf2, 0xa8, 0x7f, 0xca, 0x47, 0xbe, 0x76, 0xb2, 0xfe, 0xe6, 0xaf, + 0x22, 0xe0, 0xb1, 0x76, 0x95, 0xee, 0x19, 0xd4, 0xe6, 0x5f, 0x63, 0x1e, 0x69, 0x7c, 0x0a, 0xa5, + 0x44, 0xe6, 0xf8, 0x1e, 0x25, 0x0d, 0xd2, 0x2a, 0x75, 0x17, 0x2f, 0xaf, 0xb7, 0x17, 0x12, 0xb0, + 0x7f, 0x60, 0xcf, 0x56, 0x1e, 0x3e, 0x07, 0x2b, 0x59, 0xd3, 0x5a, 0x83, 0xb4, 0xca, 0xbb, 0x8f, + 0xdb, 0xd3, 0x8d, 0xda, 0x77, 0x73, 0x0f, 0xff, 0xb3, 0xa7, 0x62, 0x7c, 0x01, 0x96, 0xe2, 0x32, + 0x70, 0xcf, 0xe9, 0x03, 0x63, 0x5b, 0x4b, 0x6d, 0xbd, 0x6f, 0x52, 0x28, 0x6d, 0x1b, 0x32, 0xe3, + 0x4b, 0xd4, 0x78, 0x04, 0x55, 0x25, 0xc4, 0xd8, 0x61, 0x62, 0x2c, 0x45, 0xe4, 0x6b, 0x4e, 0x8b, + 0xc6, 0xbf, 0x95, 0xfa, 0x6d, 0x21, 0xc6, 0xfb, 0x33, 0x36, 0xbf, 0x7d, 0x45, 0x65, 0x59, 0x7c, + 0x06, 0x85, 0x33, 0x3e, 0xa0, 0x65, 0x13, 0xb1, 0x9a, 0x46, 0x7c, 0xe0, 0x83, 0xbc, 0x71, 0xa2, + 0xc3, 0x1e, 0x94, 0xa5, 0xab, 0xb4, 0xcf, 0x7c, 0xe9, 0x86, 0x9a, 0x56, 0x8c, 0x6d, 0x33, 0xb5, + 0xbd, 0xbb, 0xe1, 0xf2, 0xf6, 0xac, 0x0f, 0xdf, 0xc2, 0x92, 0x56, 0x2e, 0x1b, 0x65, 0x9a, 0xb0, + 0x4c, 0xd4, 0x93, 0x34, 0xea, 0xfd, 0x84, 0xbf, 0xb7, 0x8b, 0xaa, 0xbe, 0x45, 0xe3, 0x1e, 0x14, + 0x0d, 0x42, 0xe7, 0x73, 0x57, 0x60, 0x62, 0xf2, 0xee, 0x44, 0x8b, 0x5b, 0x30, 0x6f, 0x4e, 0xd2, + 0xf7, 0x68, 0xc1, 0xdc, 0x30, 0x5c, 0x5e, 0x6f, 0x5b, 0x13, 0xa8, 0x7f, 0x60, 0x27, 0xbf, 0x1e, + 0xd6, 0xa1, 0xa8, 0xc5, 0x88, 0x87, 0x74, 0xc1, 0x48, 0xfe, 0xff, 0x7e, 0xbd, 0x4d, 0xec, 0x04, + 0xc2, 0x47, 0x60, 0x9d, 0x45, 0x4e, 0xac, 0x02, 0x5a, 0x9a, 0x90, 0x76, 0xf1, 0x2c, 0x3a, 0x51, + 0x01, 0xee, 0xc0, 0x32, 0x0b, 0x44, 0xec, 0x39, 0x03, 0x97, 0x8d, 0x62, 0xe9, 0xf0, 0xd0, 0x1d, + 0x04, 0xdc, 0xa3, 0xd0, 0x20, 0xad, 0x05, 0x1b, 0x0d, 0xd7, 0x35, 0x54, 0x2f, 0x61, 0x70, 0x0b, + 0x2a, 0x3c, 0xd2, 0xfe, 0xd8, 0xd5, 0xdc, 0x73, 0x98, 0x8c, 0x69, 0xb5, 0x41, 0x5a, 0xc4, 0x5e, + 0x4c, 0xc1, 0x7d, 0x19, 0xe3, 0x06, 0x94, 0x15, 0xd7, 0xea, 0xdc, 0x61, 0x22, 0x0e, 0x35, 0x5d, + 0x6a, 0x90, 0x56, 0xd1, 0x06, 0x03, 0xed, 0x4f, 0x90, 0x6e, 0x09, 0xe6, 0x55, 0xd2, 0x63, 0x73, + 0x15, 0x56, 0x8e, 0xfc, 0x48, 0xbf, 0x66, 0xda, 0x3f, 0xbd, 0x7d, 0x78, 0xcd, 0x97, 0x40, 0xef, + 0x52, 0x91, 0x14, 0x61, 0xc4, 0x71, 0x1d, 0x20, 0x9d, 0xfa, 0x88, 0x92, 0x46, 0xa1, 0x55, 0xb2, + 0x4b, 0xb3, 0x41, 0x8f, 0x76, 0x7f, 0x12, 0xa8, 0x26, 0x8e, 0x7e, 0xa8, 0xb9, 0x0a, 0xdd, 0x00, + 0xdf, 0x40, 0x39, 0x33, 0xe5, 0xb8, 0xd2, 0x56, 0x92, 0xfd, 0x61, 0xee, 0xeb, 0x0f, 0x6f, 0xa6, + 0x7b, 0x1a, 0xf0, 0x59, 0x34, 0xe1, 0xea, 0x82, 0x58, 0x35, 0xf2, 0x8a, 0xec, 0x10, 0xfc, 0x04, + 0xb5, 0x7c, 0x59, 0xb8, 0x66, 0xd2, 0xee, 0x69, 0xa4, 0xbe, 0x7e, 0x0f, 0x9b, 0xf4, 0x92, 0x86, + 0xcf, 0xb5, 0xc8, 0xee, 0x0f, 0x02, 0x95, 0x84, 0x3e, 0x74, 0x43, 0x2f, 0xe0, 0x0a, 0xfb, 0xb0, + 0x78, 0x22, 0x3d, 0x57, 0xf3, 0x63, 0xad, 0xb8, 0x3b, 0xc6, 0x9b, 0xd7, 0x97, 0x85, 0xff, 0x5a, + 0xbd, 0x75, 0x75, 0x41, 0xe6, 0x6a, 0x04, 0x7b, 0x00, 0xc7, 0x5a, 0xc8, 0x69, 0xcd, 0xf5, 0xcc, + 0xeb, 0x9f, 0x81, 0xff, 0x12, 0xd3, 0xdd, 0xfc, 0xb8, 0x31, 0xf4, 0xf5, 0x97, 0x78, 0xd0, 0x66, + 0x62, 0xdc, 0x99, 0x0a, 0x3b, 0xe6, 0x23, 0xc5, 0x44, 0xd0, 0x51, 0x92, 0x0d, 0x2c, 0xf3, 0x6f, + 0xef, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x48, 0x7e, 0xb7, 0x06, 0x05, 0x00, 0x00, } From 61ed308e93b69102fdd17265de8003f5dc697621 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 16 Mar 2026 23:44:37 +0800 Subject: [PATCH 05/10] deprecate unused quality fields --- protobufs/livekit_egress.proto | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index 93f023b6a..c1ce8b47d 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -170,12 +170,14 @@ message EncodingOptions { int32 framerate = 4; // (default 30) AudioCodec audio_codec = 5; // (default OPUS) int32 audio_bitrate = 6; // (default 128) - int32 audio_quality = 11; // quality setting on audio encoder int32 audio_frequency = 7; // (default 44100) VideoCodec video_codec = 8; // (default H264_MAIN) int32 video_bitrate = 9; // (default 4500) - int32 video_quality = 12; // quality setting on video encoder double key_frame_interval = 10; // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) + + // --- Deprecated --- + int32 audio_quality = 11 [deprecated = true]; // quality setting on audio encoder + int32 video_quality = 12 [deprecated = true]; // quality setting on video encoder } // --- Output Types --- From b6cc8ec406740e3cea7052618480941b70b9568b Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:46:13 +0000 Subject: [PATCH 06/10] generated protobuf --- livekit/livekit_egress.pb.go | 48 ++-- livekit/livekit_egress.twirp.go | 445 ++++++++++++++++---------------- 2 files changed, 250 insertions(+), 243 deletions(-) diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index 37f9a6554..400d5cd1e 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -1377,14 +1377,18 @@ type EncodingOptions struct { Framerate int32 `protobuf:"varint,4,opt,name=framerate,proto3" json:"framerate,omitempty"` // (default 30) AudioCodec AudioCodec `protobuf:"varint,5,opt,name=audio_codec,json=audioCodec,proto3,enum=livekit.AudioCodec" json:"audio_codec,omitempty"` // (default OPUS) AudioBitrate int32 `protobuf:"varint,6,opt,name=audio_bitrate,json=audioBitrate,proto3" json:"audio_bitrate,omitempty"` // (default 128) - AudioQuality int32 `protobuf:"varint,11,opt,name=audio_quality,json=audioQuality,proto3" json:"audio_quality,omitempty"` // quality setting on audio encoder AudioFrequency int32 `protobuf:"varint,7,opt,name=audio_frequency,json=audioFrequency,proto3" json:"audio_frequency,omitempty"` // (default 44100) VideoCodec VideoCodec `protobuf:"varint,8,opt,name=video_codec,json=videoCodec,proto3,enum=livekit.VideoCodec" json:"video_codec,omitempty"` // (default H264_MAIN) VideoBitrate int32 `protobuf:"varint,9,opt,name=video_bitrate,json=videoBitrate,proto3" json:"video_bitrate,omitempty"` // (default 4500) - VideoQuality int32 `protobuf:"varint,12,opt,name=video_quality,json=videoQuality,proto3" json:"video_quality,omitempty"` // quality setting on video encoder KeyFrameInterval float64 `protobuf:"fixed64,10,opt,name=key_frame_interval,json=keyFrameInterval,proto3" json:"key_frame_interval,omitempty"` // in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files) - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // --- Deprecated --- + // + // Deprecated: Marked as deprecated in livekit_egress.proto. + AudioQuality int32 `protobuf:"varint,11,opt,name=audio_quality,json=audioQuality,proto3" json:"audio_quality,omitempty"` // quality setting on audio encoder + // Deprecated: Marked as deprecated in livekit_egress.proto. + VideoQuality int32 `protobuf:"varint,12,opt,name=video_quality,json=videoQuality,proto3" json:"video_quality,omitempty"` // quality setting on video encoder + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EncodingOptions) Reset() { @@ -1459,13 +1463,6 @@ func (x *EncodingOptions) GetAudioBitrate() int32 { return 0 } -func (x *EncodingOptions) GetAudioQuality() int32 { - if x != nil { - return x.AudioQuality - } - return 0 -} - func (x *EncodingOptions) GetAudioFrequency() int32 { if x != nil { return x.AudioFrequency @@ -1487,16 +1484,25 @@ func (x *EncodingOptions) GetVideoBitrate() int32 { return 0 } -func (x *EncodingOptions) GetVideoQuality() int32 { +func (x *EncodingOptions) GetKeyFrameInterval() float64 { if x != nil { - return x.VideoQuality + return x.KeyFrameInterval } return 0 } -func (x *EncodingOptions) GetKeyFrameInterval() float64 { +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *EncodingOptions) GetAudioQuality() int32 { if x != nil { - return x.KeyFrameInterval + return x.AudioQuality + } + return 0 +} + +// Deprecated: Marked as deprecated in livekit_egress.proto. +func (x *EncodingOptions) GetVideoQuality() int32 { + if x != nil { + return x.VideoQuality } return 0 } @@ -5551,7 +5557,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\btrack_id\x18\x01 \x01(\tB\v\x9a\xec,\atrackIDH\x00R\atrackId\x123\n" + "\x14participant_identity\x18\x02 \x01(\tH\x00R\x13participantIdentity\x12\x16\n" + "\x05topic\x18\x03 \x01(\tH\x00R\x05topicB\a\n" + - "\x05match\"\xca\x03\n" + + "\x05match\"\xd2\x03\n" + "\x0fEncodingOptions\x12\x14\n" + "\x05width\x18\x01 \x01(\x05R\x05width\x12\x16\n" + "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + @@ -5559,15 +5565,15 @@ const file_livekit_egress_proto_rawDesc = "" + "\tframerate\x18\x04 \x01(\x05R\tframerate\x124\n" + "\vaudio_codec\x18\x05 \x01(\x0e2\x13.livekit.AudioCodecR\n" + "audioCodec\x12#\n" + - "\raudio_bitrate\x18\x06 \x01(\x05R\faudioBitrate\x12#\n" + - "\raudio_quality\x18\v \x01(\x05R\faudioQuality\x12'\n" + + "\raudio_bitrate\x18\x06 \x01(\x05R\faudioBitrate\x12'\n" + "\x0faudio_frequency\x18\a \x01(\x05R\x0eaudioFrequency\x124\n" + "\vvideo_codec\x18\b \x01(\x0e2\x13.livekit.VideoCodecR\n" + "videoCodec\x12#\n" + - "\rvideo_bitrate\x18\t \x01(\x05R\fvideoBitrate\x12#\n" + - "\rvideo_quality\x18\f \x01(\x05R\fvideoQuality\x12,\n" + + "\rvideo_bitrate\x18\t \x01(\x05R\fvideoBitrate\x12,\n" + "\x12key_frame_interval\x18\n" + - " \x01(\x01R\x10keyFrameInterval\"\xb7\x02\n" + + " \x01(\x01R\x10keyFrameInterval\x12'\n" + + "\raudio_quality\x18\v \x01(\x05B\x02\x18\x01R\faudioQuality\x12'\n" + + "\rvideo_quality\x18\f \x01(\x05B\x02\x18\x01R\fvideoQuality\"\xb7\x02\n" + "\x06Output\x12)\n" + "\x04file\x18\x01 \x01(\v2\x13.livekit.FileOutputH\x00R\x04file\x12/\n" + "\x06stream\x18\x02 \x01(\v2\x15.livekit.StreamOutputH\x00R\x06stream\x12:\n" + diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index d343b8284..e9d314443 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -3312,15 +3312,15 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor1 = []byte{ - // 4314 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0xdc, 0x48, - 0x76, 0x62, 0x7f, 0xf7, 0xeb, 0x0f, 0x51, 0x25, 0x59, 0xd3, 0x96, 0x3d, 0x63, 0x6f, 0x3b, 0xe3, - 0x0f, 0x8d, 0x56, 0x56, 0x24, 0xaf, 0xc7, 0xeb, 0xcd, 0xce, 0xa6, 0xa5, 0xa6, 0xac, 0x5e, 0x4b, - 0x6a, 0x85, 0xdd, 0x1a, 0x4f, 0x02, 0x24, 0x04, 0x45, 0x96, 0x24, 0x42, 0xdd, 0x64, 0x2f, 0xc9, - 0x96, 0xad, 0xfd, 0x05, 0x9b, 0x1c, 0x92, 0x20, 0x01, 0x12, 0xc0, 0x40, 0x90, 0x1c, 0x82, 0x1c, - 0x82, 0x3d, 0xe5, 0x92, 0x6b, 0xce, 0xf9, 0x40, 0x0e, 0x41, 0x90, 0x7b, 0x8e, 0x81, 0x83, 0x45, - 0x0e, 0xb9, 0x07, 0xf5, 0x41, 0xb2, 0x48, 0x51, 0x72, 0xcb, 0x72, 0x66, 0x2f, 0x7b, 0x52, 0xd7, - 0x7b, 0xaf, 0x8a, 0xaf, 0xea, 0x7d, 0xd4, 0x7b, 0xaf, 0x9e, 0x60, 0x6e, 0x60, 0x9d, 0xe2, 0x13, + // 4324 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0x1c, 0x5b, + 0x56, 0xae, 0xfe, 0xee, 0xd3, 0x1f, 0x2e, 0x5f, 0x3b, 0x7e, 0x1d, 0x27, 0xef, 0x25, 0xd3, 0xe1, + 0xe5, 0xc3, 0xcf, 0xe3, 0x18, 0x3b, 0x93, 0x97, 0xc9, 0x30, 0x6f, 0x68, 0xbb, 0xcb, 0x71, 0x4f, + 0x6c, 0xb7, 0xa9, 0x6e, 0xbf, 0x3c, 0x90, 0xa0, 0x54, 0xae, 0xba, 0xb6, 0x4b, 0xee, 0xae, 0xea, + 0xa9, 0xaa, 0x76, 0xe2, 0xf9, 0x05, 0x03, 0x0b, 0x40, 0x20, 0x81, 0x14, 0x09, 0xc1, 0x02, 0xb1, + 0x40, 0xb3, 0x62, 0xc3, 0x96, 0x3d, 0x20, 0x24, 0x10, 0x62, 0xcf, 0x12, 0x05, 0x8d, 0x58, 0xb0, + 0x47, 0xf7, 0xa3, 0xaa, 0x6e, 0x95, 0xcb, 0x4e, 0x3b, 0x0e, 0x6f, 0x36, 0xb3, 0x72, 0xdf, 0x73, + 0xce, 0xbd, 0x75, 0xee, 0x3d, 0x1f, 0xf7, 0x9c, 0x73, 0x8f, 0x61, 0x6e, 0x60, 0x9d, 0xe2, 0x13, 0xcb, 0xd7, 0xf0, 0x91, 0x8b, 0x3d, 0x6f, 0x79, 0xe4, 0x3a, 0xbe, 0x83, 0x8a, 0x1c, 0xba, 0x10, 0xa2, 0x87, 0x8e, 0x89, 0x07, 0x1c, 0xbd, 0x30, 0x37, 0x70, 0x8e, 0x8e, 0xb0, 0xfb, 0xd8, 0x19, 0xf9, 0x96, 0x63, 0x73, 0x68, 0xf3, 0x3f, 0xb2, 0x80, 0x7a, 0xbe, 0xee, 0xfa, 0x0a, 0x5d, 0x4a, @@ -3365,222 +3365,223 @@ var twirpFileDescriptor1 = []byte{ 0x46, 0x42, 0x6a, 0x0c, 0xa9, 0x06, 0x54, 0x44, 0x1e, 0x43, 0xdd, 0x37, 0x8e, 0x9b, 0x2d, 0x80, 0x48, 0x58, 0x68, 0x0d, 0xca, 0x1e, 0x1e, 0x60, 0xc3, 0x77, 0xdc, 0xe0, 0xc4, 0x6e, 0xc4, 0x84, 0xda, 0xe3, 0x58, 0x35, 0xa2, 0x23, 0x16, 0x5e, 0x15, 0x71, 0xff, 0xdf, 0x07, 0x37, 0x0f, 0x79, - 0xdf, 0x19, 0x59, 0x06, 0x3d, 0x2d, 0x42, 0xc5, 0x86, 0xd1, 0x9e, 0xfe, 0x31, 0x0b, 0xd3, 0x09, + 0xdf, 0x19, 0x59, 0x06, 0x3d, 0x2d, 0x42, 0xc5, 0x86, 0xd1, 0x9e, 0xfe, 0x35, 0x0b, 0xd3, 0x09, 0xcf, 0x89, 0xe6, 0x20, 0xff, 0xda, 0x32, 0xfd, 0x63, 0xca, 0x50, 0x5e, 0x65, 0x03, 0xe2, 0x89, 0x8e, 0xb1, 0x75, 0x74, 0xec, 0xd3, 0x2f, 0xe6, 0x55, 0x3e, 0x22, 0xd4, 0x26, 0x1e, 0xf9, 0xc7, 0xf4, 0x13, 0x79, 0x95, 0x0d, 0xd0, 0x6d, 0x28, 0x1f, 0xba, 0xfa, 0x10, 0xbb, 0xe4, 0xc6, 0xc9, 0x51, 0x4c, 0x04, 0x40, 0x4f, 0xa0, 0xc2, 0xfc, 0x86, 0xe1, 0x98, 0xd8, 0xe0, 0xd7, 0xc0, 0x6c, 0xd2, 0x7a, 0x4c, 0x6c, 0xa8, 0xcc, 0xbf, 0xd0, 0xdf, 0xe8, 0x1e, 0xd4, 0xd8, 0xac, 0x03, 0xcb, - 0xa7, 0xeb, 0x16, 0xe8, 0xba, 0x55, 0x0a, 0x5c, 0x67, 0xb0, 0x88, 0xe8, 0x27, 0x63, 0x7d, 0x40, - 0xce, 0xa7, 0x22, 0x10, 0xfd, 0x16, 0x83, 0xa1, 0x07, 0x30, 0xcd, 0x88, 0x0e, 0x5d, 0x72, 0x7b, - 0xda, 0xc6, 0x59, 0xa3, 0x48, 0xc9, 0xea, 0x14, 0xbc, 0x19, 0x40, 0x09, 0xa3, 0xcc, 0xc9, 0x30, - 0x46, 0x4b, 0x09, 0x46, 0xa9, 0x4d, 0x72, 0x46, 0x4f, 0xc3, 0xdf, 0x84, 0x07, 0x36, 0x2b, 0x60, - 0xb4, 0xcc, 0x78, 0xa0, 0x40, 0x81, 0x51, 0x46, 0x14, 0x30, 0x5a, 0x15, 0x88, 0x02, 0x46, 0x97, - 0x00, 0x9d, 0xe0, 0x33, 0x8d, 0x9e, 0x9c, 0x66, 0xd9, 0x3e, 0x76, 0x4f, 0xf5, 0x41, 0x03, 0xee, - 0x4a, 0x0f, 0x25, 0x55, 0x3e, 0xc1, 0x67, 0x9b, 0x04, 0xd1, 0xe1, 0xf0, 0xe6, 0xdf, 0x67, 0xa0, - 0xc0, 0xee, 0x33, 0xf4, 0x08, 0x72, 0x87, 0xd6, 0x80, 0x05, 0x02, 0xa2, 0x29, 0x6f, 0x5a, 0x03, - 0xcc, 0x48, 0xb6, 0xa6, 0x54, 0x4a, 0x82, 0x1e, 0x43, 0xc1, 0xf3, 0x5d, 0xac, 0x0f, 0xb9, 0x0f, - 0xbc, 0x21, 0x5c, 0x78, 0x04, 0x1c, 0x92, 0x73, 0x32, 0xf4, 0x1c, 0x4a, 0x1e, 0x3e, 0x1a, 0x62, - 0xdb, 0xf7, 0xb8, 0xe3, 0xbb, 0x1d, 0x4d, 0x61, 0x08, 0x6c, 0xc6, 0x3e, 0x14, 0xd2, 0xa3, 0x65, - 0x28, 0x58, 0x43, 0xfd, 0x08, 0x7b, 0xe7, 0x42, 0x85, 0x0e, 0x01, 0x47, 0xdf, 0x62, 0x54, 0x64, - 0x1f, 0x43, 0x43, 0x1f, 0x51, 0x15, 0x11, 0xf7, 0xb1, 0x63, 0xe8, 0xa3, 0x68, 0x1f, 0x84, 0x44, - 0xbc, 0xb9, 0x0b, 0x13, 0xdd, 0xdc, 0xe4, 0x16, 0x36, 0x28, 0xa8, 0xf9, 0x07, 0x12, 0x40, 0xc4, - 0x31, 0xfa, 0x1e, 0x94, 0xc9, 0xd1, 0x68, 0xfe, 0xd9, 0x88, 0x1d, 0x61, 0x3d, 0x19, 0x68, 0xb0, - 0x0d, 0xf6, 0xcf, 0x46, 0x58, 0x2d, 0x1d, 0xf2, 0x5f, 0xc4, 0x39, 0x93, 0xdf, 0x23, 0xdd, 0x3f, - 0x66, 0x66, 0xa9, 0x86, 0x63, 0xf4, 0x08, 0x64, 0xd3, 0xf2, 0xf4, 0x83, 0x01, 0xd6, 0x86, 0xba, - 0x6d, 0x1d, 0x62, 0xcf, 0xe7, 0x37, 0xe2, 0x34, 0x87, 0xef, 0x70, 0x70, 0xf3, 0x15, 0x54, 0xc5, - 0x93, 0x47, 0x6b, 0x50, 0xa2, 0x91, 0x9f, 0xe1, 0x0c, 0x38, 0x33, 0x9f, 0x24, 0x44, 0xb4, 0xc7, - 0xd1, 0x6a, 0x48, 0x88, 0x10, 0xe4, 0xc6, 0xee, 0xc0, 0x6b, 0x64, 0xee, 0x66, 0x1f, 0x96, 0x55, - 0xfa, 0xbb, 0xf9, 0xd7, 0x39, 0x98, 0x4d, 0x11, 0x10, 0x11, 0x68, 0xe2, 0x03, 0x9f, 0xa5, 0x0b, - 0x34, 0xe5, 0x3b, 0x0f, 0x60, 0x9a, 0xec, 0x91, 0x44, 0x9d, 0x1a, 0xb9, 0x62, 0xac, 0x37, 0x7c, - 0xeb, 0xf5, 0x00, 0xbc, 0x47, 0xa1, 0x44, 0xdf, 0x47, 0x03, 0xfd, 0x6c, 0x60, 0x79, 0x3e, 0x8b, - 0x51, 0xa9, 0x4b, 0x52, 0xab, 0x01, 0x90, 0xc6, 0xa9, 0x4b, 0x80, 0xc8, 0x87, 0xb5, 0x38, 0x65, - 0x85, 0x52, 0xca, 0x04, 0xb3, 0x27, 0x52, 0x3f, 0x02, 0x99, 0x2b, 0x96, 0x66, 0x8e, 0x5d, 0x9d, - 0x78, 0x2f, 0xaa, 0x56, 0x35, 0x75, 0x9a, 0xc3, 0xdb, 0x1c, 0x8c, 0x14, 0x81, 0x4d, 0x6f, 0x7c, - 0x48, 0xd8, 0x04, 0xba, 0xd3, 0x0b, 0x54, 0xb7, 0x47, 0x69, 0xa2, 0x4d, 0xb0, 0x71, 0xaa, 0x14, - 0x4b, 0xa9, 0x52, 0x44, 0xf7, 0x20, 0xe3, 0xad, 0x71, 0xbd, 0x9d, 0x89, 0x3e, 0xb2, 0xb6, 0x3f, - 0x1a, 0x38, 0x3a, 0xb9, 0x99, 0x32, 0xde, 0x1a, 0x09, 0xb0, 0x8f, 0x8c, 0x11, 0xd7, 0xd7, 0x28, - 0xc0, 0x7e, 0xb1, 0xb1, 0x17, 0x92, 0x11, 0x02, 0xb4, 0x02, 0x79, 0xfd, 0xa7, 0x63, 0x17, 0x53, - 0x37, 0x25, 0x46, 0xbd, 0x2d, 0x02, 0x5d, 0x1f, 0x38, 0x07, 0x21, 0x3d, 0x23, 0x24, 0x56, 0xad, - 0x0f, 0xac, 0x6e, 0xaf, 0x47, 0x9d, 0x8f, 0x68, 0xd5, 0x2d, 0x0a, 0x0e, 0xe9, 0x39, 0x19, 0x31, - 0x06, 0x16, 0x03, 0x37, 0xff, 0x3b, 0x0b, 0x15, 0xc1, 0x1a, 0xc9, 0xa6, 0x0d, 0x7d, 0xe4, 0x8f, - 0x5d, 0xc1, 0x05, 0x49, 0xec, 0x98, 0x39, 0x3c, 0xf0, 0x40, 0xd1, 0xd5, 0x91, 0x49, 0xbf, 0x3a, - 0xb2, 0xb1, 0xab, 0x23, 0x45, 0x77, 0x72, 0xa9, 0xba, 0xd3, 0x3a, 0x2f, 0xbd, 0x7c, 0xc2, 0x2a, - 0x29, 0xc3, 0x97, 0x48, 0xee, 0x09, 0x54, 0xa8, 0x4b, 0xe1, 0x9e, 0xbc, 0x90, 0xf0, 0xe4, 0x74, - 0x3a, 0xf7, 0xe4, 0x56, 0xf8, 0x3b, 0x55, 0xde, 0xc5, 0xcb, 0xe4, 0x5d, 0x9a, 0x48, 0xde, 0xe5, - 0x89, 0xe5, 0x0d, 0x57, 0x97, 0x77, 0xe5, 0xaa, 0xf2, 0xee, 0x01, 0x44, 0xee, 0x34, 0xe6, 0xc4, - 0xa4, 0x09, 0x9c, 0x58, 0x26, 0xdd, 0x89, 0xfd, 0xb3, 0x04, 0xb5, 0x98, 0xdb, 0xe5, 0x07, 0x24, - 0x4d, 0x74, 0x40, 0x99, 0x89, 0x0f, 0x28, 0x3b, 0xe9, 0x01, 0xad, 0x40, 0x51, 0x1f, 0x58, 0x9a, - 0xe3, 0x05, 0x57, 0xcf, 0xe5, 0x27, 0xe4, 0x79, 0x24, 0x35, 0x1b, 0xb9, 0x0e, 0xb9, 0x8f, 0xdd, - 0xe6, 0x7f, 0xe6, 0xa0, 0x14, 0xb0, 0x8a, 0xee, 0x01, 0xe8, 0x86, 0x81, 0x3d, 0x4f, 0x3b, 0xc1, - 0x3c, 0x0c, 0x5f, 0xcf, 0xfd, 0xec, 0xdd, 0x92, 0xa4, 0x96, 0x19, 0xfc, 0x25, 0x3e, 0x43, 0xb7, - 0xa1, 0xe0, 0x61, 0xc3, 0xc5, 0xec, 0x84, 0x02, 0x02, 0x0e, 0x43, 0x8f, 0xa0, 0xe6, 0x61, 0xcf, - 0xb3, 0x1c, 0x5b, 0xf3, 0x9d, 0x13, 0x6c, 0x33, 0x1f, 0xc7, 0x89, 0xaa, 0x1c, 0xd5, 0x27, 0x18, - 0xb4, 0x04, 0xd3, 0xba, 0xe7, 0x8d, 0x87, 0x58, 0x73, 0x9d, 0x01, 0xd6, 0x74, 0xd7, 0xa6, 0xa1, - 0x42, 0x40, 0x5c, 0x63, 0x48, 0xd5, 0x19, 0xe0, 0x96, 0x6b, 0xa3, 0x1e, 0x7c, 0x22, 0x52, 0xe3, - 0x37, 0x3e, 0x76, 0x6d, 0x7d, 0x40, 0xe2, 0xcb, 0x1a, 0x9d, 0x75, 0x9b, 0xcc, 0x7a, 0xfb, 0x6e, - 0x69, 0x2e, 0x9a, 0xa7, 0x70, 0xa2, 0x4e, 0x5b, 0x4d, 0x83, 0x9a, 0xc4, 0x80, 0x5d, 0x7c, 0x44, - 0xdc, 0x2b, 0x73, 0xda, 0x7c, 0x44, 0x74, 0x05, 0xdb, 0xe6, 0xc8, 0xb1, 0x6c, 0x9f, 0x5b, 0x6e, - 0x38, 0x26, 0x73, 0x0e, 0xc6, 0xc6, 0x09, 0xcf, 0xf2, 0xcb, 0x2a, 0x1f, 0xa1, 0x87, 0x20, 0x1f, - 0x3a, 0xae, 0x81, 0x35, 0xa2, 0x51, 0x9a, 0xe7, 0x9f, 0x0d, 0xd8, 0x7d, 0x5d, 0x52, 0xeb, 0x14, - 0xbe, 0xa7, 0xfb, 0xc7, 0x3d, 0x02, 0x45, 0x3f, 0x80, 0xd2, 0x10, 0xfb, 0x3a, 0xcd, 0x9a, 0x58, - 0xda, 0x7e, 0xe7, 0x9c, 0xda, 0x2c, 0xef, 0x70, 0x0a, 0xc5, 0xf6, 0xdd, 0x33, 0x35, 0x9c, 0x80, - 0x1a, 0x50, 0xf4, 0xf5, 0xa3, 0x23, 0xcb, 0x3e, 0xa2, 0x36, 0x59, 0x56, 0x83, 0x21, 0x7a, 0x0c, - 0xb3, 0x86, 0x63, 0xfb, 0xf4, 0xd6, 0xb0, 0xbc, 0x91, 0xe3, 0x59, 0xf4, 0xe2, 0x28, 0x53, 0x2a, - 0xc4, 0x51, 0xed, 0x08, 0x43, 0xb2, 0xbc, 0x91, 0xeb, 0xbc, 0x39, 0xe3, 0xc6, 0x18, 0x85, 0x2c, - 0x7b, 0x04, 0x1a, 0x64, 0x79, 0x94, 0x64, 0xe1, 0x07, 0x50, 0x8b, 0x71, 0x44, 0x92, 0xe6, 0x50, - 0x49, 0x54, 0xf2, 0x93, 0xf8, 0xc8, 0x53, 0x7d, 0x30, 0xc6, 0xfc, 0x9e, 0x64, 0x83, 0xe7, 0x99, - 0x67, 0x52, 0xf3, 0x35, 0x94, 0x43, 0x45, 0x47, 0xf7, 0xa1, 0x62, 0xb8, 0x98, 0x06, 0xf2, 0xfa, - 0xc0, 0x8b, 0x69, 0x99, 0x88, 0x10, 0xce, 0x39, 0x13, 0x3b, 0xe7, 0x90, 0xeb, 0xec, 0x7b, 0xb9, - 0x6e, 0xfe, 0x4c, 0x82, 0xe9, 0x84, 0xe1, 0xa0, 0x07, 0x50, 0xd5, 0x0d, 0xc3, 0x19, 0xdb, 0xbe, - 0x50, 0x52, 0x0a, 0x18, 0xe0, 0x18, 0x7a, 0x0b, 0x7f, 0x0e, 0xc1, 0x90, 0x9a, 0x83, 0xa8, 0xed, - 0xc0, 0x11, 0xc4, 0x1e, 0x3e, 0x87, 0x3a, 0x39, 0x5b, 0xdd, 0xb2, 0xb1, 0x2b, 0x06, 0x00, 0xb5, - 0x10, 0x4a, 0x56, 0x6b, 0xfe, 0x85, 0x04, 0x55, 0xd1, 0x1e, 0x3f, 0x86, 0xb1, 0x7d, 0x44, 0xf5, - 0x6d, 0xfe, 0x2e, 0x54, 0x84, 0x03, 0x4c, 0xa9, 0x89, 0x2c, 0x40, 0x69, 0xec, 0x11, 0xc3, 0x19, - 0x06, 0x12, 0x0e, 0xc7, 0xe8, 0x2e, 0x94, 0x46, 0xba, 0xe7, 0xbd, 0x76, 0x5c, 0x96, 0xbf, 0x06, - 0x8c, 0x86, 0xd0, 0xa6, 0x07, 0x33, 0xdb, 0x96, 0x77, 0x95, 0xd2, 0xde, 0x23, 0x28, 0xb3, 0x9a, - 0x22, 0x31, 0x71, 0xb6, 0xfb, 0xea, 0xdb, 0x77, 0x4b, 0x25, 0x06, 0xec, 0xb4, 0xd5, 0xe0, 0x17, - 0x35, 0x63, 0xdd, 0xf0, 0xad, 0x53, 0xcc, 0x23, 0x4f, 0x3e, 0x6a, 0xfe, 0x08, 0x90, 0xf8, 0x51, - 0x6f, 0xe4, 0xd8, 0x1e, 0x59, 0x38, 0x6f, 0xf9, 0x78, 0x78, 0xbe, 0x1c, 0xc0, 0xe8, 0x48, 0x92, - 0xad, 0x32, 0x8a, 0xe6, 0x3f, 0x48, 0x30, 0xbb, 0x3f, 0x32, 0x75, 0x1f, 0xc7, 0x19, 0x8f, 0xf1, - 0x26, 0x5d, 0xca, 0x1b, 0x3f, 0xc8, 0x4c, 0x74, 0x90, 0x51, 0xe9, 0x2b, 0x1b, 0x2b, 0x7d, 0xdd, - 0x87, 0x69, 0xdd, 0x34, 0x35, 0x96, 0x8c, 0x68, 0x34, 0xc8, 0xcd, 0xd1, 0x20, 0xb7, 0xa6, 0x9b, - 0x26, 0x8b, 0x87, 0xf7, 0xdd, 0x81, 0x47, 0x62, 0x49, 0x17, 0x0f, 0x9d, 0x53, 0x1c, 0x23, 0xcd, - 0x53, 0x52, 0x99, 0x61, 0x22, 0xea, 0xe6, 0x57, 0x30, 0xd3, 0xf3, 0x9d, 0xd1, 0x87, 0xf2, 0xdf, - 0xfc, 0xf3, 0x0a, 0x40, 0x74, 0x30, 0x57, 0xd9, 0xf9, 0x3d, 0x28, 0x52, 0xe9, 0x86, 0xe2, 0x83, - 0xb7, 0xef, 0x96, 0x0a, 0x04, 0xd4, 0x69, 0xab, 0xec, 0xaf, 0x19, 0x57, 0x81, 0x5a, 0x42, 0x05, - 0x9e, 0x43, 0x85, 0x55, 0x13, 0x59, 0xc2, 0xb2, 0x40, 0x63, 0x9b, 0x9b, 0x09, 0x79, 0xb1, 0xb2, - 0x19, 0xcd, 0x58, 0xc0, 0x0b, 0x7f, 0xa3, 0xef, 0x92, 0xec, 0x4f, 0xf7, 0xc7, 0x1e, 0x2f, 0xa8, - 0xdc, 0x48, 0x4e, 0xa3, 0x48, 0x95, 0x13, 0xa1, 0x4f, 0x01, 0x68, 0xb5, 0x0e, 0x9b, 0x9a, 0xee, - 0x53, 0x87, 0x98, 0x55, 0xcb, 0x1c, 0xd2, 0xf2, 0xd1, 0x4d, 0x6a, 0x51, 0x0c, 0x59, 0xa1, 0xc8, - 0x22, 0x1d, 0xb7, 0x68, 0xc5, 0x72, 0x4c, 0x55, 0x84, 0x22, 0x11, 0x9b, 0xc9, 0x21, 0x2d, 0x92, - 0x72, 0x15, 0xd8, 0x89, 0x34, 0x3e, 0xa5, 0xfe, 0xea, 0x96, 0x90, 0xe2, 0x24, 0x6b, 0xdd, 0xe4, - 0x8e, 0x66, 0xc4, 0xe8, 0x29, 0x31, 0x6d, 0x92, 0x2d, 0x34, 0x3e, 0x4b, 0x64, 0xa2, 0xca, 0x9b, - 0x91, 0xe3, 0xfa, 0x2a, 0x45, 0x0a, 0xf3, 0x18, 0x35, 0xda, 0x86, 0x3a, 0x3d, 0x4f, 0xc3, 0x19, - 0x52, 0x3f, 0x8f, 0x79, 0x50, 0x70, 0x2f, 0x9c, 0xaf, 0x3a, 0xce, 0x70, 0x23, 0xc0, 0x26, 0x3f, - 0x5f, 0x73, 0x45, 0x2c, 0xfa, 0x2e, 0xab, 0x93, 0xd7, 0x13, 0x35, 0xc4, 0x57, 0xf8, 0x20, 0x39, - 0x91, 0x96, 0xcb, 0x15, 0xa8, 0x08, 0xc5, 0x9a, 0xc6, 0x2c, 0x9d, 0xf6, 0x9d, 0xb4, 0x4a, 0x56, - 0x72, 0xba, 0x38, 0x0f, 0x75, 0x61, 0x9a, 0xd5, 0x8e, 0xa2, 0x4d, 0xb0, 0x74, 0xe3, 0xd7, 0xa2, - 0xda, 0x3e, 0xc1, 0x5f, 0xb8, 0x8b, 0xba, 0x1f, 0x43, 0xa3, 0x35, 0xc8, 0x53, 0x08, 0xcf, 0x47, - 0x6e, 0xc5, 0x97, 0x49, 0xce, 0x66, 0xb4, 0xe8, 0x39, 0xd4, 0xb9, 0x7d, 0xb9, 0xd8, 0x1b, 0x0f, - 0x7c, 0xaf, 0x31, 0x9d, 0xf0, 0x17, 0xcc, 0xca, 0xa8, 0xbf, 0xa8, 0x31, 0x52, 0x95, 0x51, 0xa2, - 0x27, 0x50, 0xa5, 0x79, 0x76, 0x30, 0x53, 0xa6, 0x33, 0x67, 0x62, 0xd5, 0x0a, 0x3a, 0xaf, 0x42, - 0xc8, 0x82, 0x59, 0x5f, 0x41, 0x90, 0xde, 0x85, 0x13, 0x67, 0x12, 0xf5, 0x37, 0x9e, 0xcb, 0x31, - 0x27, 0x55, 0xe7, 0xd4, 0xc1, 0xfc, 0x67, 0x50, 0x63, 0xa9, 0x40, 0x30, 0x7b, 0x2e, 0xc1, 0x30, - 0x4d, 0x06, 0xd8, 0xdc, 0x2a, 0xa5, 0x14, 0xf8, 0x1d, 0x1a, 0xfa, 0x28, 0x9c, 0x78, 0x3b, 0xc1, - 0x2f, 0x09, 0xa3, 0x19, 0xbf, 0x84, 0x2c, 0x98, 0x35, 0x07, 0x79, 0xec, 0xba, 0x8e, 0xcb, 0x43, - 0x0c, 0x36, 0x20, 0xf6, 0x40, 0x7f, 0xd0, 0x84, 0xa4, 0x31, 0xcf, 0x4a, 0x64, 0x14, 0x42, 0x52, - 0x0f, 0x12, 0xbf, 0x98, 0xd8, 0xd7, 0xad, 0x81, 0xd7, 0xb8, 0xc1, 0xe2, 0x17, 0x3e, 0x44, 0x5f, - 0xc0, 0x4c, 0x10, 0x7c, 0x6b, 0x03, 0xc7, 0x60, 0x69, 0xef, 0x27, 0x2c, 0x45, 0x0e, 0x10, 0xdb, - 0x1c, 0x8e, 0x96, 0x61, 0xf6, 0x40, 0x37, 0x4e, 0xc6, 0x23, 0x8d, 0x17, 0x3d, 0xb4, 0xb1, 0x87, - 0xcd, 0xc6, 0x4d, 0x56, 0x13, 0x66, 0x28, 0x1e, 0xa6, 0xef, 0x7b, 0xd8, 0x44, 0x77, 0xa0, 0xe2, - 0x62, 0xdf, 0x3d, 0xd3, 0xe8, 0xbd, 0xdd, 0xb8, 0x45, 0xd9, 0x02, 0x0a, 0xda, 0x20, 0x10, 0x62, - 0xa7, 0xbc, 0x5a, 0x54, 0x4c, 0xbc, 0x23, 0x45, 0x62, 0x26, 0x97, 0xc9, 0x7a, 0xa6, 0x21, 0x6d, - 0x49, 0x61, 0xcd, 0xe8, 0x0b, 0x5e, 0x8f, 0x4a, 0xe6, 0x47, 0x81, 0x84, 0x39, 0x39, 0xab, 0x48, - 0x7d, 0x29, 0x14, 0x98, 0xaa, 0xc9, 0x9a, 0x94, 0x20, 0x59, 0x3e, 0x29, 0x24, 0x5e, 0x2f, 0x43, - 0xd1, 0x65, 0xfa, 0x49, 0xd2, 0x1b, 0x26, 0xa5, 0xe6, 0xcf, 0x33, 0x00, 0x11, 0x6f, 0xe9, 0xaf, - 0x18, 0x82, 0x4f, 0xcb, 0x5c, 0xe6, 0xd3, 0xb2, 0x71, 0x9f, 0xb6, 0x00, 0xa5, 0x58, 0xe1, 0x21, - 0xab, 0x86, 0x63, 0xb4, 0x1a, 0x3a, 0x56, 0x96, 0xaa, 0x2e, 0xa4, 0x1c, 0xd4, 0x72, 0xc2, 0xbb, - 0x86, 0x9a, 0x52, 0x10, 0x35, 0xa5, 0x09, 0xb5, 0x81, 0xee, 0x11, 0x65, 0x27, 0x82, 0xd1, 0x59, - 0x06, 0x9a, 0x55, 0x2b, 0x04, 0xa8, 0x12, 0x58, 0xcb, 0x27, 0xea, 0x42, 0xd0, 0x16, 0xf6, 0xe8, - 0x11, 0xd7, 0xd4, 0x60, 0xd8, 0x5c, 0x86, 0x02, 0xfb, 0x0a, 0x02, 0x28, 0xb4, 0x36, 0xfa, 0x9d, - 0xaf, 0x15, 0x79, 0x0a, 0x55, 0xa1, 0xb4, 0xd9, 0xd9, 0xed, 0xf4, 0xb6, 0x94, 0xb6, 0x2c, 0x11, - 0xcc, 0x66, 0xab, 0xb3, 0xad, 0xb4, 0xe5, 0x4c, 0xf3, 0xe7, 0x12, 0x94, 0x02, 0xa9, 0x04, 0xc9, - 0xa0, 0x18, 0x78, 0x04, 0xe3, 0x8f, 0x74, 0x6c, 0x85, 0xc4, 0xb1, 0x21, 0xc8, 0x79, 0xd6, 0x4f, - 0x31, 0x3f, 0x4e, 0xfa, 0x9b, 0xd0, 0x87, 0x8a, 0xce, 0xa2, 0xb1, 0x70, 0xdc, 0xfc, 0xb7, 0x0c, - 0x54, 0x45, 0x9d, 0x38, 0x5f, 0x67, 0x92, 0x26, 0xae, 0x33, 0x95, 0x2e, 0xa8, 0x33, 0x89, 0xfc, - 0x66, 0x2e, 0xe0, 0x37, 0x2b, 0xf0, 0xfb, 0x05, 0xcc, 0x84, 0x0b, 0x87, 0x8c, 0xb3, 0x00, 0x53, - 0x0e, 0x10, 0xa1, 0x85, 0x3e, 0x81, 0xf9, 0x38, 0x2b, 0xe1, 0x0c, 0xe6, 0x2e, 0xe6, 0x44, 0x76, - 0xc2, 0x59, 0xf7, 0x48, 0xfe, 0xc8, 0x7c, 0x20, 0xb3, 0xd4, 0x3c, 0xfd, 0x7e, 0x95, 0x03, 0x99, - 0xad, 0xc6, 0x25, 0x54, 0xb8, 0x4c, 0x42, 0xc5, 0x98, 0x84, 0x9a, 0x7f, 0x2c, 0x01, 0x44, 0x5e, - 0x70, 0xf2, 0x42, 0xcd, 0x9d, 0xa8, 0xca, 0x42, 0x98, 0x92, 0xe8, 0xaa, 0x41, 0x41, 0xe5, 0x3c, - 0x4b, 0x57, 0x50, 0x9a, 0xe6, 0xbf, 0x48, 0x50, 0x0a, 0xfc, 0xeb, 0xb7, 0xa0, 0x97, 0xb9, 0x0b, - 0xe4, 0x9c, 0xbf, 0x40, 0x2f, 0x0b, 0x71, 0xbd, 0x24, 0x27, 0x11, 0x5c, 0xce, 0xe4, 0x24, 0xd8, - 0xf9, 0x02, 0xbf, 0x70, 0xc7, 0xb6, 0xdf, 0x7c, 0x9b, 0x81, 0x1b, 0xad, 0xb1, 0xef, 0x9c, 0xbb, - 0xed, 0x85, 0xf7, 0x71, 0x69, 0xa2, 0xf7, 0xf1, 0xa9, 0xd4, 0xf7, 0xf1, 0xcc, 0x7b, 0xde, 0xc7, - 0xa7, 0x84, 0xf7, 0xf1, 0x1f, 0xf2, 0x7b, 0x38, 0x78, 0x24, 0xcf, 0xd2, 0x7b, 0x6d, 0x21, 0xad, - 0xe4, 0xcd, 0xdf, 0xcb, 0xe9, 0x85, 0xdc, 0xe5, 0x6f, 0xe6, 0x4a, 0x74, 0x21, 0x07, 0x2b, 0xe4, - 0xe8, 0x0a, 0x97, 0xbe, 0x0b, 0x84, 0xf7, 0x32, 0x5f, 0x86, 0x78, 0x6f, 0xde, 0xe9, 0xd0, 0xfc, - 0x93, 0x0c, 0x4c, 0x93, 0xc3, 0x11, 0x02, 0x8f, 0x2b, 0x17, 0xa6, 0xf2, 0x97, 0xd5, 0xe9, 0x32, - 0x13, 0x95, 0xa1, 0xb2, 0x13, 0x97, 0xa1, 0x72, 0x57, 0xaf, 0xd3, 0x15, 0xae, 0x5a, 0xa7, 0xfb, - 0xbb, 0x1c, 0xcc, 0xa6, 0x44, 0xb5, 0x24, 0xd7, 0x60, 0x51, 0x6d, 0x22, 0xd7, 0x60, 0x40, 0x92, - 0x6b, 0xf0, 0x5f, 0x26, 0xc9, 0x9d, 0xd8, 0x63, 0xbb, 0x73, 0x78, 0xe8, 0x61, 0x5f, 0x1b, 0x7a, - 0xdc, 0x40, 0x6a, 0x14, 0xdc, 0xa5, 0xd0, 0x1d, 0x8f, 0x5c, 0x39, 0xd8, 0x36, 0x05, 0x2a, 0x66, - 0x29, 0x15, 0x6c, 0x9b, 0x21, 0x8d, 0xd8, 0x53, 0x92, 0xbb, 0x72, 0x4f, 0x49, 0x7e, 0xe2, 0x9e, - 0x92, 0xc2, 0xd5, 0x7a, 0x4a, 0x8a, 0xd7, 0xe8, 0x29, 0x29, 0x7d, 0x58, 0x4f, 0x49, 0x79, 0xf2, - 0x9e, 0x12, 0xb8, 0x7a, 0x4f, 0x49, 0xe5, 0x5a, 0x3d, 0x25, 0xff, 0x5e, 0x80, 0x85, 0x8b, 0x53, - 0x99, 0xcb, 0x4b, 0x0b, 0x51, 0x06, 0x9e, 0xb9, 0xa4, 0xf9, 0x24, 0x9b, 0x6c, 0xfb, 0xf8, 0x12, - 0xd8, 0x6b, 0xab, 0x36, 0xb4, 0xde, 0x58, 0xf6, 0x51, 0x63, 0x9a, 0x4a, 0x24, 0xd1, 0x1c, 0xb1, - 0x43, 0x71, 0x2a, 0x7b, 0x07, 0x66, 0x83, 0x44, 0xbf, 0x48, 0x6e, 0x82, 0xae, 0x95, 0x7c, 0x4a, - 0xd7, 0x0a, 0x7a, 0xc2, 0x63, 0x4d, 0xa6, 0x38, 0x97, 0x78, 0x31, 0x1a, 0x3f, 0x06, 0xcf, 0xa0, - 0x6b, 0x89, 0xc0, 0x36, 0xfd, 0x19, 0x94, 0x4f, 0x09, 0xc2, 0xda, 0xaf, 0x84, 0x48, 0x15, 0xde, - 0xff, 0x14, 0xca, 0x67, 0x47, 0xcf, 0xa1, 0x91, 0xda, 0x96, 0xae, 0xa1, 0xb6, 0xe5, 0x2b, 0xa8, - 0x6d, 0xd2, 0xd5, 0x57, 0xae, 0xe6, 0xea, 0x7f, 0x23, 0xcc, 0xf6, 0x82, 0x05, 0xaa, 0xc9, 0xd4, - 0x4b, 0x38, 0xad, 0x20, 0xdf, 0xbb, 0xe4, 0xa2, 0xa8, 0x5d, 0xfd, 0xa2, 0x40, 0xdf, 0x0f, 0x12, - 0xb8, 0x60, 0x91, 0x3a, 0x5d, 0x24, 0xf5, 0x2d, 0x99, 0x67, 0x70, 0xc1, 0x54, 0xd1, 0xb0, 0xe4, - 0xc9, 0x0d, 0x8b, 0x7d, 0x48, 0xbc, 0xa1, 0xfe, 0x37, 0x0f, 0x72, 0x32, 0xbf, 0xff, 0x96, 0x3a, - 0xa4, 0xaa, 0xe9, 0x1d, 0x52, 0xa1, 0xde, 0xe7, 0x3e, 0x50, 0xef, 0xf3, 0x1f, 0xa6, 0xf7, 0x85, - 0x6b, 0xe9, 0xfd, 0xb7, 0xe5, 0xae, 0x93, 0x7a, 0x5f, 0xbe, 0xae, 0xde, 0xc3, 0xf5, 0xf4, 0xbe, - 0xf2, 0x31, 0xf4, 0xbe, 0xf6, 0x41, 0x7a, 0x5f, 0xbf, 0x8e, 0xde, 0xff, 0x4d, 0x0e, 0x1a, 0x17, - 0x15, 0xa8, 0x2e, 0xbf, 0x4d, 0xc4, 0xd6, 0xb5, 0x4c, 0xa2, 0x75, 0xed, 0x3b, 0x50, 0x8d, 0xf5, - 0xac, 0x31, 0x4b, 0xa8, 0x78, 0x51, 0xb7, 0x9a, 0xa0, 0x32, 0xb9, 0x6b, 0x44, 0xc5, 0xf9, 0x6b, - 0x44, 0xc5, 0x85, 0xeb, 0xaa, 0x4c, 0xf1, 0x7a, 0x2a, 0x53, 0xfa, 0x18, 0x2a, 0x53, 0xfe, 0x20, - 0x95, 0x81, 0x09, 0x55, 0x46, 0x50, 0x94, 0x3f, 0x2a, 0xc0, 0xad, 0x4b, 0xca, 0x8f, 0x97, 0xeb, - 0xca, 0x53, 0x60, 0x9d, 0x58, 0x51, 0x73, 0x67, 0x26, 0x6a, 0xee, 0xa4, 0x18, 0xde, 0xdc, 0xa9, - 0x8a, 0x23, 0x93, 0xcc, 0x4b, 0x34, 0x85, 0x66, 0xd3, 0x9b, 0x42, 0x13, 0x2d, 0xa1, 0xbf, 0x24, - 0xd7, 0x59, 0xba, 0x96, 0xeb, 0x2c, 0x5c, 0xc3, 0x75, 0x16, 0x7f, 0x15, 0x32, 0x7c, 0x88, 0x1d, - 0x4c, 0x5f, 0xc7, 0x75, 0xfe, 0x42, 0x02, 0x74, 0xbe, 0x92, 0x7e, 0xb9, 0x21, 0xdc, 0x17, 0xfa, - 0x43, 0x33, 0xe7, 0xfa, 0x43, 0xa3, 0xee, 0xd0, 0xc7, 0x5c, 0x81, 0xb3, 0x89, 0x27, 0x88, 0xb6, - 0xe5, 0x62, 0xc3, 0x4f, 0xe9, 0xfa, 0xfb, 0x1c, 0x6a, 0xaf, 0xf1, 0x81, 0xe7, 0x18, 0x27, 0xd8, - 0x8f, 0x1a, 0xc0, 0xb7, 0xa6, 0xd4, 0x6a, 0x08, 0x26, 0xb1, 0xb4, 0xb8, 0xf9, 0xfc, 0x55, 0x37, - 0xdf, 0xfc, 0xd3, 0x0c, 0xc8, 0x49, 0x0e, 0x7e, 0x95, 0xc7, 0xff, 0x53, 0x06, 0x66, 0xce, 0xd9, - 0xcc, 0xb7, 0xd5, 0x73, 0x58, 0xb8, 0xec, 0x34, 0xb3, 0x13, 0x9d, 0x66, 0x6e, 0xe2, 0xd3, 0xcc, - 0x5f, 0xfd, 0x34, 0x8b, 0x57, 0x3d, 0xcd, 0x6f, 0x82, 0xa7, 0xe7, 0x6d, 0x9a, 0x9c, 0x7e, 0xc0, - 0xd3, 0xf3, 0x05, 0x69, 0x6e, 0xf3, 0xcf, 0xc2, 0x57, 0xed, 0x1e, 0x7f, 0xb5, 0xba, 0xf2, 0xd2, - 0xfc, 0xad, 0x9a, 0xb1, 0xaa, 0x09, 0x0d, 0x99, 0x35, 0xdd, 0x34, 0x99, 0xe0, 0x13, 0x6f, 0xd5, - 0x22, 0x69, 0x56, 0x7c, 0xab, 0x8e, 0xa8, 0x9b, 0xdf, 0x87, 0x7a, 0xfc, 0xb1, 0x05, 0x3d, 0x80, - 0x9c, 0x65, 0x1f, 0x3a, 0xe7, 0x9e, 0xea, 0x85, 0xa7, 0x37, 0x4a, 0xb0, 0xf8, 0x0a, 0xaa, 0x62, - 0x97, 0x3b, 0x9a, 0x07, 0xd4, 0xda, 0x6f, 0x77, 0xba, 0xda, 0xc6, 0x56, 0x6b, 0x77, 0x57, 0xd9, - 0xd6, 0xd6, 0xbb, 0xfd, 0x2d, 0x79, 0xea, 0x3c, 0x7c, 0x5b, 0xd9, 0xec, 0xcb, 0x12, 0xfa, 0x04, - 0x66, 0xe3, 0x70, 0xb5, 0xf3, 0x62, 0xab, 0x2f, 0x67, 0x16, 0xff, 0x55, 0x82, 0x1b, 0xa9, 0x17, - 0x10, 0x92, 0xa1, 0xba, 0xb5, 0xfa, 0xf4, 0x89, 0xf6, 0xe5, 0xea, 0xca, 0x9e, 0xb6, 0xb6, 0x22, - 0x4f, 0xc5, 0x21, 0x4f, 0x57, 0x64, 0x09, 0xcd, 0x40, 0x8d, 0x42, 0x7e, 0x7d, 0xe5, 0x19, 0x23, - 0xca, 0x24, 0x40, 0x4f, 0x57, 0xe4, 0x2c, 0xba, 0x09, 0x37, 0xf6, 0xba, 0x6a, 0x5f, 0x6d, 0x75, - 0xfa, 0x5a, 0x6c, 0xc9, 0xdc, 0x05, 0xa8, 0xa7, 0x2b, 0x72, 0x1e, 0x2d, 0xc0, 0x7c, 0x1c, 0x15, - 0x7e, 0xa4, 0x70, 0x11, 0xee, 0xe9, 0x8a, 0x5c, 0x5c, 0x5c, 0xe7, 0x9d, 0xf1, 0x91, 0xd9, 0xa1, - 0x39, 0x90, 0xdb, 0xca, 0x66, 0x6b, 0x7f, 0xbb, 0xaf, 0x6d, 0x76, 0xb6, 0x95, 0xfe, 0x6f, 0xef, - 0x29, 0xf2, 0x14, 0x2a, 0x42, 0x76, 0x67, 0xef, 0x89, 0x2c, 0x91, 0x1f, 0xdd, 0x17, 0x2f, 0xe4, - 0x0c, 0x83, 0xac, 0xc9, 0xd9, 0xc5, 0xad, 0x40, 0x52, 0x41, 0xe7, 0xac, 0xb8, 0xc4, 0x9e, 0xda, - 0xed, 0x77, 0x37, 0xba, 0xdb, 0xf2, 0x14, 0x2a, 0x41, 0x4e, 0xed, 0xef, 0xec, 0xb1, 0x35, 0x7a, - 0x6a, 0x5f, 0xce, 0xa0, 0x1a, 0x94, 0x5f, 0x29, 0xeb, 0xbd, 0xee, 0xc6, 0x4b, 0xa5, 0x2f, 0x67, - 0x17, 0x77, 0xe1, 0x46, 0x6a, 0x2b, 0x2e, 0xba, 0x07, 0x77, 0x82, 0x05, 0x7b, 0xca, 0x8b, 0x1d, - 0x65, 0xb7, 0xaf, 0xb4, 0x29, 0x77, 0xe2, 0xfa, 0xe4, 0xc4, 0xb7, 0x7b, 0x11, 0x44, 0x5a, 0x7c, - 0x9c, 0x68, 0x05, 0xe6, 0x6d, 0x92, 0x65, 0xc8, 0x77, 0x76, 0xdb, 0xca, 0x37, 0xf2, 0x14, 0x61, - 0xa0, 0xdf, 0xd9, 0x51, 0x7a, 0xfd, 0x16, 0x61, 0x6c, 0xf1, 0x10, 0xa6, 0x13, 0x3d, 0x96, 0x44, - 0x49, 0x3a, 0x3b, 0xad, 0x17, 0x8a, 0xd6, 0xdb, 0xdf, 0xdc, 0xec, 0x7c, 0xa3, 0x05, 0x33, 0x17, - 0x60, 0x3e, 0x06, 0x17, 0x96, 0x41, 0x77, 0xe0, 0x56, 0x0c, 0xb7, 0xdb, 0xdd, 0x55, 0xb4, 0xee, - 0xd7, 0x8a, 0xfa, 0x4a, 0xed, 0xf4, 0x15, 0x39, 0xb3, 0xf8, 0x63, 0x90, 0x93, 0x0d, 0x0b, 0x64, - 0x41, 0xe5, 0x85, 0xaa, 0xf4, 0x7a, 0x5a, 0xaf, 0xbb, 0xaf, 0x6e, 0x28, 0x1a, 0x39, 0x79, 0xed, - 0x95, 0xb2, 0xce, 0x3e, 0x96, 0x82, 0xeb, 0xb5, 0x5f, 0xca, 0xd2, 0xe2, 0x5f, 0x4a, 0x50, 0x15, - 0xdb, 0x18, 0xd0, 0x2c, 0x4c, 0x07, 0xc4, 0xfd, 0x96, 0xda, 0xef, 0xec, 0xbe, 0x90, 0xa7, 0x88, - 0xa6, 0x71, 0x20, 0x7f, 0x1e, 0x93, 0x04, 0x90, 0xb2, 0xdb, 0x26, 0x54, 0x19, 0x61, 0xea, 0x46, - 0x77, 0x67, 0x6f, 0x5b, 0xe9, 0x2b, 0x72, 0x56, 0xa0, 0xe3, 0xef, 0x67, 0x39, 0x84, 0xa0, 0x1e, - 0xac, 0xb6, 0xde, 0x55, 0xfb, 0x4a, 0x5b, 0xce, 0xa3, 0x06, 0xcc, 0x71, 0xd8, 0x76, 0x67, 0xa7, - 0xd3, 0xd7, 0x54, 0xa5, 0xb5, 0xb1, 0xa5, 0xb4, 0xe5, 0xc2, 0xe2, 0x3e, 0xff, 0x1f, 0x1c, 0x5e, - 0x01, 0x43, 0x50, 0x0f, 0x84, 0xb9, 0xd3, 0xf9, 0x86, 0xb1, 0x37, 0x0f, 0xa8, 0xbd, 0xdf, 0xda, - 0x0e, 0x2d, 0xae, 0xf5, 0x42, 0xd9, 0x25, 0xa6, 0xb8, 0x00, 0xf3, 0x71, 0xf8, 0x76, 0x5f, 0x51, - 0x77, 0x5b, 0xe4, 0x10, 0x57, 0xff, 0xaa, 0x00, 0x05, 0x5e, 0x36, 0xff, 0x11, 0x54, 0x84, 0x0e, - 0x0a, 0x74, 0x59, 0x5f, 0xc5, 0x42, 0x5a, 0x8f, 0x0f, 0x6a, 0x41, 0x55, 0xec, 0xed, 0x41, 0x51, - 0xe0, 0x95, 0xd2, 0xf2, 0x93, 0xbe, 0x84, 0x02, 0x10, 0x35, 0x18, 0xa1, 0x28, 0x72, 0x3c, 0xd7, - 0xea, 0xb4, 0x70, 0x2b, 0x15, 0xc7, 0x3b, 0x92, 0x7e, 0x08, 0x10, 0xf5, 0xe8, 0x20, 0xf1, 0x41, - 0x35, 0xd1, 0xb8, 0x93, 0xce, 0x45, 0x1f, 0x1a, 0x74, 0xcf, 0x29, 0xe5, 0x50, 0x34, 0x49, 0xdf, - 0x47, 0xfa, 0xaa, 0xbf, 0x49, 0x4c, 0x5c, 0x77, 0xfd, 0xb0, 0x18, 0x84, 0x2e, 0x6e, 0x00, 0x49, - 0x5f, 0x61, 0x0f, 0xe6, 0xe9, 0x0a, 0xe7, 0x5f, 0x82, 0xde, 0xdf, 0x13, 0x92, 0xbe, 0xe2, 0xd7, - 0x70, 0x93, 0xae, 0x98, 0x96, 0x7f, 0xa1, 0x89, 0xba, 0x43, 0xd2, 0xd7, 0x6d, 0x83, 0x1c, 0xad, - 0x7b, 0x4e, 0xa1, 0xce, 0xc7, 0xb6, 0xef, 0x51, 0x28, 0x76, 0x63, 0x9f, 0x53, 0xa8, 0xd8, 0x45, - 0xfe, 0x9e, 0x25, 0x98, 0x77, 0x3d, 0xb7, 0x44, 0xec, 0xc2, 0x4e, 0x5d, 0x62, 0x7d, 0xf3, 0x77, - 0xee, 0x1d, 0x59, 0xfe, 0xf1, 0xf8, 0x60, 0xd9, 0x70, 0x86, 0x8f, 0x39, 0xc1, 0xe3, 0xe0, 0xff, - 0x1a, 0x02, 0xc0, 0xdf, 0x66, 0x6a, 0xdb, 0xd6, 0x29, 0x7e, 0xc9, 0xfa, 0x26, 0x7d, 0xe7, 0xbf, - 0x32, 0x75, 0x3e, 0x7e, 0xfe, 0x9c, 0x02, 0x0e, 0x0a, 0x74, 0xca, 0xda, 0xff, 0x05, 0x00, 0x00, - 0xff, 0xff, 0x93, 0x5f, 0xa9, 0x80, 0xe2, 0x3b, 0x00, 0x00, + 0xa7, 0xeb, 0x16, 0xe8, 0xba, 0x55, 0x0a, 0x5c, 0x67, 0x30, 0xf4, 0x00, 0xa6, 0x19, 0xd1, 0xa1, + 0x4b, 0x2e, 0x46, 0xdb, 0x38, 0x6b, 0x14, 0x29, 0x59, 0x9d, 0x82, 0x37, 0x03, 0x28, 0xe1, 0x81, + 0xf9, 0x0f, 0xc6, 0x43, 0x29, 0xc1, 0x03, 0x35, 0x37, 0xce, 0xc3, 0x69, 0xf8, 0x9b, 0xf0, 0xc0, + 0x66, 0x05, 0x3c, 0x94, 0x19, 0x0f, 0x14, 0x18, 0xf0, 0xb0, 0x04, 0xe8, 0x04, 0x9f, 0x69, 0x74, + 0xbf, 0x9a, 0x65, 0xfb, 0xd8, 0x3d, 0xd5, 0x07, 0x0d, 0xb8, 0x2b, 0x3d, 0x94, 0x54, 0xf9, 0x04, + 0x9f, 0x6d, 0x12, 0x44, 0x87, 0xc3, 0xd1, 0x83, 0x60, 0x5b, 0x3f, 0x19, 0xeb, 0x03, 0x22, 0xd1, + 0x0a, 0x59, 0x72, 0x3d, 0xd3, 0x90, 0xf8, 0xd6, 0x7e, 0x8b, 0xc1, 0x09, 0x21, 0xfb, 0x76, 0x40, + 0x58, 0x8d, 0x08, 0x29, 0x82, 0x13, 0x36, 0xff, 0x3e, 0x03, 0x05, 0x76, 0xaf, 0xa1, 0x47, 0x90, + 0x3b, 0xb4, 0x06, 0x2c, 0x20, 0x10, 0x4d, 0x7a, 0xd3, 0x1a, 0x60, 0x46, 0xb2, 0x35, 0xa5, 0x52, + 0x12, 0xf4, 0x18, 0x0a, 0x9e, 0xef, 0x62, 0x7d, 0xc8, 0x7d, 0xe1, 0x0d, 0xe1, 0xe2, 0x23, 0xe0, + 0x90, 0x9c, 0x93, 0xa1, 0xe7, 0x50, 0xf2, 0xf0, 0xd1, 0x10, 0xdb, 0xbe, 0xc7, 0x1d, 0xe0, 0xed, + 0x68, 0x0a, 0x43, 0x60, 0x33, 0xf6, 0xa1, 0x90, 0x1e, 0x2d, 0x43, 0xc1, 0x1a, 0xea, 0x47, 0xd8, + 0x3b, 0x17, 0x32, 0x74, 0x08, 0x38, 0xfa, 0x16, 0xa3, 0x22, 0xfb, 0x18, 0x1a, 0xfa, 0x88, 0xaa, + 0x8a, 0xb8, 0x8f, 0x1d, 0x43, 0x1f, 0x45, 0xfb, 0x20, 0x24, 0xe2, 0x0d, 0x5e, 0x98, 0xe8, 0x06, + 0x27, 0xb7, 0xb1, 0x41, 0x41, 0xcd, 0x3f, 0x90, 0x00, 0x22, 0x8e, 0xd1, 0xf7, 0xa0, 0x4c, 0x8e, + 0x46, 0xf3, 0xcf, 0x46, 0xec, 0x08, 0xeb, 0xc9, 0x80, 0x83, 0x6d, 0xb0, 0x7f, 0x36, 0xc2, 0x6a, + 0xe9, 0x90, 0xff, 0x22, 0x4e, 0x9a, 0xfc, 0x1e, 0xe9, 0xfe, 0x31, 0x33, 0x4f, 0x35, 0x1c, 0xa3, + 0x47, 0x20, 0x9b, 0x96, 0xa7, 0x1f, 0x0c, 0xb0, 0x36, 0xd4, 0x6d, 0xeb, 0x10, 0x7b, 0x3e, 0xbf, + 0x19, 0xa7, 0x39, 0x7c, 0x87, 0x83, 0x9b, 0xaf, 0xa0, 0x2a, 0x9e, 0x3c, 0x5a, 0x83, 0x12, 0x8d, + 0x00, 0x0d, 0x67, 0xc0, 0x99, 0xf9, 0x24, 0x21, 0xa2, 0x3d, 0x8e, 0x56, 0x43, 0x42, 0x84, 0x20, + 0x37, 0x76, 0x07, 0x5e, 0x23, 0x73, 0x37, 0xfb, 0xb0, 0xac, 0xd2, 0xdf, 0xcd, 0xbf, 0xce, 0xc1, + 0x6c, 0x8a, 0x80, 0x88, 0x40, 0x13, 0x1f, 0xf8, 0x2c, 0x5d, 0xa0, 0x29, 0xdf, 0x79, 0x00, 0xd3, + 0x64, 0x8f, 0x24, 0xfa, 0xd4, 0xc8, 0x55, 0x63, 0xbd, 0xe1, 0x5b, 0xaf, 0x07, 0xe0, 0x3d, 0x0a, + 0x25, 0x16, 0x34, 0x1a, 0xe8, 0x67, 0x03, 0xcb, 0xf3, 0x59, 0xac, 0x4a, 0x5d, 0x93, 0x5a, 0x0d, + 0x80, 0x34, 0x5e, 0x5d, 0x02, 0x44, 0x3e, 0xac, 0xc5, 0x29, 0x2b, 0x94, 0x52, 0x26, 0x98, 0x3d, + 0x91, 0xfa, 0x11, 0xc8, 0x5c, 0xb1, 0x34, 0x73, 0xec, 0xea, 0xc4, 0x8b, 0x51, 0xb5, 0xaa, 0xa9, + 0xd3, 0x1c, 0xde, 0xe6, 0x60, 0xa4, 0x08, 0x6c, 0x7a, 0xe3, 0x43, 0xc2, 0x26, 0xd0, 0x9d, 0x5e, + 0xa0, 0xba, 0x3d, 0x4a, 0x13, 0x6d, 0x82, 0x8d, 0x53, 0xa5, 0x58, 0x4a, 0x95, 0x22, 0xba, 0x07, + 0x19, 0x6f, 0x8d, 0xeb, 0xed, 0x4c, 0xf4, 0x91, 0xb5, 0xfd, 0xd1, 0xc0, 0xd1, 0xc9, 0x0d, 0x95, + 0xf1, 0xd6, 0x48, 0xa0, 0x7d, 0x64, 0x8c, 0xb8, 0xbe, 0x46, 0x81, 0xf6, 0x8b, 0x8d, 0xbd, 0x90, + 0x8c, 0x10, 0xa0, 0x15, 0xc8, 0xeb, 0x3f, 0x1d, 0xbb, 0x98, 0xfa, 0x34, 0x31, 0xfa, 0x6d, 0x11, + 0xe8, 0xfa, 0xc0, 0x39, 0x08, 0xe9, 0x19, 0x21, 0xb1, 0x6a, 0x7d, 0x60, 0x75, 0x7b, 0x3d, 0xea, + 0xa9, 0x44, 0xab, 0x6e, 0x51, 0x70, 0x48, 0xcf, 0xc9, 0x88, 0x31, 0xb0, 0x58, 0xb8, 0xf9, 0xdf, + 0x59, 0xa8, 0x08, 0xd6, 0x48, 0x36, 0x6d, 0xe8, 0x23, 0x7f, 0xec, 0x0a, 0x4e, 0x4d, 0x62, 0xc7, + 0xcc, 0xe1, 0xa1, 0x4f, 0x0b, 0xaf, 0x90, 0x4c, 0xfa, 0x15, 0x92, 0x8d, 0x5d, 0x21, 0x29, 0xba, + 0x93, 0x4b, 0xd5, 0x9d, 0xd6, 0x79, 0xe9, 0xe5, 0x13, 0x56, 0x49, 0x19, 0xbe, 0x44, 0x72, 0x4f, + 0xa0, 0x42, 0x5d, 0x0a, 0x77, 0xfb, 0x85, 0x84, 0xdb, 0xa7, 0xd3, 0xb9, 0xdb, 0xb7, 0xc2, 0xdf, + 0xa9, 0xf2, 0x2e, 0x5e, 0x26, 0xef, 0xd2, 0x44, 0xf2, 0x2e, 0x4f, 0x2c, 0x6f, 0xb8, 0xba, 0xbc, + 0x2b, 0x57, 0x95, 0x77, 0x0f, 0x20, 0x72, 0xa7, 0x31, 0x27, 0x26, 0x4d, 0xe0, 0xc4, 0x32, 0xe9, + 0x4e, 0xec, 0x9f, 0x24, 0xa8, 0xc5, 0xdc, 0x2e, 0x3f, 0x20, 0x69, 0xa2, 0x03, 0xca, 0x4c, 0x7c, + 0x40, 0xd9, 0x49, 0x0f, 0x68, 0x05, 0x8a, 0xfa, 0xc0, 0xd2, 0x1c, 0x2f, 0xb8, 0x7a, 0x2e, 0x3f, + 0x21, 0xcf, 0x23, 0x29, 0xda, 0xc8, 0x75, 0xc8, 0x0d, 0xeb, 0x36, 0xff, 0x33, 0x07, 0xa5, 0x80, + 0x55, 0x74, 0x0f, 0x40, 0x37, 0x0c, 0xec, 0x79, 0xda, 0x09, 0xe6, 0xe1, 0xf8, 0x7a, 0xee, 0x67, + 0xef, 0x96, 0x24, 0xb5, 0xcc, 0xe0, 0x2f, 0xf1, 0x19, 0xba, 0x0d, 0x05, 0x0f, 0x1b, 0x2e, 0x66, + 0x27, 0x14, 0x10, 0x70, 0x18, 0x7a, 0x04, 0x35, 0x0f, 0x7b, 0x9e, 0xe5, 0xd8, 0x9a, 0xef, 0x9c, + 0x60, 0x9b, 0xf9, 0x38, 0x4e, 0x54, 0xe5, 0xa8, 0x3e, 0xc1, 0xa0, 0x25, 0x98, 0xd6, 0x3d, 0x6f, + 0x3c, 0xc4, 0x9a, 0xeb, 0x0c, 0xb0, 0xa6, 0xbb, 0x36, 0x0d, 0x00, 0x02, 0xe2, 0x1a, 0x43, 0xaa, + 0xce, 0x00, 0xb7, 0x5c, 0x1b, 0xf5, 0xe0, 0x13, 0x91, 0x1a, 0xbf, 0xf1, 0xb1, 0x6b, 0xeb, 0x03, + 0x12, 0x67, 0xd6, 0xe8, 0xac, 0xdb, 0x64, 0xd6, 0xdb, 0x77, 0x4b, 0x73, 0xd1, 0x3c, 0x85, 0x13, + 0x75, 0xda, 0x6a, 0x1a, 0xd4, 0x24, 0x06, 0xec, 0xe2, 0x23, 0xe2, 0x5e, 0x99, 0xd3, 0xe6, 0x23, + 0xa2, 0x2b, 0xd8, 0x36, 0x47, 0x8e, 0x65, 0xfb, 0xdc, 0x72, 0xc3, 0x31, 0x99, 0x73, 0x30, 0x36, + 0x4e, 0x78, 0xb6, 0x5f, 0x56, 0xf9, 0x08, 0x3d, 0x04, 0xf9, 0xd0, 0x71, 0x0d, 0xac, 0x11, 0x8d, + 0xd2, 0x3c, 0xff, 0x6c, 0xc0, 0xee, 0xeb, 0x92, 0x5a, 0xa7, 0xf0, 0x3d, 0xdd, 0x3f, 0xee, 0x11, + 0x28, 0xfa, 0x01, 0x94, 0x86, 0xd8, 0xd7, 0x69, 0xf6, 0xc4, 0xd2, 0xf7, 0x3b, 0xe7, 0xd4, 0x66, + 0x79, 0x87, 0x53, 0x28, 0xb6, 0xef, 0x9e, 0xa9, 0xe1, 0x04, 0xd4, 0x80, 0xa2, 0xaf, 0x1f, 0x1d, + 0x59, 0xf6, 0x11, 0xb5, 0xc9, 0xb2, 0x1a, 0x0c, 0xd1, 0x63, 0x98, 0x35, 0x1c, 0xdb, 0xa7, 0xb7, + 0x86, 0xe5, 0x8d, 0x1c, 0xcf, 0xa2, 0x17, 0x47, 0x99, 0x52, 0x21, 0x8e, 0x6a, 0x47, 0x18, 0x92, + 0xed, 0x8d, 0x5c, 0xe7, 0xcd, 0x19, 0x37, 0xc6, 0x28, 0x64, 0xd9, 0x23, 0xd0, 0x20, 0xdb, 0xa3, + 0x24, 0x0b, 0x3f, 0x80, 0x5a, 0x8c, 0x23, 0x92, 0x3c, 0x87, 0x4a, 0xa2, 0x92, 0x9f, 0xc4, 0x47, + 0x9e, 0xea, 0x83, 0x31, 0xe6, 0xf7, 0x24, 0x1b, 0x3c, 0xcf, 0x3c, 0x93, 0x9a, 0xaf, 0xa1, 0x1c, + 0x2a, 0x3a, 0xba, 0x0f, 0x15, 0xc3, 0xc5, 0x34, 0xa0, 0xd7, 0x07, 0x5e, 0x4c, 0xcb, 0x44, 0x84, + 0x70, 0xce, 0x99, 0xd8, 0x39, 0x87, 0x5c, 0x67, 0xdf, 0xcb, 0x75, 0xf3, 0x67, 0x12, 0x4c, 0x27, + 0x0c, 0x07, 0x3d, 0x80, 0xaa, 0x6e, 0x18, 0xce, 0xd8, 0xf6, 0x85, 0xd2, 0x52, 0xc0, 0x00, 0xc7, + 0xd0, 0x5b, 0xf8, 0x73, 0x08, 0x86, 0xd4, 0x1c, 0x44, 0x6d, 0x07, 0x8e, 0x20, 0xf6, 0xf0, 0x39, + 0xd4, 0xc9, 0xd9, 0xea, 0x96, 0x8d, 0x5d, 0x31, 0x00, 0xa8, 0x85, 0x50, 0xb2, 0x5a, 0xf3, 0x2f, + 0x24, 0xa8, 0x8a, 0xf6, 0xf8, 0x31, 0x8c, 0xed, 0x23, 0xaa, 0x6f, 0xf3, 0x77, 0xa1, 0x22, 0x1c, + 0x60, 0x4a, 0x6d, 0x64, 0x01, 0x4a, 0x63, 0x8f, 0x18, 0xce, 0x30, 0x90, 0x70, 0x38, 0x46, 0x77, + 0xa1, 0x34, 0xd2, 0x3d, 0xef, 0xb5, 0xe3, 0xb2, 0x3c, 0x36, 0x60, 0x34, 0x84, 0x36, 0x3d, 0x98, + 0xd9, 0xb6, 0xbc, 0xab, 0x94, 0xf8, 0x1e, 0x41, 0x99, 0xd5, 0x16, 0x89, 0x89, 0xb3, 0xdd, 0x57, + 0xdf, 0xbe, 0x5b, 0x2a, 0x31, 0x60, 0xa7, 0xad, 0x06, 0xbf, 0xa8, 0x19, 0xeb, 0x86, 0x6f, 0x9d, + 0x62, 0x1e, 0x79, 0xf2, 0x51, 0xf3, 0x47, 0x80, 0xc4, 0x8f, 0x7a, 0x23, 0xc7, 0xf6, 0xc8, 0xc2, + 0x79, 0xcb, 0xc7, 0xc3, 0xf3, 0x65, 0x01, 0x46, 0x47, 0x92, 0x6d, 0x95, 0x51, 0x34, 0xff, 0x41, + 0x82, 0xd9, 0xfd, 0x91, 0xa9, 0xfb, 0x38, 0xce, 0x78, 0x8c, 0x37, 0xe9, 0x52, 0xde, 0xf8, 0x41, + 0x66, 0xa2, 0x83, 0x8c, 0x4a, 0x60, 0xd9, 0x58, 0x09, 0xec, 0x3e, 0x4c, 0xeb, 0xa6, 0xa9, 0xb1, + 0x64, 0x44, 0xa3, 0x41, 0x6e, 0x8e, 0x06, 0xb9, 0x35, 0xdd, 0x34, 0x59, 0x3c, 0xbc, 0xef, 0x0e, + 0x3c, 0x12, 0x4b, 0xba, 0x78, 0xe8, 0x9c, 0xe2, 0x18, 0x69, 0x9e, 0x92, 0xca, 0x0c, 0x13, 0x51, + 0x37, 0xbf, 0x82, 0x99, 0x9e, 0xef, 0x8c, 0x3e, 0x94, 0xff, 0xe6, 0x9f, 0x57, 0x00, 0xa2, 0x83, + 0xb9, 0xca, 0xce, 0xef, 0x41, 0x91, 0x4a, 0x37, 0x14, 0x1f, 0xbc, 0x7d, 0xb7, 0x54, 0x20, 0xa0, + 0x4e, 0x5b, 0x65, 0x7f, 0xcd, 0xb8, 0x0a, 0xd4, 0x12, 0x2a, 0xf0, 0x1c, 0x2a, 0xac, 0xaa, 0xc8, + 0x12, 0x96, 0x05, 0x1a, 0xdb, 0xdc, 0x4c, 0xc8, 0x8b, 0x95, 0xcf, 0x68, 0xc6, 0x02, 0x5e, 0xf8, + 0x1b, 0x7d, 0x97, 0x64, 0x7f, 0xba, 0x3f, 0xf6, 0x78, 0x61, 0xe5, 0x46, 0x72, 0x1a, 0x45, 0xaa, + 0x9c, 0x08, 0x7d, 0x0a, 0x40, 0xab, 0x76, 0xd8, 0xd4, 0x74, 0x9f, 0x3a, 0xc4, 0xac, 0x5a, 0xe6, + 0x90, 0x96, 0x8f, 0x6e, 0x52, 0x8b, 0x62, 0xc8, 0x0a, 0x45, 0x16, 0xe9, 0xb8, 0x45, 0x2b, 0x97, + 0x63, 0xaa, 0x22, 0x14, 0x89, 0xd8, 0x4c, 0x0e, 0x69, 0x91, 0x94, 0xab, 0xc0, 0x4e, 0xa4, 0xf1, + 0x29, 0xf5, 0x57, 0xb7, 0x84, 0x14, 0x27, 0x59, 0xf3, 0x26, 0x77, 0x34, 0x23, 0x46, 0x4f, 0x89, + 0x69, 0x93, 0x6c, 0xa1, 0xf1, 0x59, 0x22, 0x13, 0x55, 0xde, 0x8c, 0x1c, 0xd7, 0x57, 0x29, 0x52, + 0x98, 0xc7, 0xa8, 0xd1, 0x36, 0xd4, 0xe9, 0x79, 0x1a, 0xce, 0x90, 0xfa, 0x79, 0xcc, 0x83, 0x82, + 0x7b, 0xe1, 0x7c, 0xd5, 0x71, 0x86, 0x1b, 0x01, 0x36, 0xf9, 0xf9, 0x9a, 0x2b, 0x62, 0xd1, 0x77, + 0x59, 0xbd, 0xbc, 0x9e, 0xa8, 0x25, 0xbe, 0xc2, 0x07, 0xc9, 0x89, 0xb4, 0x6c, 0xae, 0x40, 0x45, + 0x28, 0xda, 0x34, 0x66, 0xe9, 0xb4, 0xef, 0xa4, 0x55, 0xb4, 0x92, 0xd3, 0xc5, 0x79, 0xa8, 0x0b, + 0xd3, 0xac, 0x86, 0x14, 0x6d, 0x82, 0xa5, 0x1b, 0xbf, 0x16, 0xd5, 0xf8, 0x09, 0xfe, 0xc2, 0x5d, + 0xd4, 0xfd, 0x18, 0x1a, 0xad, 0x41, 0x9e, 0x42, 0x78, 0x3e, 0x72, 0x2b, 0xbe, 0x4c, 0x72, 0x36, + 0xa3, 0x45, 0xcf, 0xa1, 0xce, 0xed, 0xcb, 0xc5, 0xde, 0x78, 0xe0, 0x7b, 0x8d, 0xe9, 0x84, 0xbf, + 0x60, 0x56, 0x46, 0xfd, 0x45, 0x8d, 0x91, 0xaa, 0x8c, 0x12, 0x3d, 0x81, 0x2a, 0xcd, 0xb3, 0x83, + 0x99, 0x32, 0x9d, 0x39, 0x13, 0xab, 0x56, 0xd0, 0x79, 0x15, 0x42, 0x16, 0xcc, 0xfa, 0x0a, 0x82, + 0xf4, 0x2e, 0x9c, 0x38, 0x93, 0xa8, 0xc3, 0xf1, 0x5c, 0x8e, 0x39, 0xa9, 0x3a, 0xa7, 0x0e, 0xe6, + 0x3f, 0x83, 0x1a, 0x4b, 0x05, 0x82, 0xd9, 0x73, 0x09, 0x86, 0x69, 0x32, 0xc0, 0xe6, 0x56, 0x29, + 0xa5, 0xc0, 0xef, 0xd0, 0xd0, 0x47, 0xe1, 0xc4, 0xdb, 0x09, 0x7e, 0x49, 0x18, 0xcd, 0xf8, 0x25, + 0x64, 0xc1, 0xac, 0x39, 0xc8, 0x63, 0xd7, 0x75, 0x5c, 0x1e, 0x62, 0xb0, 0x01, 0xb1, 0x07, 0xfa, + 0x83, 0x26, 0x24, 0x8d, 0x79, 0x56, 0x2a, 0xa3, 0x10, 0x92, 0x7a, 0x90, 0xf8, 0xc5, 0xc4, 0xbe, + 0x6e, 0x0d, 0xbc, 0xc6, 0x0d, 0x16, 0xbf, 0xf0, 0x21, 0xfa, 0x02, 0x66, 0x82, 0xe0, 0x5b, 0x1b, + 0x38, 0x06, 0x4b, 0x7b, 0x3f, 0x61, 0x29, 0x72, 0x80, 0xd8, 0xe6, 0x70, 0xb4, 0x0c, 0xb3, 0x07, + 0xba, 0x71, 0x32, 0x1e, 0x69, 0xbc, 0xe8, 0xa1, 0x8d, 0x3d, 0x6c, 0x36, 0x6e, 0xb2, 0xda, 0x30, + 0x43, 0xf1, 0x30, 0x7d, 0xdf, 0xc3, 0x26, 0xba, 0x03, 0x15, 0x17, 0xfb, 0xee, 0x99, 0x46, 0xef, + 0xed, 0xc6, 0x2d, 0xca, 0x16, 0x50, 0xd0, 0x06, 0x81, 0x10, 0x3b, 0xe5, 0xd5, 0xa2, 0x62, 0xe2, + 0x3d, 0x29, 0x12, 0x33, 0xb9, 0x4c, 0xd6, 0x33, 0x0d, 0x69, 0x4b, 0x0a, 0x6b, 0x46, 0x5f, 0xf0, + 0x7a, 0x54, 0x32, 0x3f, 0x0a, 0x24, 0xcc, 0xc9, 0x59, 0x45, 0xea, 0x4b, 0xa1, 0xc0, 0x54, 0x4d, + 0xd6, 0xa4, 0x04, 0xc9, 0xf2, 0x49, 0x21, 0xf1, 0x7a, 0x19, 0x8a, 0x2e, 0xd3, 0x4f, 0x92, 0xde, + 0x30, 0x29, 0x35, 0x7f, 0x9e, 0x01, 0x88, 0x78, 0x4b, 0x7f, 0xcd, 0x10, 0x7c, 0x5a, 0xe6, 0x32, + 0x9f, 0x96, 0x8d, 0xfb, 0xb4, 0x05, 0x28, 0xc5, 0x0a, 0x0f, 0x59, 0x35, 0x1c, 0xa3, 0xd5, 0xd0, + 0xb1, 0xb2, 0x54, 0x75, 0x21, 0xe5, 0xa0, 0x96, 0x13, 0xde, 0x35, 0xd4, 0x94, 0x82, 0xa8, 0x29, + 0x4d, 0xa8, 0x0d, 0x74, 0x8f, 0x28, 0x3b, 0x11, 0x8c, 0xce, 0x32, 0xd0, 0xac, 0x5a, 0x21, 0x40, + 0x95, 0xc0, 0x5a, 0x3e, 0x51, 0x17, 0x82, 0xb6, 0xb0, 0x47, 0x8f, 0xb8, 0xa6, 0x06, 0xc3, 0xe6, + 0x32, 0x14, 0xd8, 0x57, 0x10, 0x40, 0xa1, 0xb5, 0xd1, 0xef, 0x7c, 0xad, 0xc8, 0x53, 0xa8, 0x0a, + 0xa5, 0xcd, 0xce, 0x6e, 0xa7, 0xb7, 0xa5, 0xb4, 0x65, 0x89, 0x60, 0x36, 0x5b, 0x9d, 0x6d, 0xa5, + 0x2d, 0x67, 0x9a, 0x3f, 0x97, 0xa0, 0x14, 0x48, 0x25, 0x48, 0x06, 0xc5, 0xc0, 0x23, 0x18, 0x7f, + 0xa4, 0x63, 0x2b, 0x24, 0x8e, 0x0d, 0x41, 0xce, 0xb3, 0x7e, 0x8a, 0xf9, 0x71, 0xd2, 0xdf, 0x84, + 0x3e, 0x54, 0x74, 0x16, 0x8d, 0x85, 0xe3, 0xe6, 0xbf, 0x65, 0xa0, 0x2a, 0xea, 0xc4, 0xf9, 0x3a, + 0x93, 0x34, 0x71, 0x9d, 0xa9, 0x74, 0x41, 0x9d, 0x49, 0xe4, 0x37, 0x73, 0x01, 0xbf, 0x59, 0x81, + 0xdf, 0x2f, 0x60, 0x26, 0x5c, 0x38, 0x64, 0x9c, 0x05, 0x98, 0x72, 0x80, 0x08, 0x2d, 0xf4, 0x09, + 0xcc, 0xc7, 0x59, 0x09, 0x67, 0x30, 0x77, 0x31, 0x27, 0xb2, 0x13, 0xce, 0xba, 0x47, 0xf2, 0x47, + 0xe6, 0x03, 0x99, 0xa5, 0xe6, 0xe9, 0xf7, 0xab, 0x1c, 0xc8, 0x6c, 0x35, 0x2e, 0xa1, 0xc2, 0x65, + 0x12, 0x2a, 0xc6, 0x24, 0xd4, 0xfc, 0x63, 0x09, 0x20, 0xf2, 0x82, 0x93, 0x17, 0x6a, 0xee, 0x44, + 0x55, 0x16, 0xc2, 0x94, 0x44, 0x57, 0x0d, 0x0a, 0x2a, 0xe7, 0x59, 0xba, 0x82, 0xd2, 0x34, 0xff, + 0x59, 0x82, 0x52, 0xe0, 0x5f, 0xbf, 0x05, 0xbd, 0xcc, 0x5d, 0x20, 0xe7, 0xfc, 0x05, 0x7a, 0x59, + 0x88, 0xeb, 0x25, 0x39, 0x89, 0xe0, 0x72, 0x26, 0x27, 0xc1, 0xce, 0x17, 0xf8, 0x85, 0x3b, 0xb6, + 0xfd, 0xe6, 0xdb, 0x0c, 0xdc, 0x68, 0x8d, 0x7d, 0xe7, 0xdc, 0x6d, 0x2f, 0xbc, 0x93, 0x4b, 0x13, + 0xbd, 0x93, 0x4f, 0xa5, 0xbe, 0x93, 0x67, 0xde, 0xf3, 0x4e, 0x3e, 0x25, 0xbc, 0x93, 0xff, 0x90, + 0xdf, 0xc3, 0xc1, 0x63, 0x79, 0x96, 0xde, 0x6b, 0x0b, 0x69, 0x25, 0x6f, 0xfe, 0x6e, 0x4e, 0x2f, + 0xe4, 0x2e, 0x7f, 0x3b, 0x57, 0xa2, 0x0b, 0x39, 0x58, 0x21, 0x47, 0x57, 0xb8, 0xf4, 0x5d, 0x20, + 0xbc, 0x97, 0xf9, 0x32, 0xc4, 0x7b, 0xf3, 0x8e, 0x87, 0xe6, 0x9f, 0x64, 0x60, 0x9a, 0x1c, 0x8e, + 0x10, 0x78, 0x5c, 0xb9, 0x30, 0x95, 0xbf, 0xac, 0x4e, 0x97, 0x99, 0xa8, 0x0c, 0x95, 0x9d, 0xb8, + 0x0c, 0x95, 0xbb, 0x7a, 0x9d, 0xae, 0x70, 0xd5, 0x3a, 0xdd, 0xdf, 0xe5, 0x60, 0x36, 0x25, 0xaa, + 0x25, 0xb9, 0x06, 0x8b, 0x6a, 0x13, 0xb9, 0x06, 0x03, 0x92, 0x5c, 0x83, 0xff, 0x32, 0x49, 0xee, + 0xc4, 0x1e, 0xdd, 0x9d, 0xc3, 0x43, 0x0f, 0xfb, 0xda, 0xd0, 0xe3, 0x06, 0x52, 0xa3, 0xe0, 0x2e, + 0x85, 0xee, 0x78, 0xe4, 0xca, 0xc1, 0xb6, 0x29, 0x50, 0x31, 0x4b, 0xa9, 0x60, 0xdb, 0x0c, 0x69, + 0xc4, 0xde, 0x92, 0xdc, 0x95, 0x7b, 0x4b, 0xf2, 0x13, 0xf7, 0x96, 0x14, 0xae, 0xd6, 0x5b, 0x52, + 0xbc, 0x46, 0x6f, 0x49, 0xe9, 0xc3, 0x7a, 0x4b, 0xca, 0x93, 0xf7, 0x96, 0xc0, 0xd5, 0x7b, 0x4b, + 0x2a, 0xd7, 0xea, 0x2d, 0xf9, 0xf7, 0x02, 0x2c, 0x5c, 0x9c, 0xca, 0x5c, 0x5e, 0x5a, 0x88, 0x32, + 0xf0, 0xcc, 0x25, 0x4d, 0x28, 0xd9, 0x64, 0xfb, 0xc7, 0x97, 0xc0, 0xde, 0x2f, 0xb5, 0xa1, 0xf5, + 0xc6, 0xb2, 0x8f, 0x1a, 0xd3, 0x54, 0x22, 0x89, 0x26, 0x89, 0x1d, 0x8a, 0x53, 0xd9, 0x7b, 0x30, + 0x1b, 0x24, 0xfa, 0x46, 0x72, 0x13, 0x74, 0xaf, 0xe4, 0x53, 0xba, 0x57, 0xd0, 0x13, 0x1e, 0x6b, + 0x32, 0xc5, 0xb9, 0xc4, 0x8b, 0xd1, 0xf8, 0x31, 0x78, 0x06, 0x5d, 0x4b, 0x04, 0xb6, 0xe9, 0xcf, + 0xa0, 0x7c, 0x4a, 0x10, 0xd6, 0x7e, 0x25, 0x44, 0xaa, 0xf0, 0xfe, 0xa7, 0x50, 0x3e, 0x3b, 0x7a, + 0x0e, 0x8d, 0xd4, 0xb6, 0x74, 0x0d, 0xb5, 0x2d, 0x5f, 0x41, 0x6d, 0x93, 0xae, 0xbe, 0x72, 0x35, + 0x57, 0xff, 0x1b, 0x61, 0xb6, 0x17, 0x2c, 0x50, 0x4d, 0xa6, 0x5e, 0xc2, 0x69, 0x05, 0xf9, 0xde, + 0x25, 0x17, 0x45, 0xed, 0xea, 0x17, 0x05, 0xfa, 0x7e, 0x90, 0xc0, 0x05, 0x8b, 0xd4, 0xe9, 0x22, + 0xa9, 0x6f, 0xc9, 0x3c, 0x83, 0x0b, 0xa6, 0x8a, 0x86, 0x25, 0x4f, 0x6e, 0x58, 0xec, 0x43, 0xe2, + 0x0d, 0xf5, 0xbf, 0x79, 0x90, 0x93, 0xf9, 0xfd, 0xb7, 0xd4, 0x29, 0x55, 0x4d, 0xef, 0x94, 0x0a, + 0xf5, 0x3e, 0xf7, 0x81, 0x7a, 0x9f, 0xff, 0x30, 0xbd, 0x2f, 0x5c, 0x4b, 0xef, 0xbf, 0x2d, 0x77, + 0x9d, 0xd4, 0xfb, 0xf2, 0x75, 0xf5, 0x1e, 0xae, 0xa7, 0xf7, 0x95, 0x8f, 0xa1, 0xf7, 0xb5, 0x0f, + 0xd2, 0xfb, 0xfa, 0x75, 0xf4, 0xfe, 0x6f, 0x72, 0xd0, 0xb8, 0xa8, 0x40, 0x75, 0xf9, 0x6d, 0x22, + 0xb6, 0xb0, 0x65, 0x12, 0x2d, 0x6c, 0xdf, 0x81, 0x6a, 0xac, 0x77, 0x8d, 0x59, 0x42, 0xc5, 0x8b, + 0xba, 0xd6, 0x04, 0x95, 0xc9, 0x5d, 0x23, 0x2a, 0xce, 0x5f, 0x23, 0x2a, 0x2e, 0x5c, 0x57, 0x65, + 0x8a, 0xd7, 0x53, 0x99, 0xd2, 0xc7, 0x50, 0x99, 0xf2, 0x07, 0xa9, 0x0c, 0x4c, 0xa8, 0x32, 0x82, + 0xa2, 0xfc, 0x51, 0x01, 0x6e, 0x5d, 0x52, 0x7e, 0xbc, 0x5c, 0x57, 0x9e, 0x02, 0x6b, 0xdb, 0x8a, + 0x9a, 0x3c, 0x33, 0x51, 0x93, 0x27, 0xc5, 0xf0, 0x26, 0x4f, 0x55, 0x1c, 0x99, 0x64, 0x5e, 0xa2, + 0x39, 0x34, 0x9b, 0xde, 0x1c, 0x9a, 0x68, 0x0d, 0xfd, 0x25, 0xb9, 0xce, 0xd2, 0xb5, 0x5c, 0x67, + 0xe1, 0x1a, 0xae, 0xb3, 0xf8, 0xab, 0x90, 0xe1, 0x43, 0xec, 0x60, 0xfa, 0x3a, 0xae, 0xf3, 0x17, + 0x12, 0xa0, 0xf3, 0x95, 0xf4, 0xcb, 0x0d, 0xe1, 0xbe, 0xd0, 0x27, 0x9a, 0x39, 0xd7, 0x27, 0x1a, + 0x75, 0x89, 0x3e, 0xe6, 0x0a, 0x9c, 0x4d, 0x3c, 0x41, 0xb4, 0x2d, 0x17, 0x1b, 0x7e, 0x4a, 0xd7, + 0xdf, 0xe7, 0x50, 0x7b, 0x8d, 0x0f, 0x3c, 0xc7, 0x38, 0xc1, 0x7e, 0xd4, 0x08, 0xbe, 0x35, 0xa5, + 0x56, 0x43, 0x30, 0x89, 0xa5, 0xc5, 0xcd, 0xe7, 0xaf, 0xba, 0xf9, 0xe6, 0x9f, 0x66, 0x40, 0x4e, + 0x72, 0xf0, 0xab, 0x3c, 0xfe, 0x1f, 0x33, 0x30, 0x73, 0xce, 0x66, 0xbe, 0xad, 0x9e, 0xc3, 0xc2, + 0x65, 0xa7, 0x99, 0x9d, 0xe8, 0x34, 0x73, 0x13, 0x9f, 0x66, 0xfe, 0xea, 0xa7, 0x59, 0xbc, 0xea, + 0x69, 0x7e, 0x13, 0x3c, 0x3d, 0x6f, 0xd3, 0xe4, 0xf4, 0x03, 0x9e, 0x9e, 0x2f, 0x48, 0x73, 0x9b, + 0x7f, 0x16, 0xbe, 0x6a, 0xf7, 0xf8, 0xab, 0xd5, 0x95, 0x97, 0xe6, 0x6f, 0xd5, 0x8c, 0x55, 0x4d, + 0x68, 0xc8, 0xac, 0xe9, 0xa6, 0xc9, 0x04, 0x9f, 0x78, 0xab, 0x16, 0x49, 0xb3, 0xe2, 0x5b, 0x75, + 0x44, 0xdd, 0xfc, 0x3e, 0xd4, 0xe3, 0x8f, 0x2d, 0xe8, 0x01, 0xe4, 0x2c, 0xfb, 0xd0, 0x39, 0xf7, + 0x54, 0x2f, 0x3c, 0xbd, 0x51, 0x82, 0xc5, 0x57, 0x50, 0x15, 0xbb, 0xdd, 0xd1, 0x3c, 0xa0, 0xd6, + 0x7e, 0xbb, 0xd3, 0xd5, 0x36, 0xb6, 0x5a, 0xbb, 0xbb, 0xca, 0xb6, 0xb6, 0xde, 0xed, 0x6f, 0xc9, + 0x53, 0xe7, 0xe1, 0xdb, 0xca, 0x66, 0x5f, 0x96, 0xd0, 0x27, 0x30, 0x1b, 0x87, 0xab, 0x9d, 0x17, + 0x5b, 0x7d, 0x39, 0xb3, 0xf8, 0x2f, 0x12, 0xdc, 0x48, 0xbd, 0x80, 0x90, 0x0c, 0xd5, 0xad, 0xd5, + 0xa7, 0x4f, 0xb4, 0x2f, 0x57, 0x57, 0xf6, 0xb4, 0xb5, 0x15, 0x79, 0x2a, 0x0e, 0x79, 0xba, 0x22, + 0x4b, 0x68, 0x06, 0x6a, 0x14, 0xf2, 0xeb, 0x2b, 0xcf, 0x18, 0x51, 0x26, 0x01, 0x7a, 0xba, 0x22, + 0x67, 0xd1, 0x4d, 0xb8, 0xb1, 0xd7, 0x55, 0xfb, 0x6a, 0xab, 0xd3, 0xd7, 0x62, 0x4b, 0xe6, 0x2e, + 0x40, 0x3d, 0x5d, 0x91, 0xf3, 0x68, 0x01, 0xe6, 0xe3, 0xa8, 0xf0, 0x23, 0x85, 0x8b, 0x70, 0x4f, + 0x57, 0xe4, 0xe2, 0xe2, 0x3a, 0xef, 0x90, 0x8f, 0xcc, 0x0e, 0xcd, 0x81, 0xdc, 0x56, 0x36, 0x5b, + 0xfb, 0xdb, 0x7d, 0x6d, 0xb3, 0xb3, 0xad, 0xf4, 0x7f, 0x7b, 0x4f, 0x91, 0xa7, 0x50, 0x11, 0xb2, + 0x3b, 0x7b, 0x4f, 0x64, 0x89, 0xfc, 0xe8, 0xbe, 0x78, 0x21, 0x67, 0x18, 0x64, 0x4d, 0xce, 0x2e, + 0x6e, 0x05, 0x92, 0x0a, 0x3a, 0x67, 0xc5, 0x25, 0xf6, 0xd4, 0x6e, 0xbf, 0xbb, 0xd1, 0xdd, 0x96, + 0xa7, 0x50, 0x09, 0x72, 0x6a, 0x7f, 0x67, 0x8f, 0xad, 0xd1, 0x53, 0xfb, 0x72, 0x06, 0xd5, 0xa0, + 0xfc, 0x4a, 0x59, 0xef, 0x75, 0x37, 0x5e, 0x2a, 0x7d, 0x39, 0xbb, 0xb8, 0x0b, 0x37, 0x52, 0x5b, + 0x71, 0xd1, 0x3d, 0xb8, 0x13, 0x2c, 0xd8, 0x53, 0x5e, 0xec, 0x28, 0xbb, 0x7d, 0xa5, 0x4d, 0xb9, + 0x13, 0xd7, 0x27, 0x27, 0xbe, 0xdd, 0x8b, 0x20, 0xd2, 0xe2, 0xe3, 0x44, 0x2b, 0x30, 0x6f, 0x93, + 0x2c, 0x43, 0xbe, 0xb3, 0xdb, 0x56, 0xbe, 0x91, 0xa7, 0x08, 0x03, 0xfd, 0xce, 0x8e, 0xd2, 0xeb, + 0xb7, 0x08, 0x63, 0x8b, 0x87, 0x30, 0x9d, 0xe8, 0xb1, 0x24, 0x4a, 0xd2, 0xd9, 0x69, 0xbd, 0x50, + 0xb4, 0xde, 0xfe, 0xe6, 0x66, 0xe7, 0x1b, 0x2d, 0x98, 0xb9, 0x00, 0xf3, 0x31, 0xb8, 0xb0, 0x0c, + 0xba, 0x03, 0xb7, 0x62, 0xb8, 0xdd, 0xee, 0xae, 0xa2, 0x75, 0xbf, 0x56, 0xd4, 0x57, 0x6a, 0xa7, + 0xaf, 0xc8, 0x99, 0xc5, 0x1f, 0x83, 0x9c, 0x6c, 0x58, 0x20, 0x0b, 0x2a, 0x2f, 0x54, 0xa5, 0xd7, + 0xd3, 0x7a, 0xdd, 0x7d, 0x75, 0x43, 0xd1, 0xc8, 0xc9, 0x6b, 0xaf, 0x94, 0x75, 0xf6, 0xb1, 0x14, + 0x5c, 0xaf, 0xfd, 0x52, 0x96, 0x16, 0xff, 0x52, 0x82, 0xaa, 0xd8, 0xc6, 0x80, 0x66, 0x61, 0x3a, + 0x20, 0xee, 0xb7, 0xd4, 0x7e, 0x67, 0xf7, 0x85, 0x3c, 0x45, 0x34, 0x8d, 0x03, 0xf9, 0xf3, 0x98, + 0x24, 0x80, 0x94, 0xdd, 0x36, 0xa1, 0xca, 0x08, 0x53, 0x37, 0xba, 0x3b, 0x7b, 0xdb, 0x4a, 0x5f, + 0x91, 0xb3, 0x02, 0x1d, 0x7f, 0x3f, 0xcb, 0x21, 0x04, 0xf5, 0x60, 0xb5, 0xf5, 0xae, 0xda, 0x57, + 0xda, 0x72, 0x1e, 0x35, 0x60, 0x8e, 0xc3, 0xb6, 0x3b, 0x3b, 0x9d, 0xbe, 0xa6, 0x2a, 0xad, 0x8d, + 0x2d, 0xa5, 0x2d, 0x17, 0x16, 0xf7, 0xf9, 0xff, 0xe2, 0xf0, 0x0a, 0x18, 0x82, 0x7a, 0x20, 0xcc, + 0x9d, 0xce, 0x37, 0x8c, 0xbd, 0x79, 0x40, 0xed, 0xfd, 0xd6, 0x76, 0x68, 0x71, 0xad, 0x17, 0xca, + 0x2e, 0x31, 0xc5, 0x05, 0x98, 0x8f, 0xc3, 0xb7, 0xfb, 0x8a, 0xba, 0xdb, 0x22, 0x87, 0xb8, 0xfa, + 0x57, 0x05, 0x28, 0xf0, 0xb2, 0xf9, 0x8f, 0xa0, 0x22, 0x74, 0x50, 0xa0, 0xcb, 0xfa, 0x2a, 0x16, + 0xd2, 0x7a, 0x7c, 0x50, 0x0b, 0xaa, 0x62, 0x6f, 0x0f, 0x8a, 0x02, 0xaf, 0x94, 0x96, 0x9f, 0xf4, + 0x25, 0x14, 0x80, 0xa8, 0xc1, 0x08, 0x45, 0x91, 0xe3, 0xb9, 0x56, 0xa7, 0x85, 0x5b, 0xa9, 0x38, + 0xde, 0x91, 0xf4, 0x43, 0x80, 0xa8, 0x47, 0x07, 0x89, 0x0f, 0xaa, 0x89, 0xc6, 0x9d, 0x74, 0x2e, + 0xfa, 0xd0, 0xa0, 0x7b, 0x4e, 0x29, 0x87, 0xa2, 0x49, 0xfa, 0x3e, 0xd2, 0x57, 0xfd, 0x4d, 0x62, + 0xe2, 0xba, 0xeb, 0x87, 0xc5, 0x20, 0x74, 0x71, 0x03, 0x48, 0xfa, 0x0a, 0x7b, 0x30, 0x4f, 0x57, + 0x38, 0xff, 0x12, 0xf4, 0xfe, 0x9e, 0x90, 0xf4, 0x15, 0xbf, 0x86, 0x9b, 0x74, 0xc5, 0xb4, 0xfc, + 0x0b, 0x4d, 0xd4, 0x1d, 0x92, 0xbe, 0x6e, 0x1b, 0xe4, 0x68, 0xdd, 0x73, 0x0a, 0x75, 0x3e, 0xb6, + 0x7d, 0x8f, 0x42, 0xb1, 0x1b, 0xfb, 0x9c, 0x42, 0xc5, 0x2e, 0xf2, 0xf7, 0x2c, 0xc1, 0xbc, 0xeb, + 0xb9, 0x25, 0x62, 0x17, 0x76, 0xea, 0x12, 0xeb, 0x9b, 0xbf, 0x73, 0xef, 0xc8, 0xf2, 0x8f, 0xc7, + 0x07, 0xcb, 0x86, 0x33, 0x7c, 0xcc, 0x09, 0x1e, 0x07, 0xff, 0xd7, 0x10, 0x00, 0xfe, 0x36, 0x53, + 0xdb, 0xb6, 0x4e, 0xf1, 0x4b, 0xd6, 0x37, 0xe9, 0x3b, 0xff, 0x95, 0xa9, 0xf3, 0xf1, 0xf3, 0xe7, + 0x14, 0x70, 0x50, 0xa0, 0x53, 0xd6, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x2d, 0xf7, 0x77, + 0xea, 0x3b, 0x00, 0x00, } From e5566fe4555c0cab573e16f406e3e4a8c97fc168 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Wed, 18 Mar 2026 14:44:38 +0800 Subject: [PATCH 07/10] remove mcap related fields for now --- protobufs/livekit_egress.proto | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/protobufs/livekit_egress.proto b/protobufs/livekit_egress.proto index c1ce8b47d..bc917a5f9 100644 --- a/protobufs/livekit_egress.proto +++ b/protobufs/livekit_egress.proto @@ -185,10 +185,10 @@ message EncodingOptions { message Output { oneof config { FileOutput file = 1; - StreamOutput stream = 2; // reuses v1 StreamOutput - SegmentedFileOutput segments = 3; // reuses v1 SegmentedFileOutput - ImageOutput images = 4; // reuses v1 ImageOutput - McapOutput mcap = 5; + StreamOutput stream = 2; + SegmentedFileOutput segments = 3; + ImageOutput images = 4; + // 5 reserved for mcap; } // Per-output storage override (falls back to request, then server) @@ -276,12 +276,6 @@ enum ImageFileSuffix { IMAGE_SUFFIX_NONE_OVERWRITE = 2; // Do not append any suffix and overwrite the existing image with the latest } -// Raw track data packaged into MCAP container format. -message McapOutput { - string filepath = 1; - bool disable_manifest = 2; -} - // --- Storage --- message StorageConfig { @@ -391,7 +385,6 @@ message EgressInfo { repeated FileInfo file_results = 16; repeated SegmentsInfo segment_results = 17; repeated ImagesInfo image_results = 20; - repeated McapInfo mcap_results = 28; string error = 9; int32 error_code = 22; @@ -471,16 +464,6 @@ message ImagesInfo { int64 ended_at = 3; } -message McapInfo { - string filename = 1; - int64 started_at = 2; - int64 ended_at = 3; - int64 duration = 4; - int64 size = 5; - string location = 6; - int64 track_count = 7; -} - // --- Auto Egress --- message AutoParticipantEgress { From ecfea899215729ae7a98a6e451a89ccaf669856a Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 06:45:28 +0000 Subject: [PATCH 08/10] generated protobuf --- livekit/livekit_egress.pb.go | 751 ++++++++++++-------------------- livekit/livekit_egress.twirp.go | 539 ++++++++++++----------- 2 files changed, 548 insertions(+), 742 deletions(-) diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index 400d5cd1e..33b0cbf6b 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -596,7 +596,7 @@ func (x StreamInfo_Status) Number() protoreflect.EnumNumber { // Deprecated: Use StreamInfo_Status.Descriptor instead. func (StreamInfo_Status) EnumDescriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{27, 0} + return file_livekit_egress_proto_rawDescGZIP(), []int{26, 0} } type StartEgressRequest struct { @@ -1515,7 +1515,6 @@ type Output struct { // *Output_Stream // *Output_Segments // *Output_Images - // *Output_Mcap Config isOutput_Config `protobuf_oneof:"config"` // Per-output storage override (falls back to request, then server) Storage *StorageConfig `protobuf:"bytes,6,opt,name=storage,proto3" json:"storage,omitempty"` @@ -1596,15 +1595,6 @@ func (x *Output) GetImages() *ImageOutput { return nil } -func (x *Output) GetMcap() *McapOutput { - if x != nil { - if x, ok := x.Config.(*Output_Mcap); ok { - return x.Mcap - } - } - return nil -} - func (x *Output) GetStorage() *StorageConfig { if x != nil { return x.Storage @@ -1621,19 +1611,15 @@ type Output_File struct { } type Output_Stream struct { - Stream *StreamOutput `protobuf:"bytes,2,opt,name=stream,proto3,oneof"` // reuses v1 StreamOutput + Stream *StreamOutput `protobuf:"bytes,2,opt,name=stream,proto3,oneof"` } type Output_Segments struct { - Segments *SegmentedFileOutput `protobuf:"bytes,3,opt,name=segments,proto3,oneof"` // reuses v1 SegmentedFileOutput + Segments *SegmentedFileOutput `protobuf:"bytes,3,opt,name=segments,proto3,oneof"` } type Output_Images struct { - Images *ImageOutput `protobuf:"bytes,4,opt,name=images,proto3,oneof"` // reuses v1 ImageOutput -} - -type Output_Mcap struct { - Mcap *McapOutput `protobuf:"bytes,5,opt,name=mcap,proto3,oneof"` + Images *ImageOutput `protobuf:"bytes,4,opt,name=images,proto3,oneof"` // 5 reserved for mcap; } func (*Output_File) isOutput_Config() {} @@ -1644,8 +1630,6 @@ func (*Output_Segments) isOutput_Config() {} func (*Output_Images) isOutput_Config() {} -func (*Output_Mcap) isOutput_Config() {} - // Unified file output — replaces v1 EncodedFileOutput and DirectFileOutput. // Whether transcoded depends on encoding options on the request. type FileOutput struct { @@ -2106,59 +2090,6 @@ func (*ImageOutput_Azure) isImageOutput_Output() {} func (*ImageOutput_AliOSS) isImageOutput_Output() {} -// Raw track data packaged into MCAP container format. -type McapOutput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Filepath string `protobuf:"bytes,1,opt,name=filepath,proto3" json:"filepath,omitempty"` - DisableManifest bool `protobuf:"varint,2,opt,name=disable_manifest,json=disableManifest,proto3" json:"disable_manifest,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *McapOutput) Reset() { - *x = McapOutput{} - mi := &file_livekit_egress_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *McapOutput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*McapOutput) ProtoMessage() {} - -func (x *McapOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use McapOutput.ProtoReflect.Descriptor instead. -func (*McapOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{15} -} - -func (x *McapOutput) GetFilepath() string { - if x != nil { - return x.Filepath - } - return "" -} - -func (x *McapOutput) GetDisableManifest() bool { - if x != nil { - return x.DisableManifest - } - return false -} - type StorageConfig struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Provider: @@ -2174,7 +2105,7 @@ type StorageConfig struct { func (x *StorageConfig) Reset() { *x = StorageConfig{} - mi := &file_livekit_egress_proto_msgTypes[16] + mi := &file_livekit_egress_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2186,7 +2117,7 @@ func (x *StorageConfig) String() string { func (*StorageConfig) ProtoMessage() {} func (x *StorageConfig) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[16] + mi := &file_livekit_egress_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2199,7 +2130,7 @@ func (x *StorageConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageConfig.ProtoReflect.Descriptor instead. func (*StorageConfig) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{16} + return file_livekit_egress_proto_rawDescGZIP(), []int{15} } func (x *StorageConfig) GetProvider() isStorageConfig_Provider { @@ -2294,7 +2225,7 @@ type S3Upload struct { func (x *S3Upload) Reset() { *x = S3Upload{} - mi := &file_livekit_egress_proto_msgTypes[17] + mi := &file_livekit_egress_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2306,7 +2237,7 @@ func (x *S3Upload) String() string { func (*S3Upload) ProtoMessage() {} func (x *S3Upload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[17] + mi := &file_livekit_egress_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2319,7 +2250,7 @@ func (x *S3Upload) ProtoReflect() protoreflect.Message { // Deprecated: Use S3Upload.ProtoReflect.Descriptor instead. func (*S3Upload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{17} + return file_livekit_egress_proto_rawDescGZIP(), []int{16} } func (x *S3Upload) GetAccessKey() string { @@ -2425,7 +2356,7 @@ type GCPUpload struct { func (x *GCPUpload) Reset() { *x = GCPUpload{} - mi := &file_livekit_egress_proto_msgTypes[18] + mi := &file_livekit_egress_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2437,7 +2368,7 @@ func (x *GCPUpload) String() string { func (*GCPUpload) ProtoMessage() {} func (x *GCPUpload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[18] + mi := &file_livekit_egress_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2450,7 +2381,7 @@ func (x *GCPUpload) ProtoReflect() protoreflect.Message { // Deprecated: Use GCPUpload.ProtoReflect.Descriptor instead. func (*GCPUpload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{18} + return file_livekit_egress_proto_rawDescGZIP(), []int{17} } func (x *GCPUpload) GetCredentials() string { @@ -2485,7 +2416,7 @@ type AzureBlobUpload struct { func (x *AzureBlobUpload) Reset() { *x = AzureBlobUpload{} - mi := &file_livekit_egress_proto_msgTypes[19] + mi := &file_livekit_egress_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2497,7 +2428,7 @@ func (x *AzureBlobUpload) String() string { func (*AzureBlobUpload) ProtoMessage() {} func (x *AzureBlobUpload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[19] + mi := &file_livekit_egress_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2510,7 +2441,7 @@ func (x *AzureBlobUpload) ProtoReflect() protoreflect.Message { // Deprecated: Use AzureBlobUpload.ProtoReflect.Descriptor instead. func (*AzureBlobUpload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{19} + return file_livekit_egress_proto_rawDescGZIP(), []int{18} } func (x *AzureBlobUpload) GetAccountName() string { @@ -2547,7 +2478,7 @@ type AliOSSUpload struct { func (x *AliOSSUpload) Reset() { *x = AliOSSUpload{} - mi := &file_livekit_egress_proto_msgTypes[20] + mi := &file_livekit_egress_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2559,7 +2490,7 @@ func (x *AliOSSUpload) String() string { func (*AliOSSUpload) ProtoMessage() {} func (x *AliOSSUpload) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[20] + mi := &file_livekit_egress_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2572,7 +2503,7 @@ func (x *AliOSSUpload) ProtoReflect() protoreflect.Message { // Deprecated: Use AliOSSUpload.ProtoReflect.Descriptor instead. func (*AliOSSUpload) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{20} + return file_livekit_egress_proto_rawDescGZIP(), []int{19} } func (x *AliOSSUpload) GetAccessKey() string { @@ -2621,7 +2552,7 @@ type ProxyConfig struct { func (x *ProxyConfig) Reset() { *x = ProxyConfig{} - mi := &file_livekit_egress_proto_msgTypes[21] + mi := &file_livekit_egress_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2633,7 +2564,7 @@ func (x *ProxyConfig) String() string { func (*ProxyConfig) ProtoMessage() {} func (x *ProxyConfig) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[21] + mi := &file_livekit_egress_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2646,7 +2577,7 @@ func (x *ProxyConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ProxyConfig.ProtoReflect.Descriptor instead. func (*ProxyConfig) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{21} + return file_livekit_egress_proto_rawDescGZIP(), []int{20} } func (x *ProxyConfig) GetUrl() string { @@ -2681,7 +2612,7 @@ type ListEgressRequest struct { func (x *ListEgressRequest) Reset() { *x = ListEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[22] + mi := &file_livekit_egress_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2693,7 +2624,7 @@ func (x *ListEgressRequest) String() string { func (*ListEgressRequest) ProtoMessage() {} func (x *ListEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[22] + mi := &file_livekit_egress_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2706,7 +2637,7 @@ func (x *ListEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEgressRequest.ProtoReflect.Descriptor instead. func (*ListEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{22} + return file_livekit_egress_proto_rawDescGZIP(), []int{21} } func (x *ListEgressRequest) GetRoomName() string { @@ -2739,7 +2670,7 @@ type ListEgressResponse struct { func (x *ListEgressResponse) Reset() { *x = ListEgressResponse{} - mi := &file_livekit_egress_proto_msgTypes[23] + mi := &file_livekit_egress_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2751,7 +2682,7 @@ func (x *ListEgressResponse) String() string { func (*ListEgressResponse) ProtoMessage() {} func (x *ListEgressResponse) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[23] + mi := &file_livekit_egress_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2764,7 +2695,7 @@ func (x *ListEgressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEgressResponse.ProtoReflect.Descriptor instead. func (*ListEgressResponse) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{23} + return file_livekit_egress_proto_rawDescGZIP(), []int{22} } func (x *ListEgressResponse) GetItems() []*EgressInfo { @@ -2787,7 +2718,7 @@ type UpdateEgressRequest struct { func (x *UpdateEgressRequest) Reset() { *x = UpdateEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[24] + mi := &file_livekit_egress_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2799,7 +2730,7 @@ func (x *UpdateEgressRequest) String() string { func (*UpdateEgressRequest) ProtoMessage() {} func (x *UpdateEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[24] + mi := &file_livekit_egress_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2812,7 +2743,7 @@ func (x *UpdateEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateEgressRequest.ProtoReflect.Descriptor instead. func (*UpdateEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{24} + return file_livekit_egress_proto_rawDescGZIP(), []int{23} } func (x *UpdateEgressRequest) GetEgressId() string { @@ -2859,7 +2790,7 @@ type StopEgressRequest struct { func (x *StopEgressRequest) Reset() { *x = StopEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[25] + mi := &file_livekit_egress_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2871,7 +2802,7 @@ func (x *StopEgressRequest) String() string { func (*StopEgressRequest) ProtoMessage() {} func (x *StopEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[25] + mi := &file_livekit_egress_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2884,7 +2815,7 @@ func (x *StopEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopEgressRequest.ProtoReflect.Descriptor instead. func (*StopEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{25} + return file_livekit_egress_proto_rawDescGZIP(), []int{24} } func (x *StopEgressRequest) GetEgressId() string { @@ -2918,7 +2849,6 @@ type EgressInfo struct { FileResults []*FileInfo `protobuf:"bytes,16,rep,name=file_results,json=fileResults,proto3" json:"file_results,omitempty"` SegmentResults []*SegmentsInfo `protobuf:"bytes,17,rep,name=segment_results,json=segmentResults,proto3" json:"segment_results,omitempty"` ImageResults []*ImagesInfo `protobuf:"bytes,20,rep,name=image_results,json=imageResults,proto3" json:"image_results,omitempty"` - McapResults []*McapInfo `protobuf:"bytes,28,rep,name=mcap_results,json=mcapResults,proto3" json:"mcap_results,omitempty"` Error string `protobuf:"bytes,9,opt,name=error,proto3" json:"error,omitempty"` ErrorCode int32 `protobuf:"varint,22,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` Details string `protobuf:"bytes,21,opt,name=details,proto3" json:"details,omitempty"` @@ -2939,7 +2869,7 @@ type EgressInfo struct { func (x *EgressInfo) Reset() { *x = EgressInfo{} - mi := &file_livekit_egress_proto_msgTypes[26] + mi := &file_livekit_egress_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2951,7 +2881,7 @@ func (x *EgressInfo) String() string { func (*EgressInfo) ProtoMessage() {} func (x *EgressInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[26] + mi := &file_livekit_egress_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2964,7 +2894,7 @@ func (x *EgressInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use EgressInfo.ProtoReflect.Descriptor instead. func (*EgressInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{26} + return file_livekit_egress_proto_rawDescGZIP(), []int{25} } func (x *EgressInfo) GetEgressId() string { @@ -3121,13 +3051,6 @@ func (x *EgressInfo) GetImageResults() []*ImagesInfo { return nil } -func (x *EgressInfo) GetMcapResults() []*McapInfo { - if x != nil { - return x.McapResults - } - return nil -} - func (x *EgressInfo) GetError() string { if x != nil { return x.Error @@ -3294,7 +3217,7 @@ type StreamInfo struct { func (x *StreamInfo) Reset() { *x = StreamInfo{} - mi := &file_livekit_egress_proto_msgTypes[27] + mi := &file_livekit_egress_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3306,7 +3229,7 @@ func (x *StreamInfo) String() string { func (*StreamInfo) ProtoMessage() {} func (x *StreamInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[27] + mi := &file_livekit_egress_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3319,7 +3242,7 @@ func (x *StreamInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamInfo.ProtoReflect.Descriptor instead. func (*StreamInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{27} + return file_livekit_egress_proto_rawDescGZIP(), []int{26} } func (x *StreamInfo) GetUrl() string { @@ -3392,7 +3315,7 @@ type FileInfo struct { func (x *FileInfo) Reset() { *x = FileInfo{} - mi := &file_livekit_egress_proto_msgTypes[28] + mi := &file_livekit_egress_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3404,7 +3327,7 @@ func (x *FileInfo) String() string { func (*FileInfo) ProtoMessage() {} func (x *FileInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[28] + mi := &file_livekit_egress_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3417,7 +3340,7 @@ func (x *FileInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FileInfo.ProtoReflect.Descriptor instead. func (*FileInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{28} + return file_livekit_egress_proto_rawDescGZIP(), []int{27} } func (x *FileInfo) GetFilename() string { @@ -3479,7 +3402,7 @@ type SegmentsInfo struct { func (x *SegmentsInfo) Reset() { *x = SegmentsInfo{} - mi := &file_livekit_egress_proto_msgTypes[29] + mi := &file_livekit_egress_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3491,7 +3414,7 @@ func (x *SegmentsInfo) String() string { func (*SegmentsInfo) ProtoMessage() {} func (x *SegmentsInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[29] + mi := &file_livekit_egress_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3504,7 +3427,7 @@ func (x *SegmentsInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SegmentsInfo.ProtoReflect.Descriptor instead. func (*SegmentsInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{29} + return file_livekit_egress_proto_rawDescGZIP(), []int{28} } func (x *SegmentsInfo) GetPlaylistName() string { @@ -3582,7 +3505,7 @@ type ImagesInfo struct { func (x *ImagesInfo) Reset() { *x = ImagesInfo{} - mi := &file_livekit_egress_proto_msgTypes[30] + mi := &file_livekit_egress_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3594,7 +3517,7 @@ func (x *ImagesInfo) String() string { func (*ImagesInfo) ProtoMessage() {} func (x *ImagesInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[30] + mi := &file_livekit_egress_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3607,7 +3530,7 @@ func (x *ImagesInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ImagesInfo.ProtoReflect.Descriptor instead. func (*ImagesInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{30} + return file_livekit_egress_proto_rawDescGZIP(), []int{29} } func (x *ImagesInfo) GetFilenamePrefix() string { @@ -3638,98 +3561,6 @@ func (x *ImagesInfo) GetEndedAt() int64 { return 0 } -type McapInfo struct { - state protoimpl.MessageState `protogen:"open.v1"` - Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` - StartedAt int64 `protobuf:"varint,2,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` - EndedAt int64 `protobuf:"varint,3,opt,name=ended_at,json=endedAt,proto3" json:"ended_at,omitempty"` - Duration int64 `protobuf:"varint,4,opt,name=duration,proto3" json:"duration,omitempty"` - Size int64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` - Location string `protobuf:"bytes,6,opt,name=location,proto3" json:"location,omitempty"` - TrackCount int64 `protobuf:"varint,7,opt,name=track_count,json=trackCount,proto3" json:"track_count,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *McapInfo) Reset() { - *x = McapInfo{} - mi := &file_livekit_egress_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *McapInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*McapInfo) ProtoMessage() {} - -func (x *McapInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[31] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use McapInfo.ProtoReflect.Descriptor instead. -func (*McapInfo) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{31} -} - -func (x *McapInfo) GetFilename() string { - if x != nil { - return x.Filename - } - return "" -} - -func (x *McapInfo) GetStartedAt() int64 { - if x != nil { - return x.StartedAt - } - return 0 -} - -func (x *McapInfo) GetEndedAt() int64 { - if x != nil { - return x.EndedAt - } - return 0 -} - -func (x *McapInfo) GetDuration() int64 { - if x != nil { - return x.Duration - } - return 0 -} - -func (x *McapInfo) GetSize() int64 { - if x != nil { - return x.Size - } - return 0 -} - -func (x *McapInfo) GetLocation() string { - if x != nil { - return x.Location - } - return "" -} - -func (x *McapInfo) GetTrackCount() int64 { - if x != nil { - return x.TrackCount - } - return 0 -} - type AutoParticipantEgress struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Options: @@ -3745,7 +3576,7 @@ type AutoParticipantEgress struct { func (x *AutoParticipantEgress) Reset() { *x = AutoParticipantEgress{} - mi := &file_livekit_egress_proto_msgTypes[32] + mi := &file_livekit_egress_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3757,7 +3588,7 @@ func (x *AutoParticipantEgress) String() string { func (*AutoParticipantEgress) ProtoMessage() {} func (x *AutoParticipantEgress) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[32] + mi := &file_livekit_egress_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3770,7 +3601,7 @@ func (x *AutoParticipantEgress) ProtoReflect() protoreflect.Message { // Deprecated: Use AutoParticipantEgress.ProtoReflect.Descriptor instead. func (*AutoParticipantEgress) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{32} + return file_livekit_egress_proto_rawDescGZIP(), []int{30} } func (x *AutoParticipantEgress) GetOptions() isAutoParticipantEgress_Options { @@ -3845,7 +3676,7 @@ type AutoTrackEgress struct { func (x *AutoTrackEgress) Reset() { *x = AutoTrackEgress{} - mi := &file_livekit_egress_proto_msgTypes[33] + mi := &file_livekit_egress_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3857,7 +3688,7 @@ func (x *AutoTrackEgress) String() string { func (*AutoTrackEgress) ProtoMessage() {} func (x *AutoTrackEgress) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[33] + mi := &file_livekit_egress_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3870,7 +3701,7 @@ func (x *AutoTrackEgress) ProtoReflect() protoreflect.Message { // Deprecated: Use AutoTrackEgress.ProtoReflect.Descriptor instead. func (*AutoTrackEgress) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{33} + return file_livekit_egress_proto_rawDescGZIP(), []int{31} } func (x *AutoTrackEgress) GetFilepath() string { @@ -3983,7 +3814,7 @@ type ExportReplayRequest struct { func (x *ExportReplayRequest) Reset() { *x = ExportReplayRequest{} - mi := &file_livekit_egress_proto_msgTypes[34] + mi := &file_livekit_egress_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3995,7 +3826,7 @@ func (x *ExportReplayRequest) String() string { func (*ExportReplayRequest) ProtoMessage() {} func (x *ExportReplayRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[34] + mi := &file_livekit_egress_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4008,7 +3839,7 @@ func (x *ExportReplayRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportReplayRequest.ProtoReflect.Descriptor instead. func (*ExportReplayRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{34} + return file_livekit_egress_proto_rawDescGZIP(), []int{32} } func (x *ExportReplayRequest) GetReplayId() string { @@ -4180,7 +4011,7 @@ type RoomCompositeEgressRequest struct { func (x *RoomCompositeEgressRequest) Reset() { *x = RoomCompositeEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[35] + mi := &file_livekit_egress_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4192,7 +4023,7 @@ func (x *RoomCompositeEgressRequest) String() string { func (*RoomCompositeEgressRequest) ProtoMessage() {} func (x *RoomCompositeEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[35] + mi := &file_livekit_egress_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4205,7 +4036,7 @@ func (x *RoomCompositeEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RoomCompositeEgressRequest.ProtoReflect.Descriptor instead. func (*RoomCompositeEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{35} + return file_livekit_egress_proto_rawDescGZIP(), []int{33} } func (x *RoomCompositeEgressRequest) GetRoomName() string { @@ -4416,7 +4247,7 @@ type WebEgressRequest struct { func (x *WebEgressRequest) Reset() { *x = WebEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[36] + mi := &file_livekit_egress_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4428,7 +4259,7 @@ func (x *WebEgressRequest) String() string { func (*WebEgressRequest) ProtoMessage() {} func (x *WebEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[36] + mi := &file_livekit_egress_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4441,7 +4272,7 @@ func (x *WebEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WebEgressRequest.ProtoReflect.Descriptor instead. func (*WebEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{36} + return file_livekit_egress_proto_rawDescGZIP(), []int{34} } func (x *WebEgressRequest) GetUrl() string { @@ -4631,7 +4462,7 @@ type ParticipantEgressRequest struct { func (x *ParticipantEgressRequest) Reset() { *x = ParticipantEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[37] + mi := &file_livekit_egress_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4643,7 +4474,7 @@ func (x *ParticipantEgressRequest) String() string { func (*ParticipantEgressRequest) ProtoMessage() {} func (x *ParticipantEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[37] + mi := &file_livekit_egress_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4656,7 +4487,7 @@ func (x *ParticipantEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ParticipantEgressRequest.ProtoReflect.Descriptor instead. func (*ParticipantEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{37} + return file_livekit_egress_proto_rawDescGZIP(), []int{35} } func (x *ParticipantEgressRequest) GetRoomName() string { @@ -4783,7 +4614,7 @@ type TrackCompositeEgressRequest struct { func (x *TrackCompositeEgressRequest) Reset() { *x = TrackCompositeEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[38] + mi := &file_livekit_egress_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4795,7 +4626,7 @@ func (x *TrackCompositeEgressRequest) String() string { func (*TrackCompositeEgressRequest) ProtoMessage() {} func (x *TrackCompositeEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[38] + mi := &file_livekit_egress_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4808,7 +4639,7 @@ func (x *TrackCompositeEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TrackCompositeEgressRequest.ProtoReflect.Descriptor instead. func (*TrackCompositeEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{38} + return file_livekit_egress_proto_rawDescGZIP(), []int{36} } func (x *TrackCompositeEgressRequest) GetRoomName() string { @@ -4986,7 +4817,7 @@ type TrackEgressRequest struct { func (x *TrackEgressRequest) Reset() { *x = TrackEgressRequest{} - mi := &file_livekit_egress_proto_msgTypes[39] + mi := &file_livekit_egress_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4998,7 +4829,7 @@ func (x *TrackEgressRequest) String() string { func (*TrackEgressRequest) ProtoMessage() {} func (x *TrackEgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[39] + mi := &file_livekit_egress_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5011,7 +4842,7 @@ func (x *TrackEgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TrackEgressRequest.ProtoReflect.Descriptor instead. func (*TrackEgressRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{39} + return file_livekit_egress_proto_rawDescGZIP(), []int{37} } func (x *TrackEgressRequest) GetRoomName() string { @@ -5093,7 +4924,7 @@ type DirectFileOutput struct { func (x *DirectFileOutput) Reset() { *x = DirectFileOutput{} - mi := &file_livekit_egress_proto_msgTypes[40] + mi := &file_livekit_egress_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5105,7 +4936,7 @@ func (x *DirectFileOutput) String() string { func (*DirectFileOutput) ProtoMessage() {} func (x *DirectFileOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[40] + mi := &file_livekit_egress_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5118,7 +4949,7 @@ func (x *DirectFileOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use DirectFileOutput.ProtoReflect.Descriptor instead. func (*DirectFileOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{40} + return file_livekit_egress_proto_rawDescGZIP(), []int{38} } func (x *DirectFileOutput) GetFilepath() string { @@ -5224,7 +5055,7 @@ type EncodedFileOutput struct { func (x *EncodedFileOutput) Reset() { *x = EncodedFileOutput{} - mi := &file_livekit_egress_proto_msgTypes[41] + mi := &file_livekit_egress_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5236,7 +5067,7 @@ func (x *EncodedFileOutput) String() string { func (*EncodedFileOutput) ProtoMessage() {} func (x *EncodedFileOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[41] + mi := &file_livekit_egress_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5249,7 +5080,7 @@ func (x *EncodedFileOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use EncodedFileOutput.ProtoReflect.Descriptor instead. func (*EncodedFileOutput) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{41} + return file_livekit_egress_proto_rawDescGZIP(), []int{39} } func (x *EncodedFileOutput) GetFileType() EncodedFileType { @@ -5354,7 +5185,7 @@ type UpdateLayoutRequest struct { func (x *UpdateLayoutRequest) Reset() { *x = UpdateLayoutRequest{} - mi := &file_livekit_egress_proto_msgTypes[42] + mi := &file_livekit_egress_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5366,7 +5197,7 @@ func (x *UpdateLayoutRequest) String() string { func (*UpdateLayoutRequest) ProtoMessage() {} func (x *UpdateLayoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[42] + mi := &file_livekit_egress_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5379,7 +5210,7 @@ func (x *UpdateLayoutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateLayoutRequest.ProtoReflect.Descriptor instead. func (*UpdateLayoutRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{42} + return file_livekit_egress_proto_rawDescGZIP(), []int{40} } func (x *UpdateLayoutRequest) GetEgressId() string { @@ -5407,7 +5238,7 @@ type UpdateStreamRequest struct { func (x *UpdateStreamRequest) Reset() { *x = UpdateStreamRequest{} - mi := &file_livekit_egress_proto_msgTypes[43] + mi := &file_livekit_egress_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5419,7 +5250,7 @@ func (x *UpdateStreamRequest) String() string { func (*UpdateStreamRequest) ProtoMessage() {} func (x *UpdateStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[43] + mi := &file_livekit_egress_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5432,7 +5263,7 @@ func (x *UpdateStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateStreamRequest.ProtoReflect.Descriptor instead. func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{43} + return file_livekit_egress_proto_rawDescGZIP(), []int{41} } func (x *UpdateStreamRequest) GetEgressId() string { @@ -5465,7 +5296,7 @@ type StreamInfoList struct { func (x *StreamInfoList) Reset() { *x = StreamInfoList{} - mi := &file_livekit_egress_proto_msgTypes[44] + mi := &file_livekit_egress_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5477,7 +5308,7 @@ func (x *StreamInfoList) String() string { func (*StreamInfoList) ProtoMessage() {} func (x *StreamInfoList) ProtoReflect() protoreflect.Message { - mi := &file_livekit_egress_proto_msgTypes[44] + mi := &file_livekit_egress_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5490,7 +5321,7 @@ func (x *StreamInfoList) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamInfoList.ProtoReflect.Descriptor instead. func (*StreamInfoList) Descriptor() ([]byte, []int) { - return file_livekit_egress_proto_rawDescGZIP(), []int{44} + return file_livekit_egress_proto_rawDescGZIP(), []int{42} } func (x *StreamInfoList) GetInfo() []*StreamInfo { @@ -5573,13 +5404,12 @@ const file_livekit_egress_proto_rawDesc = "" + "\x12key_frame_interval\x18\n" + " \x01(\x01R\x10keyFrameInterval\x12'\n" + "\raudio_quality\x18\v \x01(\x05B\x02\x18\x01R\faudioQuality\x12'\n" + - "\rvideo_quality\x18\f \x01(\x05B\x02\x18\x01R\fvideoQuality\"\xb7\x02\n" + + "\rvideo_quality\x18\f \x01(\x05B\x02\x18\x01R\fvideoQuality\"\x8c\x02\n" + "\x06Output\x12)\n" + "\x04file\x18\x01 \x01(\v2\x13.livekit.FileOutputH\x00R\x04file\x12/\n" + "\x06stream\x18\x02 \x01(\v2\x15.livekit.StreamOutputH\x00R\x06stream\x12:\n" + "\bsegments\x18\x03 \x01(\v2\x1c.livekit.SegmentedFileOutputH\x00R\bsegments\x12.\n" + - "\x06images\x18\x04 \x01(\v2\x14.livekit.ImageOutputH\x00R\x06images\x12)\n" + - "\x04mcap\x18\x05 \x01(\v2\x13.livekit.McapOutputH\x00R\x04mcap\x120\n" + + "\x06images\x18\x04 \x01(\v2\x14.livekit.ImageOutputH\x00R\x06images\x120\n" + "\astorage\x18\x06 \x01(\v2\x16.livekit.StorageConfigR\astorageB\b\n" + "\x06config\"\x8a\x01\n" + "\n" + @@ -5618,11 +5448,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\x05azure\x18\n" + " \x01(\v2\x18.livekit.AzureBlobUploadH\x00R\x05azure\x12/\n" + "\x06aliOSS\x18\v \x01(\v2\x15.livekit.AliOSSUploadH\x00R\x06aliOSSB\b\n" + - "\x06output\"S\n" + - "\n" + - "McapOutput\x12\x1a\n" + - "\bfilepath\x18\x01 \x01(\tR\bfilepath\x12)\n" + - "\x10disable_manifest\x18\x02 \x01(\bR\x0fdisableManifest\"\xcc\x01\n" + + "\x06output\"\xcc\x01\n" + "\rStorageConfig\x12#\n" + "\x02s3\x18\x01 \x01(\v2\x11.livekit.S3UploadH\x00R\x02s3\x12&\n" + "\x03gcp\x18\x02 \x01(\v2\x12.livekit.GCPUploadH\x00R\x03gcp\x120\n" + @@ -5682,7 +5508,8 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0fadd_stream_urls\x18\x04 \x03(\tR\raddStreamUrls\x12,\n" + "\x12remove_stream_urls\x18\x05 \x03(\tR\x10removeStreamUrls\">\n" + "\x11StopEgressRequest\x12)\n" + - "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\"\x97\v\n" + + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\"\xe1\n" + + "\n" + "\n" + "EgressInfo\x12)\n" + "\tegress_id\x18\x01 \x01(\tB\f\x9a\xec,\begressIDR\begressId\x12#\n" + @@ -5708,8 +5535,7 @@ const file_livekit_egress_proto_rawDesc = "" + "\x0estream_results\x18\x0f \x03(\v2\x13.livekit.StreamInfoR\rstreamResults\x124\n" + "\ffile_results\x18\x10 \x03(\v2\x11.livekit.FileInfoR\vfileResults\x12>\n" + "\x0fsegment_results\x18\x11 \x03(\v2\x15.livekit.SegmentsInfoR\x0esegmentResults\x128\n" + - "\rimage_results\x18\x14 \x03(\v2\x13.livekit.ImagesInfoR\fimageResults\x124\n" + - "\fmcap_results\x18\x1c \x03(\v2\x11.livekit.McapInfoR\vmcapResults\x12\x14\n" + + "\rimage_results\x18\x14 \x03(\v2\x13.livekit.ImagesInfoR\fimageResults\x12\x14\n" + "\x05error\x18\t \x01(\tR\x05error\x12\x1d\n" + "\n" + "error_code\x18\x16 \x01(\x05R\terrorCode\x12\x18\n" + @@ -5766,17 +5592,7 @@ const file_livekit_egress_proto_rawDesc = "" + "imageCount\x12\x1d\n" + "\n" + "started_at\x18\x02 \x01(\x03R\tstartedAt\x12\x19\n" + - "\bended_at\x18\x03 \x01(\x03R\aendedAt\"\xcd\x01\n" + - "\bMcapInfo\x12\x1a\n" + - "\bfilename\x18\x01 \x01(\tR\bfilename\x12\x1d\n" + - "\n" + - "started_at\x18\x02 \x01(\x03R\tstartedAt\x12\x19\n" + - "\bended_at\x18\x03 \x01(\x03R\aendedAt\x12\x1a\n" + - "\bduration\x18\x04 \x01(\x03R\bduration\x12\x12\n" + - "\x04size\x18\x05 \x01(\x03R\x04size\x12\x1a\n" + - "\blocation\x18\x06 \x01(\tR\blocation\x12\x1f\n" + - "\vtrack_count\x18\a \x01(\x03R\n" + - "trackCount\"\x9a\x02\n" + + "\bended_at\x18\x03 \x01(\x03R\aendedAt\"\x9a\x02\n" + "\x15AutoParticipantEgress\x128\n" + "\x06preset\x18\x01 \x01(\x0e2\x1e.livekit.EncodingOptionsPresetH\x00R\x06preset\x126\n" + "\badvanced\x18\x02 \x01(\v2\x18.livekit.EncodingOptionsH\x00R\badvanced\x12=\n" + @@ -5987,7 +5803,7 @@ func file_livekit_egress_proto_rawDescGZIP() []byte { } var file_livekit_egress_proto_enumTypes = make([]protoimpl.EnumInfo, 11) -var file_livekit_egress_proto_msgTypes = make([]protoimpl.MessageInfo, 46) +var file_livekit_egress_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_livekit_egress_proto_goTypes = []any{ (AudioChannel)(0), // 0: livekit.AudioChannel (EncodingOptionsPreset)(0), // 1: livekit.EncodingOptionsPreset @@ -6015,42 +5831,40 @@ var file_livekit_egress_proto_goTypes = []any{ (*StreamOutput)(nil), // 23: livekit.StreamOutput (*SegmentedFileOutput)(nil), // 24: livekit.SegmentedFileOutput (*ImageOutput)(nil), // 25: livekit.ImageOutput - (*McapOutput)(nil), // 26: livekit.McapOutput - (*StorageConfig)(nil), // 27: livekit.StorageConfig - (*S3Upload)(nil), // 28: livekit.S3Upload - (*GCPUpload)(nil), // 29: livekit.GCPUpload - (*AzureBlobUpload)(nil), // 30: livekit.AzureBlobUpload - (*AliOSSUpload)(nil), // 31: livekit.AliOSSUpload - (*ProxyConfig)(nil), // 32: livekit.ProxyConfig - (*ListEgressRequest)(nil), // 33: livekit.ListEgressRequest - (*ListEgressResponse)(nil), // 34: livekit.ListEgressResponse - (*UpdateEgressRequest)(nil), // 35: livekit.UpdateEgressRequest - (*StopEgressRequest)(nil), // 36: livekit.StopEgressRequest - (*EgressInfo)(nil), // 37: livekit.EgressInfo - (*StreamInfo)(nil), // 38: livekit.StreamInfo - (*FileInfo)(nil), // 39: livekit.FileInfo - (*SegmentsInfo)(nil), // 40: livekit.SegmentsInfo - (*ImagesInfo)(nil), // 41: livekit.ImagesInfo - (*McapInfo)(nil), // 42: livekit.McapInfo - (*AutoParticipantEgress)(nil), // 43: livekit.AutoParticipantEgress - (*AutoTrackEgress)(nil), // 44: livekit.AutoTrackEgress - (*ExportReplayRequest)(nil), // 45: livekit.ExportReplayRequest - (*RoomCompositeEgressRequest)(nil), // 46: livekit.RoomCompositeEgressRequest - (*WebEgressRequest)(nil), // 47: livekit.WebEgressRequest - (*ParticipantEgressRequest)(nil), // 48: livekit.ParticipantEgressRequest - (*TrackCompositeEgressRequest)(nil), // 49: livekit.TrackCompositeEgressRequest - (*TrackEgressRequest)(nil), // 50: livekit.TrackEgressRequest - (*DirectFileOutput)(nil), // 51: livekit.DirectFileOutput - (*EncodedFileOutput)(nil), // 52: livekit.EncodedFileOutput - (*UpdateLayoutRequest)(nil), // 53: livekit.UpdateLayoutRequest - (*UpdateStreamRequest)(nil), // 54: livekit.UpdateStreamRequest - (*StreamInfoList)(nil), // 55: livekit.StreamInfoList - nil, // 56: livekit.S3Upload.MetadataEntry - (*WebhookConfig)(nil), // 57: livekit.WebhookConfig - (ParticipantInfo_Kind)(0), // 58: livekit.ParticipantInfo.Kind - (AudioCodec)(0), // 59: livekit.AudioCodec - (VideoCodec)(0), // 60: livekit.VideoCodec - (ImageCodec)(0), // 61: livekit.ImageCodec + (*StorageConfig)(nil), // 26: livekit.StorageConfig + (*S3Upload)(nil), // 27: livekit.S3Upload + (*GCPUpload)(nil), // 28: livekit.GCPUpload + (*AzureBlobUpload)(nil), // 29: livekit.AzureBlobUpload + (*AliOSSUpload)(nil), // 30: livekit.AliOSSUpload + (*ProxyConfig)(nil), // 31: livekit.ProxyConfig + (*ListEgressRequest)(nil), // 32: livekit.ListEgressRequest + (*ListEgressResponse)(nil), // 33: livekit.ListEgressResponse + (*UpdateEgressRequest)(nil), // 34: livekit.UpdateEgressRequest + (*StopEgressRequest)(nil), // 35: livekit.StopEgressRequest + (*EgressInfo)(nil), // 36: livekit.EgressInfo + (*StreamInfo)(nil), // 37: livekit.StreamInfo + (*FileInfo)(nil), // 38: livekit.FileInfo + (*SegmentsInfo)(nil), // 39: livekit.SegmentsInfo + (*ImagesInfo)(nil), // 40: livekit.ImagesInfo + (*AutoParticipantEgress)(nil), // 41: livekit.AutoParticipantEgress + (*AutoTrackEgress)(nil), // 42: livekit.AutoTrackEgress + (*ExportReplayRequest)(nil), // 43: livekit.ExportReplayRequest + (*RoomCompositeEgressRequest)(nil), // 44: livekit.RoomCompositeEgressRequest + (*WebEgressRequest)(nil), // 45: livekit.WebEgressRequest + (*ParticipantEgressRequest)(nil), // 46: livekit.ParticipantEgressRequest + (*TrackCompositeEgressRequest)(nil), // 47: livekit.TrackCompositeEgressRequest + (*TrackEgressRequest)(nil), // 48: livekit.TrackEgressRequest + (*DirectFileOutput)(nil), // 49: livekit.DirectFileOutput + (*EncodedFileOutput)(nil), // 50: livekit.EncodedFileOutput + (*UpdateLayoutRequest)(nil), // 51: livekit.UpdateLayoutRequest + (*UpdateStreamRequest)(nil), // 52: livekit.UpdateStreamRequest + (*StreamInfoList)(nil), // 53: livekit.StreamInfoList + nil, // 54: livekit.S3Upload.MetadataEntry + (*WebhookConfig)(nil), // 55: livekit.WebhookConfig + (ParticipantInfo_Kind)(0), // 56: livekit.ParticipantInfo.Kind + (AudioCodec)(0), // 57: livekit.AudioCodec + (VideoCodec)(0), // 58: livekit.VideoCodec + (ImageCodec)(0), // 59: livekit.ImageCodec } var file_livekit_egress_proto_depIdxs = []int32{ 12, // 0: livekit.StartEgressRequest.template:type_name -> livekit.TemplateSource @@ -6059,156 +5873,154 @@ var file_livekit_egress_proto_depIdxs = []int32{ 1, // 3: livekit.StartEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset 20, // 4: livekit.StartEgressRequest.advanced:type_name -> livekit.EncodingOptions 21, // 5: livekit.StartEgressRequest.outputs:type_name -> livekit.Output - 27, // 6: livekit.StartEgressRequest.storage:type_name -> livekit.StorageConfig - 57, // 7: livekit.StartEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 26, // 6: livekit.StartEgressRequest.storage:type_name -> livekit.StorageConfig + 55, // 7: livekit.StartEgressRequest.webhooks:type_name -> livekit.WebhookConfig 15, // 8: livekit.MediaSource.participant_video:type_name -> livekit.ParticipantVideo 16, // 9: livekit.MediaSource.audio:type_name -> livekit.AudioConfig 18, // 10: livekit.MediaSource.data:type_name -> livekit.DataConfig 17, // 11: livekit.AudioConfig.routes:type_name -> livekit.AudioRoute - 58, // 12: livekit.AudioRoute.participant_kind:type_name -> livekit.ParticipantInfo.Kind + 56, // 12: livekit.AudioRoute.participant_kind:type_name -> livekit.ParticipantInfo.Kind 0, // 13: livekit.AudioRoute.channel:type_name -> livekit.AudioChannel 19, // 14: livekit.DataConfig.selectors:type_name -> livekit.DataSelector - 59, // 15: livekit.EncodingOptions.audio_codec:type_name -> livekit.AudioCodec - 60, // 16: livekit.EncodingOptions.video_codec:type_name -> livekit.VideoCodec + 57, // 15: livekit.EncodingOptions.audio_codec:type_name -> livekit.AudioCodec + 58, // 16: livekit.EncodingOptions.video_codec:type_name -> livekit.VideoCodec 22, // 17: livekit.Output.file:type_name -> livekit.FileOutput 23, // 18: livekit.Output.stream:type_name -> livekit.StreamOutput 24, // 19: livekit.Output.segments:type_name -> livekit.SegmentedFileOutput 25, // 20: livekit.Output.images:type_name -> livekit.ImageOutput - 26, // 21: livekit.Output.mcap:type_name -> livekit.McapOutput - 27, // 22: livekit.Output.storage:type_name -> livekit.StorageConfig - 2, // 23: livekit.FileOutput.file_type:type_name -> livekit.EncodedFileType - 3, // 24: livekit.StreamOutput.protocol:type_name -> livekit.StreamProtocol - 4, // 25: livekit.SegmentedFileOutput.protocol:type_name -> livekit.SegmentedFileProtocol - 5, // 26: livekit.SegmentedFileOutput.filename_suffix:type_name -> livekit.SegmentedFileSuffix - 28, // 27: livekit.SegmentedFileOutput.s3:type_name -> livekit.S3Upload - 29, // 28: livekit.SegmentedFileOutput.gcp:type_name -> livekit.GCPUpload - 30, // 29: livekit.SegmentedFileOutput.azure:type_name -> livekit.AzureBlobUpload - 31, // 30: livekit.SegmentedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 6, // 31: livekit.ImageOutput.filename_suffix:type_name -> livekit.ImageFileSuffix - 61, // 32: livekit.ImageOutput.image_codec:type_name -> livekit.ImageCodec - 28, // 33: livekit.ImageOutput.s3:type_name -> livekit.S3Upload - 29, // 34: livekit.ImageOutput.gcp:type_name -> livekit.GCPUpload - 30, // 35: livekit.ImageOutput.azure:type_name -> livekit.AzureBlobUpload - 31, // 36: livekit.ImageOutput.aliOSS:type_name -> livekit.AliOSSUpload - 28, // 37: livekit.StorageConfig.s3:type_name -> livekit.S3Upload - 29, // 38: livekit.StorageConfig.gcp:type_name -> livekit.GCPUpload - 30, // 39: livekit.StorageConfig.azure:type_name -> livekit.AzureBlobUpload - 31, // 40: livekit.StorageConfig.ali_oss:type_name -> livekit.AliOSSUpload - 56, // 41: livekit.S3Upload.metadata:type_name -> livekit.S3Upload.MetadataEntry - 32, // 42: livekit.S3Upload.proxy:type_name -> livekit.ProxyConfig - 32, // 43: livekit.GCPUpload.proxy:type_name -> livekit.ProxyConfig - 37, // 44: livekit.ListEgressResponse.items:type_name -> livekit.EgressInfo - 7, // 45: livekit.EgressInfo.source_type:type_name -> livekit.EgressSourceType - 8, // 46: livekit.EgressInfo.status:type_name -> livekit.EgressStatus - 11, // 47: livekit.EgressInfo.egress:type_name -> livekit.StartEgressRequest - 45, // 48: livekit.EgressInfo.replay:type_name -> livekit.ExportReplayRequest - 46, // 49: livekit.EgressInfo.room_composite:type_name -> livekit.RoomCompositeEgressRequest - 47, // 50: livekit.EgressInfo.web:type_name -> livekit.WebEgressRequest - 48, // 51: livekit.EgressInfo.participant:type_name -> livekit.ParticipantEgressRequest - 49, // 52: livekit.EgressInfo.track_composite:type_name -> livekit.TrackCompositeEgressRequest - 50, // 53: livekit.EgressInfo.track:type_name -> livekit.TrackEgressRequest - 38, // 54: livekit.EgressInfo.stream_results:type_name -> livekit.StreamInfo - 39, // 55: livekit.EgressInfo.file_results:type_name -> livekit.FileInfo - 40, // 56: livekit.EgressInfo.segment_results:type_name -> livekit.SegmentsInfo - 41, // 57: livekit.EgressInfo.image_results:type_name -> livekit.ImagesInfo - 42, // 58: livekit.EgressInfo.mcap_results:type_name -> livekit.McapInfo - 55, // 59: livekit.EgressInfo.stream:type_name -> livekit.StreamInfoList - 39, // 60: livekit.EgressInfo.file:type_name -> livekit.FileInfo - 40, // 61: livekit.EgressInfo.segments:type_name -> livekit.SegmentsInfo - 10, // 62: livekit.StreamInfo.status:type_name -> livekit.StreamInfo.Status - 1, // 63: livekit.AutoParticipantEgress.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 64: livekit.AutoParticipantEgress.advanced:type_name -> livekit.EncodingOptions - 52, // 65: livekit.AutoParticipantEgress.file_outputs:type_name -> livekit.EncodedFileOutput - 24, // 66: livekit.AutoParticipantEgress.segment_outputs:type_name -> livekit.SegmentedFileOutput - 28, // 67: livekit.AutoTrackEgress.s3:type_name -> livekit.S3Upload - 29, // 68: livekit.AutoTrackEgress.gcp:type_name -> livekit.GCPUpload - 30, // 69: livekit.AutoTrackEgress.azure:type_name -> livekit.AzureBlobUpload - 31, // 70: livekit.AutoTrackEgress.aliOSS:type_name -> livekit.AliOSSUpload - 12, // 71: livekit.ExportReplayRequest.template:type_name -> livekit.TemplateSource - 13, // 72: livekit.ExportReplayRequest.web:type_name -> livekit.WebSource - 14, // 73: livekit.ExportReplayRequest.media:type_name -> livekit.MediaSource - 1, // 74: livekit.ExportReplayRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 75: livekit.ExportReplayRequest.advanced:type_name -> livekit.EncodingOptions - 21, // 76: livekit.ExportReplayRequest.outputs:type_name -> livekit.Output - 27, // 77: livekit.ExportReplayRequest.storage:type_name -> livekit.StorageConfig - 57, // 78: livekit.ExportReplayRequest.webhooks:type_name -> livekit.WebhookConfig - 9, // 79: livekit.RoomCompositeEgressRequest.audio_mixing:type_name -> livekit.AudioMixing - 52, // 80: livekit.RoomCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput - 23, // 81: livekit.RoomCompositeEgressRequest.stream:type_name -> livekit.StreamOutput - 24, // 82: livekit.RoomCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 1, // 83: livekit.RoomCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 84: livekit.RoomCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions - 52, // 85: livekit.RoomCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 86: livekit.RoomCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 87: livekit.RoomCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 88: livekit.RoomCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 57, // 89: livekit.RoomCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 52, // 90: livekit.WebEgressRequest.file:type_name -> livekit.EncodedFileOutput - 23, // 91: livekit.WebEgressRequest.stream:type_name -> livekit.StreamOutput - 24, // 92: livekit.WebEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 1, // 93: livekit.WebEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 94: livekit.WebEgressRequest.advanced:type_name -> livekit.EncodingOptions - 52, // 95: livekit.WebEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 96: livekit.WebEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 97: livekit.WebEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 98: livekit.WebEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 57, // 99: livekit.WebEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 1, // 100: livekit.ParticipantEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 101: livekit.ParticipantEgressRequest.advanced:type_name -> livekit.EncodingOptions - 52, // 102: livekit.ParticipantEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 103: livekit.ParticipantEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 104: livekit.ParticipantEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 105: livekit.ParticipantEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 57, // 106: livekit.ParticipantEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 52, // 107: livekit.TrackCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput - 23, // 108: livekit.TrackCompositeEgressRequest.stream:type_name -> livekit.StreamOutput - 24, // 109: livekit.TrackCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput - 1, // 110: livekit.TrackCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset - 20, // 111: livekit.TrackCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions - 52, // 112: livekit.TrackCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput - 23, // 113: livekit.TrackCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput - 24, // 114: livekit.TrackCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput - 25, // 115: livekit.TrackCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput - 57, // 116: livekit.TrackCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 51, // 117: livekit.TrackEgressRequest.file:type_name -> livekit.DirectFileOutput - 57, // 118: livekit.TrackEgressRequest.webhooks:type_name -> livekit.WebhookConfig - 28, // 119: livekit.DirectFileOutput.s3:type_name -> livekit.S3Upload - 29, // 120: livekit.DirectFileOutput.gcp:type_name -> livekit.GCPUpload - 30, // 121: livekit.DirectFileOutput.azure:type_name -> livekit.AzureBlobUpload - 31, // 122: livekit.DirectFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 2, // 123: livekit.EncodedFileOutput.file_type:type_name -> livekit.EncodedFileType - 28, // 124: livekit.EncodedFileOutput.s3:type_name -> livekit.S3Upload - 29, // 125: livekit.EncodedFileOutput.gcp:type_name -> livekit.GCPUpload - 30, // 126: livekit.EncodedFileOutput.azure:type_name -> livekit.AzureBlobUpload - 31, // 127: livekit.EncodedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload - 38, // 128: livekit.StreamInfoList.info:type_name -> livekit.StreamInfo - 11, // 129: livekit.Egress.StartEgress:input_type -> livekit.StartEgressRequest - 35, // 130: livekit.Egress.UpdateEgress:input_type -> livekit.UpdateEgressRequest - 33, // 131: livekit.Egress.ListEgress:input_type -> livekit.ListEgressRequest - 36, // 132: livekit.Egress.StopEgress:input_type -> livekit.StopEgressRequest - 46, // 133: livekit.Egress.StartRoomCompositeEgress:input_type -> livekit.RoomCompositeEgressRequest - 47, // 134: livekit.Egress.StartWebEgress:input_type -> livekit.WebEgressRequest - 48, // 135: livekit.Egress.StartParticipantEgress:input_type -> livekit.ParticipantEgressRequest - 49, // 136: livekit.Egress.StartTrackCompositeEgress:input_type -> livekit.TrackCompositeEgressRequest - 50, // 137: livekit.Egress.StartTrackEgress:input_type -> livekit.TrackEgressRequest - 53, // 138: livekit.Egress.UpdateLayout:input_type -> livekit.UpdateLayoutRequest - 54, // 139: livekit.Egress.UpdateStream:input_type -> livekit.UpdateStreamRequest - 37, // 140: livekit.Egress.StartEgress:output_type -> livekit.EgressInfo - 37, // 141: livekit.Egress.UpdateEgress:output_type -> livekit.EgressInfo - 34, // 142: livekit.Egress.ListEgress:output_type -> livekit.ListEgressResponse - 37, // 143: livekit.Egress.StopEgress:output_type -> livekit.EgressInfo - 37, // 144: livekit.Egress.StartRoomCompositeEgress:output_type -> livekit.EgressInfo - 37, // 145: livekit.Egress.StartWebEgress:output_type -> livekit.EgressInfo - 37, // 146: livekit.Egress.StartParticipantEgress:output_type -> livekit.EgressInfo - 37, // 147: livekit.Egress.StartTrackCompositeEgress:output_type -> livekit.EgressInfo - 37, // 148: livekit.Egress.StartTrackEgress:output_type -> livekit.EgressInfo - 37, // 149: livekit.Egress.UpdateLayout:output_type -> livekit.EgressInfo - 37, // 150: livekit.Egress.UpdateStream:output_type -> livekit.EgressInfo - 140, // [140:151] is the sub-list for method output_type - 129, // [129:140] is the sub-list for method input_type - 129, // [129:129] is the sub-list for extension type_name - 129, // [129:129] is the sub-list for extension extendee - 0, // [0:129] is the sub-list for field type_name + 26, // 21: livekit.Output.storage:type_name -> livekit.StorageConfig + 2, // 22: livekit.FileOutput.file_type:type_name -> livekit.EncodedFileType + 3, // 23: livekit.StreamOutput.protocol:type_name -> livekit.StreamProtocol + 4, // 24: livekit.SegmentedFileOutput.protocol:type_name -> livekit.SegmentedFileProtocol + 5, // 25: livekit.SegmentedFileOutput.filename_suffix:type_name -> livekit.SegmentedFileSuffix + 27, // 26: livekit.SegmentedFileOutput.s3:type_name -> livekit.S3Upload + 28, // 27: livekit.SegmentedFileOutput.gcp:type_name -> livekit.GCPUpload + 29, // 28: livekit.SegmentedFileOutput.azure:type_name -> livekit.AzureBlobUpload + 30, // 29: livekit.SegmentedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 6, // 30: livekit.ImageOutput.filename_suffix:type_name -> livekit.ImageFileSuffix + 59, // 31: livekit.ImageOutput.image_codec:type_name -> livekit.ImageCodec + 27, // 32: livekit.ImageOutput.s3:type_name -> livekit.S3Upload + 28, // 33: livekit.ImageOutput.gcp:type_name -> livekit.GCPUpload + 29, // 34: livekit.ImageOutput.azure:type_name -> livekit.AzureBlobUpload + 30, // 35: livekit.ImageOutput.aliOSS:type_name -> livekit.AliOSSUpload + 27, // 36: livekit.StorageConfig.s3:type_name -> livekit.S3Upload + 28, // 37: livekit.StorageConfig.gcp:type_name -> livekit.GCPUpload + 29, // 38: livekit.StorageConfig.azure:type_name -> livekit.AzureBlobUpload + 30, // 39: livekit.StorageConfig.ali_oss:type_name -> livekit.AliOSSUpload + 54, // 40: livekit.S3Upload.metadata:type_name -> livekit.S3Upload.MetadataEntry + 31, // 41: livekit.S3Upload.proxy:type_name -> livekit.ProxyConfig + 31, // 42: livekit.GCPUpload.proxy:type_name -> livekit.ProxyConfig + 36, // 43: livekit.ListEgressResponse.items:type_name -> livekit.EgressInfo + 7, // 44: livekit.EgressInfo.source_type:type_name -> livekit.EgressSourceType + 8, // 45: livekit.EgressInfo.status:type_name -> livekit.EgressStatus + 11, // 46: livekit.EgressInfo.egress:type_name -> livekit.StartEgressRequest + 43, // 47: livekit.EgressInfo.replay:type_name -> livekit.ExportReplayRequest + 44, // 48: livekit.EgressInfo.room_composite:type_name -> livekit.RoomCompositeEgressRequest + 45, // 49: livekit.EgressInfo.web:type_name -> livekit.WebEgressRequest + 46, // 50: livekit.EgressInfo.participant:type_name -> livekit.ParticipantEgressRequest + 47, // 51: livekit.EgressInfo.track_composite:type_name -> livekit.TrackCompositeEgressRequest + 48, // 52: livekit.EgressInfo.track:type_name -> livekit.TrackEgressRequest + 37, // 53: livekit.EgressInfo.stream_results:type_name -> livekit.StreamInfo + 38, // 54: livekit.EgressInfo.file_results:type_name -> livekit.FileInfo + 39, // 55: livekit.EgressInfo.segment_results:type_name -> livekit.SegmentsInfo + 40, // 56: livekit.EgressInfo.image_results:type_name -> livekit.ImagesInfo + 53, // 57: livekit.EgressInfo.stream:type_name -> livekit.StreamInfoList + 38, // 58: livekit.EgressInfo.file:type_name -> livekit.FileInfo + 39, // 59: livekit.EgressInfo.segments:type_name -> livekit.SegmentsInfo + 10, // 60: livekit.StreamInfo.status:type_name -> livekit.StreamInfo.Status + 1, // 61: livekit.AutoParticipantEgress.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 62: livekit.AutoParticipantEgress.advanced:type_name -> livekit.EncodingOptions + 50, // 63: livekit.AutoParticipantEgress.file_outputs:type_name -> livekit.EncodedFileOutput + 24, // 64: livekit.AutoParticipantEgress.segment_outputs:type_name -> livekit.SegmentedFileOutput + 27, // 65: livekit.AutoTrackEgress.s3:type_name -> livekit.S3Upload + 28, // 66: livekit.AutoTrackEgress.gcp:type_name -> livekit.GCPUpload + 29, // 67: livekit.AutoTrackEgress.azure:type_name -> livekit.AzureBlobUpload + 30, // 68: livekit.AutoTrackEgress.aliOSS:type_name -> livekit.AliOSSUpload + 12, // 69: livekit.ExportReplayRequest.template:type_name -> livekit.TemplateSource + 13, // 70: livekit.ExportReplayRequest.web:type_name -> livekit.WebSource + 14, // 71: livekit.ExportReplayRequest.media:type_name -> livekit.MediaSource + 1, // 72: livekit.ExportReplayRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 73: livekit.ExportReplayRequest.advanced:type_name -> livekit.EncodingOptions + 21, // 74: livekit.ExportReplayRequest.outputs:type_name -> livekit.Output + 26, // 75: livekit.ExportReplayRequest.storage:type_name -> livekit.StorageConfig + 55, // 76: livekit.ExportReplayRequest.webhooks:type_name -> livekit.WebhookConfig + 9, // 77: livekit.RoomCompositeEgressRequest.audio_mixing:type_name -> livekit.AudioMixing + 50, // 78: livekit.RoomCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 79: livekit.RoomCompositeEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 80: livekit.RoomCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 81: livekit.RoomCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 82: livekit.RoomCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 83: livekit.RoomCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 84: livekit.RoomCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 85: livekit.RoomCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 86: livekit.RoomCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 87: livekit.RoomCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 50, // 88: livekit.WebEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 89: livekit.WebEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 90: livekit.WebEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 91: livekit.WebEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 92: livekit.WebEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 93: livekit.WebEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 94: livekit.WebEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 95: livekit.WebEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 96: livekit.WebEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 97: livekit.WebEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 1, // 98: livekit.ParticipantEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 99: livekit.ParticipantEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 100: livekit.ParticipantEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 101: livekit.ParticipantEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 102: livekit.ParticipantEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 103: livekit.ParticipantEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 104: livekit.ParticipantEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 50, // 105: livekit.TrackCompositeEgressRequest.file:type_name -> livekit.EncodedFileOutput + 23, // 106: livekit.TrackCompositeEgressRequest.stream:type_name -> livekit.StreamOutput + 24, // 107: livekit.TrackCompositeEgressRequest.segments:type_name -> livekit.SegmentedFileOutput + 1, // 108: livekit.TrackCompositeEgressRequest.preset:type_name -> livekit.EncodingOptionsPreset + 20, // 109: livekit.TrackCompositeEgressRequest.advanced:type_name -> livekit.EncodingOptions + 50, // 110: livekit.TrackCompositeEgressRequest.file_outputs:type_name -> livekit.EncodedFileOutput + 23, // 111: livekit.TrackCompositeEgressRequest.stream_outputs:type_name -> livekit.StreamOutput + 24, // 112: livekit.TrackCompositeEgressRequest.segment_outputs:type_name -> livekit.SegmentedFileOutput + 25, // 113: livekit.TrackCompositeEgressRequest.image_outputs:type_name -> livekit.ImageOutput + 55, // 114: livekit.TrackCompositeEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 49, // 115: livekit.TrackEgressRequest.file:type_name -> livekit.DirectFileOutput + 55, // 116: livekit.TrackEgressRequest.webhooks:type_name -> livekit.WebhookConfig + 27, // 117: livekit.DirectFileOutput.s3:type_name -> livekit.S3Upload + 28, // 118: livekit.DirectFileOutput.gcp:type_name -> livekit.GCPUpload + 29, // 119: livekit.DirectFileOutput.azure:type_name -> livekit.AzureBlobUpload + 30, // 120: livekit.DirectFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 2, // 121: livekit.EncodedFileOutput.file_type:type_name -> livekit.EncodedFileType + 27, // 122: livekit.EncodedFileOutput.s3:type_name -> livekit.S3Upload + 28, // 123: livekit.EncodedFileOutput.gcp:type_name -> livekit.GCPUpload + 29, // 124: livekit.EncodedFileOutput.azure:type_name -> livekit.AzureBlobUpload + 30, // 125: livekit.EncodedFileOutput.aliOSS:type_name -> livekit.AliOSSUpload + 37, // 126: livekit.StreamInfoList.info:type_name -> livekit.StreamInfo + 11, // 127: livekit.Egress.StartEgress:input_type -> livekit.StartEgressRequest + 34, // 128: livekit.Egress.UpdateEgress:input_type -> livekit.UpdateEgressRequest + 32, // 129: livekit.Egress.ListEgress:input_type -> livekit.ListEgressRequest + 35, // 130: livekit.Egress.StopEgress:input_type -> livekit.StopEgressRequest + 44, // 131: livekit.Egress.StartRoomCompositeEgress:input_type -> livekit.RoomCompositeEgressRequest + 45, // 132: livekit.Egress.StartWebEgress:input_type -> livekit.WebEgressRequest + 46, // 133: livekit.Egress.StartParticipantEgress:input_type -> livekit.ParticipantEgressRequest + 47, // 134: livekit.Egress.StartTrackCompositeEgress:input_type -> livekit.TrackCompositeEgressRequest + 48, // 135: livekit.Egress.StartTrackEgress:input_type -> livekit.TrackEgressRequest + 51, // 136: livekit.Egress.UpdateLayout:input_type -> livekit.UpdateLayoutRequest + 52, // 137: livekit.Egress.UpdateStream:input_type -> livekit.UpdateStreamRequest + 36, // 138: livekit.Egress.StartEgress:output_type -> livekit.EgressInfo + 36, // 139: livekit.Egress.UpdateEgress:output_type -> livekit.EgressInfo + 33, // 140: livekit.Egress.ListEgress:output_type -> livekit.ListEgressResponse + 36, // 141: livekit.Egress.StopEgress:output_type -> livekit.EgressInfo + 36, // 142: livekit.Egress.StartRoomCompositeEgress:output_type -> livekit.EgressInfo + 36, // 143: livekit.Egress.StartWebEgress:output_type -> livekit.EgressInfo + 36, // 144: livekit.Egress.StartParticipantEgress:output_type -> livekit.EgressInfo + 36, // 145: livekit.Egress.StartTrackCompositeEgress:output_type -> livekit.EgressInfo + 36, // 146: livekit.Egress.StartTrackEgress:output_type -> livekit.EgressInfo + 36, // 147: livekit.Egress.UpdateLayout:output_type -> livekit.EgressInfo + 36, // 148: livekit.Egress.UpdateStream:output_type -> livekit.EgressInfo + 138, // [138:149] is the sub-list for method output_type + 127, // [127:138] is the sub-list for method input_type + 127, // [127:127] is the sub-list for extension type_name + 127, // [127:127] is the sub-list for extension extendee + 0, // [0:127] is the sub-list for field type_name } func init() { file_livekit_egress_proto_init() } @@ -6243,7 +6055,6 @@ func file_livekit_egress_proto_init() { (*Output_Stream)(nil), (*Output_Segments)(nil), (*Output_Images)(nil), - (*Output_Mcap)(nil), } file_livekit_egress_proto_msgTypes[13].OneofWrappers = []any{ (*SegmentedFileOutput_S3)(nil), @@ -6257,13 +6068,13 @@ func file_livekit_egress_proto_init() { (*ImageOutput_Azure)(nil), (*ImageOutput_AliOSS)(nil), } - file_livekit_egress_proto_msgTypes[16].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[15].OneofWrappers = []any{ (*StorageConfig_S3)(nil), (*StorageConfig_Gcp)(nil), (*StorageConfig_Azure)(nil), (*StorageConfig_AliOss)(nil), } - file_livekit_egress_proto_msgTypes[26].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[25].OneofWrappers = []any{ (*EgressInfo_Egress)(nil), (*EgressInfo_Replay)(nil), (*EgressInfo_RoomComposite)(nil), @@ -6275,59 +6086,59 @@ func file_livekit_egress_proto_init() { (*EgressInfo_File)(nil), (*EgressInfo_Segments)(nil), } - file_livekit_egress_proto_msgTypes[32].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[30].OneofWrappers = []any{ (*AutoParticipantEgress_Preset)(nil), (*AutoParticipantEgress_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[33].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[31].OneofWrappers = []any{ (*AutoTrackEgress_S3)(nil), (*AutoTrackEgress_Gcp)(nil), (*AutoTrackEgress_Azure)(nil), (*AutoTrackEgress_AliOSS)(nil), } - file_livekit_egress_proto_msgTypes[34].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[32].OneofWrappers = []any{ (*ExportReplayRequest_Template)(nil), (*ExportReplayRequest_Web)(nil), (*ExportReplayRequest_Media)(nil), (*ExportReplayRequest_Preset)(nil), (*ExportReplayRequest_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[35].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[33].OneofWrappers = []any{ (*RoomCompositeEgressRequest_File)(nil), (*RoomCompositeEgressRequest_Stream)(nil), (*RoomCompositeEgressRequest_Segments)(nil), (*RoomCompositeEgressRequest_Preset)(nil), (*RoomCompositeEgressRequest_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[36].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[34].OneofWrappers = []any{ (*WebEgressRequest_File)(nil), (*WebEgressRequest_Stream)(nil), (*WebEgressRequest_Segments)(nil), (*WebEgressRequest_Preset)(nil), (*WebEgressRequest_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[37].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[35].OneofWrappers = []any{ (*ParticipantEgressRequest_Preset)(nil), (*ParticipantEgressRequest_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[38].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[36].OneofWrappers = []any{ (*TrackCompositeEgressRequest_File)(nil), (*TrackCompositeEgressRequest_Stream)(nil), (*TrackCompositeEgressRequest_Segments)(nil), (*TrackCompositeEgressRequest_Preset)(nil), (*TrackCompositeEgressRequest_Advanced)(nil), } - file_livekit_egress_proto_msgTypes[39].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[37].OneofWrappers = []any{ (*TrackEgressRequest_File)(nil), (*TrackEgressRequest_WebsocketUrl)(nil), } - file_livekit_egress_proto_msgTypes[40].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[38].OneofWrappers = []any{ (*DirectFileOutput_S3)(nil), (*DirectFileOutput_Gcp)(nil), (*DirectFileOutput_Azure)(nil), (*DirectFileOutput_AliOSS)(nil), } - file_livekit_egress_proto_msgTypes[41].OneofWrappers = []any{ + file_livekit_egress_proto_msgTypes[39].OneofWrappers = []any{ (*EncodedFileOutput_S3)(nil), (*EncodedFileOutput_Gcp)(nil), (*EncodedFileOutput_Azure)(nil), @@ -6339,7 +6150,7 @@ func file_livekit_egress_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_livekit_egress_proto_rawDesc), len(file_livekit_egress_proto_rawDesc)), NumEnums: 11, - NumMessages: 46, + NumMessages: 44, NumExtensions: 0, NumServices: 1, }, diff --git a/livekit/livekit_egress.twirp.go b/livekit/livekit_egress.twirp.go index e9d314443..8aca39951 100644 --- a/livekit/livekit_egress.twirp.go +++ b/livekit/livekit_egress.twirp.go @@ -3312,276 +3312,271 @@ func (s *egressServer) PathPrefix() string { } var twirpFileDescriptor1 = []byte{ - // 4324 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0x1c, 0x5b, - 0x56, 0xae, 0xfe, 0xee, 0xd3, 0x1f, 0x2e, 0x5f, 0x3b, 0x7e, 0x1d, 0x27, 0xef, 0x25, 0xd3, 0xe1, - 0xe5, 0xc3, 0xcf, 0xe3, 0x18, 0x3b, 0x93, 0x97, 0xc9, 0x30, 0x6f, 0x68, 0xbb, 0xcb, 0x71, 0x4f, - 0x6c, 0xb7, 0xa9, 0x6e, 0xbf, 0x3c, 0x90, 0xa0, 0x54, 0xae, 0xba, 0xb6, 0x4b, 0xee, 0xae, 0xea, - 0xa9, 0xaa, 0x76, 0xe2, 0xf9, 0x05, 0x03, 0x0b, 0x40, 0x20, 0x81, 0x14, 0x09, 0xc1, 0x02, 0xb1, - 0x40, 0xb3, 0x62, 0xc3, 0x96, 0x3d, 0x20, 0x24, 0x10, 0x62, 0xcf, 0x12, 0x05, 0x8d, 0x58, 0xb0, - 0x47, 0xf7, 0xa3, 0xaa, 0x6e, 0x95, 0xcb, 0x4e, 0x3b, 0x0e, 0x6f, 0x36, 0xb3, 0x72, 0xdf, 0x73, - 0xce, 0xbd, 0x75, 0xee, 0x3d, 0x1f, 0xf7, 0x9c, 0x73, 0x8f, 0x61, 0x6e, 0x60, 0x9d, 0xe2, 0x13, - 0xcb, 0xd7, 0xf0, 0x91, 0x8b, 0x3d, 0x6f, 0x79, 0xe4, 0x3a, 0xbe, 0x83, 0x8a, 0x1c, 0xba, 0x10, - 0xa2, 0x87, 0x8e, 0x89, 0x07, 0x1c, 0xbd, 0x30, 0x37, 0x70, 0x8e, 0x8e, 0xb0, 0xfb, 0xd8, 0x19, - 0xf9, 0x96, 0x63, 0x73, 0x68, 0xf3, 0x3f, 0xb2, 0x80, 0x7a, 0xbe, 0xee, 0xfa, 0x0a, 0x5d, 0x4a, - 0xc5, 0x3f, 0x19, 0x63, 0xcf, 0x47, 0xb7, 0xa0, 0xec, 0x3a, 0xce, 0x50, 0xb3, 0xf5, 0x21, 0x6e, - 0x48, 0x77, 0xa5, 0x87, 0x65, 0xb5, 0x44, 0x00, 0xbb, 0xfa, 0x10, 0xa3, 0xef, 0x41, 0xc9, 0xc7, - 0xc3, 0xd1, 0x40, 0xf7, 0x71, 0x23, 0x73, 0x57, 0x7a, 0x58, 0x59, 0xfd, 0x64, 0x99, 0x7f, 0x72, - 0xb9, 0xcf, 0x11, 0x3d, 0x67, 0xec, 0x1a, 0x78, 0x6b, 0x4a, 0x0d, 0x49, 0xd1, 0x7d, 0xc8, 0xbe, - 0xc6, 0x07, 0x8d, 0x2c, 0x9d, 0x81, 0xc2, 0x19, 0xaf, 0xf0, 0x41, 0x48, 0x4c, 0x08, 0xd0, 0x12, - 0xe4, 0x87, 0xd8, 0xb4, 0xf4, 0x46, 0x8e, 0x52, 0xce, 0x85, 0x94, 0x3b, 0x04, 0x1a, 0xd2, 0x32, - 0x22, 0xf4, 0x0c, 0x0a, 0x23, 0x17, 0x7b, 0xd8, 0x6f, 0xe4, 0xef, 0x4a, 0x0f, 0xeb, 0xab, 0x9f, - 0x85, 0xe4, 0x8a, 0x6d, 0x38, 0xa6, 0x65, 0x1f, 0x75, 0xd9, 0x86, 0xf7, 0x28, 0xd5, 0x96, 0xa4, - 0x72, 0x7a, 0xf4, 0x14, 0x4a, 0xba, 0x79, 0xaa, 0xdb, 0x06, 0x36, 0x1b, 0x05, 0xfa, 0xa9, 0xc6, - 0x45, 0x73, 0xb7, 0x24, 0x35, 0xa4, 0x45, 0x8f, 0xa0, 0xe8, 0x8c, 0xfd, 0xd1, 0xd8, 0xf7, 0x1a, - 0xc5, 0xbb, 0xd9, 0x87, 0x95, 0xd5, 0xe9, 0x70, 0x5a, 0x97, 0xc2, 0xd5, 0x00, 0x8f, 0x56, 0xa0, - 0xe8, 0xf9, 0x8e, 0xab, 0x1f, 0xe1, 0x46, 0x89, 0x7e, 0x61, 0x3e, 0x24, 0xed, 0x31, 0xf8, 0x86, - 0x63, 0x1f, 0x5a, 0x47, 0x6a, 0x40, 0x86, 0x56, 0xa1, 0xf4, 0x1a, 0x1f, 0x1c, 0x3b, 0xce, 0x89, - 0xd7, 0x28, 0xd3, 0xd5, 0xe7, 0xc5, 0x93, 0x22, 0x08, 0x3e, 0x25, 0xa4, 0x5b, 0x2f, 0x41, 0xc1, - 0xa3, 0xa7, 0xb2, 0x0e, 0x50, 0xc2, 0x9c, 0xf3, 0xe6, 0x1f, 0x4a, 0x50, 0x8f, 0x4b, 0x03, 0xcd, - 0x43, 0x61, 0xa0, 0x9f, 0x39, 0x63, 0x9f, 0x8b, 0x94, 0x8f, 0xd0, 0xa7, 0x00, 0xfa, 0xd8, 0xb4, - 0x1c, 0xcd, 0xb1, 0x07, 0x67, 0x54, 0xa4, 0x25, 0xb5, 0x4c, 0x21, 0x5d, 0x7b, 0x70, 0x46, 0xd0, - 0xa7, 0x96, 0x89, 0x39, 0x3a, 0xcb, 0xd0, 0x14, 0x42, 0xd1, 0xf7, 0x61, 0xda, 0x18, 0x7b, 0xbe, - 0x33, 0xd4, 0x0e, 0x74, 0x0f, 0x6b, 0x63, 0x77, 0x40, 0x25, 0x57, 0x56, 0x6b, 0x0c, 0xbc, 0xae, - 0x7b, 0x78, 0xdf, 0x1d, 0x34, 0x7f, 0x5f, 0x82, 0x72, 0x28, 0x6c, 0x24, 0x43, 0x96, 0x50, 0x32, - 0x46, 0xc8, 0xcf, 0x6b, 0x72, 0xb1, 0x04, 0x48, 0x7f, 0xad, 0x5b, 0xbe, 0xe6, 0x11, 0x6d, 0xd6, - 0x3c, 0xeb, 0xc8, 0xd6, 0x19, 0x23, 0x25, 0x55, 0xa6, 0x18, 0xaa, 0xe6, 0x3d, 0x0a, 0x6f, 0xfe, - 0x42, 0x82, 0x8a, 0xa0, 0x4e, 0xe8, 0x19, 0xd4, 0xd9, 0xe2, 0xbe, 0xab, 0x1b, 0x27, 0x9a, 0x65, - 0x32, 0xc6, 0xd6, 0xe5, 0xb7, 0xef, 0x96, 0xaa, 0x14, 0xd3, 0x27, 0x88, 0x4e, 0x7b, 0x6b, 0x4a, - 0x15, 0xc7, 0x26, 0xda, 0x82, 0x99, 0x91, 0xee, 0xfa, 0x96, 0x61, 0x8d, 0x74, 0xdb, 0xd7, 0x28, - 0x8e, 0x5b, 0xc5, 0xcd, 0x50, 0x72, 0x7b, 0x11, 0xc5, 0xd7, 0x84, 0x60, 0x6b, 0x4a, 0x95, 0x47, - 0x09, 0x18, 0x5a, 0x84, 0x3c, 0xdd, 0x2d, 0xb7, 0x90, 0x48, 0xef, 0x5b, 0x04, 0xca, 0xa5, 0xce, - 0x48, 0xd0, 0x03, 0xc8, 0x99, 0xba, 0x1f, 0x98, 0xc8, 0x6c, 0x48, 0xda, 0xd6, 0x7d, 0x9d, 0x53, - 0x52, 0x82, 0xf5, 0x22, 0xe4, 0x29, 0x4b, 0xcd, 0xdf, 0x03, 0x39, 0xc9, 0x05, 0x5a, 0x80, 0x92, - 0x65, 0x62, 0xdb, 0xb7, 0xfc, 0xb3, 0xc0, 0xc8, 0x83, 0x31, 0x5a, 0x86, 0xd9, 0x91, 0x8b, 0x0f, - 0xb1, 0xab, 0x79, 0x86, 0x8b, 0xb1, 0xad, 0x79, 0xc7, 0xba, 0x8b, 0xb9, 0x58, 0x66, 0x18, 0xaa, - 0x47, 0x31, 0x3d, 0x82, 0x68, 0x3e, 0x87, 0x8a, 0xc0, 0x27, 0xfa, 0x02, 0x0a, 0xae, 0x33, 0xf6, - 0xb1, 0xd7, 0x90, 0xa8, 0x16, 0xcf, 0xc6, 0x77, 0xa3, 0x12, 0x9c, 0xca, 0x49, 0x9a, 0xff, 0x23, - 0x01, 0x44, 0x60, 0xf4, 0x10, 0x4a, 0x09, 0x31, 0x54, 0xde, 0xbe, 0x5b, 0x2a, 0xfa, 0xa1, 0x04, - 0xf8, 0x4f, 0x13, 0xad, 0xc1, 0x9c, 0x78, 0xf8, 0xe1, 0x66, 0x08, 0x97, 0xe5, 0xad, 0x29, 0x75, - 0x56, 0xc0, 0x76, 0x82, 0x9d, 0xfd, 0x18, 0xc4, 0xb3, 0xd7, 0x4e, 0x2c, 0xdb, 0xa4, 0x47, 0x5e, - 0x5f, 0xfd, 0x34, 0x4d, 0x60, 0x1d, 0xfb, 0xd0, 0x59, 0x7e, 0x69, 0xd9, 0xe6, 0xd6, 0x94, 0x3a, - 0x2d, 0x4c, 0x24, 0x20, 0xf4, 0x18, 0x8a, 0xc6, 0xb1, 0x6e, 0xdb, 0x98, 0xa9, 0x5a, 0x7d, 0xf5, - 0x46, 0x42, 0x6a, 0x0c, 0xa9, 0x06, 0x54, 0x44, 0x1e, 0x43, 0xdd, 0x37, 0x8e, 0x9b, 0x2d, 0x80, - 0x48, 0x58, 0x68, 0x0d, 0xca, 0x1e, 0x1e, 0x60, 0xc3, 0x77, 0xdc, 0xe0, 0xc4, 0x6e, 0xc4, 0x84, - 0xda, 0xe3, 0x58, 0x35, 0xa2, 0x23, 0x16, 0x5e, 0x15, 0x71, 0xff, 0xdf, 0x07, 0x37, 0x0f, 0x79, - 0xdf, 0x19, 0x59, 0x06, 0x3d, 0x2d, 0x42, 0xc5, 0x86, 0xd1, 0x9e, 0xfe, 0x35, 0x0b, 0xd3, 0x09, - 0xcf, 0x89, 0xe6, 0x20, 0xff, 0xda, 0x32, 0xfd, 0x63, 0xca, 0x50, 0x5e, 0x65, 0x03, 0xe2, 0x89, - 0x8e, 0xb1, 0x75, 0x74, 0xec, 0xd3, 0x2f, 0xe6, 0x55, 0x3e, 0x22, 0xd4, 0x26, 0x1e, 0xf9, 0xc7, - 0xf4, 0x13, 0x79, 0x95, 0x0d, 0xd0, 0x6d, 0x28, 0x1f, 0xba, 0xfa, 0x10, 0xbb, 0xe4, 0xc6, 0xc9, - 0x51, 0x4c, 0x04, 0x40, 0x4f, 0xa0, 0xc2, 0xfc, 0x86, 0xe1, 0x98, 0xd8, 0xe0, 0xd7, 0xc0, 0x6c, - 0xd2, 0x7a, 0x4c, 0x6c, 0xa8, 0xcc, 0xbf, 0xd0, 0xdf, 0xe8, 0x1e, 0xd4, 0xd8, 0xac, 0x03, 0xcb, - 0xa7, 0xeb, 0x16, 0xe8, 0xba, 0x55, 0x0a, 0x5c, 0x67, 0x30, 0xf4, 0x00, 0xa6, 0x19, 0xd1, 0xa1, - 0x4b, 0x2e, 0x46, 0xdb, 0x38, 0x6b, 0x14, 0x29, 0x59, 0x9d, 0x82, 0x37, 0x03, 0x28, 0xe1, 0x81, - 0xf9, 0x0f, 0xc6, 0x43, 0x29, 0xc1, 0x03, 0x35, 0x37, 0xce, 0xc3, 0x69, 0xf8, 0x9b, 0xf0, 0xc0, - 0x66, 0x05, 0x3c, 0x94, 0x19, 0x0f, 0x14, 0x18, 0xf0, 0xb0, 0x04, 0xe8, 0x04, 0x9f, 0x69, 0x74, - 0xbf, 0x9a, 0x65, 0xfb, 0xd8, 0x3d, 0xd5, 0x07, 0x0d, 0xb8, 0x2b, 0x3d, 0x94, 0x54, 0xf9, 0x04, - 0x9f, 0x6d, 0x12, 0x44, 0x87, 0xc3, 0xd1, 0x83, 0x60, 0x5b, 0x3f, 0x19, 0xeb, 0x03, 0x22, 0xd1, - 0x0a, 0x59, 0x72, 0x3d, 0xd3, 0x90, 0xf8, 0xd6, 0x7e, 0x8b, 0xc1, 0x09, 0x21, 0xfb, 0x76, 0x40, - 0x58, 0x8d, 0x08, 0x29, 0x82, 0x13, 0x36, 0xff, 0x3e, 0x03, 0x05, 0x76, 0xaf, 0xa1, 0x47, 0x90, - 0x3b, 0xb4, 0x06, 0x2c, 0x20, 0x10, 0x4d, 0x7a, 0xd3, 0x1a, 0x60, 0x46, 0xb2, 0x35, 0xa5, 0x52, - 0x12, 0xf4, 0x18, 0x0a, 0x9e, 0xef, 0x62, 0x7d, 0xc8, 0x7d, 0xe1, 0x0d, 0xe1, 0xe2, 0x23, 0xe0, - 0x90, 0x9c, 0x93, 0xa1, 0xe7, 0x50, 0xf2, 0xf0, 0xd1, 0x10, 0xdb, 0xbe, 0xc7, 0x1d, 0xe0, 0xed, - 0x68, 0x0a, 0x43, 0x60, 0x33, 0xf6, 0xa1, 0x90, 0x1e, 0x2d, 0x43, 0xc1, 0x1a, 0xea, 0x47, 0xd8, - 0x3b, 0x17, 0x32, 0x74, 0x08, 0x38, 0xfa, 0x16, 0xa3, 0x22, 0xfb, 0x18, 0x1a, 0xfa, 0x88, 0xaa, - 0x8a, 0xb8, 0x8f, 0x1d, 0x43, 0x1f, 0x45, 0xfb, 0x20, 0x24, 0xe2, 0x0d, 0x5e, 0x98, 0xe8, 0x06, - 0x27, 0xb7, 0xb1, 0x41, 0x41, 0xcd, 0x3f, 0x90, 0x00, 0x22, 0x8e, 0xd1, 0xf7, 0xa0, 0x4c, 0x8e, - 0x46, 0xf3, 0xcf, 0x46, 0xec, 0x08, 0xeb, 0xc9, 0x80, 0x83, 0x6d, 0xb0, 0x7f, 0x36, 0xc2, 0x6a, - 0xe9, 0x90, 0xff, 0x22, 0x4e, 0x9a, 0xfc, 0x1e, 0xe9, 0xfe, 0x31, 0x33, 0x4f, 0x35, 0x1c, 0xa3, - 0x47, 0x20, 0x9b, 0x96, 0xa7, 0x1f, 0x0c, 0xb0, 0x36, 0xd4, 0x6d, 0xeb, 0x10, 0x7b, 0x3e, 0xbf, - 0x19, 0xa7, 0x39, 0x7c, 0x87, 0x83, 0x9b, 0xaf, 0xa0, 0x2a, 0x9e, 0x3c, 0x5a, 0x83, 0x12, 0x8d, - 0x00, 0x0d, 0x67, 0xc0, 0x99, 0xf9, 0x24, 0x21, 0xa2, 0x3d, 0x8e, 0x56, 0x43, 0x42, 0x84, 0x20, - 0x37, 0x76, 0x07, 0x5e, 0x23, 0x73, 0x37, 0xfb, 0xb0, 0xac, 0xd2, 0xdf, 0xcd, 0xbf, 0xce, 0xc1, - 0x6c, 0x8a, 0x80, 0x88, 0x40, 0x13, 0x1f, 0xf8, 0x2c, 0x5d, 0xa0, 0x29, 0xdf, 0x79, 0x00, 0xd3, - 0x64, 0x8f, 0x24, 0xfa, 0xd4, 0xc8, 0x55, 0x63, 0xbd, 0xe1, 0x5b, 0xaf, 0x07, 0xe0, 0x3d, 0x0a, - 0x25, 0x16, 0x34, 0x1a, 0xe8, 0x67, 0x03, 0xcb, 0xf3, 0x59, 0xac, 0x4a, 0x5d, 0x93, 0x5a, 0x0d, - 0x80, 0x34, 0x5e, 0x5d, 0x02, 0x44, 0x3e, 0xac, 0xc5, 0x29, 0x2b, 0x94, 0x52, 0x26, 0x98, 0x3d, - 0x91, 0xfa, 0x11, 0xc8, 0x5c, 0xb1, 0x34, 0x73, 0xec, 0xea, 0xc4, 0x8b, 0x51, 0xb5, 0xaa, 0xa9, - 0xd3, 0x1c, 0xde, 0xe6, 0x60, 0xa4, 0x08, 0x6c, 0x7a, 0xe3, 0x43, 0xc2, 0x26, 0xd0, 0x9d, 0x5e, - 0xa0, 0xba, 0x3d, 0x4a, 0x13, 0x6d, 0x82, 0x8d, 0x53, 0xa5, 0x58, 0x4a, 0x95, 0x22, 0xba, 0x07, - 0x19, 0x6f, 0x8d, 0xeb, 0xed, 0x4c, 0xf4, 0x91, 0xb5, 0xfd, 0xd1, 0xc0, 0xd1, 0xc9, 0x0d, 0x95, - 0xf1, 0xd6, 0x48, 0xa0, 0x7d, 0x64, 0x8c, 0xb8, 0xbe, 0x46, 0x81, 0xf6, 0x8b, 0x8d, 0xbd, 0x90, - 0x8c, 0x10, 0xa0, 0x15, 0xc8, 0xeb, 0x3f, 0x1d, 0xbb, 0x98, 0xfa, 0x34, 0x31, 0xfa, 0x6d, 0x11, - 0xe8, 0xfa, 0xc0, 0x39, 0x08, 0xe9, 0x19, 0x21, 0xb1, 0x6a, 0x7d, 0x60, 0x75, 0x7b, 0x3d, 0xea, - 0xa9, 0x44, 0xab, 0x6e, 0x51, 0x70, 0x48, 0xcf, 0xc9, 0x88, 0x31, 0xb0, 0x58, 0xb8, 0xf9, 0xdf, - 0x59, 0xa8, 0x08, 0xd6, 0x48, 0x36, 0x6d, 0xe8, 0x23, 0x7f, 0xec, 0x0a, 0x4e, 0x4d, 0x62, 0xc7, - 0xcc, 0xe1, 0xa1, 0x4f, 0x0b, 0xaf, 0x90, 0x4c, 0xfa, 0x15, 0x92, 0x8d, 0x5d, 0x21, 0x29, 0xba, - 0x93, 0x4b, 0xd5, 0x9d, 0xd6, 0x79, 0xe9, 0xe5, 0x13, 0x56, 0x49, 0x19, 0xbe, 0x44, 0x72, 0x4f, - 0xa0, 0x42, 0x5d, 0x0a, 0x77, 0xfb, 0x85, 0x84, 0xdb, 0xa7, 0xd3, 0xb9, 0xdb, 0xb7, 0xc2, 0xdf, - 0xa9, 0xf2, 0x2e, 0x5e, 0x26, 0xef, 0xd2, 0x44, 0xf2, 0x2e, 0x4f, 0x2c, 0x6f, 0xb8, 0xba, 0xbc, - 0x2b, 0x57, 0x95, 0x77, 0x0f, 0x20, 0x72, 0xa7, 0x31, 0x27, 0x26, 0x4d, 0xe0, 0xc4, 0x32, 0xe9, - 0x4e, 0xec, 0x9f, 0x24, 0xa8, 0xc5, 0xdc, 0x2e, 0x3f, 0x20, 0x69, 0xa2, 0x03, 0xca, 0x4c, 0x7c, - 0x40, 0xd9, 0x49, 0x0f, 0x68, 0x05, 0x8a, 0xfa, 0xc0, 0xd2, 0x1c, 0x2f, 0xb8, 0x7a, 0x2e, 0x3f, - 0x21, 0xcf, 0x23, 0x29, 0xda, 0xc8, 0x75, 0xc8, 0x0d, 0xeb, 0x36, 0xff, 0x33, 0x07, 0xa5, 0x80, - 0x55, 0x74, 0x0f, 0x40, 0x37, 0x0c, 0xec, 0x79, 0xda, 0x09, 0xe6, 0xe1, 0xf8, 0x7a, 0xee, 0x67, - 0xef, 0x96, 0x24, 0xb5, 0xcc, 0xe0, 0x2f, 0xf1, 0x19, 0xba, 0x0d, 0x05, 0x0f, 0x1b, 0x2e, 0x66, - 0x27, 0x14, 0x10, 0x70, 0x18, 0x7a, 0x04, 0x35, 0x0f, 0x7b, 0x9e, 0xe5, 0xd8, 0x9a, 0xef, 0x9c, - 0x60, 0x9b, 0xf9, 0x38, 0x4e, 0x54, 0xe5, 0xa8, 0x3e, 0xc1, 0xa0, 0x25, 0x98, 0xd6, 0x3d, 0x6f, - 0x3c, 0xc4, 0x9a, 0xeb, 0x0c, 0xb0, 0xa6, 0xbb, 0x36, 0x0d, 0x00, 0x02, 0xe2, 0x1a, 0x43, 0xaa, - 0xce, 0x00, 0xb7, 0x5c, 0x1b, 0xf5, 0xe0, 0x13, 0x91, 0x1a, 0xbf, 0xf1, 0xb1, 0x6b, 0xeb, 0x03, - 0x12, 0x67, 0xd6, 0xe8, 0xac, 0xdb, 0x64, 0xd6, 0xdb, 0x77, 0x4b, 0x73, 0xd1, 0x3c, 0x85, 0x13, - 0x75, 0xda, 0x6a, 0x1a, 0xd4, 0x24, 0x06, 0xec, 0xe2, 0x23, 0xe2, 0x5e, 0x99, 0xd3, 0xe6, 0x23, - 0xa2, 0x2b, 0xd8, 0x36, 0x47, 0x8e, 0x65, 0xfb, 0xdc, 0x72, 0xc3, 0x31, 0x99, 0x73, 0x30, 0x36, - 0x4e, 0x78, 0xb6, 0x5f, 0x56, 0xf9, 0x08, 0x3d, 0x04, 0xf9, 0xd0, 0x71, 0x0d, 0xac, 0x11, 0x8d, - 0xd2, 0x3c, 0xff, 0x6c, 0xc0, 0xee, 0xeb, 0x92, 0x5a, 0xa7, 0xf0, 0x3d, 0xdd, 0x3f, 0xee, 0x11, - 0x28, 0xfa, 0x01, 0x94, 0x86, 0xd8, 0xd7, 0x69, 0xf6, 0xc4, 0xd2, 0xf7, 0x3b, 0xe7, 0xd4, 0x66, - 0x79, 0x87, 0x53, 0x28, 0xb6, 0xef, 0x9e, 0xa9, 0xe1, 0x04, 0xd4, 0x80, 0xa2, 0xaf, 0x1f, 0x1d, - 0x59, 0xf6, 0x11, 0xb5, 0xc9, 0xb2, 0x1a, 0x0c, 0xd1, 0x63, 0x98, 0x35, 0x1c, 0xdb, 0xa7, 0xb7, - 0x86, 0xe5, 0x8d, 0x1c, 0xcf, 0xa2, 0x17, 0x47, 0x99, 0x52, 0x21, 0x8e, 0x6a, 0x47, 0x18, 0x92, - 0xed, 0x8d, 0x5c, 0xe7, 0xcd, 0x19, 0x37, 0xc6, 0x28, 0x64, 0xd9, 0x23, 0xd0, 0x20, 0xdb, 0xa3, - 0x24, 0x0b, 0x3f, 0x80, 0x5a, 0x8c, 0x23, 0x92, 0x3c, 0x87, 0x4a, 0xa2, 0x92, 0x9f, 0xc4, 0x47, - 0x9e, 0xea, 0x83, 0x31, 0xe6, 0xf7, 0x24, 0x1b, 0x3c, 0xcf, 0x3c, 0x93, 0x9a, 0xaf, 0xa1, 0x1c, - 0x2a, 0x3a, 0xba, 0x0f, 0x15, 0xc3, 0xc5, 0x34, 0xa0, 0xd7, 0x07, 0x5e, 0x4c, 0xcb, 0x44, 0x84, - 0x70, 0xce, 0x99, 0xd8, 0x39, 0x87, 0x5c, 0x67, 0xdf, 0xcb, 0x75, 0xf3, 0x67, 0x12, 0x4c, 0x27, - 0x0c, 0x07, 0x3d, 0x80, 0xaa, 0x6e, 0x18, 0xce, 0xd8, 0xf6, 0x85, 0xd2, 0x52, 0xc0, 0x00, 0xc7, - 0xd0, 0x5b, 0xf8, 0x73, 0x08, 0x86, 0xd4, 0x1c, 0x44, 0x6d, 0x07, 0x8e, 0x20, 0xf6, 0xf0, 0x39, - 0xd4, 0xc9, 0xd9, 0xea, 0x96, 0x8d, 0x5d, 0x31, 0x00, 0xa8, 0x85, 0x50, 0xb2, 0x5a, 0xf3, 0x2f, - 0x24, 0xa8, 0x8a, 0xf6, 0xf8, 0x31, 0x8c, 0xed, 0x23, 0xaa, 0x6f, 0xf3, 0x77, 0xa1, 0x22, 0x1c, - 0x60, 0x4a, 0x6d, 0x64, 0x01, 0x4a, 0x63, 0x8f, 0x18, 0xce, 0x30, 0x90, 0x70, 0x38, 0x46, 0x77, - 0xa1, 0x34, 0xd2, 0x3d, 0xef, 0xb5, 0xe3, 0xb2, 0x3c, 0x36, 0x60, 0x34, 0x84, 0x36, 0x3d, 0x98, - 0xd9, 0xb6, 0xbc, 0xab, 0x94, 0xf8, 0x1e, 0x41, 0x99, 0xd5, 0x16, 0x89, 0x89, 0xb3, 0xdd, 0x57, - 0xdf, 0xbe, 0x5b, 0x2a, 0x31, 0x60, 0xa7, 0xad, 0x06, 0xbf, 0xa8, 0x19, 0xeb, 0x86, 0x6f, 0x9d, - 0x62, 0x1e, 0x79, 0xf2, 0x51, 0xf3, 0x47, 0x80, 0xc4, 0x8f, 0x7a, 0x23, 0xc7, 0xf6, 0xc8, 0xc2, - 0x79, 0xcb, 0xc7, 0xc3, 0xf3, 0x65, 0x01, 0x46, 0x47, 0x92, 0x6d, 0x95, 0x51, 0x34, 0xff, 0x41, - 0x82, 0xd9, 0xfd, 0x91, 0xa9, 0xfb, 0x38, 0xce, 0x78, 0x8c, 0x37, 0xe9, 0x52, 0xde, 0xf8, 0x41, - 0x66, 0xa2, 0x83, 0x8c, 0x4a, 0x60, 0xd9, 0x58, 0x09, 0xec, 0x3e, 0x4c, 0xeb, 0xa6, 0xa9, 0xb1, - 0x64, 0x44, 0xa3, 0x41, 0x6e, 0x8e, 0x06, 0xb9, 0x35, 0xdd, 0x34, 0x59, 0x3c, 0xbc, 0xef, 0x0e, - 0x3c, 0x12, 0x4b, 0xba, 0x78, 0xe8, 0x9c, 0xe2, 0x18, 0x69, 0x9e, 0x92, 0xca, 0x0c, 0x13, 0x51, - 0x37, 0xbf, 0x82, 0x99, 0x9e, 0xef, 0x8c, 0x3e, 0x94, 0xff, 0xe6, 0x9f, 0x57, 0x00, 0xa2, 0x83, - 0xb9, 0xca, 0xce, 0xef, 0x41, 0x91, 0x4a, 0x37, 0x14, 0x1f, 0xbc, 0x7d, 0xb7, 0x54, 0x20, 0xa0, - 0x4e, 0x5b, 0x65, 0x7f, 0xcd, 0xb8, 0x0a, 0xd4, 0x12, 0x2a, 0xf0, 0x1c, 0x2a, 0xac, 0xaa, 0xc8, - 0x12, 0x96, 0x05, 0x1a, 0xdb, 0xdc, 0x4c, 0xc8, 0x8b, 0x95, 0xcf, 0x68, 0xc6, 0x02, 0x5e, 0xf8, - 0x1b, 0x7d, 0x97, 0x64, 0x7f, 0xba, 0x3f, 0xf6, 0x78, 0x61, 0xe5, 0x46, 0x72, 0x1a, 0x45, 0xaa, - 0x9c, 0x08, 0x7d, 0x0a, 0x40, 0xab, 0x76, 0xd8, 0xd4, 0x74, 0x9f, 0x3a, 0xc4, 0xac, 0x5a, 0xe6, - 0x90, 0x96, 0x8f, 0x6e, 0x52, 0x8b, 0x62, 0xc8, 0x0a, 0x45, 0x16, 0xe9, 0xb8, 0x45, 0x2b, 0x97, - 0x63, 0xaa, 0x22, 0x14, 0x89, 0xd8, 0x4c, 0x0e, 0x69, 0x91, 0x94, 0xab, 0xc0, 0x4e, 0xa4, 0xf1, - 0x29, 0xf5, 0x57, 0xb7, 0x84, 0x14, 0x27, 0x59, 0xf3, 0x26, 0x77, 0x34, 0x23, 0x46, 0x4f, 0x89, - 0x69, 0x93, 0x6c, 0xa1, 0xf1, 0x59, 0x22, 0x13, 0x55, 0xde, 0x8c, 0x1c, 0xd7, 0x57, 0x29, 0x52, - 0x98, 0xc7, 0xa8, 0xd1, 0x36, 0xd4, 0xe9, 0x79, 0x1a, 0xce, 0x90, 0xfa, 0x79, 0xcc, 0x83, 0x82, - 0x7b, 0xe1, 0x7c, 0xd5, 0x71, 0x86, 0x1b, 0x01, 0x36, 0xf9, 0xf9, 0x9a, 0x2b, 0x62, 0xd1, 0x77, - 0x59, 0xbd, 0xbc, 0x9e, 0xa8, 0x25, 0xbe, 0xc2, 0x07, 0xc9, 0x89, 0xb4, 0x6c, 0xae, 0x40, 0x45, - 0x28, 0xda, 0x34, 0x66, 0xe9, 0xb4, 0xef, 0xa4, 0x55, 0xb4, 0x92, 0xd3, 0xc5, 0x79, 0xa8, 0x0b, - 0xd3, 0xac, 0x86, 0x14, 0x6d, 0x82, 0xa5, 0x1b, 0xbf, 0x16, 0xd5, 0xf8, 0x09, 0xfe, 0xc2, 0x5d, - 0xd4, 0xfd, 0x18, 0x1a, 0xad, 0x41, 0x9e, 0x42, 0x78, 0x3e, 0x72, 0x2b, 0xbe, 0x4c, 0x72, 0x36, - 0xa3, 0x45, 0xcf, 0xa1, 0xce, 0xed, 0xcb, 0xc5, 0xde, 0x78, 0xe0, 0x7b, 0x8d, 0xe9, 0x84, 0xbf, - 0x60, 0x56, 0x46, 0xfd, 0x45, 0x8d, 0x91, 0xaa, 0x8c, 0x12, 0x3d, 0x81, 0x2a, 0xcd, 0xb3, 0x83, - 0x99, 0x32, 0x9d, 0x39, 0x13, 0xab, 0x56, 0xd0, 0x79, 0x15, 0x42, 0x16, 0xcc, 0xfa, 0x0a, 0x82, - 0xf4, 0x2e, 0x9c, 0x38, 0x93, 0xa8, 0xc3, 0xf1, 0x5c, 0x8e, 0x39, 0xa9, 0x3a, 0xa7, 0x0e, 0xe6, - 0x3f, 0x83, 0x1a, 0x4b, 0x05, 0x82, 0xd9, 0x73, 0x09, 0x86, 0x69, 0x32, 0xc0, 0xe6, 0x56, 0x29, - 0xa5, 0xc0, 0xef, 0xd0, 0xd0, 0x47, 0xe1, 0xc4, 0xdb, 0x09, 0x7e, 0x49, 0x18, 0xcd, 0xf8, 0x25, - 0x64, 0xc1, 0xac, 0x39, 0xc8, 0x63, 0xd7, 0x75, 0x5c, 0x1e, 0x62, 0xb0, 0x01, 0xb1, 0x07, 0xfa, - 0x83, 0x26, 0x24, 0x8d, 0x79, 0x56, 0x2a, 0xa3, 0x10, 0x92, 0x7a, 0x90, 0xf8, 0xc5, 0xc4, 0xbe, - 0x6e, 0x0d, 0xbc, 0xc6, 0x0d, 0x16, 0xbf, 0xf0, 0x21, 0xfa, 0x02, 0x66, 0x82, 0xe0, 0x5b, 0x1b, - 0x38, 0x06, 0x4b, 0x7b, 0x3f, 0x61, 0x29, 0x72, 0x80, 0xd8, 0xe6, 0x70, 0xb4, 0x0c, 0xb3, 0x07, - 0xba, 0x71, 0x32, 0x1e, 0x69, 0xbc, 0xe8, 0xa1, 0x8d, 0x3d, 0x6c, 0x36, 0x6e, 0xb2, 0xda, 0x30, - 0x43, 0xf1, 0x30, 0x7d, 0xdf, 0xc3, 0x26, 0xba, 0x03, 0x15, 0x17, 0xfb, 0xee, 0x99, 0x46, 0xef, - 0xed, 0xc6, 0x2d, 0xca, 0x16, 0x50, 0xd0, 0x06, 0x81, 0x10, 0x3b, 0xe5, 0xd5, 0xa2, 0x62, 0xe2, - 0x3d, 0x29, 0x12, 0x33, 0xb9, 0x4c, 0xd6, 0x33, 0x0d, 0x69, 0x4b, 0x0a, 0x6b, 0x46, 0x5f, 0xf0, - 0x7a, 0x54, 0x32, 0x3f, 0x0a, 0x24, 0xcc, 0xc9, 0x59, 0x45, 0xea, 0x4b, 0xa1, 0xc0, 0x54, 0x4d, - 0xd6, 0xa4, 0x04, 0xc9, 0xf2, 0x49, 0x21, 0xf1, 0x7a, 0x19, 0x8a, 0x2e, 0xd3, 0x4f, 0x92, 0xde, - 0x30, 0x29, 0x35, 0x7f, 0x9e, 0x01, 0x88, 0x78, 0x4b, 0x7f, 0xcd, 0x10, 0x7c, 0x5a, 0xe6, 0x32, - 0x9f, 0x96, 0x8d, 0xfb, 0xb4, 0x05, 0x28, 0xc5, 0x0a, 0x0f, 0x59, 0x35, 0x1c, 0xa3, 0xd5, 0xd0, - 0xb1, 0xb2, 0x54, 0x75, 0x21, 0xe5, 0xa0, 0x96, 0x13, 0xde, 0x35, 0xd4, 0x94, 0x82, 0xa8, 0x29, - 0x4d, 0xa8, 0x0d, 0x74, 0x8f, 0x28, 0x3b, 0x11, 0x8c, 0xce, 0x32, 0xd0, 0xac, 0x5a, 0x21, 0x40, - 0x95, 0xc0, 0x5a, 0x3e, 0x51, 0x17, 0x82, 0xb6, 0xb0, 0x47, 0x8f, 0xb8, 0xa6, 0x06, 0xc3, 0xe6, - 0x32, 0x14, 0xd8, 0x57, 0x10, 0x40, 0xa1, 0xb5, 0xd1, 0xef, 0x7c, 0xad, 0xc8, 0x53, 0xa8, 0x0a, - 0xa5, 0xcd, 0xce, 0x6e, 0xa7, 0xb7, 0xa5, 0xb4, 0x65, 0x89, 0x60, 0x36, 0x5b, 0x9d, 0x6d, 0xa5, - 0x2d, 0x67, 0x9a, 0x3f, 0x97, 0xa0, 0x14, 0x48, 0x25, 0x48, 0x06, 0xc5, 0xc0, 0x23, 0x18, 0x7f, - 0xa4, 0x63, 0x2b, 0x24, 0x8e, 0x0d, 0x41, 0xce, 0xb3, 0x7e, 0x8a, 0xf9, 0x71, 0xd2, 0xdf, 0x84, - 0x3e, 0x54, 0x74, 0x16, 0x8d, 0x85, 0xe3, 0xe6, 0xbf, 0x65, 0xa0, 0x2a, 0xea, 0xc4, 0xf9, 0x3a, - 0x93, 0x34, 0x71, 0x9d, 0xa9, 0x74, 0x41, 0x9d, 0x49, 0xe4, 0x37, 0x73, 0x01, 0xbf, 0x59, 0x81, - 0xdf, 0x2f, 0x60, 0x26, 0x5c, 0x38, 0x64, 0x9c, 0x05, 0x98, 0x72, 0x80, 0x08, 0x2d, 0xf4, 0x09, - 0xcc, 0xc7, 0x59, 0x09, 0x67, 0x30, 0x77, 0x31, 0x27, 0xb2, 0x13, 0xce, 0xba, 0x47, 0xf2, 0x47, - 0xe6, 0x03, 0x99, 0xa5, 0xe6, 0xe9, 0xf7, 0xab, 0x1c, 0xc8, 0x6c, 0x35, 0x2e, 0xa1, 0xc2, 0x65, - 0x12, 0x2a, 0xc6, 0x24, 0xd4, 0xfc, 0x63, 0x09, 0x20, 0xf2, 0x82, 0x93, 0x17, 0x6a, 0xee, 0x44, - 0x55, 0x16, 0xc2, 0x94, 0x44, 0x57, 0x0d, 0x0a, 0x2a, 0xe7, 0x59, 0xba, 0x82, 0xd2, 0x34, 0xff, - 0x59, 0x82, 0x52, 0xe0, 0x5f, 0xbf, 0x05, 0xbd, 0xcc, 0x5d, 0x20, 0xe7, 0xfc, 0x05, 0x7a, 0x59, - 0x88, 0xeb, 0x25, 0x39, 0x89, 0xe0, 0x72, 0x26, 0x27, 0xc1, 0xce, 0x17, 0xf8, 0x85, 0x3b, 0xb6, - 0xfd, 0xe6, 0xdb, 0x0c, 0xdc, 0x68, 0x8d, 0x7d, 0xe7, 0xdc, 0x6d, 0x2f, 0xbc, 0x93, 0x4b, 0x13, - 0xbd, 0x93, 0x4f, 0xa5, 0xbe, 0x93, 0x67, 0xde, 0xf3, 0x4e, 0x3e, 0x25, 0xbc, 0x93, 0xff, 0x90, - 0xdf, 0xc3, 0xc1, 0x63, 0x79, 0x96, 0xde, 0x6b, 0x0b, 0x69, 0x25, 0x6f, 0xfe, 0x6e, 0x4e, 0x2f, - 0xe4, 0x2e, 0x7f, 0x3b, 0x57, 0xa2, 0x0b, 0x39, 0x58, 0x21, 0x47, 0x57, 0xb8, 0xf4, 0x5d, 0x20, - 0xbc, 0x97, 0xf9, 0x32, 0xc4, 0x7b, 0xf3, 0x8e, 0x87, 0xe6, 0x9f, 0x64, 0x60, 0x9a, 0x1c, 0x8e, - 0x10, 0x78, 0x5c, 0xb9, 0x30, 0x95, 0xbf, 0xac, 0x4e, 0x97, 0x99, 0xa8, 0x0c, 0x95, 0x9d, 0xb8, - 0x0c, 0x95, 0xbb, 0x7a, 0x9d, 0xae, 0x70, 0xd5, 0x3a, 0xdd, 0xdf, 0xe5, 0x60, 0x36, 0x25, 0xaa, - 0x25, 0xb9, 0x06, 0x8b, 0x6a, 0x13, 0xb9, 0x06, 0x03, 0x92, 0x5c, 0x83, 0xff, 0x32, 0x49, 0xee, - 0xc4, 0x1e, 0xdd, 0x9d, 0xc3, 0x43, 0x0f, 0xfb, 0xda, 0xd0, 0xe3, 0x06, 0x52, 0xa3, 0xe0, 0x2e, - 0x85, 0xee, 0x78, 0xe4, 0xca, 0xc1, 0xb6, 0x29, 0x50, 0x31, 0x4b, 0xa9, 0x60, 0xdb, 0x0c, 0x69, - 0xc4, 0xde, 0x92, 0xdc, 0x95, 0x7b, 0x4b, 0xf2, 0x13, 0xf7, 0x96, 0x14, 0xae, 0xd6, 0x5b, 0x52, - 0xbc, 0x46, 0x6f, 0x49, 0xe9, 0xc3, 0x7a, 0x4b, 0xca, 0x93, 0xf7, 0x96, 0xc0, 0xd5, 0x7b, 0x4b, - 0x2a, 0xd7, 0xea, 0x2d, 0xf9, 0xf7, 0x02, 0x2c, 0x5c, 0x9c, 0xca, 0x5c, 0x5e, 0x5a, 0x88, 0x32, - 0xf0, 0xcc, 0x25, 0x4d, 0x28, 0xd9, 0x64, 0xfb, 0xc7, 0x97, 0xc0, 0xde, 0x2f, 0xb5, 0xa1, 0xf5, - 0xc6, 0xb2, 0x8f, 0x1a, 0xd3, 0x54, 0x22, 0x89, 0x26, 0x89, 0x1d, 0x8a, 0x53, 0xd9, 0x7b, 0x30, - 0x1b, 0x24, 0xfa, 0x46, 0x72, 0x13, 0x74, 0xaf, 0xe4, 0x53, 0xba, 0x57, 0xd0, 0x13, 0x1e, 0x6b, - 0x32, 0xc5, 0xb9, 0xc4, 0x8b, 0xd1, 0xf8, 0x31, 0x78, 0x06, 0x5d, 0x4b, 0x04, 0xb6, 0xe9, 0xcf, - 0xa0, 0x7c, 0x4a, 0x10, 0xd6, 0x7e, 0x25, 0x44, 0xaa, 0xf0, 0xfe, 0xa7, 0x50, 0x3e, 0x3b, 0x7a, - 0x0e, 0x8d, 0xd4, 0xb6, 0x74, 0x0d, 0xb5, 0x2d, 0x5f, 0x41, 0x6d, 0x93, 0xae, 0xbe, 0x72, 0x35, - 0x57, 0xff, 0x1b, 0x61, 0xb6, 0x17, 0x2c, 0x50, 0x4d, 0xa6, 0x5e, 0xc2, 0x69, 0x05, 0xf9, 0xde, - 0x25, 0x17, 0x45, 0xed, 0xea, 0x17, 0x05, 0xfa, 0x7e, 0x90, 0xc0, 0x05, 0x8b, 0xd4, 0xe9, 0x22, - 0xa9, 0x6f, 0xc9, 0x3c, 0x83, 0x0b, 0xa6, 0x8a, 0x86, 0x25, 0x4f, 0x6e, 0x58, 0xec, 0x43, 0xe2, - 0x0d, 0xf5, 0xbf, 0x79, 0x90, 0x93, 0xf9, 0xfd, 0xb7, 0xd4, 0x29, 0x55, 0x4d, 0xef, 0x94, 0x0a, - 0xf5, 0x3e, 0xf7, 0x81, 0x7a, 0x9f, 0xff, 0x30, 0xbd, 0x2f, 0x5c, 0x4b, 0xef, 0xbf, 0x2d, 0x77, - 0x9d, 0xd4, 0xfb, 0xf2, 0x75, 0xf5, 0x1e, 0xae, 0xa7, 0xf7, 0x95, 0x8f, 0xa1, 0xf7, 0xb5, 0x0f, - 0xd2, 0xfb, 0xfa, 0x75, 0xf4, 0xfe, 0x6f, 0x72, 0xd0, 0xb8, 0xa8, 0x40, 0x75, 0xf9, 0x6d, 0x22, - 0xb6, 0xb0, 0x65, 0x12, 0x2d, 0x6c, 0xdf, 0x81, 0x6a, 0xac, 0x77, 0x8d, 0x59, 0x42, 0xc5, 0x8b, - 0xba, 0xd6, 0x04, 0x95, 0xc9, 0x5d, 0x23, 0x2a, 0xce, 0x5f, 0x23, 0x2a, 0x2e, 0x5c, 0x57, 0x65, - 0x8a, 0xd7, 0x53, 0x99, 0xd2, 0xc7, 0x50, 0x99, 0xf2, 0x07, 0xa9, 0x0c, 0x4c, 0xa8, 0x32, 0x82, - 0xa2, 0xfc, 0x51, 0x01, 0x6e, 0x5d, 0x52, 0x7e, 0xbc, 0x5c, 0x57, 0x9e, 0x02, 0x6b, 0xdb, 0x8a, - 0x9a, 0x3c, 0x33, 0x51, 0x93, 0x27, 0xc5, 0xf0, 0x26, 0x4f, 0x55, 0x1c, 0x99, 0x64, 0x5e, 0xa2, - 0x39, 0x34, 0x9b, 0xde, 0x1c, 0x9a, 0x68, 0x0d, 0xfd, 0x25, 0xb9, 0xce, 0xd2, 0xb5, 0x5c, 0x67, - 0xe1, 0x1a, 0xae, 0xb3, 0xf8, 0xab, 0x90, 0xe1, 0x43, 0xec, 0x60, 0xfa, 0x3a, 0xae, 0xf3, 0x17, - 0x12, 0xa0, 0xf3, 0x95, 0xf4, 0xcb, 0x0d, 0xe1, 0xbe, 0xd0, 0x27, 0x9a, 0x39, 0xd7, 0x27, 0x1a, - 0x75, 0x89, 0x3e, 0xe6, 0x0a, 0x9c, 0x4d, 0x3c, 0x41, 0xb4, 0x2d, 0x17, 0x1b, 0x7e, 0x4a, 0xd7, - 0xdf, 0xe7, 0x50, 0x7b, 0x8d, 0x0f, 0x3c, 0xc7, 0x38, 0xc1, 0x7e, 0xd4, 0x08, 0xbe, 0x35, 0xa5, - 0x56, 0x43, 0x30, 0x89, 0xa5, 0xc5, 0xcd, 0xe7, 0xaf, 0xba, 0xf9, 0xe6, 0x9f, 0x66, 0x40, 0x4e, - 0x72, 0xf0, 0xab, 0x3c, 0xfe, 0x1f, 0x33, 0x30, 0x73, 0xce, 0x66, 0xbe, 0xad, 0x9e, 0xc3, 0xc2, - 0x65, 0xa7, 0x99, 0x9d, 0xe8, 0x34, 0x73, 0x13, 0x9f, 0x66, 0xfe, 0xea, 0xa7, 0x59, 0xbc, 0xea, - 0x69, 0x7e, 0x13, 0x3c, 0x3d, 0x6f, 0xd3, 0xe4, 0xf4, 0x03, 0x9e, 0x9e, 0x2f, 0x48, 0x73, 0x9b, - 0x7f, 0x16, 0xbe, 0x6a, 0xf7, 0xf8, 0xab, 0xd5, 0x95, 0x97, 0xe6, 0x6f, 0xd5, 0x8c, 0x55, 0x4d, - 0x68, 0xc8, 0xac, 0xe9, 0xa6, 0xc9, 0x04, 0x9f, 0x78, 0xab, 0x16, 0x49, 0xb3, 0xe2, 0x5b, 0x75, - 0x44, 0xdd, 0xfc, 0x3e, 0xd4, 0xe3, 0x8f, 0x2d, 0xe8, 0x01, 0xe4, 0x2c, 0xfb, 0xd0, 0x39, 0xf7, - 0x54, 0x2f, 0x3c, 0xbd, 0x51, 0x82, 0xc5, 0x57, 0x50, 0x15, 0xbb, 0xdd, 0xd1, 0x3c, 0xa0, 0xd6, - 0x7e, 0xbb, 0xd3, 0xd5, 0x36, 0xb6, 0x5a, 0xbb, 0xbb, 0xca, 0xb6, 0xb6, 0xde, 0xed, 0x6f, 0xc9, - 0x53, 0xe7, 0xe1, 0xdb, 0xca, 0x66, 0x5f, 0x96, 0xd0, 0x27, 0x30, 0x1b, 0x87, 0xab, 0x9d, 0x17, - 0x5b, 0x7d, 0x39, 0xb3, 0xf8, 0x2f, 0x12, 0xdc, 0x48, 0xbd, 0x80, 0x90, 0x0c, 0xd5, 0xad, 0xd5, - 0xa7, 0x4f, 0xb4, 0x2f, 0x57, 0x57, 0xf6, 0xb4, 0xb5, 0x15, 0x79, 0x2a, 0x0e, 0x79, 0xba, 0x22, - 0x4b, 0x68, 0x06, 0x6a, 0x14, 0xf2, 0xeb, 0x2b, 0xcf, 0x18, 0x51, 0x26, 0x01, 0x7a, 0xba, 0x22, - 0x67, 0xd1, 0x4d, 0xb8, 0xb1, 0xd7, 0x55, 0xfb, 0x6a, 0xab, 0xd3, 0xd7, 0x62, 0x4b, 0xe6, 0x2e, - 0x40, 0x3d, 0x5d, 0x91, 0xf3, 0x68, 0x01, 0xe6, 0xe3, 0xa8, 0xf0, 0x23, 0x85, 0x8b, 0x70, 0x4f, - 0x57, 0xe4, 0xe2, 0xe2, 0x3a, 0xef, 0x90, 0x8f, 0xcc, 0x0e, 0xcd, 0x81, 0xdc, 0x56, 0x36, 0x5b, - 0xfb, 0xdb, 0x7d, 0x6d, 0xb3, 0xb3, 0xad, 0xf4, 0x7f, 0x7b, 0x4f, 0x91, 0xa7, 0x50, 0x11, 0xb2, - 0x3b, 0x7b, 0x4f, 0x64, 0x89, 0xfc, 0xe8, 0xbe, 0x78, 0x21, 0x67, 0x18, 0x64, 0x4d, 0xce, 0x2e, - 0x6e, 0x05, 0x92, 0x0a, 0x3a, 0x67, 0xc5, 0x25, 0xf6, 0xd4, 0x6e, 0xbf, 0xbb, 0xd1, 0xdd, 0x96, - 0xa7, 0x50, 0x09, 0x72, 0x6a, 0x7f, 0x67, 0x8f, 0xad, 0xd1, 0x53, 0xfb, 0x72, 0x06, 0xd5, 0xa0, - 0xfc, 0x4a, 0x59, 0xef, 0x75, 0x37, 0x5e, 0x2a, 0x7d, 0x39, 0xbb, 0xb8, 0x0b, 0x37, 0x52, 0x5b, - 0x71, 0xd1, 0x3d, 0xb8, 0x13, 0x2c, 0xd8, 0x53, 0x5e, 0xec, 0x28, 0xbb, 0x7d, 0xa5, 0x4d, 0xb9, - 0x13, 0xd7, 0x27, 0x27, 0xbe, 0xdd, 0x8b, 0x20, 0xd2, 0xe2, 0xe3, 0x44, 0x2b, 0x30, 0x6f, 0x93, - 0x2c, 0x43, 0xbe, 0xb3, 0xdb, 0x56, 0xbe, 0x91, 0xa7, 0x08, 0x03, 0xfd, 0xce, 0x8e, 0xd2, 0xeb, - 0xb7, 0x08, 0x63, 0x8b, 0x87, 0x30, 0x9d, 0xe8, 0xb1, 0x24, 0x4a, 0xd2, 0xd9, 0x69, 0xbd, 0x50, - 0xb4, 0xde, 0xfe, 0xe6, 0x66, 0xe7, 0x1b, 0x2d, 0x98, 0xb9, 0x00, 0xf3, 0x31, 0xb8, 0xb0, 0x0c, - 0xba, 0x03, 0xb7, 0x62, 0xb8, 0xdd, 0xee, 0xae, 0xa2, 0x75, 0xbf, 0x56, 0xd4, 0x57, 0x6a, 0xa7, - 0xaf, 0xc8, 0x99, 0xc5, 0x1f, 0x83, 0x9c, 0x6c, 0x58, 0x20, 0x0b, 0x2a, 0x2f, 0x54, 0xa5, 0xd7, - 0xd3, 0x7a, 0xdd, 0x7d, 0x75, 0x43, 0xd1, 0xc8, 0xc9, 0x6b, 0xaf, 0x94, 0x75, 0xf6, 0xb1, 0x14, - 0x5c, 0xaf, 0xfd, 0x52, 0x96, 0x16, 0xff, 0x52, 0x82, 0xaa, 0xd8, 0xc6, 0x80, 0x66, 0x61, 0x3a, - 0x20, 0xee, 0xb7, 0xd4, 0x7e, 0x67, 0xf7, 0x85, 0x3c, 0x45, 0x34, 0x8d, 0x03, 0xf9, 0xf3, 0x98, - 0x24, 0x80, 0x94, 0xdd, 0x36, 0xa1, 0xca, 0x08, 0x53, 0x37, 0xba, 0x3b, 0x7b, 0xdb, 0x4a, 0x5f, - 0x91, 0xb3, 0x02, 0x1d, 0x7f, 0x3f, 0xcb, 0x21, 0x04, 0xf5, 0x60, 0xb5, 0xf5, 0xae, 0xda, 0x57, - 0xda, 0x72, 0x1e, 0x35, 0x60, 0x8e, 0xc3, 0xb6, 0x3b, 0x3b, 0x9d, 0xbe, 0xa6, 0x2a, 0xad, 0x8d, - 0x2d, 0xa5, 0x2d, 0x17, 0x16, 0xf7, 0xf9, 0xff, 0xe2, 0xf0, 0x0a, 0x18, 0x82, 0x7a, 0x20, 0xcc, - 0x9d, 0xce, 0x37, 0x8c, 0xbd, 0x79, 0x40, 0xed, 0xfd, 0xd6, 0x76, 0x68, 0x71, 0xad, 0x17, 0xca, - 0x2e, 0x31, 0xc5, 0x05, 0x98, 0x8f, 0xc3, 0xb7, 0xfb, 0x8a, 0xba, 0xdb, 0x22, 0x87, 0xb8, 0xfa, - 0x57, 0x05, 0x28, 0xf0, 0xb2, 0xf9, 0x8f, 0xa0, 0x22, 0x74, 0x50, 0xa0, 0xcb, 0xfa, 0x2a, 0x16, - 0xd2, 0x7a, 0x7c, 0x50, 0x0b, 0xaa, 0x62, 0x6f, 0x0f, 0x8a, 0x02, 0xaf, 0x94, 0x96, 0x9f, 0xf4, - 0x25, 0x14, 0x80, 0xa8, 0xc1, 0x08, 0x45, 0x91, 0xe3, 0xb9, 0x56, 0xa7, 0x85, 0x5b, 0xa9, 0x38, - 0xde, 0x91, 0xf4, 0x43, 0x80, 0xa8, 0x47, 0x07, 0x89, 0x0f, 0xaa, 0x89, 0xc6, 0x9d, 0x74, 0x2e, - 0xfa, 0xd0, 0xa0, 0x7b, 0x4e, 0x29, 0x87, 0xa2, 0x49, 0xfa, 0x3e, 0xd2, 0x57, 0xfd, 0x4d, 0x62, - 0xe2, 0xba, 0xeb, 0x87, 0xc5, 0x20, 0x74, 0x71, 0x03, 0x48, 0xfa, 0x0a, 0x7b, 0x30, 0x4f, 0x57, - 0x38, 0xff, 0x12, 0xf4, 0xfe, 0x9e, 0x90, 0xf4, 0x15, 0xbf, 0x86, 0x9b, 0x74, 0xc5, 0xb4, 0xfc, - 0x0b, 0x4d, 0xd4, 0x1d, 0x92, 0xbe, 0x6e, 0x1b, 0xe4, 0x68, 0xdd, 0x73, 0x0a, 0x75, 0x3e, 0xb6, - 0x7d, 0x8f, 0x42, 0xb1, 0x1b, 0xfb, 0x9c, 0x42, 0xc5, 0x2e, 0xf2, 0xf7, 0x2c, 0xc1, 0xbc, 0xeb, - 0xb9, 0x25, 0x62, 0x17, 0x76, 0xea, 0x12, 0xeb, 0x9b, 0xbf, 0x73, 0xef, 0xc8, 0xf2, 0x8f, 0xc7, - 0x07, 0xcb, 0x86, 0x33, 0x7c, 0xcc, 0x09, 0x1e, 0x07, 0xff, 0xd7, 0x10, 0x00, 0xfe, 0x36, 0x53, - 0xdb, 0xb6, 0x4e, 0xf1, 0x4b, 0xd6, 0x37, 0xe9, 0x3b, 0xff, 0x95, 0xa9, 0xf3, 0xf1, 0xf3, 0xe7, - 0x14, 0x70, 0x50, 0xa0, 0x53, 0xd6, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x2d, 0xf7, 0x77, - 0xea, 0x3b, 0x00, 0x00, + // 4246 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4d, 0x6f, 0x1b, 0x49, + 0x76, 0x6a, 0x7e, 0xf3, 0xf1, 0xab, 0x55, 0x92, 0x65, 0x5a, 0x9e, 0x19, 0x7b, 0xe9, 0x8c, 0x3f, + 0x34, 0x5a, 0x59, 0x91, 0xbc, 0x1e, 0xaf, 0x37, 0x3b, 0x1b, 0x4a, 0x6c, 0x99, 0x5c, 0x4b, 0xa2, + 0xd2, 0xa4, 0xc6, 0x93, 0x00, 0x49, 0xa3, 0xc5, 0x2e, 0x49, 0x0d, 0x91, 0xdd, 0xdc, 0xee, 0xa6, + 0x6c, 0xed, 0x2f, 0xd8, 0x04, 0x41, 0x12, 0x24, 0x40, 0x0e, 0x06, 0x82, 0xe4, 0x10, 0xe4, 0x10, + 0xec, 0x29, 0xbf, 0x20, 0xf7, 0x04, 0x08, 0x90, 0x20, 0xc8, 0x39, 0x39, 0x06, 0x0e, 0x16, 0x39, + 0xe4, 0x1e, 0xd4, 0x47, 0x77, 0x17, 0x9b, 0x2d, 0x9a, 0xb2, 0x9c, 0xc9, 0x65, 0x4e, 0x62, 0xbd, + 0xf7, 0xaa, 0xfa, 0x55, 0xbd, 0x8f, 0x7a, 0xef, 0xd5, 0x13, 0x2c, 0xf6, 0xcd, 0x73, 0x7c, 0x66, + 0x7a, 0x1a, 0x3e, 0x71, 0xb0, 0xeb, 0xae, 0x0d, 0x1d, 0xdb, 0xb3, 0x51, 0x96, 0x43, 0x97, 0x03, + 0xf4, 0xc0, 0x36, 0x70, 0x9f, 0xa3, 0x97, 0x17, 0xfb, 0xf6, 0xc9, 0x09, 0x76, 0x1e, 0xdb, 0x43, + 0xcf, 0xb4, 0x2d, 0x0e, 0xad, 0xfd, 0x5b, 0x12, 0x50, 0xc7, 0xd3, 0x1d, 0x4f, 0xa1, 0x4b, 0xa9, + 0xf8, 0x67, 0x23, 0xec, 0x7a, 0xe8, 0x36, 0xe4, 0x1d, 0xdb, 0x1e, 0x68, 0x96, 0x3e, 0xc0, 0x55, + 0xe9, 0xae, 0xf4, 0x30, 0xaf, 0xe6, 0x08, 0x60, 0x5f, 0x1f, 0x60, 0xf4, 0x03, 0xc8, 0x79, 0x78, + 0x30, 0xec, 0xeb, 0x1e, 0xae, 0x26, 0xee, 0x4a, 0x0f, 0x0b, 0x1b, 0x37, 0xd7, 0xf8, 0x27, 0xd7, + 0xba, 0x1c, 0xd1, 0xb1, 0x47, 0x4e, 0x0f, 0x37, 0xe7, 0xd4, 0x80, 0x14, 0xdd, 0x87, 0xe4, 0x6b, + 0x7c, 0x54, 0x4d, 0xd2, 0x19, 0x28, 0x98, 0xf1, 0x0a, 0x1f, 0x05, 0xc4, 0x84, 0x00, 0xad, 0x42, + 0x7a, 0x80, 0x0d, 0x53, 0xaf, 0xa6, 0x28, 0xe5, 0x62, 0x40, 0xb9, 0x47, 0xa0, 0x01, 0x2d, 0x23, + 0x42, 0xcf, 0x20, 0x33, 0x74, 0xb0, 0x8b, 0xbd, 0x6a, 0xfa, 0xae, 0xf4, 0xb0, 0xbc, 0xf1, 0x59, + 0x40, 0xae, 0x58, 0x3d, 0xdb, 0x30, 0xad, 0x93, 0x36, 0xdb, 0xf0, 0x01, 0xa5, 0x6a, 0x4a, 0x2a, + 0xa7, 0x47, 0x4f, 0x21, 0xa7, 0x1b, 0xe7, 0xba, 0xd5, 0xc3, 0x46, 0x35, 0x43, 0x3f, 0x55, 0xbd, + 0x6c, 0x6e, 0x53, 0x52, 0x03, 0x5a, 0xf4, 0x08, 0xb2, 0xf6, 0xc8, 0x1b, 0x8e, 0x3c, 0xb7, 0x9a, + 0xbd, 0x9b, 0x7c, 0x58, 0xd8, 0xa8, 0x04, 0xd3, 0xda, 0x14, 0xae, 0xfa, 0x78, 0xb4, 0x0e, 0x59, + 0xd7, 0xb3, 0x1d, 0xfd, 0x04, 0x57, 0x73, 0xf4, 0x0b, 0x4b, 0x01, 0x69, 0x87, 0xc1, 0xb7, 0x6d, + 0xeb, 0xd8, 0x3c, 0x51, 0x7d, 0x32, 0xb4, 0x01, 0xb9, 0xd7, 0xf8, 0xe8, 0xd4, 0xb6, 0xcf, 0xdc, + 0x6a, 0x9e, 0xae, 0xbe, 0x24, 0x9e, 0x14, 0x41, 0xf0, 0x29, 0x01, 0xdd, 0x56, 0x0e, 0x32, 0x2e, + 0x3d, 0x95, 0x2d, 0x80, 0x1c, 0xe6, 0x9c, 0xd7, 0xfe, 0x48, 0x82, 0xf2, 0xb8, 0x34, 0xd0, 0x12, + 0x64, 0xfa, 0xfa, 0x85, 0x3d, 0xf2, 0xb8, 0x48, 0xf9, 0x08, 0x7d, 0x0a, 0xa0, 0x8f, 0x0c, 0xd3, + 0xd6, 0x6c, 0xab, 0x7f, 0x41, 0x45, 0x9a, 0x53, 0xf3, 0x14, 0xd2, 0xb6, 0xfa, 0x17, 0x04, 0x7d, + 0x6e, 0x1a, 0x98, 0xa3, 0x93, 0x0c, 0x4d, 0x21, 0x14, 0x7d, 0x1f, 0x2a, 0xbd, 0x91, 0xeb, 0xd9, + 0x03, 0xed, 0x48, 0x77, 0xb1, 0x36, 0x72, 0xfa, 0x54, 0x72, 0x79, 0xb5, 0xc4, 0xc0, 0x5b, 0xba, + 0x8b, 0x0f, 0x9d, 0x7e, 0xed, 0xf7, 0x25, 0xc8, 0x07, 0xc2, 0x46, 0x32, 0x24, 0x09, 0x25, 0x63, + 0x84, 0xfc, 0xbc, 0x26, 0x17, 0xab, 0x80, 0xf4, 0xd7, 0xba, 0xe9, 0x69, 0x2e, 0xd1, 0x66, 0xcd, + 0x35, 0x4f, 0x2c, 0x9d, 0x31, 0x92, 0x53, 0x65, 0x8a, 0xa1, 0x6a, 0xde, 0xa1, 0xf0, 0xda, 0xaf, + 0x24, 0x28, 0x08, 0xea, 0x84, 0x9e, 0x41, 0x99, 0x2d, 0xee, 0x39, 0x7a, 0xef, 0x4c, 0x33, 0x0d, + 0xc6, 0xd8, 0x96, 0xfc, 0xf6, 0xdd, 0x6a, 0x91, 0x62, 0xba, 0x04, 0xd1, 0x6a, 0x34, 0xe7, 0x54, + 0x71, 0x6c, 0xa0, 0x26, 0xcc, 0x0f, 0x75, 0xc7, 0x33, 0x7b, 0xe6, 0x50, 0xb7, 0x3c, 0x8d, 0xe2, + 0xb8, 0x55, 0xdc, 0x0a, 0x24, 0x77, 0x10, 0x52, 0x7c, 0x4d, 0x08, 0x9a, 0x73, 0xaa, 0x3c, 0x8c, + 0xc0, 0xd0, 0x0a, 0xa4, 0xe9, 0x6e, 0xb9, 0x85, 0x84, 0x7a, 0x5f, 0x27, 0x50, 0x2e, 0x75, 0x46, + 0x82, 0x1e, 0x40, 0xca, 0xd0, 0x3d, 0xdf, 0x44, 0x16, 0x02, 0xd2, 0x86, 0xee, 0xe9, 0x9c, 0x92, + 0x12, 0x6c, 0x65, 0x21, 0x4d, 0x59, 0xaa, 0xfd, 0x1e, 0xc8, 0x51, 0x2e, 0xd0, 0x32, 0xe4, 0x4c, + 0x03, 0x5b, 0x9e, 0xe9, 0x5d, 0xf8, 0x46, 0xee, 0x8f, 0xd1, 0x1a, 0x2c, 0x0c, 0x1d, 0x7c, 0x8c, + 0x1d, 0xcd, 0xed, 0x39, 0x18, 0x5b, 0x9a, 0x7b, 0xaa, 0x3b, 0x98, 0x8b, 0x65, 0x9e, 0xa1, 0x3a, + 0x14, 0xd3, 0x21, 0x88, 0xda, 0x73, 0x28, 0x08, 0x7c, 0xa2, 0x2f, 0x20, 0xe3, 0xd8, 0x23, 0x0f, + 0xbb, 0x55, 0x89, 0x6a, 0xf1, 0xc2, 0xf8, 0x6e, 0x54, 0x82, 0x53, 0x39, 0x49, 0xed, 0xbf, 0x25, + 0x80, 0x10, 0x8c, 0x1e, 0x42, 0x2e, 0x22, 0x86, 0xc2, 0xdb, 0x77, 0xab, 0x59, 0x2f, 0x90, 0x00, + 0xff, 0x69, 0xa0, 0x4d, 0x58, 0x14, 0x0f, 0x3f, 0xd8, 0x0c, 0xe1, 0x32, 0xdf, 0x9c, 0x53, 0x17, + 0x04, 0x6c, 0xcb, 0xdf, 0xd9, 0x4f, 0x41, 0x3c, 0x7b, 0xed, 0xcc, 0xb4, 0x0c, 0x7a, 0xe4, 0xe5, + 0x8d, 0x4f, 0xe3, 0x04, 0xd6, 0xb2, 0x8e, 0xed, 0xb5, 0x97, 0xa6, 0x65, 0x34, 0xe7, 0xd4, 0x8a, + 0x30, 0x91, 0x80, 0xd0, 0x63, 0xc8, 0xf6, 0x4e, 0x75, 0xcb, 0xc2, 0x4c, 0xd5, 0xca, 0x1b, 0x37, + 0x22, 0x52, 0x63, 0x48, 0xd5, 0xa7, 0x22, 0xf2, 0x18, 0xe8, 0x5e, 0xef, 0xb4, 0x56, 0x07, 0x08, + 0x85, 0x85, 0x36, 0x21, 0xef, 0xe2, 0x3e, 0xee, 0x79, 0xb6, 0xe3, 0x9f, 0xd8, 0x8d, 0x31, 0xa1, + 0x76, 0x38, 0x56, 0x0d, 0xe9, 0x88, 0x85, 0x17, 0x45, 0xdc, 0xff, 0xf5, 0xc1, 0x2d, 0x41, 0xda, + 0xb3, 0x87, 0x66, 0x8f, 0x9e, 0x16, 0xa1, 0x62, 0xc3, 0x70, 0x4f, 0xff, 0x9c, 0x84, 0x4a, 0xc4, + 0x73, 0xa2, 0x45, 0x48, 0xbf, 0x36, 0x0d, 0xef, 0x94, 0x32, 0x94, 0x56, 0xd9, 0x80, 0x78, 0xa2, + 0x53, 0x6c, 0x9e, 0x9c, 0x7a, 0xf4, 0x8b, 0x69, 0x95, 0x8f, 0x08, 0xb5, 0x81, 0x87, 0xde, 0x29, + 0xfd, 0x44, 0x5a, 0x65, 0x03, 0xf4, 0x09, 0xe4, 0x8f, 0x1d, 0x7d, 0x80, 0x1d, 0x72, 0xe3, 0xa4, + 0x28, 0x26, 0x04, 0xa0, 0x27, 0x50, 0x60, 0x7e, 0xa3, 0x67, 0x1b, 0xb8, 0xc7, 0xaf, 0x81, 0x85, + 0xa8, 0xf5, 0x18, 0xb8, 0xa7, 0x32, 0xff, 0x42, 0x7f, 0xa3, 0x7b, 0x50, 0x62, 0xb3, 0x8e, 0x4c, + 0x8f, 0xae, 0x9b, 0xa1, 0xeb, 0x16, 0x29, 0x70, 0x8b, 0xc1, 0xd0, 0x03, 0xa8, 0x30, 0xa2, 0x63, + 0x87, 0x5c, 0x8c, 0x56, 0xef, 0xa2, 0x9a, 0xa5, 0x64, 0x65, 0x0a, 0xde, 0xf1, 0xa1, 0x84, 0x07, + 0xe6, 0x3f, 0x18, 0x0f, 0xb9, 0x08, 0x0f, 0xd4, 0xdc, 0x38, 0x0f, 0xe7, 0xc1, 0x6f, 0xc2, 0x03, + 0x9b, 0xe5, 0xf3, 0x90, 0x67, 0x3c, 0x50, 0xa0, 0xcf, 0xc3, 0x2a, 0xa0, 0x33, 0x7c, 0xa1, 0xd1, + 0xfd, 0x6a, 0xa6, 0xe5, 0x61, 0xe7, 0x5c, 0xef, 0x57, 0xe1, 0xae, 0xf4, 0x50, 0x52, 0xe5, 0x33, + 0x7c, 0xb1, 0x43, 0x10, 0x2d, 0x0e, 0x47, 0x0f, 0xfc, 0x6d, 0xfd, 0x6c, 0xa4, 0xf7, 0x89, 0x44, + 0x0b, 0x64, 0xc9, 0xad, 0x44, 0x55, 0xe2, 0x5b, 0xfb, 0x2d, 0x06, 0x27, 0x84, 0xec, 0xdb, 0x3e, + 0x61, 0x31, 0x24, 0xa4, 0x08, 0x4e, 0x58, 0xfb, 0xc3, 0x04, 0x64, 0xd8, 0xbd, 0x86, 0x1e, 0x41, + 0xea, 0xd8, 0xec, 0xb3, 0x80, 0x40, 0x34, 0xe9, 0x1d, 0xb3, 0x8f, 0x19, 0x49, 0x73, 0x4e, 0xa5, + 0x24, 0xe8, 0x31, 0x64, 0x5c, 0xcf, 0xc1, 0xfa, 0x80, 0xfb, 0xc2, 0x1b, 0xc2, 0xc5, 0x47, 0xc0, + 0x01, 0x39, 0x27, 0x43, 0xcf, 0x21, 0xe7, 0xe2, 0x93, 0x01, 0xb6, 0x3c, 0x97, 0x3b, 0xc0, 0x4f, + 0xc2, 0x29, 0x0c, 0x81, 0x8d, 0xb1, 0x0f, 0x05, 0xf4, 0x68, 0x0d, 0x32, 0xe6, 0x40, 0x3f, 0xc1, + 0xee, 0x44, 0xc8, 0xd0, 0x22, 0xe0, 0xf0, 0x5b, 0x8c, 0x4a, 0xbc, 0x96, 0x33, 0x33, 0x5d, 0xcb, + 0xe4, 0x8a, 0xed, 0x51, 0x50, 0xed, 0x0f, 0x24, 0x80, 0x90, 0x0d, 0xf4, 0x03, 0xc8, 0x93, 0xfd, + 0x6a, 0xde, 0xc5, 0x90, 0x9d, 0x4b, 0x39, 0x1a, 0x45, 0x30, 0xae, 0xbb, 0x17, 0x43, 0xac, 0xe6, + 0x8e, 0xf9, 0x2f, 0xe2, 0x79, 0xc9, 0xef, 0xa1, 0xee, 0x9d, 0x32, 0x9b, 0x53, 0x83, 0x31, 0x7a, + 0x04, 0xb2, 0x61, 0xba, 0xfa, 0x51, 0x1f, 0x6b, 0x03, 0xdd, 0x32, 0x8f, 0xb1, 0xeb, 0xf1, 0xeb, + 0xae, 0xc2, 0xe1, 0x7b, 0x1c, 0x5c, 0x7b, 0x05, 0x45, 0xf1, 0x38, 0xd1, 0x26, 0xe4, 0x68, 0x58, + 0xd7, 0xb3, 0xfb, 0x9c, 0x99, 0x9b, 0x91, 0x73, 0x3f, 0xe0, 0x68, 0x35, 0x20, 0x44, 0x08, 0x52, + 0x23, 0xa7, 0xef, 0x56, 0x13, 0x77, 0x93, 0x0f, 0xf3, 0x2a, 0xfd, 0x5d, 0xfb, 0xeb, 0x14, 0x2c, + 0xc4, 0x9c, 0x3a, 0x91, 0x52, 0xe4, 0x03, 0x9f, 0xc5, 0x4b, 0x29, 0xe6, 0x3b, 0x0f, 0xa0, 0x42, + 0xf6, 0x48, 0x42, 0x4a, 0x8d, 0xdc, 0x1f, 0xe6, 0x1b, 0xbe, 0xf5, 0xb2, 0x0f, 0x3e, 0xa0, 0x50, + 0x62, 0x16, 0xc3, 0xbe, 0x7e, 0xd1, 0x37, 0x5d, 0x8f, 0x05, 0xa0, 0xd4, 0xdf, 0xa8, 0x45, 0x1f, + 0x48, 0x83, 0xd0, 0x55, 0x40, 0xe4, 0xc3, 0xda, 0x38, 0x65, 0x81, 0x52, 0xca, 0x04, 0x73, 0x20, + 0x52, 0x3f, 0x02, 0x99, 0x6b, 0x8b, 0x66, 0x8c, 0x1c, 0x9d, 0xb8, 0x26, 0xaa, 0x2b, 0x25, 0xb5, + 0xc2, 0xe1, 0x0d, 0x0e, 0x46, 0x8a, 0xc0, 0xa6, 0x3b, 0x3a, 0x26, 0x6c, 0x02, 0xdd, 0xe9, 0x25, + 0xfa, 0xd8, 0xa1, 0x34, 0xe1, 0x26, 0xd8, 0x38, 0x56, 0x8a, 0xb9, 0x58, 0x29, 0xa2, 0x7b, 0x90, + 0x70, 0x37, 0xa9, 0xdf, 0x2a, 0x6c, 0xcc, 0x87, 0x1f, 0xd9, 0x3c, 0x1c, 0xf6, 0x6d, 0x9d, 0x5c, + 0x3b, 0x09, 0x77, 0x93, 0x44, 0xcf, 0x27, 0xbd, 0x21, 0xd7, 0xd7, 0x30, 0x7a, 0x7e, 0xb1, 0x7d, + 0x10, 0x90, 0x11, 0x02, 0xb4, 0x0e, 0x69, 0xfd, 0xe7, 0x23, 0x07, 0x53, 0x47, 0x25, 0x86, 0xb4, + 0x75, 0x02, 0xdd, 0xea, 0xdb, 0x47, 0x01, 0x3d, 0x23, 0x24, 0xa6, 0xaa, 0xf7, 0xcd, 0x76, 0xa7, + 0x43, 0xdd, 0x8f, 0x68, 0xaa, 0x75, 0x0a, 0x0e, 0xe8, 0x39, 0x19, 0x31, 0x06, 0x16, 0xe0, 0xd6, + 0xfe, 0x2b, 0x09, 0x05, 0xc1, 0xc4, 0xc8, 0xa6, 0x7b, 0xfa, 0xd0, 0x1b, 0x39, 0x82, 0xa7, 0x92, + 0xd8, 0x31, 0x73, 0x78, 0xe0, 0xa8, 0x82, 0x7b, 0x21, 0x11, 0x7f, 0x2f, 0x24, 0xc7, 0xee, 0x85, + 0x18, 0xdd, 0x49, 0xc5, 0xea, 0x4e, 0x7d, 0x52, 0x7a, 0xe9, 0x88, 0x55, 0x52, 0x86, 0xa7, 0x48, + 0xee, 0x09, 0x14, 0xa8, 0x9f, 0xe0, 0xbe, 0x3c, 0x13, 0xf1, 0xe5, 0x74, 0x3a, 0xf7, 0xe5, 0x66, + 0xf0, 0x3b, 0x56, 0xde, 0xd9, 0x69, 0xf2, 0xce, 0xcd, 0x24, 0xef, 0xfc, 0xcc, 0xf2, 0x86, 0xab, + 0xcb, 0xbb, 0x70, 0x55, 0x79, 0xff, 0xa3, 0x04, 0xa5, 0x31, 0x0f, 0xc9, 0xf7, 0x22, 0xcd, 0xb4, + 0x97, 0xc4, 0xcc, 0x7b, 0x49, 0xce, 0xba, 0x97, 0x75, 0xc8, 0xea, 0x7d, 0x53, 0xb3, 0x5d, 0xdf, + 0xf5, 0x4f, 0xdf, 0x8c, 0xeb, 0x92, 0x14, 0x69, 0xe8, 0xd8, 0xe4, 0x86, 0x73, 0x6a, 0xff, 0x91, + 0x82, 0x9c, 0xcf, 0x2a, 0xba, 0x07, 0xa0, 0xf7, 0x7a, 0xd8, 0x75, 0xb5, 0x33, 0xcc, 0xc3, 0xe1, + 0xad, 0xd4, 0x2f, 0xde, 0xad, 0x4a, 0x6a, 0x9e, 0xc1, 0x5f, 0xe2, 0x0b, 0xf4, 0x09, 0x64, 0x5c, + 0xdc, 0x73, 0x30, 0x8b, 0x5b, 0x7c, 0x02, 0x0e, 0x43, 0x8f, 0xa0, 0xe4, 0x62, 0xd7, 0x35, 0x6d, + 0x4b, 0xf3, 0xec, 0x33, 0x6c, 0x31, 0x77, 0xc4, 0x89, 0x8a, 0x1c, 0xd5, 0x25, 0x18, 0xb4, 0x0a, + 0x15, 0xdd, 0x75, 0x47, 0x03, 0xac, 0x39, 0x76, 0x1f, 0x6b, 0xba, 0x63, 0xd1, 0x0b, 0xd8, 0x27, + 0x2e, 0x31, 0xa4, 0x6a, 0xf7, 0x71, 0xdd, 0xb1, 0x50, 0x07, 0x6e, 0x8a, 0xd4, 0xf8, 0x8d, 0x87, + 0x1d, 0x4b, 0xef, 0x93, 0x38, 0xaf, 0x44, 0x67, 0x7d, 0x42, 0x66, 0xbd, 0x7d, 0xb7, 0xba, 0x18, + 0xce, 0x53, 0x38, 0x51, 0xab, 0xa1, 0xc6, 0x41, 0x0d, 0x62, 0x6b, 0x0e, 0x3e, 0x21, 0x9e, 0x90, + 0xf9, 0x57, 0x3e, 0x22, 0x77, 0x13, 0xb6, 0x8c, 0xa1, 0x6d, 0x5a, 0x1e, 0x37, 0xb2, 0x60, 0x4c, + 0xe6, 0x1c, 0x8d, 0x7a, 0x67, 0x3c, 0xdb, 0xce, 0xab, 0x7c, 0x84, 0x1e, 0x82, 0x7c, 0x6c, 0x3b, + 0x3d, 0xac, 0x91, 0x1b, 0x4c, 0x73, 0xbd, 0x8b, 0x3e, 0xbb, 0x5a, 0x73, 0x6a, 0x99, 0xc2, 0x0f, + 0x74, 0xef, 0xb4, 0x43, 0xa0, 0xe8, 0x47, 0x90, 0x1b, 0x60, 0x4f, 0xa7, 0xd9, 0x0b, 0x4b, 0x9f, + 0xef, 0x4c, 0xa8, 0xcd, 0xda, 0x1e, 0xa7, 0x50, 0x2c, 0xcf, 0xb9, 0x50, 0x83, 0x09, 0xa8, 0x0a, + 0x59, 0x4f, 0x3f, 0x39, 0x31, 0xad, 0x13, 0x6a, 0x3e, 0x79, 0xd5, 0x1f, 0xa2, 0xc7, 0xb0, 0xd0, + 0xb3, 0x2d, 0x8f, 0x3a, 0x78, 0xd3, 0x1d, 0xda, 0xae, 0x49, 0x7d, 0x7c, 0x9e, 0x52, 0x21, 0x8e, + 0x6a, 0x84, 0x18, 0x92, 0x6d, 0x0d, 0x1d, 0xfb, 0xcd, 0x05, 0xb7, 0x9b, 0x30, 0x64, 0x38, 0x20, + 0x50, 0x3f, 0xdb, 0xa2, 0x24, 0xcb, 0x3f, 0x82, 0xd2, 0x18, 0x47, 0x24, 0x79, 0x0d, 0x94, 0x44, + 0x25, 0x3f, 0x89, 0x3b, 0x3b, 0xd7, 0xfb, 0x23, 0xcc, 0xaf, 0x34, 0x36, 0x78, 0x9e, 0x78, 0x26, + 0xd5, 0x5e, 0x43, 0x3e, 0x50, 0x74, 0x74, 0x1f, 0x0a, 0x3d, 0x07, 0xd3, 0x80, 0x5a, 0xef, 0xbb, + 0x63, 0x5a, 0x26, 0x22, 0x84, 0x73, 0x4e, 0x8c, 0x9d, 0x73, 0xc0, 0x75, 0xf2, 0xbd, 0x5c, 0xd7, + 0x7e, 0x21, 0x41, 0x25, 0x62, 0x38, 0xe8, 0x01, 0x14, 0xf5, 0x5e, 0xcf, 0x1e, 0x59, 0x9e, 0x50, + 0xda, 0xf1, 0x19, 0xe0, 0x18, 0x7a, 0x61, 0x7e, 0x0e, 0xfe, 0x90, 0x9a, 0x83, 0xa8, 0xed, 0xc0, + 0x11, 0xc4, 0x1e, 0x3e, 0x87, 0x32, 0x39, 0x5b, 0xdd, 0xb4, 0xb0, 0x23, 0xde, 0xd5, 0xa5, 0x00, + 0x4a, 0x56, 0xab, 0xfd, 0x85, 0x04, 0x45, 0xd1, 0x1e, 0x3f, 0x86, 0xb1, 0x7d, 0x44, 0xf5, 0xad, + 0xfd, 0x2e, 0x14, 0x84, 0x03, 0x8c, 0xa9, 0x4d, 0x2c, 0x43, 0x6e, 0xe4, 0x12, 0xc3, 0x19, 0xf8, + 0x12, 0x0e, 0xc6, 0xe8, 0x2e, 0xe4, 0x86, 0xba, 0xeb, 0xbe, 0xb6, 0x1d, 0x96, 0x47, 0xfa, 0x8c, + 0x06, 0xd0, 0x9a, 0x0b, 0xf3, 0xbb, 0xa6, 0x7b, 0x95, 0x12, 0xdb, 0x23, 0xc8, 0xb3, 0xda, 0x1e, + 0x31, 0x71, 0xb6, 0xfb, 0xe2, 0xdb, 0x77, 0xab, 0x39, 0x06, 0x6c, 0x35, 0x54, 0xff, 0x17, 0x35, + 0x63, 0xbd, 0xe7, 0x99, 0xe7, 0x98, 0x07, 0x89, 0x7c, 0x54, 0xfb, 0x09, 0x20, 0xf1, 0xa3, 0xee, + 0xd0, 0xb6, 0x5c, 0xb2, 0x70, 0xda, 0xf4, 0xf0, 0x60, 0x32, 0x2d, 0x67, 0x74, 0x24, 0xd9, 0x55, + 0x19, 0x45, 0xed, 0xef, 0x25, 0x58, 0x38, 0x1c, 0x1a, 0xba, 0x87, 0xc7, 0x19, 0x1f, 0xe3, 0x4d, + 0x9a, 0xca, 0x1b, 0x3f, 0xc8, 0x44, 0x78, 0x90, 0x61, 0x09, 0x2a, 0x39, 0x56, 0x82, 0xba, 0x0f, + 0x15, 0xdd, 0x30, 0x34, 0x96, 0x0c, 0x68, 0x34, 0x1e, 0x4d, 0xd1, 0x78, 0xb4, 0xa4, 0x1b, 0x06, + 0x0b, 0x5d, 0x0f, 0x9d, 0xbe, 0x4b, 0xc2, 0x3e, 0x07, 0x0f, 0xec, 0x73, 0x3c, 0x46, 0x9a, 0xa6, + 0xa4, 0x32, 0xc3, 0x84, 0xd4, 0xb5, 0xaf, 0x60, 0xbe, 0xe3, 0xd9, 0xc3, 0x0f, 0xe5, 0xbf, 0xf6, + 0xef, 0x00, 0x10, 0x1e, 0xcc, 0x55, 0x76, 0x7e, 0x0f, 0xb2, 0x54, 0xba, 0x81, 0xf8, 0xe0, 0xed, + 0xbb, 0xd5, 0x0c, 0x01, 0xb5, 0x1a, 0x2a, 0xfb, 0x6b, 0x8c, 0xab, 0x40, 0x29, 0xa2, 0x02, 0xcf, + 0xa1, 0xc0, 0xaa, 0x7a, 0x2c, 0xb7, 0x58, 0xa6, 0x61, 0xc8, 0xad, 0x88, 0xbc, 0x58, 0xf9, 0x8a, + 0x26, 0x17, 0xe0, 0x06, 0xbf, 0xd1, 0xf7, 0x49, 0xf6, 0xa5, 0x7b, 0x23, 0x97, 0x17, 0x36, 0x6e, + 0x44, 0xa7, 0x51, 0xa4, 0xca, 0x89, 0xd0, 0xa7, 0x00, 0xb4, 0x6a, 0x86, 0x0d, 0x4d, 0xf7, 0xa8, + 0x43, 0x4c, 0xaa, 0x79, 0x0e, 0xa9, 0x7b, 0xe8, 0x16, 0xb5, 0x28, 0x86, 0x2c, 0x50, 0x64, 0x96, + 0x8e, 0xeb, 0xb4, 0x72, 0x38, 0xa2, 0x2a, 0x42, 0x91, 0x88, 0xcd, 0xe4, 0x90, 0x3a, 0xc9, 0x8e, + 0x32, 0xec, 0x44, 0xaa, 0x9f, 0x52, 0x7f, 0x75, 0x5b, 0xc8, 0x46, 0xa2, 0x35, 0x67, 0x72, 0x47, + 0x33, 0x62, 0xf4, 0x94, 0x98, 0x36, 0x09, 0xec, 0xab, 0x9f, 0x45, 0x32, 0x41, 0xe5, 0xcd, 0xd0, + 0x76, 0x3c, 0x95, 0x22, 0x85, 0x79, 0x8c, 0x1a, 0xed, 0x42, 0x99, 0x9e, 0x67, 0xcf, 0x1e, 0x50, + 0x3f, 0x8f, 0x79, 0x50, 0x70, 0x2f, 0x98, 0xaf, 0xda, 0xf6, 0x60, 0xdb, 0xc7, 0x46, 0x3f, 0x5f, + 0x72, 0x44, 0x2c, 0xfa, 0x3e, 0xab, 0x57, 0x97, 0x23, 0xb5, 0xbc, 0x57, 0xf8, 0x28, 0x3a, 0x91, + 0x96, 0xad, 0x15, 0x28, 0x08, 0x45, 0x93, 0xea, 0x02, 0x9d, 0xf6, 0xbd, 0xb8, 0x8a, 0x52, 0x74, + 0xba, 0x38, 0x0f, 0xb5, 0xa1, 0xc2, 0x6a, 0x38, 0xe1, 0x26, 0x58, 0x66, 0xf0, 0x6b, 0x61, 0x8d, + 0x9d, 0xe0, 0x2f, 0xdd, 0x45, 0xd9, 0x1b, 0x43, 0xa3, 0x4d, 0x48, 0x53, 0x08, 0x4f, 0x1d, 0x6e, + 0x8f, 0x2f, 0x13, 0x9d, 0xcd, 0x68, 0xd1, 0x73, 0x28, 0x73, 0xfb, 0x72, 0xb0, 0x3b, 0xea, 0x7b, + 0x6e, 0xb5, 0x12, 0xf1, 0x17, 0xcc, 0xca, 0xa8, 0xbf, 0x28, 0x31, 0x52, 0x95, 0x51, 0xa2, 0x27, + 0x50, 0xa4, 0x29, 0xb1, 0x3f, 0x53, 0xa6, 0x33, 0xe7, 0xc7, 0xaa, 0x05, 0x74, 0x5e, 0x81, 0x90, + 0xf9, 0xb3, 0xbe, 0x02, 0x3f, 0x13, 0x0b, 0x26, 0xce, 0x47, 0xea, 0x60, 0x3c, 0xed, 0x62, 0x4e, + 0xaa, 0xcc, 0xa9, 0xfd, 0xf9, 0xcf, 0xa0, 0xc4, 0xa2, 0x76, 0x7f, 0xf6, 0x62, 0x84, 0x61, 0x1a, + 0xb7, 0xb3, 0xb9, 0x45, 0x4a, 0xe9, 0xcf, 0x5c, 0x84, 0x34, 0x76, 0x1c, 0xdb, 0xe1, 0xc1, 0x02, + 0x1b, 0x10, 0xcd, 0xa6, 0x3f, 0x68, 0x16, 0x50, 0x5d, 0x62, 0x45, 0x27, 0x0a, 0x21, 0xf1, 0x3e, + 0x89, 0x44, 0x0c, 0xec, 0xe9, 0x66, 0xdf, 0xad, 0xde, 0x60, 0x91, 0x08, 0x1f, 0xa2, 0x2f, 0x60, + 0xde, 0x4f, 0x00, 0xb4, 0xbe, 0xdd, 0x63, 0xb9, 0xe6, 0x4d, 0x96, 0x97, 0xfa, 0x88, 0x5d, 0x0e, + 0x47, 0x6b, 0xb0, 0x70, 0xa4, 0xf7, 0xce, 0x46, 0x43, 0x8d, 0x57, 0x1a, 0xb4, 0x91, 0x8b, 0x8d, + 0xea, 0x2d, 0x56, 0x65, 0x65, 0x28, 0x1e, 0x70, 0x1f, 0xba, 0xd8, 0x40, 0x77, 0xa0, 0xe0, 0x60, + 0xcf, 0xb9, 0xd0, 0xe8, 0x0d, 0x5c, 0xbd, 0x4d, 0xd9, 0x02, 0x0a, 0xda, 0x26, 0x10, 0x62, 0x71, + 0xbc, 0xee, 0x92, 0x8d, 0xbc, 0xcc, 0x84, 0x02, 0x23, 0xd7, 0xc2, 0x56, 0xa2, 0x2a, 0x35, 0xa5, + 0xa0, 0xfa, 0xf2, 0x05, 0xaf, 0xec, 0x44, 0x93, 0x12, 0x5f, 0x56, 0x9c, 0x9c, 0xd5, 0x76, 0xbe, + 0x14, 0x4a, 0x35, 0xc5, 0x68, 0x75, 0x47, 0x90, 0x11, 0x9f, 0x14, 0x10, 0x6f, 0xe5, 0x21, 0xeb, + 0x30, 0x4d, 0x23, 0x39, 0x05, 0x13, 0x54, 0xed, 0x97, 0x09, 0x80, 0x90, 0xb7, 0xf8, 0x77, 0x01, + 0xc1, 0x3b, 0x25, 0xa6, 0x79, 0xa7, 0xe4, 0xb8, 0x77, 0x5a, 0x86, 0xdc, 0x58, 0xb6, 0x9f, 0x54, + 0x83, 0x31, 0xda, 0x08, 0x5c, 0x24, 0xcb, 0x0f, 0x97, 0x63, 0x0e, 0x6a, 0x2d, 0xe2, 0x27, 0x03, + 0x4d, 0xc9, 0x88, 0x9a, 0x52, 0x83, 0x52, 0x5f, 0x77, 0x89, 0xda, 0x12, 0xc1, 0xe8, 0x2c, 0xed, + 0x4b, 0xaa, 0x05, 0x02, 0x54, 0x09, 0xac, 0xee, 0x11, 0x75, 0x21, 0x68, 0x13, 0xbb, 0xf4, 0x88, + 0x4b, 0xaa, 0x3f, 0xac, 0xad, 0x41, 0x86, 0x7d, 0x05, 0x01, 0x64, 0xea, 0xdb, 0xdd, 0xd6, 0xd7, + 0x8a, 0x3c, 0x87, 0x8a, 0x90, 0xdb, 0x69, 0xed, 0xb7, 0x3a, 0x4d, 0xa5, 0x21, 0x4b, 0x04, 0xb3, + 0x53, 0x6f, 0xed, 0x2a, 0x0d, 0x39, 0x51, 0xfb, 0xa5, 0x04, 0x39, 0x5f, 0x2a, 0x7e, 0x19, 0x49, + 0x0c, 0x21, 0xfc, 0xf1, 0x47, 0x3a, 0xb6, 0x4c, 0xe4, 0xd8, 0x10, 0xa4, 0x5c, 0xf3, 0xe7, 0x98, + 0x1f, 0x27, 0xfd, 0x4d, 0xe8, 0x03, 0x45, 0x67, 0x71, 0x55, 0x30, 0xae, 0xfd, 0x4b, 0x02, 0x8a, + 0xa2, 0x4e, 0x4c, 0x16, 0x77, 0xa4, 0x99, 0x8b, 0x3b, 0xb9, 0x4b, 0x8a, 0x3b, 0x22, 0xbf, 0x89, + 0x4b, 0xf8, 0x4d, 0x0a, 0xfc, 0x7e, 0x01, 0xf3, 0xc1, 0xc2, 0x01, 0xe3, 0x2c, 0x54, 0x94, 0x7d, + 0x44, 0x60, 0xa1, 0x4f, 0x60, 0x69, 0x9c, 0x95, 0x60, 0x06, 0x73, 0x17, 0x8b, 0x22, 0x3b, 0xc1, + 0xac, 0x7b, 0x24, 0x13, 0x64, 0xde, 0x8c, 0x59, 0x6a, 0x9a, 0x7e, 0xbf, 0xc8, 0x81, 0xcc, 0x56, + 0xc7, 0x25, 0x94, 0x99, 0x26, 0xa1, 0xec, 0x98, 0x84, 0x6a, 0x7f, 0x22, 0x01, 0x84, 0xfe, 0x6c, + 0xf6, 0xea, 0xc8, 0x9d, 0xb0, 0xb4, 0x41, 0x98, 0x92, 0xe8, 0xaa, 0x7e, 0x15, 0x63, 0x92, 0xa5, + 0x2b, 0x28, 0x4d, 0xed, 0x6d, 0x02, 0x6e, 0xd4, 0x47, 0x9e, 0x3d, 0x71, 0xcf, 0x09, 0x2f, 0xb4, + 0xd2, 0x4c, 0x2f, 0xb4, 0x73, 0xb1, 0x2f, 0xb4, 0x89, 0xf7, 0xbc, 0xd0, 0xce, 0x09, 0x2f, 0xb4, + 0x3f, 0xe6, 0x37, 0x90, 0xff, 0x4c, 0x9b, 0xa4, 0x57, 0xc1, 0x72, 0x5c, 0x5d, 0x96, 0xbf, 0xd8, + 0xd2, 0xab, 0xa8, 0xcd, 0x5f, 0x6d, 0x95, 0xf0, 0x2a, 0xf2, 0x57, 0x48, 0xd1, 0x15, 0xa6, 0x56, + 0xa4, 0x83, 0x1b, 0x89, 0x2f, 0x43, 0xbc, 0x1d, 0x7f, 0x6b, 0xaf, 0xfd, 0x69, 0x02, 0x2a, 0xe4, + 0x70, 0x84, 0x2b, 0x77, 0xac, 0x04, 0x2c, 0xcd, 0x50, 0x02, 0x4e, 0x4f, 0x2b, 0x26, 0x25, 0x66, + 0x2a, 0xc0, 0x24, 0x67, 0x2e, 0xc0, 0xa4, 0xae, 0x5e, 0x4c, 0xca, 0x5c, 0xb5, 0x98, 0xf4, 0x77, + 0x29, 0x58, 0x88, 0x89, 0xe7, 0x48, 0x94, 0xcd, 0xe2, 0xb9, 0x48, 0x94, 0xcd, 0x80, 0x24, 0xca, + 0xe6, 0xbf, 0x48, 0x3a, 0x5d, 0x61, 0xcf, 0xbd, 0xf6, 0xf1, 0xb1, 0x8b, 0x3d, 0x6d, 0xe0, 0x72, + 0x9d, 0x2d, 0x51, 0x70, 0x9b, 0x42, 0xf7, 0x5c, 0xe2, 0xa2, 0xb1, 0x65, 0x08, 0x54, 0x4c, 0x79, + 0x0b, 0xd8, 0x32, 0x02, 0x1a, 0xb1, 0xab, 0x21, 0x75, 0xe5, 0xae, 0x86, 0xf4, 0xcc, 0x5d, 0x0d, + 0x99, 0xab, 0x75, 0x35, 0x64, 0xaf, 0xd1, 0xd5, 0x90, 0xfb, 0xb0, 0xae, 0x86, 0xfc, 0xec, 0x5d, + 0x0d, 0x70, 0xf5, 0xae, 0x86, 0xc2, 0xb5, 0xba, 0x1a, 0xfe, 0x35, 0x03, 0xcb, 0x97, 0x07, 0xf1, + 0xd3, 0x93, 0xea, 0x30, 0xf7, 0x4c, 0x4c, 0x69, 0x7f, 0x48, 0x46, 0x1b, 0x0f, 0xbe, 0x04, 0xf6, + 0x72, 0xa6, 0x0d, 0xcc, 0x37, 0xa6, 0x75, 0x52, 0xad, 0x50, 0x89, 0x44, 0x9e, 0xe7, 0xf7, 0x28, + 0x4e, 0x65, 0x2f, 0x91, 0x6c, 0x10, 0xe9, 0x58, 0x48, 0xcd, 0xd0, 0x37, 0x91, 0x8e, 0xe9, 0x9b, + 0x40, 0x4f, 0x78, 0x6c, 0xc6, 0x14, 0x67, 0x8a, 0x17, 0xa3, 0xf1, 0x96, 0xff, 0x00, 0xb7, 0x19, + 0x09, 0x04, 0xe3, 0x1f, 0xe0, 0xf8, 0x14, 0x3f, 0x0c, 0xfc, 0x4a, 0x88, 0xec, 0xe0, 0xfd, 0x8f, + 0x70, 0x7c, 0x76, 0xf8, 0x10, 0x17, 0xaa, 0x6d, 0xee, 0x1a, 0x6a, 0x9b, 0xbf, 0x82, 0xda, 0x46, + 0x5d, 0x7d, 0xe1, 0x6a, 0xae, 0xfe, 0x37, 0x82, 0x3c, 0xc7, 0x5f, 0xa0, 0x18, 0x4d, 0x3a, 0x84, + 0xd3, 0xf2, 0x33, 0x9d, 0x29, 0x17, 0x45, 0xe9, 0xea, 0x17, 0x05, 0xfa, 0xa1, 0x9f, 0xba, 0xf8, + 0x8b, 0x94, 0xe9, 0x22, 0xb1, 0xaf, 0x98, 0x3c, 0x77, 0xf1, 0xa7, 0x8a, 0x86, 0x25, 0xcf, 0x6e, + 0x58, 0xec, 0x43, 0xe2, 0x0d, 0xf5, 0x3f, 0x69, 0x90, 0xa3, 0x99, 0xed, 0xb7, 0xd4, 0xa3, 0x53, + 0x8c, 0xef, 0xd1, 0x09, 0xf4, 0x3e, 0xf5, 0x81, 0x7a, 0x9f, 0xfe, 0x30, 0xbd, 0xcf, 0x5c, 0x4b, + 0xef, 0xbf, 0x2d, 0x77, 0x1d, 0xd5, 0xfb, 0xfc, 0x75, 0xf5, 0x1e, 0xae, 0xa7, 0xf7, 0x85, 0x8f, + 0xa1, 0xf7, 0xa5, 0x0f, 0xd2, 0xfb, 0xf2, 0x75, 0xf4, 0xfe, 0x6f, 0x52, 0x50, 0xbd, 0xac, 0x34, + 0x33, 0xfd, 0x36, 0x11, 0x9b, 0xa7, 0x12, 0x91, 0xe6, 0xa9, 0xef, 0x41, 0x71, 0xac, 0x6b, 0x8a, + 0x59, 0x42, 0xc1, 0x0d, 0xfb, 0xa5, 0x04, 0x95, 0x49, 0x5d, 0x23, 0x2a, 0x4e, 0x5f, 0x23, 0x2a, + 0xce, 0x5c, 0x57, 0x65, 0xb2, 0xd7, 0x53, 0x99, 0xdc, 0xc7, 0x50, 0x99, 0xfc, 0x07, 0xa9, 0x0c, + 0xcc, 0xa8, 0x32, 0x82, 0xa2, 0xfc, 0x71, 0x06, 0x6e, 0x4f, 0x29, 0xbc, 0x4d, 0xd7, 0x95, 0xa7, + 0xc0, 0x1a, 0x86, 0xc2, 0xf6, 0xc2, 0x44, 0xd8, 0x5e, 0x48, 0x31, 0xbc, 0xbd, 0x50, 0x15, 0x47, + 0x06, 0x99, 0x17, 0x69, 0x4b, 0x4c, 0xc6, 0xb7, 0x25, 0x46, 0x9a, 0x12, 0xff, 0x9f, 0x5c, 0x67, + 0xee, 0x5a, 0xae, 0x33, 0x73, 0x0d, 0xd7, 0x99, 0xfd, 0x2e, 0x64, 0xf8, 0x10, 0x3b, 0xa8, 0x5c, + 0xc7, 0x75, 0xfe, 0x4a, 0x02, 0x34, 0x59, 0x43, 0x9e, 0x6e, 0x08, 0xf7, 0x85, 0x0e, 0xc5, 0xc4, + 0x44, 0x87, 0x62, 0xd8, 0x9f, 0xf8, 0x98, 0x2b, 0x70, 0x32, 0x52, 0x7c, 0x6f, 0x98, 0x0e, 0xee, + 0x79, 0x31, 0xfd, 0x66, 0x9f, 0x43, 0xe9, 0x35, 0x3e, 0x72, 0xed, 0xde, 0x19, 0xf6, 0xc2, 0x16, + 0xe4, 0xe6, 0x9c, 0x5a, 0x0c, 0xc0, 0x24, 0x96, 0x16, 0x37, 0x9f, 0xbe, 0xea, 0xe6, 0x6b, 0x7f, + 0x96, 0x00, 0x39, 0xca, 0xc1, 0x77, 0x79, 0xfc, 0x3f, 0x24, 0x60, 0x7e, 0xc2, 0x66, 0xbe, 0xad, + 0xc6, 0xb8, 0xcc, 0xb4, 0xd3, 0x4c, 0xce, 0x74, 0x9a, 0xa9, 0x99, 0x4f, 0x33, 0x7d, 0xf5, 0xd3, + 0xcc, 0x5e, 0xf5, 0x34, 0xbf, 0xf1, 0x1f, 0x5d, 0x77, 0x69, 0x72, 0xfa, 0x01, 0x8f, 0xae, 0x97, + 0xa4, 0xb9, 0xb5, 0x3f, 0x0f, 0xde, 0x73, 0x3b, 0xfc, 0xbd, 0xe6, 0xca, 0x4b, 0xf3, 0x57, 0x5a, + 0xc6, 0xaa, 0x26, 0x74, 0x0d, 0x96, 0x74, 0xc3, 0x60, 0x82, 0x8f, 0xbc, 0xd2, 0x8a, 0xa4, 0x49, + 0xf1, 0x95, 0x36, 0xa4, 0xae, 0xfd, 0x10, 0xca, 0xe3, 0x8f, 0x13, 0xe8, 0x01, 0xa4, 0x4c, 0xeb, + 0xd8, 0x9e, 0x78, 0xa4, 0x16, 0x1e, 0x9d, 0x28, 0xc1, 0xca, 0x2b, 0x28, 0x8a, 0x7d, 0xd6, 0x68, + 0x09, 0x50, 0xfd, 0xb0, 0xd1, 0x6a, 0x6b, 0xdb, 0xcd, 0xfa, 0xfe, 0xbe, 0xb2, 0xab, 0x6d, 0xb5, + 0xbb, 0x4d, 0x79, 0x6e, 0x12, 0xbe, 0xab, 0xec, 0x74, 0x65, 0x09, 0xdd, 0x84, 0x85, 0x71, 0xb8, + 0xda, 0x7a, 0xd1, 0xec, 0xca, 0x89, 0x95, 0x7f, 0x92, 0xe0, 0x46, 0xec, 0x05, 0x84, 0x64, 0x28, + 0x36, 0x37, 0x9e, 0x3e, 0xd1, 0xbe, 0xdc, 0x58, 0x3f, 0xd0, 0x36, 0xd7, 0xe5, 0xb9, 0x71, 0xc8, + 0xd3, 0x75, 0x59, 0x42, 0xf3, 0x50, 0xa2, 0x90, 0x5f, 0x5f, 0x7f, 0xc6, 0x88, 0x12, 0x11, 0xd0, + 0xd3, 0x75, 0x39, 0x89, 0x6e, 0xc1, 0x8d, 0x83, 0xb6, 0xda, 0x55, 0xeb, 0xad, 0xae, 0x36, 0xb6, + 0x64, 0xea, 0x12, 0xd4, 0xd3, 0x75, 0x39, 0x8d, 0x96, 0x61, 0x69, 0x1c, 0x15, 0x7c, 0x24, 0x73, + 0x19, 0xee, 0xe9, 0xba, 0x9c, 0x5d, 0xd9, 0xe2, 0xbd, 0xd9, 0xa1, 0xd9, 0xa1, 0x45, 0x90, 0x1b, + 0xca, 0x4e, 0xfd, 0x70, 0xb7, 0xab, 0xed, 0xb4, 0x76, 0x95, 0xee, 0x6f, 0x1f, 0x28, 0xf2, 0x1c, + 0xca, 0x42, 0x72, 0xef, 0xe0, 0x89, 0x2c, 0x91, 0x1f, 0xed, 0x17, 0x2f, 0xe4, 0x04, 0x83, 0x6c, + 0xca, 0xc9, 0x95, 0xa6, 0x2f, 0x29, 0xbf, 0xbd, 0x53, 0x5c, 0xe2, 0x40, 0x6d, 0x77, 0xdb, 0xdb, + 0xed, 0x5d, 0x79, 0x0e, 0xe5, 0x20, 0xa5, 0x76, 0xf7, 0x0e, 0xd8, 0x1a, 0x1d, 0xb5, 0x2b, 0x27, + 0x50, 0x09, 0xf2, 0xaf, 0x94, 0xad, 0x4e, 0x7b, 0xfb, 0xa5, 0xd2, 0x95, 0x93, 0x2b, 0xfb, 0x70, + 0x23, 0xb6, 0x5f, 0x14, 0xdd, 0x83, 0x3b, 0xfe, 0x82, 0x1d, 0xe5, 0xc5, 0x9e, 0xb2, 0xdf, 0x55, + 0x1a, 0x94, 0x3b, 0x71, 0x7d, 0x72, 0xe2, 0xbb, 0x9d, 0x10, 0x22, 0xad, 0x3c, 0x8e, 0xf4, 0xab, + 0xf2, 0x5e, 0xbe, 0x3c, 0xa4, 0x5b, 0xfb, 0x0d, 0xe5, 0x1b, 0x79, 0x8e, 0x30, 0xd0, 0x6d, 0xed, + 0x29, 0x9d, 0x6e, 0x9d, 0x30, 0xb6, 0x72, 0x0c, 0x95, 0x48, 0x23, 0x20, 0x51, 0x92, 0xd6, 0x5e, + 0xfd, 0x85, 0xa2, 0x75, 0x0e, 0x77, 0x76, 0x5a, 0xdf, 0x68, 0xfe, 0xcc, 0x65, 0x58, 0x1a, 0x83, + 0x0b, 0xcb, 0xa0, 0x3b, 0x70, 0x7b, 0x0c, 0xb7, 0xdf, 0xde, 0x57, 0xb4, 0xf6, 0xd7, 0x8a, 0xfa, + 0x4a, 0x6d, 0x75, 0x15, 0x39, 0xb1, 0xf2, 0x53, 0x90, 0xa3, 0x4f, 0xf5, 0x64, 0x41, 0xe5, 0x85, + 0xaa, 0x74, 0x3a, 0x5a, 0xa7, 0x7d, 0xa8, 0x6e, 0x2b, 0x1a, 0x39, 0x79, 0xed, 0x95, 0xb2, 0xc5, + 0x3e, 0x16, 0x83, 0xeb, 0x34, 0x5e, 0xca, 0xd2, 0xca, 0x5f, 0x4a, 0x50, 0x14, 0x1f, 0xf0, 0xd1, + 0x02, 0x54, 0x7c, 0xe2, 0x6e, 0x5d, 0xed, 0xb6, 0xf6, 0x5f, 0xc8, 0x73, 0x44, 0xd3, 0x38, 0x90, + 0x3f, 0x27, 0x49, 0x02, 0x48, 0xd9, 0x6f, 0x10, 0xaa, 0x84, 0x30, 0x75, 0xbb, 0xbd, 0x77, 0xb0, + 0xab, 0x74, 0x15, 0x39, 0x29, 0xd0, 0xf1, 0xf7, 0xa6, 0x14, 0x42, 0x50, 0xf6, 0x57, 0xdb, 0x6a, + 0xab, 0x5d, 0xa5, 0x21, 0xa7, 0x51, 0x15, 0x16, 0x39, 0x6c, 0xb7, 0xb5, 0xd7, 0xea, 0x6a, 0xaa, + 0x52, 0xdf, 0x6e, 0x2a, 0x0d, 0x39, 0xb3, 0x72, 0xc8, 0xff, 0x0b, 0x84, 0x57, 0xc0, 0x10, 0x94, + 0x7d, 0x61, 0xee, 0xb5, 0xbe, 0x61, 0xec, 0x2d, 0x01, 0x6a, 0x1c, 0xd6, 0x77, 0x03, 0x8b, 0xab, + 0xbf, 0x50, 0xf6, 0x89, 0x29, 0x2e, 0xc3, 0xd2, 0x38, 0x7c, 0xb7, 0xab, 0xa8, 0xfb, 0x75, 0x72, + 0x88, 0x1b, 0x7f, 0x95, 0x81, 0x0c, 0x2f, 0x9b, 0xff, 0x04, 0x0a, 0x42, 0xef, 0x00, 0x9a, 0xd6, + 0x51, 0xb0, 0x1c, 0xd7, 0xdd, 0x82, 0xea, 0x50, 0x14, 0xbb, 0x5a, 0x50, 0x18, 0x78, 0xc5, 0x34, + 0xbb, 0xc4, 0x2f, 0xa1, 0x00, 0x84, 0xad, 0x35, 0x28, 0x8c, 0x1c, 0x27, 0x9a, 0x7c, 0x96, 0x6f, + 0xc7, 0xe2, 0x78, 0x2f, 0xce, 0x8f, 0x01, 0xc2, 0xee, 0x14, 0x24, 0x3e, 0x40, 0x46, 0x5a, 0x56, + 0xe2, 0xb9, 0xe8, 0x42, 0x95, 0xee, 0x39, 0xa6, 0x1c, 0x8a, 0x66, 0xe9, 0x78, 0x88, 0x5f, 0xf5, + 0x37, 0x89, 0x89, 0xeb, 0x8e, 0x17, 0x14, 0x83, 0xd0, 0xe5, 0xad, 0x0f, 0xf1, 0x2b, 0x1c, 0xc0, + 0x12, 0x5d, 0x61, 0xf2, 0x25, 0xe8, 0xfd, 0xdd, 0x10, 0xf1, 0x2b, 0x7e, 0x0d, 0xb7, 0xe8, 0x8a, + 0x71, 0xf9, 0x17, 0x9a, 0xa9, 0x2f, 0x22, 0x7e, 0xdd, 0x06, 0xc8, 0xe1, 0xba, 0x13, 0x0a, 0x35, + 0x19, 0xdb, 0xbe, 0x47, 0xa1, 0xd8, 0x8d, 0x3d, 0xa1, 0x50, 0x63, 0x17, 0xf9, 0x7b, 0x96, 0x60, + 0xde, 0x75, 0x62, 0x89, 0xb1, 0x0b, 0x3b, 0x76, 0x89, 0xad, 0x9d, 0xdf, 0xb9, 0x77, 0x62, 0x7a, + 0xa7, 0xa3, 0xa3, 0xb5, 0x9e, 0x3d, 0x78, 0xcc, 0x09, 0x1e, 0xfb, 0xcd, 0xf7, 0x3e, 0xe0, 0x6f, + 0x13, 0xa5, 0x5d, 0xf3, 0x1c, 0xbf, 0x64, 0x1d, 0x83, 0x9e, 0xfd, 0x9f, 0x89, 0x32, 0x1f, 0x3f, + 0x7f, 0x4e, 0x01, 0x47, 0x19, 0x3a, 0x65, 0xf3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x62, 0xe5, + 0xc2, 0xab, 0x64, 0x3a, 0x00, 0x00, } From 3a464795d2d0d13998c76cd0637c64bfda03c0d6 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Wed, 18 Mar 2026 16:01:26 +0800 Subject: [PATCH 09/10] update psrpc handler --- protobufs/rpc/egress.proto | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/protobufs/rpc/egress.proto b/protobufs/rpc/egress.proto index 587d7497d..d9182b770 100644 --- a/protobufs/rpc/egress.proto +++ b/protobufs/rpc/egress.proto @@ -34,12 +34,17 @@ service EgressInternal { } service EgressHandler { - rpc UpdateStream(livekit.UpdateStreamRequest) returns (livekit.EgressInfo) { + rpc UpdateEgress(livekit.UpdateEgressRequest) returns (livekit.EgressInfo) { option (psrpc.options).topics = true; } rpc StopEgress(livekit.StopEgressRequest) returns (livekit.EgressInfo) { option (psrpc.options).topics = true; } + + // --- Deprecated --- + rpc UpdateStream(livekit.UpdateStreamRequest) returns (livekit.EgressInfo) { + option (psrpc.options).topics = true; + } } message StartEgressRequest { From 384f889ebf4427dde667dd7a02ca2bbf1ce3f734 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 08:02:31 +0000 Subject: [PATCH 10/10] generated protobuf --- rpc/egress.pb.go | 28 +++++---- rpc/egress.psrpc.go | 136 ++++++++++++++++++++++++++------------------ 2 files changed, 98 insertions(+), 66 deletions(-) diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index 0fd832bdc..9dc42e43e 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -372,11 +372,12 @@ const file_rpc_egress_proto_rawDesc = "" + "egress_ids\x18\x01 \x03(\tR\tegressIds2\xb2\x01\n" + "\x0eEgressInternal\x12E\n" + "\vStartEgress\x12\x17.rpc.StartEgressRequest\x1a\x13.livekit.EgressInfo\"\b\xb2\x89\x01\x04\x10\x010\x01\x12Y\n" + - "\x10ListActiveEgress\x12\x1c.rpc.ListActiveEgressRequest\x1a\x1d.rpc.ListActiveEgressResponse\"\b\xb2\x89\x01\x04\x10\x01(\x012\xa1\x01\n" + + "\x10ListActiveEgress\x12\x1c.rpc.ListActiveEgressRequest\x1a\x1d.rpc.ListActiveEgressResponse\"\b\xb2\x89\x01\x04\x10\x01(\x012\xec\x01\n" + "\rEgressHandler\x12I\n" + - "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\"\x06\xb2\x89\x01\x02\x10\x01\x12E\n" + + "\fUpdateEgress\x12\x1c.livekit.UpdateEgressRequest\x1a\x13.livekit.EgressInfo\"\x06\xb2\x89\x01\x02\x10\x01\x12E\n" + "\n" + - "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfo\"\x06\xb2\x89\x01\x02\x10\x01B!Z\x1fgithub.com/livekit/protocol/rpcb\x06proto3" + "StopEgress\x12\x1a.livekit.StopEgressRequest\x1a\x13.livekit.EgressInfo\"\x06\xb2\x89\x01\x02\x10\x01\x12I\n" + + "\fUpdateStream\x12\x1c.livekit.UpdateStreamRequest\x1a\x13.livekit.EgressInfo\"\x06\xb2\x89\x01\x02\x10\x01B!Z\x1fgithub.com/livekit/protocol/rpcb\x06proto3" var ( file_rpc_egress_proto_rawDescOnce sync.Once @@ -402,9 +403,10 @@ var file_rpc_egress_proto_goTypes = []any{ (*livekit.ParticipantEgressRequest)(nil), // 7: livekit.ParticipantEgressRequest (*livekit.TrackCompositeEgressRequest)(nil), // 8: livekit.TrackCompositeEgressRequest (*livekit.TrackEgressRequest)(nil), // 9: livekit.TrackEgressRequest - (*livekit.UpdateStreamRequest)(nil), // 10: livekit.UpdateStreamRequest + (*livekit.UpdateEgressRequest)(nil), // 10: livekit.UpdateEgressRequest (*livekit.StopEgressRequest)(nil), // 11: livekit.StopEgressRequest - (*livekit.EgressInfo)(nil), // 12: livekit.EgressInfo + (*livekit.UpdateStreamRequest)(nil), // 12: livekit.UpdateStreamRequest + (*livekit.EgressInfo)(nil), // 13: livekit.EgressInfo } var file_rpc_egress_proto_depIdxs = []int32{ 3, // 0: rpc.StartEgressRequest.egress:type_name -> livekit.StartEgressRequest @@ -416,14 +418,16 @@ var file_rpc_egress_proto_depIdxs = []int32{ 9, // 6: rpc.StartEgressRequest.track:type_name -> livekit.TrackEgressRequest 0, // 7: rpc.EgressInternal.StartEgress:input_type -> rpc.StartEgressRequest 1, // 8: rpc.EgressInternal.ListActiveEgress:input_type -> rpc.ListActiveEgressRequest - 10, // 9: rpc.EgressHandler.UpdateStream:input_type -> livekit.UpdateStreamRequest + 10, // 9: rpc.EgressHandler.UpdateEgress:input_type -> livekit.UpdateEgressRequest 11, // 10: rpc.EgressHandler.StopEgress:input_type -> livekit.StopEgressRequest - 12, // 11: rpc.EgressInternal.StartEgress:output_type -> livekit.EgressInfo - 2, // 12: rpc.EgressInternal.ListActiveEgress:output_type -> rpc.ListActiveEgressResponse - 12, // 13: rpc.EgressHandler.UpdateStream:output_type -> livekit.EgressInfo - 12, // 14: rpc.EgressHandler.StopEgress:output_type -> livekit.EgressInfo - 11, // [11:15] is the sub-list for method output_type - 7, // [7:11] is the sub-list for method input_type + 12, // 11: rpc.EgressHandler.UpdateStream:input_type -> livekit.UpdateStreamRequest + 13, // 12: rpc.EgressInternal.StartEgress:output_type -> livekit.EgressInfo + 2, // 13: rpc.EgressInternal.ListActiveEgress:output_type -> rpc.ListActiveEgressResponse + 13, // 14: rpc.EgressHandler.UpdateEgress:output_type -> livekit.EgressInfo + 13, // 15: rpc.EgressHandler.StopEgress:output_type -> livekit.EgressInfo + 13, // 16: rpc.EgressHandler.UpdateStream:output_type -> livekit.EgressInfo + 12, // [12:17] is the sub-list for method output_type + 7, // [7:12] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension type_name 7, // [7:7] is the sub-list for extension extendee 0, // [0:7] is the sub-list for field type_name diff --git a/rpc/egress.psrpc.go b/rpc/egress.psrpc.go index 1ee57bae2..196b6fdea 100644 --- a/rpc/egress.psrpc.go +++ b/rpc/egress.psrpc.go @@ -171,10 +171,13 @@ func (UnimplementedEgressInternalServer) ListActiveEgress(context.Context, *List // ============================== type EgressHandlerClient interface { - UpdateStream(ctx context.Context, topic string, req *livekit4.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) + UpdateEgress(ctx context.Context, topic string, req *livekit4.UpdateEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) StopEgress(ctx context.Context, topic string, req *livekit4.StopEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) + // --- Deprecated --- + UpdateStream(ctx context.Context, topic string, req *livekit4.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) + // Close immediately, without waiting for pending RPCs Close() } @@ -184,9 +187,12 @@ type EgressHandlerClient interface { // ================================== type EgressHandlerServerImpl interface { - UpdateStream(context.Context, *livekit4.UpdateStreamRequest) (*livekit4.EgressInfo, error) + UpdateEgress(context.Context, *livekit4.UpdateEgressRequest) (*livekit4.EgressInfo, error) StopEgress(context.Context, *livekit4.StopEgressRequest) (*livekit4.EgressInfo, error) + + // --- Deprecated --- + UpdateStream(context.Context, *livekit4.UpdateStreamRequest) (*livekit4.EgressInfo, error) } // ============================== @@ -194,10 +200,13 @@ type EgressHandlerServerImpl interface { // ============================== type EgressHandlerServer interface { - RegisterUpdateStreamTopic(topic string) error - DeregisterUpdateStreamTopic(topic string) + RegisterUpdateEgressTopic(topic string) error + DeregisterUpdateEgressTopic(topic string) RegisterStopEgressTopic(topic string) error DeregisterStopEgressTopic(topic string) + // --- Deprecated --- + RegisterUpdateStreamTopic(topic string) error + DeregisterUpdateStreamTopic(topic string) // Close and wait for pending RPCs to complete Shutdown() @@ -221,8 +230,9 @@ func NewEgressHandlerClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (E ID: rand.NewClientID(), } - sd.RegisterMethod("UpdateStream", false, false, true, true) + sd.RegisterMethod("UpdateEgress", false, false, true, true) sd.RegisterMethod("StopEgress", false, false, true, true) + sd.RegisterMethod("UpdateStream", false, false, true, true) rpcClient, err := client.NewRPCClient(sd, bus, opts...) if err != nil { @@ -234,14 +244,18 @@ func NewEgressHandlerClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (E }, nil } -func (c *egressHandlerClient) UpdateStream(ctx context.Context, topic string, req *livekit4.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) { - return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "UpdateStream", []string{topic}, req, opts...) +func (c *egressHandlerClient) UpdateEgress(ctx context.Context, topic string, req *livekit4.UpdateEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) { + return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "UpdateEgress", []string{topic}, req, opts...) } func (c *egressHandlerClient) StopEgress(ctx context.Context, topic string, req *livekit4.StopEgressRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) { return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "StopEgress", []string{topic}, req, opts...) } +func (c *egressHandlerClient) UpdateStream(ctx context.Context, topic string, req *livekit4.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit4.EgressInfo, error) { + return client.RequestSingle[*livekit4.EgressInfo](ctx, c.client, "UpdateStream", []string{topic}, req, opts...) +} + func (s *egressHandlerClient) Close() { s.client.Close() } @@ -265,20 +279,21 @@ func NewEgressHandlerServer(svc EgressHandlerServerImpl, bus psrpc.MessageBus, o s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("UpdateStream", false, false, true, true) + sd.RegisterMethod("UpdateEgress", false, false, true, true) sd.RegisterMethod("StopEgress", false, false, true, true) + sd.RegisterMethod("UpdateStream", false, false, true, true) return &egressHandlerServer{ svc: svc, rpc: s, }, nil } -func (s *egressHandlerServer) RegisterUpdateStreamTopic(topic string) error { - return server.RegisterHandler(s.rpc, "UpdateStream", []string{topic}, s.svc.UpdateStream, nil) +func (s *egressHandlerServer) RegisterUpdateEgressTopic(topic string) error { + return server.RegisterHandler(s.rpc, "UpdateEgress", []string{topic}, s.svc.UpdateEgress, nil) } -func (s *egressHandlerServer) DeregisterUpdateStreamTopic(topic string) { - s.rpc.DeregisterHandler("UpdateStream", []string{topic}) +func (s *egressHandlerServer) DeregisterUpdateEgressTopic(topic string) { + s.rpc.DeregisterHandler("UpdateEgress", []string{topic}) } func (s *egressHandlerServer) RegisterStopEgressTopic(topic string) error { @@ -289,6 +304,14 @@ func (s *egressHandlerServer) DeregisterStopEgressTopic(topic string) { s.rpc.DeregisterHandler("StopEgress", []string{topic}) } +func (s *egressHandlerServer) RegisterUpdateStreamTopic(topic string) error { + return server.RegisterHandler(s.rpc, "UpdateStream", []string{topic}, s.svc.UpdateStream, nil) +} + +func (s *egressHandlerServer) DeregisterUpdateStreamTopic(topic string) { + s.rpc.DeregisterHandler("UpdateStream", []string{topic}) +} + func (s *egressHandlerServer) Shutdown() { s.rpc.Close(false) } @@ -303,7 +326,7 @@ func (s *egressHandlerServer) Kill() { type UnimplementedEgressHandlerServer struct{} -func (UnimplementedEgressHandlerServer) UpdateStream(context.Context, *livekit4.UpdateStreamRequest) (*livekit4.EgressInfo, error) { +func (UnimplementedEgressHandlerServer) UpdateEgress(context.Context, *livekit4.UpdateEgressRequest) (*livekit4.EgressInfo, error) { return nil, psrpc.ErrUnimplemented } @@ -311,46 +334,51 @@ func (UnimplementedEgressHandlerServer) StopEgress(context.Context, *livekit4.St return nil, psrpc.ErrUnimplemented } +func (UnimplementedEgressHandlerServer) UpdateStream(context.Context, *livekit4.UpdateStreamRequest) (*livekit4.EgressInfo, error) { + return nil, psrpc.ErrUnimplemented +} + var psrpcFileDescriptor2 = []byte{ - // 639 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x4e, 0x13, 0x4d, - 0x14, 0xff, 0x86, 0x7e, 0x5d, 0xe8, 0x29, 0x2d, 0xf5, 0x88, 0x61, 0xa8, 0x10, 0x4a, 0xf1, 0xa2, - 0x26, 0xd8, 0x12, 0x88, 0x26, 0xde, 0x69, 0xa1, 0x91, 0x26, 0x24, 0x9a, 0x45, 0x62, 0xa2, 0x17, - 0x9b, 0xed, 0xec, 0x58, 0x37, 0xdd, 0xee, 0x8c, 0xb3, 0xb3, 0x20, 0x6f, 0x20, 0xaf, 0xc0, 0x9d, - 0xaf, 0xc0, 0x85, 0x2f, 0xe2, 0x6b, 0xf0, 0x10, 0xa6, 0xb3, 0xed, 0xb2, 0x2c, 0x62, 0xbc, 0xea, - 0xf4, 0xf7, 0x6f, 0xce, 0x99, 0x39, 0xb3, 0x50, 0x53, 0x92, 0x75, 0xf8, 0x50, 0xf1, 0x28, 0x6a, - 0x4b, 0x25, 0xb4, 0xc0, 0x82, 0x92, 0xac, 0x5e, 0x11, 0x52, 0xfb, 0x22, 0x9c, 0x62, 0xf5, 0xe5, - 0x40, 0x0c, 0x87, 0x5c, 0x75, 0xf2, 0xa8, 0x7f, 0xca, 0x47, 0xbe, 0x76, 0xb2, 0xfe, 0xe6, 0xaf, - 0x22, 0xe0, 0xb1, 0x76, 0x95, 0xee, 0x19, 0xd4, 0xe6, 0x5f, 0x63, 0x1e, 0x69, 0x7c, 0x0a, 0xa5, - 0x44, 0xe6, 0xf8, 0x1e, 0x25, 0x0d, 0xd2, 0x2a, 0x75, 0x17, 0x2f, 0xaf, 0xb7, 0x17, 0x12, 0xb0, - 0x7f, 0x60, 0xcf, 0x56, 0x1e, 0x3e, 0x07, 0x2b, 0x59, 0xd3, 0x5a, 0x83, 0xb4, 0xca, 0xbb, 0x8f, - 0xdb, 0xd3, 0x8d, 0xda, 0x77, 0x73, 0x0f, 0xff, 0xb3, 0xa7, 0x62, 0x7c, 0x01, 0x96, 0xe2, 0x32, - 0x70, 0xcf, 0xe9, 0x03, 0x63, 0x5b, 0x4b, 0x6d, 0xbd, 0x6f, 0x52, 0x28, 0x6d, 0x1b, 0x32, 0xe3, - 0x4b, 0xd4, 0x78, 0x04, 0x55, 0x25, 0xc4, 0xd8, 0x61, 0x62, 0x2c, 0x45, 0xe4, 0x6b, 0x4e, 0x8b, - 0xc6, 0xbf, 0x95, 0xfa, 0x6d, 0x21, 0xc6, 0xfb, 0x33, 0x36, 0xbf, 0x7d, 0x45, 0x65, 0x59, 0x7c, - 0x06, 0x85, 0x33, 0x3e, 0xa0, 0x65, 0x13, 0xb1, 0x9a, 0x46, 0x7c, 0xe0, 0x83, 0xbc, 0x71, 0xa2, - 0xc3, 0x1e, 0x94, 0xa5, 0xab, 0xb4, 0xcf, 0x7c, 0xe9, 0x86, 0x9a, 0x56, 0x8c, 0x6d, 0x33, 0xb5, - 0xbd, 0xbb, 0xe1, 0xf2, 0xf6, 0xac, 0x0f, 0xdf, 0xc2, 0x92, 0x56, 0x2e, 0x1b, 0x65, 0x9a, 0xb0, - 0x4c, 0xd4, 0x93, 0x34, 0xea, 0xfd, 0x84, 0xbf, 0xb7, 0x8b, 0xaa, 0xbe, 0x45, 0xe3, 0x1e, 0x14, - 0x0d, 0x42, 0xe7, 0x73, 0x57, 0x60, 0x62, 0xf2, 0xee, 0x44, 0x8b, 0x5b, 0x30, 0x6f, 0x4e, 0xd2, - 0xf7, 0x68, 0xc1, 0xdc, 0x30, 0x5c, 0x5e, 0x6f, 0x5b, 0x13, 0xa8, 0x7f, 0x60, 0x27, 0xbf, 0x1e, - 0xd6, 0xa1, 0xa8, 0xc5, 0x88, 0x87, 0x74, 0xc1, 0x48, 0xfe, 0xff, 0x7e, 0xbd, 0x4d, 0xec, 0x04, - 0xc2, 0x47, 0x60, 0x9d, 0x45, 0x4e, 0xac, 0x02, 0x5a, 0x9a, 0x90, 0x76, 0xf1, 0x2c, 0x3a, 0x51, - 0x01, 0xee, 0xc0, 0x32, 0x0b, 0x44, 0xec, 0x39, 0x03, 0x97, 0x8d, 0x62, 0xe9, 0xf0, 0xd0, 0x1d, - 0x04, 0xdc, 0xa3, 0xd0, 0x20, 0xad, 0x05, 0x1b, 0x0d, 0xd7, 0x35, 0x54, 0x2f, 0x61, 0x70, 0x0b, - 0x2a, 0x3c, 0xd2, 0xfe, 0xd8, 0xd5, 0xdc, 0x73, 0x98, 0x8c, 0x69, 0xb5, 0x41, 0x5a, 0xc4, 0x5e, - 0x4c, 0xc1, 0x7d, 0x19, 0xe3, 0x06, 0x94, 0x15, 0xd7, 0xea, 0xdc, 0x61, 0x22, 0x0e, 0x35, 0x5d, - 0x6a, 0x90, 0x56, 0xd1, 0x06, 0x03, 0xed, 0x4f, 0x90, 0x6e, 0x09, 0xe6, 0x55, 0xd2, 0x63, 0x73, - 0x15, 0x56, 0x8e, 0xfc, 0x48, 0xbf, 0x66, 0xda, 0x3f, 0xbd, 0x7d, 0x78, 0xcd, 0x97, 0x40, 0xef, - 0x52, 0x91, 0x14, 0x61, 0xc4, 0x71, 0x1d, 0x20, 0x9d, 0xfa, 0x88, 0x92, 0x46, 0xa1, 0x55, 0xb2, - 0x4b, 0xb3, 0x41, 0x8f, 0x76, 0x7f, 0x12, 0xa8, 0x26, 0x8e, 0x7e, 0xa8, 0xb9, 0x0a, 0xdd, 0x00, - 0xdf, 0x40, 0x39, 0x33, 0xe5, 0xb8, 0xd2, 0x56, 0x92, 0xfd, 0x61, 0xee, 0xeb, 0x0f, 0x6f, 0xa6, - 0x7b, 0x1a, 0xf0, 0x59, 0x34, 0xe1, 0xea, 0x82, 0x58, 0x35, 0xf2, 0x8a, 0xec, 0x10, 0xfc, 0x04, - 0xb5, 0x7c, 0x59, 0xb8, 0x66, 0xd2, 0xee, 0x69, 0xa4, 0xbe, 0x7e, 0x0f, 0x9b, 0xf4, 0x92, 0x86, - 0xcf, 0xb5, 0xc8, 0xee, 0x0f, 0x02, 0x95, 0x84, 0x3e, 0x74, 0x43, 0x2f, 0xe0, 0x0a, 0xfb, 0xb0, - 0x78, 0x22, 0x3d, 0x57, 0xf3, 0x63, 0xad, 0xb8, 0x3b, 0xc6, 0x9b, 0xd7, 0x97, 0x85, 0xff, 0x5a, - 0xbd, 0x75, 0x75, 0x41, 0xe6, 0x6a, 0x04, 0x7b, 0x00, 0xc7, 0x5a, 0xc8, 0x69, 0xcd, 0xf5, 0xcc, - 0xeb, 0x9f, 0x81, 0xff, 0x12, 0xd3, 0xdd, 0xfc, 0xb8, 0x31, 0xf4, 0xf5, 0x97, 0x78, 0xd0, 0x66, - 0x62, 0xdc, 0x99, 0x0a, 0x3b, 0xe6, 0x23, 0xc5, 0x44, 0xd0, 0x51, 0x92, 0x0d, 0x2c, 0xf3, 0x6f, - 0xef, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x48, 0x7e, 0xb7, 0x06, 0x05, 0x00, 0x00, + // 645 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x4e, 0xdb, 0x3c, + 0x14, 0xff, 0x4c, 0xbf, 0x06, 0x7a, 0x4a, 0x4b, 0xe7, 0x31, 0x61, 0x3a, 0x10, 0xa5, 0xec, 0x22, + 0x93, 0x58, 0x8b, 0x40, 0x9b, 0xb4, 0xbb, 0xad, 0x50, 0x8d, 0x4a, 0x48, 0x9b, 0xc2, 0xd0, 0xa4, + 0xed, 0x22, 0x4a, 0x1d, 0xaf, 0x8b, 0x9a, 0xc6, 0x9e, 0xe3, 0xc0, 0x78, 0x83, 0xf1, 0x0a, 0x3c, + 0x06, 0x17, 0x7b, 0x91, 0xbd, 0x46, 0x1f, 0x62, 0xaa, 0xdd, 0x86, 0x10, 0xd6, 0x89, 0xab, 0x38, + 0xbf, 0x7f, 0x3e, 0xc7, 0x3e, 0x09, 0xd4, 0xa4, 0xa0, 0x6d, 0x36, 0x90, 0x2c, 0x8e, 0x5b, 0x42, + 0x72, 0xc5, 0x71, 0x41, 0x0a, 0x5a, 0xaf, 0x70, 0xa1, 0x02, 0x1e, 0x4d, 0xb1, 0xfa, 0x6a, 0xc8, + 0x07, 0x03, 0x26, 0xdb, 0x79, 0x34, 0x38, 0x67, 0xc3, 0x40, 0xb9, 0x59, 0x7f, 0xf3, 0x77, 0x11, + 0xf0, 0xa9, 0xf2, 0xa4, 0xea, 0x6a, 0xd4, 0x61, 0xdf, 0x13, 0x16, 0x2b, 0xfc, 0x1c, 0x4a, 0x46, + 0xe6, 0x06, 0x3e, 0x41, 0x0d, 0x64, 0x97, 0x3a, 0xcb, 0xd7, 0xe3, 0xdd, 0x25, 0x03, 0xf6, 0x8e, + 0x9c, 0xd9, 0xca, 0xc7, 0x2f, 0xc1, 0x32, 0x6b, 0x52, 0x6b, 0x20, 0xbb, 0xbc, 0xff, 0xb4, 0x35, + 0xdd, 0xa8, 0x75, 0x3f, 0xf7, 0xf8, 0x3f, 0x67, 0x2a, 0xc6, 0xaf, 0xc0, 0x92, 0x4c, 0x84, 0xde, + 0x25, 0x79, 0xa4, 0x6d, 0x1b, 0xa9, 0xad, 0xfb, 0x43, 0x70, 0xa9, 0x1c, 0x4d, 0x66, 0x7c, 0x46, + 0x8d, 0x4f, 0xa0, 0x2a, 0x39, 0x1f, 0xb9, 0x94, 0x8f, 0x04, 0x8f, 0x03, 0xc5, 0x48, 0x51, 0xfb, + 0x77, 0x52, 0xbf, 0xc3, 0xf9, 0xe8, 0x70, 0xc6, 0xe6, 0xb7, 0xaf, 0xc8, 0x2c, 0x8b, 0x5f, 0x40, + 0xe1, 0x82, 0xf5, 0x49, 0x59, 0x47, 0xac, 0xa7, 0x11, 0x9f, 0x58, 0x3f, 0x6f, 0x9c, 0xe8, 0x70, + 0x17, 0xca, 0xc2, 0x93, 0x2a, 0xa0, 0x81, 0xf0, 0x22, 0x45, 0x2a, 0xda, 0xb6, 0x9d, 0xda, 0x3e, + 0xdc, 0x72, 0x79, 0x7b, 0xd6, 0x87, 0xdf, 0xc3, 0x8a, 0x92, 0x1e, 0x1d, 0x66, 0x9a, 0xb0, 0x74, + 0xd4, 0xb3, 0x34, 0xea, 0xe3, 0x84, 0x9f, 0xdb, 0x45, 0x55, 0xdd, 0xa1, 0xf1, 0x01, 0x14, 0x35, + 0x42, 0x16, 0x73, 0x57, 0xa0, 0x63, 0xf2, 0x6e, 0xa3, 0xc5, 0x3b, 0xb0, 0xa8, 0x4f, 0x32, 0xf0, + 0x49, 0x41, 0xdf, 0x30, 0x5c, 0x8f, 0x77, 0xad, 0x09, 0xd4, 0x3b, 0x72, 0xcc, 0xd3, 0xc7, 0x75, + 0x28, 0x2a, 0x3e, 0x64, 0x11, 0x59, 0xd2, 0x92, 0xff, 0x7f, 0x8e, 0x77, 0x91, 0x63, 0x20, 0xfc, + 0x04, 0xac, 0x8b, 0xd8, 0x4d, 0x64, 0x48, 0x4a, 0x13, 0xd2, 0x29, 0x5e, 0xc4, 0x67, 0x32, 0xc4, + 0x7b, 0xb0, 0x4a, 0x43, 0x9e, 0xf8, 0x6e, 0xdf, 0xa3, 0xc3, 0x44, 0xb8, 0x2c, 0xf2, 0xfa, 0x21, + 0xf3, 0x09, 0x34, 0x90, 0xbd, 0xe4, 0x60, 0xcd, 0x75, 0x34, 0xd5, 0x35, 0x0c, 0xde, 0x81, 0x0a, + 0x8b, 0x55, 0x30, 0xf2, 0x14, 0xf3, 0x5d, 0x2a, 0x12, 0x52, 0x6d, 0x20, 0x1b, 0x39, 0xcb, 0x29, + 0x78, 0x28, 0x12, 0xbc, 0x05, 0x65, 0xc9, 0x94, 0xbc, 0x74, 0x29, 0x4f, 0x22, 0x45, 0x56, 0x1a, + 0xc8, 0x2e, 0x3a, 0xa0, 0xa1, 0xc3, 0x09, 0xd2, 0x29, 0xc1, 0xa2, 0x34, 0x3d, 0x36, 0xd7, 0x61, + 0xed, 0x24, 0x88, 0xd5, 0x5b, 0xaa, 0x82, 0xf3, 0xbb, 0x87, 0xd7, 0x7c, 0x0d, 0xe4, 0x3e, 0x15, + 0x0b, 0x1e, 0xc5, 0x0c, 0x6f, 0x02, 0xa4, 0x53, 0x1f, 0x13, 0xd4, 0x28, 0xd8, 0x25, 0xa7, 0x34, + 0x1b, 0xf4, 0x78, 0xff, 0x17, 0x82, 0xaa, 0x71, 0xf4, 0x22, 0xc5, 0x64, 0xe4, 0x85, 0xf8, 0x1d, + 0x94, 0x33, 0x53, 0x8e, 0xd7, 0x5a, 0x52, 0xd0, 0xbf, 0xcc, 0x7d, 0xfd, 0xf1, 0xed, 0x74, 0x4f, + 0x03, 0xbe, 0xf2, 0x26, 0xdc, 0x5c, 0x21, 0xab, 0x86, 0xde, 0xa0, 0x3d, 0x84, 0xbf, 0x40, 0x2d, + 0x5f, 0x16, 0xde, 0xd0, 0x69, 0x73, 0x1a, 0xa9, 0x6f, 0xce, 0x61, 0x4d, 0x2f, 0x69, 0xf8, 0x82, + 0x8d, 0xf6, 0xc7, 0x08, 0x2a, 0x86, 0x3e, 0xf6, 0x22, 0x3f, 0x64, 0x12, 0xf7, 0x60, 0xf9, 0x4c, + 0xf8, 0x9e, 0xba, 0xdd, 0x6a, 0x56, 0x5f, 0x16, 0xfe, 0x67, 0xf5, 0xd6, 0xcd, 0x15, 0x5a, 0xa8, + 0x21, 0xdc, 0x05, 0x38, 0x55, 0x5c, 0x4c, 0x83, 0xea, 0x99, 0xaf, 0x7f, 0x06, 0x3e, 0x28, 0x26, + 0xad, 0xe8, 0x54, 0x49, 0xe6, 0x8d, 0xee, 0x55, 0x64, 0xe0, 0x87, 0x44, 0x75, 0xb6, 0x3f, 0x6f, + 0x0d, 0x02, 0xf5, 0x2d, 0xe9, 0xb7, 0x28, 0x1f, 0xb5, 0xa7, 0xc2, 0xb6, 0xfe, 0xdf, 0x51, 0x1e, + 0xb6, 0xa5, 0xa0, 0x7d, 0x4b, 0xbf, 0x1d, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0x8c, 0xeb, 0x33, + 0x3e, 0x51, 0x05, 0x00, 0x00, }