syntax = "proto3";

import "google/protobuf/any.proto";

package me.iacn.biliroaming;

option java_package = "me.iacn.biliroaming";
option java_outer_classname = "API";
option java_multiple_files = true;
option optimize_for = LITE_RUNTIME;

enum CodeType {
  NOCODE = 0;
  CODE264 = 1;
  CODE265 = 2;
  CODEAV1 = 3;
}

message SceneControl {
}

message DataControl {
  optional bool need_watch_progress = 0x1;
}

message PlayViewReq {
  optional int64 ep_id = 0x1;
  optional int64 cid = 0x2;
  optional int64 qn = 0x3;
  optional int32 fnver = 0x4;
  optional int32 fnval = 0x5;
  optional int32 download = 0x6;
  optional int32 force_host = 0x7;
  optional bool fourk = 0x8;
  optional string spmid = 0x9;
  optional string from_spmid = 0xa;
  optional int32 teenagers_mode = 0xb;
  optional CodeType prefer_codec_type = 0xc;
  optional bool is_preview = 0xd;
  optional int32 room_id = 0xe;
  optional bool is_need_view_info = 0xf;
  optional SceneControl scene_control = 0x10;
  optional int32 inline_scene = 0x11;
  optional int64 material_no = 0x12;
  optional int32 security_level = 0x13;
  optional int64 season_id = 0x14;
  optional DataControl data_control = 0x15;

}

message ContinuePlayInfo {

}

message ClipInfo {

}

message QualityExtInfo {

}

message RecordInfo {

}

message UserStatus {
}

message SeasonRights {
  optional int32 can_watch = 0x1;
}

message SeasonInfo {
  optional int32 season_id = 0x1;
  optional int32 season_type = 0x2;
  optional int32 season_status = 0x3;
  optional string cover = 0x4;
  optional string title = 0x5;
  optional SeasonRights rights = 0x6;
}

message EpisodeInfo {
  optional int32 ep_id = 0x1;
  optional int64 cid = 0x2;
  optional int64 aid = 0x3;
  optional int64 ep_status = 0x4;
  optional SeasonInfo season_info = 0x5;
  optional string cover = 0x6;
  optional string title = 0x7;
  optional Interaction interaction = 0x8;
}

message EpisodeAdvertisementInfo {

}

message BusinessInfo {
  optional bool is_preview = 0x1;
  optional bool bp = 0x2;
  optional string marlin_token = 0x3;
  optional string playback_speed_color = 0x4;
  optional ContinuePlayInfo continue_play_info = 0x5;
  repeated ClipInfo clip_info = 0x6;
  optional int32 inline_type = 0x7;
  optional int32 ep_whole_duration = 0x8;
  optional PlayViewDimension dimension = 0x9;
  repeated QualityExtInfo quality_ext_map = 0xa;
  map<string, int32> ext_map = 0xb;
  optional bool drm_tech_type = 0xc;
  optional int32 limit_action_type = 0xd;
  optional bool is_drm = 0xe;
  optional RecordInfo record_info = 0xf;
  optional int32 vip_status = 0x10;
  optional bool is_live_pre = 0x11;
  optional EpisodeInfo episode_info = 0x12;
  optional EpisodeAdvertisementInfo episode_advertisement_info = 0x13;
  optional UserStatus user_status = 0x14;
}

message PlayAbilityConf {
  optional bool background_play_disable = 0x1;
  optional bool flip_disable = 0x2;
  optional bool cast_disable = 0x3;
  optional bool feedback_disable = 0x4;
  optional bool subtitle_disable = 0x5;
  optional bool playback_rate_disable = 0x6;
  optional bool time_up_disable = 0x7;
  optional bool playback_mode_disable = 0x8;
  optional bool scale_mode_disable = 0x9;
  optional bool like_disable = 0xa;
  optional bool dislike_disable = 0xb;
  optional bool coin_disable = 0xc;
  optional bool elec_disable = 0xd;
  optional bool share_disable = 0xe;
  optional bool screen_shot_disable = 0xf;
  optional bool lock_screen_disable = 0x10;
  optional bool recommend_disable = 0x11;
  optional bool playback_speed_disable = 0x12;
  optional bool definition_disable = 0x13;
  optional bool selections_disable = 0x14;
  optional bool next_disable = 0x15;
  optional bool edit_dm_disable = 0x16;
  optional bool freya_enter_disable = 0x1b;
  optional bool freya_full_disable = 0x1d;
}

message StreamLimit {
  optional string title = 0x1;
  optional string uri = 0x2;
  optional string msg = 0x3;
}

message StreamInfo {
  optional int32 quality = 0x1;
  optional string format = 0x2;
  optional string description = 0x3;
  optional int32 err_code = 0x4;
  optional StreamLimit limit = 0x5;
  optional bool need_vip = 0x6;
  optional bool need_login = 0x7;
  optional bool intact = 0x8;
  optional bool no_rexcode = 0x9;
  optional int64 attribute = 0xa;
  optional string new_description = 0xb;
  optional string display_desc = 0xc;
  optional string superscript = 0xd;
}

message DashVideo {
  optional string base_url = 0x1;
  repeated string backup_url = 0x2;
  optional int32 bandwidth = 0x3;
  optional int32 codecid = 0x4;
  optional string md5 = 0x5;
  optional int64 size = 0x6;
  optional int32 audio_id = 0x7;
  optional bool no_rexcode = 0x8;
}

message ResponseUrl {
  repeated string backup_url = 0x5;
  optional int64 length = 0x2;
  optional string md5 = 0x6;
  optional int32 order = 0x1;
  optional int64 size = 0x3;
  optional string url = 0x4;
}

message SegmentVideo {repeated ResponseUrl segment = 0x1;}

message Stream {
  optional StreamInfo stream_info = 0x1;
  oneof content {
    DashVideo dash_video = 0x2;
    SegmentVideo segment_video = 0x3;
  }
}

message DashItem {
  optional int32 id = 0x1;
  optional string base_url = 0x2;
  repeated string backup_url = 0x3;
  optional int32 bandwidth = 0x4;
  optional int32 codecid = 0x5;
  optional string md5 = 0x6;
  optional int64 size = 0x7;
}

message VideoInfo {
  optional int32 quality = 0x1;
  optional string format = 0x2;
  optional int64 timelength = 0x3;
  optional int32 video_codecid = 0x4;
  repeated Stream stream_list = 0x5;
  repeated DashItem dash_audio = 0x6;
}

message Event {}

message TextInfo {
  optional string text = 0x1;
  optional string text_color = 0x2;
  optional string text_color_night = 0x3;
}

message DialogConfig {}

message ImageInfo {optional string url = 0x1;}

message ButtonInfo {
  optional string action_type = 0x7;
}

message Report {}

message BottomDisplay {}

message Dialog {
  optional int64 code = 0x1;
  optional string msg = 0x2;
  optional string type = 0x3;
  optional string style = 0x4;
  optional DialogConfig config = 0x5;
  optional TextInfo title = 0x6;
  optional TextInfo subtitle = 0x7;
  optional ImageInfo image = 0x8;
  repeated ButtonInfo button = 0x9;
  optional BusinessInfo button_desc = 0xa;
  optional Report report = 0xb;
  optional int32 count_down_sec = 0xc;
  optional TextInfo right_bottom_desc = 0xd;
  repeated BottomDisplay bottom_display = 0xe;
}

message Toast {
  optional string text = 0x1;
  optional ButtonInfo button = 0x2;
}

message CouponInfo {
  optional int64 code = 0x1;
  optional string msg = 0x2;
  optional string type = 0x3;
}

message EndPage {
  optional Dialog dialog = 0x1;
  optional bool hide = 0x2;
}

message PopWin {
  repeated ButtonInfo button = 0x3;
}

message PromptBar {
  repeated ButtonInfo button = 0x6;
}

message PayTip {}

message HighDefinitionTrialInfo {}

message Animation {}

message ViewInfo {
  optional Dialog dialog = 0x1;
  optional Toast toast = 0x2;
  optional CouponInfo coupon_info = 0x3;
  repeated int64 demand_no_pay_epids = 0x4;
  optional EndPage end_page = 0x5;
  map<string, bool> exp_config = 0x6;
  optional PopWin pop_win = 0x7;
  optional PromptBar try_watch_prompt_bar = 0x8;
  optional PayTip pay_tip = 0x9;
  optional HighDefinitionTrialInfo high_definition_trial_info = 0xa;
  map<string, Dialog> ext_dialog = 0xb;
  optional Animation animation = 0xc;
  map<string, Toast> ext_toast = 0xd;
}

message FreyaConfig {}

message PlayAbilityExtConf {
  optional bool allow_close_subtitle = 0x1;
  optional FreyaConfig freya_config = 0x2;
}

message PlayViewReply {
  optional VideoInfo video_info = 0x1;
  optional PlayAbilityConf play_conf = 0x2;
  optional BusinessInfo business = 0x3;
  optional Event event = 0x4;
  optional ViewInfo view_info = 0x5;
  optional PlayAbilityExtConf play_ext_conf = 0x6;
}

message ExtraContent {}

message ArcConf {
  optional bool is_support = 0x1;
  optional bool disabled = 0x2;
  optional ExtraContent extra_content = 0x3;
}

message PlayArcConf {
  map<int32, ArcConf> arc_conf = 0x1;
}

message PlayDeviceConf {}
message PlayArc {
  optional BizType video_type = 0x1;
  optional uint64 aid = 0x2;
  optional uint64 cid = 0x3;
  optional DrmTechType drm_tech_type = 0x4;
  optional ArcType arc_type = 0x5;
  optional Interaction interaction = 0x6;
  optional Dimension dimension = 0x7;
  optional int64 duration = 0x8;
  optional bool is_preview = 0x9;
}
enum BizType {
  BIZ_TYPE_UNKNOWN = 0x0;
  BIZ_TYPE_UGC = 0x1;
  BIZ_TYPE_PGC = 0x2;
  BIZ_TYPE_PUGV = 0x3;
}
enum DrmTechType {
  UNKNOWN_DRM = 0x0;
  FAIR_PLAY = 0x1;
  WIDE_VINE = 0x2;
  BILI_DRM = 0x3;
}
enum ArcType {
  ARC_TYPE_NORMAL = 0x0;
  ARC_TYPE_INTERACT = 0x1;
}
message QnTrialInfo {}

// renamed due to name collision
message PlaysharedViewInfo {
  map<string, PlaysharedDialog> dialog_map = 0x1;
}
message PlaysharedDialog {
    int32 style_type = 0x1;
    BackgroundInfo background_info = 0x2;
    TextInfo title = 0x3;
    TextInfo subtitle = 0x4;
    ImageInfo image = 0x5;
    repeated ButtonInfo button = 0x6;
    ButtonInfo bottom_desc = 0x7;
    int32 count_down_sec = 0x9;
    TextInfo right_bottom_desc= 0xa;
    repeated BottomDisplay bottom_display= 0xb;
    ExtData ext_data= 0xc;
    int32 limit_action_type= 0xd;
}
message BackgroundInfo {
  optional string drawable_color = 0x1;
  optional string drawable_bitmap_url = 0x2;
  optional int32 effects = 0x3;
}
message ExtData {}
message PlayViewUniteReply {
  optional VideoInfo vod_info = 0x1;
  optional PlayArcConf play_arc_conf = 0x2;
  optional PlayDeviceConf play_device_conf = 0x3;
  optional Event event = 0x4;
  optional google.protobuf.Any supplement = 0x5;
  optional PlayArc play_arc = 0x6;
  optional QnTrialInfo qn_trial_info = 0x7;
  optional History history = 0x8;
  optional PlaysharedViewInfo view_info = 0x9;
}

message VideoVod {
  optional int64 aid = 0x1;
  optional int64 cid = 0x2;
  optional int64 qn = 0x3;
  optional int32 fnver = 0x4;
  optional int32 fnval = 0x5;
  optional int32 download = 0x6;
  optional int32 force_host = 0x7;
  optional bool fourk = 0x8;
  optional CodeType prefer_code_type = 0x9;
  optional int64 voice_balance = 0xa;
}

message PlayViewUniteReq {
  optional VideoVod vod = 0x1;
  optional string spmid = 0x2;
  optional string from_spmid = 0x3;
  map<string, string> extra_content = 0x4;
}

message ViewReq {
  optional int64 aid = 0x1;
  optional string bvid = 0x2;
  optional string from = 0x3;
  optional string trackid = 0x4;
  optional string ad_extra = 0x5;
  optional int32 qn = 0x6;
  optional int32 fnver = 0x7;
  optional int32 fnval = 0x8;
  optional int32 force_host = 0x9;
  optional int32 fourk = 0xa;
  optional string spmid = 0xb;
  optional string from_spmid = 0xc;
  optional int32 autoplay = 0xd;
  optional PlayerArgs player_args = 0xe;
}

message ViewUniteReq {
  optional uint64 aid = 0x1;
  optional string bvid = 0x2;
  optional string from = 0x3;
  optional string spmid = 0x4;
  optional string from_spmid = 0x5;
  optional string session_id = 0x6;
  optional PlayerArgs player_args = 0x7;
  optional string track_id = 0x8;
  map<string, string> extra_content = 0x9;
  optional string play_mode = 0xa;
  optional Relate relate = 0xb;
  optional string biz_extra = 0xc;
  optional string ad_extra = 0xd;
}

message UserSeason {optional string attention = 0x1;}

message SeasonPlayer {
  optional int64 aid = 0x1;
  optional string vid = 0x2;
  optional int64 cid = 0x3;
  optional string from = 0x4;
}

message Rights {
  optional int32 bp = 0x1;
  optional int32 elec = 0x2;
  optional int32 download = 0x3;
  optional int32 movie = 0x4;
  optional int32 pay = 0x5;
  optional int32 hd5 = 0x6;
  optional int32 no_reprint = 0x7;
  optional int32 autoplay = 0x8;
  optional int32 ugc_pay = 0x9;
  optional int32 is_cooperation = 0xa;
  optional int32 ugc_pay_preview = 0xb;
  optional int32 no_background = 0xc;
}

message Stat {
  optional int64 aid = 0x1;
  optional int32 view = 0x2;
  optional int32 danmaku = 0x3;
  optional int32 reply = 0x4;
  optional int32 fav = 0x5;
  optional int32 coin = 0x6;
  optional int32 share = 0x7;
  optional int32 now_rank = 0x8;
  optional int32 his_rank = 0x9;
  optional int32 like = 0xa;
  optional int32 dislike = 0xb;
}

message Author {
  optional int64 mid = 0x1;
  optional string name = 0x2;
  optional string face = 0x3;
}

message Dimension {
  optional int64 width = 0x1;
  optional int64 height = 0x2;
  optional int64 rotate = 0x3;
}

message PlayViewDimension {
  optional int32 width = 0x1;
  optional int32 height = 0x2;
  optional int32 rotate = 0x3;
}

message StaffInfo {}

message Arc {
  optional int64 aid = 0x1;
  optional int64 videos = 0x2;
  optional int32 type_id = 0x3;
  optional string type_name = 0x4;
  optional int32 copyright = 0x5;
  optional string pic = 0x6;
  optional string title = 0x7;
  optional int64 pubdate = 0x8;
  optional int64 ctime = 0x9;
  optional string desc = 0xa;
  optional int32 state = 0xb;
  optional int32 access = 0xc;
  optional int64 attribute_v2 = 0xd;
  optional string tag = 0xe;
  repeated string tags = 0xf;
  optional int64 duration = 0x10;
  optional int64 mission_id = 0x11;
  optional int64 order_id = 0x12;
  optional string redirect_url = 0x13;
  optional int64 forward = 0x14;
  optional Rights rights = 0x15;
  optional Author author = 0x16;
  optional Stat stat = 0x17;
  optional string report_result = 0x18;
  optional string dynamic = 0x19;
  optional int64 first_cid = 0x1a;
  optional Dimension dimension = 0x1b;
  repeated StaffInfo staff_info = 0x1c;
  optional int64 season_id = 0x1d;
  optional int32 attribute = 0x1e;
}

message Season {
  optional string allow_download = 0x1;
  optional int64 season_id = 0x2;
  optional int32 is_jump = 0x3;
  optional string title = 0x4;
  optional string cover = 0x5;
  optional int32 is_finish = 0x6;
  optional int32 newest_epid = 0x7;
  optional string newest_ep_index = 0x8;
  optional int64 total_count = 0x9;
  optional int32 weekday = 0xa;
  optional UserSeason user_season = 0xb;
  optional SeasonPlayer player = 0xc;
  optional string ovg_playurl = 0xd;
}

message Bgm {}

message CMConfig {}

message CM {}

message ListenerConfig {
  optional int32 jump_style = 0x1;
}

message Config {
  optional string relates_title = 0x1;
  optional int32 relates_style = 0x2;
  optional int32 relate_gif_exp = 0x3;
  optional int32 end_page_half = 0x4;
  optional int32 end_page_full = 0x5;
  optional bool auto_swindow = 0x6;
  optional bool popup_info = 0x7;
  optional string abtest_small_window = 0x8;
  optional int32 rec_three_point_style = 0x9;
  optional bool is_absolute_time = 0xa;
  optional bool new_swindow = 0xb;
  optional bool relates_biserial = 0xc;
  optional ListenerConfig listener_conf = 0xd;
  optional string relates_feed_style = 0xe;
  optional bool relates_feed_popup = 0xf;
  optional bool relates_feed_has_next = 0x10;
  optional int32 local_play = 0x11;
  optional bool play_story = 0x12;
  optional bool arc_play_story = 0x13;
  optional string story_icon = 0x14;
  optional bool landscape_story = 0x15;
  optional bool arc_landscape_story = 0x16;
  optional string landscape_icon = 0x17;
  optional bool show_listen_button = 0x18 ;
}

message CustomConfig {}

message Dislike {}

message ElecRank {}

message History {}
message Honor {}

message Interaction {}

message Label {}

message OfficialVerify {
  optional int32 type = 0x1;
  optional string desc = 0x2;
}

message VipLabel {
  optional string path = 0x1;
  optional string text = 0x2;
  optional string label_theme = 0x3;
}

message Vip {
  optional int32 vip_type = 0x1;
  optional int64 due_date = 0x2;
  optional string due_remark = 0x3;
  optional int32 access_status = 0x4;
  optional int32 vip_status = 0x5;
  optional string vip_status_warn = 0x6;
  optional int32 theme_type = 0x7;
  optional VipLabel label = 0x8;
}

message Live {
  optional int64 mid = 0x1;
  optional int64 room_id = 0x2;
  optional string uri = 0x3;
  optional string endpage_uri = 0x4;
}

message OwnerExt {
  optional OfficialVerify official_verify = 0x1;
  optional Live live = 0x2;
  optional Vip vip = 0x3;
  repeated int64 assists = 0x4;
  optional int64 fans = 0x5;
  optional string arcCount = 0x6;
}

message Audio {}
message DM {}
message Page {
  optional int64 cid = 0x1;
  optional int32 page = 0x2;
  optional string from = 0x3;
  optional string part = 0x4;
  optional int64 duration = 0x5;
  optional string vid = 0x6;
  optional string desc = 0x7;
  optional string web_link = 0x8;
  optional Dimension dimension = 0x9;
}

message ViewPage {
  optional Page page = 0x1;
  optional Audio audio = 0x2;
  optional DM dm = 0x3;
  optional string download_title = 0x4;
  optional string download_subtitle = 0x5;
}

message PlayerIcon {}

message RelateTab {}
message Relate {}
message ReqUser {}
message Staff {}
message TIcon {optional string icon = 0x1;}
message Tag {
  optional int64 id = 0x1;
  optional string name = 0x2;
  optional int64 likes = 0x3;
  optional int64 hates = 0x4;
  optional int32 liked = 0x5;
  optional int32 hated = 0x6;
  optional string uri = 0x7;
  optional string tag_type = 0x8;
}
message UgcSeason {}
message ViewReply {
  optional string activity_url = 0x11;
  optional Arc arc = 0x1;
  optional string argue_msg = 0x14;
  repeated Bgm bgm = 0x12;
  optional string bvid = 0xe;
  optional CMConfig cm_config = 0x1f;
  repeated CM cms = 0x1e;
  optional Config config = 0x19;
  optional CustomConfig custom_config = 0x1d;
  optional Dislike dislike = 0xb;
  optional int32 encode = 0x1c;
  optional ElecRank elec_rank = 0x8;
  optional History history = 0x9;
  optional Honor honor = 0xf;
  optional Interaction interaction = 0x1b;
  optional Label label = 0x17;
  optional OwnerExt owner_ext = 0x3;
  repeated ViewPage pages = 0x2;
  optional int32 play_param = 0x16;
  optional PlayerIcon player_icon = 0xc;
  repeated RelateTab relate_tab = 0x10;
  repeated Relate relates = 0xa;
  optional ReqUser req_user = 0x4;

  optional Season season = 0x7;
  optional string share_subtitle = 0x1a;
  optional string short_link = 0x15;
  repeated Staff staff = 0x13;
  map<string, TIcon> t_icon = 0x6;
  repeated Tag tag = 0x5;
  optional UgcSeason ugc_season = 0x18;
  optional string vip_active = 0xd;
}
message ViewUniteOfficialVerify {
  optional int32 type = 0x1;
  optional string desc = 0x2;
}
message ViewUniteVipLabel {
  optional string path = 0x1;
  optional string text = 0x2;
  optional string label_theme = 0x3;
}
message ViewUniteVip {
  optional int32 type = 0x1;
  optional int32 status = 0x2;
  optional int32 theme_type = 0x3;
  optional ViewUniteVipLabel vip_label = 0x4;
  optional int32 is_vip = 0x5;
}
message ViewUniteOwner {
  optional string title = 0x3;
  optional string fans = 0x4;
  optional string arc_count = 0x5;
  optional ViewUniteVip vip = 0x9;
  optional string face = 0xb;
  optional int64 mid = 0xc;
  optional ViewUniteOfficialVerify official_verify = 0xd;
}
message ViewUniteReply {
  optional ViewBase view_base = 0x1;
  optional ViewUniteArc arc = 0x2;
  optional ViewUniteOwner owner = 0x4;
  optional Tab tab = 0x5;
  optional google.protobuf.Any supplement = 0x6;
}
message ViewBase {
  enum PageType {
    H5 = 0x0;
    NA = 0x1;
  }
  optional int32 biz_type = 0x1;
  optional PageType page_type = 0x2;
}
message ViewUniteStat {
  optional int64 reply = 0x3;
  optional int64 fav = 0x4;
  optional int64 coin = 0x5;
  optional int64 share = 0x6;
  optional int64 like = 0x7;
  optional int64 follow = 0x8;
}
// Renamed due to name collision
message ViewUniteArc {
  optional int64 aid = 0x1;
  optional int64 cid = 0x2;
  optional int64 duration = 0x3;
  optional ViewUniteStat stat = 0x4;
  optional string bvid = 0x5;
  optional int32 copyright = 0x6;
  optional ViewUniteArcRights right = 0x7;
  optional string cover = 0x8;
  optional int64 type_id = 0x9;
  optional string title= 0xa;
}
// Renamed due to name collision
message ViewUniteArcRights {
  optional bool only_vip_download = 0x1;
  optional bool no_reprint = 0x2;
  optional bool download = 0x3;
}
message UgcDimension {
  optional int64 width = 0x1;
  optional int64 height = 0x2;
  optional int64 rotate = 0x3;
}
message UgcPage {
  optional int64 cid = 0x1;
  optional string part = 0x2;
  optional int64 duration = 0x3;
  optional string desc = 0x4;
  optional UgcDimension dimension = 0x5;
  optional string dl_title = 0x6;
  optional string dl_subtitle = 0x7;
}
message ViewUgcAny {
  optional string short_link = 0x3;
  optional string share_subtitle = 0x4;
  repeated UgcPage pages = 0x5;
}
message ViewPgcAny {
  optional OgvData ogv_data = 0x1;
}
message OgvData {
  optional int32 media_id = 0x1;
  optional int64 season_id = 0x2;
  optional int32 season_type = 0x3;
  optional int32 show_season_type = 0x4;
  optional OgvDataRights rights = 0x5;
  optional OgvDataUserStatus user_status = 0x6;
  optional int64 aid = 0x7;
  optional OgvDataStat stat = 0x8;
  optional int32 mode = 0x9;
  optional Publish publish = 0xa;
  optional PlayStrategy play_strategy = 0xb;
  optional MultiViewInfo multi_view_info = 0xc;
  optional OgvSwitch ogv_switch = 0xd;
  optional int32 total_ep = 0xe;
  optional NewEp new_ep = 0xf;
  optional Reserve reserve = 0x10;
  optional int32 status = 0x11;
  repeated PlayFloatLayerActivity activity_float_layer = 0x12;
  optional EarphoneConf earphone_conf = 0x13;
  optional string cover = 0x14;
  optional string square_cover = 0x15;
  optional string share_url = 0x16;
  optional string short_link = 0x17;
  optional string title = 0x18;
  optional string horizontal_cover169 = 0x19;
  optional string horizontal_cover1610 = 0x1a;
  optional int32 has_can_play_ep = 0x1b;
}
message OgvDataRights {
  optional int32 allow_download = 0x1;
  optional int32 allow_review = 0x2;
  optional int32 can_watch = 0x3;
  optional int32 is_cover_show = 0x4;
  optional string copyright = 0x5;
  optional string copyright_name = 0x6;
  optional int32 allow_bp = 0x7;
  optional int32 area_limit = 0x8;
  optional int32 is_preview = 0x9;
  optional int32 ban_area_show = 0xa;
  optional int32 watch_platform = 0xb;
  optional int32 allow_bp_rank = 0xc;
  optional string resource = 0xd;
  optional int32 forbid_pre = 0xe;
  optional int32 only_vip_download = 0xf;
  optional int32 new_allow_download = 0x10;
}
message OgvDataUserStatus {
  optional int32 show = 0x1;
  optional int32 follow = 0x2;
  optional int32 follow_status = 0x3;
  optional int32 pay = 0x4;
  optional int32 sponsor = 0x5;
  optional int32 vip = 0x6;
  optional int32 vip_frozen = 0x7;
}
message OgvDataStat {
  optional string followers = 0x1;
  optional StatInfo play_data = 0x2;
}
message StatInfo {
  optional int64 value = 0x1;
  optional string text = 0x2;
  optional string pure_text = 0x3;
  optional string icon = 0x4;
}
message Publish {
  optional string pub_time = 0x1;
  optional string pub_time_show = 0x2;
  optional int32 is_started = 0x3;
  optional int32 is_finish = 0x4;
  optional int32 weekday = 0x5;
  optional string release_date_show = 0x6;
  optional string time_length_show = 0x7;
  optional int32 unknow_pub_date = 0x8;
  optional string update_info_desc = 0x9;
}
message NewEp {
  optional int32 id = 0x1;
  optional string title = 0x2;
  optional string desc = 0x3;
  optional int32 is_new = 0x4;
  optional string more = 0x5;
  optional string cover = 0x6;
  optional string index_show = 0x7;
}
message PlayStrategy {
  repeated string strategies = 0x1;
  optional int32 recommend_show_strategy = 0x2;
  optional string auto_play_toast = 0x3;
}
message MultiViewInfo {}
message OgvSwitch {
  optional int32 reduce_short_title_spacing = 0x1;
  optional int32 merge_position_section_for_cinema = 0x2;
  optional int32 merge_preview_section = 0x3;
  optional int32 enable_show_vt_info = 0x4;
}
message Reserve {}
message PlayFloatLayerActivity {}
message EarphoneConf {}

message Tab {
  repeated TabModule tab_module = 0x1;
}
message TabModule {
  optional TabType tab_type = 0x1;
  oneof tab {
    IntroductionTab introduction = 0x2;
    ReplyTab reply = 0x3;
    ActivityTab activity_tab = 0x4;
  }
}
enum TabType {
  TAB_NONE = 0x0;
  TAB_INTRODUCTION = 0x1;
  TAB_REPLY = 0x2;
  TAB_OGV_ACTIVITY = 0x3;
}
message IntroductionTab {
  string title = 0x1;
  repeated Module modules = 0x2;
}
message Module {
  ModuleType type = 0x1;
  oneof data {
      OgvIntroduction ogv_introduction = 0x2;
      UgcIntroduction ugc_introduction = 0x3;
      KingPosition king_position = 0x4;
      Headline head_line = 0x5;
      OgvTitle ogv_title = 0x6;
      Honor honor = 0x7;
      UserList list = 0x8;
      Staffs staffs = 0x9;
      ActivityReserve activity_reserve= 0xa;
      LiveOrder live_order= 0xb;
      SectionData section_data= 0xc;
      DeliveryData delivery_data= 0xd;
      FollowLayer follow_layer= 0xe;
      OgvSeasons ogv_seasons= 0xf;
      UgcSeasons ugc_season = 0x10;
      OgvLiveReserve ogv_live_reserve = 0x11;
      CombinationEp combination_ep = 0x12;
      Sponsor sponsor = 0x13;
      ActivityEntranceModule activity_entrance_module = 0x14;
      SerialSeason serial_season = 0x15;
      Relates relates = 0x16;
      Banner banner = 0x17;
      Audio audio = 0x18;
      LikeComment like_comment = 0x19;
      AttentionRecommend attention_recommend = 0x1a;
      Covenanter covenanter = 0x1b;
  }
}
enum ModuleType {
  UNKNOWN = 0x0;
  OGV_INTRODUCTION = 0x1;
  OGV_TITLE = 0x2;
  UGC_HEADLINE = 0x3;
  UGC_INTRODUCTION = 0x4;
  KING_POSITION = 0x5;
  MASTER_USER_LIST = 0x6;
  STAFFS = 0x7;
  HONOR = 0x8;
  OWNER = 0x9;
  PAGE= 0xa;
  ACTIVITY_RESERVE= 0xb;
  LIVE_ORDER= 0xc;
  POSITIVE= 0xd;
  SECTION= 0xe;
  RELATE= 0xf;
  PUGV = 0x10;
  COLLECTION_CARD = 0x11;
  ACTIVITY = 0x12;
  CHARACTER = 0x13;
  FOLLOW_LAYER = 0x14;
  OGV_SEASONS = 0x15;
  UGC_SEASON = 0x16;
  OGV_LIVE_RESERVE = 0x17;
  COMBINATION_EPISODE = 0x18;
  SPONSOR = 0x19;
  ACTIVITY_ENTRANCE = 0x1a;
  THEATRE_HOT_TOPIC = 0x1b;
  RELATED_RECOMMEND = 0x1c;
  PAY_BAR = 0x1d;
  BANNER = 0x1e;
  AUDIO = 0x1f;
  AGG_CARD = 0x20;
  SINGLE_EP = 0x21;
  LIKE_COMMENT = 0x22;
  ATTENTION_RECOMMEND = 0x23;
  COVENANTER = 0x24;
}
message OgvIntroduction {
  optional string followers = 0x1;
  optional string score = 0x2;
  optional StatInfo play_data = 0x3;
}
enum DescType {
    DescTypeUnknown = 0;
    DescTypeText = 1;
    DescTypeAt = 2;
}
message DescV2 {
  optional string text = 0x1;
  optional DescType type = 0x2;

  optional int64 rid = 0x4;
}
message UgcTag {
  optional int64 id = 0x1;
  optional string name = 0x2;
  optional string uri = 0x3;
  optional string tag_type = 0x4;
}
message UgcIntroduction {
  repeated UgcTag tags = 0x1;
  optional int64 pubdate = 0x7;
  repeated DescV2 desc = 0x8;
}
message KingPosition {
  repeated KingPos king_pos = 0x1;
  repeated KingPos extenf = 0x2;
}
message KingPos {
  enum KingPositionType {
    KING_POS_UNSPECIFIED = 0x0;
    LIKE = 0x1;
    DISLIKE = 0x2;
    COIN = 0x3;
    FAV = 0x4;
    SHARE = 0x5;
    CACHE = 0x6;
    DANMAKU = 0x7;
  }
  message LikeExtend {}
  message CoinExtend {}
  optional bool disable = 0x1;
  optional string icon = 0x2;
  optional KingPositionType type = 0x3;
  optional string disable_toast = 0x4;
  optional string checked_post = 0x5;
  oneof extend {
    LikeExtend like = 0x6;
    CoinExtend coin = 0x7;
  }
}
message Headline {
  optional string content = 0x2;
}
message OgvTitle {
  optional string title = 0x1;
  optional BadgeInfo badge_info = 0x2;
  optional int32 is_show_btn_animation = 0x3;
  optional int32 follow_video_is_reserve_live = 0x4;
  optional int64 reserve_id = 0x5;
}
message BadgeInfo {
  optional string text = 0x1;
  optional string text_color = 0x2;
  optional string text_color_night = 0x3;
  optional string bg_color = 0x4;
  optional string bg_color_night = 0x5;
  optional string border_color = 0x6;
  optional string border_color_night = 0x7;
  optional int32 bg_style = 0x8;
  optional string img = 0x9;
  optional int32 type= 0xa;
}
message UserList {}
message Staffs {}
message ActivityReserve {}
message LiveOrder {}
message SectionData {
  optional int32 id = 0x1;
  optional int32 section_id = 0x2;
  optional string title = 0x3;
  optional int32 can_ord_desc = 0x4;
  optional string more = 0x5;
  repeated int32 episode_ids = 0x6;
  repeated ViewEpisode episodes = 0x7;
  optional string split_text = 0x8;
  optional Style module_style = 0x9;
  optional string more_bottom_desc= 0xa;
  repeated SerialSeason seasons= 0xb;
  optional SectionDataButton more_left= 0xc;
  optional int32 type= 0xd;
}
message ViewEpisode {
  optional int64 ep_id = 0x1;
  optional string badge = 0x2;
  optional int32 badge_type = 0x3;
  optional BadgeInfo badge_info = 0x4;
  optional int32 duration = 0x5;
  optional int32 status = 0x6;
  optional string cover = 0x7;
  optional int64 aid = 0x8;
  optional string title = 0x9;
  optional string movie_title= 0xa;
  optional string subtitle= 0xb;
  optional string long_title= 0xc;
  optional string toast_title= 0xd;
  optional int64 cid= 0xe;
  optional string from= 0xf;
  optional string share_url = 0x10;
  optional string share_copy = 0x11;
  optional string short_link = 0x12;
  optional string vid = 0x13;
  optional string release_date = 0x14;
  optional Dimension dimension = 0x15;
  optional ViewEpisodeRights rights = 0x16;
  optional Interaction interaction = 0x17;
  optional string bvid = 0x18;
  optional int32 archive_attr = 0x19;
  optional string link = 0x1a;
  optional string link_type = 0x1b;
  optional string bmid = 0x1c;
  optional int64 pub_time = 0x1d;
  optional int32 pv = 0x1e;
  optional int32 ep_index = 0x1f;
  optional int32 section_index = 0x20;
  repeated Staff up_infos = 0x21;
  optional Staff up_info = 0x22;
  optional string dialog_type = 0x23;
  optional string toast_type = 0x24;
  optional bool is_sub_view = 38;
  optional bool is_view_hide = 39;
  optional string jump_link = 40;
  optional ViewEpisodeStat stat_for_unity = 41;
}
message ViewEpisodeRights {
  optional int32 allow_download = 0x1;
  optional int32 allow_review = 0x2;
  optional int32 can_watch = 0x3;
  optional string resource = 0x4;
  optional int32 allow_dm = 0x5;
  optional int32 allow_demand = 0x6;
  optional int32 area_limit = 0x7;
}
message ViewEpisodeStat {
  StatInfo vt = 0x1;
  StatInfo danmaku = 0x2;
  int64 reply = 0x3;
  int64 fav = 0x4;
  int64 coin = 0x5;
  int64 share = 0x6;
  int64 like = 0x7;
  int64 follow = 0x8;
}
message Style {
  optional int32 line = 0x1;
  optional int32 hidden = 0x2;
  repeated string show_pages = 0x3;
}
message SerialSeason {
  optional int32 season_id = 0x1;
  optional string title = 0x2;
  optional string season_title = 0x3;
  optional int32 is_new = 0x4;
  optional string cover = 0x5;
  optional string badge = 0x6;
  optional int32 badge_type = 0x7;
  optional BadgeInfo badge_info = 0x8;
  optional string link = 0x9;
  optional string resource= 0xa;
  optional NewEp new_ep= 0xb;
}
message SectionDataButton {
  optional string title = 0x1;
  optional string left_strikethrough_text = 0x2;
  optional string type = 0x3;
  optional string link = 0x4;
  optional BadgeInfo badge_info = 0x5;
  optional string sub_title = 0x6;
}
message DeliveryData {}
message FollowLayer {}
message OgvSeasons {
  enum SerialSeasonCoverStyle {
    TITLE = 0x0;
    PICTURE = 0x1;
  }
  optional string title = 0x1;
  repeated SerialSeason serial_season = 0x2;
  optional SerialSeasonCoverStyle style = 0x3; 
}
message UgcSeasons {}
message OgvLiveReserve {}
message CombinationEp {}
message Sponsor {}
message ActivityEntranceModule {}
message Relates {}
message Banner {}
message LikeComment {}
message AttentionRecommend {}
message Covenanter {}
message ReplyTab {
  optional ReplyStyle reply_style = 0x1;
  optional string title = 0x2;
  optional TabControl control = 0x3;
}
message ReplyStyle {
  optional string badge_url = 0x1;
  optional string badge_text = 0x2;
  optional int64 badge_type = 0x3;
}
message TabControl {
  optional bool limit = 0x1;
  optional bool disable = 0x2;
  optional string disable_click_tip = 0x3;
}
message ActivityTab {}

message Device {
  optional int32 app_id = 0x1;
  optional int32 build = 0x2;
  optional string buvid = 0x3;
  optional string mobi_app = 0x4;
  optional string platform = 0x5;
  optional string device = 0x6;
  optional string channel = 0x7;
  optional string brand = 0x8;
  optional string model = 0x9;
  optional string osver = 0xa;
}

message DmViewReq {
  optional int32 pid = 0x1;
  optional int64 oid = 0x2;
  optional int32 type = 0x3;
  optional string spmid = 0x4;
  optional int32 is_hard_boot = 0x5;
}

message DanmakuFlagConfig {}

message VideoMask {}

message DanmuPlayerViewConfig {}

message UserInfo {}

message SubtitleItem {
  optional int64 id = 0x1;
  optional string id_str = 0x2;
  optional string lan = 0x3;
  optional string lan_doc = 0x4;
  optional string subtitle_url = 0x5;
  optional UserInfo author = 0x6;
  optional int32 type = 0x7;
  optional string lan_doc_brief = 0x8;
}

message VideoSubtitle {
  optional string lan = 0x1;
  optional string lan_doc = 0x2;
  repeated SubtitleItem subtitles = 0x3;
}

message DmViewReply {
  optional bool d = 0x1;
  optional VideoMask mask = 0x2;
  optional VideoSubtitle subtitle = 0x3;
  repeated string special_dms = 0x4;
  optional DanmakuFlagConfig ai_flag = 0x5;
  optional DanmuPlayerViewConfig player_config = 0x6;
  optional int32 send_box_style = 0x7;
  optional bool allow = 0x8;
  optional bool check_box = 0x9;
  optional string check_box_show_msg = 0xa;
  optional string text_placeholder = 0xb;
  optional string input_place_holder = 0xc;
  repeated string report_filter_content = 0xd;
}

message Pagination {
  optional int32 page_size = 0x1;
  optional string next = 0x2;
}

message PlayerArgs {
  optional int64 qn = 0x1;
  optional int64 fnver = 0x2;
  optional int64 fnval = 0x3;
  optional int64 force_host = 0x4;
  optional int64 voice_balance = 0x5;
}

enum UserType {
  ALL = 0x0;
  UP = 0x1;
  NORMAL_USER = 0x2;
  AUTHENTICATED_USER = 0x3;
}

enum UserSort {
  USER_SORT_DEFAULT = 0x0;
  USER_SORT_FANS_DESCEND = 0x1;
  USER_SORT_FANS_ASCEND = 0x2;
  USER_SORT_LEVEL_DESCEND = 0x3;
  USER_SORT_LEVEL_ASCEND = 0x4;
}

enum CategorySort {
  CATEGORY_SORT_DEFAULT = 0x0;
  CATEGORY_SORT_PUBLISH_TIME = 0x1;
  CATEGORY_SORT_CLICK_COUNT = 0x2;
  CATEGORY_SORT_COMMENT_COUNT = 0x3;
  CATEGORY_SORT_LIKE_COUNT = 0x4;
}

message SearchByTypeRequest {
  optional int32 type = 0x1;
  optional string keyword = 0x2;
  optional CategorySort category_sort = 0x3;
  optional int64 category_id = 0x4;
  optional UserType user_type = 0x5;
  optional UserSort user_sort = 0x6;
  optional Pagination pagination = 0x7;
  optional PlayerArgs player_args = 0x8;
}

message FollowButton {
  optional string icon = 0x1;
  map<string, string> texts = 0x2;
  optional string status_report = 0x3;
}

message CheckMore {
  optional string content = 0x1;
  optional string uri = 0x2;
}

message WatchButton {
  optional string title = 0x1;
  optional string link = 0x2;
}

message ReasonStyle {
  optional string text = 0x1;
  optional string text_color = 0x2;
  optional string text_color_night = 0x3;
  optional string bg_color = 0x4;
  optional string bg_color_night = 0x5;
  optional string border_color = 0x6;
  optional string border_color_night = 0x7;
  optional int32 bg_style = 0x8;
}

message Episode {
  optional string uri = 0x1;
  optional string param = 0x2;
  optional string index = 0x3;
  repeated ReasonStyle badges = 0x4;
  optional int32 position = 0x5;
}

message EpisodeNew {
  optional string title = 0x1;
  optional string uri = 0x2;
  optional string param = 0x3;
  optional int32 is_new = 0x4;
  repeated ReasonStyle badges = 0x5;
  optional int32 type = 0x6;
  optional int32 position = 0x7;
  optional string cover = 0x8;
  optional string label = 0x9;
}

message SearchBangumiCard {
  optional string title = 0x1;
  optional string cover = 0x2;
  optional int32 media_type = 0x3;
  optional int32 play_state = 0x4;
  optional string area = 0x5;
  optional string style = 0x6;
  optional string styles = 0x7;
  optional string cv = 0x8;
  optional double rating = 0x9;
  optional int32 vote = 0xa;
  optional string target = 0xb;
  optional string staff = 0xc;
  optional string prompt = 0xd;
  optional int64 ptime = 0xe;
  optional string season_type_name = 0xf;
  repeated Episode episodes = 0x10;
  optional int32 is_selection = 0x11;
  optional int32 is_atten = 0x12;
  optional string label = 0x13;
  optional int64 season_id = 0x14;
  optional string out_name = 0x15;
  optional string out_icon = 0x16;
  optional string out_url = 0x17;
  repeated ReasonStyle badges = 0x18;
  optional int32 is_out = 0x19;
  repeated EpisodeNew episodes_new = 0x1a;
  optional WatchButton watch_button = 0x1b;
  optional string selection_style = 0x1c;
  optional CheckMore check_more = 0x1d;
  optional FollowButton follow_button = 0x1e;
  optional ReasonStyle style_label = 0x1f;
  repeated ReasonStyle badges_v2 = 0x20;
  optional string styles_v2 = 0x21;
}

message SearchItem {
  optional string uri = 0x1;
  optional string param = 0x2;
  optional string goto = 0x3;
  optional string link_type = 0x4;
  optional int32 position = 0x5;
  optional string track_id = 0x6;
  oneof card_item {
    SearchBangumiCard bangumi = 0x26;
  }
}

message PaginationReply {
  optional string next = 0x1;
  optional string prev = 0x2;
}

message SearchByTypeResponse {
  optional string track_id = 0x1;
  optional int32 pages = 0x2;
  optional string exp_str = 0x3;
  optional string keyword = 0x4;
  optional int32 result_is_recommend = 0x5;
  repeated SearchItem items = 0x6;
  optional PaginationReply pagination = 0x7;
}

message SearchNav {
  optional string name = 0x1;
  optional int32 total = 0x2;
  optional int32 pages = 0x3;
  optional int32 type = 0x4;
}

message FormatDescription {
  optional int32 quality = 0x1;
  optional string format = 0x2;
  optional string description = 0x3;
  optional string display_desc = 0x4;
  optional string superscript = 0x5;
}

message VolumeInfo {}

message ListenPlayInfo {
  optional int32 qn = 0x1;
  optional string format = 0x2;
  optional int32 qn_type = 0x3;
  oneof info {
    ListenPlayDASH play_dash = 0x5;
  }
  optional int32 fnver = 0x6;
  optional int32 fnval = 0x7;
  repeated FormatDescription formats = 0x8;
  optional int32 video_codecid = 0x9;
  optional int64 length = 0xa;
  optional int32 code = 0xb;
  optional string message = 0xc;
  optional int64 expire_time = 0xd;
  optional VolumeInfo volume = 0xe;
}

message ListenDashSegmentBase {}

message ListenDashItem {
  optional int32 id = 0x1;
  optional string base_url = 0x2;
  repeated string backup_url = 0x3;
  optional int32 bandwidth = 0x4;
  optional string mime_type = 0x5;
  optional string codecs = 0x6;
  optional ListenDashSegmentBase segment_base = 0xc;
  optional int32 codecid = 0xd;
  optional string md5 = 0xe;
  optional int64 size = 0xf;
}

message ListenPlayDASH {
  optional int32 duration = 0x1;
  optional float min_buffer_time = 0x2;
  repeated ListenDashItem audio = 0x3;
}

message EventTracking {}

message ListenPlayItem {
  optional int32 item_type = 0x1;
  optional int64 oid = 0x3;
  repeated int64 sub_id = 0x4;
  optional EventTracking et = 0x5;
  optional int64 pos = 0x6;
}

message ListenPlayURLReq {
  optional ListenPlayItem item = 0x1;
  optional PlayerArgs player_args = 0x2;
}

message ListenPlayURLResp {
  optional ListenPlayItem item = 0x1;
  optional int32 playable = 0x2;
  optional string message = 0x3;
  map<int64, ListenPlayInfo> player_info = 0x4;
}

message UGCPlayViewReply {
  optional VideoInfo video_info = 0x1;
}

message BKArcPart {
  optional int64 oid = 0x1;
  optional int64 sub_id = 0x2;
  optional string title = 0x3;
  optional int64 duration = 0x4;
  optional int32 page = 0x5;
}
