diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index dc217c752..c99094c83 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -163,6 +163,11 @@ func main() { chatGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg) chatGroup.POST("/check_msg_is_send_success", manage.CheckMsgIsSendSuccess) chatGroup.POST("/set_msg_min_seq", apiChat.SetMsgMinSeq) + + chatGroup.POST("/set_message_reaction_extensions", apiChat.SetMessageReactionExtensions) + chatGroup.POST("/get_message_list_reaction_extensions", apiChat.GetMessageListReactionExtensions) + chatGroup.POST("/add_message_reaction_extensions", apiChat.AddMessageReactionExtensions) + chatGroup.POST("/delete_message_reaction_extensions", apiChat.DeleteMessageReactionExtensions) } //Conversation conversationGroup := r.Group("/conversation") diff --git a/config/config.yaml b/config/config.yaml index 474832f34..61aadf2b3 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -62,12 +62,15 @@ kafka: ms2pschat: addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 topic: "ms2ps_chat" #消息push + msgtomodify: + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + topic: "msg_to_modify" consumergroupid: msgToTransfer: mongo msgToMongo: mongo_ex msgToMySql: mysql msgToPush: push - + msgToModify: modify #---------------Internal service configuration---------------------# @@ -349,6 +352,11 @@ callback: enable: false callbackTimeOut: 2 callbackFailedContinue: true # 回调超时是否继续 + callbackSetMessageReactionExtensions: + enable: false + callbackTimeOut: 2 + callbackFailedContinue: true # 回调超时是否继续 + notification: groupCreated: diff --git a/internal/api/msg/extend_msg.go b/internal/api/msg/extend_msg.go new file mode 100644 index 000000000..b6920825d --- /dev/null +++ b/internal/api/msg/extend_msg.go @@ -0,0 +1,203 @@ +package msg + +import ( + api "Open_IM/pkg/base_info" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + rpc "Open_IM/pkg/proto/msg" + "Open_IM/pkg/utils" + "context" + "github.com/gin-gonic/gin" + "net/http" + "strings" +) + +func SetMessageReactionExtensions(c *gin.Context) { + var ( + req api.SetMessageReactionExtensionsCallbackReq + resp api.SetMessageReactionExtensionsCallbackResp + reqPb rpc.SetMessageReactionExtensionsReq + ) + + if err := c.BindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req) + + if err := utils.CopyStructFields(&reqPb, &req); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) + } + var ok bool + var errInfo string + ok, reqPb.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + grpcConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, req.OperationID) + if grpcConn == nil { + errMsg := req.OperationID + " getcdv3.GetDefaultConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + msgClient := rpc.NewMsgClient(grpcConn) + respPb, err := msgClient.SetMessageReactionExtensions(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrServer.ErrCode, "errMsg": constant.ErrServer.ErrMsg + err.Error()}) + return + } + resp.ErrCode = respPb.ErrCode + resp.ErrMsg = respPb.ErrMsg + resp.Data.ResultKeyValue = respPb.Result + resp.Data.MsgFirstModifyTime = reqPb.MsgFirstModifyTime + resp.Data.IsReact = reqPb.IsReact + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) + c.JSON(http.StatusOK, resp) + +} + +func GetMessageListReactionExtensions(c *gin.Context) { + var ( + req api.GetMessageListReactionExtensionsReq + resp api.GetMessageListReactionExtensionsResp + reqPb rpc.GetMessageListReactionExtensionsReq + ) + if err := c.BindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req) + + if err := utils.CopyStructFields(&reqPb, &req); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) + } + var ok bool + var errInfo string + ok, reqPb.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + grpcConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, req.OperationID) + if grpcConn == nil { + errMsg := req.OperationID + " getcdv3.GetDefaultConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + msgClient := rpc.NewMsgClient(grpcConn) + respPb, err := msgClient.GetMessageListReactionExtensions(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrServer.ErrCode, "errMsg": constant.ErrServer.ErrMsg + err.Error()}) + return + } + resp.ErrCode = respPb.ErrCode + resp.ErrMsg = respPb.ErrMsg + resp.Data = respPb.SingleMessageResult + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) + c.JSON(http.StatusOK, resp) +} + +func AddMessageReactionExtensions(c *gin.Context) { + var ( + req api.AddMessageReactionExtensionsReq + resp api.AddMessageReactionExtensionsResp + reqPb rpc.ModifyMessageReactionExtensionsReq + ) + if err := c.BindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req) + + if err := utils.CopyStructFields(&reqPb, &req); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) + } + var ok bool + var errInfo string + ok, reqPb.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + grpcConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, req.OperationID) + if grpcConn == nil { + errMsg := req.OperationID + " getcdv3.GetDefaultConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + msgClient := rpc.NewMsgClient(grpcConn) + respPb, err := msgClient.AddMessageReactionExtensions(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrServer.ErrCode, "errMsg": constant.ErrServer.ErrMsg + err.Error()}) + return + } + resp.ErrCode = respPb.ErrCode + resp.ErrMsg = respPb.ErrMsg + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) + c.JSON(http.StatusOK, resp) +} + +func DeleteMessageReactionExtensions(c *gin.Context) { + var ( + req api.DeleteMessageReactionExtensionsReq + resp api.DeleteMessageReactionExtensionsResp + reqPb rpc.DeleteMessageListReactionExtensionsReq + ) + if err := c.BindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + return + } + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req) + + if err := utils.CopyStructFields(&reqPb, &req); err != nil { + log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields", err.Error()) + } + var ok bool + var errInfo string + ok, reqPb.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) + if !ok { + errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token") + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + + grpcConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, req.OperationID) + if grpcConn == nil { + errMsg := req.OperationID + " getcdv3.GetDefaultConn == nil" + log.NewError(req.OperationID, errMsg) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) + return + } + msgClient := rpc.NewMsgClient(grpcConn) + respPb, err := msgClient.DeleteMessageReactionExtensions(context.Background(), &reqPb) + if err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "DelMsgList failed", err.Error(), reqPb) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrServer.ErrCode, "errMsg": constant.ErrServer.ErrMsg + err.Error()}) + return + } + resp.ErrCode = respPb.ErrCode + resp.ErrMsg = respPb.ErrMsg + resp.Data = respPb.Result + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) + c.JSON(http.StatusOK, resp) +} diff --git a/internal/msg_transfer/logic/init.go b/internal/msg_transfer/logic/init.go index 201c6ee41..ebe0d1aa9 100644 --- a/internal/msg_transfer/logic/init.go +++ b/internal/msg_transfer/logic/init.go @@ -22,7 +22,9 @@ var ( persistentCH PersistentConsumerHandler historyCH OnlineHistoryRedisConsumerHandler historyMongoCH OnlineHistoryMongoConsumerHandler + modifyCH ModifyMsgConsumerHandler producer *kafka.Producer + producerToModify *kafka.Producer producerToMongo *kafka.Producer cmdCh chan Cmd2Value onlineTopicStatus int @@ -43,11 +45,13 @@ func Init() { persistentCH.Init() // ws2mschat save mysql historyCH.Init(cmdCh) // historyMongoCH.Init() + modifyCH.Init() onlineTopicStatus = OnlineTopicVacancy //offlineHistoryCH.Init(cmdCh) statistics.NewStatistics(&singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&groupMsgCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second groupMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) producer = kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic) + producerToModify = kafka.NewKafkaProducer(config.Config.Kafka.MsgToModify.Addr, config.Config.Kafka.MsgToModify.Topic) producerToMongo = kafka.NewKafkaProducer(config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.MsgToMongo.Topic) } func Run(promethuesPort int) { @@ -59,6 +63,7 @@ func Run(promethuesPort int) { } go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH) go historyMongoCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyMongoCH) + go modifyCH.modifyMsgConsumerGroup.RegisterHandleAndConsumer(&modifyCH) //go offlineHistoryCH.historyConsumerGroup.RegisterHandleAndConsumer(&offlineHistoryCH) go func() { err := promePkg.StartPromeSrv(promethuesPort) diff --git a/internal/msg_transfer/logic/modify_msg_handler.go b/internal/msg_transfer/logic/modify_msg_handler.go new file mode 100644 index 000000000..782c6fcc0 --- /dev/null +++ b/internal/msg_transfer/logic/modify_msg_handler.go @@ -0,0 +1,121 @@ +package logic + +import ( + "Open_IM/pkg/base_info" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + kfk "Open_IM/pkg/common/kafka" + "Open_IM/pkg/common/log" + pbMsg "Open_IM/pkg/proto/msg" + server_api_params "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "encoding/json" + "github.com/Shopify/sarama" + + "github.com/golang/protobuf/proto" +) + +type ModifyMsgConsumerHandler struct { + msgHandle map[string]fcb + modifyMsgConsumerGroup *kfk.MConsumerGroup +} + +func (mmc *ModifyMsgConsumerHandler) Init() { + mmc.msgHandle = make(map[string]fcb) + mmc.msgHandle[config.Config.Kafka.MsgToModify.Topic] = mmc.ModifyMsg + mmc.modifyMsgConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, + OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToModify.Topic}, + config.Config.Kafka.MsgToModify.Addr, config.Config.Kafka.ConsumerGroupID.MsgToModify) +} + +func (ModifyMsgConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } +func (ModifyMsgConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } +func (mmc *ModifyMsgConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, + claim sarama.ConsumerGroupClaim) error { + for msg := range claim.Messages() { + log.NewDebug("", "kafka get info to mysql", "ModifyMsgConsumerHandler", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) + if len(msg.Value) != 0 { + mmc.msgHandle[msg.Topic](msg, string(msg.Key), sess) + } else { + log.Error("", "msg get from kafka but is nil", msg.Key) + } + sess.MarkMessage(msg, "") + } + return nil +} + +func (mmc *ModifyMsgConsumerHandler) ModifyMsg(cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { + log.NewInfo("msg come here ModifyMsg!!!", "", "msg", string(cMsg.Value), msgKey) + msgFromMQ := pbMsg.MsgDataToModifyByMQ{} + err := proto.Unmarshal(cMsg.Value, &msgFromMQ) + if err != nil { + log.NewError(msgFromMQ.TriggerID, "msg_transfer Unmarshal msg err", "msg", string(cMsg.Value), "err", err.Error()) + return + } + log.Debug(msgFromMQ.TriggerID, "proto.Unmarshal MsgDataToMQ", msgFromMQ.String()) + for _, msgDataToMQ := range msgFromMQ.MessageList { + isReactionFromCache := utils.GetSwitchFromOptions(msgDataToMQ.MsgData.Options, constant.IsReactionFromCache) + if !isReactionFromCache { + continue + } + if msgDataToMQ.MsgData.ContentType == constant.ReactionMessageModifier { + notification := &base_info.ReactionMessageModifierNotification{} + if err := json.Unmarshal(msgDataToMQ.MsgData.Content, notification); err != nil { + continue + } + if notification.IsExternalExtensions { + log.NewInfo(msgDataToMQ.OperationID, "msg:", notification, "this is external extensions") + continue + } + if !notification.IsReact { + // first time to modify + var reactionExtensionList = make(map[string]db.KeyValue) + extendMsg := db.ExtendMsg{ + ReactionExtensionList: reactionExtensionList, + ClientMsgID: notification.ClientMsgID, + MsgFirstModifyTime: notification.MsgFirstModifyTime, + } + for _, v := range notification.SuccessReactionExtensionList { + reactionExtensionList[v.TypeKey] = db.KeyValue{ + TypeKey: v.TypeKey, + Value: v.Value, + LatestUpdateTime: v.LatestUpdateTime, + } + } + + if err := db.DB.InsertExtendMsg(notification.SourceID, notification.SessionType, &extendMsg); err != nil { + log.NewError(msgDataToMQ.OperationID, "MsgFirstModify InsertExtendMsg failed", notification.SourceID, notification.SessionType, extendMsg, err.Error()) + continue + } + } else { + var reactionExtensionList = make(map[string]*server_api_params.KeyValue) + for _, v := range notification.SuccessReactionExtensionList { + reactionExtensionList[v.TypeKey] = &server_api_params.KeyValue{ + TypeKey: v.TypeKey, + Value: v.Value, + LatestUpdateTime: v.LatestUpdateTime, + } + } + // is already modify + if err := db.DB.InsertOrUpdateReactionExtendMsgSet(notification.SourceID, notification.SessionType, notification.ClientMsgID, notification.MsgFirstModifyTime, reactionExtensionList); err != nil { + log.NewError(msgDataToMQ.OperationID, "InsertOrUpdateReactionExtendMsgSet failed") + } + } + } else if msgDataToMQ.MsgData.ContentType == constant.ReactionMessageDeleter { + notification := &base_info.ReactionMessageDeleteNotification{} + if err := json.Unmarshal(msgDataToMQ.MsgData.Content, notification); err != nil { + continue + } + if err := db.DB.DeleteReactionExtendMsgSet(notification.SourceID, notification.SessionType, notification.ClientMsgID, notification.MsgFirstModifyTime, notification.SuccessReactionExtensionList); err != nil { + log.NewError(msgDataToMQ.OperationID, "InsertOrUpdateReactionExtendMsgSet failed") + } + } + } + +} + +func UnMarshallSetReactionMsgContent(content []byte) (notification *base_info.ReactionMessageModifierNotification, err error) { + + return notification, nil +} diff --git a/internal/msg_transfer/logic/online_history_msg_handler.go b/internal/msg_transfer/logic/online_history_msg_handler.go index 35a388e8e..af22e9259 100644 --- a/internal/msg_transfer/logic/online_history_msg_handler.go +++ b/internal/msg_transfer/logic/online_history_msg_handler.go @@ -72,6 +72,7 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) + var modifyMsgList []*pbMsg.MsgDataToMQ for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) @@ -83,11 +84,15 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { if !(!isSenderSync && msgChannelValue.aggregationID == v.MsgData.SendID) { notStoragePushMsgList = append(notStoragePushMsgList, v) } - } + if v.MsgData.ContentType == constant.ReactionMessageModifier || v.MsgData.ContentType == constant.ReactionMessageDeleter { + modifyMsgList = append(modifyMsgList, v) + } + } + if len(modifyMsgList) > 0 { + sendMessageToModifyMQ(msgChannelValue.aggregationID, triggerID, modifyMsgList) } - //switch msgChannelValue.msg.MsgData.SessionType { //case constant.SingleChatType: //case constant.GroupChatType: @@ -107,6 +112,7 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { singleMsgSuccessCount += uint64(len(storageMsgList)) singleMsgSuccessCountMutex.Unlock() och.SendMessageToMongoCH(msgChannelValue.aggregationID, triggerID, storageMsgList, lastSeq) + for _, v := range storageMsgList { sendMessageToPushMQ(v, msgChannelValue.aggregationID) } @@ -552,6 +558,17 @@ func sendMessageToPushMQ(message *pbMsg.MsgDataToMQ, pushToUserID string) { return } +func sendMessageToModifyMQ(aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ) { + if len(messages) > 0 { + pid, offset, err := producerToModify.SendMessage(&pbMsg.MsgDataToModifyByMQ{AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) + if err != nil { + log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) + } else { + // log.NewWarn(m.OperationID, "sendMsgToKafka client msgID ", m.MsgData.ClientMsgID) + } + } +} + // String hashes a string to a unique hashcode. // // crc32 returns a uint32, but for our use we need diff --git a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go index 11bc399ad..4a6362a05 100644 --- a/internal/msg_transfer/logic/online_msg_to_mongo_handler.go +++ b/internal/msg_transfer/logic/online_msg_to_mongo_handler.go @@ -61,7 +61,6 @@ func (mc *OnlineHistoryMongoConsumerHandler) handleChatWs2Mongo(cMsg *sarama.Con if unexistSeqList, err := db.DB.DelMsgBySeqList(DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID); err != nil { log.NewError(v.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqList args: ", DeleteMessageTips.UserID, DeleteMessageTips.SeqList, v.OperationID, err.Error(), unexistSeqList) } - //if v.MsgData.ContentType == ? {} } } } diff --git a/internal/push/push_interface.go b/internal/push/push_interface.go index 187c2d296..4cd8bae9a 100644 --- a/internal/push/push_interface.go +++ b/internal/push/push_interface.go @@ -2,7 +2,7 @@ package push import "Open_IM/pkg/common/constant" -var PushTerminal = []int{constant.IOSPlatformID, constant.AndroidPlatformID} +var PushTerminal = []int{constant.IOSPlatformID, constant.AndroidPlatformID, constant.WebPlatformID} type OfflinePusher interface { Push(userIDList []string, title, detailContent, operationID string, opts PushOpts) (resp string, err error) diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index b4ae38418..5fae1e133 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -221,9 +221,3 @@ func callbackMsgModify(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp { log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), string(msg.MsgData.Content)) return callbackResp } - -func CallbackBeforeExtendMsgModify() cbApi.CommonCallbackResp { - callbackResp := cbApi.CommonCallbackResp{OperationID: ""} - - return callbackResp -} diff --git a/internal/rpc/msg/extend_msg.go b/internal/rpc/msg/extend_msg.go index 6cb5870b7..a7ba9ddd1 100644 --- a/internal/rpc/msg/extend_msg.go +++ b/internal/rpc/msg/extend_msg.go @@ -1 +1,424 @@ package msg + +import ( + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/db" + "Open_IM/pkg/common/log" + "Open_IM/pkg/proto/msg" + "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "context" + go_redis "github.com/go-redis/redis/v8" + + "time" +) + +func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.SetMessageReactionExtensionsReq) (resp *msg.SetMessageReactionExtensionsResp, err error) { + log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc args is:", req.String()) + var rResp msg.SetMessageReactionExtensionsResp + rResp.ClientMsgID = req.ClientMsgID + rResp.MsgFirstModifyTime = req.MsgFirstModifyTime + callbackResp := callbackSetMessageReactionExtensions(req) + if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 { + rResp.ErrCode = int32(callbackResp.ErrCode) + rResp.ErrMsg = callbackResp.ErrMsg + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = callbackResp.ErrMsg + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + //if ExternalExtension + if req.IsExternalExtensions { + var isHistory bool + if req.IsReact { + isHistory = false + } else { + isHistory = true + } + rResp.MsgFirstModifyTime = callbackResp.MsgFirstModifyTime + rResp.Result = callbackResp.ResultReactionExtensionList + ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, isHistory, false) + return &rResp, nil + } + for _, v := range callbackResp.ResultReactionExtensionList { + if v.ErrCode == 0 { + req.ReactionExtensionList[v.KeyValue.TypeKey] = v.KeyValue + } else { + delete(req.ReactionExtensionList, v.KeyValue.TypeKey) + rResp.Result = append(rResp.Result, v) + } + } + isExists, err := db.DB.JudgeMessageReactionEXISTS(req.ClientMsgID, req.SessionType) + if err != nil { + rResp.ErrCode = 100 + rResp.ErrMsg = err.Error() + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + + if !isExists { + if !req.IsReact { + log.Debug(req.OperationID, "redis handle firstly", req.String()) + rResp.MsgFirstModifyTime = utils.GetCurrentTimestampByMill() + for k, v := range req.ReactionExtensionList { + err := rpc.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k) + if err != nil { + setKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, k, v) + continue + } + v.LatestUpdateTime = utils.GetCurrentTimestampByMill() + newerr := db.DB.SetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, k, utils.StructToJsonString(v)) + if newerr != nil { + setKeyResultInfo(&rResp, 201, newerr.Error(), req.ClientMsgID, k, v) + continue + } + setKeyResultInfo(&rResp, 0, "", req.ClientMsgID, k, v) + } + rResp.IsReact = true + _, err := db.DB.SetMessageReactionExpire(req.ClientMsgID, req.SessionType, time.Duration(24*3)*time.Hour) + if err != nil { + log.Error(req.OperationID, "SetMessageReactionExpire err:", err.Error(), req.String()) + } + } else { + err := rpc.dMessageLocker.LockGlobalMessage(req.ClientMsgID) + if err != nil { + rResp.ErrCode = 100 + rResp.ErrMsg = err.Error() + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + mongoValue, err := db.DB.GetExtendMsg(req.SourceID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime) + if err != nil { + rResp.ErrCode = 200 + rResp.ErrMsg = err.Error() + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + setValue := make(map[string]*server_api_params.KeyValue) + for k, v := range req.ReactionExtensionList { + + temp := new(server_api_params.KeyValue) + if vv, ok := mongoValue.ReactionExtensionList[k]; ok { + utils.CopyStructFields(temp, &vv) + if v.LatestUpdateTime != vv.LatestUpdateTime { + setKeyResultInfo(&rResp, 300, "message have update", req.ClientMsgID, k, temp) + continue + } + } + temp.TypeKey = k + temp.Value = v.Value + temp.LatestUpdateTime = utils.GetCurrentTimestampByMill() + setValue[k] = temp + } + err = db.DB.InsertOrUpdateReactionExtendMsgSet(req.SourceID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime, setValue) + if err != nil { + for _, value := range setValue { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + } else { + for _, value := range setValue { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + rResp.Result = append(rResp.Result, temp) + } + } + lockErr := rpc.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID) + if lockErr != nil { + log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error()) + } + } + + } else { + log.Debug(req.OperationID, "redis handle secondly", req.String()) + + for k, v := range req.ReactionExtensionList { + err := rpc.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k) + if err != nil { + setKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, k, v) + continue + } + redisValue, err := db.DB.GetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, k) + if err != nil && err != go_redis.Nil { + setKeyResultInfo(&rResp, 200, err.Error(), req.ClientMsgID, k, v) + continue + } + temp := new(server_api_params.KeyValue) + utils.JsonStringToStruct(redisValue, temp) + if v.LatestUpdateTime != temp.LatestUpdateTime { + setKeyResultInfo(&rResp, 300, "message have update", req.ClientMsgID, k, temp) + continue + } else { + v.LatestUpdateTime = utils.GetCurrentTimestampByMill() + newerr := db.DB.SetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, k, utils.StructToJsonString(v)) + if newerr != nil { + setKeyResultInfo(&rResp, 201, newerr.Error(), req.ClientMsgID, k, temp) + continue + } + setKeyResultInfo(&rResp, 0, "", req.ClientMsgID, k, v) + } + + } + } + if !isExists { + if !req.IsReact { + ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, true, true) + } else { + ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, false) + } + } else { + ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, true) + } + log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc return is:", rResp.String()) + return &rResp, nil + +} +func setKeyResultInfo(r *msg.SetMessageReactionExtensionsResp, errCode int32, errMsg, clientMsgID, typeKey string, keyValue *server_api_params.KeyValue) { + temp := new(msg.KeyValueResp) + temp.KeyValue = keyValue + temp.ErrCode = errCode + temp.ErrMsg = errMsg + r.Result = append(r.Result, temp) + _ = db.DB.UnLockMessageTypeKey(clientMsgID, typeKey) +} +func setDeleteKeyResultInfo(r *msg.DeleteMessageListReactionExtensionsResp, errCode int32, errMsg, clientMsgID, typeKey string, keyValue *server_api_params.KeyValue) { + temp := new(msg.KeyValueResp) + temp.KeyValue = keyValue + temp.ErrCode = errCode + temp.ErrMsg = errMsg + r.Result = append(r.Result, temp) + _ = db.DB.UnLockMessageTypeKey(clientMsgID, typeKey) +} + +func (rpc *rpcChat) GetMessageListReactionExtensions(ctx context.Context, req *msg.GetMessageListReactionExtensionsReq) (resp *msg.GetMessageListReactionExtensionsResp, err error) { + log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc args is:", req.String()) + var rResp msg.GetMessageListReactionExtensionsResp + for _, messageValue := range req.MessageReactionKeyList { + var oneMessage msg.SingleMessageExtensionResult + oneMessage.ClientMsgID = messageValue.ClientMsgID + + isExists, err := db.DB.JudgeMessageReactionEXISTS(messageValue.ClientMsgID, req.SessionType) + if err != nil { + rResp.ErrCode = 100 + rResp.ErrMsg = err.Error() + return &rResp, nil + } + if isExists { + redisValue, err := db.DB.GetOneMessageAllReactionList(messageValue.ClientMsgID, req.SessionType) + if err != nil { + oneMessage.ErrCode = 100 + oneMessage.ErrMsg = err.Error() + rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage) + continue + } + keyMap := make(map[string]*server_api_params.KeyValue) + + for k, v := range redisValue { + temp := new(server_api_params.KeyValue) + utils.JsonStringToStruct(v, temp) + keyMap[k] = temp + } + oneMessage.ReactionExtensionList = keyMap + + } else { + mongoValue, err := db.DB.GetExtendMsg(req.SourceID, req.SessionType, messageValue.ClientMsgID, messageValue.MsgFirstModifyTime) + if err != nil { + oneMessage.ErrCode = 100 + oneMessage.ErrMsg = err.Error() + rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage) + continue + } + keyMap := make(map[string]*server_api_params.KeyValue) + + for k, v := range mongoValue.ReactionExtensionList { + temp := new(server_api_params.KeyValue) + temp.TypeKey = v.TypeKey + temp.Value = v.Value + temp.LatestUpdateTime = v.LatestUpdateTime + keyMap[k] = temp + } + oneMessage.ReactionExtensionList = keyMap + } + rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage) + } + log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc return is:", rResp.String()) + return &rResp, nil + +} + +func (rpc *rpcChat) AddMessageReactionExtensions(ctx context.Context, req *msg.ModifyMessageReactionExtensionsReq) (resp *msg.ModifyMessageReactionExtensionsResp, err error) { + return +} + +func (rpc *rpcChat) DeleteMessageReactionExtensions(ctx context.Context, req *msg.DeleteMessageListReactionExtensionsReq) (resp *msg.DeleteMessageListReactionExtensionsResp, err error) { + log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc args is:", req.String()) + var rResp msg.DeleteMessageListReactionExtensionsResp + callbackResp := callbackDeleteMessageReactionExtensions(req) + if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 { + rResp.ErrCode = int32(callbackResp.ErrCode) + rResp.ErrMsg = callbackResp.ErrMsg + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = callbackResp.ErrMsg + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + //if ExternalExtension + if req.IsExternalExtensions { + rResp.Result = callbackResp.ResultReactionExtensionList + ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, false) + return &rResp, nil + + } + for _, v := range callbackResp.ResultReactionExtensionList { + if v.ErrCode != 0 { + func(req *[]*server_api_params.KeyValue, typeKey string) { + for i := 0; i < len(*req); i++ { + if (*req)[i].TypeKey == typeKey { + *req = append((*req)[:i], (*req)[i+1:]...) + } + } + }(&req.ReactionExtensionList, v.KeyValue.TypeKey) + rResp.Result = append(rResp.Result, v) + } + } + isExists, err := db.DB.JudgeMessageReactionEXISTS(req.ClientMsgID, req.SessionType) + if err != nil { + rResp.ErrCode = 100 + rResp.ErrMsg = err.Error() + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + + if isExists { + log.Debug(req.OperationID, "redis handle this delete", req.String()) + for _, v := range req.ReactionExtensionList { + err := rpc.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, v.TypeKey) + if err != nil { + setDeleteKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, v.TypeKey, v) + continue + } + + redisValue, err := db.DB.GetMessageTypeKeyValue(req.ClientMsgID, req.SessionType, v.TypeKey) + if err != nil && err != go_redis.Nil { + setDeleteKeyResultInfo(&rResp, 200, err.Error(), req.ClientMsgID, v.TypeKey, v) + continue + } + temp := new(server_api_params.KeyValue) + utils.JsonStringToStruct(redisValue, temp) + if v.LatestUpdateTime != temp.LatestUpdateTime { + setDeleteKeyResultInfo(&rResp, 300, "message have update", req.ClientMsgID, v.TypeKey, temp) + continue + } else { + newErr := db.DB.DeleteOneMessageKey(req.ClientMsgID, req.SessionType, v.TypeKey) + if newErr != nil { + setDeleteKeyResultInfo(&rResp, 201, newErr.Error(), req.ClientMsgID, v.TypeKey, temp) + continue + } + setDeleteKeyResultInfo(&rResp, 0, "", req.ClientMsgID, v.TypeKey, v) + } + } + } else { + err := rpc.dMessageLocker.LockGlobalMessage(req.ClientMsgID) + if err != nil { + rResp.ErrCode = 100 + rResp.ErrMsg = err.Error() + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + mongoValue, err := db.DB.GetExtendMsg(req.SourceID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime) + if err != nil { + rResp.ErrCode = 200 + rResp.ErrMsg = err.Error() + for _, value := range req.ReactionExtensionList { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + return &rResp, nil + } + setValue := make(map[string]*server_api_params.KeyValue) + for _, v := range req.ReactionExtensionList { + + temp := new(server_api_params.KeyValue) + if vv, ok := mongoValue.ReactionExtensionList[v.TypeKey]; ok { + utils.CopyStructFields(temp, &vv) + if v.LatestUpdateTime != vv.LatestUpdateTime { + setDeleteKeyResultInfo(&rResp, 300, "message have update", req.ClientMsgID, v.TypeKey, temp) + continue + } + } else { + setDeleteKeyResultInfo(&rResp, 400, "key not in", req.ClientMsgID, v.TypeKey, v) + continue + } + temp.TypeKey = v.TypeKey + setValue[v.TypeKey] = temp + } + err = db.DB.DeleteReactionExtendMsgSet(req.SourceID, req.SessionType, req.ClientMsgID, req.MsgFirstModifyTime, setValue) + if err != nil { + for _, value := range setValue { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + temp.ErrMsg = err.Error() + temp.ErrCode = 100 + rResp.Result = append(rResp.Result, temp) + } + } else { + for _, value := range setValue { + temp := new(msg.KeyValueResp) + temp.KeyValue = value + rResp.Result = append(rResp.Result, temp) + } + } + lockErr := rpc.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID) + if lockErr != nil { + log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error()) + } + + } + ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, isExists) + log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc return is:", rResp.String()) + return &rResp, nil +} diff --git a/internal/rpc/msg/extend_msg.notification.go b/internal/rpc/msg/extend_msg.notification.go new file mode 100644 index 000000000..971f2f797 --- /dev/null +++ b/internal/rpc/msg/extend_msg.notification.go @@ -0,0 +1,106 @@ +package msg + +import ( + "Open_IM/pkg/base_info" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + "Open_IM/pkg/proto/msg" + open_im_sdk "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "context" + "strings" +) + +func ExtendMessageUpdatedNotification(operationID, sendID string, sourceID string, sessionType int32, + req *msg.SetMessageReactionExtensionsReq, resp *msg.SetMessageReactionExtensionsResp, isHistory bool, isReactionFromCache bool) { + var m base_info.ReactionMessageModifierNotification + m.SourceID = req.SourceID + m.OpUserID = req.OpUserID + m.SessionType = req.SessionType + keyMap := make(map[string]*open_im_sdk.KeyValue) + for _, valueResp := range resp.Result { + if valueResp.ErrCode == 0 { + keyMap[valueResp.KeyValue.TypeKey] = valueResp.KeyValue + } + } + if len(keyMap) == 0 { + log.NewWarn(operationID, "all key set failed can not send notification", *req) + return + } + m.SuccessReactionExtensionList = keyMap + m.ClientMsgID = req.ClientMsgID + m.IsReact = resp.IsReact + m.IsExternalExtensions = req.IsExternalExtensions + m.MsgFirstModifyTime = resp.MsgFirstModifyTime + messageReactionSender(operationID, sendID, sourceID, sessionType, constant.ReactionMessageModifier, utils.StructToJsonString(m), isHistory, isReactionFromCache) +} +func ExtendMessageDeleteNotification(operationID, sendID string, sourceID string, sessionType int32, + req *msg.DeleteMessageListReactionExtensionsReq, resp *msg.DeleteMessageListReactionExtensionsResp, isHistory bool, isReactionFromCache bool) { + var m base_info.ReactionMessageDeleteNotification + m.SourceID = req.SourceID + m.OpUserID = req.OpUserID + m.SessionType = req.SessionType + keyMap := make(map[string]*open_im_sdk.KeyValue) + for _, valueResp := range resp.Result { + if valueResp.ErrCode == 0 { + keyMap[valueResp.KeyValue.TypeKey] = valueResp.KeyValue + } + } + if len(keyMap) == 0 { + log.NewWarn(operationID, "all key set failed can not send notification", *req) + return + } + m.SuccessReactionExtensionList = keyMap + m.ClientMsgID = req.ClientMsgID + m.MsgFirstModifyTime = req.MsgFirstModifyTime + + messageReactionSender(operationID, sendID, sourceID, sessionType, constant.ReactionMessageDeleter, utils.StructToJsonString(m), isHistory, isReactionFromCache) +} +func messageReactionSender(operationID, sendID string, sourceID string, sessionType, contentType int32, content string, isHistory bool, isReactionFromCache bool) { + options := make(map[string]bool, 5) + utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false) + utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false) + utils.SetSwitchFromOptions(options, constant.IsSenderConversationUpdate, false) + utils.SetSwitchFromOptions(options, constant.IsUnreadCount, false) + utils.SetSwitchFromOptions(options, constant.IsReactionFromCache, isReactionFromCache) + if !isHistory { + utils.SetSwitchFromOptions(options, constant.IsHistory, false) + utils.SetSwitchFromOptions(options, constant.IsPersistent, false) + } + pbData := msg.SendMsgReq{ + OperationID: operationID, + MsgData: &open_im_sdk.MsgData{ + SendID: sendID, + ClientMsgID: utils.GetMsgID(sendID), + SessionType: sessionType, + MsgFrom: constant.SysMsgType, + ContentType: contentType, + Content: []byte(content), + // ForceList: params.ForceList, + CreateTime: utils.GetCurrentTimestampByMill(), + Options: options, + }, + } + switch sessionType { + case constant.SingleChatType, constant.NotificationChatType: + pbData.MsgData.RecvID = sourceID + case constant.GroupChatType, constant.SuperGroupChatType: + pbData.MsgData.GroupID = sourceID + } + etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, operationID) + if etcdConn == nil { + errMsg := operationID + "getcdv3.GetDefaultConn == nil" + log.NewError(operationID, errMsg) + return + } + client := msg.NewMsgClient(etcdConn) + reply, err := client.SendMsg(context.Background(), &pbData) + if err != nil { + log.NewError(operationID, "SendMsg rpc failed, ", pbData.String(), err.Error()) + } else if reply.ErrCode != 0 { + log.NewError(operationID, "SendMsg rpc failed, ", pbData.String(), reply.ErrCode, reply.ErrMsg) + } + +} diff --git a/internal/rpc/msg/extend_msg_callback.go b/internal/rpc/msg/extend_msg_callback.go new file mode 100644 index 000000000..65ae8d7b3 --- /dev/null +++ b/internal/rpc/msg/extend_msg_callback.go @@ -0,0 +1,60 @@ +package msg + +import ( + cbApi "Open_IM/pkg/call_back_struct" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/http" + "Open_IM/pkg/common/log" + "Open_IM/pkg/proto/msg" + "Open_IM/pkg/utils" + http2 "net/http" +) + +func callbackSetMessageReactionExtensions(setReq *msg.SetMessageReactionExtensionsReq) *cbApi.CallbackBeforeSetMessageReactionExtResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: setReq.OperationID} + log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), setReq.String()) + req := cbApi.CallbackBeforeSetMessageReactionExtReq{ + OperationID: setReq.OperationID, + CallbackCommand: constant.CallbackBeforeSetMessageReactionExtensionCommand, + SourceID: setReq.SourceID, + OpUserID: setReq.OpUserID, + SessionType: setReq.SessionType, + ReactionExtensionList: setReq.ReactionExtensionList, + ClientMsgID: setReq.ClientMsgID, + IsReact: setReq.IsReact, + IsExternalExtensions: setReq.IsExternalExtensions, + MsgFirstModifyTime: setReq.MsgFirstModifyTime, + } + resp := &cbApi.CallbackBeforeSetMessageReactionExtResp{CommonCallbackResp: &callbackResp} + defer log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), req, *resp) + if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSetMessageReactionExtensionCommand, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + } + return resp + +} + +func callbackDeleteMessageReactionExtensions(setReq *msg.DeleteMessageListReactionExtensionsReq) *cbApi.CallbackDeleteMessageReactionExtResp { + callbackResp := cbApi.CommonCallbackResp{OperationID: setReq.OperationID} + log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), setReq.String()) + req := cbApi.CallbackDeleteMessageReactionExtReq{ + OperationID: setReq.OperationID, + CallbackCommand: constant.CallbackBeforeDeleteMessageReactionExtensionsCommand, + SourceID: setReq.SourceID, + OpUserID: setReq.OpUserID, + SessionType: setReq.SessionType, + ReactionExtensionList: setReq.ReactionExtensionList, + ClientMsgID: setReq.ClientMsgID, + IsExternalExtensions: setReq.IsExternalExtensions, + MsgFirstModifyTime: setReq.MsgFirstModifyTime, + } + resp := &cbApi.CallbackDeleteMessageReactionExtResp{CommonCallbackResp: &callbackResp} + defer log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), req, *resp) + if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeDeleteMessageReactionExtensionsCommand, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut); err != nil { + callbackResp.ErrCode = http2.StatusInternalServerError + callbackResp.ErrMsg = err.Error() + } + return resp +} diff --git a/internal/rpc/msg/lock.go b/internal/rpc/msg/lock.go new file mode 100644 index 000000000..cef59cb1a --- /dev/null +++ b/internal/rpc/msg/lock.go @@ -0,0 +1,52 @@ +package msg + +import ( + "Open_IM/pkg/common/db" + "time" +) + +const GlOBLLOCK = "GLOBAL_LOCK" + +type MessageLocker interface { + LockMessageTypeKey(clientMsgID, typeKey string) (err error) + UnLockMessageTypeKey(clientMsgID string, typeKey string) error + LockGlobalMessage(clientMsgID string) (err error) + UnLockGlobalMessage(clientMsgID string) (err error) +} +type LockerMessage struct{} + +func NewLockerMessage() *LockerMessage { + return &LockerMessage{} +} +func (l *LockerMessage) LockMessageTypeKey(clientMsgID, typeKey string) (err error) { + for i := 0; i < 3; i++ { + err = db.DB.LockMessageTypeKey(clientMsgID, typeKey) + if err != nil { + time.Sleep(time.Millisecond * 100) + continue + } else { + break + } + } + return err + +} +func (l *LockerMessage) LockGlobalMessage(clientMsgID string) (err error) { + for i := 0; i < 3; i++ { + err = db.DB.LockMessageTypeKey(clientMsgID, GlOBLLOCK) + if err != nil { + time.Sleep(time.Millisecond * 100) + continue + } else { + break + } + } + return err + +} +func (l *LockerMessage) UnLockMessageTypeKey(clientMsgID string, typeKey string) error { + return db.DB.UnLockMessageTypeKey(clientMsgID, typeKey) +} +func (l *LockerMessage) UnLockGlobalMessage(clientMsgID string) error { + return db.DB.UnLockMessageTypeKey(clientMsgID, GlOBLLOCK) +} diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index f1329d47a..470325deb 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -31,7 +31,8 @@ type rpcChat struct { etcdAddr []string messageWriter MessageWriter //offlineProducer *kafka.Producer - delMsgCh chan deleteMsg + delMsgCh chan deleteMsg + dMessageLocker MessageLocker } type deleteMsg struct { @@ -48,6 +49,7 @@ func NewRpcChatServer(port int) *rpcChat { rpcRegisterName: config.Config.RpcRegisterName.OpenImMsgName, etcdSchema: config.Config.Etcd.EtcdSchema, etcdAddr: config.Config.Etcd.EtcdAddr, + dMessageLocker: NewLockerMessage(), } rc.messageWriter = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic) //rc.offlineProducer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.Ws2mschatOffline.Topic) diff --git a/pkg/base_info/msg.go b/pkg/base_info/msg.go index 2b12a2b2e..5a7c7f538 100644 --- a/pkg/base_info/msg.go +++ b/pkg/base_info/msg.go @@ -1,5 +1,10 @@ package base_info +import ( + "Open_IM/pkg/proto/msg" + sdk_ws "Open_IM/pkg/proto/sdk_ws" +) + type DelMsgReq struct { UserID string `json:"userID,omitempty" binding:"required"` SeqList []uint32 `json:"seqList,omitempty" binding:"required"` @@ -18,6 +23,7 @@ type CleanUpMsgReq struct { type CleanUpMsgResp struct { CommResp } + type DelSuperGroupMsgReq struct { UserID string `json:"userID" binding:"required"` GroupID string `json:"groupID" binding:"required"` @@ -29,23 +35,107 @@ type DelSuperGroupMsgReq struct { type DelSuperGroupMsgResp struct { CommResp } + type MsgDeleteNotificationElem struct { GroupID string `json:"groupID"` IsAllDelete bool `json:"isAllDelete"` SeqList []uint32 `json:"seqList"` } -//UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` -// GroupID string `protobuf:"bytes,2,opt,name=groupID" json:"groupID,omitempty"` -// MinSeq uint32 `protobuf:"varint,3,opt,name=minSeq" json:"minSeq,omitempty"` -// OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"` -// OpUserID string `protobuf:"bytes,5,opt,name=opUserID" json:"opUserID,omitempty"` type SetMsgMinSeqReq struct { UserID string `json:"userID" binding:"required"` GroupID string `json:"groupID"` MinSeq uint32 `json:"minSeq" binding:"required"` OperationID string `json:"operationID" binding:"required"` } + type SetMsgMinSeqResp struct { CommResp } + +type ModifyMessageReactionExtensionsReq struct { + OperationID string `json:"operationID" binding:"required"` + SourceID string `json:"sourceID" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + ReactionExtensionList map[string]*sdk_ws.KeyValue `json:"reactionExtensionList,omitempty" binding:"required"` + ClientMsgID string `json:"clientMsgID" binding:"required"` + Ex *string `json:"ex"` + AttachedInfo *string `json:"attachedInfo"` + IsReact bool `json:"isReact"` + IsExternalExtensions bool `json:"isExternalExtensions"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} + +type ModifyMessageReactionExtensionsResp struct { + CommResp + Data struct { + ResultKeyValue []*msg.KeyValueResp `json:"result"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` + IsReact bool `json:"isReact"` + } `json:"data"` +} + +type OperateMessageListReactionExtensionsReq struct { + OperationID string `json:"operationID" binding:"required"` + SourceID string `json:"sourceID" binding:"required"` + SessionType string `json:"sessionType" binding:"required"` + MessageReactionKeyList []*msg.GetMessageListReactionExtensionsReq_MessageReactionKey `json:"messageReactionKeyList" binding:"required"` +} + +type OperateMessageListReactionExtensionsResp struct { + CommResp + Data struct { + SuccessList []*msg.ExtendMsgResp `json:"successList"` + FailedList []*msg.ExtendMsgResp `json:"failedList"` + } `json:"data"` +} + +type SetMessageReactionExtensionsCallbackReq ModifyMessageReactionExtensionsReq + +type SetMessageReactionExtensionsCallbackResp ModifyMessageReactionExtensionsResp + +type GetMessageListReactionExtensionsReq OperateMessageListReactionExtensionsReq + +type GetMessageListReactionExtensionsResp struct { + CommResp + Data []*msg.SingleMessageExtensionResult `json:"data"` +} + +type AddMessageReactionExtensionsReq ModifyMessageReactionExtensionsReq + +type AddMessageReactionExtensionsResp ModifyMessageReactionExtensionsResp + +type DeleteMessageReactionExtensionsReq struct { + OperationID string `json:"operationID" binding:"required"` + SourceID string `json:"sourceID" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + ClientMsgID string `json:"clientMsgID" binding:"required"` + IsExternalExtensions bool `json:"isExternalExtensions"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime" binding:"required"` + ReactionExtensionList []*sdk_ws.KeyValue `json:"reactionExtensionList" binding:"required"` +} + +type DeleteMessageReactionExtensionsResp struct { + CommResp + Data []*msg.KeyValueResp +} + +type ReactionMessageModifierNotification struct { + SourceID string `json:"sourceID" binding:"required"` + OpUserID string `json:"opUserID" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + SuccessReactionExtensionList map[string]*sdk_ws.KeyValue `json:"reactionExtensionList,omitempty" binding:"required"` + ClientMsgID string `json:"clientMsgID" binding:"required"` + IsReact bool `json:"isReact"` + IsExternalExtensions bool `json:"isExternalExtensions"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} + +type ReactionMessageDeleteNotification struct { + SourceID string `json:"sourceID" binding:"required"` + OpUserID string `json:"opUserID" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + SuccessReactionExtensionList map[string]*sdk_ws.KeyValue `json:"reactionExtensionList,omitempty" binding:"required"` + ClientMsgID string `json:"clientMsgID" binding:"required"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} diff --git a/pkg/call_back_struct/message.go b/pkg/call_back_struct/message.go index b28615030..00e142878 100644 --- a/pkg/call_back_struct/message.go +++ b/pkg/call_back_struct/message.go @@ -1,6 +1,9 @@ package call_back_struct -import sdk_ws "Open_IM/pkg/proto/sdk_ws" +import ( + "Open_IM/pkg/proto/msg" + sdk_ws "Open_IM/pkg/proto/sdk_ws" +) type CallbackBeforeSendSingleMsgReq struct { CommonCallbackReq @@ -63,3 +66,36 @@ type CallbackMsgModifyCommandResp struct { AttachedInfo *string `json:"attachedInfo"` Ex *string `json:"ex"` } +type CallbackBeforeSetMessageReactionExtReq struct { + OperationID string `json:"operationID"` + CallbackCommand string `json:"callbackCommand"` + SourceID string `json:"sourceID"` + OpUserID string `json:"opUserID"` + SessionType int32 `json:"sessionType"` + ReactionExtensionList map[string]*sdk_ws.KeyValue `json:"reactionExtensionList"` + ClientMsgID string `json:"clientMsgID"` + IsReact bool `json:"isReact"` + IsExternalExtensions bool `json:"isExternalExtensions"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} +type CallbackBeforeSetMessageReactionExtResp struct { + *CommonCallbackResp + ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} +type CallbackDeleteMessageReactionExtReq struct { + OperationID string `json:"operationID"` + CallbackCommand string `json:"callbackCommand"` + SourceID string `json:"sourceID"` + OpUserID string `json:"opUserID"` + SessionType int32 `json:"sessionType"` + ReactionExtensionList []*sdk_ws.KeyValue `json:"reactionExtensionList"` + ClientMsgID string `json:"clientMsgID"` + IsExternalExtensions bool `json:"isExternalExtensions"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} +type CallbackDeleteMessageReactionExtResp struct { + *CommonCallbackResp + ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"` + MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 32ad9391b..1913bac79 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -248,11 +248,16 @@ type config struct { Addr []string `yaml:"addr"` Topic string `yaml:"topic"` } + MsgToModify struct { + Addr []string `yaml:"addr"` + Topic string `yaml:"topic"` + } ConsumerGroupID struct { - MsgToRedis string `yaml:"msgToTransfer"` - MsgToMongo string `yaml:"msgToMongo"` - MsgToMySql string `yaml:"msgToMySql"` - MsgToPush string `yaml:"msgToPush"` + MsgToRedis string `yaml:"msgToTransfer"` + MsgToMongo string `yaml:"msgToMongo"` + MsgToMySql string `yaml:"msgToMySql"` + MsgToPush string `yaml:"msgToPush"` + MsgToModify string `yaml:"msgToModify"` } } Secret string `yaml:"secret"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 250bf5856..12541e639 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -48,6 +48,8 @@ const ( AdvancedRevoke = 118 //影响前者消息 CustomNotTriggerConversation = 119 CustomOnlineOnly = 120 + ReactionMessageModifier = 121 + ReactionMessageDeleter = 122 Common = 200 GroupMsg = 201 @@ -169,6 +171,7 @@ const ( IsNotPrivate = "notPrivate" IsSenderConversationUpdate = "senderConversationUpdate" IsSenderNotificationPush = "senderNotificationPush" + IsReactionFromCache = "reactionFromCache" //GroupStatus GroupOk = 0 @@ -217,6 +220,8 @@ const ( CallbackBeforeCreateGroupCommand = "callbackBeforeCreateGroupCommand" CallbackBeforeMemberJoinGroupCommand = "callbackBeforeMemberJoinGroupCommand" CallbackBeforeSetGroupMemberInfoCommand = "CallbackBeforeSetGroupMemberInfoCommand" + CallbackBeforeSetMessageReactionExtensionCommand = "callbackBeforeSetMessageReactionExtensionCommand" + CallbackBeforeDeleteMessageReactionExtensionsCommand = "callbackBeforeDeleteMessageReactionExtensionsCommand" //callback actionCode ActionAllow = 0 diff --git a/pkg/common/db/RedisModel.go b/pkg/common/db/RedisModel.go index 9e1a5096c..29e2772a0 100644 --- a/pkg/common/db/RedisModel.go +++ b/pkg/common/db/RedisModel.go @@ -39,6 +39,7 @@ const ( groupMinSeq = "GROUP_MIN_SEQ:" sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:" userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:" + exTypeKeyLocker = "EX_LOCK:" ) func (d *DataBases) JudgeAccountEXISTS(account string) (bool, error) { @@ -447,3 +448,61 @@ func (d *DataBases) GetUserBadgeUnreadCountSum(uid string) (int, error) { seq, err := d.RDB.Get(context.Background(), key).Result() return utils.StringToInt(seq), err } +func (d *DataBases) JudgeMessageReactionEXISTS(clientMsgID string, sessionType int32) (bool, error) { + key := getMessageReactionExPrefix(clientMsgID, sessionType) + n, err := d.RDB.Exists(context.Background(), key).Result() + if n > 0 { + return true, err + } else { + return false, err + } +} + +func (d *DataBases) GetOneMessageAllReactionList(clientMsgID string, sessionType int32) (map[string]string, error) { + key := getMessageReactionExPrefix(clientMsgID, sessionType) + return d.RDB.HGetAll(context.Background(), key).Result() + +} +func (d *DataBases) DeleteOneMessageKey(clientMsgID string, sessionType int32, subKey string) error { + key := getMessageReactionExPrefix(clientMsgID, sessionType) + return d.RDB.HDel(context.Background(), key, subKey).Err() + +} +func (d *DataBases) SetMessageReactionExpire(clientMsgID string, sessionType int32, expiration time.Duration) (bool, error) { + key := getMessageReactionExPrefix(clientMsgID, sessionType) + return d.RDB.Expire(context.Background(), key, expiration).Result() +} +func (d *DataBases) GetMessageTypeKeyValue(clientMsgID string, sessionType int32, typeKey string) (string, error) { + key := getMessageReactionExPrefix(clientMsgID, sessionType) + result, err := d.RDB.HGet(context.Background(), key, typeKey).Result() + return result, err + +} +func (d *DataBases) SetMessageTypeKeyValue(clientMsgID string, sessionType int32, typeKey, value string) error { + key := getMessageReactionExPrefix(clientMsgID, sessionType) + return d.RDB.HSet(context.Background(), key, typeKey, value).Err() + +} +func (d *DataBases) LockMessageTypeKey(clientMsgID string, TypeKey string) error { + key := exTypeKeyLocker + clientMsgID + "_" + TypeKey + return d.RDB.SetNX(context.Background(), key, 1, time.Minute).Err() +} +func (d *DataBases) UnLockMessageTypeKey(clientMsgID string, TypeKey string) error { + key := exTypeKeyLocker + clientMsgID + "_" + TypeKey + return d.RDB.Del(context.Background(), key).Err() + +} + +func getMessageReactionExPrefix(clientMsgID string, sessionType int32) string { + switch sessionType { + case constant.SingleChatType: + return "EX_SINGLE_" + clientMsgID + case constant.GroupChatType: + return "EX_GROUP_" + clientMsgID + case constant.SuperGroupChatType: + return "EX_SUPER_GROUP_" + clientMsgID + case constant.NotificationChatType: + return "EX_NOTIFICATION" + clientMsgID + } + return "" +} diff --git a/pkg/common/db/extend_msg_mongo_model.go b/pkg/common/db/extend_msg_mongo_model.go index 45e97ee25..07d853418 100644 --- a/pkg/common/db/extend_msg_mongo_model.go +++ b/pkg/common/db/extend_msg_mongo_model.go @@ -2,46 +2,61 @@ package db import ( "Open_IM/pkg/common/config" + server_api_params "Open_IM/pkg/proto/sdk_ws" "Open_IM/pkg/utils" "context" + "errors" "fmt" "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "strconv" + "strings" "time" "go.mongodb.org/mongo-driver/bson" ) const cExtendMsgSet = "extend_msgs" +const MaxNum = 100 type ExtendMsgSet struct { - ID string `bson:"id" json:"ID"` + SourceID string `bson:"source_id" json:"sourceID"` + SessionType int32 `bson:"session_type" json:"sessionType"` ExtendMsgs map[string]ExtendMsg `bson:"extend_msgs" json:"extendMsgs"` - LatestUpdateTime int32 `bson:"latest_update_time" json:"latestUpdateTime"` - AttachedInfo *string `bson:"attached_info" json:"attachedInfo"` - Ex *string `bson:"ex" json:"ex"` ExtendMsgNum int32 `bson:"extend_msg_num" json:"extendMsgNum"` - CreateTime int32 `bson:"create_time" json:"createTime"` + CreateTime int64 `bson:"create_time" json:"createTime"` // this block's create time + MaxMsgUpdateTime int64 `bson:"max_msg_update_time" json:"maxMsgUpdateTime"` // index find msg } -type ReactionExtendMsgSet struct { - UserKey string `bson:"user_key" json:"userKey"` +type KeyValue struct { + TypeKey string `bson:"type_key" json:"typeKey"` Value string `bson:"value" json:"value"` - LatestUpdateTime int32 `bson:"latest_update_time" json:"latestUpdateTime"` + LatestUpdateTime int64 `bson:"latest_update_time" json:"latestUpdateTime"` } type ExtendMsg struct { - Content map[string]ReactionExtendMsgSet `bson:"content" json:"content"` - ClientMsgID string `bson:"client_msg_id" json:"clientMsgID"` - CreateTime int32 `bson:"create_time" json:"createTime"` - LatestUpdateTime int32 `bson:"latest_update_time" json:"latestUpdateTime"` + ReactionExtensionList map[string]KeyValue `bson:"reaction_extension_list" json:"reactionExtensionList"` + ClientMsgID string `bson:"client_msg_id" json:"clientMsgID"` + MsgFirstModifyTime int64 `bson:"msg_first_modify_time" json:"msgFirstModifyTime"` // this extendMsg create time + AttachedInfo string `bson:"attached_info" json:"attachedInfo"` + Ex string `bson:"ex" json:"ex"` } -func GetExtendMsgSetID(ID string, index int32) string { +func GetExtendMsgMaxNum() int32 { + return MaxNum +} + +func GetExtendMsgSourceID(ID string, index int32) string { return ID + ":" + strconv.Itoa(int(index)) } +func SplitSourceIDAndGetIndex(sourceID string) int32 { + l := strings.Split(sourceID, ":") + index, _ := strconv.Atoi(l[len(l)-1]) + return int32(index) +} + func (d *DataBases) CreateExtendMsgSet(set *ExtendMsgSet) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) @@ -75,61 +90,116 @@ func (d *DataBases) GetAllExtendMsgSet(ID string, opts *GetAllExtendMsgSetOpts) return sets, nil } -type GetExtendMsgSetOpts struct { - ExcludeExtendMsgs bool -} - -func (d *DataBases) GetExtendMsgSet(ID string, index int32, opts *GetExtendMsgSetOpts) (*ExtendMsgSet, error) { - ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) - c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) - var set ExtendMsgSet - var findOneOpt *options.FindOneOptions - if opts != nil { - if opts.ExcludeExtendMsgs { - findOneOpt = &options.FindOneOptions{} - findOneOpt.SetProjection(bson.M{"extend_msgs": 0}) - } +func (d *DataBases) GetExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, maxMsgUpdateTime int64, c *mongo.Collection) (*ExtendMsgSet, error) { + regex := fmt.Sprintf("^%s", sourceID) + var err error + findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{"extend_msgs": 0}) + // update newest + find := bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType} + if maxMsgUpdateTime > 0 { + find["max_msg_update_time"] = maxMsgUpdateTime } - err := c.FindOne(ctx, bson.M{"uid": GetExtendMsgSetID(ID, index)}, findOneOpt).Decode(&set) - return &set, err + result, err := c.Find(ctx, find, findOpts) + if err != nil { + return nil, utils.Wrap(err, "") + } + var setList []ExtendMsgSet + if err := result.All(ctx, &setList); err != nil { + return nil, utils.Wrap(err, "") + } + if len(setList) == 0 { + return nil, nil + } + return &setList[0], nil } // first modify msg -func (d *DataBases) InsertExtendMsgAndGetIndex(ID string, index int32, msg *ExtendMsg) error { +func (d *DataBases) InsertExtendMsg(sourceID string, sessionType int32, msg *ExtendMsg) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) - _, err := c.UpdateOne(ctx, bson.M{"uid": GetExtendMsgSetID(ID, index)}, bson.M{"$set": bson.M{"latest_update_time": utils.GetCurrentTimestampBySecond(), "$inc": bson.M{"extend_msg_num": 1}, fmt.Sprintf("extend_msgs.%s", msg.ClientMsgID): msg}}) - return err + set, err := d.GetExtendMsgSet(ctx, sourceID, sessionType, 0, c) + if err != nil { + return utils.Wrap(err, "") + } + if set == nil || set.ExtendMsgNum >= GetExtendMsgMaxNum() { + var index int32 + if set != nil { + index = SplitSourceIDAndGetIndex(set.SourceID) + } + err = d.CreateExtendMsgSet(&ExtendMsgSet{ + SourceID: GetExtendMsgSourceID(sourceID, index), + SessionType: sessionType, + ExtendMsgs: map[string]ExtendMsg{msg.ClientMsgID: *msg}, + ExtendMsgNum: 1, + CreateTime: msg.MsgFirstModifyTime, + MaxMsgUpdateTime: msg.MsgFirstModifyTime, + }) + } else { + _, err = c.UpdateOne(ctx, bson.M{"source_id": set.SourceID, "session_type": sessionType}, bson.M{"$set": bson.M{"max_msg_update_time": msg.MsgFirstModifyTime, "$inc": bson.M{"extend_msg_num": 1}, fmt.Sprintf("extend_msgs.%s", msg.ClientMsgID): msg}}) + } + return utils.Wrap(err, "") } // insert or update -func (d *DataBases) InsertOrUpdateReactionExtendMsgSet(ID string, index int32, clientMsgID, userID, value string) error { +func (d *DataBases) InsertOrUpdateReactionExtendMsgSet(sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*server_api_params.KeyValue) error { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) - reactionExtendMsgSet := ReactionExtendMsgSet{ - UserKey: userID, - Value: value, - LatestUpdateTime: int32(utils.GetCurrentTimestampBySecond()), + var updateBson = bson.M{} + for _, v := range reactionExtensionList { + updateBson[fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, v.TypeKey)] = v } upsert := true opt := &options.UpdateOptions{ Upsert: &upsert, } - _, err := c.UpdateOne(ctx, bson.M{"uid": GetExtendMsgSetID(ID, index)}, bson.M{"$set": bson.M{"latest_update_time": utils.GetCurrentTimestampBySecond()}, fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, userID): reactionExtendMsgSet}, opt) + set, err := d.GetExtendMsgSet(ctx, sourceID, sessionType, msgFirstModifyTime, c) + if err != nil { + return utils.Wrap(err, "") + } + if set == nil { + return errors.New(fmt.Sprintf("sourceID %s has no set", sourceID)) + } + _, err = c.UpdateOne(ctx, bson.M{"source_id": set.SourceID, "session_type": sessionType}, bson.M{"$set": updateBson}, opt) + return utils.Wrap(err, "") +} + +// delete TypeKey +func (d *DataBases) DeleteReactionExtendMsgSet(sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*server_api_params.KeyValue) error { + ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) + c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) + var updateBson = bson.M{} + for _, v := range reactionExtensionList { + updateBson[fmt.Sprintf("extend_msgs.%s.%s", clientMsgID, v.TypeKey)] = "" + } + set, err := d.GetExtendMsgSet(ctx, sourceID, sessionType, msgFirstModifyTime, c) + if err != nil { + return utils.Wrap(err, "") + } + if set == nil { + return errors.New(fmt.Sprintf("sourceID %s has no set", sourceID)) + } + _, err = c.UpdateOne(ctx, bson.M{"source_id": set.SourceID, "session_type": sessionType}, bson.M{"$unset": updateBson}) return err } -func (d *DataBases) DeleteReactionExtendMsgSet(ID string, index int32, clientMsgID, userID string) error { +func (d *DataBases) GetExtendMsg(sourceID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (extendMsg *ExtendMsg, err error) { ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) - _, err := c.UpdateOne(ctx, bson.M{"uid": GetExtendMsgSetID(ID, index)}, bson.M{"$unset": bson.M{}}) - return err -} - -// by index start end -func (d *DataBases) GetExtendMsgList(ID string, index int32, clientMsgID string) (extendMsg *ExtendMsg, err error) { - ctx, _ := context.WithTimeout(context.Background(), time.Duration(config.Config.Mongo.DBTimeout)*time.Second) - c := d.mongoClient.Database(config.Config.Mongo.DBDatabase).Collection(cExtendMsgSet) - err = c.FindOne(ctx, bson.M{"uid": GetExtendMsgSetID(ID, index), "extend_msgs": bson.M{}}).Decode(&extendMsg) - return extendMsg, err + findOpts := options.Find().SetLimit(1).SetSkip(0).SetSort(bson.M{"source_id": -1}).SetProjection(bson.M{fmt.Sprintf("extend_msgs.%s", clientMsgID): 1}) + regex := fmt.Sprintf("^%s", sourceID) + result, err := c.Find(ctx, bson.M{"source_id": primitive.Regex{Pattern: regex}, "session_type": sessionType, "max_msg_update_time": bson.M{"$lte": maxMsgUpdateTime}}, findOpts) + if err != nil { + return nil, utils.Wrap(err, "") + } + var setList []ExtendMsgSet + if err := result.All(ctx, &setList); err != nil { + return nil, utils.Wrap(err, "") + } + if len(setList) == 0 { + return nil, utils.Wrap(errors.New("GetExtendMsg failed, len(setList) == 0"), "") + } + if v, ok := setList[0].ExtendMsgs[clientMsgID]; ok { + return &v, nil + } + return nil, errors.New(fmt.Sprintf("cant find client msg id: %s", clientMsgID)) } diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 3edb9f238..3b054d37f 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -567,37 +567,9 @@ func DelConversationFromCache(ownerUserID, conversationID string) error { return utils.Wrap(db.DB.Rc.TagAsDeleted(conversationCache+ownerUserID+":"+conversationID), "DelConversationFromCache err") } -func GetExtendMsgSetFromCache(ID string, index int32) (*db.ExtendMsgSet, error) { - getExtendMsgSet := func() (string, error) { - extendMsgSet, err := db.DB.GetExtendMsgSet(ID, index, &db.GetExtendMsgSetOpts{ExcludeExtendMsgs: false}) - if err != nil { - return "", utils.Wrap(err, "GetExtendMsgSet failed") - } - bytes, err := json.Marshal(extendMsgSet) - if err != nil { - return "", utils.Wrap(err, "Marshal failed") - } - return string(bytes), nil - } - extendMsgSetStr, err := db.DB.Rc.Fetch(extendMsgSetCache+db.GetExtendMsgSetID(ID, index), time.Second*30*60, getExtendMsgSet) - if err != nil { - return nil, utils.Wrap(err, "Fetch failed") - } - extendMsgSet := &db.ExtendMsgSet{} - err = json.Unmarshal([]byte(extendMsgSetStr), extendMsgSet) - if err != nil { - return nil, utils.Wrap(err, "Unmarshal failed") - } - return extendMsgSet, nil -} - -func DelExtendMsgSetFromCache(ID string, index int32) error { - return utils.Wrap(db.DB.Rc.TagAsDeleted(extendMsgSetCache+db.GetExtendMsgSetID(ID, index)), "DelExtendMsgSetFromCache err") -} - -func GetExtendMsg(ID string, index int32, clientMsgID string) (*db.ExtendMsg, error) { +func GetExtendMsg(sourceID string, sessionType int32, clientMsgID string, firstModifyTime int64) (*db.ExtendMsg, error) { getExtendMsg := func() (string, error) { - extendMsg, err := db.DB.GetExtendMsgList(ID, index, clientMsgID) + extendMsg, err := db.DB.GetExtendMsg(sourceID, sessionType, clientMsgID, firstModifyTime) if err != nil { return "", utils.Wrap(err, "GetExtendMsgList failed") } @@ -608,7 +580,7 @@ func GetExtendMsg(ID string, index int32, clientMsgID string) (*db.ExtendMsg, er return string(bytes), nil } - extendMsgStr, err := db.DB.Rc.Fetch(extendMsgCache+db.GetExtendMsgSetID(ID, index)+":"+clientMsgID, time.Second*30*60, getExtendMsg) + extendMsgStr, err := db.DB.Rc.Fetch(extendMsgCache+clientMsgID, time.Second*30*60, getExtendMsg) if err != nil { return nil, utils.Wrap(err, "Fetch failed") } @@ -621,5 +593,5 @@ func GetExtendMsg(ID string, index int32, clientMsgID string) (*db.ExtendMsg, er } func DelExtendMsg(ID string, index int32, clientMsgID string) error { - return utils.Wrap(db.DB.Rc.TagAsDeleted(extendMsgCache+db.GetExtendMsgSetID(ID, index)+":"+clientMsgID), "DelExtendMsg err") + return utils.Wrap(db.DB.Rc.TagAsDeleted(extendMsgCache+clientMsgID), "DelExtendMsg err") } diff --git a/pkg/proto/msg/msg.pb.go b/pkg/proto/msg/msg.pb.go index 532c73b84..bdb1e3464 100644 --- a/pkg/proto/msg/msg.pb.go +++ b/pkg/proto/msg/msg.pb.go @@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import sdk_ws "Open_IM/pkg/proto/sdk_ws" +import wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" import ( context "golang.org/x/net/context" @@ -37,7 +38,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} } func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMQ) ProtoMessage() {} func (*MsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{0} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{0} } func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b) @@ -90,7 +91,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} } func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) } func (*MsgDataToDB) ProtoMessage() {} func (*MsgDataToDB) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{1} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{1} } func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b) @@ -137,7 +138,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} } func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) } func (*PushMsgDataToMQ) ProtoMessage() {} func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{2} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{2} } func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b) @@ -192,7 +193,7 @@ func (m *MsgDataToMongoByMQ) Reset() { *m = MsgDataToMongoByMQ{} } func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) } func (*MsgDataToMongoByMQ) ProtoMessage() {} func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{3} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{3} } func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b) @@ -272,7 +273,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{4} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{4} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -320,7 +321,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{5} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{5} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -381,7 +382,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} } func (m *SendMsgReq) String() string { return proto.CompactTextString(m) } func (*SendMsgReq) ProtoMessage() {} func (*SendMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{6} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{6} } func (m *SendMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgReq.Unmarshal(m, b) @@ -437,7 +438,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} } func (m *SendMsgResp) String() string { return proto.CompactTextString(m) } func (*SendMsgResp) ProtoMessage() {} func (*SendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{7} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{7} } func (m *SendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SendMsgResp.Unmarshal(m, b) @@ -505,7 +506,7 @@ func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} } func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) } func (*ClearMsgReq) ProtoMessage() {} func (*ClearMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{8} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{8} } func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b) @@ -558,7 +559,7 @@ func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} } func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) } func (*ClearMsgResp) ProtoMessage() {} func (*ClearMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{9} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{9} } func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b) @@ -607,7 +608,7 @@ func (m *SetMsgMinSeqReq) Reset() { *m = SetMsgMinSeqReq{} } func (m *SetMsgMinSeqReq) String() string { return proto.CompactTextString(m) } func (*SetMsgMinSeqReq) ProtoMessage() {} func (*SetMsgMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{10} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{10} } func (m *SetMsgMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetMsgMinSeqReq.Unmarshal(m, b) @@ -674,7 +675,7 @@ func (m *SetMsgMinSeqResp) Reset() { *m = SetMsgMinSeqResp{} } func (m *SetMsgMinSeqResp) String() string { return proto.CompactTextString(m) } func (*SetMsgMinSeqResp) ProtoMessage() {} func (*SetMsgMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{11} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{11} } func (m *SetMsgMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetMsgMinSeqResp.Unmarshal(m, b) @@ -720,7 +721,7 @@ func (m *SetSendMsgStatusReq) Reset() { *m = SetSendMsgStatusReq{} } func (m *SetSendMsgStatusReq) String() string { return proto.CompactTextString(m) } func (*SetSendMsgStatusReq) ProtoMessage() {} func (*SetSendMsgStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{12} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{12} } func (m *SetSendMsgStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetSendMsgStatusReq.Unmarshal(m, b) @@ -766,7 +767,7 @@ func (m *SetSendMsgStatusResp) Reset() { *m = SetSendMsgStatusResp{} } func (m *SetSendMsgStatusResp) String() string { return proto.CompactTextString(m) } func (*SetSendMsgStatusResp) ProtoMessage() {} func (*SetSendMsgStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{13} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{13} } func (m *SetSendMsgStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetSendMsgStatusResp.Unmarshal(m, b) @@ -811,7 +812,7 @@ func (m *GetSendMsgStatusReq) Reset() { *m = GetSendMsgStatusReq{} } func (m *GetSendMsgStatusReq) String() string { return proto.CompactTextString(m) } func (*GetSendMsgStatusReq) ProtoMessage() {} func (*GetSendMsgStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{14} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{14} } func (m *GetSendMsgStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSendMsgStatusReq.Unmarshal(m, b) @@ -851,7 +852,7 @@ func (m *GetSendMsgStatusResp) Reset() { *m = GetSendMsgStatusResp{} } func (m *GetSendMsgStatusResp) String() string { return proto.CompactTextString(m) } func (*GetSendMsgStatusResp) ProtoMessage() {} func (*GetSendMsgStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{15} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{15} } func (m *GetSendMsgStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSendMsgStatusResp.Unmarshal(m, b) @@ -906,7 +907,7 @@ func (m *DelSuperGroupMsgReq) Reset() { *m = DelSuperGroupMsgReq{} } func (m *DelSuperGroupMsgReq) String() string { return proto.CompactTextString(m) } func (*DelSuperGroupMsgReq) ProtoMessage() {} func (*DelSuperGroupMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{16} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{16} } func (m *DelSuperGroupMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelSuperGroupMsgReq.Unmarshal(m, b) @@ -966,7 +967,7 @@ func (m *DelSuperGroupMsgResp) Reset() { *m = DelSuperGroupMsgResp{} } func (m *DelSuperGroupMsgResp) String() string { return proto.CompactTextString(m) } func (*DelSuperGroupMsgResp) ProtoMessage() {} func (*DelSuperGroupMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{17} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{17} } func (m *DelSuperGroupMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelSuperGroupMsgResp.Unmarshal(m, b) @@ -1013,7 +1014,7 @@ func (m *GetSuperGroupMsgReq) Reset() { *m = GetSuperGroupMsgReq{} } func (m *GetSuperGroupMsgReq) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupMsgReq) ProtoMessage() {} func (*GetSuperGroupMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{18} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{18} } func (m *GetSuperGroupMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupMsgReq.Unmarshal(m, b) @@ -1067,7 +1068,7 @@ func (m *GetSuperGroupMsgResp) Reset() { *m = GetSuperGroupMsgResp{} } func (m *GetSuperGroupMsgResp) String() string { return proto.CompactTextString(m) } func (*GetSuperGroupMsgResp) ProtoMessage() {} func (*GetSuperGroupMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{19} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{19} } func (m *GetSuperGroupMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSuperGroupMsgResp.Unmarshal(m, b) @@ -1120,7 +1121,7 @@ func (m *GetWriteDiffMsgReq) Reset() { *m = GetWriteDiffMsgReq{} } func (m *GetWriteDiffMsgReq) String() string { return proto.CompactTextString(m) } func (*GetWriteDiffMsgReq) ProtoMessage() {} func (*GetWriteDiffMsgReq) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{20} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{20} } func (m *GetWriteDiffMsgReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetWriteDiffMsgReq.Unmarshal(m, b) @@ -1167,7 +1168,7 @@ func (m *GetWriteDiffMsgResp) Reset() { *m = GetWriteDiffMsgResp{} } func (m *GetWriteDiffMsgResp) String() string { return proto.CompactTextString(m) } func (*GetWriteDiffMsgResp) ProtoMessage() {} func (*GetWriteDiffMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_msg_3f0146015dfd26d9, []int{21} + return fileDescriptor_msg_4f5a59ae8be91efc, []int{21} } func (m *GetWriteDiffMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetWriteDiffMsgResp.Unmarshal(m, b) @@ -1208,6 +1209,1002 @@ func (m *GetWriteDiffMsgResp) GetMsgData() *sdk_ws.MsgData { return nil } +type ModifyMessageReactionExtensionsReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + SourceID string `protobuf:"bytes,2,opt,name=sourceID" json:"sourceID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + SessionType int32 `protobuf:"varint,4,opt,name=sessionType" json:"sessionType,omitempty"` + ReactionExtensionList map[string]*sdk_ws.KeyValue `protobuf:"bytes,5,rep,name=reactionExtensionList" json:"reactionExtensionList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ClientMsgID string `protobuf:"bytes,6,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + Ex *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` + AttachedInfo *wrapperspb.StringValue `protobuf:"bytes,8,opt,name=attachedInfo" json:"attachedInfo,omitempty"` + IsReact bool `protobuf:"varint,9,opt,name=isReact" json:"isReact,omitempty"` + IsExternalExtensions bool `protobuf:"varint,10,opt,name=isExternalExtensions" json:"isExternalExtensions,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,11,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ModifyMessageReactionExtensionsReq) Reset() { *m = ModifyMessageReactionExtensionsReq{} } +func (m *ModifyMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) } +func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {} +func (*ModifyMessageReactionExtensionsReq) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{22} +} +func (m *ModifyMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Unmarshal(m, b) +} +func (m *ModifyMessageReactionExtensionsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Marshal(b, m, deterministic) +} +func (dst *ModifyMessageReactionExtensionsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_ModifyMessageReactionExtensionsReq.Merge(dst, src) +} +func (m *ModifyMessageReactionExtensionsReq) XXX_Size() int { + return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Size(m) +} +func (m *ModifyMessageReactionExtensionsReq) XXX_DiscardUnknown() { + xxx_messageInfo_ModifyMessageReactionExtensionsReq.DiscardUnknown(m) +} + +var xxx_messageInfo_ModifyMessageReactionExtensionsReq proto.InternalMessageInfo + +func (m *ModifyMessageReactionExtensionsReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *ModifyMessageReactionExtensionsReq) GetSourceID() string { + if m != nil { + return m.SourceID + } + return "" +} + +func (m *ModifyMessageReactionExtensionsReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *ModifyMessageReactionExtensionsReq) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +func (m *ModifyMessageReactionExtensionsReq) GetReactionExtensionList() map[string]*sdk_ws.KeyValue { + if m != nil { + return m.ReactionExtensionList + } + return nil +} + +func (m *ModifyMessageReactionExtensionsReq) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *ModifyMessageReactionExtensionsReq) GetEx() *wrapperspb.StringValue { + if m != nil { + return m.Ex + } + return nil +} + +func (m *ModifyMessageReactionExtensionsReq) GetAttachedInfo() *wrapperspb.StringValue { + if m != nil { + return m.AttachedInfo + } + return nil +} + +func (m *ModifyMessageReactionExtensionsReq) GetIsReact() bool { + if m != nil { + return m.IsReact + } + return false +} + +func (m *ModifyMessageReactionExtensionsReq) GetIsExternalExtensions() bool { + if m != nil { + return m.IsExternalExtensions + } + return false +} + +func (m *ModifyMessageReactionExtensionsReq) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +type SetMessageReactionExtensionsReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + SourceID string `protobuf:"bytes,2,opt,name=sourceID" json:"sourceID,omitempty"` + OpUserID string `protobuf:"bytes,3,opt,name=opUserID" json:"opUserID,omitempty"` + SessionType int32 `protobuf:"varint,4,opt,name=sessionType" json:"sessionType,omitempty"` + ReactionExtensionList map[string]*sdk_ws.KeyValue `protobuf:"bytes,5,rep,name=reactionExtensionList" json:"reactionExtensionList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ClientMsgID string `protobuf:"bytes,6,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + Ex *wrapperspb.StringValue `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"` + AttachedInfo *wrapperspb.StringValue `protobuf:"bytes,8,opt,name=attachedInfo" json:"attachedInfo,omitempty"` + IsReact bool `protobuf:"varint,9,opt,name=isReact" json:"isReact,omitempty"` + IsExternalExtensions bool `protobuf:"varint,10,opt,name=isExternalExtensions" json:"isExternalExtensions,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,11,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetMessageReactionExtensionsReq) Reset() { *m = SetMessageReactionExtensionsReq{} } +func (m *SetMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) } +func (*SetMessageReactionExtensionsReq) ProtoMessage() {} +func (*SetMessageReactionExtensionsReq) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{23} +} +func (m *SetMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetMessageReactionExtensionsReq.Unmarshal(m, b) +} +func (m *SetMessageReactionExtensionsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetMessageReactionExtensionsReq.Marshal(b, m, deterministic) +} +func (dst *SetMessageReactionExtensionsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetMessageReactionExtensionsReq.Merge(dst, src) +} +func (m *SetMessageReactionExtensionsReq) XXX_Size() int { + return xxx_messageInfo_SetMessageReactionExtensionsReq.Size(m) +} +func (m *SetMessageReactionExtensionsReq) XXX_DiscardUnknown() { + xxx_messageInfo_SetMessageReactionExtensionsReq.DiscardUnknown(m) +} + +var xxx_messageInfo_SetMessageReactionExtensionsReq proto.InternalMessageInfo + +func (m *SetMessageReactionExtensionsReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *SetMessageReactionExtensionsReq) GetSourceID() string { + if m != nil { + return m.SourceID + } + return "" +} + +func (m *SetMessageReactionExtensionsReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *SetMessageReactionExtensionsReq) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +func (m *SetMessageReactionExtensionsReq) GetReactionExtensionList() map[string]*sdk_ws.KeyValue { + if m != nil { + return m.ReactionExtensionList + } + return nil +} + +func (m *SetMessageReactionExtensionsReq) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *SetMessageReactionExtensionsReq) GetEx() *wrapperspb.StringValue { + if m != nil { + return m.Ex + } + return nil +} + +func (m *SetMessageReactionExtensionsReq) GetAttachedInfo() *wrapperspb.StringValue { + if m != nil { + return m.AttachedInfo + } + return nil +} + +func (m *SetMessageReactionExtensionsReq) GetIsReact() bool { + if m != nil { + return m.IsReact + } + return false +} + +func (m *SetMessageReactionExtensionsReq) GetIsExternalExtensions() bool { + if m != nil { + return m.IsExternalExtensions + } + return false +} + +func (m *SetMessageReactionExtensionsReq) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +type SetMessageReactionExtensionsResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + ClientMsgID string `protobuf:"bytes,3,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,4,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + IsReact bool `protobuf:"varint,5,opt,name=isReact" json:"isReact,omitempty"` + Result []*KeyValueResp `protobuf:"bytes,6,rep,name=result" json:"result,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetMessageReactionExtensionsResp) Reset() { *m = SetMessageReactionExtensionsResp{} } +func (m *SetMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) } +func (*SetMessageReactionExtensionsResp) ProtoMessage() {} +func (*SetMessageReactionExtensionsResp) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{24} +} +func (m *SetMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetMessageReactionExtensionsResp.Unmarshal(m, b) +} +func (m *SetMessageReactionExtensionsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetMessageReactionExtensionsResp.Marshal(b, m, deterministic) +} +func (dst *SetMessageReactionExtensionsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetMessageReactionExtensionsResp.Merge(dst, src) +} +func (m *SetMessageReactionExtensionsResp) XXX_Size() int { + return xxx_messageInfo_SetMessageReactionExtensionsResp.Size(m) +} +func (m *SetMessageReactionExtensionsResp) XXX_DiscardUnknown() { + xxx_messageInfo_SetMessageReactionExtensionsResp.DiscardUnknown(m) +} + +var xxx_messageInfo_SetMessageReactionExtensionsResp proto.InternalMessageInfo + +func (m *SetMessageReactionExtensionsResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *SetMessageReactionExtensionsResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *SetMessageReactionExtensionsResp) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *SetMessageReactionExtensionsResp) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +func (m *SetMessageReactionExtensionsResp) GetIsReact() bool { + if m != nil { + return m.IsReact + } + return false +} + +func (m *SetMessageReactionExtensionsResp) GetResult() []*KeyValueResp { + if m != nil { + return m.Result + } + return nil +} + +type GetMessageListReactionExtensionsReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=opUserID" json:"opUserID,omitempty"` + SourceID string `protobuf:"bytes,3,opt,name=sourceID" json:"sourceID,omitempty"` + SessionType int32 `protobuf:"varint,4,opt,name=sessionType" json:"sessionType,omitempty"` + MessageReactionKeyList []*GetMessageListReactionExtensionsReq_MessageReactionKey `protobuf:"bytes,5,rep,name=messageReactionKeyList" json:"messageReactionKeyList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetMessageListReactionExtensionsReq) Reset() { *m = GetMessageListReactionExtensionsReq{} } +func (m *GetMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) } +func (*GetMessageListReactionExtensionsReq) ProtoMessage() {} +func (*GetMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{25} +} +func (m *GetMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetMessageListReactionExtensionsReq.Unmarshal(m, b) +} +func (m *GetMessageListReactionExtensionsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetMessageListReactionExtensionsReq.Marshal(b, m, deterministic) +} +func (dst *GetMessageListReactionExtensionsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetMessageListReactionExtensionsReq.Merge(dst, src) +} +func (m *GetMessageListReactionExtensionsReq) XXX_Size() int { + return xxx_messageInfo_GetMessageListReactionExtensionsReq.Size(m) +} +func (m *GetMessageListReactionExtensionsReq) XXX_DiscardUnknown() { + xxx_messageInfo_GetMessageListReactionExtensionsReq.DiscardUnknown(m) +} + +var xxx_messageInfo_GetMessageListReactionExtensionsReq proto.InternalMessageInfo + +func (m *GetMessageListReactionExtensionsReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *GetMessageListReactionExtensionsReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *GetMessageListReactionExtensionsReq) GetSourceID() string { + if m != nil { + return m.SourceID + } + return "" +} + +func (m *GetMessageListReactionExtensionsReq) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +func (m *GetMessageListReactionExtensionsReq) GetMessageReactionKeyList() []*GetMessageListReactionExtensionsReq_MessageReactionKey { + if m != nil { + return m.MessageReactionKeyList + } + return nil +} + +type GetMessageListReactionExtensionsReq_MessageReactionKey struct { + ClientMsgID string `protobuf:"bytes,1,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,2,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) Reset() { + *m = GetMessageListReactionExtensionsReq_MessageReactionKey{} +} +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) String() string { + return proto.CompactTextString(m) +} +func (*GetMessageListReactionExtensionsReq_MessageReactionKey) ProtoMessage() {} +func (*GetMessageListReactionExtensionsReq_MessageReactionKey) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{25, 0} +} +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.Unmarshal(m, b) +} +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.Marshal(b, m, deterministic) +} +func (dst *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.Merge(dst, src) +} +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_Size() int { + return xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.Size(m) +} +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_DiscardUnknown() { + xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.DiscardUnknown(m) +} + +var xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey proto.InternalMessageInfo + +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +type GetMessageListReactionExtensionsResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + SingleMessageResult []*SingleMessageExtensionResult `protobuf:"bytes,3,rep,name=singleMessageResult" json:"singleMessageResult,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetMessageListReactionExtensionsResp) Reset() { *m = GetMessageListReactionExtensionsResp{} } +func (m *GetMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) } +func (*GetMessageListReactionExtensionsResp) ProtoMessage() {} +func (*GetMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{26} +} +func (m *GetMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetMessageListReactionExtensionsResp.Unmarshal(m, b) +} +func (m *GetMessageListReactionExtensionsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetMessageListReactionExtensionsResp.Marshal(b, m, deterministic) +} +func (dst *GetMessageListReactionExtensionsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetMessageListReactionExtensionsResp.Merge(dst, src) +} +func (m *GetMessageListReactionExtensionsResp) XXX_Size() int { + return xxx_messageInfo_GetMessageListReactionExtensionsResp.Size(m) +} +func (m *GetMessageListReactionExtensionsResp) XXX_DiscardUnknown() { + xxx_messageInfo_GetMessageListReactionExtensionsResp.DiscardUnknown(m) +} + +var xxx_messageInfo_GetMessageListReactionExtensionsResp proto.InternalMessageInfo + +func (m *GetMessageListReactionExtensionsResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *GetMessageListReactionExtensionsResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *GetMessageListReactionExtensionsResp) GetSingleMessageResult() []*SingleMessageExtensionResult { + if m != nil { + return m.SingleMessageResult + } + return nil +} + +type SingleMessageExtensionResult struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + ReactionExtensionList map[string]*sdk_ws.KeyValue `protobuf:"bytes,3,rep,name=reactionExtensionList" json:"reactionExtensionList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ClientMsgID string `protobuf:"bytes,4,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SingleMessageExtensionResult) Reset() { *m = SingleMessageExtensionResult{} } +func (m *SingleMessageExtensionResult) String() string { return proto.CompactTextString(m) } +func (*SingleMessageExtensionResult) ProtoMessage() {} +func (*SingleMessageExtensionResult) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{27} +} +func (m *SingleMessageExtensionResult) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SingleMessageExtensionResult.Unmarshal(m, b) +} +func (m *SingleMessageExtensionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SingleMessageExtensionResult.Marshal(b, m, deterministic) +} +func (dst *SingleMessageExtensionResult) XXX_Merge(src proto.Message) { + xxx_messageInfo_SingleMessageExtensionResult.Merge(dst, src) +} +func (m *SingleMessageExtensionResult) XXX_Size() int { + return xxx_messageInfo_SingleMessageExtensionResult.Size(m) +} +func (m *SingleMessageExtensionResult) XXX_DiscardUnknown() { + xxx_messageInfo_SingleMessageExtensionResult.DiscardUnknown(m) +} + +var xxx_messageInfo_SingleMessageExtensionResult proto.InternalMessageInfo + +func (m *SingleMessageExtensionResult) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *SingleMessageExtensionResult) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *SingleMessageExtensionResult) GetReactionExtensionList() map[string]*sdk_ws.KeyValue { + if m != nil { + return m.ReactionExtensionList + } + return nil +} + +func (m *SingleMessageExtensionResult) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +type ModifyMessageReactionExtensionsResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + SuccessList []*ExtendMsgResp `protobuf:"bytes,3,rep,name=successList" json:"successList,omitempty"` + FailedList []*ExtendMsgResp `protobuf:"bytes,4,rep,name=failedList" json:"failedList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ModifyMessageReactionExtensionsResp) Reset() { *m = ModifyMessageReactionExtensionsResp{} } +func (m *ModifyMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) } +func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {} +func (*ModifyMessageReactionExtensionsResp) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{28} +} +func (m *ModifyMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Unmarshal(m, b) +} +func (m *ModifyMessageReactionExtensionsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Marshal(b, m, deterministic) +} +func (dst *ModifyMessageReactionExtensionsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ModifyMessageReactionExtensionsResp.Merge(dst, src) +} +func (m *ModifyMessageReactionExtensionsResp) XXX_Size() int { + return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Size(m) +} +func (m *ModifyMessageReactionExtensionsResp) XXX_DiscardUnknown() { + xxx_messageInfo_ModifyMessageReactionExtensionsResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ModifyMessageReactionExtensionsResp proto.InternalMessageInfo + +func (m *ModifyMessageReactionExtensionsResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *ModifyMessageReactionExtensionsResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *ModifyMessageReactionExtensionsResp) GetSuccessList() []*ExtendMsgResp { + if m != nil { + return m.SuccessList + } + return nil +} + +func (m *ModifyMessageReactionExtensionsResp) GetFailedList() []*ExtendMsgResp { + if m != nil { + return m.FailedList + } + return nil +} + +type DeleteMessageListReactionExtensionsReq struct { + OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"` + OpUserID string `protobuf:"bytes,2,opt,name=opUserID" json:"opUserID,omitempty"` + SourceID string `protobuf:"bytes,3,opt,name=sourceID" json:"sourceID,omitempty"` + SessionType int32 `protobuf:"varint,4,opt,name=sessionType" json:"sessionType,omitempty"` + ClientMsgID string `protobuf:"bytes,5,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + IsExternalExtensions bool `protobuf:"varint,6,opt,name=isExternalExtensions" json:"isExternalExtensions,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,7,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + ReactionExtensionList []*sdk_ws.KeyValue `protobuf:"bytes,8,rep,name=reactionExtensionList" json:"reactionExtensionList,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteMessageListReactionExtensionsReq) Reset() { + *m = DeleteMessageListReactionExtensionsReq{} +} +func (m *DeleteMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) } +func (*DeleteMessageListReactionExtensionsReq) ProtoMessage() {} +func (*DeleteMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{29} +} +func (m *DeleteMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteMessageListReactionExtensionsReq.Unmarshal(m, b) +} +func (m *DeleteMessageListReactionExtensionsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteMessageListReactionExtensionsReq.Marshal(b, m, deterministic) +} +func (dst *DeleteMessageListReactionExtensionsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteMessageListReactionExtensionsReq.Merge(dst, src) +} +func (m *DeleteMessageListReactionExtensionsReq) XXX_Size() int { + return xxx_messageInfo_DeleteMessageListReactionExtensionsReq.Size(m) +} +func (m *DeleteMessageListReactionExtensionsReq) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteMessageListReactionExtensionsReq.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteMessageListReactionExtensionsReq proto.InternalMessageInfo + +func (m *DeleteMessageListReactionExtensionsReq) GetOperationID() string { + if m != nil { + return m.OperationID + } + return "" +} + +func (m *DeleteMessageListReactionExtensionsReq) GetOpUserID() string { + if m != nil { + return m.OpUserID + } + return "" +} + +func (m *DeleteMessageListReactionExtensionsReq) GetSourceID() string { + if m != nil { + return m.SourceID + } + return "" +} + +func (m *DeleteMessageListReactionExtensionsReq) GetSessionType() int32 { + if m != nil { + return m.SessionType + } + return 0 +} + +func (m *DeleteMessageListReactionExtensionsReq) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *DeleteMessageListReactionExtensionsReq) GetIsExternalExtensions() bool { + if m != nil { + return m.IsExternalExtensions + } + return false +} + +func (m *DeleteMessageListReactionExtensionsReq) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +func (m *DeleteMessageListReactionExtensionsReq) GetReactionExtensionList() []*sdk_ws.KeyValue { + if m != nil { + return m.ReactionExtensionList + } + return nil +} + +type DeleteMessageListReactionExtensionsResp struct { + ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"` + Result []*KeyValueResp `protobuf:"bytes,6,rep,name=result" json:"result,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteMessageListReactionExtensionsResp) Reset() { + *m = DeleteMessageListReactionExtensionsResp{} +} +func (m *DeleteMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) } +func (*DeleteMessageListReactionExtensionsResp) ProtoMessage() {} +func (*DeleteMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{30} +} +func (m *DeleteMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteMessageListReactionExtensionsResp.Unmarshal(m, b) +} +func (m *DeleteMessageListReactionExtensionsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteMessageListReactionExtensionsResp.Marshal(b, m, deterministic) +} +func (dst *DeleteMessageListReactionExtensionsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteMessageListReactionExtensionsResp.Merge(dst, src) +} +func (m *DeleteMessageListReactionExtensionsResp) XXX_Size() int { + return xxx_messageInfo_DeleteMessageListReactionExtensionsResp.Size(m) +} +func (m *DeleteMessageListReactionExtensionsResp) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteMessageListReactionExtensionsResp.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteMessageListReactionExtensionsResp proto.InternalMessageInfo + +func (m *DeleteMessageListReactionExtensionsResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *DeleteMessageListReactionExtensionsResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +func (m *DeleteMessageListReactionExtensionsResp) GetResult() []*KeyValueResp { + if m != nil { + return m.Result + } + return nil +} + +type ExtendMsgResp struct { + ExtendMsg *ExtendMsg `protobuf:"bytes,1,opt,name=extendMsg" json:"extendMsg,omitempty"` + ErrCode int32 `protobuf:"varint,2,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,3,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExtendMsgResp) Reset() { *m = ExtendMsgResp{} } +func (m *ExtendMsgResp) String() string { return proto.CompactTextString(m) } +func (*ExtendMsgResp) ProtoMessage() {} +func (*ExtendMsgResp) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{31} +} +func (m *ExtendMsgResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExtendMsgResp.Unmarshal(m, b) +} +func (m *ExtendMsgResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExtendMsgResp.Marshal(b, m, deterministic) +} +func (dst *ExtendMsgResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtendMsgResp.Merge(dst, src) +} +func (m *ExtendMsgResp) XXX_Size() int { + return xxx_messageInfo_ExtendMsgResp.Size(m) +} +func (m *ExtendMsgResp) XXX_DiscardUnknown() { + xxx_messageInfo_ExtendMsgResp.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtendMsgResp proto.InternalMessageInfo + +func (m *ExtendMsgResp) GetExtendMsg() *ExtendMsg { + if m != nil { + return m.ExtendMsg + } + return nil +} + +func (m *ExtendMsgResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *ExtendMsgResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +type ExtendMsg struct { + ReactionExtensionList map[string]*KeyValueResp `protobuf:"bytes,1,rep,name=reactionExtensionList" json:"reactionExtensionList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,3,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + AttachedInfo string `protobuf:"bytes,4,opt,name=attachedInfo" json:"attachedInfo,omitempty"` + Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExtendMsg) Reset() { *m = ExtendMsg{} } +func (m *ExtendMsg) String() string { return proto.CompactTextString(m) } +func (*ExtendMsg) ProtoMessage() {} +func (*ExtendMsg) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{32} +} +func (m *ExtendMsg) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExtendMsg.Unmarshal(m, b) +} +func (m *ExtendMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExtendMsg.Marshal(b, m, deterministic) +} +func (dst *ExtendMsg) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtendMsg.Merge(dst, src) +} +func (m *ExtendMsg) XXX_Size() int { + return xxx_messageInfo_ExtendMsg.Size(m) +} +func (m *ExtendMsg) XXX_DiscardUnknown() { + xxx_messageInfo_ExtendMsg.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtendMsg proto.InternalMessageInfo + +func (m *ExtendMsg) GetReactionExtensionList() map[string]*KeyValueResp { + if m != nil { + return m.ReactionExtensionList + } + return nil +} + +func (m *ExtendMsg) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *ExtendMsg) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +func (m *ExtendMsg) GetAttachedInfo() string { + if m != nil { + return m.AttachedInfo + } + return "" +} + +func (m *ExtendMsg) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type KeyValueResp struct { + KeyValue *sdk_ws.KeyValue `protobuf:"bytes,1,opt,name=keyValue" json:"keyValue,omitempty"` + ErrCode int32 `protobuf:"varint,2,opt,name=errCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,3,opt,name=errMsg" json:"errMsg,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyValueResp) Reset() { *m = KeyValueResp{} } +func (m *KeyValueResp) String() string { return proto.CompactTextString(m) } +func (*KeyValueResp) ProtoMessage() {} +func (*KeyValueResp) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{33} +} +func (m *KeyValueResp) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyValueResp.Unmarshal(m, b) +} +func (m *KeyValueResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyValueResp.Marshal(b, m, deterministic) +} +func (dst *KeyValueResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyValueResp.Merge(dst, src) +} +func (m *KeyValueResp) XXX_Size() int { + return xxx_messageInfo_KeyValueResp.Size(m) +} +func (m *KeyValueResp) XXX_DiscardUnknown() { + xxx_messageInfo_KeyValueResp.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyValueResp proto.InternalMessageInfo + +func (m *KeyValueResp) GetKeyValue() *sdk_ws.KeyValue { + if m != nil { + return m.KeyValue + } + return nil +} + +func (m *KeyValueResp) GetErrCode() int32 { + if m != nil { + return m.ErrCode + } + return 0 +} + +func (m *KeyValueResp) GetErrMsg() string { + if m != nil { + return m.ErrMsg + } + return "" +} + +type MsgDataToModifyByMQ struct { + AggregationID string `protobuf:"bytes,1,opt,name=aggregationID" json:"aggregationID,omitempty"` + MessageList []*MsgDataToMQ `protobuf:"bytes,2,rep,name=messageList" json:"messageList,omitempty"` + TriggerID string `protobuf:"bytes,3,opt,name=triggerID" json:"triggerID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MsgDataToModifyByMQ) Reset() { *m = MsgDataToModifyByMQ{} } +func (m *MsgDataToModifyByMQ) String() string { return proto.CompactTextString(m) } +func (*MsgDataToModifyByMQ) ProtoMessage() {} +func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) { + return fileDescriptor_msg_4f5a59ae8be91efc, []int{34} +} +func (m *MsgDataToModifyByMQ) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MsgDataToModifyByMQ.Unmarshal(m, b) +} +func (m *MsgDataToModifyByMQ) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MsgDataToModifyByMQ.Marshal(b, m, deterministic) +} +func (dst *MsgDataToModifyByMQ) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDataToModifyByMQ.Merge(dst, src) +} +func (m *MsgDataToModifyByMQ) XXX_Size() int { + return xxx_messageInfo_MsgDataToModifyByMQ.Size(m) +} +func (m *MsgDataToModifyByMQ) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDataToModifyByMQ.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDataToModifyByMQ proto.InternalMessageInfo + +func (m *MsgDataToModifyByMQ) GetAggregationID() string { + if m != nil { + return m.AggregationID + } + return "" +} + +func (m *MsgDataToModifyByMQ) GetMessageList() []*MsgDataToMQ { + if m != nil { + return m.MessageList + } + return nil +} + +func (m *MsgDataToModifyByMQ) GetTriggerID() string { + if m != nil { + return m.TriggerID + } + return "" +} + func init() { proto.RegisterType((*MsgDataToMQ)(nil), "msg.MsgDataToMQ") proto.RegisterType((*MsgDataToDB)(nil), "msg.MsgDataToDB") @@ -1231,6 +2228,24 @@ func init() { proto.RegisterType((*GetSuperGroupMsgResp)(nil), "msg.GetSuperGroupMsgResp") proto.RegisterType((*GetWriteDiffMsgReq)(nil), "msg.GetWriteDiffMsgReq") proto.RegisterType((*GetWriteDiffMsgResp)(nil), "msg.GetWriteDiffMsgResp") + proto.RegisterType((*ModifyMessageReactionExtensionsReq)(nil), "msg.ModifyMessageReactionExtensionsReq") + proto.RegisterMapType((map[string]*sdk_ws.KeyValue)(nil), "msg.ModifyMessageReactionExtensionsReq.ReactionExtensionListEntry") + proto.RegisterType((*SetMessageReactionExtensionsReq)(nil), "msg.SetMessageReactionExtensionsReq") + proto.RegisterMapType((map[string]*sdk_ws.KeyValue)(nil), "msg.SetMessageReactionExtensionsReq.ReactionExtensionListEntry") + proto.RegisterType((*SetMessageReactionExtensionsResp)(nil), "msg.SetMessageReactionExtensionsResp") + proto.RegisterType((*GetMessageListReactionExtensionsReq)(nil), "msg.GetMessageListReactionExtensionsReq") + proto.RegisterType((*GetMessageListReactionExtensionsReq_MessageReactionKey)(nil), "msg.GetMessageListReactionExtensionsReq.MessageReactionKey") + proto.RegisterType((*GetMessageListReactionExtensionsResp)(nil), "msg.GetMessageListReactionExtensionsResp") + proto.RegisterType((*SingleMessageExtensionResult)(nil), "msg.SingleMessageExtensionResult") + proto.RegisterMapType((map[string]*sdk_ws.KeyValue)(nil), "msg.SingleMessageExtensionResult.ReactionExtensionListEntry") + proto.RegisterType((*ModifyMessageReactionExtensionsResp)(nil), "msg.ModifyMessageReactionExtensionsResp") + proto.RegisterType((*DeleteMessageListReactionExtensionsReq)(nil), "msg.DeleteMessageListReactionExtensionsReq") + proto.RegisterType((*DeleteMessageListReactionExtensionsResp)(nil), "msg.DeleteMessageListReactionExtensionsResp") + proto.RegisterType((*ExtendMsgResp)(nil), "msg.ExtendMsgResp") + proto.RegisterType((*ExtendMsg)(nil), "msg.ExtendMsg") + proto.RegisterMapType((map[string]*KeyValueResp)(nil), "msg.ExtendMsg.ReactionExtensionListEntry") + proto.RegisterType((*KeyValueResp)(nil), "msg.KeyValueResp") + proto.RegisterType((*MsgDataToModifyByMQ)(nil), "msg.MsgDataToModifyByMQ") } // Reference imports to suppress errors if they are not otherwise used. @@ -1255,6 +2270,11 @@ type MsgClient interface { GetSendMsgStatus(ctx context.Context, in *GetSendMsgStatusReq, opts ...grpc.CallOption) (*GetSendMsgStatusResp, error) GetSuperGroupMsg(ctx context.Context, in *GetSuperGroupMsgReq, opts ...grpc.CallOption) (*GetSuperGroupMsgResp, error) GetWriteDiffMsg(ctx context.Context, in *GetWriteDiffMsgReq, opts ...grpc.CallOption) (*GetWriteDiffMsgResp, error) + // modify msg + SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error) + GetMessageListReactionExtensions(ctx context.Context, in *GetMessageListReactionExtensionsReq, opts ...grpc.CallOption) (*GetMessageListReactionExtensionsResp, error) + AddMessageReactionExtensions(ctx context.Context, in *ModifyMessageReactionExtensionsReq, opts ...grpc.CallOption) (*ModifyMessageReactionExtensionsResp, error) + DeleteMessageReactionExtensions(ctx context.Context, in *DeleteMessageListReactionExtensionsReq, opts ...grpc.CallOption) (*DeleteMessageListReactionExtensionsResp, error) } type msgClient struct { @@ -1364,6 +2384,42 @@ func (c *msgClient) GetWriteDiffMsg(ctx context.Context, in *GetWriteDiffMsgReq, return out, nil } +func (c *msgClient) SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error) { + out := new(SetMessageReactionExtensionsResp) + err := grpc.Invoke(ctx, "/msg.msg/SetMessageReactionExtensions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) GetMessageListReactionExtensions(ctx context.Context, in *GetMessageListReactionExtensionsReq, opts ...grpc.CallOption) (*GetMessageListReactionExtensionsResp, error) { + out := new(GetMessageListReactionExtensionsResp) + err := grpc.Invoke(ctx, "/msg.msg/GetMessageListReactionExtensions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) AddMessageReactionExtensions(ctx context.Context, in *ModifyMessageReactionExtensionsReq, opts ...grpc.CallOption) (*ModifyMessageReactionExtensionsResp, error) { + out := new(ModifyMessageReactionExtensionsResp) + err := grpc.Invoke(ctx, "/msg.msg/AddMessageReactionExtensions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) DeleteMessageReactionExtensions(ctx context.Context, in *DeleteMessageListReactionExtensionsReq, opts ...grpc.CallOption) (*DeleteMessageListReactionExtensionsResp, error) { + out := new(DeleteMessageListReactionExtensionsResp) + err := grpc.Invoke(ctx, "/msg.msg/DeleteMessageReactionExtensions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Msg service type MsgServer interface { @@ -1378,6 +2434,11 @@ type MsgServer interface { GetSendMsgStatus(context.Context, *GetSendMsgStatusReq) (*GetSendMsgStatusResp, error) GetSuperGroupMsg(context.Context, *GetSuperGroupMsgReq) (*GetSuperGroupMsgResp, error) GetWriteDiffMsg(context.Context, *GetWriteDiffMsgReq) (*GetWriteDiffMsgResp, error) + // modify msg + SetMessageReactionExtensions(context.Context, *SetMessageReactionExtensionsReq) (*SetMessageReactionExtensionsResp, error) + GetMessageListReactionExtensions(context.Context, *GetMessageListReactionExtensionsReq) (*GetMessageListReactionExtensionsResp, error) + AddMessageReactionExtensions(context.Context, *ModifyMessageReactionExtensionsReq) (*ModifyMessageReactionExtensionsResp, error) + DeleteMessageReactionExtensions(context.Context, *DeleteMessageListReactionExtensionsReq) (*DeleteMessageListReactionExtensionsResp, error) } func RegisterMsgServer(s *grpc.Server, srv MsgServer) { @@ -1582,6 +2643,78 @@ func _Msg_GetWriteDiffMsg_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Msg_SetMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMessageReactionExtensionsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SetMessageReactionExtensions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/msg.msg/SetMessageReactionExtensions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SetMessageReactionExtensions(ctx, req.(*SetMessageReactionExtensionsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_GetMessageListReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMessageListReactionExtensionsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).GetMessageListReactionExtensions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/msg.msg/GetMessageListReactionExtensions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).GetMessageListReactionExtensions(ctx, req.(*GetMessageListReactionExtensionsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_AddMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyMessageReactionExtensionsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).AddMessageReactionExtensions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/msg.msg/AddMessageReactionExtensions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).AddMessageReactionExtensions(ctx, req.(*ModifyMessageReactionExtensionsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_DeleteMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteMessageListReactionExtensionsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DeleteMessageReactionExtensions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/msg.msg/DeleteMessageReactionExtensions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DeleteMessageReactionExtensions(ctx, req.(*DeleteMessageListReactionExtensionsReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "msg.msg", HandlerType: (*MsgServer)(nil), @@ -1630,71 +2763,134 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "GetWriteDiffMsg", Handler: _Msg_GetWriteDiffMsg_Handler, }, + { + MethodName: "SetMessageReactionExtensions", + Handler: _Msg_SetMessageReactionExtensions_Handler, + }, + { + MethodName: "GetMessageListReactionExtensions", + Handler: _Msg_GetMessageListReactionExtensions_Handler, + }, + { + MethodName: "AddMessageReactionExtensions", + Handler: _Msg_AddMessageReactionExtensions_Handler, + }, + { + MethodName: "DeleteMessageReactionExtensions", + Handler: _Msg_DeleteMessageReactionExtensions_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "msg/msg.proto", } -func init() { proto.RegisterFile("msg/msg.proto", fileDescriptor_msg_3f0146015dfd26d9) } +func init() { proto.RegisterFile("msg/msg.proto", fileDescriptor_msg_4f5a59ae8be91efc) } -var fileDescriptor_msg_3f0146015dfd26d9 = []byte{ - // 928 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0x96, 0xe3, 0x26, 0xdd, 0xbe, 0xb4, 0x6a, 0x98, 0x86, 0xe2, 0x35, 0x1c, 0x82, 0x05, 0x28, - 0x02, 0xb6, 0x91, 0x0a, 0x12, 0x87, 0xbd, 0x40, 0xd7, 0x2b, 0x6f, 0x25, 0x4c, 0xb7, 0x76, 0x11, - 0x12, 0x97, 0xae, 0x69, 0x66, 0x67, 0xad, 0xc6, 0xf6, 0xd4, 0xcf, 0xa1, 0xbb, 0x20, 0xb8, 0x71, - 0xe4, 0x0f, 0xe0, 0xc4, 0x8d, 0x3b, 0xff, 0x21, 0x9a, 0x19, 0x27, 0x19, 0xff, 0x28, 0x2d, 0x61, - 0xb5, 0xb7, 0xbc, 0x37, 0x6f, 0xbe, 0xf7, 0x7d, 0x6f, 0xde, 0xcc, 0x8b, 0x61, 0x27, 0x41, 0x36, - 0x49, 0x90, 0x1d, 0xf0, 0x3c, 0x2b, 0x32, 0x62, 0x26, 0xc8, 0xec, 0xf1, 0x09, 0xa7, 0xe9, 0x83, - 0x63, 0xff, 0x41, 0x48, 0xf3, 0x1f, 0x69, 0x3e, 0xe1, 0x97, 0x6c, 0x22, 0x97, 0x27, 0x38, 0xbd, - 0x3c, 0xbf, 0xc6, 0xc9, 0x35, 0xaa, 0x70, 0xe7, 0x67, 0xe8, 0xfb, 0xc8, 0xdc, 0xa8, 0x88, 0xce, - 0x32, 0xff, 0x94, 0x0c, 0xa1, 0x5b, 0x64, 0x97, 0x34, 0xb5, 0x8c, 0x91, 0x31, 0xde, 0x0a, 0x94, - 0x41, 0x46, 0xd0, 0xcf, 0x38, 0xcd, 0xa3, 0x22, 0xce, 0xd2, 0x63, 0xd7, 0xea, 0xc8, 0x35, 0xdd, - 0x45, 0x3e, 0x87, 0xcd, 0x44, 0xc1, 0x58, 0xe6, 0xc8, 0x18, 0xf7, 0x0f, 0xed, 0x03, 0x94, 0xa9, - 0xcf, 0x23, 0x1e, 0x9f, 0xf3, 0x28, 0x8f, 0x12, 0x3c, 0x28, 0x13, 0x05, 0x8b, 0x50, 0x87, 0x6a, - 0xc9, 0xdd, 0x23, 0x1d, 0xc4, 0xb8, 0x33, 0xc8, 0xed, 0xe4, 0x9c, 0xdf, 0x0d, 0xd8, 0x7d, 0x3a, - 0xc7, 0x17, 0xba, 0xd0, 0x11, 0xf4, 0x4f, 0xb4, 0x5d, 0x4a, 0xae, 0xee, 0xd2, 0xd9, 0x74, 0xee, - 0xce, 0xc6, 0x81, 0x6d, 0x3e, 0xc7, 0x17, 0x67, 0xd9, 0xb7, 0x48, 0xf3, 0x63, 0x57, 0x56, 0x63, - 0x2b, 0xa8, 0xf8, 0x9c, 0xbf, 0x0c, 0x20, 0x2b, 0x2e, 0x59, 0xca, 0xb2, 0xa3, 0x57, 0xfe, 0x29, - 0xb1, 0x60, 0x73, 0x16, 0x61, 0x11, 0xd2, 0x2b, 0x49, 0x67, 0x23, 0x58, 0x98, 0xe4, 0x03, 0xd8, - 0x89, 0x18, 0xcb, 0x29, 0xab, 0x8a, 0xac, 0x3a, 0xc9, 0x21, 0xf4, 0x13, 0x8a, 0x18, 0x31, 0xfa, - 0x75, 0x8c, 0x85, 0x65, 0x8e, 0xcc, 0x71, 0xff, 0x70, 0x70, 0x20, 0x5a, 0x43, 0x53, 0x1e, 0xe8, - 0x41, 0xe4, 0x3d, 0xd8, 0x2a, 0xf2, 0x98, 0x31, 0xc9, 0x75, 0x43, 0xa2, 0xae, 0x1c, 0xce, 0x37, - 0x40, 0x3c, 0x5a, 0xf8, 0xd1, 0xcb, 0xaf, 0xd2, 0xa9, 0x1f, 0xa7, 0x21, 0xbd, 0x0a, 0xe8, 0x15, - 0xd9, 0x87, 0x5e, 0x29, 0x4e, 0x55, 0xad, 0xb4, 0xea, 0x25, 0xed, 0x34, 0x4a, 0xea, 0x5c, 0xc3, - 0x5e, 0x03, 0x0f, 0xb9, 0x10, 0xfe, 0x38, 0xcf, 0x1f, 0x65, 0x53, 0x2a, 0x11, 0xbb, 0xc1, 0xc2, - 0x14, 0xa9, 0x1e, 0xe7, 0xb9, 0x8f, 0xac, 0x44, 0x2b, 0x2d, 0xe1, 0xf7, 0xa3, 0x97, 0xa2, 0x52, - 0xa2, 0xbe, 0x3b, 0x41, 0x69, 0x49, 0xbf, 0xc4, 0x95, 0x5a, 0x84, 0x5f, 0x5a, 0xce, 0x4f, 0x00, - 0x21, 0x4d, 0xa7, 0x3e, 0x32, 0x21, 0xe0, 0xcd, 0x36, 0xf9, 0x9f, 0x06, 0xf4, 0x97, 0xc9, 0x95, - 0x5a, 0x5a, 0x55, 0x4b, 0x57, 0x6a, 0x69, 0x45, 0xad, 0xb2, 0x04, 0x33, 0x95, 0xc7, 0x47, 0xb6, - 0x3c, 0x26, 0xdd, 0x25, 0x22, 0x2e, 0x66, 0x31, 0x4d, 0x0b, 0x15, 0xd1, 0x55, 0x11, 0x9a, 0x8b, - 0xd8, 0x70, 0x0f, 0x69, 0x3a, 0x3d, 0x8b, 0x13, 0x6a, 0xf5, 0x46, 0xc6, 0xd8, 0x0c, 0x96, 0xb6, - 0x73, 0x01, 0xfd, 0x47, 0x33, 0x1a, 0xe5, 0x65, 0x79, 0xf6, 0xa1, 0x37, 0xaf, 0x9c, 0xaf, 0xb2, - 0x04, 0x44, 0xc6, 0xcb, 0x93, 0x57, 0x04, 0x97, 0x76, 0xbd, 0x78, 0x66, 0xf3, 0x12, 0x7e, 0x09, - 0xdb, 0xab, 0x24, 0xeb, 0x94, 0xc1, 0xf9, 0xc3, 0x80, 0xdd, 0x90, 0x0a, 0x3d, 0x95, 0x5e, 0x6c, - 0xe5, 0x6a, 0xc1, 0x26, 0xcb, 0xb3, 0x39, 0x5f, 0x52, 0x5d, 0x98, 0x62, 0x47, 0xa2, 0x5a, 0xa4, - 0x6c, 0x1d, 0x65, 0xd5, 0x15, 0x6c, 0x34, 0x8f, 0x5f, 0xd7, 0xdf, 0xad, 0xea, 0x77, 0x5c, 0x18, - 0x54, 0xa9, 0xad, 0xa5, 0xf0, 0x04, 0xf6, 0x42, 0x5a, 0x94, 0xcd, 0x12, 0x16, 0x51, 0x31, 0xc7, - 0xa0, 0x49, 0xcd, 0x68, 0x52, 0xdb, 0x87, 0x1e, 0xca, 0x70, 0x09, 0xd8, 0x0d, 0x4a, 0xcb, 0x79, - 0x02, 0xc3, 0x26, 0xe0, 0x5a, 0xd4, 0xbe, 0x90, 0x57, 0xf7, 0xbf, 0x53, 0x73, 0x9e, 0xc1, 0xd0, - 0x7b, 0x2d, 0x14, 0x34, 0x91, 0x66, 0x45, 0xe4, 0x6f, 0x06, 0xec, 0xb9, 0x74, 0x16, 0xce, 0x39, - 0xcd, 0x3d, 0x71, 0xca, 0x65, 0x1f, 0xeb, 0xe7, 0x65, 0xd4, 0xfa, 0x75, 0xd5, 0x37, 0x9d, 0x9b, - 0xfa, 0xc6, 0xac, 0xf6, 0xcd, 0xad, 0xfd, 0x21, 0x8a, 0xdd, 0xa4, 0xb1, 0x56, 0xb1, 0x2f, 0x54, - 0xb1, 0xeb, 0x82, 0x6e, 0xef, 0x83, 0x01, 0x98, 0xa2, 0xb3, 0x3b, 0xb2, 0xb3, 0xc5, 0xcf, 0x9b, - 0x05, 0x39, 0xbf, 0xaa, 0x83, 0xf9, 0xff, 0x74, 0xd7, 0x7c, 0x17, 0x9f, 0xc8, 0xe1, 0xf2, 0x5d, - 0x1e, 0x17, 0xd4, 0x8d, 0x9f, 0x3f, 0x5f, 0x5f, 0xa3, 0xf3, 0x8b, 0x2c, 0x57, 0x15, 0xe9, 0xcd, - 0x09, 0x39, 0xfc, 0xbb, 0x07, 0xe2, 0x4f, 0x17, 0x79, 0x06, 0xbb, 0xb5, 0xe9, 0x46, 0x3e, 0x6c, - 0xd9, 0xdf, 0x9c, 0xa8, 0xf6, 0x47, 0x77, 0x09, 0x43, 0x4e, 0x32, 0x18, 0x3e, 0x9d, 0xcf, 0x66, - 0xbe, 0x1a, 0xe0, 0x47, 0xaf, 0x42, 0x7a, 0x25, 0xa7, 0xf8, 0xc7, 0x2d, 0xfb, 0xdb, 0x02, 0x45, - 0xae, 0x4f, 0xee, 0x1c, 0x8b, 0x9c, 0x7c, 0x0a, 0x9b, 0xe5, 0xcd, 0x25, 0xbb, 0xf2, 0x8f, 0xc4, - 0x6a, 0x8a, 0xda, 0x83, 0xaa, 0x03, 0x39, 0x39, 0x05, 0x70, 0xe9, 0xcc, 0x47, 0x26, 0x49, 0x8d, - 0x5a, 0x12, 0xad, 0x96, 0x05, 0xc2, 0xfb, 0xb7, 0x44, 0x20, 0x27, 0x1e, 0x0c, 0xea, 0x77, 0x8a, - 0x58, 0x32, 0x71, 0xcb, 0x8d, 0xb7, 0xef, 0xdf, 0xb0, 0x82, 0x9c, 0x4c, 0xe0, 0xde, 0x62, 0xfc, - 0x10, 0xc5, 0x5c, 0x1b, 0x79, 0xf6, 0x5b, 0x35, 0x0f, 0x72, 0xf2, 0x10, 0xb6, 0xf5, 0x17, 0x9d, - 0x0c, 0x4b, 0xb9, 0x95, 0xf9, 0x63, 0xbf, 0xdd, 0xe2, 0x55, 0xb4, 0xeb, 0xef, 0x6e, 0x49, 0xbb, - 0xe5, 0x7d, 0x2f, 0x69, 0xb7, 0x3e, 0xd4, 0x1e, 0x0c, 0xbc, 0x76, 0x20, 0xef, 0x46, 0x20, 0xef, - 0x5f, 0x80, 0x5a, 0x0a, 0xd9, 0xf2, 0xd2, 0x68, 0x40, 0x8d, 0x42, 0xba, 0xb2, 0xcb, 0xf5, 0xcb, - 0x46, 0xde, 0x59, 0x44, 0xd7, 0x2e, 0xb3, 0x6d, 0xb5, 0x2f, 0x20, 0x3f, 0x7a, 0xf7, 0xfb, 0xfb, - 0xe2, 0x13, 0xe5, 0xfc, 0xd8, 0xd7, 0xbe, 0x4d, 0x12, 0x64, 0x0f, 0x13, 0x64, 0x3f, 0xf4, 0xa4, - 0xf9, 0xd9, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x68, 0xc1, 0xb8, 0x4c, 0xda, 0x0c, 0x00, 0x00, +var fileDescriptor_msg_4f5a59ae8be91efc = []byte{ + // 1672 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6e, 0xdb, 0xc6, + 0x16, 0x06, 0x49, 0x4b, 0xb6, 0x8f, 0xec, 0xd8, 0x19, 0x3b, 0xbe, 0x0a, 0x63, 0x20, 0x0a, 0xf3, + 0xa7, 0xdc, 0x24, 0x32, 0xae, 0xef, 0x05, 0x72, 0xd1, 0x14, 0x68, 0xe2, 0xc8, 0x55, 0x8c, 0x94, + 0x75, 0x4c, 0xb9, 0x2d, 0xd0, 0x2e, 0x1c, 0x46, 0x1a, 0x33, 0x84, 0x25, 0x92, 0xe6, 0x50, 0xb1, + 0xd5, 0xbf, 0x5d, 0x8b, 0x02, 0x45, 0x16, 0x5d, 0x76, 0xd5, 0x5d, 0x77, 0x7d, 0x88, 0x3e, 0x40, + 0xd1, 0x07, 0xe9, 0x33, 0xb4, 0x28, 0x66, 0x86, 0x92, 0x86, 0x7f, 0x16, 0x2d, 0x17, 0x41, 0x0a, + 0x74, 0xa7, 0x99, 0x39, 0x73, 0xe6, 0xfb, 0xce, 0xf9, 0xe6, 0x87, 0x47, 0x30, 0xdf, 0x25, 0xd6, + 0x5a, 0x97, 0x58, 0x35, 0xcf, 0x77, 0x03, 0x17, 0x29, 0x5d, 0x62, 0xa9, 0xd5, 0x6d, 0x0f, 0x3b, + 0x77, 0xb7, 0xf4, 0xbb, 0x4d, 0xec, 0xbf, 0xc4, 0xfe, 0x9a, 0x77, 0x60, 0xad, 0xb1, 0xe1, 0x35, + 0xd2, 0x3e, 0xd8, 0x3b, 0x22, 0x6b, 0x47, 0x84, 0x9b, 0xab, 0xb5, 0xb1, 0x96, 0xbe, 0xe9, 0x79, + 0xd8, 0x0f, 0xed, 0xb5, 0xcf, 0xa0, 0xa4, 0x13, 0xab, 0x6e, 0x06, 0xe6, 0xae, 0xab, 0xef, 0xa0, + 0x65, 0x28, 0x04, 0xee, 0x01, 0x76, 0xca, 0x52, 0x45, 0xaa, 0xce, 0x1a, 0xbc, 0x81, 0x2a, 0x50, + 0x72, 0x3d, 0xec, 0x9b, 0x81, 0xed, 0x3a, 0x5b, 0xf5, 0xb2, 0xcc, 0xc6, 0xc4, 0x2e, 0xf4, 0x3f, + 0x98, 0xee, 0x72, 0x37, 0x65, 0xa5, 0x22, 0x55, 0x4b, 0xeb, 0x6a, 0x8d, 0x30, 0x00, 0x7b, 0xa6, + 0x67, 0xef, 0x79, 0xa6, 0x6f, 0x76, 0x49, 0x2d, 0x5c, 0xc8, 0x18, 0x98, 0x6a, 0x58, 0x58, 0xbc, + 0xbe, 0x21, 0x3a, 0x91, 0x72, 0x3b, 0x19, 0x0f, 0x4e, 0x7b, 0x25, 0xc1, 0xc2, 0xd3, 0x1e, 0x79, + 0x21, 0x12, 0xad, 0x40, 0x69, 0x5b, 0x98, 0xc5, 0xe9, 0x8a, 0x5d, 0x22, 0x1a, 0x39, 0x3f, 0x1a, + 0x0d, 0xe6, 0xbc, 0x1e, 0x79, 0xb1, 0xeb, 0x7e, 0x40, 0xb0, 0xbf, 0x55, 0x67, 0xd1, 0x98, 0x35, + 0x22, 0x7d, 0xda, 0x8f, 0x12, 0xa0, 0x11, 0x16, 0xd7, 0xb1, 0xdc, 0x8d, 0xbe, 0xbe, 0x83, 0xca, + 0x30, 0xdd, 0x31, 0x49, 0xd0, 0xc4, 0x87, 0x0c, 0xce, 0x94, 0x31, 0x68, 0xa2, 0x6b, 0x30, 0x6f, + 0x5a, 0x96, 0x8f, 0xad, 0x28, 0xc9, 0x68, 0x27, 0x5a, 0x87, 0x52, 0x17, 0x13, 0x62, 0x5a, 0xf8, + 0x3d, 0x9b, 0x04, 0x65, 0xa5, 0xa2, 0x54, 0x4b, 0xeb, 0x8b, 0x35, 0x2a, 0x25, 0x81, 0xb9, 0x21, + 0x1a, 0xa1, 0x55, 0x98, 0x0d, 0x7c, 0xdb, 0xb2, 0x18, 0xd6, 0x29, 0xe6, 0x75, 0xd4, 0xa1, 0xbd, + 0x0f, 0xa8, 0x81, 0x03, 0xdd, 0x3c, 0x7e, 0xe8, 0xb4, 0x75, 0xdb, 0x69, 0xe2, 0x43, 0x03, 0x1f, + 0xa2, 0x15, 0x28, 0x86, 0xe4, 0x78, 0xd4, 0xc2, 0x56, 0x3c, 0xa4, 0x72, 0x22, 0xa4, 0xda, 0x11, + 0x2c, 0x25, 0xfc, 0x11, 0x8f, 0x12, 0xdf, 0xf4, 0xfd, 0x47, 0x6e, 0x1b, 0x33, 0x8f, 0x05, 0x63, + 0xd0, 0xa4, 0x4b, 0x6d, 0xfa, 0xbe, 0x4e, 0xac, 0xd0, 0x5b, 0xd8, 0xa2, 0xfd, 0xba, 0x79, 0x4c, + 0x23, 0x45, 0xe3, 0x3b, 0x6f, 0x84, 0x2d, 0xd6, 0xcf, 0xfc, 0x32, 0x2e, 0xb4, 0x9f, 0xb5, 0xb4, + 0x4f, 0x01, 0x9a, 0xd8, 0x69, 0xeb, 0xc4, 0xa2, 0x04, 0x5e, 0xaf, 0xc8, 0x7f, 0x90, 0xa0, 0x34, + 0x5c, 0x9c, 0xb3, 0xc5, 0x51, 0xb6, 0x78, 0xc4, 0x16, 0x47, 0xd8, 0xf2, 0x16, 0x45, 0xc6, 0xd7, + 0xd1, 0x89, 0x35, 0x4c, 0x93, 0xd8, 0x45, 0x2d, 0x5a, 0x1d, 0x1b, 0x3b, 0x01, 0xb7, 0x28, 0x70, + 0x0b, 0xa1, 0x0b, 0xa9, 0x30, 0x43, 0xb0, 0xd3, 0xde, 0xb5, 0xbb, 0xb8, 0x5c, 0xac, 0x48, 0x55, + 0xc5, 0x18, 0xb6, 0xb5, 0x16, 0x94, 0x1e, 0x75, 0xb0, 0xe9, 0x87, 0xe1, 0x59, 0x81, 0x62, 0x2f, + 0x92, 0x5f, 0xde, 0xa2, 0x2e, 0x5c, 0x2f, 0xcc, 0x3c, 0x07, 0x38, 0x6c, 0xc7, 0x83, 0xa7, 0x24, + 0x37, 0xe1, 0x03, 0x98, 0x1b, 0x2d, 0x32, 0x49, 0x18, 0xb4, 0xef, 0x25, 0x58, 0x68, 0x62, 0xca, + 0x27, 0xa2, 0xc5, 0x54, 0xac, 0x65, 0x98, 0xb6, 0x7c, 0xb7, 0xe7, 0x0d, 0xa1, 0x0e, 0x9a, 0x74, + 0x46, 0x97, 0x4b, 0x24, 0x94, 0x0e, 0x6f, 0xc5, 0x19, 0x4c, 0x25, 0xd3, 0x2f, 0xf2, 0x2f, 0x44, + 0xf9, 0x6b, 0x75, 0x58, 0x8c, 0x42, 0x9b, 0x88, 0xe1, 0x36, 0x2c, 0x35, 0x71, 0x10, 0x8a, 0xa5, + 0x19, 0x98, 0x41, 0x8f, 0x18, 0x49, 0x68, 0x52, 0x12, 0xda, 0x0a, 0x14, 0x09, 0x33, 0x67, 0x0e, + 0x0b, 0x46, 0xd8, 0xd2, 0x1e, 0xc3, 0x72, 0xd2, 0xe1, 0x44, 0xd0, 0xee, 0xb1, 0xad, 0x7b, 0x7a, + 0x68, 0xda, 0x33, 0x58, 0x6e, 0xfc, 0x25, 0x10, 0x04, 0x92, 0x4a, 0x84, 0xe4, 0x57, 0x12, 0x2c, + 0xd5, 0x71, 0xa7, 0xd9, 0xf3, 0xb0, 0xdf, 0xa0, 0x59, 0x0e, 0x75, 0x2c, 0xe6, 0x4b, 0x8a, 0xe9, + 0x75, 0xa4, 0x1b, 0x39, 0x4b, 0x37, 0x4a, 0x54, 0x37, 0x63, 0xf5, 0x41, 0x83, 0x9d, 0x84, 0x31, + 0x51, 0xb0, 0x5b, 0x3c, 0xd8, 0x71, 0x42, 0xe3, 0x75, 0xb0, 0x08, 0x0a, 0x55, 0xb6, 0xcc, 0x94, + 0x4d, 0x7f, 0x66, 0x13, 0xd2, 0xbe, 0xe4, 0x89, 0x39, 0x3b, 0xdc, 0x09, 0xcf, 0xc5, 0xc7, 0xec, + 0x72, 0xf9, 0xc8, 0xb7, 0x03, 0x5c, 0xb7, 0xf7, 0xf7, 0x27, 0xe7, 0xa8, 0x7d, 0xc1, 0xc2, 0x15, + 0xf5, 0xf4, 0x1a, 0x89, 0x7c, 0x57, 0x00, 0x4d, 0x77, 0xdb, 0xf6, 0x7e, 0x5f, 0xe7, 0x37, 0xab, + 0x81, 0xcd, 0x16, 0x05, 0xbb, 0x79, 0x1c, 0x60, 0x87, 0xd8, 0xae, 0x93, 0x73, 0x17, 0xd3, 0x33, + 0xda, 0xed, 0xf9, 0x2d, 0x3c, 0x3a, 0x60, 0x07, 0xed, 0x88, 0x98, 0x95, 0xe4, 0xe1, 0x4b, 0x30, + 0xa1, 0x0b, 0xed, 0xf6, 0x3d, 0xcc, 0xa4, 0x59, 0x30, 0xc4, 0x2e, 0x74, 0x0c, 0x17, 0xfc, 0x38, + 0x28, 0xf6, 0x48, 0x28, 0xb0, 0x47, 0xc2, 0x06, 0x7f, 0x24, 0x8c, 0xe5, 0x50, 0x33, 0xd2, 0x9c, + 0x6c, 0x3a, 0x81, 0xdf, 0x37, 0xd2, 0x17, 0x88, 0xdf, 0x4c, 0xc5, 0xe4, 0xcd, 0x74, 0x07, 0x64, + 0x7c, 0x5c, 0x9e, 0x66, 0xf1, 0x5e, 0xad, 0x59, 0xae, 0x6b, 0x75, 0x30, 0x7f, 0x9c, 0x3e, 0xef, + 0xed, 0xd7, 0x9a, 0x81, 0x6f, 0x3b, 0xd6, 0x87, 0x66, 0xa7, 0x87, 0x0d, 0x19, 0x1f, 0xa3, 0x07, + 0x30, 0x67, 0x06, 0x81, 0xd9, 0x7a, 0x81, 0xdb, 0x5b, 0xce, 0xbe, 0x5b, 0x9e, 0xc9, 0x31, 0x2f, + 0x32, 0x83, 0xca, 0xc2, 0x26, 0x8c, 0x48, 0x79, 0xb6, 0x22, 0x55, 0x67, 0x8c, 0x41, 0x13, 0xad, + 0xc3, 0xb2, 0x4d, 0x28, 0x7c, 0xdf, 0x31, 0x3b, 0x23, 0xe2, 0x65, 0x60, 0x66, 0xa9, 0x63, 0xa8, + 0x06, 0xa8, 0x4b, 0xac, 0x77, 0x6d, 0x9f, 0x04, 0x3c, 0x7e, 0xec, 0x86, 0x2d, 0xb1, 0x1b, 0x36, + 0x65, 0x44, 0xc5, 0xa0, 0x66, 0x07, 0x91, 0x6a, 0xfb, 0x00, 0xf7, 0x43, 0x6d, 0xd0, 0x9f, 0xe8, + 0x3f, 0x50, 0x78, 0x49, 0x49, 0x84, 0x6f, 0xd0, 0x4b, 0x29, 0x82, 0x7c, 0x82, 0xfb, 0x9c, 0x27, + 0xb7, 0x7c, 0x4b, 0xfe, 0xbf, 0xa4, 0x7d, 0x5b, 0x80, 0xcb, 0xf4, 0x42, 0x7a, 0x53, 0x05, 0xd9, + 0x3b, 0x59, 0x90, 0xef, 0x30, 0x41, 0x8e, 0x21, 0xf0, 0x8f, 0x1a, 0xff, 0x2e, 0x6a, 0xfc, 0x4d, + 0x82, 0xca, 0xc9, 0xc9, 0x9c, 0xf4, 0x5d, 0x2c, 0x66, 0x53, 0x49, 0x66, 0x33, 0x3d, 0x1e, 0x53, + 0x59, 0xf1, 0x10, 0xb3, 0x51, 0x88, 0x66, 0xe3, 0x16, 0x14, 0x7d, 0x4c, 0x7a, 0x9d, 0xa0, 0x5c, + 0x64, 0x0a, 0x3d, 0xcf, 0x14, 0x3a, 0x24, 0x8b, 0x89, 0x67, 0x84, 0x06, 0xda, 0x1f, 0x32, 0x5c, + 0x6d, 0x0c, 0xd9, 0xd2, 0x70, 0x9e, 0x61, 0xff, 0x65, 0xbe, 0xb8, 0xc5, 0xbd, 0xa9, 0xc4, 0xf6, + 0xe6, 0xf8, 0xfd, 0x47, 0x60, 0xa5, 0x1b, 0xcd, 0xc6, 0x13, 0xdc, 0x17, 0x36, 0xe0, 0x7d, 0x46, + 0x2f, 0x07, 0x8b, 0x9a, 0x9e, 0x70, 0x63, 0x64, 0xb8, 0x56, 0xf7, 0x01, 0x25, 0xad, 0xe3, 0x59, + 0x94, 0xf2, 0x66, 0x51, 0xce, 0xca, 0xa2, 0xf6, 0x93, 0x04, 0xd7, 0xc6, 0x43, 0x9f, 0x48, 0x72, + 0x4d, 0x58, 0x22, 0xb6, 0x63, 0x75, 0xf0, 0x90, 0x08, 0xd3, 0x04, 0xff, 0xd6, 0xbe, 0xc2, 0x4f, + 0x2d, 0x71, 0x7c, 0xb8, 0x20, 0x37, 0x34, 0xd2, 0x66, 0x6b, 0xbf, 0xc8, 0xb0, 0x7a, 0xd2, 0xac, + 0x09, 0x70, 0xfa, 0x59, 0xe7, 0x2b, 0x47, 0xfa, 0xf6, 0x58, 0xa4, 0x67, 0x3f, 0x5c, 0xa7, 0x12, + 0x89, 0x7c, 0x5d, 0xc7, 0xcd, 0xcf, 0x12, 0x5c, 0x1d, 0xfb, 0x98, 0x99, 0xf0, 0x81, 0x58, 0x22, + 0xbd, 0x56, 0x0b, 0x13, 0x22, 0x04, 0x13, 0xb1, 0x60, 0x32, 0xdf, 0x83, 0x8f, 0x7c, 0x43, 0x34, + 0x43, 0xeb, 0x00, 0xfb, 0xa6, 0xdd, 0xc1, 0x6d, 0x36, 0x69, 0x2a, 0x73, 0x92, 0x60, 0xa5, 0xfd, + 0x2e, 0xc3, 0x8d, 0x3a, 0xee, 0xe0, 0x00, 0xbf, 0xd1, 0xe7, 0xc8, 0xf8, 0xc2, 0x43, 0xd6, 0x35, + 0x56, 0x3c, 0xf5, 0x35, 0x36, 0x9d, 0x79, 0x6c, 0xef, 0x64, 0xa9, 0x7d, 0x86, 0xc5, 0xfa, 0x44, + 0xdd, 0xa4, 0xcf, 0xd4, 0xbe, 0x96, 0xe0, 0x66, 0xae, 0xf8, 0x4f, 0xa4, 0xa3, 0x53, 0xdc, 0x26, + 0x2e, 0xcc, 0x47, 0x54, 0x82, 0xee, 0xc0, 0x2c, 0x1e, 0x74, 0x84, 0x75, 0xd2, 0x73, 0x31, 0x31, + 0x8d, 0x0c, 0x44, 0x6c, 0x72, 0x16, 0x36, 0x25, 0xf2, 0xf1, 0xf9, 0xab, 0x0c, 0xb3, 0x43, 0x57, + 0x68, 0x2f, 0x2b, 0xb4, 0x12, 0x03, 0x7e, 0x2b, 0xba, 0xf2, 0xd9, 0x4f, 0x0d, 0x39, 0xef, 0xf1, + 0xaf, 0x64, 0xaa, 0x41, 0x8b, 0x3d, 0xca, 0xf8, 0x41, 0x14, 0x7d, 0x76, 0x9d, 0x63, 0xcf, 0x3c, + 0x2e, 0x57, 0x19, 0x1f, 0xab, 0x9f, 0x9c, 0xf2, 0x64, 0xba, 0x19, 0x3d, 0x99, 0x52, 0xf2, 0x27, + 0x9c, 0x47, 0x7d, 0x98, 0x13, 0x87, 0xd0, 0x3d, 0x98, 0x39, 0x08, 0xdb, 0x61, 0x02, 0x4f, 0x54, + 0xe8, 0xd0, 0x78, 0x82, 0x64, 0xbe, 0x92, 0x60, 0x49, 0x28, 0x35, 0xd3, 0x18, 0xb1, 0x5a, 0x73, + 0xa2, 0xa2, 0x2c, 0xe5, 0xa8, 0x28, 0xcb, 0xa7, 0xae, 0x28, 0x2b, 0xb1, 0x8a, 0xf2, 0xfa, 0x37, + 0x00, 0x4a, 0x97, 0x58, 0xe8, 0x19, 0x2c, 0xc4, 0x2a, 0xc1, 0xe8, 0x7a, 0x4a, 0x0c, 0x92, 0xd5, + 0x67, 0xf5, 0x46, 0x1e, 0x33, 0xe2, 0x21, 0x17, 0x96, 0x9f, 0xf6, 0x3a, 0x9d, 0x70, 0xf7, 0x6e, + 0xf4, 0x9b, 0xf8, 0x90, 0xe1, 0xfb, 0x77, 0xca, 0xfc, 0x34, 0x43, 0xba, 0xd6, 0xed, 0xdc, 0xb6, + 0x6c, 0x5f, 0x4e, 0x87, 0x55, 0x2e, 0xb4, 0x10, 0x7e, 0xbe, 0x0c, 0x2a, 0xce, 0xea, 0x62, 0xb4, + 0x83, 0x78, 0x68, 0x07, 0xa0, 0x8e, 0x3b, 0x3a, 0xb1, 0xf8, 0x26, 0x48, 0x59, 0x68, 0x34, 0x4c, + 0x3d, 0x5c, 0x19, 0x63, 0x41, 0x3c, 0xd4, 0x80, 0xc5, 0x78, 0xfd, 0x09, 0x95, 0xd9, 0xc2, 0x29, + 0xd5, 0x31, 0xf5, 0x62, 0xc6, 0x08, 0xf1, 0xd0, 0x1a, 0xcc, 0x0c, 0x4a, 0xb5, 0x88, 0x23, 0x17, + 0xca, 0xc3, 0xea, 0xf9, 0x58, 0x0f, 0xf1, 0xd0, 0x7d, 0x98, 0x13, 0xab, 0x9f, 0x68, 0x79, 0xf8, + 0xf9, 0x26, 0xd4, 0x6a, 0xd5, 0x0b, 0x29, 0xbd, 0x1c, 0x76, 0xbc, 0x46, 0x19, 0xc2, 0x4e, 0xa9, + 0x85, 0x86, 0xb0, 0x53, 0x8b, 0x9a, 0x0d, 0x58, 0x6c, 0xa4, 0x3b, 0x6a, 0x64, 0x3a, 0x6a, 0x9c, + 0xe0, 0x28, 0x25, 0x90, 0x29, 0x55, 0x39, 0xc1, 0x51, 0x22, 0x90, 0x75, 0xa6, 0x72, 0xb1, 0x30, + 0x85, 0xfe, 0x35, 0xb0, 0x8e, 0x15, 0xbe, 0xd4, 0x72, 0xfa, 0x00, 0xf1, 0xd0, 0x01, 0xac, 0x9e, + 0xf4, 0xf1, 0x84, 0xae, 0xe5, 0xf9, 0x58, 0x56, 0xaf, 0xe7, 0xb0, 0x22, 0x1e, 0x3a, 0x82, 0xca, + 0xb8, 0xa7, 0x33, 0xaa, 0xe6, 0xfd, 0x38, 0x50, 0x6f, 0xe5, 0xb4, 0x24, 0x1e, 0x3a, 0x84, 0xd5, + 0x87, 0xed, 0x76, 0x36, 0xcb, 0x9b, 0x39, 0x6b, 0x54, 0x6a, 0x35, 0x9f, 0x21, 0xf1, 0xd0, 0xe7, + 0x70, 0x39, 0x72, 0xc5, 0xa7, 0xac, 0x7a, 0x7b, 0xb0, 0x4b, 0x72, 0x3c, 0xc4, 0xd4, 0x3b, 0xf9, + 0x8d, 0x89, 0xb7, 0x71, 0xe9, 0xe3, 0x8b, 0xdb, 0x1e, 0x76, 0xf6, 0xb6, 0x74, 0xe1, 0x4f, 0xda, + 0x2e, 0xb1, 0xee, 0x77, 0x89, 0xf5, 0xbc, 0xc8, 0x9a, 0xff, 0xfd, 0x33, 0x00, 0x00, 0xff, 0xff, + 0xd4, 0xae, 0xa9, 0xee, 0x0d, 0x1e, 0x00, 0x00, } diff --git a/pkg/proto/msg/msg.proto b/pkg/proto/msg/msg.proto index 38144eec9..287340517 100644 --- a/pkg/proto/msg/msg.proto +++ b/pkg/proto/msg/msg.proto @@ -154,27 +154,118 @@ message GetWriteDiffMsgResp{ server_api_params.MsgData msgData = 3; } -message ModifyMsgReq { +message ModifyMessageReactionExtensionsReq { string operationID = 1; - string ID = 2; - int32 Index = 3; - int32 msgIndex = 4; - string opUserID = 5; - string userID = 6; - bool isFirstModify = 7; - string clientMsgID = 8; - google.protobuf.StringValue value = 9; - google.protobuf.StringValue ex = 10; - google.protobuf.StringValue attachedInfo = 11; + string sourceID = 2; + string opUserID = 3; + int32 sessionType = 4; + map reactionExtensionList = 5; + string clientMsgID = 6; + google.protobuf.StringValue ex = 7; + google.protobuf.StringValue attachedInfo = 8; + bool isReact = 9; + bool isExternalExtensions = 10; + int64 msgFirstModifyTime = 11; } - -message ModifyMsgResp { +message SetMessageReactionExtensionsReq { + string operationID = 1; + string sourceID = 2; + string opUserID = 3; + int32 sessionType = 4; + map reactionExtensionList = 5; + string clientMsgID = 6; + google.protobuf.StringValue ex = 7; + google.protobuf.StringValue attachedInfo = 8; + bool isReact = 9; + bool isExternalExtensions = 10; + int64 msgFirstModifyTime = 11; +} +message SetMessageReactionExtensionsResp { int32 errCode = 1; string errMsg = 2; - int32 Index = 4; - int32 msgIndex = 3; + string clientMsgID = 3; + int64 msgFirstModifyTime = 4; + bool isReact = 5; + repeated KeyValueResp result = 6; } + +message GetMessageListReactionExtensionsReq { + string operationID = 1; + string opUserID = 2; + string sourceID = 3; + int32 sessionType = 4; + message MessageReactionKey { + string clientMsgID = 1; + int64 msgFirstModifyTime = 2; + } + repeated MessageReactionKey messageReactionKeyList = 5; +} +message GetMessageListReactionExtensionsResp{ + int32 errCode = 1; + string errMsg = 2; + repeated SingleMessageExtensionResult singleMessageResult =3; + +} +message SingleMessageExtensionResult { + int32 errCode = 1; + string errMsg = 2; + map reactionExtensionList = 3; + string clientMsgID = 4; +} + + +message ModifyMessageReactionExtensionsResp { + int32 errCode = 1; + string errMsg = 2; + repeated ExtendMsgResp successList = 3; + repeated ExtendMsgResp failedList = 4; +} + +message DeleteMessageListReactionExtensionsReq { + string operationID = 1; + string opUserID = 2; + string sourceID = 3; + int32 sessionType = 4; + string clientMsgID = 5; + bool isExternalExtensions = 6; + int64 msgFirstModifyTime = 7; + repeated server_api_params.KeyValue reactionExtensionList = 8; +} + +message DeleteMessageListReactionExtensionsResp { + int32 errCode = 1; + string errMsg = 2; + repeated KeyValueResp result = 6; +} + +message ExtendMsgResp { + ExtendMsg extendMsg = 1; + int32 errCode = 2; + string errMsg = 3; +} + +message ExtendMsg { + map reactionExtensionList = 1; + string clientMsgID = 2; + int64 msgFirstModifyTime = 3; + string attachedInfo = 4; + string ex = 5; +} + +message KeyValueResp { + server_api_params.KeyValue keyValue = 1; + int32 errCode = 2; + string errMsg = 3; +} + +message MsgDataToModifyByMQ{ + string aggregationID = 1; + repeated MsgDataToMQ messageList = 2; + string triggerID = 3; +} + + service msg { rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); @@ -189,5 +280,8 @@ service msg { rpc GetWriteDiffMsg(GetWriteDiffMsgReq) returns(GetWriteDiffMsgResp); // modify msg - rpc ModifyMsg(ModifyMsgReq) returns(ModifyMsgResp); + rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp); + rpc GetMessageListReactionExtensions(GetMessageListReactionExtensionsReq) returns(GetMessageListReactionExtensionsResp); + rpc AddMessageReactionExtensions(ModifyMessageReactionExtensionsReq) returns(ModifyMessageReactionExtensionsResp); + rpc DeleteMessageReactionExtensions(DeleteMessageListReactionExtensionsReq) returns(DeleteMessageListReactionExtensionsResp); } diff --git a/pkg/proto/sdk_ws/ws.pb.go b/pkg/proto/sdk_ws/ws.pb.go index 6042dec52..1665fff79 100644 --- a/pkg/proto/sdk_ws/ws.pb.go +++ b/pkg/proto/sdk_ws/ws.pb.go @@ -46,7 +46,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{0} + return fileDescriptor_ws_73169a3998a579bb, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -204,7 +204,7 @@ func (m *GroupInfoForSet) Reset() { *m = GroupInfoForSet{} } func (m *GroupInfoForSet) String() string { return proto.CompactTextString(m) } func (*GroupInfoForSet) ProtoMessage() {} func (*GroupInfoForSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{1} + return fileDescriptor_ws_73169a3998a579bb, []int{1} } func (m *GroupInfoForSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoForSet.Unmarshal(m, b) @@ -309,7 +309,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{2} + return fileDescriptor_ws_73169a3998a579bb, []int{2} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -428,7 +428,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{3} + return fileDescriptor_ws_73169a3998a579bb, []int{3} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -505,7 +505,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{4} + return fileDescriptor_ws_73169a3998a579bb, []int{4} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -626,7 +626,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{5} + return fileDescriptor_ws_73169a3998a579bb, []int{5} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -711,7 +711,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{6} + return fileDescriptor_ws_73169a3998a579bb, []int{6} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -794,7 +794,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{7} + return fileDescriptor_ws_73169a3998a579bb, []int{7} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -916,7 +916,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{8} + return fileDescriptor_ws_73169a3998a579bb, []int{8} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -1061,7 +1061,7 @@ func (m *Department) Reset() { *m = Department{} } func (m *Department) String() string { return proto.CompactTextString(m) } func (*Department) ProtoMessage() {} func (*Department) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{9} + return fileDescriptor_ws_73169a3998a579bb, []int{9} } func (m *Department) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Department.Unmarshal(m, b) @@ -1173,7 +1173,7 @@ func (m *OrganizationUser) Reset() { *m = OrganizationUser{} } func (m *OrganizationUser) String() string { return proto.CompactTextString(m) } func (*OrganizationUser) ProtoMessage() {} func (*OrganizationUser) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{10} + return fileDescriptor_ws_73169a3998a579bb, []int{10} } func (m *OrganizationUser) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationUser.Unmarshal(m, b) @@ -1294,7 +1294,7 @@ func (m *DepartmentMember) Reset() { *m = DepartmentMember{} } func (m *DepartmentMember) String() string { return proto.CompactTextString(m) } func (*DepartmentMember) ProtoMessage() {} func (*DepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{11} + return fileDescriptor_ws_73169a3998a579bb, []int{11} } func (m *DepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DepartmentMember.Unmarshal(m, b) @@ -1375,7 +1375,7 @@ func (m *UserDepartmentMember) Reset() { *m = UserDepartmentMember{} } func (m *UserDepartmentMember) String() string { return proto.CompactTextString(m) } func (*UserDepartmentMember) ProtoMessage() {} func (*UserDepartmentMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{12} + return fileDescriptor_ws_73169a3998a579bb, []int{12} } func (m *UserDepartmentMember) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserDepartmentMember.Unmarshal(m, b) @@ -1421,7 +1421,7 @@ func (m *UserInDepartment) Reset() { *m = UserInDepartment{} } func (m *UserInDepartment) String() string { return proto.CompactTextString(m) } func (*UserInDepartment) ProtoMessage() {} func (*UserInDepartment) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{13} + return fileDescriptor_ws_73169a3998a579bb, []int{13} } func (m *UserInDepartment) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInDepartment.Unmarshal(m, b) @@ -1470,7 +1470,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{14} + return fileDescriptor_ws_73169a3998a579bb, []int{14} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1529,7 +1529,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{15} + return fileDescriptor_ws_73169a3998a579bb, []int{15} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1567,7 +1567,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{16} + return fileDescriptor_ws_73169a3998a579bb, []int{16} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1608,7 +1608,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{17} + return fileDescriptor_ws_73169a3998a579bb, []int{17} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1669,7 +1669,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{18} + return fileDescriptor_ws_73169a3998a579bb, []int{18} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1722,7 +1722,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{19} + return fileDescriptor_ws_73169a3998a579bb, []int{19} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1771,7 +1771,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{20} + return fileDescriptor_ws_73169a3998a579bb, []int{20} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1839,7 +1839,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{21} + return fileDescriptor_ws_73169a3998a579bb, []int{21} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1912,7 +1912,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{22} + return fileDescriptor_ws_73169a3998a579bb, []int{22} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -2101,7 +2101,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{23} + return fileDescriptor_ws_73169a3998a579bb, []int{23} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -2169,7 +2169,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{24} + return fileDescriptor_ws_73169a3998a579bb, []int{24} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -2226,7 +2226,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{25} + return fileDescriptor_ws_73169a3998a579bb, []int{25} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -2295,7 +2295,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{26} + return fileDescriptor_ws_73169a3998a579bb, []int{26} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -2350,7 +2350,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{27} + return fileDescriptor_ws_73169a3998a579bb, []int{27} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -2406,7 +2406,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{28} + return fileDescriptor_ws_73169a3998a579bb, []int{28} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2462,7 +2462,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{29} + return fileDescriptor_ws_73169a3998a579bb, []int{29} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2525,7 +2525,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{30} + return fileDescriptor_ws_73169a3998a579bb, []int{30} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2588,7 +2588,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{31} + return fileDescriptor_ws_73169a3998a579bb, []int{31} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2651,7 +2651,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{32} + return fileDescriptor_ws_73169a3998a579bb, []int{32} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2714,7 +2714,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{33} + return fileDescriptor_ws_73169a3998a579bb, []int{33} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2776,7 +2776,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{34} + return fileDescriptor_ws_73169a3998a579bb, []int{34} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2830,7 +2830,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{35} + return fileDescriptor_ws_73169a3998a579bb, []int{35} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2886,7 +2886,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{36} + return fileDescriptor_ws_73169a3998a579bb, []int{36} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2955,7 +2955,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{37} + return fileDescriptor_ws_73169a3998a579bb, []int{37} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -3016,7 +3016,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{38} + return fileDescriptor_ws_73169a3998a579bb, []int{38} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -3070,7 +3070,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{39} + return fileDescriptor_ws_73169a3998a579bb, []int{39} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -3125,7 +3125,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{40} + return fileDescriptor_ws_73169a3998a579bb, []int{40} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -3185,7 +3185,7 @@ func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } func (*OrganizationChangedTips) ProtoMessage() {} func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{41} + return fileDescriptor_ws_73169a3998a579bb, []int{41} } func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) @@ -3232,7 +3232,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{42} + return fileDescriptor_ws_73169a3998a579bb, []int{42} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -3285,7 +3285,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{43} + return fileDescriptor_ws_73169a3998a579bb, []int{43} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -3331,7 +3331,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{44} + return fileDescriptor_ws_73169a3998a579bb, []int{44} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -3371,7 +3371,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{45} + return fileDescriptor_ws_73169a3998a579bb, []int{45} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -3418,7 +3418,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{46} + return fileDescriptor_ws_73169a3998a579bb, []int{46} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3466,7 +3466,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{47} + return fileDescriptor_ws_73169a3998a579bb, []int{47} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3519,7 +3519,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{48} + return fileDescriptor_ws_73169a3998a579bb, []int{48} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3557,7 +3557,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{49} + return fileDescriptor_ws_73169a3998a579bb, []int{49} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3595,7 +3595,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{50} + return fileDescriptor_ws_73169a3998a579bb, []int{50} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3633,7 +3633,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{51} + return fileDescriptor_ws_73169a3998a579bb, []int{51} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3672,7 +3672,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{52} + return fileDescriptor_ws_73169a3998a579bb, []int{52} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3713,7 +3713,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{53} + return fileDescriptor_ws_73169a3998a579bb, []int{53} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3767,7 +3767,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{54} + return fileDescriptor_ws_73169a3998a579bb, []int{54} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3822,7 +3822,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{55} + return fileDescriptor_ws_73169a3998a579bb, []int{55} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3876,7 +3876,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{56} + return fileDescriptor_ws_73169a3998a579bb, []int{56} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3922,7 +3922,7 @@ func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } func (*ResponsePagination) ProtoMessage() {} func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{57} + return fileDescriptor_ws_73169a3998a579bb, []int{57} } func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) @@ -3979,7 +3979,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{58} + return fileDescriptor_ws_73169a3998a579bb, []int{58} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -4368,7 +4368,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{59} + return fileDescriptor_ws_73169a3998a579bb, []int{59} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4698,7 +4698,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{60} + return fileDescriptor_ws_73169a3998a579bb, []int{60} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4808,7 +4808,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{61} + return fileDescriptor_ws_73169a3998a579bb, []int{61} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4863,7 +4863,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{62} + return fileDescriptor_ws_73169a3998a579bb, []int{62} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4925,7 +4925,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{63} + return fileDescriptor_ws_73169a3998a579bb, []int{63} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4987,7 +4987,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{64} + return fileDescriptor_ws_73169a3998a579bb, []int{64} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -5049,7 +5049,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{65} + return fileDescriptor_ws_73169a3998a579bb, []int{65} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -5111,7 +5111,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{66} + return fileDescriptor_ws_73169a3998a579bb, []int{66} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -5169,7 +5169,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{67} + return fileDescriptor_ws_73169a3998a579bb, []int{67} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -5204,7 +5204,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{68} + return fileDescriptor_ws_73169a3998a579bb, []int{68} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -5272,7 +5272,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{69} + return fileDescriptor_ws_73169a3998a579bb, []int{69} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -5326,7 +5326,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{70} + return fileDescriptor_ws_73169a3998a579bb, []int{70} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -5377,7 +5377,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{71} + return fileDescriptor_ws_73169a3998a579bb, []int{71} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -5412,7 +5412,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{72} + return fileDescriptor_ws_73169a3998a579bb, []int{72} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -5477,7 +5477,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{73} + return fileDescriptor_ws_73169a3998a579bb, []int{73} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5510,7 +5510,7 @@ func (m *SignalGetRoomByGroupIDReq) Reset() { *m = SignalGetRoomByGroupI func (m *SignalGetRoomByGroupIDReq) String() string { return proto.CompactTextString(m) } func (*SignalGetRoomByGroupIDReq) ProtoMessage() {} func (*SignalGetRoomByGroupIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{74} + return fileDescriptor_ws_73169a3998a579bb, []int{74} } func (m *SignalGetRoomByGroupIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetRoomByGroupIDReq.Unmarshal(m, b) @@ -5564,7 +5564,7 @@ func (m *SignalGetRoomByGroupIDReply) Reset() { *m = SignalGetRoomByGrou func (m *SignalGetRoomByGroupIDReply) String() string { return proto.CompactTextString(m) } func (*SignalGetRoomByGroupIDReply) ProtoMessage() {} func (*SignalGetRoomByGroupIDReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{75} + return fileDescriptor_ws_73169a3998a579bb, []int{75} } func (m *SignalGetRoomByGroupIDReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetRoomByGroupIDReply.Unmarshal(m, b) @@ -5618,7 +5618,7 @@ func (m *SignalOnRoomParticipantConnectedReq) Reset() { *m = SignalOnRoo func (m *SignalOnRoomParticipantConnectedReq) String() string { return proto.CompactTextString(m) } func (*SignalOnRoomParticipantConnectedReq) ProtoMessage() {} func (*SignalOnRoomParticipantConnectedReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{76} + return fileDescriptor_ws_73169a3998a579bb, []int{76} } func (m *SignalOnRoomParticipantConnectedReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalOnRoomParticipantConnectedReq.Unmarshal(m, b) @@ -5674,7 +5674,7 @@ func (m *SignalOnRoomParticipantDisconnectedReq) Reset() { func (m *SignalOnRoomParticipantDisconnectedReq) String() string { return proto.CompactTextString(m) } func (*SignalOnRoomParticipantDisconnectedReq) ProtoMessage() {} func (*SignalOnRoomParticipantDisconnectedReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{77} + return fileDescriptor_ws_73169a3998a579bb, []int{77} } func (m *SignalOnRoomParticipantDisconnectedReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalOnRoomParticipantDisconnectedReq.Unmarshal(m, b) @@ -5729,7 +5729,7 @@ func (m *SignalGetTokenByRoomIDReq) Reset() { *m = SignalGetTokenByRoomI func (m *SignalGetTokenByRoomIDReq) String() string { return proto.CompactTextString(m) } func (*SignalGetTokenByRoomIDReq) ProtoMessage() {} func (*SignalGetTokenByRoomIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{78} + return fileDescriptor_ws_73169a3998a579bb, []int{78} } func (m *SignalGetTokenByRoomIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetTokenByRoomIDReq.Unmarshal(m, b) @@ -5789,7 +5789,7 @@ func (m *SignalGetTokenByRoomIDReply) Reset() { *m = SignalGetTokenByRoo func (m *SignalGetTokenByRoomIDReply) String() string { return proto.CompactTextString(m) } func (*SignalGetTokenByRoomIDReply) ProtoMessage() {} func (*SignalGetTokenByRoomIDReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{79} + return fileDescriptor_ws_73169a3998a579bb, []int{79} } func (m *SignalGetTokenByRoomIDReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetTokenByRoomIDReply.Unmarshal(m, b) @@ -5837,7 +5837,7 @@ func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } func (*DelMsgListReq) ProtoMessage() {} func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{80} + return fileDescriptor_ws_73169a3998a579bb, []int{80} } func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) @@ -5897,7 +5897,7 @@ func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } func (*DelMsgListResp) ProtoMessage() {} func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{81} + return fileDescriptor_ws_73169a3998a579bb, []int{81} } func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) @@ -5943,7 +5943,7 @@ func (m *SetAppBackgroundStatusReq) Reset() { *m = SetAppBackgroundStatu func (m *SetAppBackgroundStatusReq) String() string { return proto.CompactTextString(m) } func (*SetAppBackgroundStatusReq) ProtoMessage() {} func (*SetAppBackgroundStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{82} + return fileDescriptor_ws_73169a3998a579bb, []int{82} } func (m *SetAppBackgroundStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetAppBackgroundStatusReq.Unmarshal(m, b) @@ -5989,7 +5989,7 @@ func (m *SetAppBackgroundStatusResp) Reset() { *m = SetAppBackgroundStat func (m *SetAppBackgroundStatusResp) String() string { return proto.CompactTextString(m) } func (*SetAppBackgroundStatusResp) ProtoMessage() {} func (*SetAppBackgroundStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{83} + return fileDescriptor_ws_73169a3998a579bb, []int{83} } func (m *SetAppBackgroundStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetAppBackgroundStatusResp.Unmarshal(m, b) @@ -6024,23 +6024,22 @@ func (m *SetAppBackgroundStatusResp) GetErrMsg() string { } type ExtendMsgSet struct { - ID string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` - // repeated ExtendMsg extendMsgs = 2; - LatestUpdateTime int32 `protobuf:"varint,3,opt,name=latestUpdateTime" json:"latestUpdateTime,omitempty"` - AttachedInfo string `protobuf:"bytes,4,opt,name=attachedInfo" json:"attachedInfo,omitempty"` - Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` - ExtendMsgNum int32 `protobuf:"varint,6,opt,name=extendMsgNum" json:"extendMsgNum,omitempty"` - CreateTime int32 `protobuf:"varint,7,opt,name=createTime" json:"createTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SourceID string `protobuf:"bytes,1,opt,name=sourceID" json:"sourceID,omitempty"` + SessionType int32 `protobuf:"varint,2,opt,name=sessionType" json:"sessionType,omitempty"` + ExtendMsgs map[string]*ExtendMsg `protobuf:"bytes,3,rep,name=extendMsgs" json:"extendMsgs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MaxMsgUpdateTime int64 `protobuf:"varint,4,opt,name=MaxMsgUpdateTime" json:"MaxMsgUpdateTime,omitempty"` + ExtendMsgNum int32 `protobuf:"varint,5,opt,name=extendMsgNum" json:"extendMsgNum,omitempty"` + CreateTime int64 `protobuf:"varint,6,opt,name=createTime" json:"createTime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ExtendMsgSet) Reset() { *m = ExtendMsgSet{} } func (m *ExtendMsgSet) String() string { return proto.CompactTextString(m) } func (*ExtendMsgSet) ProtoMessage() {} func (*ExtendMsgSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{84} + return fileDescriptor_ws_73169a3998a579bb, []int{84} } func (m *ExtendMsgSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExtendMsgSet.Unmarshal(m, b) @@ -6060,32 +6059,32 @@ func (m *ExtendMsgSet) XXX_DiscardUnknown() { var xxx_messageInfo_ExtendMsgSet proto.InternalMessageInfo -func (m *ExtendMsgSet) GetID() string { +func (m *ExtendMsgSet) GetSourceID() string { if m != nil { - return m.ID + return m.SourceID } return "" } -func (m *ExtendMsgSet) GetLatestUpdateTime() int32 { +func (m *ExtendMsgSet) GetSessionType() int32 { if m != nil { - return m.LatestUpdateTime + return m.SessionType } return 0 } -func (m *ExtendMsgSet) GetAttachedInfo() string { +func (m *ExtendMsgSet) GetExtendMsgs() map[string]*ExtendMsg { if m != nil { - return m.AttachedInfo + return m.ExtendMsgs } - return "" + return nil } -func (m *ExtendMsgSet) GetEx() string { +func (m *ExtendMsgSet) GetMaxMsgUpdateTime() int64 { if m != nil { - return m.Ex + return m.MaxMsgUpdateTime } - return "" + return 0 } func (m *ExtendMsgSet) GetExtendMsgNum() int32 { @@ -6095,61 +6094,131 @@ func (m *ExtendMsgSet) GetExtendMsgNum() int32 { return 0 } -func (m *ExtendMsgSet) GetCreateTime() int32 { +func (m *ExtendMsgSet) GetCreateTime() int64 { if m != nil { return m.CreateTime } return 0 } -type ReactionExtendMsgSet struct { - UserKey string `protobuf:"bytes,1,opt,name=userKey" json:"userKey,omitempty"` +type ExtendMsg struct { + ReactionExtensionList map[string]*KeyValue `protobuf:"bytes,1,rep,name=reactionExtensionList" json:"reactionExtensionList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ClientMsgID string `protobuf:"bytes,2,opt,name=clientMsgID" json:"clientMsgID,omitempty"` + MsgFirstModifyTime int64 `protobuf:"varint,3,opt,name=msgFirstModifyTime" json:"msgFirstModifyTime,omitempty"` + AttachedInfo string `protobuf:"bytes,4,opt,name=attachedInfo" json:"attachedInfo,omitempty"` + Ex string `protobuf:"bytes,5,opt,name=ex" json:"ex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExtendMsg) Reset() { *m = ExtendMsg{} } +func (m *ExtendMsg) String() string { return proto.CompactTextString(m) } +func (*ExtendMsg) ProtoMessage() {} +func (*ExtendMsg) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_73169a3998a579bb, []int{85} +} +func (m *ExtendMsg) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExtendMsg.Unmarshal(m, b) +} +func (m *ExtendMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExtendMsg.Marshal(b, m, deterministic) +} +func (dst *ExtendMsg) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtendMsg.Merge(dst, src) +} +func (m *ExtendMsg) XXX_Size() int { + return xxx_messageInfo_ExtendMsg.Size(m) +} +func (m *ExtendMsg) XXX_DiscardUnknown() { + xxx_messageInfo_ExtendMsg.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtendMsg proto.InternalMessageInfo + +func (m *ExtendMsg) GetReactionExtensionList() map[string]*KeyValue { + if m != nil { + return m.ReactionExtensionList + } + return nil +} + +func (m *ExtendMsg) GetClientMsgID() string { + if m != nil { + return m.ClientMsgID + } + return "" +} + +func (m *ExtendMsg) GetMsgFirstModifyTime() int64 { + if m != nil { + return m.MsgFirstModifyTime + } + return 0 +} + +func (m *ExtendMsg) GetAttachedInfo() string { + if m != nil { + return m.AttachedInfo + } + return "" +} + +func (m *ExtendMsg) GetEx() string { + if m != nil { + return m.Ex + } + return "" +} + +type KeyValue struct { + TypeKey string `protobuf:"bytes,1,opt,name=typeKey" json:"typeKey,omitempty"` Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` - LatestUpdateTime int32 `protobuf:"varint,3,opt,name=latestUpdateTime" json:"latestUpdateTime,omitempty"` + LatestUpdateTime int64 `protobuf:"varint,3,opt,name=latestUpdateTime" json:"latestUpdateTime,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } -func (m *ReactionExtendMsgSet) Reset() { *m = ReactionExtendMsgSet{} } -func (m *ReactionExtendMsgSet) String() string { return proto.CompactTextString(m) } -func (*ReactionExtendMsgSet) ProtoMessage() {} -func (*ReactionExtendMsgSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_d54a5080f0ac6b4f, []int{85} +func (m *KeyValue) Reset() { *m = KeyValue{} } +func (m *KeyValue) String() string { return proto.CompactTextString(m) } +func (*KeyValue) ProtoMessage() {} +func (*KeyValue) Descriptor() ([]byte, []int) { + return fileDescriptor_ws_73169a3998a579bb, []int{86} } -func (m *ReactionExtendMsgSet) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ReactionExtendMsgSet.Unmarshal(m, b) +func (m *KeyValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyValue.Unmarshal(m, b) } -func (m *ReactionExtendMsgSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ReactionExtendMsgSet.Marshal(b, m, deterministic) +func (m *KeyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyValue.Marshal(b, m, deterministic) } -func (dst *ReactionExtendMsgSet) XXX_Merge(src proto.Message) { - xxx_messageInfo_ReactionExtendMsgSet.Merge(dst, src) +func (dst *KeyValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyValue.Merge(dst, src) } -func (m *ReactionExtendMsgSet) XXX_Size() int { - return xxx_messageInfo_ReactionExtendMsgSet.Size(m) +func (m *KeyValue) XXX_Size() int { + return xxx_messageInfo_KeyValue.Size(m) } -func (m *ReactionExtendMsgSet) XXX_DiscardUnknown() { - xxx_messageInfo_ReactionExtendMsgSet.DiscardUnknown(m) +func (m *KeyValue) XXX_DiscardUnknown() { + xxx_messageInfo_KeyValue.DiscardUnknown(m) } -var xxx_messageInfo_ReactionExtendMsgSet proto.InternalMessageInfo +var xxx_messageInfo_KeyValue proto.InternalMessageInfo -func (m *ReactionExtendMsgSet) GetUserKey() string { +func (m *KeyValue) GetTypeKey() string { if m != nil { - return m.UserKey + return m.TypeKey } return "" } -func (m *ReactionExtendMsgSet) GetValue() string { +func (m *KeyValue) GetValue() string { if m != nil { return m.Value } return "" } -func (m *ReactionExtendMsgSet) GetLatestUpdateTime() int32 { +func (m *KeyValue) GetLatestUpdateTime() int64 { if m != nil { return m.LatestUpdateTime } @@ -6246,260 +6315,271 @@ func init() { proto.RegisterType((*SetAppBackgroundStatusReq)(nil), "server_api_params.SetAppBackgroundStatusReq") proto.RegisterType((*SetAppBackgroundStatusResp)(nil), "server_api_params.SetAppBackgroundStatusResp") proto.RegisterType((*ExtendMsgSet)(nil), "server_api_params.ExtendMsgSet") - proto.RegisterType((*ReactionExtendMsgSet)(nil), "server_api_params.ReactionExtendMsgSet") + proto.RegisterMapType((map[string]*ExtendMsg)(nil), "server_api_params.ExtendMsgSet.ExtendMsgsEntry") + proto.RegisterType((*ExtendMsg)(nil), "server_api_params.ExtendMsg") + proto.RegisterMapType((map[string]*KeyValue)(nil), "server_api_params.ExtendMsg.ReactionExtensionListEntry") + proto.RegisterType((*KeyValue)(nil), "server_api_params.KeyValue") } -func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_d54a5080f0ac6b4f) } +func init() { proto.RegisterFile("sdk_ws/ws.proto", fileDescriptor_ws_73169a3998a579bb) } -var fileDescriptor_ws_d54a5080f0ac6b4f = []byte{ - // 3977 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x5b, 0x6f, 0x1d, 0x57, - 0x57, 0x9d, 0x39, 0x17, 0xfb, 0xac, 0xe3, 0xcb, 0xf1, 0x24, 0x71, 0x4f, 0xdd, 0x34, 0x98, 0x69, - 0x14, 0x4a, 0x48, 0x1d, 0x94, 0x5e, 0x44, 0x6f, 0x41, 0xbe, 0x24, 0x8e, 0xdb, 0x1c, 0xdb, 0x9d, - 0x93, 0x34, 0xa8, 0xad, 0x14, 0xc6, 0x67, 0xb6, 0x8f, 0xa7, 0x9e, 0x33, 0x33, 0x9e, 0x8b, 0x13, - 0xf3, 0x00, 0x12, 0x20, 0x40, 0xe2, 0x01, 0x09, 0x71, 0x91, 0xe0, 0x8d, 0x17, 0x04, 0x42, 0x15, - 0x42, 0x80, 0x90, 0x40, 0x08, 0x55, 0x3c, 0x20, 0x81, 0x44, 0xdf, 0x91, 0x40, 0xf0, 0xc4, 0xc3, - 0xf7, 0x07, 0x3e, 0xe9, 0x93, 0xfa, 0x69, 0xef, 0xb5, 0x67, 0x66, 0xef, 0x99, 0x39, 0x97, 0x58, - 0x56, 0x93, 0x28, 0xdf, 0x9b, 0xd7, 0x9a, 0xbd, 0xd6, 0x5e, 0xf7, 0xbd, 0xf6, 0xe5, 0x18, 0xe6, - 0x43, 0xeb, 0xf0, 0xe1, 0xa3, 0xf0, 0xfa, 0xa3, 0x70, 0xc5, 0x0f, 0xbc, 0xc8, 0xd3, 0x16, 0x42, - 0x12, 0x1c, 0x93, 0xe0, 0xa1, 0xe9, 0xdb, 0x0f, 0x7d, 0x33, 0x30, 0x07, 0xe1, 0xd2, 0xca, 0x8e, - 0x4f, 0xdc, 0x37, 0xb7, 0x3a, 0x6f, 0x76, 0xd9, 0xa7, 0xeb, 0xfe, 0x61, 0xff, 0x3a, 0x1b, 0x7c, - 0x3d, 0x21, 0x0e, 0x4c, 0xdf, 0x27, 0x01, 0x67, 0xa1, 0xff, 0x4f, 0x15, 0x1a, 0x9b, 0x81, 0x17, - 0xfb, 0x5b, 0xee, 0xbe, 0xa7, 0xb5, 0x61, 0xaa, 0xcf, 0x80, 0x8d, 0xb6, 0xb2, 0xac, 0xbc, 0xd1, - 0x30, 0x12, 0x50, 0xbb, 0x08, 0x0d, 0xf6, 0xe7, 0xb6, 0x39, 0x20, 0x6d, 0x95, 0x7d, 0xcb, 0x10, - 0x9a, 0x0e, 0x33, 0xae, 0x17, 0xd9, 0xfb, 0x76, 0xcf, 0x8c, 0x6c, 0xcf, 0x6d, 0x57, 0xd8, 0x00, - 0x09, 0x47, 0xc7, 0xd8, 0x6e, 0x14, 0x78, 0x56, 0xdc, 0x63, 0x63, 0xaa, 0x38, 0x46, 0xc4, 0xd1, - 0xf9, 0xf7, 0xcd, 0x1e, 0xb9, 0x6f, 0xdc, 0x6d, 0xd7, 0x70, 0x7e, 0x0e, 0x6a, 0xcb, 0xd0, 0xf4, - 0x1e, 0xb9, 0x24, 0xb8, 0x1f, 0x92, 0x60, 0x6b, 0xa3, 0x5d, 0x67, 0x5f, 0x45, 0x94, 0x76, 0x09, - 0xa0, 0x17, 0x10, 0x33, 0x22, 0xf7, 0xec, 0x01, 0x69, 0x4f, 0x2d, 0x2b, 0x6f, 0xcc, 0x1a, 0x02, - 0x86, 0x72, 0x18, 0x90, 0xc1, 0x1e, 0x09, 0xd6, 0xbd, 0xd8, 0x8d, 0xda, 0xd3, 0x6c, 0x80, 0x88, - 0xd2, 0xe6, 0x40, 0x25, 0x8f, 0xdb, 0x0d, 0xc6, 0x5a, 0x25, 0x8f, 0xb5, 0x45, 0xa8, 0x87, 0x91, - 0x19, 0xc5, 0x61, 0x1b, 0x96, 0x95, 0x37, 0x6a, 0x06, 0x87, 0xb4, 0xcb, 0x30, 0xcb, 0xf8, 0x7a, - 0x89, 0x34, 0x4d, 0x46, 0x22, 0x23, 0x53, 0x8b, 0xdd, 0x3b, 0xf1, 0x49, 0x7b, 0x86, 0x31, 0xc8, - 0x10, 0xda, 0x55, 0x68, 0xb9, 0x84, 0x58, 0x9f, 0x91, 0x20, 0xb3, 0xda, 0x2c, 0x1b, 0x54, 0xc0, - 0x6b, 0x57, 0x60, 0xce, 0xf1, 0xbc, 0xc3, 0x0e, 0x13, 0x95, 0xfa, 0xa9, 0x3d, 0xc7, 0x46, 0xe6, - 0xb0, 0xda, 0x35, 0x58, 0x30, 0x7d, 0xdf, 0x39, 0x41, 0xd4, 0xed, 0xc0, 0x26, 0xae, 0xd5, 0x9e, - 0x67, 0x43, 0x8b, 0x1f, 0xb4, 0x77, 0x61, 0x51, 0xf4, 0xcf, 0x7d, 0xdf, 0x4a, 0x6c, 0xd7, 0x62, - 0xa6, 0x19, 0xf2, 0x55, 0x5b, 0x01, 0x4d, 0xfa, 0x82, 0x26, 0x58, 0x60, 0x26, 0x28, 0xf9, 0xa2, - 0xff, 0x41, 0x05, 0xe6, 0xd3, 0x08, 0xbb, 0xed, 0x05, 0x5d, 0x12, 0x3d, 0xc3, 0x71, 0x86, 0x31, - 0x50, 0x4f, 0x63, 0x60, 0xb3, 0xc4, 0x4f, 0x34, 0xb6, 0x9a, 0x37, 0x5e, 0x5d, 0xe9, 0x7b, 0x5e, - 0xdf, 0x21, 0x98, 0x48, 0x7b, 0xf1, 0xfe, 0xca, 0x96, 0x1b, 0xbd, 0x75, 0xe3, 0x33, 0xd3, 0x89, - 0x49, 0x89, 0x13, 0xd7, 0x0b, 0x4e, 0x9c, 0x1e, 0xcf, 0x26, 0xef, 0xe1, 0xad, 0x32, 0x0f, 0x37, - 0xc6, 0xf3, 0x29, 0x52, 0xe9, 0xdf, 0xa9, 0x70, 0x8e, 0xb9, 0x85, 0x63, 0x63, 0xc7, 0x19, 0x53, - 0x02, 0x16, 0xa1, 0x1e, 0xa3, 0xb3, 0xd1, 0x2f, 0x1c, 0xa2, 0x2e, 0x0b, 0x3c, 0x87, 0xdc, 0x25, - 0xc7, 0xc4, 0x61, 0x1e, 0xa9, 0x19, 0x19, 0x42, 0x5b, 0x82, 0xe9, 0xaf, 0x3c, 0xdb, 0x65, 0x81, - 0x55, 0x65, 0x1f, 0x53, 0x98, 0x7e, 0x73, 0xed, 0xde, 0xa1, 0x4b, 0x7d, 0x8d, 0x7e, 0x48, 0x61, - 0xd1, 0x45, 0x75, 0xd9, 0x45, 0x57, 0x60, 0xce, 0xf4, 0xfd, 0x8e, 0xe9, 0xf6, 0x49, 0x80, 0x93, - 0x4e, 0x61, 0x3a, 0xc8, 0x58, 0x5a, 0x10, 0xe8, 0x4c, 0x5d, 0x2f, 0x0e, 0x7a, 0x84, 0x59, 0xbb, - 0x66, 0x08, 0x18, 0xca, 0xc7, 0xf3, 0x49, 0x20, 0xe4, 0x31, 0xa6, 0x7e, 0x0e, 0xcb, 0x43, 0x02, - 0xd2, 0x90, 0xa0, 0x85, 0x24, 0x8e, 0xc8, 0x2d, 0xd7, 0x62, 0x4a, 0x35, 0x79, 0x21, 0xc9, 0x50, - 0xb4, 0x40, 0xd8, 0xee, 0xb1, 0x1d, 0xa5, 0xe5, 0x6a, 0x06, 0x0b, 0x84, 0x84, 0xd4, 0x7f, 0x4b, - 0x81, 0xb9, 0xdd, 0x78, 0xcf, 0xb1, 0x7b, 0x0c, 0x41, 0x8d, 0x9f, 0x99, 0x58, 0x91, 0x4c, 0x2c, - 0x1a, 0x4a, 0x1d, 0x6e, 0xa8, 0x8a, 0x6c, 0xa8, 0x45, 0xa8, 0xf7, 0x89, 0x6b, 0x91, 0x80, 0x1b, - 0x9e, 0x43, 0x5c, 0xa1, 0x5a, 0xa2, 0x90, 0xfe, 0xdf, 0x2a, 0x4c, 0x7f, 0xcf, 0x22, 0x2c, 0x43, - 0xd3, 0x3f, 0xf0, 0x5c, 0xb2, 0x1d, 0xd3, 0xe0, 0xe3, 0xb2, 0x88, 0x28, 0xed, 0x3c, 0xd4, 0xf6, - 0xec, 0x20, 0x3a, 0x60, 0xde, 0x9f, 0x35, 0x10, 0xa0, 0x58, 0x32, 0x30, 0x6d, 0x74, 0x79, 0xc3, - 0x40, 0x80, 0x2b, 0x34, 0x9d, 0x7a, 0x48, 0x5e, 0x0a, 0x1a, 0x85, 0xa5, 0xa0, 0x18, 0x41, 0x50, - 0x1a, 0x41, 0x57, 0xa1, 0xd5, 0x77, 0xbc, 0x3d, 0xd3, 0x31, 0x48, 0xef, 0xb8, 0x13, 0xf6, 0x77, - 0xfc, 0x88, 0xb9, 0xbb, 0x66, 0x14, 0xf0, 0xd4, 0x3e, 0x4c, 0xc4, 0x6e, 0x14, 0x70, 0x77, 0xa7, - 0xb0, 0xfe, 0x43, 0x05, 0x00, 0xd3, 0x8e, 0x99, 0x38, 0xb7, 0x96, 0x29, 0xc5, 0xb5, 0x6c, 0x11, - 0xea, 0x01, 0x19, 0x98, 0xc1, 0x61, 0x92, 0x6a, 0x08, 0xe5, 0x14, 0xab, 0x14, 0x14, 0xfb, 0x00, - 0x60, 0x9f, 0xcd, 0x43, 0xf9, 0x30, 0x93, 0xd3, 0xc2, 0x50, 0xe8, 0x12, 0x56, 0x12, 0x6f, 0x1b, - 0xc2, 0x70, 0x9a, 0xc7, 0xa6, 0x65, 0xf1, 0x74, 0xa9, 0x61, 0x1e, 0xa7, 0x88, 0x92, 0x6c, 0xa9, - 0x8f, 0xc8, 0x96, 0xa9, 0x34, 0xb8, 0x7e, 0xa0, 0x40, 0x63, 0xcd, 0x31, 0x7b, 0x87, 0x13, 0xaa, - 0x2e, 0xab, 0xa8, 0x16, 0x54, 0xdc, 0x84, 0xd9, 0x3d, 0xca, 0x2e, 0x51, 0x81, 0x59, 0xa1, 0x79, - 0xe3, 0xa7, 0x4b, 0xb4, 0x94, 0x93, 0xcb, 0x90, 0xe9, 0x64, 0x75, 0xab, 0xe3, 0xd5, 0xad, 0x8d, - 0x50, 0x37, 0x5d, 0x2f, 0xf4, 0x3f, 0xae, 0xc0, 0x0c, 0x2b, 0xab, 0x06, 0x39, 0x8a, 0x49, 0x18, - 0x69, 0x1f, 0xc1, 0x74, 0x9c, 0x88, 0xaa, 0x4c, 0x2a, 0x6a, 0x4a, 0xa2, 0xbd, 0xcf, 0xd7, 0x43, - 0x46, 0xaf, 0x32, 0xfa, 0x8b, 0x25, 0xf4, 0xe9, 0x02, 0x6b, 0x64, 0xc3, 0xe9, 0x4a, 0x78, 0x60, - 0xba, 0x96, 0x43, 0x0c, 0x12, 0xc6, 0x4e, 0xc4, 0x6b, 0xb3, 0x84, 0xc3, 0x48, 0x3b, 0xea, 0x84, - 0x7d, 0xbe, 0x4e, 0x72, 0x88, 0x5a, 0x07, 0xc7, 0xd1, 0x4f, 0xa8, 0x7a, 0x86, 0xa0, 0x09, 0x1f, - 0x90, 0x23, 0xe6, 0x21, 0x4c, 0xcf, 0x04, 0xcc, 0xe6, 0xe4, 0x56, 0xc3, 0x40, 0x90, 0x70, 0xd4, - 0xc5, 0x08, 0x33, 0x06, 0xd8, 0x88, 0x09, 0x98, 0x42, 0x1f, 0x26, 0x17, 0x72, 0x28, 0x14, 0xf2, - 0x42, 0xb9, 0x6d, 0x96, 0x95, 0xdb, 0xff, 0xaa, 0xc0, 0x2c, 0x26, 0x61, 0xe2, 0x9a, 0x4b, 0x34, - 0x5b, 0xbc, 0x81, 0x14, 0x8b, 0x02, 0x86, 0xea, 0x42, 0xa1, 0x6d, 0xb9, 0xec, 0x49, 0x38, 0x1a, - 0xd0, 0x14, 0xbe, 0x2d, 0x95, 0x3f, 0x11, 0x95, 0xcc, 0xb2, 0x29, 0x96, 0x41, 0x01, 0x43, 0x0b, - 0x47, 0xe4, 0x49, 0x31, 0x96, 0xc2, 0x94, 0x36, 0xf2, 0xd2, 0xf9, 0x31, 0xca, 0x04, 0x0c, 0xf5, - 0x52, 0xe4, 0x25, 0x73, 0xa3, 0xa9, 0x33, 0x04, 0x72, 0xe6, 0xf3, 0xe2, 0xf2, 0x97, 0xc2, 0x85, - 0xd8, 0x68, 0x8c, 0x8c, 0x0d, 0x90, 0x62, 0x43, 0x4e, 0xd1, 0x66, 0x21, 0x45, 0x2f, 0xc3, 0x2c, - 0xf2, 0xc9, 0x2d, 0x7f, 0x12, 0x52, 0x8e, 0xb0, 0xd9, 0x7c, 0x84, 0xc9, 0x31, 0x32, 0x37, 0x24, - 0x46, 0xe6, 0xd3, 0xbc, 0xfb, 0x1b, 0x15, 0x60, 0x83, 0xf8, 0x66, 0x10, 0x0d, 0x88, 0x1b, 0x51, - 0xf5, 0xac, 0x14, 0x4a, 0x9d, 0x2b, 0xe1, 0xc4, 0x55, 0x4b, 0x95, 0x57, 0x2d, 0x0d, 0xaa, 0xcc, - 0xe0, 0xe8, 0x4d, 0xf6, 0x37, 0x35, 0xa6, 0x6f, 0x06, 0xc8, 0x0d, 0x53, 0x25, 0x85, 0xe9, 0xaa, - 0xe4, 0x05, 0x16, 0x5f, 0xc7, 0x6a, 0x06, 0x02, 0xb4, 0x84, 0x64, 0xf3, 0xb1, 0x5d, 0x40, 0x1d, - 0x57, 0x19, 0x19, 0x3b, 0x76, 0xe3, 0x72, 0x15, 0x5a, 0x61, 0xbc, 0x97, 0x29, 0xb7, 0x1d, 0x0f, - 0x78, 0xd2, 0x14, 0xf0, 0xd4, 0xa8, 0xb8, 0xa3, 0xa1, 0x83, 0x70, 0xe1, 0xcb, 0x10, 0xf9, 0x4e, - 0x46, 0xff, 0x37, 0x15, 0x5a, 0x3b, 0x41, 0xdf, 0x74, 0xed, 0x5f, 0x49, 0x3b, 0xf6, 0x53, 0x35, - 0x00, 0xcb, 0xd0, 0x24, 0x6e, 0xdf, 0xb1, 0xc3, 0x83, 0xed, 0xcc, 0x6e, 0x22, 0x4a, 0x34, 0x76, - 0x75, 0x58, 0x8b, 0x50, 0x93, 0x5a, 0x84, 0x45, 0xa8, 0x0f, 0xbc, 0x3d, 0xdb, 0x49, 0xe2, 0x9e, - 0x43, 0x2c, 0xe6, 0x89, 0x43, 0x58, 0xaf, 0x90, 0xc6, 0x7c, 0x82, 0xc8, 0xda, 0x86, 0xe9, 0xd2, - 0xb6, 0xa1, 0x21, 0xb6, 0x0d, 0xb2, 0xe1, 0xa1, 0x60, 0x78, 0x34, 0x57, 0x33, 0xad, 0x43, 0xa3, - 0x96, 0xf8, 0x7f, 0x51, 0xa0, 0x95, 0xb9, 0x02, 0x7b, 0xea, 0xa1, 0xa6, 0xcc, 0x47, 0xa7, 0x5a, - 0x12, 0x9d, 0x69, 0x4c, 0x55, 0xc4, 0x98, 0xa2, 0x51, 0xe8, 0x85, 0xb6, 0xb0, 0xb1, 0x49, 0x61, - 0x3a, 0x9b, 0x43, 0x4c, 0xc1, 0x90, 0x08, 0x09, 0xdb, 0xd8, 0xba, 0xb4, 0x8d, 0xcd, 0xaf, 0xd4, - 0xff, 0xa0, 0xc0, 0x79, 0x1a, 0x01, 0x05, 0x35, 0x76, 0xa0, 0xe5, 0xe5, 0xa2, 0x84, 0x2f, 0x65, - 0xaf, 0x97, 0x2c, 0x45, 0xf9, 0x80, 0x32, 0x0a, 0xc4, 0x94, 0xa1, 0x95, 0x9b, 0x84, 0xaf, 0x6d, - 0x65, 0x0c, 0xf3, 0xf2, 0x18, 0x05, 0x62, 0xfd, 0x9f, 0x14, 0x68, 0xe1, 0xe2, 0x29, 0xd4, 0x80, - 0x33, 0x17, 0xfb, 0x01, 0x9c, 0xcf, 0xcf, 0x7c, 0xd7, 0x0e, 0xa3, 0xb6, 0xba, 0x5c, 0x99, 0x54, - 0xf4, 0x52, 0x06, 0xfa, 0x5f, 0xa9, 0xf0, 0xf2, 0x6e, 0xec, 0x38, 0x1d, 0x12, 0x86, 0x66, 0x9f, - 0xac, 0x9d, 0x74, 0xc9, 0x11, 0xfd, 0x60, 0x90, 0xa3, 0xa1, 0x31, 0x44, 0x3b, 0x29, 0xd6, 0x8a, - 0xd8, 0x9e, 0x9b, 0x86, 0x90, 0x88, 0xa2, 0x29, 0x17, 0x22, 0x9f, 0x76, 0x65, 0xb9, 0x42, 0x17, - 0x69, 0x0e, 0x6a, 0xbf, 0x0c, 0x33, 0xac, 0x4b, 0xe0, 0xd3, 0xb4, 0xab, 0x4c, 0x81, 0x0f, 0x4b, - 0xfb, 0x92, 0x52, 0xa9, 0xb0, 0xdf, 0xe0, 0xf0, 0x2d, 0x37, 0x0a, 0x4e, 0x0c, 0x89, 0xe3, 0xd2, - 0x17, 0xb0, 0x50, 0x18, 0xa2, 0xb5, 0xa0, 0x72, 0x48, 0x4e, 0xb8, 0x1e, 0xf4, 0x4f, 0xed, 0xe7, - 0xa1, 0x76, 0x4c, 0x37, 0xa8, 0xdc, 0xfb, 0x4b, 0x25, 0x12, 0x70, 0x99, 0x0d, 0x1c, 0xf8, 0xbe, - 0xfa, 0x0b, 0x8a, 0xfe, 0x7a, 0xaa, 0x98, 0xa8, 0xa3, 0x22, 0xe9, 0xa8, 0x7f, 0x02, 0xcd, 0x4e, - 0xd8, 0xdf, 0x30, 0x23, 0x93, 0x0d, 0xfc, 0x10, 0x9a, 0x83, 0x0c, 0x64, 0x83, 0xcb, 0xe7, 0xe3, - 0x44, 0x86, 0x38, 0x5c, 0xff, 0x56, 0x85, 0x76, 0xb9, 0x29, 0x42, 0x9f, 0xca, 0x40, 0x82, 0x60, - 0xdd, 0xb3, 0x08, 0x53, 0xad, 0x66, 0x24, 0x20, 0xf5, 0x1d, 0x09, 0x02, 0xba, 0xbe, 0xf1, 0x36, - 0x1e, 0x21, 0x6d, 0x05, 0xaa, 0x4e, 0xe2, 0x96, 0xd1, 0x52, 0xb0, 0x71, 0xda, 0x00, 0x5a, 0xcc, - 0xba, 0x82, 0x42, 0xdc, 0x67, 0xab, 0x13, 0xfb, 0x2c, 0xf4, 0xd1, 0x69, 0x02, 0x0f, 0x74, 0x5c, - 0x81, 0xf5, 0x52, 0x0f, 0x2e, 0x94, 0x0e, 0x2d, 0x71, 0xe0, 0xdb, 0xb2, 0x03, 0x2f, 0x0d, 0x57, - 0x25, 0xef, 0x44, 0x1f, 0xb4, 0x4d, 0x12, 0x75, 0xcc, 0xc7, 0xab, 0xae, 0xd5, 0xb1, 0xdd, 0x2e, - 0x39, 0xa2, 0xd1, 0xbe, 0x0c, 0x4d, 0x7e, 0xdc, 0x90, 0xba, 0xa9, 0x61, 0x88, 0xa8, 0xa1, 0xa7, - 0x10, 0xb9, 0x7c, 0xa8, 0x14, 0xf2, 0x41, 0xbf, 0x09, 0x33, 0xe2, 0x74, 0x6c, 0x81, 0x31, 0x1f, - 0x77, 0xc9, 0x11, 0x53, 0x68, 0xd6, 0xe0, 0x10, 0xc3, 0xb3, 0x11, 0x7c, 0xf7, 0xc1, 0x21, 0xfd, - 0xdf, 0x55, 0x38, 0x57, 0x10, 0x39, 0xf4, 0x9f, 0x94, 0x8f, 0x18, 0x2f, 0x95, 0x61, 0xf1, 0x52, - 0x95, 0xe2, 0xe5, 0x10, 0x16, 0xd0, 0x49, 0xc2, 0xd4, 0xed, 0x1a, 0x0b, 0x80, 0x8f, 0xca, 0x36, - 0x03, 0x45, 0x21, 0xb9, 0xef, 0x05, 0x2c, 0x3a, 0xbf, 0xc8, 0x77, 0x89, 0xc0, 0x62, 0xf9, 0xe0, - 0x12, 0xf7, 0xbf, 0x23, 0xbb, 0xff, 0xa7, 0xca, 0xdc, 0x2f, 0x4a, 0x22, 0xf8, 0xff, 0x08, 0xe6, - 0x69, 0x51, 0xed, 0x12, 0xd7, 0xea, 0x84, 0x7d, 0x66, 0xc8, 0x65, 0x68, 0x22, 0x7d, 0x27, 0xec, - 0x67, 0x9b, 0x43, 0x01, 0x45, 0x47, 0xf4, 0x1c, 0x9b, 0x16, 0x4f, 0x36, 0x82, 0x17, 0x3d, 0x01, - 0x45, 0x17, 0xc8, 0x90, 0xf0, 0x93, 0x19, 0x6a, 0xdd, 0x8a, 0x91, 0xc2, 0xfa, 0xdf, 0xd7, 0x61, - 0x8a, 0x47, 0x23, 0x5b, 0x14, 0xe9, 0x7e, 0x3c, 0x2d, 0xab, 0x08, 0x61, 0xcf, 0xdb, 0x3b, 0xce, - 0xc2, 0x0b, 0x21, 0xf1, 0x58, 0xac, 0x22, 0x1f, 0x8b, 0xe5, 0x64, 0xaa, 0x16, 0x65, 0xca, 0xe9, - 0x55, 0x2b, 0xea, 0x45, 0x5b, 0x3c, 0xd6, 0xf5, 0xec, 0x3a, 0x66, 0xb4, 0xef, 0x05, 0x03, 0xbe, - 0xbd, 0xae, 0x19, 0x05, 0x3c, 0x6d, 0x2b, 0x11, 0x97, 0xee, 0x0b, 0x70, 0x09, 0xcf, 0x61, 0x69, - 0x17, 0x8e, 0x98, 0x64, 0x7f, 0x80, 0xe7, 0x23, 0x32, 0x12, 0x65, 0x0b, 0x43, 0xdb, 0x73, 0x59, - 0x87, 0x8a, 0xdb, 0x00, 0x11, 0x45, 0x35, 0x1f, 0x84, 0xfd, 0xdb, 0x81, 0x37, 0xe0, 0x5b, 0xaf, - 0x04, 0x64, 0x9a, 0x7b, 0x6e, 0x94, 0x74, 0xb7, 0x78, 0x32, 0x22, 0xa2, 0x28, 0x2d, 0x07, 0x59, - 0xc3, 0x34, 0x63, 0x24, 0x20, 0x8d, 0xa5, 0x90, 0x1c, 0xf1, 0xc6, 0x9e, 0xfe, 0x29, 0x79, 0x6e, - 0x5e, 0xf6, 0x5c, 0xae, 0x53, 0x6b, 0xb1, 0xaf, 0x62, 0xa7, 0x96, 0xb5, 0x38, 0x0b, 0x52, 0x8b, - 0xb3, 0x0a, 0x53, 0x9e, 0x4f, 0xd3, 0x3f, 0x6c, 0x6b, 0x2c, 0x5d, 0x7e, 0x66, 0x78, 0x81, 0x5a, - 0xd9, 0xc1, 0x91, 0x98, 0x18, 0x09, 0x9d, 0x76, 0x17, 0xe6, 0xbd, 0xfd, 0x7d, 0xc7, 0x76, 0xc9, - 0x6e, 0x1c, 0x1e, 0xb0, 0x6d, 0xf8, 0x39, 0x16, 0xec, 0x7a, 0x59, 0x13, 0x21, 0x8f, 0x34, 0xf2, - 0xa4, 0xb4, 0xf3, 0x33, 0x23, 0xdc, 0x00, 0xb1, 0x02, 0x77, 0x9e, 0x15, 0x38, 0x09, 0xc7, 0xce, - 0x17, 0x85, 0x42, 0x7f, 0x81, 0x19, 0x4e, 0x44, 0x21, 0x97, 0xc8, 0xec, 0x1d, 0x10, 0x76, 0xa0, - 0xd4, 0x5e, 0xc4, 0xfe, 0x51, 0xc4, 0xf1, 0xee, 0xee, 0xe5, 0xa4, 0xbb, 0x5b, 0x7a, 0x1f, 0x66, - 0x44, 0x05, 0x4b, 0x92, 0xf9, 0xbc, 0x98, 0xcc, 0xd3, 0x62, 0xae, 0xfe, 0xa1, 0x02, 0xf3, 0x39, - 0xd5, 0xe8, 0xe8, 0xc8, 0x8e, 0x1c, 0xc2, 0x39, 0x20, 0x40, 0x77, 0x4e, 0x16, 0x09, 0x7b, 0x3c, - 0x79, 0xd8, 0xdf, 0x5c, 0x92, 0x4a, 0xda, 0x46, 0xeb, 0x30, 0x63, 0xef, 0x74, 0x29, 0xa3, 0xae, - 0x17, 0xbb, 0x56, 0x7a, 0x40, 0x2f, 0xe0, 0xd8, 0x96, 0x7e, 0xa7, 0xbb, 0x66, 0x5a, 0x7d, 0x82, - 0xd7, 0x35, 0x35, 0x26, 0x93, 0x8c, 0xd4, 0x2d, 0x98, 0xbe, 0x67, 0xfb, 0xe1, 0xba, 0x37, 0x18, - 0xd0, 0x10, 0xb0, 0x48, 0x44, 0x7b, 0x7c, 0x85, 0x19, 0x8c, 0x43, 0xd4, 0x9a, 0x16, 0xd9, 0x37, - 0x63, 0x27, 0xa2, 0x43, 0x93, 0x92, 0x21, 0xa0, 0xd8, 0xf1, 0x42, 0xe8, 0xb9, 0x1b, 0x48, 0x8d, - 0x72, 0x0a, 0x18, 0xfd, 0x5f, 0x55, 0x68, 0xb1, 0x8a, 0xb8, 0xce, 0x02, 0xce, 0x62, 0x44, 0x37, - 0xa0, 0xc6, 0x0a, 0x00, 0xef, 0x28, 0x47, 0x9f, 0xc9, 0xe0, 0x50, 0xed, 0x26, 0xd4, 0x3d, 0x9f, - 0xb5, 0xa1, 0x58, 0x2e, 0xaf, 0x0c, 0x23, 0x92, 0x8f, 0xe4, 0x0d, 0x4e, 0xa5, 0xdd, 0x06, 0x18, - 0x64, 0x5d, 0x27, 0x36, 0x0f, 0x93, 0xf2, 0x10, 0x28, 0xa9, 0x71, 0xd3, 0x75, 0x31, 0x3d, 0x97, - 0xaf, 0x18, 0x32, 0x52, 0xdb, 0x86, 0x39, 0x26, 0xf6, 0x4e, 0x72, 0x38, 0xc7, 0x7c, 0x30, 0xf9, - 0x8c, 0x39, 0x6a, 0xfd, 0xcf, 0x14, 0x6e, 0x46, 0xfa, 0xb5, 0x4b, 0xd0, 0xf6, 0x99, 0x49, 0x94, - 0x53, 0x99, 0x64, 0x09, 0xa6, 0x07, 0xb1, 0x70, 0x56, 0x58, 0x31, 0x52, 0x38, 0x73, 0x51, 0x65, - 0x62, 0x17, 0xe9, 0x7f, 0xae, 0x40, 0xfb, 0x63, 0xcf, 0x76, 0xd9, 0x87, 0x55, 0xdf, 0x77, 0xf8, - 0xf5, 0xcd, 0xa9, 0x7d, 0xfe, 0x8b, 0xd0, 0x30, 0x91, 0x8d, 0x1b, 0x71, 0xb7, 0x4f, 0x70, 0xfe, - 0x97, 0xd1, 0x08, 0x87, 0x30, 0x15, 0xf1, 0x10, 0x46, 0xff, 0x5a, 0x81, 0x39, 0x34, 0xca, 0xa7, - 0xb1, 0x1d, 0x9d, 0x5a, 0xbe, 0x35, 0x98, 0x3e, 0x8a, 0xed, 0xe8, 0x14, 0x51, 0x99, 0xd2, 0x15, - 0xe3, 0xa9, 0x52, 0x12, 0x4f, 0xfa, 0xb7, 0x0a, 0x5c, 0xcc, 0x9b, 0x75, 0xb5, 0xd7, 0x23, 0xfe, - 0xd3, 0x4c, 0x29, 0xe9, 0x10, 0xaa, 0x5a, 0x72, 0x08, 0x15, 0x90, 0x1e, 0xb1, 0x8f, 0x49, 0xb0, - 0x1a, 0xf2, 0x5d, 0xb5, 0x80, 0x29, 0x55, 0xc9, 0x20, 0x5f, 0x91, 0xde, 0xf3, 0xab, 0xd2, 0x6f, - 0xa8, 0xf0, 0xca, 0x66, 0x9a, 0xb8, 0xf7, 0x02, 0xd3, 0x0d, 0xf7, 0x49, 0x10, 0x3c, 0x45, 0x7d, - 0xee, 0xc2, 0xac, 0x4b, 0x1e, 0x65, 0x32, 0xf1, 0x74, 0x9e, 0x94, 0x8d, 0x4c, 0x3c, 0x59, 0xed, - 0xd3, 0x7f, 0xa4, 0x40, 0x0b, 0xf9, 0x7c, 0x62, 0xf7, 0x0e, 0x9f, 0xa2, 0xf2, 0xdb, 0x30, 0x77, - 0xc8, 0x24, 0xa0, 0xd0, 0x29, 0xca, 0x7e, 0x8e, 0x7a, 0x42, 0xf5, 0xbf, 0x53, 0x60, 0x21, 0xb9, - 0x75, 0x3e, 0xb6, 0x9f, 0x66, 0x30, 0xef, 0xc2, 0x3c, 0x9e, 0xe2, 0x9f, 0xd6, 0x00, 0x79, 0xf2, - 0x09, 0x2d, 0xf0, 0x77, 0x0a, 0xcc, 0x23, 0xa7, 0x5b, 0x6e, 0x44, 0x82, 0x53, 0xeb, 0x7f, 0x07, - 0x9a, 0xc4, 0x8d, 0x02, 0xd3, 0x3d, 0x4d, 0x85, 0x15, 0x49, 0x27, 0x2c, 0xb2, 0x5f, 0x2b, 0xa0, - 0x31, 0x56, 0x1b, 0x76, 0x38, 0xb0, 0xc3, 0xf0, 0x29, 0xba, 0x6e, 0x32, 0x81, 0xff, 0x44, 0x85, - 0xf3, 0x02, 0x97, 0x4e, 0x1c, 0x3d, 0xeb, 0x22, 0x6b, 0x1b, 0xd0, 0xa0, 0x3d, 0x86, 0x78, 0xc7, - 0x3a, 0xe9, 0x44, 0x19, 0x21, 0xed, 0x82, 0x19, 0xd0, 0x25, 0x3d, 0xcf, 0xb5, 0xb0, 0x14, 0xcf, - 0x1a, 0x12, 0x8e, 0x96, 0xa1, 0x25, 0x81, 0xcd, 0xba, 0xe9, 0xf6, 0x88, 0xf3, 0xc2, 0x98, 0x48, - 0xff, 0x4b, 0x05, 0xe6, 0x70, 0xc8, 0xb3, 0xaf, 0xb2, 0xfe, 0xd7, 0x0a, 0x0f, 0xe4, 0xe7, 0xc6, - 0x4b, 0x34, 0xbc, 0x16, 0x05, 0x2e, 0x62, 0x5f, 0xfe, 0xec, 0x86, 0xd6, 0x1d, 0x68, 0xf6, 0x0e, - 0x4c, 0xb7, 0x7f, 0xaa, 0xe0, 0x12, 0x49, 0xf5, 0x08, 0x5e, 0x16, 0x0f, 0xfd, 0xd7, 0xf1, 0x13, - 0x53, 0xff, 0xad, 0x9c, 0x2a, 0x23, 0xdf, 0x50, 0x3c, 0x99, 0xd1, 0x0f, 0x61, 0x01, 0x6f, 0xa1, - 0x85, 0x9e, 0x51, 0x6b, 0xc3, 0x94, 0x69, 0xe1, 0xd1, 0x87, 0xc2, 0x88, 0x12, 0x50, 0x7e, 0xa5, - 0xc0, 0xdf, 0xc3, 0x65, 0xaf, 0x14, 0x2e, 0x01, 0x98, 0x96, 0xf5, 0xc0, 0x0b, 0x2c, 0xdb, 0x4d, - 0x36, 0x08, 0x02, 0x46, 0xff, 0x18, 0x66, 0x6e, 0x07, 0xde, 0xe0, 0x9e, 0x70, 0x9f, 0x3c, 0xf2, - 0xc6, 0x5b, 0xbc, 0x8b, 0x56, 0xe5, 0xbb, 0x68, 0xfd, 0x4b, 0xb8, 0x50, 0x10, 0x9c, 0x19, 0x6b, - 0x1d, 0xaf, 0xc9, 0x93, 0x49, 0x78, 0xc8, 0x94, 0x9d, 0x05, 0x8a, 0xb2, 0x18, 0x12, 0x91, 0xfe, - 0xeb, 0x0a, 0xbc, 0x56, 0x60, 0xbf, 0xea, 0xfb, 0x81, 0x77, 0xcc, 0x7d, 0x72, 0x16, 0xd3, 0xc8, - 0xcd, 0xb1, 0x9a, 0x6b, 0x8e, 0xcb, 0x85, 0x90, 0x1a, 0xfa, 0xef, 0x41, 0x88, 0xbf, 0x50, 0x60, - 0x9e, 0x0b, 0x61, 0x59, 0x7c, 0xda, 0x77, 0xa0, 0x8e, 0x0f, 0x75, 0xf8, 0x84, 0xaf, 0x95, 0x4e, - 0x98, 0x3c, 0x30, 0x32, 0xf8, 0xe0, 0x62, 0x44, 0xaa, 0x65, 0x19, 0xf5, 0x5e, 0x1a, 0xec, 0x13, - 0x3f, 0xa5, 0xe1, 0x04, 0xfa, 0x2f, 0x25, 0xc1, 0xbc, 0x41, 0x1c, 0x72, 0x96, 0x36, 0xd2, 0xef, - 0xc3, 0x1c, 0x7b, 0x35, 0x94, 0xd9, 0xe0, 0x4c, 0xd8, 0x3e, 0x80, 0x16, 0x63, 0x7b, 0xe6, 0xf2, - 0xa6, 0xd9, 0x41, 0xed, 0x23, 0x96, 0x92, 0x33, 0xe1, 0xfe, 0x26, 0x9c, 0x4b, 0x6c, 0x8f, 0x2f, - 0x71, 0x91, 0xf7, 0x90, 0xbb, 0x41, 0xfd, 0x8f, 0x14, 0x58, 0x5c, 0xf7, 0xdc, 0x63, 0x12, 0x84, - 0xd2, 0xeb, 0x5d, 0x24, 0x91, 0xb2, 0x9f, 0x43, 0xda, 0x0a, 0x68, 0x3d, 0x81, 0x82, 0x1f, 0x4f, - 0xaa, 0xec, 0x78, 0xb2, 0xe4, 0x8b, 0xf6, 0x36, 0x5c, 0x88, 0x19, 0xd7, 0xfb, 0x6e, 0x40, 0x4c, - 0x8b, 0x9d, 0xc7, 0x09, 0x45, 0xaf, 0xfc, 0xa3, 0xfe, 0x15, 0x2c, 0x89, 0x72, 0x75, 0x49, 0xb4, - 0x1b, 0xd8, 0xc7, 0x82, 0x6c, 0xfc, 0xec, 0x5d, 0x91, 0xce, 0xde, 0xb3, 0xb3, 0x7a, 0x55, 0x3a, - 0xab, 0xbf, 0x08, 0x0d, 0x3b, 0xe4, 0x0c, 0xd8, 0xbc, 0xd3, 0x46, 0x86, 0xd0, 0x4d, 0x58, 0x40, - 0x2f, 0xf3, 0xbb, 0x30, 0x36, 0xc5, 0x12, 0x4c, 0x63, 0xe8, 0xa6, 0x93, 0xa4, 0xf0, 0xd0, 0x9b, - 0xa5, 0xa1, 0xf7, 0xa8, 0x7a, 0x17, 0x16, 0xf8, 0x5b, 0xa2, 0x5d, 0xb3, 0x6f, 0xbb, 0x58, 0xcb, - 0x2f, 0x01, 0xf8, 0x66, 0x3f, 0x79, 0xd9, 0x88, 0x37, 0x82, 0x02, 0x86, 0x7e, 0x0f, 0x0f, 0xbc, - 0x47, 0xfc, 0xbb, 0x8a, 0xdf, 0x33, 0x8c, 0xfe, 0x19, 0x68, 0x06, 0x09, 0x7d, 0xcf, 0x0d, 0x89, - 0xc0, 0x75, 0x19, 0x9a, 0xeb, 0x71, 0x10, 0x10, 0x97, 0x4e, 0x95, 0x3c, 0xcf, 0x13, 0x51, 0x94, - 0x6f, 0x37, 0xe3, 0x8b, 0xb7, 0x07, 0x02, 0x46, 0xff, 0xdf, 0x3a, 0x34, 0xba, 0x76, 0xdf, 0x35, - 0x1d, 0x83, 0x1c, 0x69, 0x1f, 0x42, 0x1d, 0x77, 0x46, 0x3c, 0x20, 0xcb, 0x4e, 0xb3, 0x71, 0x34, - 0x6e, 0x01, 0x0d, 0x72, 0x74, 0xe7, 0x25, 0x83, 0xd3, 0x68, 0x9f, 0x26, 0x2f, 0xae, 0xb6, 0xf0, - 0xa4, 0x8c, 0x2f, 0x93, 0x3f, 0x3b, 0x86, 0x09, 0x1f, 0x8d, 0xbc, 0x64, 0x0e, 0x54, 0xa0, 0x1e, - 0xeb, 0x9c, 0x78, 0x15, 0x1a, 0x2e, 0x10, 0x36, 0x58, 0x5c, 0x20, 0xa4, 0xa1, 0xd4, 0x26, 0x3b, - 0x4b, 0xe2, 0x0d, 0xc1, 0x70, 0x6a, 0x3c, 0x72, 0xe2, 0xd4, 0x48, 0x43, 0xa9, 0x0f, 0x62, 0xb7, - 0x7f, 0xdf, 0xe7, 0x47, 0x9c, 0xc3, 0xa9, 0xef, 0xb0, 0x61, 0x9c, 0x1a, 0x69, 0x28, 0x75, 0xc0, - 0xd6, 0x08, 0x66, 0xf4, 0x51, 0xd4, 0xb8, 0x94, 0x70, 0x6a, 0xa4, 0xd1, 0x3e, 0x87, 0x56, 0x9f, - 0x44, 0x86, 0xe7, 0x0d, 0xd6, 0x4e, 0x36, 0xf9, 0x0d, 0x13, 0x3e, 0x30, 0xbf, 0x36, 0x94, 0xcf, - 0x66, 0x8e, 0x00, 0x39, 0x16, 0xf8, 0x68, 0xbf, 0x0a, 0xaf, 0x79, 0x2e, 0x45, 0xed, 0x9a, 0x41, - 0x64, 0xf7, 0x6c, 0xdf, 0x74, 0xa3, 0x75, 0xcf, 0x75, 0xd9, 0x7a, 0x66, 0x90, 0x23, 0xfe, 0x04, - 0xfd, 0xdd, 0xa1, 0x13, 0xed, 0x8c, 0xa2, 0xbe, 0xf3, 0x92, 0x31, 0x9a, 0xbd, 0xf6, 0xdb, 0x0a, - 0x2c, 0x17, 0x46, 0x6c, 0xd8, 0x61, 0x4f, 0x94, 0x01, 0x9f, 0xaf, 0xbf, 0x37, 0xb9, 0x0c, 0x39, - 0x06, 0x77, 0x5e, 0x32, 0xc6, 0x4e, 0xc2, 0xad, 0x7c, 0xcf, 0x3b, 0x24, 0xee, 0xda, 0x09, 0x1d, - 0xbb, 0xb5, 0xc1, 0x6e, 0xb3, 0xc6, 0x58, 0x59, 0x22, 0xc8, 0xac, 0x2c, 0xa1, 0xd7, 0x1a, 0x30, - 0xe5, 0x9b, 0x27, 0x8e, 0x67, 0x5a, 0xfa, 0xff, 0x57, 0x01, 0x12, 0x57, 0x87, 0xac, 0x23, 0x96, - 0x92, 0xec, 0xf2, 0xd8, 0x24, 0xf3, 0x9d, 0x13, 0x21, 0xcd, 0xba, 0xe5, 0x69, 0xf6, 0x73, 0x93, - 0xa6, 0x19, 0x72, 0xcb, 0x25, 0xda, 0xcd, 0x5c, 0xa2, 0x5d, 0x1e, 0x9b, 0x68, 0x5c, 0x28, 0x9e, - 0x6a, 0x37, 0x73, 0xa9, 0x76, 0x79, 0x6c, 0xaa, 0x71, 0x7a, 0x9e, 0x6c, 0x37, 0x73, 0xc9, 0x76, - 0x79, 0x6c, 0xb2, 0x71, 0x7a, 0x9e, 0x6e, 0x37, 0x73, 0xe9, 0x76, 0x79, 0x6c, 0xba, 0x71, 0x7a, - 0x9e, 0x70, 0x5f, 0x0e, 0x4d, 0xb8, 0x95, 0x27, 0x48, 0x38, 0xe4, 0x59, 0x4c, 0xb9, 0x2f, 0x4b, - 0x02, 0x6d, 0x7a, 0x3c, 0xf7, 0x5c, 0xa0, 0x65, 0xdc, 0x87, 0x86, 0xda, 0x6f, 0x56, 0x60, 0x8e, - 0xb9, 0x1b, 0x57, 0x65, 0x77, 0xdf, 0x2b, 0xbe, 0x83, 0x55, 0x4a, 0xde, 0xc1, 0x6a, 0xd7, 0x60, - 0x01, 0x11, 0x44, 0xb8, 0x87, 0xc4, 0x85, 0xbe, 0xf8, 0x81, 0xdd, 0xbc, 0xc6, 0x61, 0xe4, 0x0d, - 0x36, 0xcc, 0xc8, 0x4c, 0x76, 0x18, 0x19, 0x46, 0xbc, 0x17, 0xaf, 0x16, 0x7e, 0x2e, 0x12, 0xa0, - 0xfe, 0x35, 0xbe, 0x9a, 0x33, 0x88, 0x52, 0x44, 0xf6, 0x80, 0x78, 0x71, 0xc4, 0x17, 0xa9, 0x04, - 0xc4, 0xc7, 0x8b, 0x96, 0x6d, 0xb2, 0xdb, 0x64, 0xfe, 0xb2, 0x2f, 0x45, 0xb0, 0x75, 0x35, 0xbb, - 0x1d, 0xe7, 0x3f, 0xe7, 0xc8, 0x30, 0x13, 0xdc, 0x64, 0xb3, 0x5f, 0x06, 0xd9, 0x91, 0x2d, 0xbe, - 0xf8, 0xab, 0x19, 0x12, 0x8e, 0xf6, 0x41, 0x7b, 0x71, 0x78, 0x72, 0xd7, 0x76, 0x45, 0xf3, 0x34, - 0xb1, 0x0f, 0x2a, 0x7e, 0xd1, 0xff, 0x4f, 0x81, 0x73, 0x42, 0xdd, 0xe9, 0x90, 0xc8, 0x64, 0x76, - 0x91, 0xde, 0x6d, 0x2b, 0x4f, 0xf6, 0x6e, 0x7b, 0x17, 0xe6, 0xfb, 0xf2, 0xb6, 0xfc, 0x09, 0x77, - 0xd4, 0x79, 0x72, 0xe9, 0x11, 0x7a, 0xe5, 0x89, 0x1f, 0xa1, 0xeb, 0xbf, 0xa3, 0xc2, 0x7c, 0xae, - 0x19, 0x18, 0xd9, 0x49, 0xad, 0x02, 0xd8, 0x69, 0x68, 0x8e, 0xb8, 0xf5, 0x92, 0xe3, 0xd7, 0x10, - 0x88, 0xca, 0xae, 0xdd, 0x2b, 0xa7, 0xbf, 0x76, 0xbf, 0x03, 0x4d, 0x3f, 0x73, 0xd2, 0x88, 0x43, - 0x83, 0x12, 0x57, 0x1a, 0x22, 0xa9, 0xfe, 0xbb, 0x0a, 0x2c, 0x14, 0x4a, 0x36, 0xbb, 0x0c, 0xa7, - 0x89, 0x9a, 0x5e, 0x86, 0x53, 0x40, 0xc8, 0x00, 0x35, 0x9f, 0x01, 0x8e, 0x7d, 0x2c, 0xfe, 0x5c, - 0x86, 0x83, 0x43, 0xa2, 0xaf, 0x3a, 0x34, 0xfa, 0x7e, 0x4f, 0x85, 0xc5, 0xf2, 0x06, 0xeb, 0x45, - 0xf5, 0xcf, 0xef, 0x2b, 0xd0, 0x1e, 0xb6, 0x16, 0x3e, 0x35, 0x37, 0x65, 0xf9, 0x93, 0xf6, 0xae, - 0x2f, 0xaa, 0x7f, 0xce, 0x25, 0xe9, 0x23, 0x34, 0x17, 0xfa, 0xdf, 0xa6, 0xf6, 0x49, 0xbb, 0xf3, - 0x17, 0xd4, 0x3e, 0xda, 0x55, 0x68, 0xa1, 0x9a, 0xc2, 0x4b, 0x30, 0xdc, 0xec, 0x15, 0xf0, 0xfa, - 0x17, 0x89, 0x2d, 0x85, 0x46, 0xeb, 0xac, 0x62, 0x5c, 0xff, 0x67, 0x25, 0xf1, 0x49, 0xba, 0xe7, - 0x79, 0xae, 0x7c, 0x92, 0x45, 0x9a, 0xd0, 0x46, 0x0a, 0x91, 0x96, 0xee, 0xc5, 0x7e, 0x12, 0x69, - 0xe3, 0x23, 0x2d, 0xb5, 0xa5, 0xd0, 0x52, 0xeb, 0x7f, 0xaa, 0xc0, 0x2b, 0x43, 0xf7, 0xa3, 0x23, - 0xad, 0x2a, 0x34, 0x8d, 0xaa, 0xdc, 0x34, 0xe6, 0xd4, 0xab, 0x9c, 0xbe, 0xd0, 0x7c, 0xa3, 0xc0, - 0xab, 0x23, 0x9a, 0xf7, 0x9c, 0x67, 0x95, 0xd3, 0x78, 0x36, 0x27, 0xac, 0x3a, 0xf4, 0x62, 0x7a, - 0xac, 0x2f, 0xb2, 0xf4, 0xac, 0x88, 0xe9, 0xa9, 0xff, 0x87, 0x02, 0xaf, 0x4f, 0xb0, 0x13, 0x7f, - 0xb6, 0x94, 0x19, 0xfa, 0x54, 0x56, 0xff, 0x4f, 0x05, 0xae, 0x4c, 0xb6, 0xa9, 0x7f, 0x5e, 0x34, - 0xfa, 0x47, 0x31, 0x07, 0xf2, 0xa7, 0x05, 0x82, 0x5b, 0x15, 0xa9, 0xea, 0x8a, 0xb9, 0xa1, 0xe6, - 0x72, 0xe3, 0xcc, 0x32, 0x20, 0xff, 0x22, 0xbe, 0x5a, 0x7c, 0x11, 0xdf, 0x11, 0x52, 0xa4, 0xb8, - 0x03, 0x1d, 0xb2, 0x94, 0x08, 0x4b, 0x86, 0x2a, 0x2f, 0x19, 0xbf, 0x06, 0xb3, 0x1b, 0xc4, 0xe9, - 0x84, 0xfd, 0xe4, 0xb7, 0x2b, 0x67, 0x7a, 0xda, 0x3a, 0x81, 0x3e, 0x6b, 0x30, 0x27, 0x0a, 0x70, - 0x9a, 0xdf, 0x66, 0xe8, 0x0f, 0xe0, 0x95, 0x2e, 0x89, 0x56, 0x7d, 0x7f, 0xcd, 0xec, 0x1d, 0x52, - 0x37, 0xbb, 0x56, 0x97, 0x3d, 0x26, 0x1e, 0xf5, 0x63, 0x1c, 0xba, 0xb3, 0x0c, 0x33, 0x02, 0xfe, - 0x82, 0x56, 0xc2, 0xe9, 0xdb, 0xb0, 0x34, 0x8c, 0xf1, 0xa9, 0x04, 0xfd, 0x46, 0x81, 0x99, 0x5b, - 0x8f, 0x23, 0x7c, 0x3f, 0xdf, 0x25, 0xec, 0xdf, 0x97, 0xa4, 0x82, 0xa9, 0xf8, 0xa8, 0xdc, 0x31, - 0x23, 0x12, 0x46, 0xc2, 0xbf, 0xf6, 0xc0, 0x1f, 0x1c, 0x14, 0xf0, 0x85, 0x17, 0xc5, 0xd5, 0xa1, - 0x2f, 0x8a, 0x6b, 0xe2, 0x3b, 0x5e, 0x92, 0xcc, 0xbf, 0x1d, 0x0f, 0xf8, 0x6e, 0x5e, 0xc2, 0x95, - 0xfc, 0xb6, 0xb1, 0x26, 0x3e, 0xdc, 0xd6, 0x03, 0x38, 0x6f, 0x10, 0x93, 0xfd, 0x53, 0x0e, 0x49, - 0x97, 0x36, 0x4c, 0x51, 0xd3, 0x7e, 0x92, 0xbe, 0x50, 0x4e, 0x40, 0xf9, 0x95, 0x72, 0x83, 0xbf, - 0x52, 0x7e, 0x12, 0x5d, 0xd7, 0xae, 0x7d, 0x7e, 0x75, 0xc7, 0x27, 0xee, 0xc3, 0xad, 0x4e, 0xe1, - 0xbf, 0xe3, 0x7c, 0x50, 0x48, 0xb3, 0xbd, 0x3a, 0xfb, 0xfe, 0xd6, 0x8f, 0x03, 0x00, 0x00, 0xff, - 0xff, 0x21, 0x79, 0xd9, 0x13, 0x7d, 0x47, 0x00, 0x00, +var fileDescriptor_ws_73169a3998a579bb = []byte{ + // 4104 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x5b, 0x6f, 0x1c, 0x57, + 0x58, 0x9d, 0xd9, 0x8b, 0xbd, 0xdf, 0xfa, 0xb2, 0x9e, 0x24, 0xee, 0xd6, 0x4d, 0x83, 0x99, 0x46, + 0xa1, 0x84, 0xd4, 0x81, 0xf4, 0x02, 0xbd, 0x05, 0xf9, 0x92, 0x38, 0x6e, 0xb2, 0xb6, 0x3b, 0x9b, + 0x34, 0xa8, 0xad, 0x14, 0xc6, 0x3b, 0xc7, 0xeb, 0xa9, 0x67, 0x67, 0xc6, 0x73, 0x71, 0x62, 0x1e, + 0x40, 0x02, 0x04, 0x48, 0x3c, 0x20, 0x21, 0x2e, 0x12, 0xbc, 0xf1, 0x82, 0x40, 0xa8, 0x42, 0x08, + 0x10, 0x12, 0x08, 0x21, 0xc4, 0x03, 0x12, 0x48, 0xf4, 0x1d, 0x09, 0x04, 0x2f, 0x20, 0xc4, 0x1f, + 0x40, 0x42, 0x2a, 0x3a, 0xe7, 0x3b, 0x33, 0x73, 0xce, 0xcc, 0xec, 0x25, 0x96, 0xd5, 0x24, 0x0a, + 0x6f, 0xfe, 0xbe, 0x39, 0xdf, 0x77, 0xbe, 0xfb, 0xf9, 0xce, 0x65, 0x0d, 0xf3, 0xa1, 0x75, 0xf8, + 0xe8, 0x71, 0x78, 0xfd, 0x71, 0xb8, 0xe2, 0x07, 0x5e, 0xe4, 0x69, 0x0b, 0x21, 0x09, 0x8e, 0x49, + 0xf0, 0xc8, 0xf4, 0xed, 0x47, 0xbe, 0x19, 0x98, 0x83, 0x70, 0x69, 0x65, 0xc7, 0x27, 0xee, 0xdb, + 0x5b, 0x9d, 0xb7, 0xbb, 0xec, 0xd3, 0x75, 0xff, 0xb0, 0x7f, 0x9d, 0x0d, 0xbe, 0x9e, 0x10, 0x07, + 0xa6, 0xef, 0x93, 0x80, 0xb3, 0xd0, 0xff, 0xb5, 0x0a, 0x8d, 0xcd, 0xc0, 0x8b, 0xfd, 0x2d, 0x77, + 0xdf, 0xd3, 0xda, 0x30, 0xd5, 0x67, 0xc0, 0x46, 0x5b, 0x59, 0x56, 0xde, 0x6a, 0x18, 0x09, 0xa8, + 0x5d, 0x84, 0x06, 0xfb, 0x73, 0xdb, 0x1c, 0x90, 0xb6, 0xca, 0xbe, 0x65, 0x08, 0x4d, 0x87, 0x19, + 0xd7, 0x8b, 0xec, 0x7d, 0xbb, 0x67, 0x46, 0xb6, 0xe7, 0xb6, 0x2b, 0x6c, 0x80, 0x84, 0xa3, 0x63, + 0x6c, 0x37, 0x0a, 0x3c, 0x2b, 0xee, 0xb1, 0x31, 0x55, 0x1c, 0x23, 0xe2, 0xe8, 0xfc, 0xfb, 0x66, + 0x8f, 0x3c, 0x30, 0xee, 0xb5, 0x6b, 0x38, 0x3f, 0x07, 0xb5, 0x65, 0x68, 0x7a, 0x8f, 0x5d, 0x12, + 0x3c, 0x08, 0x49, 0xb0, 0xb5, 0xd1, 0xae, 0xb3, 0xaf, 0x22, 0x4a, 0xbb, 0x04, 0xd0, 0x0b, 0x88, + 0x19, 0x91, 0xfb, 0xf6, 0x80, 0xb4, 0xa7, 0x96, 0x95, 0xb7, 0x66, 0x0d, 0x01, 0x43, 0x39, 0x0c, + 0xc8, 0x60, 0x8f, 0x04, 0xeb, 0x5e, 0xec, 0x46, 0xed, 0x69, 0x36, 0x40, 0x44, 0x69, 0x73, 0xa0, + 0x92, 0x27, 0xed, 0x06, 0x63, 0xad, 0x92, 0x27, 0xda, 0x22, 0xd4, 0xc3, 0xc8, 0x8c, 0xe2, 0xb0, + 0x0d, 0xcb, 0xca, 0x5b, 0x35, 0x83, 0x43, 0xda, 0x65, 0x98, 0x65, 0x7c, 0xbd, 0x44, 0x9a, 0x26, + 0x23, 0x91, 0x91, 0xa9, 0xc5, 0xee, 0x9f, 0xf8, 0xa4, 0x3d, 0xc3, 0x18, 0x64, 0x08, 0xed, 0x2a, + 0xb4, 0x5c, 0x42, 0xac, 0xcf, 0x49, 0x90, 0x59, 0x6d, 0x96, 0x0d, 0x2a, 0xe0, 0xb5, 0x2b, 0x30, + 0xe7, 0x78, 0xde, 0x61, 0x87, 0x89, 0x4a, 0xfd, 0xd4, 0x9e, 0x63, 0x23, 0x73, 0x58, 0xed, 0x1a, + 0x2c, 0x98, 0xbe, 0xef, 0x9c, 0x20, 0xea, 0x76, 0x60, 0x13, 0xd7, 0x6a, 0xcf, 0xb3, 0xa1, 0xc5, + 0x0f, 0xda, 0xfb, 0xb0, 0x28, 0xfa, 0xe7, 0x81, 0x6f, 0x25, 0xb6, 0x6b, 0x31, 0xd3, 0x0c, 0xf9, + 0xaa, 0xad, 0x80, 0x26, 0x7d, 0x41, 0x13, 0x2c, 0x30, 0x13, 0x94, 0x7c, 0xd1, 0x7f, 0xa3, 0x02, + 0xf3, 0x69, 0x84, 0xdd, 0xf6, 0x82, 0x2e, 0x89, 0x9e, 0xe3, 0x38, 0xc3, 0x18, 0xa8, 0xa7, 0x31, + 0xb0, 0x59, 0xe2, 0x27, 0x1a, 0x5b, 0xcd, 0x1b, 0xaf, 0xaf, 0xf4, 0x3d, 0xaf, 0xef, 0x10, 0x4c, + 0xa4, 0xbd, 0x78, 0x7f, 0x65, 0xcb, 0x8d, 0xde, 0xb9, 0xf1, 0xb9, 0xe9, 0xc4, 0xa4, 0xc4, 0x89, + 0xeb, 0x05, 0x27, 0x4e, 0x8f, 0x67, 0x93, 0xf7, 0xf0, 0x56, 0x99, 0x87, 0x1b, 0xe3, 0xf9, 0x14, + 0xa9, 0xf4, 0xef, 0x54, 0x38, 0xc7, 0xdc, 0xc2, 0xb1, 0xb1, 0xe3, 0x8c, 0x29, 0x01, 0x8b, 0x50, + 0x8f, 0xd1, 0xd9, 0xe8, 0x17, 0x0e, 0x51, 0x97, 0x05, 0x9e, 0x43, 0xee, 0x91, 0x63, 0xe2, 0x30, + 0x8f, 0xd4, 0x8c, 0x0c, 0xa1, 0x2d, 0xc1, 0xf4, 0xd7, 0x9e, 0xed, 0xb2, 0xc0, 0xaa, 0xb2, 0x8f, + 0x29, 0x4c, 0xbf, 0xb9, 0x76, 0xef, 0xd0, 0xa5, 0xbe, 0x46, 0x3f, 0xa4, 0xb0, 0xe8, 0xa2, 0xba, + 0xec, 0xa2, 0x2b, 0x30, 0x67, 0xfa, 0x7e, 0xc7, 0x74, 0xfb, 0x24, 0xc0, 0x49, 0xa7, 0x30, 0x1d, + 0x64, 0x2c, 0x2d, 0x08, 0x74, 0xa6, 0xae, 0x17, 0x07, 0x3d, 0xc2, 0xac, 0x5d, 0x33, 0x04, 0x0c, + 0xe5, 0xe3, 0xf9, 0x24, 0x10, 0xf2, 0x18, 0x53, 0x3f, 0x87, 0xe5, 0x21, 0x01, 0x69, 0x48, 0xd0, + 0x42, 0x12, 0x47, 0xe4, 0x96, 0x6b, 0x31, 0xa5, 0x9a, 0xbc, 0x90, 0x64, 0x28, 0x5a, 0x20, 0x6c, + 0xf7, 0xd8, 0x8e, 0xd2, 0x72, 0x35, 0x83, 0x05, 0x42, 0x42, 0xea, 0xbf, 0xa4, 0xc0, 0xdc, 0x6e, + 0xbc, 0xe7, 0xd8, 0x3d, 0x86, 0xa0, 0xc6, 0xcf, 0x4c, 0xac, 0x48, 0x26, 0x16, 0x0d, 0xa5, 0x0e, + 0x37, 0x54, 0x45, 0x36, 0xd4, 0x22, 0xd4, 0xfb, 0xc4, 0xb5, 0x48, 0xc0, 0x0d, 0xcf, 0x21, 0xae, + 0x50, 0x2d, 0x51, 0x48, 0xff, 0x17, 0x15, 0xa6, 0xbf, 0x67, 0x11, 0x96, 0xa1, 0xe9, 0x1f, 0x78, + 0x2e, 0xd9, 0x8e, 0x69, 0xf0, 0x71, 0x59, 0x44, 0x94, 0x76, 0x1e, 0x6a, 0x7b, 0x76, 0x10, 0x1d, + 0x30, 0xef, 0xcf, 0x1a, 0x08, 0x50, 0x2c, 0x19, 0x98, 0x36, 0xba, 0xbc, 0x61, 0x20, 0xc0, 0x15, + 0x9a, 0x4e, 0x3d, 0x24, 0x2f, 0x05, 0x8d, 0xc2, 0x52, 0x50, 0x8c, 0x20, 0x28, 0x8d, 0xa0, 0xab, + 0xd0, 0xea, 0x3b, 0xde, 0x9e, 0xe9, 0x18, 0xa4, 0x77, 0xdc, 0x09, 0xfb, 0x3b, 0x7e, 0xc4, 0xdc, + 0x5d, 0x33, 0x0a, 0x78, 0x6a, 0x1f, 0x26, 0x62, 0x37, 0x0a, 0xb8, 0xbb, 0x53, 0x58, 0xff, 0x1f, + 0x05, 0x00, 0xd3, 0x8e, 0x99, 0x38, 0xb7, 0x96, 0x29, 0xc5, 0xb5, 0x6c, 0x11, 0xea, 0x01, 0x19, + 0x98, 0xc1, 0x61, 0x92, 0x6a, 0x08, 0xe5, 0x14, 0xab, 0x14, 0x14, 0xfb, 0x08, 0x60, 0x9f, 0xcd, + 0x43, 0xf9, 0x30, 0x93, 0xd3, 0xc2, 0x50, 0xe8, 0x12, 0x56, 0x12, 0x6f, 0x1b, 0xc2, 0x70, 0x9a, + 0xc7, 0xa6, 0x65, 0xf1, 0x74, 0xa9, 0x61, 0x1e, 0xa7, 0x88, 0x92, 0x6c, 0xa9, 0x8f, 0xc8, 0x96, + 0xa9, 0x34, 0xb8, 0xfe, 0x5b, 0x81, 0xc6, 0x9a, 0x63, 0xf6, 0x0e, 0x27, 0x54, 0x5d, 0x56, 0x51, + 0x2d, 0xa8, 0xb8, 0x09, 0xb3, 0x7b, 0x94, 0x5d, 0xa2, 0x02, 0xb3, 0x42, 0xf3, 0xc6, 0x0f, 0x96, + 0x68, 0x29, 0x27, 0x97, 0x21, 0xd3, 0xc9, 0xea, 0x56, 0xc7, 0xab, 0x5b, 0x1b, 0xa1, 0x6e, 0xba, + 0x5e, 0xe8, 0xbf, 0x5d, 0x81, 0x19, 0x56, 0x56, 0x0d, 0x72, 0x14, 0x93, 0x30, 0xd2, 0x3e, 0x81, + 0xe9, 0x38, 0x11, 0x55, 0x99, 0x54, 0xd4, 0x94, 0x44, 0xfb, 0x90, 0xaf, 0x87, 0x8c, 0x5e, 0x65, + 0xf4, 0x17, 0x4b, 0xe8, 0xd3, 0x05, 0xd6, 0xc8, 0x86, 0xd3, 0x95, 0xf0, 0xc0, 0x74, 0x2d, 0x87, + 0x18, 0x24, 0x8c, 0x9d, 0x88, 0xd7, 0x66, 0x09, 0x87, 0x91, 0x76, 0xd4, 0x09, 0xfb, 0x7c, 0x9d, + 0xe4, 0x10, 0xb5, 0x0e, 0x8e, 0xa3, 0x9f, 0x50, 0xf5, 0x0c, 0x41, 0x13, 0x3e, 0x20, 0x47, 0xcc, + 0x43, 0x98, 0x9e, 0x09, 0x98, 0xcd, 0xc9, 0xad, 0x86, 0x81, 0x20, 0xe1, 0xa8, 0x8b, 0x11, 0x66, + 0x0c, 0xb0, 0x11, 0x13, 0x30, 0x85, 0x3e, 0x4c, 0x2e, 0xe4, 0x50, 0x28, 0xe4, 0x85, 0x72, 0xdb, + 0x2c, 0x2b, 0xb7, 0xff, 0x5c, 0x81, 0x59, 0x4c, 0xc2, 0xc4, 0x35, 0x97, 0x68, 0xb6, 0x78, 0x03, + 0x29, 0x16, 0x05, 0x0c, 0xd5, 0x85, 0x42, 0xdb, 0x72, 0xd9, 0x93, 0x70, 0x34, 0xa0, 0x29, 0x7c, + 0x5b, 0x2a, 0x7f, 0x22, 0x2a, 0x99, 0x65, 0x53, 0x2c, 0x83, 0x02, 0x86, 0x16, 0x8e, 0xc8, 0x93, + 0x62, 0x2c, 0x85, 0x29, 0x6d, 0xe4, 0xa5, 0xf3, 0x63, 0x94, 0x09, 0x18, 0xea, 0xa5, 0xc8, 0x4b, + 0xe6, 0x46, 0x53, 0x67, 0x08, 0xe4, 0xcc, 0xe7, 0xc5, 0xe5, 0x2f, 0x85, 0x0b, 0xb1, 0xd1, 0x18, + 0x19, 0x1b, 0x20, 0xc5, 0x86, 0x9c, 0xa2, 0xcd, 0x42, 0x8a, 0x5e, 0x86, 0x59, 0xe4, 0x93, 0x5b, + 0xfe, 0x24, 0xa4, 0x1c, 0x61, 0xb3, 0xf9, 0x08, 0x93, 0x63, 0x64, 0x6e, 0x48, 0x8c, 0xcc, 0xa7, + 0x79, 0xf7, 0x27, 0x2a, 0xc0, 0x06, 0xf1, 0xcd, 0x20, 0x1a, 0x10, 0x37, 0xa2, 0xea, 0x59, 0x29, + 0x94, 0x3a, 0x57, 0xc2, 0x89, 0xab, 0x96, 0x2a, 0xaf, 0x5a, 0x1a, 0x54, 0x99, 0xc1, 0xd1, 0x9b, + 0xec, 0x6f, 0x6a, 0x4c, 0xdf, 0x0c, 0x90, 0x1b, 0xa6, 0x4a, 0x0a, 0xd3, 0x55, 0xc9, 0x0b, 0x2c, + 0xbe, 0x8e, 0xd5, 0x0c, 0x04, 0x68, 0x09, 0xc9, 0xe6, 0x63, 0xbb, 0x80, 0x3a, 0xae, 0x32, 0x32, + 0x76, 0xec, 0xc6, 0xe5, 0x2a, 0xb4, 0xc2, 0x78, 0x2f, 0x53, 0x6e, 0x3b, 0x1e, 0xf0, 0xa4, 0x29, + 0xe0, 0xa9, 0x51, 0x71, 0x47, 0x43, 0x07, 0xe1, 0xc2, 0x97, 0x21, 0xf2, 0x9d, 0x8c, 0xfe, 0xf7, + 0x2a, 0xb4, 0x76, 0x82, 0xbe, 0xe9, 0xda, 0x3f, 0x93, 0x76, 0xec, 0xa7, 0x6a, 0x00, 0x96, 0xa1, + 0x49, 0xdc, 0xbe, 0x63, 0x87, 0x07, 0xdb, 0x99, 0xdd, 0x44, 0x94, 0x68, 0xec, 0xea, 0xb0, 0x16, + 0xa1, 0x26, 0xb5, 0x08, 0x8b, 0x50, 0x1f, 0x78, 0x7b, 0xb6, 0x93, 0xc4, 0x3d, 0x87, 0x58, 0xcc, + 0x13, 0x87, 0xb0, 0x5e, 0x21, 0x8d, 0xf9, 0x04, 0x91, 0xb5, 0x0d, 0xd3, 0xa5, 0x6d, 0x43, 0x43, + 0x6c, 0x1b, 0x64, 0xc3, 0x43, 0xc1, 0xf0, 0x68, 0xae, 0x66, 0x5a, 0x87, 0x46, 0x2d, 0xf1, 0x7f, + 0xa3, 0x40, 0x2b, 0x73, 0x05, 0xf6, 0xd4, 0x43, 0x4d, 0x99, 0x8f, 0x4e, 0xb5, 0x24, 0x3a, 0xd3, + 0x98, 0xaa, 0x88, 0x31, 0x45, 0xa3, 0xd0, 0x0b, 0x6d, 0x61, 0x63, 0x93, 0xc2, 0x74, 0x36, 0x87, + 0x98, 0x82, 0x21, 0x11, 0x12, 0xb6, 0xb1, 0x75, 0x69, 0x1b, 0x9b, 0x5f, 0xa9, 0xff, 0x42, 0x81, + 0xf3, 0x34, 0x02, 0x0a, 0x6a, 0xec, 0x40, 0xcb, 0xcb, 0x45, 0x09, 0x5f, 0xca, 0xde, 0x2c, 0x59, + 0x8a, 0xf2, 0x01, 0x65, 0x14, 0x88, 0x29, 0x43, 0x2b, 0x37, 0x09, 0x5f, 0xdb, 0xca, 0x18, 0xe6, + 0xe5, 0x31, 0x0a, 0xc4, 0xfa, 0x5f, 0x29, 0xd0, 0xc2, 0xc5, 0x53, 0xa8, 0x01, 0x67, 0x2e, 0xf6, + 0x43, 0x38, 0x9f, 0x9f, 0xf9, 0x9e, 0x1d, 0x46, 0x6d, 0x75, 0xb9, 0x32, 0xa9, 0xe8, 0xa5, 0x0c, + 0xf4, 0x3f, 0x52, 0xe1, 0xd5, 0xdd, 0xd8, 0x71, 0x3a, 0x24, 0x0c, 0xcd, 0x3e, 0x59, 0x3b, 0xe9, + 0x92, 0x23, 0xfa, 0xc1, 0x20, 0x47, 0x43, 0x63, 0x88, 0x76, 0x52, 0xac, 0x15, 0xb1, 0x3d, 0x37, + 0x0d, 0x21, 0x11, 0x45, 0x53, 0x2e, 0x44, 0x3e, 0xed, 0xca, 0x72, 0x85, 0x2e, 0xd2, 0x1c, 0xd4, + 0x7e, 0x1a, 0x66, 0x58, 0x97, 0xc0, 0xa7, 0x69, 0x57, 0x99, 0x02, 0x1f, 0x97, 0xf6, 0x25, 0xa5, + 0x52, 0x61, 0xbf, 0xc1, 0xe1, 0x5b, 0x6e, 0x14, 0x9c, 0x18, 0x12, 0xc7, 0xa5, 0x2f, 0x61, 0xa1, + 0x30, 0x44, 0x6b, 0x41, 0xe5, 0x90, 0x9c, 0x70, 0x3d, 0xe8, 0x9f, 0xda, 0x8f, 0x42, 0xed, 0x98, + 0x6e, 0x50, 0xb9, 0xf7, 0x97, 0x4a, 0x24, 0xe0, 0x32, 0x1b, 0x38, 0xf0, 0x43, 0xf5, 0x27, 0x14, + 0xfd, 0xcd, 0x54, 0x31, 0x51, 0x47, 0x45, 0xd2, 0x51, 0xbf, 0x0b, 0xcd, 0x4e, 0xd8, 0xdf, 0x30, + 0x23, 0x93, 0x0d, 0xfc, 0x18, 0x9a, 0x83, 0x0c, 0x64, 0x83, 0xcb, 0xe7, 0xe3, 0x44, 0x86, 0x38, + 0x5c, 0xff, 0x56, 0x85, 0x76, 0xb9, 0x29, 0x42, 0x9f, 0xca, 0x40, 0x82, 0x60, 0xdd, 0xb3, 0x08, + 0x53, 0xad, 0x66, 0x24, 0x20, 0xf5, 0x1d, 0x09, 0x02, 0xba, 0xbe, 0xf1, 0x36, 0x1e, 0x21, 0x6d, + 0x05, 0xaa, 0x4e, 0xe2, 0x96, 0xd1, 0x52, 0xb0, 0x71, 0xda, 0x00, 0x5a, 0xcc, 0xba, 0x82, 0x42, + 0xdc, 0x67, 0xab, 0x13, 0xfb, 0x2c, 0xf4, 0xd1, 0x69, 0x02, 0x0f, 0x74, 0x5c, 0x81, 0xf5, 0x52, + 0x0f, 0x2e, 0x94, 0x0e, 0x2d, 0x71, 0xe0, 0xbb, 0xb2, 0x03, 0x2f, 0x0d, 0x57, 0x25, 0xef, 0x44, + 0x1f, 0xb4, 0x4d, 0x12, 0x75, 0xcc, 0x27, 0xab, 0xae, 0xd5, 0xb1, 0xdd, 0x2e, 0x39, 0xa2, 0xd1, + 0xbe, 0x0c, 0x4d, 0x7e, 0xdc, 0x90, 0xba, 0xa9, 0x61, 0x88, 0xa8, 0xa1, 0xa7, 0x10, 0xb9, 0x7c, + 0xa8, 0x14, 0xf2, 0x41, 0xbf, 0x09, 0x33, 0xe2, 0x74, 0x6c, 0x81, 0x31, 0x9f, 0x74, 0xc9, 0x11, + 0x53, 0x68, 0xd6, 0xe0, 0x10, 0xc3, 0xb3, 0x11, 0x7c, 0xf7, 0xc1, 0x21, 0xfd, 0x1f, 0x54, 0x38, + 0x57, 0x10, 0x39, 0xf4, 0x9f, 0x96, 0x8f, 0x18, 0x2f, 0x95, 0x61, 0xf1, 0x52, 0x95, 0xe2, 0xe5, + 0x10, 0x16, 0xd0, 0x49, 0xc2, 0xd4, 0xed, 0x1a, 0x0b, 0x80, 0x4f, 0xca, 0x36, 0x03, 0x45, 0x21, + 0xb9, 0xef, 0x05, 0x2c, 0x3a, 0xbf, 0xc8, 0x77, 0x89, 0xc0, 0x62, 0xf9, 0xe0, 0x12, 0xf7, 0xbf, + 0x27, 0xbb, 0xff, 0x07, 0xca, 0xdc, 0x2f, 0x4a, 0x22, 0xf8, 0xff, 0x08, 0xe6, 0x69, 0x51, 0xed, + 0x12, 0xd7, 0xea, 0x84, 0x7d, 0x66, 0xc8, 0x65, 0x68, 0x22, 0x7d, 0x27, 0xec, 0x67, 0x9b, 0x43, + 0x01, 0x45, 0x47, 0xf4, 0x1c, 0x9b, 0x16, 0x4f, 0x36, 0x82, 0x17, 0x3d, 0x01, 0x45, 0x17, 0xc8, + 0x90, 0xf0, 0x93, 0x19, 0x6a, 0xdd, 0x8a, 0x91, 0xc2, 0xfa, 0x9f, 0xd7, 0x61, 0x8a, 0x47, 0x23, + 0x5b, 0x14, 0xe9, 0x7e, 0x3c, 0x2d, 0xab, 0x08, 0x61, 0xcf, 0xdb, 0x3b, 0xce, 0xc2, 0x0b, 0x21, + 0xf1, 0x58, 0xac, 0x22, 0x1f, 0x8b, 0xe5, 0x64, 0xaa, 0x16, 0x65, 0xca, 0xe9, 0x55, 0x2b, 0xea, + 0x45, 0x5b, 0x3c, 0xd6, 0xf5, 0xec, 0x3a, 0x66, 0xb4, 0xef, 0x05, 0x03, 0xbe, 0xbd, 0xae, 0x19, + 0x05, 0x3c, 0x6d, 0x2b, 0x11, 0x97, 0xee, 0x0b, 0x70, 0x09, 0xcf, 0x61, 0x69, 0x17, 0x8e, 0x98, + 0x64, 0x7f, 0x80, 0xe7, 0x23, 0x32, 0x12, 0x65, 0x0b, 0x43, 0xdb, 0x73, 0x59, 0x87, 0x8a, 0xdb, + 0x00, 0x11, 0x45, 0x35, 0x1f, 0x84, 0xfd, 0xdb, 0x81, 0x37, 0xe0, 0x5b, 0xaf, 0x04, 0x64, 0x9a, + 0x7b, 0x6e, 0x94, 0x74, 0xb7, 0x78, 0x32, 0x22, 0xa2, 0x28, 0x2d, 0x07, 0x59, 0xc3, 0x34, 0x63, + 0x24, 0x20, 0x8d, 0xa5, 0x90, 0x1c, 0xf1, 0xc6, 0x9e, 0xfe, 0x29, 0x79, 0x6e, 0x5e, 0xf6, 0x5c, + 0xae, 0x53, 0x6b, 0xb1, 0xaf, 0x62, 0xa7, 0x96, 0xb5, 0x38, 0x0b, 0x52, 0x8b, 0xb3, 0x0a, 0x53, + 0x9e, 0x4f, 0xd3, 0x3f, 0x6c, 0x6b, 0x2c, 0x5d, 0x7e, 0x68, 0x78, 0x81, 0x5a, 0xd9, 0xc1, 0x91, + 0x98, 0x18, 0x09, 0x9d, 0x76, 0x0f, 0xe6, 0xbd, 0xfd, 0x7d, 0xc7, 0x76, 0xc9, 0x6e, 0x1c, 0x1e, + 0xb0, 0x6d, 0xf8, 0x39, 0x16, 0xec, 0x7a, 0x59, 0x13, 0x21, 0x8f, 0x34, 0xf2, 0xa4, 0xb4, 0xf3, + 0x33, 0x23, 0xdc, 0x00, 0xb1, 0x02, 0x77, 0x9e, 0x15, 0x38, 0x09, 0xc7, 0xce, 0x17, 0x85, 0x42, + 0x7f, 0x81, 0x19, 0x4e, 0x44, 0x21, 0x97, 0xc8, 0xec, 0x1d, 0x10, 0x76, 0xa0, 0xd4, 0x5e, 0xc4, + 0xfe, 0x51, 0xc4, 0xf1, 0xee, 0xee, 0xd5, 0xa4, 0xbb, 0x5b, 0xfa, 0x10, 0x66, 0x44, 0x05, 0x4b, + 0x92, 0xf9, 0xbc, 0x98, 0xcc, 0xd3, 0x62, 0xae, 0xfe, 0xa6, 0x02, 0xf3, 0x39, 0xd5, 0xe8, 0xe8, + 0xc8, 0x8e, 0x1c, 0xc2, 0x39, 0x20, 0x40, 0x77, 0x4e, 0x16, 0x09, 0x7b, 0x3c, 0x79, 0xd8, 0xdf, + 0x5c, 0x92, 0x4a, 0xda, 0x46, 0xeb, 0x30, 0x63, 0xef, 0x74, 0x29, 0xa3, 0xae, 0x17, 0xbb, 0x56, + 0x7a, 0x40, 0x2f, 0xe0, 0xd8, 0x96, 0x7e, 0xa7, 0xbb, 0x66, 0x5a, 0x7d, 0x82, 0xd7, 0x35, 0x35, + 0x26, 0x93, 0x8c, 0xd4, 0x2d, 0x98, 0xbe, 0x6f, 0xfb, 0xe1, 0xba, 0x37, 0x18, 0xd0, 0x10, 0xb0, + 0x48, 0x44, 0x7b, 0x7c, 0x85, 0x19, 0x8c, 0x43, 0xd4, 0x9a, 0x16, 0xd9, 0x37, 0x63, 0x27, 0xa2, + 0x43, 0x93, 0x92, 0x21, 0xa0, 0xd8, 0xf1, 0x42, 0xe8, 0xb9, 0x1b, 0x48, 0x8d, 0x72, 0x0a, 0x18, + 0xfd, 0xef, 0x54, 0x68, 0xb1, 0x8a, 0xb8, 0xce, 0x02, 0xce, 0x62, 0x44, 0x37, 0xa0, 0xc6, 0x0a, + 0x00, 0xef, 0x28, 0x47, 0x9f, 0xc9, 0xe0, 0x50, 0xed, 0x26, 0xd4, 0x3d, 0x9f, 0xb5, 0xa1, 0x58, + 0x2e, 0xaf, 0x0c, 0x23, 0x92, 0x8f, 0xe4, 0x0d, 0x4e, 0xa5, 0xdd, 0x06, 0x18, 0x64, 0x5d, 0x27, + 0x36, 0x0f, 0x93, 0xf2, 0x10, 0x28, 0xa9, 0x71, 0xd3, 0x75, 0x31, 0x3d, 0x97, 0xaf, 0x18, 0x32, + 0x52, 0xdb, 0x86, 0x39, 0x26, 0xf6, 0x4e, 0x72, 0x38, 0xc7, 0x7c, 0x30, 0xf9, 0x8c, 0x39, 0x6a, + 0xfd, 0xf7, 0x14, 0x6e, 0x46, 0xfa, 0xb5, 0x4b, 0xd0, 0xf6, 0x99, 0x49, 0x94, 0x53, 0x99, 0x64, + 0x09, 0xa6, 0x07, 0xb1, 0x70, 0x56, 0x58, 0x31, 0x52, 0x38, 0x73, 0x51, 0x65, 0x62, 0x17, 0xe9, + 0xbf, 0xaf, 0x40, 0xfb, 0x53, 0xcf, 0x76, 0xd9, 0x87, 0x55, 0xdf, 0x77, 0xf8, 0xf5, 0xcd, 0xa9, + 0x7d, 0xfe, 0x93, 0xd0, 0x30, 0x91, 0x8d, 0x1b, 0x71, 0xb7, 0x4f, 0x70, 0xfe, 0x97, 0xd1, 0x08, + 0x87, 0x30, 0x15, 0xf1, 0x10, 0x46, 0xff, 0x46, 0x81, 0x39, 0x34, 0xca, 0x67, 0xb1, 0x1d, 0x9d, + 0x5a, 0xbe, 0x35, 0x98, 0x3e, 0x8a, 0xed, 0xe8, 0x14, 0x51, 0x99, 0xd2, 0x15, 0xe3, 0xa9, 0x52, + 0x12, 0x4f, 0xfa, 0xb7, 0x0a, 0x5c, 0xcc, 0x9b, 0x75, 0xb5, 0xd7, 0x23, 0xfe, 0xb3, 0x4c, 0x29, + 0xe9, 0x10, 0xaa, 0x5a, 0x72, 0x08, 0x15, 0x90, 0x1e, 0xb1, 0x8f, 0x49, 0xb0, 0x1a, 0xf2, 0x5d, + 0xb5, 0x80, 0x29, 0x55, 0xc9, 0x20, 0x5f, 0x93, 0xde, 0x8b, 0xab, 0xd2, 0x2f, 0xa8, 0xf0, 0xda, + 0x66, 0x9a, 0xb8, 0xf7, 0x03, 0xd3, 0x0d, 0xf7, 0x49, 0x10, 0x3c, 0x43, 0x7d, 0xee, 0xc1, 0xac, + 0x4b, 0x1e, 0x67, 0x32, 0xf1, 0x74, 0x9e, 0x94, 0x8d, 0x4c, 0x3c, 0x59, 0xed, 0xd3, 0xff, 0x57, + 0x81, 0x16, 0xf2, 0xb9, 0x6b, 0xf7, 0x0e, 0x9f, 0xa1, 0xf2, 0xdb, 0x30, 0x77, 0xc8, 0x24, 0xa0, + 0xd0, 0x29, 0xca, 0x7e, 0x8e, 0x7a, 0x42, 0xf5, 0xbf, 0x53, 0x60, 0x21, 0xb9, 0x75, 0x3e, 0xb6, + 0x9f, 0x65, 0x30, 0xef, 0xc2, 0x3c, 0x9e, 0xe2, 0x9f, 0xd6, 0x00, 0x79, 0xf2, 0x09, 0x2d, 0xf0, + 0x67, 0x0a, 0xcc, 0x23, 0xa7, 0x5b, 0x6e, 0x44, 0x82, 0x53, 0xeb, 0x7f, 0x07, 0x9a, 0xc4, 0x8d, + 0x02, 0xd3, 0x3d, 0x4d, 0x85, 0x15, 0x49, 0x27, 0x2c, 0xb2, 0xdf, 0x28, 0xa0, 0x31, 0x56, 0x1b, + 0x76, 0x38, 0xb0, 0xc3, 0xf0, 0x19, 0xba, 0x6e, 0x32, 0x81, 0x7f, 0x47, 0x85, 0xf3, 0x02, 0x97, + 0x4e, 0x1c, 0x3d, 0xef, 0x22, 0x6b, 0x1b, 0xd0, 0xa0, 0x3d, 0x86, 0x78, 0xc7, 0x3a, 0xe9, 0x44, + 0x19, 0x21, 0xed, 0x82, 0x19, 0xd0, 0x25, 0x3d, 0xcf, 0xb5, 0xb0, 0x14, 0xcf, 0x1a, 0x12, 0x8e, + 0x96, 0xa1, 0x25, 0x81, 0xcd, 0xba, 0xe9, 0xf6, 0x88, 0xf3, 0xd2, 0x98, 0x48, 0xff, 0x43, 0x05, + 0xe6, 0x70, 0xc8, 0xf3, 0xaf, 0xb2, 0xfe, 0xc7, 0x0a, 0x0f, 0xe4, 0x17, 0xc6, 0x4b, 0x34, 0xbc, + 0x16, 0x05, 0x2e, 0x62, 0x5f, 0xfe, 0xfc, 0x86, 0xd6, 0x1d, 0x68, 0xf6, 0x0e, 0x4c, 0xb7, 0x7f, + 0xaa, 0xe0, 0x12, 0x49, 0xf5, 0x08, 0x5e, 0x15, 0x0f, 0xfd, 0xd7, 0xf1, 0x13, 0x53, 0xff, 0x9d, + 0x9c, 0x2a, 0x23, 0xdf, 0x50, 0x3c, 0x9d, 0xd1, 0x0f, 0x61, 0x01, 0x6f, 0xa1, 0x85, 0x9e, 0x51, + 0x6b, 0xc3, 0x94, 0x69, 0xe1, 0xd1, 0x87, 0xc2, 0x88, 0x12, 0x50, 0x7e, 0xa5, 0xc0, 0xdf, 0xc3, + 0x65, 0xaf, 0x14, 0x2e, 0x01, 0x98, 0x96, 0xf5, 0xd0, 0x0b, 0x2c, 0xdb, 0x4d, 0x36, 0x08, 0x02, + 0x46, 0xff, 0x14, 0x66, 0x6e, 0x07, 0xde, 0xe0, 0xbe, 0x70, 0x9f, 0x3c, 0xf2, 0xc6, 0x5b, 0xbc, + 0x8b, 0x56, 0xe5, 0xbb, 0x68, 0xfd, 0x2b, 0xb8, 0x50, 0x10, 0x9c, 0x19, 0x6b, 0x1d, 0xaf, 0xc9, + 0x93, 0x49, 0x78, 0xc8, 0x94, 0x9d, 0x05, 0x8a, 0xb2, 0x18, 0x12, 0x91, 0xfe, 0xf3, 0x0a, 0xbc, + 0x51, 0x60, 0xbf, 0xea, 0xfb, 0x81, 0x77, 0xcc, 0x7d, 0x72, 0x16, 0xd3, 0xc8, 0xcd, 0xb1, 0x9a, + 0x6b, 0x8e, 0xcb, 0x85, 0x90, 0x1a, 0xfa, 0xef, 0x41, 0x88, 0x3f, 0x50, 0x60, 0x9e, 0x0b, 0x61, + 0x59, 0x7c, 0xda, 0xf7, 0xa0, 0x8e, 0x0f, 0x75, 0xf8, 0x84, 0x6f, 0x94, 0x4e, 0x98, 0x3c, 0x30, + 0x32, 0xf8, 0xe0, 0x62, 0x44, 0xaa, 0x65, 0x19, 0xf5, 0x41, 0x1a, 0xec, 0x13, 0x3f, 0xa5, 0xe1, + 0x04, 0xfa, 0x4f, 0x25, 0xc1, 0xbc, 0x41, 0x1c, 0x72, 0x96, 0x36, 0xd2, 0x1f, 0xc0, 0x1c, 0x7b, + 0x35, 0x94, 0xd9, 0xe0, 0x4c, 0xd8, 0x3e, 0x84, 0x16, 0x63, 0x7b, 0xe6, 0xf2, 0xa6, 0xd9, 0x41, + 0xed, 0x23, 0x96, 0x92, 0x33, 0xe1, 0xfe, 0x36, 0x9c, 0x4b, 0x6c, 0x8f, 0x2f, 0x71, 0x91, 0xf7, + 0x90, 0xbb, 0x41, 0xfd, 0xb7, 0x14, 0x58, 0x5c, 0xf7, 0xdc, 0x63, 0x12, 0x84, 0xd2, 0xeb, 0x5d, + 0x24, 0x91, 0xb2, 0x9f, 0x43, 0xda, 0x0a, 0x68, 0x3d, 0x81, 0x82, 0x1f, 0x4f, 0xaa, 0xec, 0x78, + 0xb2, 0xe4, 0x8b, 0xf6, 0x2e, 0x5c, 0x88, 0x19, 0xd7, 0x07, 0x6e, 0x40, 0x4c, 0x8b, 0x9d, 0xc7, + 0x09, 0x45, 0xaf, 0xfc, 0xa3, 0xfe, 0x35, 0x2c, 0x89, 0x72, 0x75, 0x49, 0xb4, 0x1b, 0xd8, 0xc7, + 0x82, 0x6c, 0xfc, 0xec, 0x5d, 0x91, 0xce, 0xde, 0xb3, 0xb3, 0x7a, 0x55, 0x3a, 0xab, 0xbf, 0x08, + 0x0d, 0x3b, 0xe4, 0x0c, 0xd8, 0xbc, 0xd3, 0x46, 0x86, 0xd0, 0x4d, 0x58, 0x40, 0x2f, 0xf3, 0xbb, + 0x30, 0x36, 0xc5, 0x12, 0x4c, 0x63, 0xe8, 0xa6, 0x93, 0xa4, 0xf0, 0xd0, 0x9b, 0xa5, 0xa1, 0xf7, + 0xa8, 0x7a, 0x17, 0x16, 0xf8, 0x5b, 0xa2, 0x5d, 0xb3, 0x6f, 0xbb, 0x58, 0xcb, 0x2f, 0x01, 0xf8, + 0x66, 0x3f, 0x79, 0xd9, 0x88, 0x37, 0x82, 0x02, 0x86, 0x7e, 0x0f, 0x0f, 0xbc, 0xc7, 0xfc, 0xbb, + 0x8a, 0xdf, 0x33, 0x8c, 0xfe, 0x39, 0x68, 0x06, 0x09, 0x7d, 0xcf, 0x0d, 0x89, 0xc0, 0x75, 0x19, + 0x9a, 0xeb, 0x71, 0x10, 0x10, 0x97, 0x4e, 0x95, 0x3c, 0xcf, 0x13, 0x51, 0x94, 0x6f, 0x37, 0xe3, + 0x8b, 0xb7, 0x07, 0x02, 0x46, 0xff, 0xb7, 0x3a, 0x34, 0xba, 0x76, 0xdf, 0x35, 0x1d, 0x83, 0x1c, + 0x69, 0x1f, 0x43, 0x1d, 0x77, 0x46, 0x3c, 0x20, 0xcb, 0x4e, 0xb3, 0x71, 0x34, 0x6e, 0x01, 0x0d, + 0x72, 0x74, 0xe7, 0x15, 0x83, 0xd3, 0x68, 0x9f, 0x25, 0x2f, 0xae, 0xb6, 0xf0, 0xa4, 0x8c, 0x2f, + 0x93, 0x3f, 0x3c, 0x86, 0x09, 0x1f, 0x8d, 0xbc, 0x64, 0x0e, 0x54, 0xa0, 0x1e, 0xeb, 0x9c, 0x78, + 0x15, 0x1a, 0x2e, 0x10, 0x36, 0x58, 0x5c, 0x20, 0xa4, 0xa1, 0xd4, 0x26, 0x3b, 0x4b, 0xe2, 0x0d, + 0xc1, 0x70, 0x6a, 0x3c, 0x72, 0xe2, 0xd4, 0x48, 0x43, 0xa9, 0x0f, 0x62, 0xb7, 0xff, 0xc0, 0xe7, + 0x47, 0x9c, 0xc3, 0xa9, 0xef, 0xb0, 0x61, 0x9c, 0x1a, 0x69, 0x28, 0x75, 0xc0, 0xd6, 0x08, 0x66, + 0xf4, 0x51, 0xd4, 0xb8, 0x94, 0x70, 0x6a, 0xa4, 0xd1, 0xbe, 0x80, 0x56, 0x9f, 0x44, 0x86, 0xe7, + 0x0d, 0xd6, 0x4e, 0x36, 0xf9, 0x0d, 0x13, 0x3e, 0x30, 0xbf, 0x36, 0x94, 0xcf, 0x66, 0x8e, 0x00, + 0x39, 0x16, 0xf8, 0x68, 0x3f, 0x0b, 0x6f, 0x78, 0x2e, 0x45, 0xed, 0x9a, 0x41, 0x64, 0xf7, 0x6c, + 0xdf, 0x74, 0xa3, 0x75, 0xcf, 0x75, 0xd9, 0x7a, 0x66, 0x90, 0x23, 0xfe, 0x04, 0xfd, 0xfd, 0xa1, + 0x13, 0xed, 0x8c, 0xa2, 0xbe, 0xf3, 0x8a, 0x31, 0x9a, 0xbd, 0xf6, 0xcb, 0x0a, 0x2c, 0x17, 0x46, + 0x6c, 0xd8, 0x61, 0x4f, 0x94, 0x01, 0x9f, 0xaf, 0x7f, 0x30, 0xb9, 0x0c, 0x39, 0x06, 0x77, 0x5e, + 0x31, 0xc6, 0x4e, 0xc2, 0xad, 0x7c, 0xdf, 0x3b, 0x24, 0xee, 0xda, 0x09, 0x1d, 0xbb, 0xb5, 0xc1, + 0x6e, 0xb3, 0xc6, 0x58, 0x59, 0x22, 0xc8, 0xac, 0x2c, 0xa1, 0xd7, 0x1a, 0x30, 0xe5, 0x9b, 0x27, + 0x8e, 0x67, 0x5a, 0xfa, 0x7f, 0x56, 0x01, 0x12, 0x57, 0x87, 0xac, 0x23, 0x96, 0x92, 0xec, 0xf2, + 0xd8, 0x24, 0xf3, 0x9d, 0x13, 0x21, 0xcd, 0xba, 0xe5, 0x69, 0xf6, 0x23, 0x93, 0xa6, 0x19, 0x72, + 0xcb, 0x25, 0xda, 0xcd, 0x5c, 0xa2, 0x5d, 0x1e, 0x9b, 0x68, 0x5c, 0x28, 0x9e, 0x6a, 0x37, 0x73, + 0xa9, 0x76, 0x79, 0x6c, 0xaa, 0x71, 0x7a, 0x9e, 0x6c, 0x37, 0x73, 0xc9, 0x76, 0x79, 0x6c, 0xb2, + 0x71, 0x7a, 0x9e, 0x6e, 0x37, 0x73, 0xe9, 0x76, 0x79, 0x6c, 0xba, 0x71, 0x7a, 0x9e, 0x70, 0x5f, + 0x0d, 0x4d, 0xb8, 0x95, 0xa7, 0x48, 0x38, 0xe4, 0x59, 0x4c, 0xb9, 0xaf, 0x4a, 0x02, 0x6d, 0x7a, + 0x3c, 0xf7, 0x5c, 0xa0, 0x65, 0xdc, 0x87, 0x86, 0xda, 0x2f, 0x56, 0x60, 0x8e, 0xb9, 0x1b, 0x57, + 0x65, 0x77, 0xdf, 0x2b, 0xbe, 0x83, 0x55, 0x4a, 0xde, 0xc1, 0x6a, 0xd7, 0x60, 0x01, 0x11, 0x44, + 0xb8, 0x87, 0xc4, 0x85, 0xbe, 0xf8, 0x81, 0xdd, 0xbc, 0xc6, 0x61, 0xe4, 0x0d, 0x36, 0xcc, 0xc8, + 0x4c, 0x76, 0x18, 0x19, 0x46, 0xbc, 0x17, 0xaf, 0x16, 0x7e, 0x2e, 0x12, 0xa0, 0xfe, 0x35, 0xbe, + 0x9a, 0x33, 0x88, 0x52, 0x44, 0xf6, 0x80, 0x78, 0x71, 0xc4, 0x17, 0xa9, 0x04, 0xc4, 0xc7, 0x8b, + 0x96, 0x6d, 0xb2, 0xdb, 0x64, 0xfe, 0xb2, 0x2f, 0x45, 0xb0, 0x75, 0x35, 0xbb, 0x1d, 0xe7, 0x3f, + 0xe7, 0xc8, 0x30, 0x13, 0xdc, 0x64, 0xb3, 0x5f, 0x06, 0xd9, 0x91, 0x2d, 0xbe, 0xf8, 0xab, 0x19, + 0x12, 0x8e, 0xf6, 0x41, 0x7b, 0x71, 0x78, 0x72, 0xcf, 0x76, 0x45, 0xf3, 0x34, 0xb1, 0x0f, 0x2a, + 0x7e, 0xd1, 0xff, 0x5d, 0x81, 0x73, 0x42, 0xdd, 0xe9, 0x90, 0xc8, 0x64, 0x76, 0x91, 0xde, 0x6d, + 0x2b, 0x4f, 0xf7, 0x6e, 0x7b, 0x17, 0xe6, 0xfb, 0xf2, 0xb6, 0xfc, 0x29, 0x77, 0xd4, 0x79, 0x72, + 0xe9, 0x11, 0x7a, 0xe5, 0xa9, 0x1f, 0xa1, 0xeb, 0xbf, 0xa2, 0xc2, 0x7c, 0xae, 0x19, 0x18, 0xd9, + 0x49, 0xad, 0x02, 0xd8, 0x69, 0x68, 0x8e, 0xb8, 0xf5, 0x92, 0xe3, 0xd7, 0x10, 0x88, 0xca, 0xae, + 0xdd, 0x2b, 0xa7, 0xbf, 0x76, 0xbf, 0x03, 0x4d, 0x3f, 0x73, 0xd2, 0x88, 0x43, 0x83, 0x12, 0x57, + 0x1a, 0x22, 0xa9, 0xfe, 0xab, 0x0a, 0x2c, 0x14, 0x4a, 0x36, 0xbb, 0x0c, 0xa7, 0x89, 0x9a, 0x5e, + 0x86, 0x53, 0x40, 0xc8, 0x00, 0x35, 0x9f, 0x01, 0x8e, 0x7d, 0x2c, 0xfe, 0x5c, 0x86, 0x83, 0x43, + 0xa2, 0xaf, 0x3a, 0x34, 0xfa, 0x7e, 0x4d, 0x85, 0xc5, 0xf2, 0x06, 0xeb, 0x65, 0xf5, 0xcf, 0xaf, + 0x2b, 0xd0, 0x1e, 0xb6, 0x16, 0x3e, 0x33, 0x37, 0x65, 0xf9, 0x93, 0xf6, 0xae, 0x2f, 0xab, 0x7f, + 0xce, 0x25, 0xe9, 0x23, 0x34, 0x17, 0xfa, 0x9f, 0xa6, 0xf6, 0x49, 0xbb, 0xf3, 0x97, 0xd4, 0x3e, + 0xda, 0x55, 0x68, 0xa1, 0x9a, 0xc2, 0x4b, 0x30, 0xdc, 0xec, 0x15, 0xf0, 0xfa, 0x97, 0x89, 0x2d, + 0x85, 0x46, 0xeb, 0xac, 0x62, 0x5c, 0xff, 0x6b, 0x25, 0xf1, 0x49, 0xba, 0xe7, 0x79, 0xa1, 0x7c, + 0x92, 0x45, 0x9a, 0xd0, 0x46, 0x0a, 0x91, 0x96, 0xee, 0xc5, 0xfe, 0x3f, 0xd2, 0xc6, 0x47, 0x5a, + 0x6a, 0x4b, 0xa1, 0xa5, 0xd6, 0x7f, 0x57, 0x81, 0xd7, 0x86, 0xee, 0x47, 0x47, 0x5a, 0x55, 0x68, + 0x1a, 0x55, 0xb9, 0x69, 0xcc, 0xa9, 0x57, 0x39, 0x7d, 0xa1, 0xf9, 0x5b, 0x05, 0x5e, 0x1f, 0xd1, + 0xbc, 0xe7, 0x3c, 0xab, 0x9c, 0xc6, 0xb3, 0x39, 0x61, 0xd5, 0xa1, 0x17, 0xd3, 0x63, 0x7d, 0x91, + 0xa5, 0x67, 0x45, 0x4c, 0x4f, 0xfd, 0x1f, 0x15, 0x78, 0x73, 0x82, 0x9d, 0xf8, 0xf3, 0xa5, 0xcc, + 0xd0, 0xa7, 0xb2, 0xfa, 0x3f, 0x29, 0x70, 0x65, 0xb2, 0x4d, 0xfd, 0x8b, 0xa2, 0xd1, 0x5f, 0x8a, + 0x39, 0x90, 0x3f, 0x2d, 0x10, 0xdc, 0xaa, 0x48, 0x55, 0x57, 0xcc, 0x0d, 0x35, 0x97, 0x1b, 0x67, + 0x96, 0x01, 0xf9, 0x17, 0xf1, 0xd5, 0xe2, 0x8b, 0xf8, 0x8e, 0x90, 0x22, 0xc5, 0x1d, 0xe8, 0x90, + 0xa5, 0x44, 0x58, 0x32, 0x54, 0x79, 0xc9, 0xf8, 0x39, 0x98, 0xdd, 0x20, 0x4e, 0x27, 0xec, 0x27, + 0xbf, 0x5d, 0x39, 0xd3, 0xd3, 0xd6, 0x09, 0xf4, 0x59, 0x83, 0x39, 0x51, 0x80, 0xd3, 0xfc, 0x36, + 0x43, 0x7f, 0x08, 0xaf, 0x75, 0x49, 0xb4, 0xea, 0xfb, 0x6b, 0x66, 0xef, 0x90, 0xba, 0xd9, 0xb5, + 0xba, 0xec, 0x31, 0xf1, 0xa8, 0x1f, 0xe3, 0xd0, 0x9d, 0x65, 0x98, 0x11, 0xf0, 0x17, 0xb4, 0x12, + 0x4e, 0xdf, 0x86, 0xa5, 0x61, 0x8c, 0x4f, 0x25, 0xe8, 0x7f, 0xa9, 0x30, 0x73, 0xeb, 0x49, 0x84, + 0xef, 0xe7, 0xbb, 0x84, 0xfd, 0x02, 0x3d, 0x64, 0xd7, 0x82, 0x99, 0xb5, 0x13, 0x38, 0xbf, 0x39, + 0x56, 0x8b, 0x9b, 0xe3, 0x1d, 0x00, 0x92, 0x70, 0x0b, 0xf9, 0x23, 0x9b, 0xeb, 0x25, 0x61, 0x27, + 0x4e, 0x99, 0x01, 0xfc, 0xd5, 0xb4, 0xc0, 0x82, 0xae, 0x2f, 0x1d, 0xf3, 0x49, 0x27, 0xec, 0x0b, + 0xff, 0x59, 0x04, 0xdf, 0xda, 0x14, 0xf0, 0xd4, 0x7e, 0x29, 0xe5, 0x76, 0x3c, 0xe0, 0xeb, 0x90, + 0x84, 0xcb, 0xbd, 0x01, 0xaf, 0xe7, 0xdf, 0x80, 0x2f, 0x7d, 0x09, 0xf3, 0x39, 0x71, 0x4a, 0xde, + 0x38, 0xdf, 0x90, 0x7f, 0xb0, 0x70, 0x71, 0x94, 0x82, 0xe2, 0x0b, 0xe8, 0xff, 0x50, 0xa1, 0x91, + 0x7e, 0xd0, 0x06, 0x70, 0x21, 0x20, 0x26, 0xfb, 0x57, 0x22, 0x0c, 0x49, 0x8d, 0x28, 0xfc, 0xac, + 0xe8, 0xc7, 0x47, 0x71, 0x5d, 0x31, 0xca, 0x28, 0xd1, 0x7c, 0xe5, 0x5c, 0x27, 0xf8, 0xd5, 0xc3, + 0x0a, 0x68, 0x83, 0xb0, 0x7f, 0xdb, 0x0e, 0xc2, 0xa8, 0xe3, 0x59, 0xf6, 0xfe, 0x89, 0x70, 0x15, + 0x53, 0xf2, 0xa5, 0xf0, 0x80, 0xbc, 0x3a, 0xf4, 0x01, 0x79, 0xfa, 0x5f, 0x22, 0x96, 0x08, 0x2c, + 0x0d, 0x17, 0xbd, 0xc4, 0xd4, 0x3f, 0x26, 0x9b, 0xba, 0xec, 0x0a, 0xfd, 0x2e, 0x39, 0xc1, 0xff, + 0x4f, 0x22, 0x58, 0x7a, 0x1f, 0xa6, 0x13, 0x34, 0x3b, 0x2a, 0x3a, 0xf1, 0xc9, 0xdd, 0x94, 0x71, + 0x02, 0xca, 0x6f, 0xd5, 0x1b, 0x9c, 0x9e, 0x86, 0x9c, 0x63, 0x46, 0x24, 0x8c, 0x84, 0x90, 0x43, + 0x23, 0x14, 0xf0, 0x6b, 0xd7, 0xbe, 0xb8, 0xba, 0xe3, 0x13, 0xf7, 0xd1, 0x56, 0xa7, 0xf0, 0x3f, + 0x92, 0x3e, 0x2a, 0x48, 0xba, 0x57, 0x67, 0xdf, 0xdf, 0xf9, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xc4, 0xf7, 0xcb, 0xba, 0x83, 0x49, 0x00, 0x00, } diff --git a/pkg/proto/sdk_ws/ws.proto b/pkg/proto/sdk_ws/ws.proto index f687ddb5b..843771ee7 100644 --- a/pkg/proto/sdk_ws/ws.proto +++ b/pkg/proto/sdk_ws/ws.proto @@ -709,25 +709,27 @@ message SetAppBackgroundStatusResp { } message ExtendMsgSet { - string ID = 1; -// repeated ExtendMsg extendMsgs = 2; - int32 latestUpdateTime = 3; + string sourceID = 1; + int32 sessionType = 2; + map extendMsgs = 3; + int64 MaxMsgUpdateTime = 4; + int32 extendMsgNum = 5; + int64 createTime = 6; +} + +message ExtendMsg { + map reactionExtensionList = 1; + string clientMsgID = 2; + int64 msgFirstModifyTime = 3; string attachedInfo = 4; string ex = 5; - int32 extendMsgNum = 6; - int32 createTime = 7; } -//message ExtendMsg { -// repeated ReactionExtendMsgSet content = 1; -// string clientMsgID = 2; -// int32 createTime = 3; -// int32 latestUpdateTime = 4; -//} - -message ReactionExtendMsgSet { - string userKey = 1; +message KeyValue { + string typeKey = 1; string value = 2; - int32 latestUpdateTime = 3; + int64 latestUpdateTime = 3; } + +