From 09aa018fec93dbe7feff90ae4f16535a2b3cf630 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 26 Jun 2024 16:46:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=BB=E7=9F=B3=E5=AD=98=E9=92=B1=E7=BD=90?= =?UTF-8?q?=20+=E8=8E=B7=E5=8F=96=E8=BF=90=E8=90=A5=E5=95=86=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + data/DB_GameItem.dat | Bin 8437 -> 8619 bytes data/DB_GameItem.json | 262 ++++++++-- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 2161 -> 2161 bytes protocol/player/player.pb.go | 918 +++++++++++++++++++++-------------- protocol/player/player.proto | 15 + protocol/webapi/webapi.pb.go | 384 ++++++++++++--- protocol/webapi/webapi.proto | 16 + webapi/deprecated.go | 5 + worldsrv/action_player.go | 41 ++ worldsrv/action_server.go | 8 + worldsrv/bagmgr.go | 5 +- worldsrv/taskmgr.go | 9 +- worldsrv/welfmgr.go | 18 +- xlsx/DB_GameItem.xlsx | Bin 23214 -> 23164 bytes 16 files changed, 1197 insertions(+), 485 deletions(-) diff --git a/common/constant.go b/common/constant.go index 019e4bb..1171250 100644 --- a/common/constant.go +++ b/common/constant.go @@ -675,6 +675,7 @@ const ( TaskTypeInviteNum = 16 // 邀请绑定数量* TaskTypeTurnplate = 17 // 转盘抽奖次数 TaskTypeInviteRecharge = 18 // 被邀请人充值金额* + TaskTypeLoseCoin = 19 // 输的金币数量 ) const ( diff --git a/data/DB_GameItem.dat b/data/DB_GameItem.dat index 8f1263ef62d7f727c10daaf8f8c17d7b3a101114..08348aff54374fb35c99f2e1e6eca2e693d96c37 100644 GIT binary patch literal 8619 zcmchcT}&g_6~`Gc>}BGJ#%-!J50Sbr-M#@)8>z}e+NdpkCss8Vbu?IsJ z2WEMhUG4h(&VSB5_uMo0h#r9ix@}fAHLd1j^1N4e4?o!`2p5|Kq2ZFyX%QNPhHq%k z=Y%fTS6&pZ`nq3j?r3js@3{GbR0_+Jsr$v-cuEB?9UGPli}#D8%3@rdw9~by>|WBz z_lqIwOVe;lSsYi~8`LwW43^Z`rW%=-O8YRs*FPYNBLazq1)EiMY}0(OR!w7#nm;<5 z%5pk2Io%JIqkGoTb;&_!=D8XrvPF~GlhjmV!^L#otV@heu1icnAaRIkQ&%ThI8F1e zll1swZHDMPeY2;o=p4}N()6A{GJh9rmdkW3R!*7*;Zjr0G93g)XulZ}u+nP(Br-f~v3VMF(mAh`U)56q38eo!8%VLitg>L2Zx11p=!BhTiBwpm!v#?2-Vi{&Ke>M6 zwd*%z?-I)f!C(smvUiwy-HN}&-=Yv?*_5*7QCDsOtpB_I8#+G9g6rzAPyb(WLLeJ> zofdUCKwbGmFVvvz0{%4Y0=&>G=D!bhIB0*7O>ZfiQMKPL{)}WH>hm4cF{q>?N^VDw zjU2T<+1SuU2s@rm7|Wkf$zxcO`pXs;L*ulcfH! z3P&o8V0YE}roI8{iAuY>Y{;ihF0kk@T=E0KyG{3|bz@O{lf3V2vRU;CCMSw=X#9{M zLCaxaQ>{Z)dJ4)jmOSQ0d^Bszhu2{*wF|ejoil_v*$eIgdlI`p$6t|0>M$Myb4R z7W=6`P5oXJ&~j9d6~N6_rS+Rb;R~InBM3NrTu8W?4NSZixW#UGGQ;o^(OxJWELfd54O{CmgppQaDwch$@P zA(4*dKl5OIs_pCrPg6^7mepcYW&eXcZUr*{TlfQPShgwXaU+sM8@8#?hK6F|_rLHab|NS@^^=TN zVlTO~Y_YW>+-h=Fb{IOd&tc)v4dTlR&q_DS&ke;sDQ9=-+B^%7l{@&gS^kx(wPP+p z0QF;yI=G7Dq;VwY!M(~^sD0!UP}`LKZK)K+A*9B=%y?&W7WOsr_J+k~quvy@tUTb+ z+S_R*?l41oBdX9lz_-Yem=cSdgX|^00O=#?wIa^-KAOYk;nhy6PAZA3PNxVW@}tCHe;Rs3vesVWN3I@DVdT}&EjQp_kD})k>2Y+y75!J zNj4+0E!eG}f@`HaSr)-mWK$Umm;>%1_W*8D`m?xjGzWQwNL(wMDPWX?AfT-`2i!*} zz-`jrKJyo7(WlO3QNzt)Um=W(#s!?5$(p%xedOIc5Up%EXnsJ+t@2K=G8Mrn?er({ z1)Rjc=B+O+We(j8pGEP@v55U*#ujWv5N-q6s>bJ#%4}oD9BMZSf!ZX8{O0g_NSMF4 z>d2TTv4=!7WIm>Z@I`<2!@U)glsq4qRfmIeD2I>HL%ZxTZK@$?Qw>4CW_qqNNIGFM zDCGxn9VO?|^6H+lA5w2&63*u+7!kfncDU>6i155zH^Oy+yRHrj&&zeQ_zSWN*T!+- IdHELq2h}k8(*OVf literal 8437 zcmchcT})%g700=J?Qr9W)@`aZ50Sbr-M#^76=|Qgin`rODWqsOrP?-aRqaEgYOA71 zS@j76HnstO0ET64gN+Rs2pD4n#@L{w?L*QJHEoi1lfG>B&dj}i+2?+$|M4~U#ii82 zcX_!WxaW8NbLPyMb7y3yMEu=W3!9$NvQfU^;jWQq8YSsslO#1Fh zzxa~W=k0#ArL&`>qqDz9DTMe`;!*w{o=VO`$47W>`B8pMU5;r}Ho6hvt`(j8C?BNW zBn>6hZGDP`k~Hf)U5zi= zZivit{okr7GDqy16ul#n)L$iQ^UHKRT1u7%=~C0N2|5aj)X^W5FvHrw6f#B60&4fO z@dX-i(0PxNUDs0piKG9W4JO!7T3xd7d&9^eI%yNxq2!k7NDdTwFbvT3AK$wDlUujB zXN9E$V6de@?ipbom+C8sG2{X)oltk&+S*-!^}p-y(1|e?*wjY6`hR7=M7A)PR&B&j zo!Mi0uBcO&Xj7nW9GK2dFPeeI69cQan#| zFU;0wSTP6WKJuRM{nbzC`wMzOHlk2WOVy@WdqI9*kh>oT`2#`z`r{z~NsxOU2l>wi z&D#EOZF5{xobL;AX$H+De<;YMyfl~mksyCfkF%NNZBR>8CEbhIVB0Hoxlj6m^eXn(izPFb%`&GK#fuPST^W|q*~ebsG1BguU9=przT3Ve3>j1Z725me7drEww`WVd>ghg*tV65 zdMZ*eC)MWdN_JJr<;t(hFOoQHEhw||_Z(P?dN^h|`SWZ8qsrJa+tveoDT#?3+^I`l)W&@Nv#~CjoeG_uQprT5M*s}o!brF z)u%97lK2{uD&3^m4OH6{Pw&%>1r{1F_1+tE;;XXQQaL3F%nysqp>?DpjUg3}PCw4h z>?0q6*{&Y$DuoC(7A@vs#&eaklW&qYx0PcW}@Jz)E|c?`36}7*@AwHrEEIi4D3zv2C!D~q2Z0; zsqFd8gZB~tTZjg8$JN0&4l?MXIcuRAWnltjk-F6DHzmT&i0~ws7L+fPLGGHR&fWSW z+>8}51#GLfG;5O1UJ@vdeayxDD>S=ghR9wrU1YlBh$qjW2dlTtiaGk*+hRNLhm?GQ z&aKtYY(X&p4rZ&mo96py2I>_lfd3Fcp4{NRA#;HLEGpbdn*_W;{so|g+7{K^8rnwg zF`=%uV0QiuY#U9bXlPR{n2<#+@^$jy-Dc|(*Khsk_D}T&xBiH>VqJa=s)g>QSs1qw z+v>323~Ud12yCl5kjBBE8NeGv5jxpy4%a6bKH70JuziFA+pZiOGGC77z1n;l71|8) z4Z?(A9EI^z+PwMdBX8e_V0Fh%vx918UG#J1n+RN6oppD;fZg>SLDu3v>amM6So~7H z6sU{bOMVTqXkBR`b?jXB>}p>jzX9_p+^g~2p&kb%f0qqKOw;^Zp_%FXfH`rvNm38c z4zSQ0s0wU0iEq&AgX*&egrMYX0p3P84zwkQDM2Pki8Pq)IPyW~f*TX_)b@~B4fTP> zm$5qPUv6y}{yhNOwAegSmu>Bt!F-Vf!EE9|pBc0s5)wn!>?xDv^^kB8n2oAId~?^k zUAN)RA}cPXDpzkjn8AnRu@&{{$_;{k>~p1jUGsnL-IVMQj)!;IUwc}We?CjVEsTEtNBWtV0SdEeZ;~Q%fSM62+W}<4#49vu!pc%a0l#gc8*0r MkA7k1VxTPq0Amt7H2?qr literal 384 zcmd-w<6snElw#w!*2WB`uS4m}Q2Gj#z6zq1I5-yevI!h$vE|a^U;?YZ1(m-IrEfs# zn`r98IUwevn~Sa=tPkiOuzgtE1vX!a6YP$LwU1c1VmVk)91b%8-C%T!(Jg>E{0`XR Q>>P`L9{s}1#XwsK0A;c~H2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 7ae1e8df9bc416e978bc2a2335df9e695e0ebe6e..d16f02ada5d4253d14a46530c27bb2024e0cd0ea 100644 GIT binary patch delta 137 zcmew;@KIobu^=1Al3q3e5i1Ukg+O{iFWW{JLB`2j*hMyHGV(A2r7yNI3vfZDFD&($ z+{RP}6kP;V%nB84=&ahz%d7xW3=(EUn6=rC#g%|H{WKP G#s~lk<|O?9 delta 151 zcmew;@KIobu^

!d^Ck1-)!mY#d8~ERl^af{cP}9E*T#Mk~1N<}^lrMyTQoOMQTf zFSaoYa7}JwDuaqPbXEaHLE2b1^D-+iPTs;UxY>@y7G@YL%& player.BillItem 0, // 1: player.SCSavePlayerInfo.OpRetCode:type_name -> player.OpResultCode - 137, // 2: player.PlayerData.RankScore:type_name -> player.PlayerData.RankScoreEntry + 140, // 2: player.PlayerData.RankScore:type_name -> player.PlayerData.RankScoreEntry 9, // 3: player.PlayerData.WeekCard:type_name -> player.WeekInfo 0, // 4: player.SCPlayerData.OpRetCode:type_name -> player.OpResultCode 8, // 5: player.SCPlayerData.Data:type_name -> player.PlayerData 10, // 6: player.SCPlayerData.MiniGameArr:type_name -> player.MiniGameInfo - 138, // 7: player.SCPlayerDataUpdate.RankScore:type_name -> player.SCPlayerDataUpdate.RankScoreEntry + 141, // 7: player.SCPlayerDataUpdate.RankScore:type_name -> player.SCPlayerDataUpdate.RankScoreEntry 8, // 8: player.SCThirdPlayerData.Data:type_name -> player.PlayerData 0, // 9: player.SCChangeNick.OpRetCode:type_name -> player.OpResultCode 0, // 10: player.SCChangePassword.OpRetCode:type_name -> player.OpResultCode @@ -11086,7 +11249,7 @@ var file_player_proto_depIdxs = []int32{ 93, // 41: player.JybInfoAward.ItemId:type_name -> player.ItemInfo 0, // 42: player.SCPlayerSetting.OpRetCode:type_name -> player.OpResultCode 94, // 43: player.SCPlayerSetting.GainItem:type_name -> player.JybInfoAward - 139, // 44: player.SCGameExDropItems.Items:type_name -> player.SCGameExDropItems.ItemsEntry + 142, // 44: player.SCGameExDropItems.Items:type_name -> player.SCGameExDropItems.ItemsEntry 0, // 45: player.SCVIPBuy.OpRetCode:type_name -> player.OpResultCode 0, // 46: player.SCVIPDraw.OpRetCode:type_name -> player.OpResultCode 93, // 47: player.VIPcfg.Item:type_name -> player.ItemInfo @@ -11095,7 +11258,7 @@ var file_player_proto_depIdxs = []int32{ 103, // 50: player.SCVIPInfo.List:type_name -> player.VIPcfg 108, // 51: player.SCPayGoodsInfo.Item:type_name -> player.PayItem 0, // 52: player.SCClientLog.OpRetCode:type_name -> player.OpResultCode - 140, // 53: player.SCBindTelInfo.BindTelReward:type_name -> player.SCBindTelInfo.BindTelRewardEntry + 143, // 53: player.SCBindTelInfo.BindTelReward:type_name -> player.SCBindTelInfo.BindTelRewardEntry 0, // 54: player.SCPlayerSMSCode.Code:type_name -> player.OpResultCode 0, // 55: player.SCBindTel.Code:type_name -> player.OpResultCode 0, // 56: player.SCHttpPass.OpRetCode:type_name -> player.OpResultCode @@ -11104,11 +11267,12 @@ var file_player_proto_depIdxs = []int32{ 108, // 59: player.SCGetWeekCardAwary.Items:type_name -> player.PayItem 9, // 60: player.SCGetWeekCardAwary.WeekCard:type_name -> player.WeekInfo 135, // 61: player.SCExchangeChannel.Datas:type_name -> player.ChannelSwitch - 62, // [62:62] is the sub-list for method output_type - 62, // [62:62] is the sub-list for method input_type - 62, // [62:62] is the sub-list for extension type_name - 62, // [62:62] is the sub-list for extension extendee - 0, // [0:62] is the sub-list for field type_name + 139, // 62: player.SCSMSConfig.Info:type_name -> player.SMSInfo + 63, // [63:63] is the sub-list for method output_type + 63, // [63:63] is the sub-list for method input_type + 63, // [63:63] is the sub-list for extension type_name + 63, // [63:63] is the sub-list for extension extendee + 0, // [0:63] is the sub-list for field type_name } func init() { file_player_proto_init() } @@ -12737,6 +12901,42 @@ func file_player_proto_init() { return nil } } + file_player_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSSMSConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_player_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCSMSConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_player_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SMSInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -12744,7 +12944,7 @@ func file_player_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_player_proto_rawDesc, NumEnums: 2, - NumMessages: 139, + NumMessages: 142, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/player/player.proto b/protocol/player/player.proto index f07f0fd..ccbdfcc 100644 --- a/protocol/player/player.proto +++ b/protocol/player/player.proto @@ -207,6 +207,8 @@ enum PlayerPacketID { PACKET_SCPigBankCoin = 2824;//存钱罐金币数量 PACKET_CSExchangeChannel = 2825; // 开启兑换的渠道 PACKET_SCExchangeChannel = 2826; // 开启兑换的渠道 + PACKET_CSSMSConfig = 2827; //获取运营商配置 + PACKET_SCSMSConfig = 2828; //返回运营商配置 } // 账变记录 @@ -1195,4 +1197,17 @@ message ChannelSwitch { // PACKET_SCExchangeChannel message SCExchangeChannel{ repeated ChannelSwitch Datas = 1; +} + +//请求运营商配置 +//PACKET_CSSMSConfig +message CSSMSConfig{ +} +//PACKET_SCSMSConfig +message SCSMSConfig{ + repeated SMSInfo Info = 1; +} +message SMSInfo{ + int32 Id = 1; + string SmsName = 2; } \ No newline at end of file diff --git a/protocol/webapi/webapi.pb.go b/protocol/webapi/webapi.pb.go index 1907457..9f91692 100644 --- a/protocol/webapi/webapi.pb.go +++ b/protocol/webapi/webapi.pb.go @@ -8653,6 +8653,196 @@ func (x *SAAddItemById) GetMsg() string { return "" } +//获取运营商配置[/get_SMSConfig] +type ASSMSConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台id + SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id +} + +func (x *ASSMSConfig) Reset() { + *x = ASSMSConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[127] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ASSMSConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ASSMSConfig) ProtoMessage() {} + +func (x *ASSMSConfig) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[127] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ASSMSConfig.ProtoReflect.Descriptor instead. +func (*ASSMSConfig) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{127} +} + +func (x *ASSMSConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *ASSMSConfig) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +type SASMSConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台id + SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id + Info []*SMSInfo `protobuf:"bytes,3,rep,name=Info,proto3" json:"Info,omitempty"` + Tag TagCode `protobuf:"varint,4,opt,name=Tag,proto3,enum=webapi.TagCode" json:"Tag,omitempty"` //错误码 + Msg string `protobuf:"bytes,5,opt,name=Msg,proto3" json:"Msg,omitempty"` //错误信息(选填) +} + +func (x *SASMSConfig) Reset() { + *x = SASMSConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SASMSConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SASMSConfig) ProtoMessage() {} + +func (x *SASMSConfig) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[128] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SASMSConfig.ProtoReflect.Descriptor instead. +func (*SASMSConfig) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{128} +} + +func (x *SASMSConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *SASMSConfig) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *SASMSConfig) GetInfo() []*SMSInfo { + if x != nil { + return x.Info + } + return nil +} + +func (x *SASMSConfig) GetTag() TagCode { + if x != nil { + return x.Tag + } + return TagCode_UNKNOWN +} + +func (x *SASMSConfig) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +type SMSInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + SmsName string `protobuf:"bytes,2,opt,name=SmsName,proto3" json:"SmsName,omitempty"` +} + +func (x *SMSInfo) Reset() { + *x = SMSInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SMSInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SMSInfo) ProtoMessage() {} + +func (x *SMSInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[129] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SMSInfo.ProtoReflect.Descriptor instead. +func (*SMSInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{129} +} + +func (x *SMSInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *SMSInfo) GetSmsName() string { + if x != nil { + return x.SmsName + } + return "" +} + var File_webapi_proto protoreflect.FileDescriptor var file_webapi_proto_rawDesc = []byte{ @@ -9588,23 +9778,40 @@ var file_webapi_proto_rawDesc = []byte{ 0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x2a, 0xce, 0x01, 0x0a, 0x07, 0x54, 0x61, 0x67, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, - 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, - 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, - 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44, 0x45, - 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, - 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, - 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65, 0x6c, - 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x3d, 0x0a, 0x0b, 0x41, 0x53, 0x53, 0x4d, + 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x0b, 0x53, 0x41, 0x53, 0x4d, + 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, + 0x67, 0x22, 0x33, 0x0a, 0x07, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, + 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0xce, 0x01, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, + 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, + 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, + 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, + 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, + 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, + 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9620,7 +9827,7 @@ func file_webapi_proto_rawDescGZIP() []byte { } var file_webapi_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_webapi_proto_msgTypes = make([]protoimpl.MessageInfo, 127) +var file_webapi_proto_msgTypes = make([]protoimpl.MessageInfo, 130) var file_webapi_proto_goTypes = []interface{}{ (TagCode)(0), // 0: webapi.TagCode (*SAPlatformInfo)(nil), // 1: webapi.SAPlatformInfo @@ -9750,92 +9957,95 @@ var file_webapi_proto_goTypes = []interface{}{ (*SAPlayerInviteLink)(nil), // 125: webapi.SAPlayerInviteLink (*ASAddItemById)(nil), // 126: webapi.ASAddItemById (*SAAddItemById)(nil), // 127: webapi.SAAddItemById - (*Platform)(nil), // 128: webapi.Platform - (*PlatformGameConfig)(nil), // 129: webapi.PlatformGameConfig - (*GameConfigGroup)(nil), // 130: webapi.GameConfigGroup - (*GameConfigGlobal)(nil), // 131: webapi.GameConfigGlobal - (*PlatformDbConfig)(nil), // 132: webapi.PlatformDbConfig - (*CoinPoolSetting)(nil), // 133: webapi.CoinPoolSetting - (*RoomInfo)(nil), // 134: webapi.RoomInfo - (*PlayerSingleAdjust)(nil), // 135: webapi.PlayerSingleAdjust - (*PlayerData)(nil), // 136: webapi.PlayerData - (*HorseRaceLamp)(nil), // 137: webapi.HorseRaceLamp - (*MessageInfo)(nil), // 138: webapi.MessageInfo - (*ServerInfo)(nil), // 139: webapi.ServerInfo - (*OnlineReport)(nil), // 140: webapi.OnlineReport - (*ItemInfo)(nil), // 141: webapi.ItemInfo - (*ExchangeShop)(nil), // 142: webapi.ExchangeShop + (*ASSMSConfig)(nil), // 128: webapi.ASSMSConfig + (*SASMSConfig)(nil), // 129: webapi.SASMSConfig + (*SMSInfo)(nil), // 130: webapi.SMSInfo + (*Platform)(nil), // 131: webapi.Platform + (*PlatformGameConfig)(nil), // 132: webapi.PlatformGameConfig + (*GameConfigGroup)(nil), // 133: webapi.GameConfigGroup + (*GameConfigGlobal)(nil), // 134: webapi.GameConfigGlobal + (*PlatformDbConfig)(nil), // 135: webapi.PlatformDbConfig + (*CoinPoolSetting)(nil), // 136: webapi.CoinPoolSetting + (*RoomInfo)(nil), // 137: webapi.RoomInfo + (*PlayerSingleAdjust)(nil), // 138: webapi.PlayerSingleAdjust + (*PlayerData)(nil), // 139: webapi.PlayerData + (*HorseRaceLamp)(nil), // 140: webapi.HorseRaceLamp + (*MessageInfo)(nil), // 141: webapi.MessageInfo + (*ServerInfo)(nil), // 142: webapi.ServerInfo + (*OnlineReport)(nil), // 143: webapi.OnlineReport + (*ItemInfo)(nil), // 144: webapi.ItemInfo + (*ExchangeShop)(nil), // 145: webapi.ExchangeShop } var file_webapi_proto_depIdxs = []int32{ 0, // 0: webapi.ASPlatformInfo.Tag:type_name -> webapi.TagCode - 128, // 1: webapi.ASPlatformInfo.Platforms:type_name -> webapi.Platform + 131, // 1: webapi.ASPlatformInfo.Platforms:type_name -> webapi.Platform 0, // 2: webapi.ASGameConfig.Tag:type_name -> webapi.TagCode - 129, // 3: webapi.ASGameConfig.Configs:type_name -> webapi.PlatformGameConfig + 132, // 3: webapi.ASGameConfig.Configs:type_name -> webapi.PlatformGameConfig 0, // 4: webapi.ASGameConfigGroup.Tag:type_name -> webapi.TagCode - 130, // 5: webapi.ASGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup + 133, // 5: webapi.ASGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup 0, // 6: webapi.ASGameConfigGlobal.Tag:type_name -> webapi.TagCode - 131, // 7: webapi.ASGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal + 134, // 7: webapi.ASGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal 0, // 8: webapi.ASDbConfig.Tag:type_name -> webapi.TagCode - 132, // 9: webapi.ASDbConfig.DbConfigs:type_name -> webapi.PlatformDbConfig - 128, // 10: webapi.ASUpdatePlatform.Platforms:type_name -> webapi.Platform + 135, // 9: webapi.ASDbConfig.DbConfigs:type_name -> webapi.PlatformDbConfig + 131, // 10: webapi.ASUpdatePlatform.Platforms:type_name -> webapi.Platform 0, // 11: webapi.SAUpdatePlatform.Tag:type_name -> webapi.TagCode - 131, // 12: webapi.ASUpdateGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal + 134, // 12: webapi.ASUpdateGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal 0, // 13: webapi.SAUpdateGameConfigGlobal.Tag:type_name -> webapi.TagCode - 129, // 14: webapi.ASUpdateGameConfig.Config:type_name -> webapi.PlatformGameConfig + 132, // 14: webapi.ASUpdateGameConfig.Config:type_name -> webapi.PlatformGameConfig 0, // 15: webapi.SAUpdateGameConfig.Tag:type_name -> webapi.TagCode - 130, // 16: webapi.ASUpdateGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup + 133, // 16: webapi.ASUpdateGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup 0, // 17: webapi.SAUpdateGameConfigGroup.Tag:type_name -> webapi.TagCode 0, // 18: webapi.SAAddCoinById.Tag:type_name -> webapi.TagCode 0, // 19: webapi.SAResetGamePool.Tag:type_name -> webapi.TagCode - 133, // 20: webapi.ASUpdateGamePool.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 136, // 20: webapi.ASUpdateGamePool.CoinPoolSetting:type_name -> webapi.CoinPoolSetting 0, // 21: webapi.SAUpdateGamePool.Tag:type_name -> webapi.TagCode 0, // 22: webapi.SAQueryGamePoolByGameId.Tag:type_name -> webapi.TagCode - 133, // 23: webapi.SAQueryGamePoolByGameId.CoinPoolSetting:type_name -> webapi.CoinPoolSetting - 133, // 24: webapi.CoinPoolStatesInfo.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 136, // 23: webapi.SAQueryGamePoolByGameId.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 136, // 24: webapi.CoinPoolStatesInfo.CoinPoolSetting:type_name -> webapi.CoinPoolSetting 0, // 25: webapi.SAQueryAllGamePool.Tag:type_name -> webapi.TagCode 26, // 26: webapi.SAQueryAllGamePool.CoinPoolStatesInfo:type_name -> webapi.CoinPoolStatesInfo 0, // 27: webapi.SAListRoom.Tag:type_name -> webapi.TagCode - 134, // 28: webapi.SAListRoom.RoomInfo:type_name -> webapi.RoomInfo + 137, // 28: webapi.SAListRoom.RoomInfo:type_name -> webapi.RoomInfo 0, // 29: webapi.SAGetRoom.Tag:type_name -> webapi.TagCode - 134, // 30: webapi.SAGetRoom.RoomInfo:type_name -> webapi.RoomInfo + 137, // 30: webapi.SAGetRoom.RoomInfo:type_name -> webapi.RoomInfo 0, // 31: webapi.SADestroyRoom.Tag:type_name -> webapi.TagCode - 135, // 32: webapi.ASSinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust + 138, // 32: webapi.ASSinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust 0, // 33: webapi.SASinglePlayerAdjust.Tag:type_name -> webapi.TagCode - 135, // 34: webapi.SASinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust + 138, // 34: webapi.SASinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust 0, // 35: webapi.SAGetPlayerData.Tag:type_name -> webapi.TagCode - 136, // 36: webapi.SAGetPlayerData.PlayerData:type_name -> webapi.PlayerData + 139, // 36: webapi.SAGetPlayerData.PlayerData:type_name -> webapi.PlayerData 0, // 37: webapi.SAMorePlayerData.Tag:type_name -> webapi.TagCode - 136, // 38: webapi.SAMorePlayerData.PlayerData:type_name -> webapi.PlayerData + 139, // 38: webapi.SAMorePlayerData.PlayerData:type_name -> webapi.PlayerData 0, // 39: webapi.SAKickPlayer.Tag:type_name -> webapi.TagCode 42, // 40: webapi.ASUpdatePlayerElement.PlayerEleArgs:type_name -> webapi.PlayerEleArgs 0, // 41: webapi.SAUpdatePlayerElement.Tag:type_name -> webapi.TagCode 0, // 42: webapi.SAWhiteBlackControl.Tag:type_name -> webapi.TagCode 0, // 43: webapi.SAQueryHorseRaceLampList.Tag:type_name -> webapi.TagCode - 137, // 44: webapi.SAQueryHorseRaceLampList.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 140, // 44: webapi.SAQueryHorseRaceLampList.HorseRaceLamp:type_name -> webapi.HorseRaceLamp 0, // 45: webapi.SACreateHorseRaceLamp.Tag:type_name -> webapi.TagCode 0, // 46: webapi.SAGetHorseRaceLampById.Tag:type_name -> webapi.TagCode - 137, // 47: webapi.SAGetHorseRaceLampById.HorseRaceLamp:type_name -> webapi.HorseRaceLamp - 137, // 48: webapi.ASEditHorseRaceLamp.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 140, // 47: webapi.SAGetHorseRaceLampById.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 140, // 48: webapi.ASEditHorseRaceLamp.HorseRaceLamp:type_name -> webapi.HorseRaceLamp 0, // 49: webapi.SAEditHorseRaceLamp.Tag:type_name -> webapi.TagCode 0, // 50: webapi.SARemoveHorseRaceLampById.Tag:type_name -> webapi.TagCode 0, // 51: webapi.SABlackBySnId.Tag:type_name -> webapi.TagCode 0, // 52: webapi.SACreateShortMessage.Tag:type_name -> webapi.TagCode 0, // 53: webapi.SAQueryShortMessageList.Tag:type_name -> webapi.TagCode - 138, // 54: webapi.SAQueryShortMessageList.MessageInfo:type_name -> webapi.MessageInfo + 141, // 54: webapi.SAQueryShortMessageList.MessageInfo:type_name -> webapi.MessageInfo 0, // 55: webapi.SADeleteShortMessage.Tag:type_name -> webapi.TagCode 0, // 56: webapi.SAQueryOnlineReportList.Tag:type_name -> webapi.TagCode - 136, // 57: webapi.SAQueryOnlineReportList.PlayerData:type_name -> webapi.PlayerData + 139, // 57: webapi.SAQueryOnlineReportList.PlayerData:type_name -> webapi.PlayerData 0, // 58: webapi.SASrvCtrlClose.Tag:type_name -> webapi.TagCode 0, // 59: webapi.SASrvCtrlNotice.Tag:type_name -> webapi.TagCode 0, // 60: webapi.SASrvCtrlStartScript.Tag:type_name -> webapi.TagCode 0, // 61: webapi.SAListServerStates.Tag:type_name -> webapi.TagCode - 139, // 62: webapi.SAListServerStates.ServerInfo:type_name -> webapi.ServerInfo + 142, // 62: webapi.SAListServerStates.ServerInfo:type_name -> webapi.ServerInfo 0, // 63: webapi.SAServerStateSwitch.Tag:type_name -> webapi.TagCode 0, // 64: webapi.SAResetEtcdData.Tag:type_name -> webapi.TagCode 0, // 65: webapi.SAOnlineReportTotal.Tag:type_name -> webapi.TagCode - 140, // 66: webapi.SAOnlineReportTotal.OnlineReport:type_name -> webapi.OnlineReport + 143, // 66: webapi.SAOnlineReportTotal.OnlineReport:type_name -> webapi.OnlineReport 0, // 67: webapi.SAAddCoinByIdAndPT.Tag:type_name -> webapi.TagCode - 141, // 68: webapi.JybInfoAward.ItemId:type_name -> webapi.ItemInfo + 144, // 68: webapi.JybInfoAward.ItemId:type_name -> webapi.ItemInfo 83, // 69: webapi.ASCreateJYB.Award:type_name -> webapi.JybInfoAward 0, // 70: webapi.SACreateJYB.Tag:type_name -> webapi.TagCode 0, // 71: webapi.SAUpdateJYB.Tag:type_name -> webapi.TagCode @@ -9847,9 +10057,9 @@ var file_webapi_proto_depIdxs = []int32{ 94, // 77: webapi.SAGetExchangeOrder.OrderList:type_name -> webapi.ExchangeOrderInfo 0, // 78: webapi.SAUpExchangeStatus.Tag:type_name -> webapi.TagCode 0, // 79: webapi.SAGetExchangeShop.Tag:type_name -> webapi.TagCode - 142, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop + 145, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop 0, // 81: webapi.SAThdUpdatePlayerCoin.Tag:type_name -> webapi.TagCode - 141, // 82: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo + 144, // 82: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo 0, // 83: webapi.SACallbackPayment.Tag:type_name -> webapi.TagCode 0, // 84: webapi.SAResource.Tag:type_name -> webapi.TagCode 0, // 85: webapi.SASendSms.Tag:type_name -> webapi.TagCode @@ -9858,13 +10068,15 @@ var file_webapi_proto_depIdxs = []int32{ 0, // 88: webapi.SAGetImgVerify.Tag:type_name -> webapi.TagCode 0, // 89: webapi.SAPlayerDelete.Tag:type_name -> webapi.TagCode 0, // 90: webapi.SAPlayerInviteLink.Tag:type_name -> webapi.TagCode - 141, // 91: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo + 144, // 91: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo 0, // 92: webapi.SAAddItemById.Tag:type_name -> webapi.TagCode - 93, // [93:93] is the sub-list for method output_type - 93, // [93:93] is the sub-list for method input_type - 93, // [93:93] is the sub-list for extension type_name - 93, // [93:93] is the sub-list for extension extendee - 0, // [0:93] is the sub-list for field type_name + 130, // 93: webapi.SASMSConfig.Info:type_name -> webapi.SMSInfo + 0, // 94: webapi.SASMSConfig.Tag:type_name -> webapi.TagCode + 95, // [95:95] is the sub-list for method output_type + 95, // [95:95] is the sub-list for method input_type + 95, // [95:95] is the sub-list for extension type_name + 95, // [95:95] is the sub-list for extension extendee + 0, // [0:95] is the sub-list for field type_name } func init() { file_webapi_proto_init() } @@ -11398,6 +11610,42 @@ func file_webapi_proto_init() { return nil } } + file_webapi_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ASSMSConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_webapi_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SASMSConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_webapi_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SMSInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -11405,7 +11653,7 @@ func file_webapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_webapi_proto_rawDesc, NumEnums: 1, - NumMessages: 127, + NumMessages: 130, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/webapi.proto b/protocol/webapi/webapi.proto index b4221f2..2dad83d 100644 --- a/protocol/webapi/webapi.proto +++ b/protocol/webapi/webapi.proto @@ -923,3 +923,19 @@ message SAAddItemById{ TagCode Tag = 1; //错误码 string Msg = 2; //错误信息(选填) } +//获取运营商配置[/get_SMSConfig] +message ASSMSConfig{ + string Platform = 1; // 平台id + int32 SnId = 2; // 玩家id +} +message SASMSConfig{ + string Platform = 1; // 平台id + int32 SnId = 2; // 玩家id + repeated SMSInfo Info = 3; + TagCode Tag = 4; //错误码 + string Msg = 5; //错误信息(选填) +} +message SMSInfo{ + int32 Id = 1; + string SmsName = 2; +} diff --git a/webapi/deprecated.go b/webapi/deprecated.go index 23db785..c809d5d 100644 --- a/webapi/deprecated.go +++ b/webapi/deprecated.go @@ -96,6 +96,11 @@ func APIGetMatchAwardCode(appId string, body proto.Message) ([]byte, error) { return postRequest(appId, "/get_match_award_code", nil, body, "http", DEFAULT_TIMEOUT) } +// ApiSendSMS 发送短信验证码 +func ApiSMSConfig(appId string, body proto.Message) ([]byte, error) { + return postRequest(appId, "/get_SMSConfig", nil, body, "http", DEFAULT_TIMEOUT) +} + // 支付订单 商城 func API_CreateOrder(appId, orderId string, configid, SnId, shopId int32, platform string, packageTag string, os, deviceId, shopname string, amount [3]int32, consumptionamount int32, itemInfo []*webapi.ItemInfo, exchangeOrderId, channel string) *webapi.ASCreateOrder { diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index 1c97def..99b24bc 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -2848,6 +2848,45 @@ func CSADV(s *netlib.Session, packetId int, data interface{}, sid int64) error { return nil } +// 获取运营商配置 +func CSSMSConfig(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Tracef("CSSMSConfig Process %v", data) + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + var res []byte + var err error + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + param := &webapi_proto.ASSMSConfig{ + SnId: p.SnId, + Platform: p.Platform, + } + res, err = webapi.ApiSMSConfig(common.GetAppId(), param) + return nil + }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { + if err != nil || res == nil { + logger.Logger.Errorf("API_SmsConfig err %v", err) + return + } + var info webapi_proto.SASMSConfig + proto.Unmarshal(res, &info) + if info.Tag == webapi_proto.TagCode_SUCCESS { + ret := &player_proto.SCSMSConfig{} + for _, smsInfo := range info.Info { + infoData := &player_proto.SMSInfo{} + infoData.Id = smsInfo.Id + infoData.SmsName = smsInfo.SmsName + ret.Info = append(ret.Info, infoData) + } + p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SCSMSConfig), &ret) + } else { + logger.Logger.Errorf("API_SmsConfig err %v", info.Msg) + } + }), "API_SmsConfig").Start() + return nil +} + func init() { // 用户信息 common.Register(int(player_proto.PlayerPacketID_PACKET_CS_PLAYERDATA), player_proto.CSPlayerData{}, CSPlayerData) @@ -2873,4 +2912,6 @@ func init() { common.Register(int(player_proto.PlayerPacketID_PACKET_CSADV), player_proto.CSADV{}, CSADV) // 渠道开关 common.Register(int(player_proto.PlayerPacketID_PACKET_CSExchangeChannel), player_proto.CSExchangeChannel{}, CSExchangeChannel) + //获取运营商配置 + common.Register(int(player_proto.PlayerPacketID_PACKET_CSSMSConfig), player_proto.CSSMSConfig{}, CSSMSConfig) } diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 354e1f9..56bdfb8 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -492,6 +492,14 @@ func init() { Num: playerBet.GetGain(), }) } + if playerBet.GetGain() < 0 && playerBet.WinState != 1 { + TaskSubjectSingleton.Touch(common.TaskTypeLoseCoin, &TaskData{ + SnId: player.SnId, + GameID: scene.gameId, + GameFreeID: scene.dbGameFree.GetId(), + Num: playerBet.GetGain(), + }) + } } //tienlen 游戏场次 if scene.dbGameFree.GameDif == common.GameDifTienlen { diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 5487787..8feba74 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -8,7 +8,6 @@ import ( "mongo.games.com/game/webapi" "mongo.games.com/game/worldsrv/internal" "strconv" - "sync" "time" "mongo.games.com/goserver/core/basic" @@ -523,7 +522,6 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in var err error var newMsg *model.Message res := &webapiproto.SAGetMatchAwardCode{} - wg := new(sync.WaitGroup) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { // 获取兑换码 pack := &webapiproto.ASGetMatchAwardCode{ @@ -565,7 +563,6 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in } return nil }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { - defer wg.Done() if err != nil || res.GetCode() == "" || res.GetTag() != webapiproto.TagCode_SUCCESS { //返回道具 items := make([]*Item, 0) @@ -582,7 +579,7 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in if p != nil { p.AddMessage(newMsg) } - }), fmt.Sprintf("ItemChange%d", p.SnId)).Start() + }), fmt.Sprintf("ItemExChange%d", p.SnId)).Start() return true } diff --git a/worldsrv/taskmgr.go b/worldsrv/taskmgr.go index 07a635e..3732a31 100644 --- a/worldsrv/taskmgr.go +++ b/worldsrv/taskmgr.go @@ -105,17 +105,14 @@ func (t *TaskHandle) TaskUpdate(id int, data any) { case common.TaskTypeWinOrLose: // 游戏输赢金币数量 p.PhoneLotteryTask(common.TaskTypeWinOrLose, num) - if !p.IsRob { - WelfareMgrSington.UpdateDiamondBankData(p, num, false) - } case common.TaskTypeTienlenCount: //tienlen游戏场次 p.PhoneLotteryTask(common.TaskTypeTienlenCount, 1) case common.TaskTypeBindInviter: // 绑定邀请人数量 case common.TaskTypeWinCoin: // 赢取金币数量 - if !p.IsRob { - WelfareMgrSington.UpdateDiamondBankData(p, num, true) - } + WelfareMgrSington.UpdateDiamondBankData(p, num, true) + case common.TaskTypeLoseCoin: //输的金币数量 + WelfareMgrSington.UpdateDiamondBankData(p, num, false) case common.TaskTypeTienlenWinTimes: // tienlen游戏赢取次数 case common.TaskTypeActivityScore: // 活跃积分数量 diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 6dff2e3..d4d156f 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -1742,12 +1742,12 @@ func (this *WelfareMgr) PigbankTakeCoin(p *Player) { } // 检查存钱罐是否满 - if p.WelfData.PigBank.BankCoin < BankMaxCoin { - pack.OpRetCode = welfare.OpResultCode_OPRC_PigbankNotFull - logger.Logger.Trace("存钱罐没有满") - p.SendToClient(int(welfare.SPacketID_PACKET_SCPigbankTakeCoin), pack) - return - } + /* if p.WelfData.PigBank.BankCoin < BankMaxCoin { + pack.OpRetCode = welfare.OpResultCode_OPRC_PigbankNotFull + logger.Logger.Trace("存钱罐没有满") + p.SendToClient(int(welfare.SPacketID_PACKET_SCPigbankTakeCoin), pack) + return + }*/ // 先扣钻石 costDiamond := int64(infoData.CostDiamond) @@ -1914,11 +1914,13 @@ func (this *WelfareMgr) UpdateDiamondBankData(p *Player, coinNum int64, isWin bo } WinCoinRate := fGetPropValue("WinCoinRateDiamond") LoseCoinRate := fGetPropValue("LoseCoinRateDiamond") + addDiamond := float64(0) if isWin { - p.WelfData.DiamondBank.BankDiamond += float64(coinNum) * float64(WinCoinRate/10000000) + addDiamond = float64(coinNum) * float64(WinCoinRate) / 10000000 } else { - p.WelfData.DiamondBank.BankDiamond += float64(coinNum) * float64(LoseCoinRate/10000000) + addDiamond = float64(coinNum) * float64(LoseCoinRate) / 10000000 } + p.WelfData.DiamondBank.BankDiamond += addDiamond logger.Logger.Tracef("更新钻石存储罐数据 snid = %d,coinNum = %d,isWin = %s,当前钻石存储罐钻石数量:%f", p.SnId, coinNum, isWin, p.WelfData.DiamondBank.BankDiamond) } func (this *WelfareMgr) Update() { diff --git a/xlsx/DB_GameItem.xlsx b/xlsx/DB_GameItem.xlsx index 6dc82a04bc6953d423bfda7f7c46e94174014f6c..a95651b8c8f2a5e40c3fc88b2fea071fb7325454 100644 GIT binary patch delta 14674 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�E*juDP!bU5^dOfW=&U=`NDP44xr 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

m0E25UMD?`B2?a#AjKRSaDR z=mG;LtM>nAp^r_IR865paha-(l}43ElYMmW<`cWaisB$05gwj$S5PR^c}OHDx9}pF zJS?hDp_2PCPiysXwA%LyC90TtdLH|qRp+#(&c4-Cq>A6#G_JomhXNVHet%3acKb7? z3w#TJg3asS1DhB=xf5EKe2;>WlkD^CztOW-SjD$iHi$?WslPXy**Ms>fHXI z#*?`z9G!eYEO$2@kcIr;%kkff-N^5Q-8kZI5?l9VB3qBk!ZT?{ii> zLgOGG4Zet(TIT++amBB3rykMy^v;p&@!T+QVELWTc7}WYPTj1;)TR7HprIpLOZt zD`en}T#KD^lFMjmu-u8KOqwrw7CBM_x_oc?EQoK*^*tHUOoZkPNxJ+@AMWcJ#^qjT zqSih=2*sZ6bFH>Hssj7n9jYNkdM|!1L&WEjI#PnI@A}K zU5_cxS8$pU^lz#rd2JzsTc@wM>|Z5#)FuJtG%4^s%_YhOWps{AT47=w&B2Y*jn9&l z0@m5vh#jD@$oQmK+-Pg3;8cFEfo;(03jNIsjN_EmY}qsCCs!Jxn#e!aL>cU$hqxYr z9>Pi}U-1Q?jMWBF!<%g=YM@COq0)Apjv%+c!nY8G)S1BpP>{ZDkGOcELe%x4{2$sr z4TGQOiN*kaaDhVzk*`LCFZy#@>$D#VmsBQ_8p5&8{D5Abz}r4#*~;zYSU_qpuj92; ziqw26li=RVvQV+Og-v!czGEGAVFn7tkfojj^O`Y-lH%AAlf7qKYf00#Q1JUqy3O8q zt;Noncvw|#tnw*ftpwcwSNfP$T)>0NLqJbnTNZ4&Rmb*G(U~b3KtS6#d`0rnP%5pf zSYBR@gkpk|rm^I)k5gPxAc`duErBE3*vK`u4f|BB7y#^dSjg#D;YuL#*B%T-JMzVP zBdK8?fv-~fGRa&4jPSFB2@|I>uQP+{b{{MaHR;uP0kGMfHx4BrP>%JT^|{y2 z1KGls&oO-qv{wq!dL{Hw@UYgBp3tBVn_Z!+P{4z?9WO>ruB2YrF_pu+*HC)S43+hK zsjUHTYxY`RNhM5B4OdWf)ERjn63dgh3gSe4fWl++BBd&?EAXMTnh&1E3hW&LA()g4Ed)HRdd@ z`k>8asP|+6mYPZT1_DeU4xv?S$)pw2^*vWX7roEukvrS$TBbE)r{aWrj9aH+g1WRL z4-lCN`@R?RJ$g1PhPI#MgZaQ5K$Jn}p9XB5g+b+Y+VrtJugD0(5tgsKrQ4T7ynm8{ z$z}$H2dZH{#N;l`fF8aPc)gNhRS{Va?cIVp`D8I;xprY!oX_>hSNLQ{aer^UR^3+~ z*Cy>^f*ac3f0w7|{VMJ8R14^%nvF?=^0J4vB4n#-F>bi1`!t1#W8V5LHTuO9*Xus= ziui48BkMc#+c|h}gx^*E@!aLK<|8>78vbPc&~X@Dj##3eaB`QUAtvu3^vL8MPY256 zGUR7A+3CGd?ai9YJqzj>YrutQ7@zeh2PH*AHYCcltN>-E@`m#9`9Q<;uD+h%VxNKz zyAUALSw_-O0(Co|)Qwqq=3qu1Xs>qxPM)wrl-$!eX^|8K=^oxEZy zx4e1=ZRUYu%3N1pgBRw}JrZPERQ%7nI%!>oim4a?U~_scmDXr+4P~Y36dRD*r$+Bu zv91zz@i*U7e&5$A9H)GPS{Yl47uw*u`3OGXOHl|Hak-Br^pkjkByjlUb205<=t|<#{XCXpFLO`D#khcw+V=Ln+(%jap%3*MSI-ycn7qHpe;YFq+r6l}s&5mHU1~+ni z*AiA=c%lnYN9@T#y%5ydQ8B97fs+2+9;%rHv=j4blxysVMtwI#R~nXDVGpj^*8kv| z9s+*?)(ZJFx>yT#+_Wp9N)a1fFTod_J*NNa1GWN!prRf6TeLXfG}Rn8#|@~hK{e%0 z0_hz;hXKr~UQ|8U8V=OfLbU%S*XqB$z;2Po;nC2bewO-R#)iH6vcJk6pkV<@1J@>? z?+n@F0|M{0>cDv;$3&h*$X5#Q<{W@K4Q7K!{(LGz`jhO?QHJXpyzS{t6#q8$<774vX zKI%CTdrdUZyK?`Qu8%6+7ouu?Xj8|QYr6tO=RqUtj|8;4>SMF8j_Go6MzyDD`CG4n zV)%P*RZ8G>80{e_^T$>v*KVmMdoE4jpfrjkZ%6L9$6)jC#RRJ4W}q%VLN!!D(YN|A zh)@C#7BiNkNdf6z!<&5=LHH0uyAC$M3#ux40*H2pX+Xj-6A9!YRfVUvFOC?XZM@(I z7n1WP5eRx?``nWlT0vYn&A7mML%Y~kv(ejc9!Sy#Hp65@yh)O zTaStSh@@x>)Lh&+>64T$I~UQ6VxfTRlRt2T8*+Yjge&BYZP#n>jM^|g0{oojEwy;@ zXE<@`%s!4DiO|sl<&V+BU9oWQB&>cf(aEe?;q@yfVSzTtKOSZX;Xp38ghuf?duAal zBrwPb=({P-0b)Qs?^F|K*EV$L_uoA5T#V-$oHx2SY5AYg1m*t$mo+q7ky2_1Lf^6YjRGa2v@K>8Xn5zhm|?;?``l8^{q8o0 zrIEw7-Qe~qJ*gT|)?Xusvv$@u*5|9;RMF6AJ-Xi^$M_6=mj!C=3Q16DKlT)=p<~K5 zm4iO2kP8(fp7Lkz$COVBd7Fp-%vFs{+%rg+&fq$BLQT;H(}F4+a^Qmj&m4zc{3m0A z>i7RLfg>@GaGu*3c{gpsoBuj&Z;!|uRdx@N~;bPt23$48bz?dHE~^Fxs* z#Vm72hjuv3Vu7RQDPUCY7}`v zzfCXi>&i!SUjNO<&N^f9sdfq}TPe2JxTFumDkd<$P50k<`p3M)cM=Bw*C_DX2O1w< zW5AV$3gOHHBdzb*+pbWX_WxDM$&?;hd`swXLU6g`T~lOA(9L6AtaFG{kHn?*$&Gfd6la?hOk;CnGL!925+` z_L2S7+Id?sG;nEHXe4<>7(DO#BT3Bv8NNnV`Km(GJ)v_0ba1qod6Z8|!ke|~0?$|x zhuaO~lx1M(FO?cX0B4v#_0u5GZL-)Fx_?yb2N94#-d`7Ark#bR9%G`4(LW6L@+2~7 zA$1iD{`fH2g^Ia6&W_4Iq2h6e4jA0#bN`x-4y2Z6CgiM=u%;;%0}VsF-uJ-(Jv~)j z0b8vE9ycz3;(-a6R}7f&LGKu`|D+mp5XH8H&Y{rhBj`Wlp?fvL z?M@o`NJ346>a|Xq*hB$WmRga(GtaxfISpLM^0JlTmy$wi{6$dyZQk7G*9rv04u9N{ zD#?<>Zn>eY{02O?_*ZChLq;!%pl;$(top|ae^1eVRvpKSoKPo>EX4SC_WYMs0sqUZ zLVrJmCWN5^*tvO-p?|Iy-wW#>u8v0c z>WKf{RfRJzyp?6=dl@fq%?eQ*mc~{>+AN z5})3_z;k~>ZM(8$DdK~pB4#?d0Q5sxb-ZFp&B0EbPp$0@w6!DVfHzv<_OYtbSGLK9 zY@xUO98#Px4G=%Vj)+k=%ijq1i*rxIE@uH_W$?yOLJjR5YtKl=;{HU4^zk%>B7s81 z(AKL;?e;}Zy<>+@qVSa7zQ^L*mBh!NIe6!*(J3vR`{iu6G{ceFB^R}$G&Mc-$YIzE zy?~xO3~n56)38Ai;2nbZ&{hDE6Iv&&_uEzS?kV(l9&kwhp9we`E$Y@5UJ{BNU#$fU z8*r{Un%UKugjGU66iMta#liFjrE1g@Jj3+1-GcEpjr=*&%Q5ovrwY*}9oGadtnu*A zfH0luv!%9-@)|s3naz&X%ap~~028}ccAaJT9LM#QY=O`ffd9J$G@JfdV&)|jC-ZVv z=m+h{-3kL)+9Dmkqa27V&JW8*A@r_V_B?x zalN>{eRWj5!hS?J*VW9T{W$XLRhGPO(>2(3+4+R&cOnx4R#Mc7 zajDOCE7$T=yetql*ASSU`5~Ucn?P7+HZXn^g9)AgxE;ibT3+L!8(}Zvon4>k^wx*L zwy+{17g4R7{dYw&eN)o`Qd##1s)793dex5;TdJ{(;_<|sbacr-#W<8X$(WSM7Jb&S#h%%<7hSCvC3+~0p1!yB46f;! zl8suw_d9g0vpMhHXT+^po7ZPUcau+s62wWyhVoQV*&#KGhZgPq#hWV_qvV2$*pJi6NS z>-QW7Jn)h@w!OL4p)m<4H@N20dItTBW73Szwc+RLpI;VohzI*jg*Q!l$W3p*RSW;n z`JQDx5!m_k1h1R~hwVn47^j!08g%Dm19437G1 z7ztlY>cLmT)AG9t0PLn8;`e>)FaWV?&!A3avVaOrSHWo** znT}42qT$m7eJ1m(G!^Nx*w>x^QjrD?hlB$3fny!SM-_2Dsz_5QW|8AbyUrd^yInVrS z0-7CA@kCu`bfbFZTE^D&?Yj~@2m?xy{}*p1;m{C&>@XIz>>hdRFf_ZRI2)YNPk@H2 zmCxs5u#s19$=69nxXaBIkw5Pw zmT78xcRm|B-+uqRL~JE&KEsVy|=qaZvC0NX?uf z4Gm5o6CvGiJAYlzIjU0f4CR?3o296OcUoBSNhke}+8p@0y$Zh+M0cnp4h9jlhq5~( z00GE&LS*f2##6c@p{7{9vGJGF(^*`RE#1mQZVfptLVVFn;rR$Hm`+qv&M!XPJ<}gk z&K*+%`NCW?Tz(2ayf>L#p0NL7Lv8Qq*h`knKrEgTx!Lpt_gJ434Y@91gB4^0W5lGq zqW-cwX~UaZm~jP82}!kh-l{mG)Li&#So1u3E)<2q*))JZ|D{)t&75|bCs9~O5@EvX zebN;SESAV|&4i@<(!J>milb-qK~EzYK`~(VPA}pYrGhVb5784;X&Yyv3{vW&9hU2w zeX&){Z?I!2>*Kgo@KHfhYk4`SFfe)vKc!iKTFhWS@{_&9v8tzs3i@m&&!`mnlDl^f zrzriVSiaYvF)%?>0J?8Qm{!7J7_nTinMKAeHvwhkVlu=)Fbm{wP7*7iR zdPf)eZ7bNL+nVgNvXGI}2acV$zmk6$gdPQ??mEqh<$Sna-IS(bb2h z&zsEI++DbS7RGa8SJ{x0>w>Q?-h&OuF5m0q2S_}PBSmkFTH@} zeR#;m1$y05tby4#rdoj~x~gXb1+LM2DZ1oI->}0Z4TcT(rMShh;-3>=fiOr}tSjUzt4bCtVvHMbRM8CfWj731)DNU(4`U{yLPXKap^Vg34A`epr1# z4r0zAv3Y03AJ7LkHbrU;QC!kifEH?J@vVX=UDIL>SZt~ufFvwm>d0gnBrx+|(l`LqKLuJ- zk%JDT1hlBbh!~s^E~8ps{{H{gnY|)o7aA{Z8ro z7w^6Fu`837{jYw(8oHH<2dGS%Vk=bccSqYX8E*H$wUlVorXtAs2`$9(cExs@oHFg`ZxHmU;ItQ#$5b^KDs6Mbo~?735R z(@<#+pDVfN6m;m}=@snCaTmvR&wO&lQ^%eS5Dc-%LaJoj?2l_DF4Ubx8oXpseVxZQ z#-+jK27d9Gri<#Epds$Ci*i=BnMduj`%Lw5rbg~P?s)FF_pJv^V{k7(0LHJ>FX8K7 z*w_Y=HhG45RB2F`zC=0UL2 zprnY1TJ1Q=tiX=G`b7}DoPL_Bzv09=(RC0V2MR$y-xHL(^GR2AH_|V|41@t&mIB)R zLG;?(+Z-Vm$EFLA$|l8Xi~d_~@D+r$-C0>2`E`>n#WRa+)EJ%ET!1P_QZ~%H>!O)f zK2To4)n1AI-Ol;VOLzw=@^7X-MD*&zaw$ujGw-#HLbr0|J{xGs*2!dp&KPIN&wu`! z^08+Z?A#9nmr{MxEzO>A?V@EM+=4A~c9 zPxmJwJoa`UF(eJEH^qS`gKEqHLH4S%jEB;9=K7tm`^)?tSH_GS;ZBklEopn6L6O;t zZd>2$2+MaZ%k5?*U5V53<1Lz`tGbfNK4#kpj12!IUtpKw9%lPuh4K+j$-2 z%>SHQFsAH{QUGitR!8cU`kGI%O}h5lY+l{fwB@Cu;0li|sZBXhN~(W6@=>d~B~c_% z)jt`fl1}aEgye}D=B|n&sIXv|Z@Z~&hM_)RQH5EU+a{oXy{R0%lp^-3HhwHFoU;Vx zI&14~TkD#;OcniPZ(KTGWQ{n++z+9oa5~luxF4qED}G>shhKBPK*Ty^s&8Av>g@YbiSY9I=iJ7|ohnrF;7`ot z9St3r1ai*sh{}2$(;b-OXzk?v%x_fvVrY@Cse`5!Q|R=D2FC~&MND-V4vA61=6e@X zQN8qOcV((N0UsFZZM=xFG#iyNa)xw9hL7;gm~#E(ut{jcW$g~!S# zRTsE!yt>dU^en*?9)&0PkllSr*2(zsIpu6uf?-stxIR`66y7uyg%AUz@gaAIpn>h~OpMEKj zix%oNXUR&QAqQ0H825RiK$s(v68CSm_3p2RSv1UfN>73@FpIna5{RRBFp7nz!#&yxX- zY+q0~VZKQm(mLa8C@-1bS;cKnUnq`#YDf)Gka?Yt7-fjvN3Y;RZz+AI00qP1 zXb;*w>G~CWeY{E*5-fWHhqgFuM1qSpH*94>p>_ho!@nsei0BN!&8R0J>hi*Y)e}T? zS;+sM?r30O9xmw*U$8LL(AOC0gkREx3F*2_umlNTbcJ9!;`R7obrSgX#9>Vny!DL# z^$&NedZLJr7yASneF8WGmV{#jf&?Xf0`hGPLqaYyNQqo=0Eg+3F64H&7H0=F8%l?eP|k|1jqlk#WJjvRU~0vCpmIcO zfbx1_cRCWFm4$XGjQ8UAY^3@ATv_T1?v_o|ucy+AjX-Y1lq5t>Je3)uaT9wyck}H< zDuAjoVIUElm^H?^w1}dIQ)$puG=%n17}oM}tQsr}4ev}7GN-mZ=3}iWXJlFx*A#V! zXF}ZwmNRaMv$S9P9@`8Qd0=f2Tk!yE(zyvdL49X8H2ND zKGeU4rVd^d|DH|vPK6OS=*_%1G#=%kbo4Cgo0;m?cn7>huVNoF33$oyVhn%w2~lhA zT0e3R#qra${kbI*Da6hWEab*wT>AqZoU}0ej5WaQCqvu86+sn%-QXA20Q=Sb*MTD( z4ggof0apWy!pAf9JCP9vCLwMQo*Gb$CROyuc#~KZ`M2x$@W~f3XtQ_xl$jbCX`;iy@O+%WJXgmrC%oBR8C} zdGit4i>J^&Ax2u@!w`CPcqVi@`e*Cg-&5D;zpgj$YFfXq75GL^9~v*UH2DG0o|@L5 zR|gS41s8qYJb^RF)YN?1#h$e)-er-io-hQ_Tw(0wk>`ymqreX2`_hV4HU zAB#0F()SJT&CGDjYzc6*zo`fOfXvv1@}EYFVUWWm1E3+uUfi!vqfMt?hqAj$O1!k^ z^s`CZ_w1d+#k0ZrwC1##i)gTL-&p+`Iq&mzC9GeYy}3Q^UR+B$bS1J6e8#9ceQ}oLc_DB(QUUy`IR6B+3Bg6o zGmeS_?&MZnpRVQV_hv@V{W!1f-90Laf+IIPD`qGUXGf!dRrodNw;Q&%7`LOA?u%Y` zr=@w8B9)cI1jNI43aGzN%#JfS z*st$y+@0y{Sx{z%lmedZ?K^A`G7{gwjN{Dg!3Ye8h57WBH@?O{Tkcx-bS@k} z9b_Cx+Iyc?=@|pZn_^^LoomYDNdk`2p-0f@CBr_Q&ZS&W9r2~x8?HzSa#67*tk#wV zC36*_@Vn(KCzCYEW0=#dwLUm=%#-9Jjt@fKZ(fwUCievcrofQ1VE79=$;DbiNCSrq z_f;@eFr~@l&f515J#tu7@HKuC;R;%RY6whjsI?RP)31~#mE8r=sz^^rVDXNT3O$6M zqJJa){%Q#e(9kz|1-~T-`N(n*jrfkdQz1%xT~h95-U_1NbN5<1wBf5L^!9vnEw}PE zY~qV|ilY&gCuRAnrR{IMZ;y@Y)uED{!D@numBb4n+d89}evtK&%IcP(r~%<;qmg3$HInMQcrWvM5y;e90Q`879EbqK zOavGqB{ETcoM3cMc>1VOTA1xoqmyTgB)eME1P#&cBcbQb-ou(%H9^{gZVqgSLVY#MWF&zBnwl01EUVM6S7n+=318WTV14LJ)EFBB`OT!qK>I=B(&TzB7;#>#QaXW*2Oq}4-rNOb?vk2anU*NVxiAu*mmvc>F8=b))SMo1w+ zA@lMG?Z;%bQGg2LwfwLixIBMf&MUYGIZ~Ta6!#Iv?)!xu3|wv2s*9g)rAm_~O%2r{ zlqr%F9LQ&+fyFyK6b~Q_)Y6Zt)P{sbyKN;dk#;C|W)L-hlvpm9PC<3^*i6XtVBPIq zTc{etkka4pz+K5onts-NPpnYYP&N!*GX#XL+N|M*{JFK%Zi*zW{x4bX3V8cPXv_4v z=|mHcc$ceZ0xVJC(L1Z3$G{lAdxyZ*R&;bn9Pt?50yP>HgK8hXWTWW(Df4LKmU`BQ z?`r{}G!w5=$?c3DucCzy`g=%) z+!;zPF=s;+J-$pOw4Xmk6k&`m=IedR?$M3HknGP_63)BrToptUC5T6h;qm5k82Jo_ z2SU}L<=|`{d{|nUmit#UC5hPpa+<+?oLTy~FvD3|$fwynL#r;8vIVU-YntXjLAh7m z7T2th_vGyduIPwGr$7{jC#Fc=WYzh}9XQrfytBu(6dncwvjkt+li19YaOw7c`@TUN zf{8z4s2;-UGBC6$Qx8kGryl5DGt>PwNl+^VmoZ?@=TNsM#JwO%J>Y85 z0Hk;{;z?5Aky4lVCRb^_2HoCT1lI+N0RSpDK zRARbI#s^Pt^PLG>-A)xDiPsp9?d@-br4Dl8mozq1bWu~}QU_i`=EYm;gImO+?D}I& zd^vOJCV>Z^5W)Yc(S;x1F}Q!SHmeoxbfxz3I^Jh?WkF=A8Z;x0e%a9n?3y0niU#Wx zd%lZ))OyV7Dzlsr>g^SBw;Z;T!2fXqjalrrgsEh;&ufz4RF{pJ&+F?;2U{&6Pi4eP z12#XGQN5OQBh3_)_!UMeZ<5~)!S4wty+3u1O=hK*HfoA?EF-56uzgq}Yi3@sx>YxJ2XxH)rDu$@Z{!a>1YN1Gvd3@tL-Gmcf zeml@eeD-``(sj;qq~oLhteT_rAQ^6aULb{~>Dq;9d|rlGj#9=fvma2)$!@s<8*C)C z`Aa+vUUK($rZj^ocd{u1C67%~s?ZB-pGWSx-9IL>tTkkpRFy-v_YVTwEQRpomIDy` zmIJl1n+`bLwG1y$?{S%vxCD44^u;ADnaPe$*eRO-UKHH9|Og5Hv z(h+lKZ76kFNJz(Fk<$~ zBd1(EX^u|2Ha0)`R6CLk|+gIC+sZnJsxvu zY|$^2BKnwHsjuvD1kQ;LuP7sK-edHo>YVqqM-pp0Q$CYYuL0?kBEz#O8b-_P zrO-qnItj%_vawa9ElPNOvdYH(XdVjV*4-f;ljWolyt@4<6Xw9pRLw@Nlm!BebzB<} zFOuJ0St#H2zDrz4#udYn5I;@)5jz{83(uBDtc6Cp>tK^2O~#8n#~5(e(cLYfnATpK zQ`CIRY{koxst=UfawbR)rUduQqu!ag8~s{zW@P=XKXB~YOMs31v;#CIb8G}R3IEX zkEJ4>Muqs0K7hS(B7r7Sj|CTbC@(iQ31?ZCiIGhg@Bp{vmO1_ETVm6@rsd1R4a6CWzC=OORxqdj`I`~dXu4@@z)Mf!|DSA8v%qq zUc@%0Fzs>^hY?!G7Xdkvf48zG=U+_uizvS|3b0$jYma&mgC-X5HU~wvSrI{9!fXIB z?pTD8xVsfzuI)c8)IS4R(s0j`+f~sY@}he>*`{cz`scQsD52;!LUEjrfw8gmAjE@l zrM)TJN5hph*V~K#wMe$vv`iz;O*J=^*N08zit)L$E{We|KOa^(@M6{Cj}}`r|5g)Oyn+wl$*b#* zko*>0R#IF=mr>Dr&3sW>6qsnvbjPlSw!9%m#+R!jA$3-cBHs%F~JjnfzafV75$t`uJsAkt4)xteBIl@WB zk}RY7I$uJvKg|Xt7hFR48;r!EXFs7Qn-GEatNP40z{OAKsQ_@5^z*K-J^x#UaqG=d z+LYuIsPG7_!0oOobaxMcnm2wldg1XVr}n;W{I$5$$9t-#2c&e|2kS00XOX%?X746R zD@~a3Qg~3}%w8*{tST{|aLBXaG)iY6a(i0?sH=oDT!6j$v2c<(MvQmqUlm`y*0GvlG!G<5IL2lZRBS;}Hw4GO%;;a2&zNjq@O@C$|w zzO$&we$oWDvIy;>(T-bY(**@lYs)MN{|^K;;t0-YF*&l*pVcs8^v(vps7>REU|->9 z7Do;#a>H^zh~g`07MxfUAcP{c12wTBimMVIa|%`;xs-=5jW799eLli*giZ;Ol~;CB zi-+hnd4gGWL=kM9CvE}NYgonF!hAFKK9b54-3og&Y0)aUn9-$_=YRskBedoaHAh25 zQvLTI;aT=)n%XsW^t(=?cxaU~>UUw-KJdD4ly!bB=!{JSv0@eg@|9kxCqzII`X?h> zN9VKE;8I#9gu(J{lYh1rqiR(hJ>vGYoCo#%Tfw1H#yhZloqv^I7{WG>l$+@J`LXS8 zVv(=}TE+s8yTZfzIrr;JVknbNPNp*q8SoR zW*bl4u5s*pwQj%rT<`$Dx*}=g3g4N@@`(}jc=J-A-g;LrD;)6RHnNePzeM)US8>M3 zUzUwSV7JC)NO+}`!rxIe^9!NB^y2{6T+gKc&ZNkhhMMYAcWuqB7kpng^qls-a87H9 zs9m9dDk4~oRodCj0stl_NkkfKRgB=o={j6$1(P4Y@9-Z@eDf!AvlC1A@Fx`BvPPXC zQF>#`8UP9=lTUAaKciC^8Qy>-+n%Bm9K(fys^p>+l?P55uiYm#i~v3Ny)SAr54-3; zvb?I~U^rAGj7Mqmq6ygZPzl~E z_#CB0n+As00>x_o+F=FviKeuP_F@y;r27=6rdUv-gx(T0Hik?V3R@9j14vlp4*-XN z!4vU-j;FC@0h?>~7TK=lP;O@o1~I-+iJ8wG#Bu%fA1!u!u^aBmUXmq zf!=mHQm(<=-hOyHUDe&QF}}y}8j92!=@RaZ?X&bf7DO6w`M*)b-JfcxX%IcnAOJVQ z2)MdjXkz;So?!Cn;0|!`VK}(GvB|LghoUhLzI~>9*s=4P&*_2qM!m?YaR`6fpfU77 z{LO_N@Ox4G_IL)!sZTCKTK0VKI0qYgDcqe}yE`WNt-IHuwM`o3nBS!;qkj8(xqDzx zWxP;`lO$1QA1{0%;Gw?QIVsV{4wh0+6^URLje6NgX7>>oF$eK{sHRMw@g1Dq2}YwM zbgTW%jR5p~aTEfXZ@+wR5W&twj}tD3l)cpSpg#&WKb)ZWQm5LYw3=+LQ`GwJ-p4?k zv@#5F#p(#0f2E>l7cG5}CDPjM#cc{I3a~OD%+GpFjgQt4j5>v#s#X6Q&E2pL?kqdl z4>+A@zuRbsCRIS!je)a?OgpJ6y$)wdEvm`+v4<%@!FZ{;()(KjS(&!GV!pR1svhBb z#-K#H78{TDPO?n684+2z=yN}Ic>ZjxPpd(LyJmPldp@EPI~sUWY-S%`yFxXL?0;BE z`Fz_Gde;8-MiqLK)P4!{*F%p1zU*1n<%TR~Y%r`nkTf_nEMJw5H_{^bQ}N?6%bq5U7rN&XtW1UQ}&JIU8A(z$tj*u~MEbrFDAsh`afLP1kBt z?N?Xgz^OI#WYGAwy#hFoPF1rfbTUvQK)z=ea8EC(HHY5?W!bOj7&RSib<%u)SN2fw zQypc$`V5t~&oGQ7leQ^lxZl>&1!a-CC-{ZhVB%PMKfUF1CNe~8S$B3VX`7!wgtpszY%#(kjjZXlPW2CGPD7z=f{Bxu&%+9A-|R&HzVS?&>zREy ztENg#)Hf-2dzx7q+lga{*yrT%mN;r>5hgVE`lGD-JIv`=$k{T9fhCzMvne+qnA6{f zV>unw<4mL@tt`@^9I>lZj3`%1$>S?%)lEpIXp5AG$q-5Xo zoS&i!bfENIVhk^F5Xm4l3x^%HywK2#2|CLH>>3c0Bor61KQ%K9Q>GX|nE2i#XLpD3TcW{D_H1afGki)o1hxdCTvZ#H5%%J+QX!l)J0!ZIxb(P#^UlA(v^k< zce_!~IQ}#p9-@ggg(K{RwHxpmQ75H6{dqDvU~_UM4We^3|9}qg2b~qw4`-Kyp=`Ga zAUa7i?fba5d9@($gBw^#mHl6Cvj>le^vRYv1lO+%fbH_Au})t##g`cD0g2oh%?#bf zCz8UHlYKsVX%-u>5~HOFU)>5dM-y4_=J271GgKRU7xulnKaUIPTiEa?fS|A z6?$plm2@K+a=xrPgH|`?baaX+q`H&7G-SQ}o;e)`fCfTmCV11)acaC>fzj?i31jaz zhVk@oZ#n)H#cKpi;S_Ze=yxJ9)`+a7q63XfU(T>BnJvDhdL?`SPcTTS z?J}7{W_O8a{+}Bh0ZGir5T(M=#xKWVaDUamQe+NpQ1D3>m{$Z8n6eSsl!tIX-YE_<=LFo^y*L|$Cs7xK8I7zVa$f|pho zu(20LiZAr?V*DWVNh=)oFR+f11cu)O;-|L(nA6>DKUB-2s}-~I631O8RX&Klo6# z=~cT!5q{phJ5%ktE--=vS)+?}W7}otlyEgz6x@Fl24>cW6X-$!4`;r~+CLpG&NpY* zif&)XQq)E3HhduF3Wt_SCEJMv;eCt4{%){ou8+wb9_eAs-^J_G@8#~}+N7L~@__iP zpN4_$J*kf<$<8-~aE9fMtm}4X67L-+VX&LB(RofqX^J6)wrd7-e)$H#=@k}y9HiVd zNni!Gxo<-gnOMER*oHjdEWlQ(qdvNsW|5ZCfrg*%bNMgI80S4azHb2|n^R&hx zu#G$2<@8_3fY95G#%gLSKuwzn8hL@fphG|gX&ykiElMZ@Xu#&OIq)^W>kqj7O63JC zT&`%riMpJ>7qzttkod({amC$~#0Fh|$=PX=A^MjPj5GX`OWFi2?%Nn}oILUe_kKG6 zXtvtR)SqL%r##;S<;@-_A2*sA*S%k=^aRCDU*pF|a1L37{^}PUS&_ zui^O`@*Mr8;w!yEMv%3bf1^T(bgAe&^Fh20QKxTvS#v`GG6E zdUzG&(yyf1!zy2?XDCb^g&Fn^{cCj-=Hnz6&RIflDzr0vm#c2F(%20w!%(2zDIe() z4b%HhYfSTg>B6bDd+o{teJ-@!z;O^#lhpl@??K`>RC#mw)2&=e|3hFv9{w+kf% zwz5L#fT^{Qe|xRx@U(c3wEG9lrJx@{rJV#My)&P^q1}8%KIYs#kGX&w4mu6$u=WLB z$G!%VfenykWbO=oB#^JV(ca~;by9c zVv;Vw-M)W&8Fv|ieu7u6HDtO36;&IQ#9;U9V*7h)t-qdxai`(>-YwpXB_{ktj&NKt zkXj4AO$Tua0-1^a4>Ki?tfk(L5EwY4P9oSTFqhy%P4;zG%*Qw~fwrrBe}cxLYp~@H zJ*k8sK!#2^KwTctqO=B)BOd{8M7O5@M$@ykzfM)G!JSmxXRPw;UpxiC5rzlut!4hQ z8}?66+ADcPJB&dx-KK0AyB$%)mxzsk;`0d{+<#m3Z}O8sD*cA`|L<)5IYC{dI9Ug? z9%Rh&5=~?R?l!O0t~av@sW9q0DEZ}}2SNZB&;)O@`?s(_58Qarvu039F0YQJQ>IWk^??Af5yE!_Bs2cK?m_Jl|&!3bL z!?+cWnfdeEh`+VKkF4vzbsqR5^hf_C!@L0FKXb}NaX(V=C5SpP;xnL!^y8~$ctfcE zf5$Xk9JD6<0tq%^PZOv3(6 z7B4fh?pKC((2u>~C~%$m9ObRVklDU~$zkDf&JZ8WSH|S=bESKd{A7 z-;MUT`k#jUkA9r6-LB~RIfb^bgY9t92fYwfpe-{{7c8#U64vjGXHzJaISvfr0LBqe z33Rc-c9{(`Ex=|hLA~#rF@SIV6-+yrVW4S6vRan6CwEI){1G|e-%e4@V|ECAfq*zq zgJqHZN$Qwts=OEUtsONs78aM3v%e4X7}y=qe;`+3(LHSo{#^dwK+?%D@AHD*z)_fx z0VEgC4;>NSHJr2xB!58>aX&7Ad?AoAV`OjtuJgrj3&`Gz&Fw%F0Bru zlwcP5o#4Kz#U0PT?t+{~IF+J_0nA#0y7MOxUJ*i^STi5F-YK(#F;PS%3tUdz`Ie%lC!V<2VqL-HO+e<^wQPnGgeu)z;D+-A>vTG@e{8_NF=!v$51vEck_4WGO;jMlwIGYCv)YGQxc z;@QlgX?bZ}h5<(7-?Ek|h#R z_ktkb{@da<2o)$+(4IdH-J=}P{H6y5H4d1J{!8TkM>tMm{_nu>w>cp~M$-50ZEu$; zPi*)vd&(E2^|-sgkj(shJp11cb)Wv=^nk*Gv3&Kb^4vg1Ld#0zH6|t z?v`aL_hvOYxy*ceA9n_L^OdS-2f;w~P=9rNQ(nd&I_d(X{|d*J)?b&P|639Qu#Ond zS7;xmCZ|D^jr>9zcRl5B+&K_~ym3|~V3{cchU6g>)Zh(Q9;r%nikce z^|+_{E_K%8J6^m6l%wWWE*PtNnUWlv(&ozSsSW>kJVv|EzhK$b^0cF-6ipu9YwupHr5ky^YVZzqmPkr- zVkYq`dxY70VeK7`@3kp{jf5O(=$H0>xh(=QmQnkeE1qx50GDl((+!tZa}H}$>1$uJ zr21Ncitu+C`iI53X5I7|d*7>k+=|HKdPW$8IcEd<`Y<(Zd&~s(Usb*&5|LkiS2O;t z5u1RBBiN>rWpe-I8|?lI#Ea;84o)~zB#(EjHF73NN)#TZk`KT3_BJ^9UEii?*KtcFpD{z zNU}Wt>zC^TjlM1yR;_K~?M>}IkgKo~j_HG`1EQJ3LyA_zcFal9w`3Gyjuq|i;9vW- zwO>_UG40Dijy55XP4e5Bw6m#_Gl$y>wY9V1VbNPTFUzkjC1-a@loW3pt}ELN4WTPi z*K6n)%{a)%9*23aWzFaczo~? zOJtZZl~swcr&LDdaj#kF0PUBKX`IAwGi#wHSFH=NQn(?SZ0dCiX_{rtPn%6}OZ-y~ zf<4;(G94ZTWHECX?4OcHMXQQgzrD~V+?EfqXbG=6^dkPwyz#iig9~zYdTbRCqxpG2 zzLSMy&6D|far3mmy}PGmL8BO(QwPizmO;#-HoqN}}aRv@g`?f0|vYF1h5EB+=bd7)|+F zma%hrdlk|an-{3~iG^_^&o0lf++~LyX^(XREeECMIgJt483y)DWdo5m=h^E-UtAfj z(FxwjiOF$=678N8Nk3ryMFQF9)s4g_fdY0laH?I4r96o2yJd2Ln_O)dItsz23sinQ zKfcvif3Cj`In@z8=8LE*Xta^ka1f($5*ZIBl>Ja&|1q^a6ptcc?0|SQQ*}R@fll?2 zB`;%`6n)EOH+Nn1F>YqB-_a(TWpis_{0Q0d7LrzFxL>ZEeuo9{p?ih+<5$5kN>y)I z<3JYX6ilIK^xixdy?#Ad8JsW!lMR!8KO7Yu)W--rTiH;bS`)rC;I)fbULqW(wQlOI zqlr}ZN#nQcB!$O8tg{-a60hVg*0AKSW*vi{7*B+U zB&hvsyO0UpBc=SKML*m|%`vBU!AmQdah(Qq>4iOh0{>B)`1h;JS(y%F`E<`o?Nxj$ z{E)9^%RW|Slpz5!-_jDjNDZxXqPCvAQ>UaVaYE$@monp$4guccBciSlRS=AXNQbldk^Kv#;$w5mXF6u^&Oxaf(l0I(N#^*p?nc=Nb^wDInTz zPQ6GemX5T2p>Zrc1nHzi-rhFg6l@-jAzw>Hqes?gn%A$E>(0T7{3YJI`F|#-7g@9J zIrzA;4no{M{NuP~4kTdk^*kqb3(>YXc8eTV-!WROOQmUpL5GxBg9K241CaOPKMl8wWX+=v6gT%SRin{ zg_S-8-+{<^w%f`C!zvj%@U^y5o9)fd&j|5DUN0m=5)5`@^=_vCk)Ka6SnaS9x+oDk zzj8dTu<5HDqg?suJ))u8U(23dP5vISll58vK_}nZcSP)K(yM8ciq=fLh>~*dqmVW5 zYNT4n%Uy58tk_=TF}JahnR%v{Pb8zmUSi>6TtZ5xJ-d*I_S*P|hp)7Wv3F|zF^OeM zt#FfIW0uoykl}PMFyPX|nyWCWvMhO{5bxX~E8vqu9laxrPL$@PR5fnq=WH|7pW2Y^ zn77c}mBgAKU=9ac)a=)F!LwC_eYmQ$P z7`4Zl5IVS^u&jY?V_{`Dn{LjPnbtl+ZR>)Cr+ByHcJ#{!P^Muc4HQC_e*QxP&vW3( z<|7fkp)tSR-C4ocv{AV0{0(pAyXFK>ux$851Nn6%J>kB|Rq4puL!sfn{Fazi5UZ!B z8CnoiF|%BI<}dJZoU#Q;zeR=5NSwmDl?(c*;=no*Y;{U_Xtp4tBB>S3S{9@gnTcHX z{*KZKMgHb&q7)#IC*#>^GoxMXK@`@SKp6KEN^l7Si~01Za@64YJk&&t{19(eAEyU@ zn-N0vQv^M8k}NazJmh^*><`=CvOzt$FR%3s+QJyQu8?XtxgGFOc0&guqEKL9Fyr!N zS%FT(E-}m&Vau8l`I}h&q>30Uh6wsfA>VHfDpwt}i1W)xSo73hIuX$~E!SrKkKv%n zX}>;QeKl@K-FaW-^8=G;F_wc+L(A~~(@<;pXr^6R1(`!8dS=HXQrG^Xj8M`ovZ*h< z+*pnk08S2!+bWTb`d3I?l^P6J-)-ap+jVaoplg(&twsv|b?k@lEDd7w+jjR(qoN|> zFc05e#BV)>r|vA+nh`sUmvj5z-6yM_n!dePuOD{JK(3M`OYE-N{26C(3=W&; zzy;!}|3;qr3&#!HxoO3O80#Em^rCCi=h4s`x*MlV#GGYH^0-yeighk(zsH_XV9)oW zP&!a_(bel|OAi(!nNh{*)!^$(MvelR@=3YT%!u6Bx_RO7U!iwBT+|*LrPS@Nsz(Ah zW1>PE=fY=f&KIsh(9UC0ol{1YN+L&xdF`j>ezZPvq9ec&+uhpl&%Mqz;IkwJQSVZ<120PprQtJQ8d!}q7xt={pXv0`2kP3}Ktn)<$p8puQ4?<~PKog@%-vA!#U zms6?m2&whMhc%SCRQh>STwM#Dd80YOEFEp0G25KUlkYl9Onpz*ndAkHzMo3f&Td$R zmu^*%II_3d1wQEZYx<{!5!ViP?LO=Ip&MD4lwt1BO2rWaqj8NImJ-$xpAvwE^Y5{DZObqr(3Ec>fIe2*){^QAJ3`~Y6*Z)lY%Wg71)rq z#;2b+SbS^N59|b&Y#h$-zFX$VityrPgjqR81rzOj|IS;{<0Mp(jx?1k(2?F%r4po_ z6cFTYtNO2SO{>-F?Bb|mQxJW>Fe;OTW*+r+9%4cvq)N{ z34Rup&o3yod~P(UN(oik#W@?pCsrF9vwP2h@Y*>%{}sY7GUfiK5kvLSq!_ydVL0 z_{+Cs-5d@6q6QB8F$|}SPSf9`c1l^w&>B+$eAO0F%ulxwLr!OZ(zr?{uVfoY&2iBa zR<|KEqS@N1?5K|G(KmPR2C|^|ue!#;*4oFjSFiKB9%I}2#g{Bw!1Z`&WfqMgfN|Xw zf$XP=cPt=<@c}c&XFx@i(MHaUF;!#+5!rzNF~{UPAslm}>6P^hj4!L7GZB40;Ovkqkec zn&~_#dx9J`+qF}O;;GKyPOI?~{Zye!BIlIh$0;{}6mI4E`~dlv6fVD2a*HqKC+RZ^IwvHGQspJC+JQ=zcy5HcFqIn{=e z;JBBd!*=FmV^HUD8!K!qgcZ9!-;hbOcIu^V#$W^0Ct2}Zq=1)L_ha$GW_A4YSFLQf zopwIJs9KH1FU3h~gvEqL95Jgeg6`<-ousl)6dE!r$r<0MiQAP)H5bJxdS_=A6=w&A$juQ%6(K zrebnsb40Iy%_S96a{7aiSvL8Wx$N^bqE%80@cP;+aa?PEm^F_@p%45LIlV(TqFeGk zDkFrs2h|VHDm#P2gLP#4NWh<=Y!mh5q9zjHRGo6V{|o;xZz6Grn#T z7j`!0+cWR2g<1g$i5F*;U-p1^{fkxRl%w!Qs?HGT>(;0&Q&`O{{F8S<4|?_9wBMOP3Z7F zV%La6)nz69C(Kd9z}(-!?>}H+sKBq|aq7B~7`j3*Fkbc?u5RA;macKw+Ej7vx|p!8 zaU;6?u&HqfdJ?d)anJOO{_St{%Jf7L{@maX^#~qivBn+26U33~6OjGuasmTGe7_I) Z@n@@3j)xyw=0J$E(#J+b(7ylH{{!V8iu(Wn