import "steammessages_base.proto";
import "encrypted_app_ticket.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum EMMSLobbyStatus {
	k_EMMSLobbyStatusInvalid = 0;
	k_EMMSLobbyStatusExists = 1;
	k_EMMSLobbyStatusDoesNotExist = 2;
	k_EMMSLobbyStatusNotAMember = 3;
}

message CMsgClientUDSP2PSessionStarted {
	optional fixed64 steamid_remote = 1;
	optional int32 appid = 2;
}

message CMsgClientUDSP2PSessionEnded {
	optional fixed64 steamid_remote = 1;
	optional int32 appid = 2;
	optional int32 session_length_sec = 3;
	optional int32 session_error = 4;
	optional int32 nattype = 5;
	optional int32 bytes_recv = 6;
	optional int32 bytes_sent = 7;
	optional int32 bytes_sent_relay = 8;
	optional int32 bytes_recv_relay = 9;
	optional int32 time_to_connect_ms = 10;
}

message CMsgClientRegisterAuthTicketWithCM {
	optional uint32 protocol_version = 1;
	optional bytes ticket = 3;
	optional uint64 client_instance_id = 4;
}

message CMsgClientTicketAuthComplete {
	optional fixed64 steam_id = 1;
	optional fixed64 game_id = 2;
	optional uint32 estate = 3;
	optional uint32 eauth_session_response = 4;
	optional bytes DEPRECATED_ticket = 5;
	optional uint32 ticket_crc = 6;
	optional uint32 ticket_sequence = 7;
	optional fixed64 owner_steam_id = 8;
}

message CMsgClientCMList {
	repeated uint32 cm_addresses = 1;
	repeated uint32 cm_ports = 2;
	repeated string cm_websocket_addresses = 3;
	optional uint32 percent_default_to_websocket = 4;
}

message CMsgClientP2PConnectionInfo {
	optional fixed64 steam_id_dest = 1;
	optional fixed64 steam_id_src = 2;
	optional uint32 app_id = 3;
	optional bytes candidate = 4;
	optional fixed64 connection_id_src = 5;
	optional bytes rendezvous = 6;
}

message CMsgClientP2PConnectionFailInfo {
	optional fixed64 steam_id_dest = 1;
	optional fixed64 steam_id_src = 2;
	optional uint32 app_id = 3;
	optional uint32 ep2p_session_error = 4;
	optional fixed64 connection_id_dest = 5;
	optional uint32 close_reason = 7;
	optional string close_message = 8;
}

message CMsgClientNetworkingCertRequest {
	optional bytes key_data = 2;
	optional uint32 app_id = 3;
}

message CMsgClientNetworkingCertReply {
	optional bytes cert = 4;
	optional fixed64 ca_key_id = 5;
	optional bytes ca_signature = 6;
}

message CMsgClientNetworkingMobileCertRequest {
	optional uint32 app_id = 1;
}

message CMsgClientNetworkingMobileCertReply {
	optional string encoded_cert = 1;
}

message CMsgClientGetAppOwnershipTicket {
	optional uint32 app_id = 1;
}

message CMsgClientGetAppOwnershipTicketResponse {
	optional uint32 eresult = 1 [default = 2];
	optional uint32 app_id = 2;
	optional bytes ticket = 3;
}

message CMsgClientSessionToken {
	optional uint64 token = 1;
}

message CMsgClientGameConnectTokens {
	optional uint32 max_tokens_to_keep = 1 [default = 10];
	repeated bytes tokens = 2;
}

message CMsgGSServerType {
	optional uint32 app_id_served = 1;
	optional uint32 flags = 2;
	optional uint32 deprecated_game_ip_address = 3;
	optional uint32 game_port = 4;
	optional string game_dir = 5;
	optional string game_version = 6;
	optional uint32 game_query_port = 7;
}

message CMsgGSStatusReply {
	optional bool is_secure = 1;
}

message CMsgGSPlayerList {
	message Player {
		optional uint64 steam_id = 1;
		optional uint32 deprecated_public_ip = 2;
		optional bytes token = 3;
		optional .CMsgIPAddress public_ip = 4;
	}

	repeated .CMsgGSPlayerList.Player players = 1;
}

message CMsgGSUserPlaying {
	optional fixed64 steam_id = 1;
	optional uint32 deprecated_public_ip = 2;
	optional bytes token = 3;
	optional .CMsgIPAddress public_ip = 4;
}

message CMsgGSDisconnectNotice {
	optional fixed64 steam_id = 1;
}

message CMsgClientGamesPlayed {
	message GamePlayed {
		optional uint64 steam_id_gs = 1;
		optional fixed64 game_id = 2;
		optional uint32 deprecated_game_ip_address = 3;
		optional uint32 game_port = 4;
		optional bool is_secure = 5;
		optional bytes token = 6;
		optional string game_extra_info = 7;
		optional bytes game_data_blob = 8;
		optional uint32 process_id = 9;
		optional uint32 streaming_provider_id = 10;
		optional uint32 game_flags = 11;
		optional uint32 owner_id = 12;
		optional string vr_hmd_vendor = 13;
		optional string vr_hmd_model = 14;
		optional uint32 launch_option_type = 15 [default = 0];
		optional int32 primary_controller_type = 16 [default = -1];
		optional string primary_steam_controller_serial = 17;
		optional uint32 total_steam_controller_count = 18 [default = 0];
		optional uint32 total_non_steam_controller_count = 19 [default = 0];
		optional uint64 controller_workshop_file_id = 20 [default = 0];
		optional uint32 launch_source = 21 [default = 0];
		optional uint32 vr_hmd_runtime = 22;
		optional .CMsgIPAddress game_ip_address = 23;
		optional uint32 controller_connection_type = 24 [default = 0];
	}

	repeated .CMsgClientGamesPlayed.GamePlayed games_played = 1;
	optional uint32 client_os_type = 2;
	optional uint32 cloud_gaming_platform = 3;
}

message CMsgGSApprove {
	optional fixed64 steam_id = 1;
	optional fixed64 owner_steam_id = 2;
}

message CMsgGSDeny {
	optional fixed64 steam_id = 1;
	optional int32 edeny_reason = 2;
	optional string deny_string = 3;
}

message CMsgGSKick {
	optional fixed64 steam_id = 1;
	optional int32 edeny_reason = 2;
}

message CMsgClientAuthList {
	optional uint32 tokens_left = 1;
	optional uint32 last_request_seq = 2;
	optional uint32 last_request_seq_from_server = 3;
	repeated .CMsgAuthTicket tickets = 4;
	repeated uint32 app_ids = 5;
	optional uint32 message_sequence = 6;
}

message CMsgClientAuthListAck {
	repeated uint32 ticket_crc = 1;
	repeated uint32 app_ids = 2;
	optional uint32 message_sequence = 3;
}

message CMsgClientLicenseList {
	message License {
		optional uint32 package_id = 1;
		optional fixed32 time_created = 2;
		optional fixed32 time_next_process = 3;
		optional int32 minute_limit = 4;
		optional int32 minutes_used = 5;
		optional uint32 payment_method = 6;
		optional uint32 flags = 7;
		optional string purchase_country_code = 8;
		optional uint32 license_type = 9;
		optional int32 territory_code = 10;
		optional int32 change_number = 11;
		optional uint32 owner_id = 12;
		optional uint32 initial_period = 13;
		optional uint32 initial_time_unit = 14;
		optional uint32 renewal_period = 15;
		optional uint32 renewal_time_unit = 16;
		optional uint64 access_token = 17;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientLicenseList.License licenses = 2;
}

message CMsgClientLBSSetScore {
	optional uint32 app_id = 1;
	optional int32 leaderboard_id = 2;
	optional int32 score = 3;
	optional bytes details = 4;
	optional int32 upload_score_method = 5;
}

message CMsgClientLBSSetScoreResponse {
	optional int32 eresult = 1 [default = 2];
	optional int32 leaderboard_entry_count = 2;
	optional bool score_changed = 3;
	optional int32 global_rank_previous = 4;
	optional int32 global_rank_new = 5;
}

message CMsgClientLBSSetUGC {
	optional uint32 app_id = 1;
	optional int32 leaderboard_id = 2;
	optional fixed64 ugc_id = 3;
}

message CMsgClientLBSSetUGCResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgClientLBSFindOrCreateLB {
	optional uint32 app_id = 1;
	optional int32 leaderboard_sort_method = 2;
	optional int32 leaderboard_display_type = 3;
	optional bool create_if_not_found = 4;
	optional string leaderboard_name = 5;
}

message CMsgClientLBSFindOrCreateLBResponse {
	optional int32 eresult = 1 [default = 2];
	optional int32 leaderboard_id = 2;
	optional int32 leaderboard_entry_count = 3;
	optional int32 leaderboard_sort_method = 4 [default = 0];
	optional int32 leaderboard_display_type = 5 [default = 0];
	optional string leaderboard_name = 6;
}

message CMsgClientLBSGetLBEntries {
	optional int32 app_id = 1;
	optional int32 leaderboard_id = 2;
	optional int32 range_start = 3;
	optional int32 range_end = 4;
	optional int32 leaderboard_data_request = 5;
	repeated fixed64 steamids = 6;
}

message CMsgClientLBSGetLBEntriesResponse {
	message Entry {
		optional fixed64 steam_id_user = 1;
		optional int32 global_rank = 2;
		optional int32 score = 3;
		optional bytes details = 4;
		optional fixed64 ugc_id = 5;
	}

	optional int32 eresult = 1 [default = 2];
	optional int32 leaderboard_entry_count = 2;
	repeated .CMsgClientLBSGetLBEntriesResponse.Entry entries = 3;
}

message CMsgClientAppMinutesPlayedData {
	message AppMinutesPlayedData {
		optional uint32 app_id = 1;
		optional int32 forever = 2;
		optional int32 last_two_weeks = 3;
	}

	repeated .CMsgClientAppMinutesPlayedData.AppMinutesPlayedData minutes_played = 1;
}

message CMsgClientIsLimitedAccount {
	optional bool bis_limited_account = 1;
	optional bool bis_community_banned = 2;
	optional bool bis_locked_account = 3;
	optional bool bis_limited_account_allowed_to_invite_friends = 4;
}

message CMsgClientRequestedClientStats {
	message StatsToSend {
		optional uint32 client_stat = 1;
		optional uint32 stat_aggregate_method = 2;
	}

	repeated .CMsgClientRequestedClientStats.StatsToSend stats_to_send = 1;
}

message CMsgClientStat2 {
	message StatDetail {
		optional uint32 client_stat = 1;
		optional int64 ll_value = 2;
		optional uint32 time_of_day = 3;
		optional uint32 cell_id = 4;
		optional uint32 depot_id = 5;
		optional uint32 app_id = 6;
	}

	repeated .CMsgClientStat2.StatDetail stat_detail = 1;
}

message CMsgClientMMSSetRatelimitPolicyOnClient {
	optional uint32 app_id = 1;
	optional bool enable_rate_limits = 2;
	optional int32 seconds_per_message = 3;
	optional int32 milliseconds_per_data_update = 4;
}

message CMsgClientMMSCreateLobby {
	optional uint32 app_id = 1;
	optional int32 max_members = 2;
	optional int32 lobby_type = 3;
	optional int32 lobby_flags = 4;
	optional uint32 cell_id = 5;
	optional uint32 deprecated_public_ip = 6;
	optional bytes metadata = 7;
	optional string persona_name_owner = 8;
	optional .CMsgIPAddress public_ip = 9;
}

message CMsgClientMMSCreateLobbyResponse {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional int32 eresult = 3 [default = 2];
}

message CMsgClientMMSJoinLobby {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional string persona_name = 3;
}

message CMsgClientMMSJoinLobbyResponse {
	message Member {
		optional fixed64 steam_id = 1;
		optional string persona_name = 2;
		optional bytes metadata = 3;
	}

	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional int32 chat_room_enter_response = 3;
	optional int32 max_members = 4;
	optional int32 lobby_type = 5;
	optional int32 lobby_flags = 6;
	optional fixed64 steam_id_owner = 7;
	optional bytes metadata = 8;
	repeated .CMsgClientMMSJoinLobbyResponse.Member members = 9;
}

message CMsgClientMMSLeaveLobby {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
}

message CMsgClientMMSLeaveLobbyResponse {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional int32 eresult = 3 [default = 2];
}

message CMsgClientMMSGetLobbyList {
	message Filter {
		optional string key = 1;
		optional string value = 2;
		optional int32 comparision = 3;
		optional int32 filter_type = 4;
	}

	optional uint32 app_id = 1;
	optional int32 num_lobbies_requested = 3;
	optional uint32 cell_id = 4;
	optional uint32 deprecated_public_ip = 5;
	repeated .CMsgClientMMSGetLobbyList.Filter filters = 6;
	optional .CMsgIPAddress public_ip = 7;
}

message CMsgClientMMSGetLobbyListResponse {
	message Lobby {
		optional fixed64 steam_id = 1;
		optional int32 max_members = 2;
		optional int32 lobby_type = 3;
		optional int32 lobby_flags = 4;
		optional bytes metadata = 5;
		optional int32 num_members = 6;
		optional float distance = 7;
		optional int64 weight = 8;
	}

	optional uint32 app_id = 1;
	optional int32 eresult = 3 [default = 2];
	repeated .CMsgClientMMSGetLobbyListResponse.Lobby lobbies = 4;
}

message CMsgClientMMSSetLobbyData {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_member = 3;
	optional int32 max_members = 4;
	optional int32 lobby_type = 5;
	optional int32 lobby_flags = 6;
	optional bytes metadata = 7;
}

message CMsgClientMMSSetLobbyDataResponse {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional int32 eresult = 3 [default = 2];
}

message CMsgClientMMSGetLobbyData {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
}

message CMsgClientMMSLobbyData {
	message Member {
		optional fixed64 steam_id = 1;
		optional string persona_name = 2;
		optional bytes metadata = 3;
	}

	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional int32 num_members = 3;
	optional int32 max_members = 4;
	optional int32 lobby_type = 5;
	optional int32 lobby_flags = 6;
	optional fixed64 steam_id_owner = 7;
	optional bytes metadata = 8;
	repeated .CMsgClientMMSLobbyData.Member members = 9;
	optional uint32 lobby_cellid = 10;
	optional bool owner_should_accept_changes = 11;
}

message CMsgClientMMSSendLobbyChatMsg {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_target = 3;
	optional bytes lobby_message = 4;
}

message CMsgClientMMSLobbyChatMsg {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_sender = 3;
	optional bytes lobby_message = 4;
}

message CMsgClientMMSSetLobbyOwner {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_new_owner = 3;
}

message CMsgClientMMSSetLobbyOwnerResponse {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional int32 eresult = 3 [default = 2];
}

message CMsgClientMMSSetLobbyLinked {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_lobby2 = 3;
}

message CMsgClientMMSSetLobbyGameServer {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional uint32 deprecated_game_server_ip = 3;
	optional uint32 game_server_port = 4;
	optional fixed64 game_server_steam_id = 5;
	optional .CMsgIPAddress game_server_ip = 6;
}

message CMsgClientMMSLobbyGameServerSet {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional uint32 deprecated_game_server_ip = 3;
	optional uint32 game_server_port = 4;
	optional fixed64 game_server_steam_id = 5;
	optional .CMsgIPAddress game_server_ip = 6;
}

message CMsgClientMMSUserJoinedLobby {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_user = 3;
	optional string persona_name = 4;
}

message CMsgClientMMSUserLeftLobby {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_user = 3;
	optional string persona_name = 4;
}

message CMsgClientMMSInviteToLobby {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional fixed64 steam_id_user_invited = 3;
}

message CMsgClientMMSGetLobbyStatus {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional bool claim_membership = 3;
	optional bool claim_ownership = 4;
}

message CMsgClientMMSGetLobbyStatusResponse {
	optional uint32 app_id = 1;
	optional fixed64 steam_id_lobby = 2;
	optional .EMMSLobbyStatus lobby_status = 3 [default = k_EMMSLobbyStatusInvalid];
}

message CMsgClientInviteToGame {
	optional fixed64 steam_id_dest = 1;
	optional fixed64 steam_id_src = 2;
	optional string connect_string = 3;
	optional string remote_play = 4;
}

message CMsgClientChatInvite {
	optional fixed64 steam_id_invited = 1;
	optional fixed64 steam_id_chat = 2;
	optional fixed64 steam_id_patron = 3;
	optional int32 chatroom_type = 4;
	optional fixed64 steam_id_friend_chat = 5;
	optional string chat_name = 6;
	optional fixed64 game_id = 7;
}

message CMsgClientConnectionStats {
	message Stats_Logon {
		optional int32 connect_attempts = 1;
		optional int32 connect_successes = 2;
		optional int32 connect_failures = 3;
		optional int32 connections_dropped = 4;
		optional uint32 seconds_running = 5;
		optional uint32 msec_tologonthistime = 6;
		optional uint32 count_bad_cms = 7;
	}

	message Stats_UDP {
		optional uint64 pkts_sent = 1;
		optional uint64 bytes_sent = 2;
		optional uint64 pkts_recv = 3;
		optional uint64 pkts_processed = 4;
		optional uint64 bytes_recv = 5;
	}

	message Stats_VConn {
		optional uint32 connections_udp = 1;
		optional uint32 connections_tcp = 2;
		optional .CMsgClientConnectionStats.Stats_UDP stats_udp = 3;
		optional uint64 pkts_abandoned = 4;
		optional uint64 conn_req_received = 5;
		optional uint64 pkts_resent = 6;
		optional uint64 msgs_sent = 7;
		optional uint64 msgs_sent_failed = 8;
		optional uint64 msgs_recv = 9;
		optional uint64 datagrams_sent = 10;
		optional uint64 datagrams_recv = 11;
		optional uint64 bad_pkts_recv = 12;
		optional uint64 unknown_conn_pkts_recv = 13;
		optional uint64 missed_pkts_recv = 14;
		optional uint64 dup_pkts_recv = 15;
		optional uint64 failed_connect_challenges = 16;
		optional uint32 micro_sec_avg_latency = 17;
		optional uint32 micro_sec_min_latency = 18;
		optional uint32 micro_sec_max_latency = 19;
		optional uint32 mem_pool_msg_in_use = 20;
	}

	optional .CMsgClientConnectionStats.Stats_Logon stats_logon = 1;
	optional .CMsgClientConnectionStats.Stats_VConn stats_vconn = 2;
}

message CMsgClientServersAvailable {
	message Server_Types_Available {
		optional uint32 server = 1;
		optional bool changed = 2;
	}

	repeated .CMsgClientServersAvailable.Server_Types_Available server_types_available = 1;
	optional uint32 server_type_for_auth_services = 2;
}

message CMsgClientGetUserStats {
	optional fixed64 game_id = 1;
	optional uint32 crc_stats = 2;
	optional int32 schema_local_version = 3;
	optional fixed64 steam_id_for_user = 4;
}

message CMsgClientGetUserStatsResponse {
	message Stats {
		optional uint32 stat_id = 1;
		optional uint32 stat_value = 2;
	}

	message Achievement_Blocks {
		optional uint32 achievement_id = 1;
		repeated fixed32 unlock_time = 2;
	}

	optional fixed64 game_id = 1;
	optional int32 eresult = 2 [default = 2];
	optional uint32 crc_stats = 3;
	optional bytes schema = 4;
	repeated .CMsgClientGetUserStatsResponse.Stats stats = 5;
	repeated .CMsgClientGetUserStatsResponse.Achievement_Blocks achievement_blocks = 6;
}

message CMsgClientStoreUserStatsResponse {
	message Stats_Failed_Validation {
		optional uint32 stat_id = 1;
		optional uint32 reverted_stat_value = 2;
	}

	optional fixed64 game_id = 1;
	optional int32 eresult = 2 [default = 2];
	optional uint32 crc_stats = 3;
	repeated .CMsgClientStoreUserStatsResponse.Stats_Failed_Validation stats_failed_validation = 4;
	optional bool stats_out_of_date = 5;
}

message CMsgClientStoreUserStats2 {
	message Stats {
		optional uint32 stat_id = 1;
		optional uint32 stat_value = 2;
	}

	optional fixed64 game_id = 1;
	optional fixed64 settor_steam_id = 2;
	optional fixed64 settee_steam_id = 3;
	optional uint32 crc_stats = 4;
	optional bool explicit_reset = 5;
	repeated .CMsgClientStoreUserStats2.Stats stats = 6;
}

message CMsgClientStatsUpdated {
	message Updated_Stats {
		optional uint32 stat_id = 1;
		optional uint32 stat_value = 2;
	}

	optional fixed64 steam_id = 1;
	optional fixed64 game_id = 2;
	optional uint32 crc_stats = 3;
	repeated .CMsgClientStatsUpdated.Updated_Stats updated_stats = 4;
}

message CMsgClientStoreUserStats {
	message Stats_To_Store {
		optional uint32 stat_id = 1;
		optional uint32 stat_value = 2;
	}

	optional fixed64 game_id = 1;
	optional bool explicit_reset = 2;
	repeated .CMsgClientStoreUserStats.Stats_To_Store stats_to_store = 3;
}

message CMsgClientGetClientDetails {
}

message CMsgClientReportOverlayDetourFailure {
	repeated string failure_strings = 1;
}

message CMsgClientGetClientDetailsResponse {
	message Game {
		optional uint32 appid = 1;
		optional string extra_info = 2;
		optional uint32 time_running_sec = 3;
	}

	optional uint32 package_version = 1;
	optional uint32 protocol_version = 8;
	optional string os = 2;
	optional string machine_name = 3;
	optional string ip_public = 4;
	optional string ip_private = 5;
	optional uint64 bytes_available = 7;
	repeated .CMsgClientGetClientDetailsResponse.Game games_running = 6;
}

message CMsgClientGetClientAppList {
	optional bool media = 1;
	optional bool tools = 2;
	optional bool games = 3;
	optional bool only_installed = 4;
	optional bool only_changing = 5;
	optional bool comics = 6;
}

message CMsgClientGetClientAppListResponse {
	message App {
		message DLC {
			optional uint32 appid = 1;
			optional bool installed = 2;
		}

		optional uint32 appid = 1;
		optional string category = 2;
		optional string app_type = 10;
		optional bool favorite = 3;
		optional bool installed = 4;
		optional bool auto_update = 5;
		optional uint64 bytes_downloaded = 6;
		optional uint64 bytes_needed = 7;
		optional uint32 bytes_download_rate = 8;
		optional bool download_paused = 11;
		optional uint32 num_downloading = 12;
		optional uint32 num_paused = 13;
		optional bool changing = 14;
		optional bool available_on_platform = 15;
		repeated .CMsgClientGetClientAppListResponse.App.DLC dlcs = 9;
	}

	repeated .CMsgClientGetClientAppListResponse.App apps = 1;
	optional uint64 bytes_available = 2;
}

message CMsgClientInstallClientApp {
	optional uint32 appid = 1;
}

message CMsgClientInstallClientAppResponse {
	optional uint32 result = 1;
}

message CMsgClientUninstallClientApp {
	optional uint32 appid = 1;
}

message CMsgClientUninstallClientAppResponse {
	optional uint32 result = 1;
}

message CMsgClientSetClientAppUpdateState {
	optional uint32 appid = 1;
	optional bool update = 2;
}

message CMsgClientSetClientAppUpdateStateResponse {
	optional uint32 result = 1;
}

message CMsgClientUFSUploadFileRequest {
	optional uint32 app_id = 1;
	optional uint32 file_size = 2;
	optional uint32 raw_file_size = 3;
	optional bytes sha_file = 4;
	optional uint64 time_stamp = 5;
	optional string file_name = 6;
	optional uint32 platforms_to_sync_deprecated = 7;
	optional uint32 platforms_to_sync = 8 [default = 4294967295];
	optional uint32 cell_id = 9;
	optional bool can_encrypt = 10;
}

message CMsgClientUFSUploadFileResponse {
	optional int32 eresult = 1 [default = 2];
	optional bytes sha_file = 2;
	optional bool use_http = 3;
	optional string http_host = 4;
	optional string http_url = 5;
	optional bytes kv_headers = 6;
	optional bool use_https = 7;
	optional bool encrypt_file = 8;
}

message CMsgClientUFSUploadCommit {
	message File {
		optional int32 eresult = 1 [default = 2];
		optional uint32 app_id = 2;
		optional bytes sha_file = 3;
		optional uint32 cub_file = 4;
		optional string file_name = 5;
	}

	repeated .CMsgClientUFSUploadCommit.File files = 1;
}

message CMsgClientUFSUploadCommitResponse {
	message File {
		optional int32 eresult = 1 [default = 2];
		optional uint32 app_id = 2;
		optional bytes sha_file = 3;
	}

	repeated .CMsgClientUFSUploadCommitResponse.File files = 1;
}

message CMsgClientUFSFileChunk {
	optional bytes sha_file = 1;
	optional uint32 file_start = 2;
	optional bytes data = 3;
}

message CMsgClientUFSTransferHeartbeat {
}

message CMsgClientUFSUploadFileFinished {
	optional int32 eresult = 1 [default = 2];
	optional bytes sha_file = 2;
}

message CMsgClientUFSDeleteFileRequest {
	optional uint32 app_id = 1;
	optional string file_name = 2;
	optional bool is_explicit_delete = 3;
}

message CMsgClientUFSDeleteFileResponse {
	optional int32 eresult = 1 [default = 2];
	optional string file_name = 2;
}

message CMsgClientUFSGetFileListForApp {
	repeated uint32 apps_to_query = 1;
	optional bool send_path_prefixes = 2;
}

message CMsgClientUFSGetFileListForAppResponse {
	option (msgpool_soft_limit) = 8;
	option (msgpool_hard_limit) = 16;

	message File {
		optional uint32 app_id = 1;
		optional string file_name = 2;
		optional bytes sha_file = 3;
		optional uint64 time_stamp = 4;
		optional uint32 raw_file_size = 5;
		optional bool is_explicit_delete = 6;
		optional uint32 platforms_to_sync = 7;
		optional uint32 path_prefix_index = 8;
	}

	repeated .CMsgClientUFSGetFileListForAppResponse.File files = 1;
	repeated string path_prefixes = 2;
}

message CMsgClientUFSDownloadRequest {
	optional uint32 app_id = 1;
	optional string file_name = 2;
	optional bool can_handle_http = 3;
}

message CMsgClientUFSDownloadResponse {
	optional int32 eresult = 1 [default = 2];
	optional uint32 app_id = 2;
	optional uint32 file_size = 3;
	optional uint32 raw_file_size = 4;
	optional bytes sha_file = 5;
	optional uint64 time_stamp = 6;
	optional bool is_explicit_delete = 7;
	optional bool use_http = 8;
	optional string http_host = 9;
	optional string http_url = 10;
	optional bytes kv_headers = 11;
	optional bool use_https = 12;
	optional bool encrypted = 13;
}

message CMsgClientUFSLoginRequest {
	optional uint32 protocol_version = 1;
	optional uint64 am_session_token = 2;
	repeated uint32 apps = 3;
}

message CMsgClientUFSLoginResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgClientRequestEncryptedAppTicket {
	optional uint32 app_id = 1;
	optional bytes userdata = 2;
}

message CMsgClientRequestEncryptedAppTicketResponse {
	optional uint32 app_id = 1;
	optional int32 eresult = 2 [default = 2];
	optional .EncryptedAppTicket encrypted_app_ticket = 3;
}

message CMsgClientWalletInfoUpdate {
	optional bool has_wallet = 1;
	optional int32 balance = 2;
	optional int32 currency = 3;
	optional int32 balance_delayed = 4;
	optional int64 balance64 = 5 [(php_output_always_number) = true];
	optional int64 balance64_delayed = 6 [(php_output_always_number) = true];
}

message CMsgClientAppInfoUpdate {
	optional uint32 last_changenumber = 1;
	optional bool send_changelist = 2;
}

message CMsgClientAppInfoChanges {
	optional uint32 current_change_number = 1;
	optional bool force_full_update = 2;
	repeated uint32 appIDs = 3;
}

message CMsgClientAppInfoRequest {
	message App {
		optional uint32 app_id = 1;
		optional uint32 section_flags = 2;
		repeated uint32 section_CRC = 3;
	}

	repeated .CMsgClientAppInfoRequest.App apps = 1;
	optional bool supports_batches = 2 [default = false];
}

message CMsgClientAppInfoResponse {
	option (msgpool_hard_limit) = 0;

	message App {
		message Section {
			optional uint32 section_id = 1;
			optional bytes section_kv = 2;
		}

		optional uint32 app_id = 1;
		optional uint32 change_number = 2;
		repeated .CMsgClientAppInfoResponse.App.Section sections = 3;
	}

	repeated .CMsgClientAppInfoResponse.App apps = 1;
	repeated uint32 apps_unknown = 2;
	optional uint32 apps_pending = 3;
}

message CMsgClientPackageInfoRequest {
	repeated uint32 package_ids = 1;
	optional bool meta_data_only = 2;
}

message CMsgClientPackageInfoResponse {
	message Package {
		optional uint32 package_id = 1;
		optional uint32 change_number = 2;
		optional bytes sha = 3;
		optional bytes buffer = 4;
	}

	repeated .CMsgClientPackageInfoResponse.Package packages = 1;
	repeated uint32 packages_unknown = 2;
	optional uint32 packages_pending = 3;
}

message CMsgClientPICSChangesSinceRequest {
	optional uint32 since_change_number = 1;
	optional bool send_app_info_changes = 2;
	optional bool send_package_info_changes = 3;
	optional uint32 num_app_info_cached = 4;
	optional uint32 num_package_info_cached = 5;
}

message CMsgClientPICSChangesSinceResponse {
	message PackageChange {
		optional uint32 packageid = 1;
		optional uint32 change_number = 2;
		optional bool needs_token = 3;
	}

	message AppChange {
		optional uint32 appid = 1;
		optional uint32 change_number = 2;
		optional bool needs_token = 3;
	}

	optional uint32 current_change_number = 1;
	optional uint32 since_change_number = 2;
	optional bool force_full_update = 3;
	repeated .CMsgClientPICSChangesSinceResponse.PackageChange package_changes = 4;
	repeated .CMsgClientPICSChangesSinceResponse.AppChange app_changes = 5;
	optional bool force_full_app_update = 6;
	optional bool force_full_package_update = 7;
}

message CMsgClientPICSProductInfoRequest {
	message AppInfo {
		optional uint32 appid = 1;
		optional uint64 access_token = 2;
		optional bool only_public = 3;
	}

	message PackageInfo {
		optional uint32 packageid = 1;
		optional uint64 access_token = 2;
	}

	repeated .CMsgClientPICSProductInfoRequest.PackageInfo packages = 1;
	repeated .CMsgClientPICSProductInfoRequest.AppInfo apps = 2;
	optional bool meta_data_only = 3;
	optional uint32 num_prev_failed = 4;
	optional uint32 supports_package_tokens = 5;
}

message CMsgClientPICSProductInfoResponse {
	option (msgpool_hard_limit) = 0;

	message AppInfo {
		optional uint32 appid = 1;
		optional uint32 change_number = 2;
		optional bool missing_token = 3;
		optional bytes sha = 4;
		optional bytes buffer = 5;
		optional bool only_public = 6;
		optional uint32 size = 7;
	}

	message PackageInfo {
		optional uint32 packageid = 1;
		optional uint32 change_number = 2;
		optional bool missing_token = 3;
		optional bytes sha = 4;
		optional bytes buffer = 5;
		optional uint32 size = 6;
	}

	repeated .CMsgClientPICSProductInfoResponse.AppInfo apps = 1;
	repeated uint32 unknown_appids = 2;
	repeated .CMsgClientPICSProductInfoResponse.PackageInfo packages = 3;
	repeated uint32 unknown_packageids = 4;
	optional bool meta_data_only = 5;
	optional bool response_pending = 6;
	optional uint32 http_min_size = 7;
	optional string http_host = 8;
}

message CMsgClientPICSAccessTokenRequest {
	repeated uint32 packageids = 1;
	repeated uint32 appids = 2;
}

message CMsgClientPICSAccessTokenResponse {
	message PackageToken {
		optional uint32 packageid = 1;
		optional uint64 access_token = 2;
	}

	message AppToken {
		optional uint32 appid = 1;
		optional uint64 access_token = 2;
	}

	repeated .CMsgClientPICSAccessTokenResponse.PackageToken package_access_tokens = 1;
	repeated uint32 package_denied_tokens = 2;
	repeated .CMsgClientPICSAccessTokenResponse.AppToken app_access_tokens = 3;
	repeated uint32 app_denied_tokens = 4;
}

message CMsgClientUFSGetUGCDetails {
	optional fixed64 hcontent = 1 [default = 18446744073709551615];
}

message CMsgClientUFSGetUGCDetailsResponse {
	optional int32 eresult = 1 [default = 2];
	optional string url = 2;
	optional uint32 app_id = 3;
	optional string filename = 4;
	optional fixed64 steamid_creator = 5;
	optional uint32 file_size = 6;
	optional uint32 compressed_file_size = 7;
	optional string rangecheck_host = 8;
	optional string file_encoded_sha1 = 9;
}

message CMsgClientUFSGetSingleFileInfo {
	optional uint32 app_id = 1;
	optional string file_name = 2;
}

message CMsgClientUFSGetSingleFileInfoResponse {
	optional int32 eresult = 1 [default = 2];
	optional uint32 app_id = 2;
	optional string file_name = 3;
	optional bytes sha_file = 4;
	optional uint64 time_stamp = 5;
	optional uint32 raw_file_size = 6;
	optional bool is_explicit_delete = 7;
}

message CMsgClientUFSShareFile {
	optional uint32 app_id = 1;
	optional string file_name = 2;
}

message CMsgClientUFSShareFileResponse {
	optional int32 eresult = 1 [default = 2];
	optional fixed64 hcontent = 2 [default = 18446744073709551615];
}

message CMsgClientAMGetClanOfficers {
	optional fixed64 steamid_clan = 1;
}

message CMsgClientAMGetClanOfficersResponse {
	optional int32 eresult = 1 [default = 2];
	optional fixed64 steamid_clan = 2;
	optional int32 officer_count = 3;
}

message CMsgClientAMGetPersonaNameHistory {
	message IdInstance {
		optional fixed64 steamid = 1;
	}

	optional int32 id_count = 1;
	repeated .CMsgClientAMGetPersonaNameHistory.IdInstance Ids = 2;
}

message CMsgClientAMGetPersonaNameHistoryResponse {
	message NameTableInstance {
		message NameInstance {
			optional fixed32 name_since = 1;
			optional string name = 2;
		}

		optional int32 eresult = 1 [default = 2];
		optional fixed64 steamid = 2;
		repeated .CMsgClientAMGetPersonaNameHistoryResponse.NameTableInstance.NameInstance names = 3;
	}

	repeated .CMsgClientAMGetPersonaNameHistoryResponse.NameTableInstance responses = 2;
}

message CMsgClientDeregisterWithServer {
	optional uint32 eservertype = 1;
	optional uint32 app_id = 2;
}

message CMsgClientClanState {
	message NameInfo {
		optional string clan_name = 1;
		optional bytes sha_avatar = 2;
	}

	message UserCounts {
		optional uint32 members = 1;
		optional uint32 online = 2;
		optional uint32 chatting = 3;
		optional uint32 in_game = 4;
		optional uint32 chat_room_members = 5;
	}

	message Event {
		optional fixed64 gid = 1;
		optional uint32 event_time = 2;
		optional string headline = 3;
		optional fixed64 game_id = 4;
		optional bool just_posted = 5;
	}

	optional fixed64 steamid_clan = 1;
	optional uint32 clan_account_flags = 3;
	optional .CMsgClientClanState.NameInfo name_info = 4;
	optional .CMsgClientClanState.UserCounts user_counts = 5;
	repeated .CMsgClientClanState.Event events = 6;
	repeated .CMsgClientClanState.Event announcements = 7;
	optional bool chat_room_private = 8;
}

message CMsgClientUnsignedInstallScript {
	optional uint32 app_id = 1;
	optional string file_name = 2;
	optional uint32 file_size = 3;
	optional bool signature_broken = 4;
	optional uint32 depot_id = 5;
	optional uint64 manifest_id = 6;
	optional uint32 file_flags = 7;
}
