// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        v7.35.0
// source: proto/luckygift/v1/luckygift.proto

package luckygiftv1

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// RequestMeta 是 lucky-gift-service 的内部追踪元信息。
// request_id 只用于链路排查，不能被任何业务流程当成幂等键使用。
type RequestMeta struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	RequestId     string                 `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	Caller        string                 `protobuf:"bytes,2,opt,name=caller,proto3" json:"caller,omitempty"`
	GatewayNodeId string                 `protobuf:"bytes,3,opt,name=gateway_node_id,json=gatewayNodeId,proto3" json:"gateway_node_id,omitempty"`
	SentAtMs      int64                  `protobuf:"varint,4,opt,name=sent_at_ms,json=sentAtMs,proto3" json:"sent_at_ms,omitempty"`
	AppCode       string                 `protobuf:"bytes,5,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RequestMeta) Reset() {
	*x = RequestMeta{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RequestMeta) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RequestMeta) ProtoMessage() {}

func (x *RequestMeta) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RequestMeta.ProtoReflect.Descriptor instead.
func (*RequestMeta) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{0}
}

func (x *RequestMeta) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

func (x *RequestMeta) GetCaller() string {
	if x != nil {
		return x.Caller
	}
	return ""
}

func (x *RequestMeta) GetGatewayNodeId() string {
	if x != nil {
		return x.GatewayNodeId
	}
	return ""
}

func (x *RequestMeta) GetSentAtMs() int64 {
	if x != nil {
		return x.SentAtMs
	}
	return 0
}

func (x *RequestMeta) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

// LuckyGiftMeta 是 HyApp 内部房间送礼扣费成功后的抽奖事实输入。
// 金额、目标用户和 command_id 必须来自 wallet-service 已落账的 receipt，不能从客户端 payload 推导。
type LuckyGiftMeta struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Meta            *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	CommandId       string                 `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"`
	UserId          int64                  `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	DeviceId        string                 `protobuf:"bytes,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
	RoomId          string                 `protobuf:"bytes,5,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
	AnchorId        string                 `protobuf:"bytes,6,opt,name=anchor_id,json=anchorId,proto3" json:"anchor_id,omitempty"`
	GiftId          string                 `protobuf:"bytes,7,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
	CoinSpent       int64                  `protobuf:"varint,8,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"`
	PaidAtMs        int64                  `protobuf:"varint,9,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"`
	PoolId          string                 `protobuf:"bytes,10,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	TargetUserId    int64                  `protobuf:"varint,11,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"`
	GiftCount       int32                  `protobuf:"varint,12,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"`
	VisibleRegionId int64                  `protobuf:"varint,13,opt,name=visible_region_id,json=visibleRegionId,proto3" json:"visible_region_id,omitempty"`
	CountryId       int64                  `protobuf:"varint,14,opt,name=country_id,json=countryId,proto3" json:"country_id,omitempty"`
	// sender_* 是 room-service 在送礼入口已经确认的展示快照，只进入中奖事实和 IM，不能参与抽奖或账务判断。
	SenderName                string `protobuf:"bytes,15,opt,name=sender_name,json=senderName,proto3" json:"sender_name,omitempty"`
	SenderAvatar              string `protobuf:"bytes,16,opt,name=sender_avatar,json=senderAvatar,proto3" json:"sender_avatar,omitempty"`
	SenderDisplayUserId       string `protobuf:"bytes,17,opt,name=sender_display_user_id,json=senderDisplayUserId,proto3" json:"sender_display_user_id,omitempty"`
	SenderPrettyDisplayUserId string `protobuf:"bytes,18,opt,name=sender_pretty_display_user_id,json=senderPrettyDisplayUserId,proto3" json:"sender_pretty_display_user_id,omitempty"`
	// 充值分层与充值后短时加权必须由调用方传入已确认的用户事实；幸运礼物服务不跨库回查用户或支付明细。
	Recharge_7DCoins  int64 `protobuf:"varint,19,opt,name=recharge_7d_coins,json=recharge7dCoins,proto3" json:"recharge_7d_coins,omitempty"`
	Recharge_30DCoins int64 `protobuf:"varint,20,opt,name=recharge_30d_coins,json=recharge30dCoins,proto3" json:"recharge_30d_coins,omitempty"`
	LastRechargedAtMs int64 `protobuf:"varint,21,opt,name=last_recharged_at_ms,json=lastRechargedAtMs,proto3" json:"last_recharged_at_ms,omitempty"`
	// gift_income_coins 是滚动兼容保留的旧字段名，实际承载 wallet 本次按 Host 政策结算的周期钻石；
	// 已退役的直接 POINT 回执不再参与拆分，Agency 额外收益也不包含在内。
	// 幸运礼物服务只能消费该 owner 回执，不能再用幸运礼物规则里的主播比例覆盖它。
	GiftIncomeCoins int64 `protobuf:"varint,22,opt,name=gift_income_coins,json=giftIncomeCoins,proto3" json:"gift_income_coins,omitempty"`
	// user_registered_at_ms 是 user-service 在送礼入口返回的账号创建事实快照。
	// dynamic_v3 只用它判断闭窗时账号是否已满 48 小时；缺失时普通开奖继续，但补偿大奖资格 fail-close。
	UserRegisteredAtMs int64 `protobuf:"varint,23,opt,name=user_registered_at_ms,json=userRegisteredAtMs,proto3" json:"user_registered_at_ms,omitempty"`
	// room_locked 由 Room Cell 在送礼命令串行执行期间读取，只进入中奖展示事实，不参与抽奖或账务计算。
	RoomLocked bool `protobuf:"varint,24,opt,name=room_locked,json=roomLocked,proto3" json:"room_locked,omitempty"`
	// owner_user_id 与 room_locked 在同一 Room Cell 串行区间固化；lucky owner 只持久化并透传该展示快照。
	OwnerUserId   int64 `protobuf:"varint,25,opt,name=owner_user_id,json=ownerUserId,proto3" json:"owner_user_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftMeta) Reset() {
	*x = LuckyGiftMeta{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftMeta) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftMeta) ProtoMessage() {}

func (x *LuckyGiftMeta) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftMeta.ProtoReflect.Descriptor instead.
func (*LuckyGiftMeta) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{1}
}

func (x *LuckyGiftMeta) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *LuckyGiftMeta) GetCommandId() string {
	if x != nil {
		return x.CommandId
	}
	return ""
}

func (x *LuckyGiftMeta) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *LuckyGiftMeta) GetDeviceId() string {
	if x != nil {
		return x.DeviceId
	}
	return ""
}

func (x *LuckyGiftMeta) GetRoomId() string {
	if x != nil {
		return x.RoomId
	}
	return ""
}

func (x *LuckyGiftMeta) GetAnchorId() string {
	if x != nil {
		return x.AnchorId
	}
	return ""
}

func (x *LuckyGiftMeta) GetGiftId() string {
	if x != nil {
		return x.GiftId
	}
	return ""
}

func (x *LuckyGiftMeta) GetCoinSpent() int64 {
	if x != nil {
		return x.CoinSpent
	}
	return 0
}

func (x *LuckyGiftMeta) GetPaidAtMs() int64 {
	if x != nil {
		return x.PaidAtMs
	}
	return 0
}

func (x *LuckyGiftMeta) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftMeta) GetTargetUserId() int64 {
	if x != nil {
		return x.TargetUserId
	}
	return 0
}

func (x *LuckyGiftMeta) GetGiftCount() int32 {
	if x != nil {
		return x.GiftCount
	}
	return 0
}

func (x *LuckyGiftMeta) GetVisibleRegionId() int64 {
	if x != nil {
		return x.VisibleRegionId
	}
	return 0
}

func (x *LuckyGiftMeta) GetCountryId() int64 {
	if x != nil {
		return x.CountryId
	}
	return 0
}

func (x *LuckyGiftMeta) GetSenderName() string {
	if x != nil {
		return x.SenderName
	}
	return ""
}

func (x *LuckyGiftMeta) GetSenderAvatar() string {
	if x != nil {
		return x.SenderAvatar
	}
	return ""
}

func (x *LuckyGiftMeta) GetSenderDisplayUserId() string {
	if x != nil {
		return x.SenderDisplayUserId
	}
	return ""
}

func (x *LuckyGiftMeta) GetSenderPrettyDisplayUserId() string {
	if x != nil {
		return x.SenderPrettyDisplayUserId
	}
	return ""
}

func (x *LuckyGiftMeta) GetRecharge_7DCoins() int64 {
	if x != nil {
		return x.Recharge_7DCoins
	}
	return 0
}

func (x *LuckyGiftMeta) GetRecharge_30DCoins() int64 {
	if x != nil {
		return x.Recharge_30DCoins
	}
	return 0
}

func (x *LuckyGiftMeta) GetLastRechargedAtMs() int64 {
	if x != nil {
		return x.LastRechargedAtMs
	}
	return 0
}

func (x *LuckyGiftMeta) GetGiftIncomeCoins() int64 {
	if x != nil {
		return x.GiftIncomeCoins
	}
	return 0
}

func (x *LuckyGiftMeta) GetUserRegisteredAtMs() int64 {
	if x != nil {
		return x.UserRegisteredAtMs
	}
	return 0
}

func (x *LuckyGiftMeta) GetRoomLocked() bool {
	if x != nil {
		return x.RoomLocked
	}
	return false
}

func (x *LuckyGiftMeta) GetOwnerUserId() int64 {
	if x != nil {
		return x.OwnerUserId
	}
	return 0
}

type LuckyGiftRuleTier struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Stage         string                 `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"`
	TierId        string                 `protobuf:"bytes,2,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"`
	MultiplierPpm int64                  `protobuf:"varint,3,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"`
	BaseWeightPpm int64                  `protobuf:"varint,4,opt,name=base_weight_ppm,json=baseWeightPpm,proto3" json:"base_weight_ppm,omitempty"`
	HighWaterOnly bool                   `protobuf:"varint,5,opt,name=high_water_only,json=highWaterOnly,proto3" json:"high_water_only,omitempty"`
	Enabled       bool                   `protobuf:"varint,6,opt,name=enabled,proto3" json:"enabled,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftRuleTier) Reset() {
	*x = LuckyGiftRuleTier{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftRuleTier) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftRuleTier) ProtoMessage() {}

func (x *LuckyGiftRuleTier) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftRuleTier.ProtoReflect.Descriptor instead.
func (*LuckyGiftRuleTier) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{2}
}

func (x *LuckyGiftRuleTier) GetStage() string {
	if x != nil {
		return x.Stage
	}
	return ""
}

func (x *LuckyGiftRuleTier) GetTierId() string {
	if x != nil {
		return x.TierId
	}
	return ""
}

func (x *LuckyGiftRuleTier) GetMultiplierPpm() int64 {
	if x != nil {
		return x.MultiplierPpm
	}
	return 0
}

func (x *LuckyGiftRuleTier) GetBaseWeightPpm() int64 {
	if x != nil {
		return x.BaseWeightPpm
	}
	return 0
}

func (x *LuckyGiftRuleTier) GetHighWaterOnly() bool {
	if x != nil {
		return x.HighWaterOnly
	}
	return false
}

func (x *LuckyGiftRuleTier) GetEnabled() bool {
	if x != nil {
		return x.Enabled
	}
	return false
}

type LuckyGiftRuleStage struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	Stage string                 `protobuf:"bytes,1,opt,name=stage,proto3" json:"stage,omitempty"`
	Tiers []*LuckyGiftRuleTier   `protobuf:"bytes,2,rep,name=tiers,proto3" json:"tiers,omitempty"`
	// 两个充值门槛共同决定 dynamic_v3 分层；novice 固定为 0/0，后续阶段逐维单调递增。
	MinRecharge_7DCoins  int64 `protobuf:"varint,3,opt,name=min_recharge_7d_coins,json=minRecharge7dCoins,proto3" json:"min_recharge_7d_coins,omitempty"`
	MinRecharge_30DCoins int64 `protobuf:"varint,4,opt,name=min_recharge_30d_coins,json=minRecharge30dCoins,proto3" json:"min_recharge_30d_coins,omitempty"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *LuckyGiftRuleStage) Reset() {
	*x = LuckyGiftRuleStage{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftRuleStage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftRuleStage) ProtoMessage() {}

func (x *LuckyGiftRuleStage) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftRuleStage.ProtoReflect.Descriptor instead.
func (*LuckyGiftRuleStage) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{3}
}

func (x *LuckyGiftRuleStage) GetStage() string {
	if x != nil {
		return x.Stage
	}
	return ""
}

func (x *LuckyGiftRuleStage) GetTiers() []*LuckyGiftRuleTier {
	if x != nil {
		return x.Tiers
	}
	return nil
}

func (x *LuckyGiftRuleStage) GetMinRecharge_7DCoins() int64 {
	if x != nil {
		return x.MinRecharge_7DCoins
	}
	return 0
}

func (x *LuckyGiftRuleStage) GetMinRecharge_30DCoins() int64 {
	if x != nil {
		return x.MinRecharge_30DCoins
	}
	return 0
}

type LuckyGiftRuleConfig struct {
	state                    protoimpl.MessageState `protogen:"open.v1"`
	AppCode                  string                 `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	PoolId                   string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	RuleVersion              int64                  `protobuf:"varint,3,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	Enabled                  bool                   `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"`
	TargetRtpPpm             int64                  `protobuf:"varint,5,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"`
	PoolRatePpm              int64                  `protobuf:"varint,6,opt,name=pool_rate_ppm,json=poolRatePpm,proto3" json:"pool_rate_ppm,omitempty"`
	SettlementWindowWager    int64                  `protobuf:"varint,7,opt,name=settlement_window_wager,json=settlementWindowWager,proto3" json:"settlement_window_wager,omitempty"`
	ControlBandPpm           int64                  `protobuf:"varint,8,opt,name=control_band_ppm,json=controlBandPpm,proto3" json:"control_band_ppm,omitempty"`
	GiftPriceReference       int64                  `protobuf:"varint,9,opt,name=gift_price_reference,json=giftPriceReference,proto3" json:"gift_price_reference,omitempty"`
	NoviceMaxEquivalentDraws int64                  `protobuf:"varint,10,opt,name=novice_max_equivalent_draws,json=noviceMaxEquivalentDraws,proto3" json:"novice_max_equivalent_draws,omitempty"`
	NormalMaxEquivalentDraws int64                  `protobuf:"varint,11,opt,name=normal_max_equivalent_draws,json=normalMaxEquivalentDraws,proto3" json:"normal_max_equivalent_draws,omitempty"`
	EffectiveFromMs          int64                  `protobuf:"varint,12,opt,name=effective_from_ms,json=effectiveFromMs,proto3" json:"effective_from_ms,omitempty"`
	CreatedByAdminId         int64                  `protobuf:"varint,13,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"`
	CreatedAtMs              int64                  `protobuf:"varint,14,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"`
	Stages                   []*LuckyGiftRuleStage  `protobuf:"bytes,15,rep,name=stages,proto3" json:"stages,omitempty"`
	// strategy_version 隔离历史 fixed_v2 与动态算法 dynamic_v3，避免新增约束破坏已经发布的旧规则。
	StrategyVersion           string  `protobuf:"bytes,16,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	ProfitRatePpm             int64   `protobuf:"varint,17,opt,name=profit_rate_ppm,json=profitRatePpm,proto3" json:"profit_rate_ppm,omitempty"`
	AnchorRatePpm             int64   `protobuf:"varint,18,opt,name=anchor_rate_ppm,json=anchorRatePpm,proto3" json:"anchor_rate_ppm,omitempty"`
	InitialPoolCoins          int64   `protobuf:"varint,19,opt,name=initial_pool_coins,json=initialPoolCoins,proto3" json:"initial_pool_coins,omitempty"`
	LossStreakGuarantee       int64   `protobuf:"varint,20,opt,name=loss_streak_guarantee,json=lossStreakGuarantee,proto3" json:"loss_streak_guarantee,omitempty"`
	LowWatermarkCoins         int64   `protobuf:"varint,21,opt,name=low_watermark_coins,json=lowWatermarkCoins,proto3" json:"low_watermark_coins,omitempty"`
	LowWaterNonzeroFactorPpm  int64   `protobuf:"varint,22,opt,name=low_water_nonzero_factor_ppm,json=lowWaterNonzeroFactorPpm,proto3" json:"low_water_nonzero_factor_ppm,omitempty"`
	HighWatermarkCoins        int64   `protobuf:"varint,23,opt,name=high_watermark_coins,json=highWatermarkCoins,proto3" json:"high_watermark_coins,omitempty"`
	HighWaterNonzeroFactorPpm int64   `protobuf:"varint,24,opt,name=high_water_nonzero_factor_ppm,json=highWaterNonzeroFactorPpm,proto3" json:"high_water_nonzero_factor_ppm,omitempty"`
	RechargeBoostWindowMs     int64   `protobuf:"varint,25,opt,name=recharge_boost_window_ms,json=rechargeBoostWindowMs,proto3" json:"recharge_boost_window_ms,omitempty"`
	RechargeBoostFactorPpm    int64   `protobuf:"varint,26,opt,name=recharge_boost_factor_ppm,json=rechargeBoostFactorPpm,proto3" json:"recharge_boost_factor_ppm,omitempty"`
	JackpotMultiplierPpms     []int64 `protobuf:"varint,27,rep,packed,name=jackpot_multiplier_ppms,json=jackpotMultiplierPpms,proto3" json:"jackpot_multiplier_ppms,omitempty"`
	JackpotGlobalRtpMaxPpm    int64   `protobuf:"varint,28,opt,name=jackpot_global_rtp_max_ppm,json=jackpotGlobalRtpMaxPpm,proto3" json:"jackpot_global_rtp_max_ppm,omitempty"`
	JackpotUserRoundRtpMaxPpm int64   `protobuf:"varint,29,opt,name=jackpot_user_round_rtp_max_ppm,json=jackpotUserRoundRtpMaxPpm,proto3" json:"jackpot_user_round_rtp_max_ppm,omitempty"`
	JackpotUser_48HRtpMaxPpm  int64   `protobuf:"varint,30,opt,name=jackpot_user_48h_rtp_max_ppm,json=jackpotUser48hRtpMaxPpm,proto3" json:"jackpot_user_48h_rtp_max_ppm,omitempty"`
	// 用户在同一应用、奖池和 UTC 自然日每累计消费满该金币数，生成一次可跨日保留的消费大奖资格。
	JackpotSpendThresholdCoins int64 `protobuf:"varint,31,opt,name=jackpot_spend_threshold_coins,json=jackpotSpendThresholdCoins,proto3" json:"jackpot_spend_threshold_coins,omitempty"`
	MaxJackpotHitsPerUserDay   int64 `protobuf:"varint,32,opt,name=max_jackpot_hits_per_user_day,json=maxJackpotHitsPerUserDay,proto3" json:"max_jackpot_hits_per_user_day,omitempty"`
	MaxSinglePayout            int64 `protobuf:"varint,33,opt,name=max_single_payout,json=maxSinglePayout,proto3" json:"max_single_payout,omitempty"`
	UserHourlyPayoutCap        int64 `protobuf:"varint,34,opt,name=user_hourly_payout_cap,json=userHourlyPayoutCap,proto3" json:"user_hourly_payout_cap,omitempty"`
	UserDailyPayoutCap         int64 `protobuf:"varint,35,opt,name=user_daily_payout_cap,json=userDailyPayoutCap,proto3" json:"user_daily_payout_cap,omitempty"`
	DeviceDailyPayoutCap       int64 `protobuf:"varint,36,opt,name=device_daily_payout_cap,json=deviceDailyPayoutCap,proto3" json:"device_daily_payout_cap,omitempty"`
	RoomHourlyPayoutCap        int64 `protobuf:"varint,37,opt,name=room_hourly_payout_cap,json=roomHourlyPayoutCap,proto3" json:"room_hourly_payout_cap,omitempty"`
	AnchorDailyPayoutCap       int64 `protobuf:"varint,38,opt,name=anchor_daily_payout_cap,json=anchorDailyPayoutCap,proto3" json:"anchor_daily_payout_cap,omitempty"`
	// 用户严格滚动 24 小时 RTP 超过此值时，普通非零奖档按下方因子降权；0 表示关闭该策略。
	User_24HRtpThresholdPpm int64 `protobuf:"varint,39,opt,name=user_24h_rtp_threshold_ppm,json=user24hRtpThresholdPpm,proto3" json:"user_24h_rtp_threshold_ppm,omitempty"`
	// 触发用户 24 小时 RTP 降权后保留的普通中奖权重；1000000 表示保持原概率。
	User_24HOrdinaryWinFactorPpm int64 `protobuf:"varint,40,opt,name=user_24h_ordinary_win_factor_ppm,json=user24hOrdinaryWinFactorPpm,proto3" json:"user_24h_ordinary_win_factor_ppm,omitempty"`
	// fixed_v2 高水位返奖加权：奖池水位越过阈值后中奖返奖按系数放大（RTP 等比放大），
	// 滞回保持到水位跌破恢复线才退出。0 表示关闭；dynamic_v3 必须保持三个字段为 0。
	V2HighWaterBoostThresholdCoins int64 `protobuf:"varint,41,opt,name=v2_high_water_boost_threshold_coins,json=v2HighWaterBoostThresholdCoins,proto3" json:"v2_high_water_boost_threshold_coins,omitempty"`
	// 加权系数 ppm；1500000 表示 RTP 变为原值的 150%。启用时必须大于 1000000。
	V2HighWaterBoostFactorPpm int64 `protobuf:"varint,42,opt,name=v2_high_water_boost_factor_ppm,json=v2HighWaterBoostFactorPpm,proto3" json:"v2_high_water_boost_factor_ppm,omitempty"`
	// 恢复水位金币；水位低于该值后退出加权。启用时必须为正且不高于阈值。
	V2HighWaterBoostRecoverCoins int64 `protobuf:"varint,43,opt,name=v2_high_water_boost_recover_coins,json=v2HighWaterBoostRecoverCoins,proto3" json:"v2_high_water_boost_recover_coins,omitempty"`
	// app+pool 全局滚动爆奖窗口；RTP 补偿和累计消费大奖共用，所有规则版本也共用实际命中事实。
	JackpotRateLimitWindowMinutes int64 `protobuf:"varint,44,opt,name=jackpot_rate_limit_window_minutes,json=jackpotRateLimitWindowMinutes,proto3" json:"jackpot_rate_limit_window_minutes,omitempty"`
	// 上述滚动窗口内最多允许的大奖次数；达到上限后消费 token 保留，RTP 补偿资格按本次已尝试处理。
	MaxJackpotHitsPerWindow int64 `protobuf:"varint,45,opt,name=max_jackpot_hits_per_window,json=maxJackpotHitsPerWindow,proto3" json:"max_jackpot_hits_per_window,omitempty"`
	unknownFields           protoimpl.UnknownFields
	sizeCache               protoimpl.SizeCache
}

func (x *LuckyGiftRuleConfig) Reset() {
	*x = LuckyGiftRuleConfig{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftRuleConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftRuleConfig) ProtoMessage() {}

func (x *LuckyGiftRuleConfig) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftRuleConfig.ProtoReflect.Descriptor instead.
func (*LuckyGiftRuleConfig) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{4}
}

func (x *LuckyGiftRuleConfig) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *LuckyGiftRuleConfig) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftRuleConfig) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetEnabled() bool {
	if x != nil {
		return x.Enabled
	}
	return false
}

func (x *LuckyGiftRuleConfig) GetTargetRtpPpm() int64 {
	if x != nil {
		return x.TargetRtpPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetPoolRatePpm() int64 {
	if x != nil {
		return x.PoolRatePpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetSettlementWindowWager() int64 {
	if x != nil {
		return x.SettlementWindowWager
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetControlBandPpm() int64 {
	if x != nil {
		return x.ControlBandPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetGiftPriceReference() int64 {
	if x != nil {
		return x.GiftPriceReference
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetNoviceMaxEquivalentDraws() int64 {
	if x != nil {
		return x.NoviceMaxEquivalentDraws
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetNormalMaxEquivalentDraws() int64 {
	if x != nil {
		return x.NormalMaxEquivalentDraws
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetEffectiveFromMs() int64 {
	if x != nil {
		return x.EffectiveFromMs
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetCreatedByAdminId() int64 {
	if x != nil {
		return x.CreatedByAdminId
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetCreatedAtMs() int64 {
	if x != nil {
		return x.CreatedAtMs
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetStages() []*LuckyGiftRuleStage {
	if x != nil {
		return x.Stages
	}
	return nil
}

func (x *LuckyGiftRuleConfig) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *LuckyGiftRuleConfig) GetProfitRatePpm() int64 {
	if x != nil {
		return x.ProfitRatePpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetAnchorRatePpm() int64 {
	if x != nil {
		return x.AnchorRatePpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetInitialPoolCoins() int64 {
	if x != nil {
		return x.InitialPoolCoins
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetLossStreakGuarantee() int64 {
	if x != nil {
		return x.LossStreakGuarantee
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetLowWatermarkCoins() int64 {
	if x != nil {
		return x.LowWatermarkCoins
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetLowWaterNonzeroFactorPpm() int64 {
	if x != nil {
		return x.LowWaterNonzeroFactorPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetHighWatermarkCoins() int64 {
	if x != nil {
		return x.HighWatermarkCoins
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetHighWaterNonzeroFactorPpm() int64 {
	if x != nil {
		return x.HighWaterNonzeroFactorPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetRechargeBoostWindowMs() int64 {
	if x != nil {
		return x.RechargeBoostWindowMs
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetRechargeBoostFactorPpm() int64 {
	if x != nil {
		return x.RechargeBoostFactorPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetJackpotMultiplierPpms() []int64 {
	if x != nil {
		return x.JackpotMultiplierPpms
	}
	return nil
}

func (x *LuckyGiftRuleConfig) GetJackpotGlobalRtpMaxPpm() int64 {
	if x != nil {
		return x.JackpotGlobalRtpMaxPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetJackpotUserRoundRtpMaxPpm() int64 {
	if x != nil {
		return x.JackpotUserRoundRtpMaxPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetJackpotUser_48HRtpMaxPpm() int64 {
	if x != nil {
		return x.JackpotUser_48HRtpMaxPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetJackpotSpendThresholdCoins() int64 {
	if x != nil {
		return x.JackpotSpendThresholdCoins
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetMaxJackpotHitsPerUserDay() int64 {
	if x != nil {
		return x.MaxJackpotHitsPerUserDay
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetMaxSinglePayout() int64 {
	if x != nil {
		return x.MaxSinglePayout
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetUserHourlyPayoutCap() int64 {
	if x != nil {
		return x.UserHourlyPayoutCap
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetUserDailyPayoutCap() int64 {
	if x != nil {
		return x.UserDailyPayoutCap
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetDeviceDailyPayoutCap() int64 {
	if x != nil {
		return x.DeviceDailyPayoutCap
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetRoomHourlyPayoutCap() int64 {
	if x != nil {
		return x.RoomHourlyPayoutCap
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetAnchorDailyPayoutCap() int64 {
	if x != nil {
		return x.AnchorDailyPayoutCap
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetUser_24HRtpThresholdPpm() int64 {
	if x != nil {
		return x.User_24HRtpThresholdPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetUser_24HOrdinaryWinFactorPpm() int64 {
	if x != nil {
		return x.User_24HOrdinaryWinFactorPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetV2HighWaterBoostThresholdCoins() int64 {
	if x != nil {
		return x.V2HighWaterBoostThresholdCoins
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetV2HighWaterBoostFactorPpm() int64 {
	if x != nil {
		return x.V2HighWaterBoostFactorPpm
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetV2HighWaterBoostRecoverCoins() int64 {
	if x != nil {
		return x.V2HighWaterBoostRecoverCoins
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetJackpotRateLimitWindowMinutes() int64 {
	if x != nil {
		return x.JackpotRateLimitWindowMinutes
	}
	return 0
}

func (x *LuckyGiftRuleConfig) GetMaxJackpotHitsPerWindow() int64 {
	if x != nil {
		return x.MaxJackpotHitsPerWindow
	}
	return 0
}

type CheckLuckyGiftRequest struct {
	state  protoimpl.MessageState `protogen:"open.v1"`
	Meta   *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	UserId int64                  `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	RoomId string                 `protobuf:"bytes,3,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
	GiftId string                 `protobuf:"bytes,4,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
	PoolId string                 `protobuf:"bytes,5,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	// 可选的可信设备 claim。旧 token 缺失时保持空值；实验分组只按用户键，不得按设备改变组别。
	DeviceId      string `protobuf:"bytes,6,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CheckLuckyGiftRequest) Reset() {
	*x = CheckLuckyGiftRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CheckLuckyGiftRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CheckLuckyGiftRequest) ProtoMessage() {}

func (x *CheckLuckyGiftRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CheckLuckyGiftRequest.ProtoReflect.Descriptor instead.
func (*CheckLuckyGiftRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{5}
}

func (x *CheckLuckyGiftRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *CheckLuckyGiftRequest) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *CheckLuckyGiftRequest) GetRoomId() string {
	if x != nil {
		return x.RoomId
	}
	return ""
}

func (x *CheckLuckyGiftRequest) GetGiftId() string {
	if x != nil {
		return x.GiftId
	}
	return ""
}

func (x *CheckLuckyGiftRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *CheckLuckyGiftRequest) GetDeviceId() string {
	if x != nil {
		return x.DeviceId
	}
	return ""
}

type CheckLuckyGiftResponse struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Enabled        bool                   `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
	Reason         string                 `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"`
	GiftId         string                 `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
	GiftPrice      int64                  `protobuf:"varint,4,opt,name=gift_price,json=giftPrice,proto3" json:"gift_price,omitempty"`
	RuleVersion    int64                  `protobuf:"varint,5,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	TargetRtpPpm   int64                  `protobuf:"varint,6,opt,name=target_rtp_ppm,json=targetRtpPpm,proto3" json:"target_rtp_ppm,omitempty"`
	ExperiencePool string                 `protobuf:"bytes,7,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"`
	PoolId         string                 `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	// strategy_version 由 lucky-gift owner 返回并由 room saga 固化，用于滚动发布时区分 fixed_v2 兼容与 dynamic_v3 强校验。
	StrategyVersion string `protobuf:"bytes,9,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *CheckLuckyGiftResponse) Reset() {
	*x = CheckLuckyGiftResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CheckLuckyGiftResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CheckLuckyGiftResponse) ProtoMessage() {}

func (x *CheckLuckyGiftResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CheckLuckyGiftResponse.ProtoReflect.Descriptor instead.
func (*CheckLuckyGiftResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{6}
}

func (x *CheckLuckyGiftResponse) GetEnabled() bool {
	if x != nil {
		return x.Enabled
	}
	return false
}

func (x *CheckLuckyGiftResponse) GetReason() string {
	if x != nil {
		return x.Reason
	}
	return ""
}

func (x *CheckLuckyGiftResponse) GetGiftId() string {
	if x != nil {
		return x.GiftId
	}
	return ""
}

func (x *CheckLuckyGiftResponse) GetGiftPrice() int64 {
	if x != nil {
		return x.GiftPrice
	}
	return 0
}

func (x *CheckLuckyGiftResponse) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *CheckLuckyGiftResponse) GetTargetRtpPpm() int64 {
	if x != nil {
		return x.TargetRtpPpm
	}
	return 0
}

func (x *CheckLuckyGiftResponse) GetExperiencePool() string {
	if x != nil {
		return x.ExperiencePool
	}
	return ""
}

func (x *CheckLuckyGiftResponse) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *CheckLuckyGiftResponse) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

type LuckyGiftDrawResult struct {
	state                protoimpl.MessageState `protogen:"open.v1"`
	DrawId               string                 `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"`
	CommandId            string                 `protobuf:"bytes,2,opt,name=command_id,json=commandId,proto3" json:"command_id,omitempty"`
	GiftId               string                 `protobuf:"bytes,3,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
	RuleVersion          int64                  `protobuf:"varint,4,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	ExperiencePool       string                 `protobuf:"bytes,5,opt,name=experience_pool,json=experiencePool,proto3" json:"experience_pool,omitempty"`
	SelectedTierId       string                 `protobuf:"bytes,6,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"`
	BaseRewardCoins      int64                  `protobuf:"varint,7,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"`
	EffectiveRewardCoins int64                  `protobuf:"varint,8,opt,name=effective_reward_coins,json=effectiveRewardCoins,proto3" json:"effective_reward_coins,omitempty"`
	RewardStatus         string                 `protobuf:"bytes,9,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"`
	RtpWindowIndex       int64                  `protobuf:"varint,10,opt,name=rtp_window_index,json=rtpWindowIndex,proto3" json:"rtp_window_index,omitempty"`
	GiftRtpWindowIndex   int64                  `protobuf:"varint,11,opt,name=gift_rtp_window_index,json=giftRtpWindowIndex,proto3" json:"gift_rtp_window_index,omitempty"`
	GlobalBaseRtpPpm     int64                  `protobuf:"varint,12,opt,name=global_base_rtp_ppm,json=globalBaseRtpPpm,proto3" json:"global_base_rtp_ppm,omitempty"`
	GiftBaseRtpPpm       int64                  `protobuf:"varint,13,opt,name=gift_base_rtp_ppm,json=giftBaseRtpPpm,proto3" json:"gift_base_rtp_ppm,omitempty"`
	StageFeedback        bool                   `protobuf:"varint,14,opt,name=stage_feedback,json=stageFeedback,proto3" json:"stage_feedback,omitempty"`
	HighMultiplier       bool                   `protobuf:"varint,15,opt,name=high_multiplier,json=highMultiplier,proto3" json:"high_multiplier,omitempty"`
	CreatedAtMs          int64                  `protobuf:"varint,16,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"`
	PoolId               string                 `protobuf:"bytes,17,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	MultiplierPpm        int64                  `protobuf:"varint,18,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"`
	WalletTransactionId  string                 `protobuf:"bytes,19,opt,name=wallet_transaction_id,json=walletTransactionId,proto3" json:"wallet_transaction_id,omitempty"`
	CoinBalanceAfter     int64                  `protobuf:"varint,20,opt,name=coin_balance_after,json=coinBalanceAfter,proto3" json:"coin_balance_after,omitempty"`
	UserId               int64                  `protobuf:"varint,21,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	ExternalUserId       string                 `protobuf:"bytes,22,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	AppCode              string                 `protobuf:"bytes,23,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	Hits                 []*LuckyGiftHit        `protobuf:"bytes,24,rep,name=hits,proto3" json:"hits,omitempty"`
	unknownFields        protoimpl.UnknownFields
	sizeCache            protoimpl.SizeCache
}

func (x *LuckyGiftDrawResult) Reset() {
	*x = LuckyGiftDrawResult{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftDrawResult) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftDrawResult) ProtoMessage() {}

func (x *LuckyGiftDrawResult) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftDrawResult.ProtoReflect.Descriptor instead.
func (*LuckyGiftDrawResult) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{7}
}

func (x *LuckyGiftDrawResult) GetDrawId() string {
	if x != nil {
		return x.DrawId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetCommandId() string {
	if x != nil {
		return x.CommandId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetGiftId() string {
	if x != nil {
		return x.GiftId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetExperiencePool() string {
	if x != nil {
		return x.ExperiencePool
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetSelectedTierId() string {
	if x != nil {
		return x.SelectedTierId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetBaseRewardCoins() int64 {
	if x != nil {
		return x.BaseRewardCoins
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetEffectiveRewardCoins() int64 {
	if x != nil {
		return x.EffectiveRewardCoins
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetRewardStatus() string {
	if x != nil {
		return x.RewardStatus
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetRtpWindowIndex() int64 {
	if x != nil {
		return x.RtpWindowIndex
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetGiftRtpWindowIndex() int64 {
	if x != nil {
		return x.GiftRtpWindowIndex
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetGlobalBaseRtpPpm() int64 {
	if x != nil {
		return x.GlobalBaseRtpPpm
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetGiftBaseRtpPpm() int64 {
	if x != nil {
		return x.GiftBaseRtpPpm
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetStageFeedback() bool {
	if x != nil {
		return x.StageFeedback
	}
	return false
}

func (x *LuckyGiftDrawResult) GetHighMultiplier() bool {
	if x != nil {
		return x.HighMultiplier
	}
	return false
}

func (x *LuckyGiftDrawResult) GetCreatedAtMs() int64 {
	if x != nil {
		return x.CreatedAtMs
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetMultiplierPpm() int64 {
	if x != nil {
		return x.MultiplierPpm
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetWalletTransactionId() string {
	if x != nil {
		return x.WalletTransactionId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetCoinBalanceAfter() int64 {
	if x != nil {
		return x.CoinBalanceAfter
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *LuckyGiftDrawResult) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *LuckyGiftDrawResult) GetHits() []*LuckyGiftHit {
	if x != nil {
		return x.Hits
	}
	return nil
}

type ExecuteLuckyGiftDrawRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	LuckyGift     *LuckyGiftMeta         `protobuf:"bytes,1,opt,name=lucky_gift,json=luckyGift,proto3" json:"lucky_gift,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ExecuteLuckyGiftDrawRequest) Reset() {
	*x = ExecuteLuckyGiftDrawRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ExecuteLuckyGiftDrawRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ExecuteLuckyGiftDrawRequest) ProtoMessage() {}

func (x *ExecuteLuckyGiftDrawRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ExecuteLuckyGiftDrawRequest.ProtoReflect.Descriptor instead.
func (*ExecuteLuckyGiftDrawRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{8}
}

func (x *ExecuteLuckyGiftDrawRequest) GetLuckyGift() *LuckyGiftMeta {
	if x != nil {
		return x.LuckyGift
	}
	return nil
}

type ExecuteLuckyGiftDrawResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Result        *LuckyGiftDrawResult   `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ExecuteLuckyGiftDrawResponse) Reset() {
	*x = ExecuteLuckyGiftDrawResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ExecuteLuckyGiftDrawResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ExecuteLuckyGiftDrawResponse) ProtoMessage() {}

func (x *ExecuteLuckyGiftDrawResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ExecuteLuckyGiftDrawResponse.ProtoReflect.Descriptor instead.
func (*ExecuteLuckyGiftDrawResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{9}
}

func (x *ExecuteLuckyGiftDrawResponse) GetResult() *LuckyGiftDrawResult {
	if x != nil {
		return x.Result
	}
	return nil
}

type BatchExecuteLuckyGiftDrawRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	LuckyGifts    []*LuckyGiftMeta       `protobuf:"bytes,1,rep,name=lucky_gifts,json=luckyGifts,proto3" json:"lucky_gifts,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *BatchExecuteLuckyGiftDrawRequest) Reset() {
	*x = BatchExecuteLuckyGiftDrawRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *BatchExecuteLuckyGiftDrawRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BatchExecuteLuckyGiftDrawRequest) ProtoMessage() {}

func (x *BatchExecuteLuckyGiftDrawRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BatchExecuteLuckyGiftDrawRequest.ProtoReflect.Descriptor instead.
func (*BatchExecuteLuckyGiftDrawRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{10}
}

func (x *BatchExecuteLuckyGiftDrawRequest) GetLuckyGifts() []*LuckyGiftMeta {
	if x != nil {
		return x.LuckyGifts
	}
	return nil
}

type BatchExecuteLuckyGiftDrawResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Results       []*LuckyGiftDrawResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *BatchExecuteLuckyGiftDrawResponse) Reset() {
	*x = BatchExecuteLuckyGiftDrawResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *BatchExecuteLuckyGiftDrawResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BatchExecuteLuckyGiftDrawResponse) ProtoMessage() {}

func (x *BatchExecuteLuckyGiftDrawResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BatchExecuteLuckyGiftDrawResponse.ProtoReflect.Descriptor instead.
func (*BatchExecuteLuckyGiftDrawResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{11}
}

func (x *BatchExecuteLuckyGiftDrawResponse) GetResults() []*LuckyGiftDrawResult {
	if x != nil {
		return x.Results
	}
	return nil
}

// ExternalGiftDrawRequest 是外部 App 接入的抽奖输入。
// App 调用前必须已经完成自己的扣费，lucky-gift-service 只校验金额事实并返回中奖结果。
type ExternalGiftDrawRequest struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Meta           *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	AppCode        string                 `protobuf:"bytes,3,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	ExternalUserId string                 `protobuf:"bytes,4,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	RequestId      string                 `protobuf:"bytes,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	GiftCount      int64                  `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"`
	UnitAmount     int64                  `protobuf:"varint,7,opt,name=unit_amount,json=unitAmount,proto3" json:"unit_amount,omitempty"`
	TotalAmount    int64                  `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"`
	Currency       string                 `protobuf:"bytes,9,opt,name=currency,proto3" json:"currency,omitempty"`
	PaidAtMs       int64                  `protobuf:"varint,10,opt,name=paid_at_ms,json=paidAtMs,proto3" json:"paid_at_ms,omitempty"`
	MetadataJson   string                 `protobuf:"bytes,11,opt,name=metadata_json,json=metadataJson,proto3" json:"metadata_json,omitempty"`
	PoolId         string                 `protobuf:"bytes,12,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	// dynamic_v3 必填的稳定设备作用域。luck-gateway 不独立证明其真实性，调用方必须在自己的认证/签名边界内绑定该值；fixed_v2 允许缺失。
	DeviceId string `protobuf:"bytes,13,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
	// user_registered_at_ms 由外部 App 按自己的用户主数据提供；dynamic_v3 缺失或晚于支付时间时补偿大奖资格 fail-close。
	UserRegisteredAtMs int64 `protobuf:"varint,14,opt,name=user_registered_at_ms,json=userRegisteredAtMs,proto3" json:"user_registered_at_ms,omitempty"`
	unknownFields      protoimpl.UnknownFields
	sizeCache          protoimpl.SizeCache
}

func (x *ExternalGiftDrawRequest) Reset() {
	*x = ExternalGiftDrawRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ExternalGiftDrawRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ExternalGiftDrawRequest) ProtoMessage() {}

func (x *ExternalGiftDrawRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ExternalGiftDrawRequest.ProtoReflect.Descriptor instead.
func (*ExternalGiftDrawRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{12}
}

func (x *ExternalGiftDrawRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ExternalGiftDrawRequest) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetGiftCount() int64 {
	if x != nil {
		return x.GiftCount
	}
	return 0
}

func (x *ExternalGiftDrawRequest) GetUnitAmount() int64 {
	if x != nil {
		return x.UnitAmount
	}
	return 0
}

func (x *ExternalGiftDrawRequest) GetTotalAmount() int64 {
	if x != nil {
		return x.TotalAmount
	}
	return 0
}

func (x *ExternalGiftDrawRequest) GetCurrency() string {
	if x != nil {
		return x.Currency
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetPaidAtMs() int64 {
	if x != nil {
		return x.PaidAtMs
	}
	return 0
}

func (x *ExternalGiftDrawRequest) GetMetadataJson() string {
	if x != nil {
		return x.MetadataJson
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetDeviceId() string {
	if x != nil {
		return x.DeviceId
	}
	return ""
}

func (x *ExternalGiftDrawRequest) GetUserRegisteredAtMs() int64 {
	if x != nil {
		return x.UserRegisteredAtMs
	}
	return 0
}

type ExternalGiftDrawResponse struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	DrawId         string                 `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"`
	RequestId      string                 `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	AppCode        string                 `protobuf:"bytes,4,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	ExternalUserId string                 `protobuf:"bytes,5,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	GiftCount      int64                  `protobuf:"varint,6,opt,name=gift_count,json=giftCount,proto3" json:"gift_count,omitempty"`
	UnitAmount     int64                  `protobuf:"varint,7,opt,name=unit_amount,json=unitAmount,proto3" json:"unit_amount,omitempty"`
	TotalAmount    int64                  `protobuf:"varint,8,opt,name=total_amount,json=totalAmount,proto3" json:"total_amount,omitempty"`
	RewardAmount   int64                  `protobuf:"varint,9,opt,name=reward_amount,json=rewardAmount,proto3" json:"reward_amount,omitempty"`
	MultiplierPpm  int64                  `protobuf:"varint,10,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"`
	RewardStatus   string                 `protobuf:"bytes,11,opt,name=reward_status,json=rewardStatus,proto3" json:"reward_status,omitempty"`
	RuleVersion    int64                  `protobuf:"varint,12,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	CreatedAtMs    int64                  `protobuf:"varint,13,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *ExternalGiftDrawResponse) Reset() {
	*x = ExternalGiftDrawResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ExternalGiftDrawResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ExternalGiftDrawResponse) ProtoMessage() {}

func (x *ExternalGiftDrawResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ExternalGiftDrawResponse.ProtoReflect.Descriptor instead.
func (*ExternalGiftDrawResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{13}
}

func (x *ExternalGiftDrawResponse) GetDrawId() string {
	if x != nil {
		return x.DrawId
	}
	return ""
}

func (x *ExternalGiftDrawResponse) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

func (x *ExternalGiftDrawResponse) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *ExternalGiftDrawResponse) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *ExternalGiftDrawResponse) GetGiftCount() int64 {
	if x != nil {
		return x.GiftCount
	}
	return 0
}

func (x *ExternalGiftDrawResponse) GetUnitAmount() int64 {
	if x != nil {
		return x.UnitAmount
	}
	return 0
}

func (x *ExternalGiftDrawResponse) GetTotalAmount() int64 {
	if x != nil {
		return x.TotalAmount
	}
	return 0
}

func (x *ExternalGiftDrawResponse) GetRewardAmount() int64 {
	if x != nil {
		return x.RewardAmount
	}
	return 0
}

func (x *ExternalGiftDrawResponse) GetMultiplierPpm() int64 {
	if x != nil {
		return x.MultiplierPpm
	}
	return 0
}

func (x *ExternalGiftDrawResponse) GetRewardStatus() string {
	if x != nil {
		return x.RewardStatus
	}
	return ""
}

func (x *ExternalGiftDrawResponse) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *ExternalGiftDrawResponse) GetCreatedAtMs() int64 {
	if x != nil {
		return x.CreatedAtMs
	}
	return 0
}

type GetLuckyGiftConfigRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Meta          *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId        string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetLuckyGiftConfigRequest) Reset() {
	*x = GetLuckyGiftConfigRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[14]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLuckyGiftConfigRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLuckyGiftConfigRequest) ProtoMessage() {}

func (x *GetLuckyGiftConfigRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[14]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLuckyGiftConfigRequest.ProtoReflect.Descriptor instead.
func (*GetLuckyGiftConfigRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{14}
}

func (x *GetLuckyGiftConfigRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *GetLuckyGiftConfigRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

type GetLuckyGiftConfigResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Config        *LuckyGiftRuleConfig   `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetLuckyGiftConfigResponse) Reset() {
	*x = GetLuckyGiftConfigResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[15]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLuckyGiftConfigResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLuckyGiftConfigResponse) ProtoMessage() {}

func (x *GetLuckyGiftConfigResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[15]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLuckyGiftConfigResponse.ProtoReflect.Descriptor instead.
func (*GetLuckyGiftConfigResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{15}
}

func (x *GetLuckyGiftConfigResponse) GetConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.Config
	}
	return nil
}

type UpsertLuckyGiftConfigRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Meta            *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	Config          *LuckyGiftRuleConfig   `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	OperatorAdminId int64                  `protobuf:"varint,3,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *UpsertLuckyGiftConfigRequest) Reset() {
	*x = UpsertLuckyGiftConfigRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[16]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpsertLuckyGiftConfigRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpsertLuckyGiftConfigRequest) ProtoMessage() {}

func (x *UpsertLuckyGiftConfigRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[16]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpsertLuckyGiftConfigRequest.ProtoReflect.Descriptor instead.
func (*UpsertLuckyGiftConfigRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{16}
}

func (x *UpsertLuckyGiftConfigRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *UpsertLuckyGiftConfigRequest) GetConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.Config
	}
	return nil
}

func (x *UpsertLuckyGiftConfigRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

type UpsertLuckyGiftConfigResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Config        *LuckyGiftRuleConfig   `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpsertLuckyGiftConfigResponse) Reset() {
	*x = UpsertLuckyGiftConfigResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[17]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpsertLuckyGiftConfigResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpsertLuckyGiftConfigResponse) ProtoMessage() {}

func (x *UpsertLuckyGiftConfigResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[17]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpsertLuckyGiftConfigResponse.ProtoReflect.Descriptor instead.
func (*UpsertLuckyGiftConfigResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{17}
}

func (x *UpsertLuckyGiftConfigResponse) GetConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.Config
	}
	return nil
}

type ListLuckyGiftConfigsRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Meta          *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftConfigsRequest) Reset() {
	*x = ListLuckyGiftConfigsRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[18]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftConfigsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftConfigsRequest) ProtoMessage() {}

func (x *ListLuckyGiftConfigsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[18]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftConfigsRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftConfigsRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{18}
}

func (x *ListLuckyGiftConfigsRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

type ListLuckyGiftConfigsResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Configs       []*LuckyGiftRuleConfig `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftConfigsResponse) Reset() {
	*x = ListLuckyGiftConfigsResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[19]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftConfigsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftConfigsResponse) ProtoMessage() {}

func (x *ListLuckyGiftConfigsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[19]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftConfigsResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftConfigsResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{19}
}

func (x *ListLuckyGiftConfigsResponse) GetConfigs() []*LuckyGiftRuleConfig {
	if x != nil {
		return x.Configs
	}
	return nil
}

// ListLuckyGiftConfigVersions 只读取同一 app+pool 的不可变历史快照；返回顺序为版本号倒序。
type ListLuckyGiftConfigVersionsRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Meta          *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId        string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftConfigVersionsRequest) Reset() {
	*x = ListLuckyGiftConfigVersionsRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[20]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftConfigVersionsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftConfigVersionsRequest) ProtoMessage() {}

func (x *ListLuckyGiftConfigVersionsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[20]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftConfigVersionsRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftConfigVersionsRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{20}
}

func (x *ListLuckyGiftConfigVersionsRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ListLuckyGiftConfigVersionsRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

type ListLuckyGiftConfigVersionsResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Configs       []*LuckyGiftRuleConfig `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftConfigVersionsResponse) Reset() {
	*x = ListLuckyGiftConfigVersionsResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[21]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftConfigVersionsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftConfigVersionsResponse) ProtoMessage() {}

func (x *ListLuckyGiftConfigVersionsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[21]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftConfigVersionsResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftConfigVersionsResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{21}
}

func (x *ListLuckyGiftConfigVersionsResponse) GetConfigs() []*LuckyGiftRuleConfig {
	if x != nil {
		return x.Configs
	}
	return nil
}

// RollbackLuckyGiftConfig 不覆盖历史行，而是把目标快照复制成一个新的最新版本并立即生效。
type RollbackLuckyGiftConfigRequest struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	Meta              *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId            string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	TargetRuleVersion int64                  `protobuf:"varint,3,opt,name=target_rule_version,json=targetRuleVersion,proto3" json:"target_rule_version,omitempty"`
	OperatorAdminId   int64                  `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *RollbackLuckyGiftConfigRequest) Reset() {
	*x = RollbackLuckyGiftConfigRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[22]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RollbackLuckyGiftConfigRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RollbackLuckyGiftConfigRequest) ProtoMessage() {}

func (x *RollbackLuckyGiftConfigRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[22]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RollbackLuckyGiftConfigRequest.ProtoReflect.Descriptor instead.
func (*RollbackLuckyGiftConfigRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{22}
}

func (x *RollbackLuckyGiftConfigRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *RollbackLuckyGiftConfigRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *RollbackLuckyGiftConfigRequest) GetTargetRuleVersion() int64 {
	if x != nil {
		return x.TargetRuleVersion
	}
	return 0
}

func (x *RollbackLuckyGiftConfigRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

type RollbackLuckyGiftConfigResponse struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	SourceRuleVersion int64                  `protobuf:"varint,1,opt,name=source_rule_version,json=sourceRuleVersion,proto3" json:"source_rule_version,omitempty"`
	Config            *LuckyGiftRuleConfig   `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *RollbackLuckyGiftConfigResponse) Reset() {
	*x = RollbackLuckyGiftConfigResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[23]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RollbackLuckyGiftConfigResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RollbackLuckyGiftConfigResponse) ProtoMessage() {}

func (x *RollbackLuckyGiftConfigResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[23]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RollbackLuckyGiftConfigResponse.ProtoReflect.Descriptor instead.
func (*RollbackLuckyGiftConfigResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{23}
}

func (x *RollbackLuckyGiftConfigResponse) GetSourceRuleVersion() int64 {
	if x != nil {
		return x.SourceRuleVersion
	}
	return 0
}

func (x *RollbackLuckyGiftConfigResponse) GetConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.Config
	}
	return nil
}

type ListLuckyGiftDrawsRequest struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Meta           *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	GiftId         string                 `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
	UserId         int64                  `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	RoomId         string                 `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
	Status         string                 `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
	Page           int32                  `protobuf:"varint,6,opt,name=page,proto3" json:"page,omitempty"`
	PageSize       int32                  `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	PoolId         string                 `protobuf:"bytes,8,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	ExternalUserId string                 `protobuf:"bytes,10,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	ExternalOnly   bool                   `protobuf:"varint,11,opt,name=external_only,json=externalOnly,proto3" json:"external_only,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *ListLuckyGiftDrawsRequest) Reset() {
	*x = ListLuckyGiftDrawsRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[24]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftDrawsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftDrawsRequest) ProtoMessage() {}

func (x *ListLuckyGiftDrawsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[24]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftDrawsRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftDrawsRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{24}
}

func (x *ListLuckyGiftDrawsRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ListLuckyGiftDrawsRequest) GetGiftId() string {
	if x != nil {
		return x.GiftId
	}
	return ""
}

func (x *ListLuckyGiftDrawsRequest) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *ListLuckyGiftDrawsRequest) GetRoomId() string {
	if x != nil {
		return x.RoomId
	}
	return ""
}

func (x *ListLuckyGiftDrawsRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *ListLuckyGiftDrawsRequest) GetPage() int32 {
	if x != nil {
		return x.Page
	}
	return 0
}

func (x *ListLuckyGiftDrawsRequest) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

func (x *ListLuckyGiftDrawsRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *ListLuckyGiftDrawsRequest) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *ListLuckyGiftDrawsRequest) GetExternalOnly() bool {
	if x != nil {
		return x.ExternalOnly
	}
	return false
}

type ListLuckyGiftDrawsResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Draws         []*LuckyGiftDrawResult `protobuf:"bytes,1,rep,name=draws,proto3" json:"draws,omitempty"`
	Total         int64                  `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftDrawsResponse) Reset() {
	*x = ListLuckyGiftDrawsResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[25]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftDrawsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftDrawsResponse) ProtoMessage() {}

func (x *ListLuckyGiftDrawsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[25]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftDrawsResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftDrawsResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{25}
}

func (x *ListLuckyGiftDrawsResponse) GetDraws() []*LuckyGiftDrawResult {
	if x != nil {
		return x.Draws
	}
	return nil
}

func (x *ListLuckyGiftDrawsResponse) GetTotal() int64 {
	if x != nil {
		return x.Total
	}
	return 0
}

type LuckyGiftDrawSummary struct {
	state            protoimpl.MessageState `protogen:"open.v1"`
	PoolId           string                 `protobuf:"bytes,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	TotalDraws       int64                  `protobuf:"varint,2,opt,name=total_draws,json=totalDraws,proto3" json:"total_draws,omitempty"`
	UniqueUsers      int64                  `protobuf:"varint,3,opt,name=unique_users,json=uniqueUsers,proto3" json:"unique_users,omitempty"`
	UniqueRooms      int64                  `protobuf:"varint,4,opt,name=unique_rooms,json=uniqueRooms,proto3" json:"unique_rooms,omitempty"`
	TotalSpentCoins  int64                  `protobuf:"varint,5,opt,name=total_spent_coins,json=totalSpentCoins,proto3" json:"total_spent_coins,omitempty"`
	TotalRewardCoins int64                  `protobuf:"varint,6,opt,name=total_reward_coins,json=totalRewardCoins,proto3" json:"total_reward_coins,omitempty"`
	BaseRewardCoins  int64                  `protobuf:"varint,7,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"`
	ActualRtpPpm     int64                  `protobuf:"varint,8,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"`
	PendingDraws     int64                  `protobuf:"varint,9,opt,name=pending_draws,json=pendingDraws,proto3" json:"pending_draws,omitempty"`
	GrantedDraws     int64                  `protobuf:"varint,10,opt,name=granted_draws,json=grantedDraws,proto3" json:"granted_draws,omitempty"`
	FailedDraws      int64                  `protobuf:"varint,11,opt,name=failed_draws,json=failedDraws,proto3" json:"failed_draws,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *LuckyGiftDrawSummary) Reset() {
	*x = LuckyGiftDrawSummary{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[26]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftDrawSummary) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftDrawSummary) ProtoMessage() {}

func (x *LuckyGiftDrawSummary) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[26]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftDrawSummary.ProtoReflect.Descriptor instead.
func (*LuckyGiftDrawSummary) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{26}
}

func (x *LuckyGiftDrawSummary) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftDrawSummary) GetTotalDraws() int64 {
	if x != nil {
		return x.TotalDraws
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetUniqueUsers() int64 {
	if x != nil {
		return x.UniqueUsers
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetUniqueRooms() int64 {
	if x != nil {
		return x.UniqueRooms
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetTotalSpentCoins() int64 {
	if x != nil {
		return x.TotalSpentCoins
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetTotalRewardCoins() int64 {
	if x != nil {
		return x.TotalRewardCoins
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetBaseRewardCoins() int64 {
	if x != nil {
		return x.BaseRewardCoins
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetActualRtpPpm() int64 {
	if x != nil {
		return x.ActualRtpPpm
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetPendingDraws() int64 {
	if x != nil {
		return x.PendingDraws
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetGrantedDraws() int64 {
	if x != nil {
		return x.GrantedDraws
	}
	return 0
}

func (x *LuckyGiftDrawSummary) GetFailedDraws() int64 {
	if x != nil {
		return x.FailedDraws
	}
	return 0
}

type LuckyGiftPoolBalance struct {
	state             protoimpl.MessageState `protogen:"open.v1"`
	AppCode           string                 `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	PoolId            string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	Balance           int64                  `protobuf:"varint,3,opt,name=balance,proto3" json:"balance,omitempty"`
	ReserveFloor      int64                  `protobuf:"varint,4,opt,name=reserve_floor,json=reserveFloor,proto3" json:"reserve_floor,omitempty"`
	AvailableBalance  int64                  `protobuf:"varint,5,opt,name=available_balance,json=availableBalance,proto3" json:"available_balance,omitempty"`
	TotalIn           int64                  `protobuf:"varint,6,opt,name=total_in,json=totalIn,proto3" json:"total_in,omitempty"`
	TotalOut          int64                  `protobuf:"varint,7,opt,name=total_out,json=totalOut,proto3" json:"total_out,omitempty"`
	Materialized      bool                   `protobuf:"varint,8,opt,name=materialized,proto3" json:"materialized,omitempty"`
	UpdatedAtMs       int64                  `protobuf:"varint,9,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"`
	StrategyVersion   string                 `protobuf:"bytes,10,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	ManualCreditTotal int64                  `protobuf:"varint,11,opt,name=manual_credit_total,json=manualCreditTotal,proto3" json:"manual_credit_total,omitempty"`
	ManualDebitTotal  int64                  `protobuf:"varint,12,opt,name=manual_debit_total,json=manualDebitTotal,proto3" json:"manual_debit_total,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *LuckyGiftPoolBalance) Reset() {
	*x = LuckyGiftPoolBalance{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[27]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftPoolBalance) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftPoolBalance) ProtoMessage() {}

func (x *LuckyGiftPoolBalance) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[27]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftPoolBalance.ProtoReflect.Descriptor instead.
func (*LuckyGiftPoolBalance) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{27}
}

func (x *LuckyGiftPoolBalance) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *LuckyGiftPoolBalance) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftPoolBalance) GetBalance() int64 {
	if x != nil {
		return x.Balance
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetReserveFloor() int64 {
	if x != nil {
		return x.ReserveFloor
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetAvailableBalance() int64 {
	if x != nil {
		return x.AvailableBalance
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetTotalIn() int64 {
	if x != nil {
		return x.TotalIn
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetTotalOut() int64 {
	if x != nil {
		return x.TotalOut
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetMaterialized() bool {
	if x != nil {
		return x.Materialized
	}
	return false
}

func (x *LuckyGiftPoolBalance) GetUpdatedAtMs() int64 {
	if x != nil {
		return x.UpdatedAtMs
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *LuckyGiftPoolBalance) GetManualCreditTotal() int64 {
	if x != nil {
		return x.ManualCreditTotal
	}
	return 0
}

func (x *LuckyGiftPoolBalance) GetManualDebitTotal() int64 {
	if x != nil {
		return x.ManualDebitTotal
	}
	return 0
}

type GetLuckyGiftDrawSummaryRequest struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Meta           *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	GiftId         string                 `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"`
	UserId         int64                  `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	RoomId         string                 `protobuf:"bytes,4,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
	Status         string                 `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
	PoolId         string                 `protobuf:"bytes,6,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	ExternalUserId string                 `protobuf:"bytes,8,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	ExternalOnly   bool                   `protobuf:"varint,9,opt,name=external_only,json=externalOnly,proto3" json:"external_only,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *GetLuckyGiftDrawSummaryRequest) Reset() {
	*x = GetLuckyGiftDrawSummaryRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[28]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLuckyGiftDrawSummaryRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLuckyGiftDrawSummaryRequest) ProtoMessage() {}

func (x *GetLuckyGiftDrawSummaryRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[28]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLuckyGiftDrawSummaryRequest.ProtoReflect.Descriptor instead.
func (*GetLuckyGiftDrawSummaryRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{28}
}

func (x *GetLuckyGiftDrawSummaryRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *GetLuckyGiftDrawSummaryRequest) GetGiftId() string {
	if x != nil {
		return x.GiftId
	}
	return ""
}

func (x *GetLuckyGiftDrawSummaryRequest) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *GetLuckyGiftDrawSummaryRequest) GetRoomId() string {
	if x != nil {
		return x.RoomId
	}
	return ""
}

func (x *GetLuckyGiftDrawSummaryRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *GetLuckyGiftDrawSummaryRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *GetLuckyGiftDrawSummaryRequest) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *GetLuckyGiftDrawSummaryRequest) GetExternalOnly() bool {
	if x != nil {
		return x.ExternalOnly
	}
	return false
}

type GetLuckyGiftDrawSummaryResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Summary       *LuckyGiftDrawSummary  `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetLuckyGiftDrawSummaryResponse) Reset() {
	*x = GetLuckyGiftDrawSummaryResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[29]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLuckyGiftDrawSummaryResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLuckyGiftDrawSummaryResponse) ProtoMessage() {}

func (x *GetLuckyGiftDrawSummaryResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[29]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLuckyGiftDrawSummaryResponse.ProtoReflect.Descriptor instead.
func (*GetLuckyGiftDrawSummaryResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{29}
}

func (x *GetLuckyGiftDrawSummaryResponse) GetSummary() *LuckyGiftDrawSummary {
	if x != nil {
		return x.Summary
	}
	return nil
}

type ListLuckyGiftPoolBalancesRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Meta            *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId          string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	StrategyVersion string                 `protobuf:"bytes,3,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *ListLuckyGiftPoolBalancesRequest) Reset() {
	*x = ListLuckyGiftPoolBalancesRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftPoolBalancesRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftPoolBalancesRequest) ProtoMessage() {}

func (x *ListLuckyGiftPoolBalancesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[30]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftPoolBalancesRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftPoolBalancesRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{30}
}

func (x *ListLuckyGiftPoolBalancesRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ListLuckyGiftPoolBalancesRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *ListLuckyGiftPoolBalancesRequest) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

type ListLuckyGiftPoolBalancesResponse struct {
	state         protoimpl.MessageState  `protogen:"open.v1"`
	Pools         []*LuckyGiftPoolBalance `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftPoolBalancesResponse) Reset() {
	*x = ListLuckyGiftPoolBalancesResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[31]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftPoolBalancesResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftPoolBalancesResponse) ProtoMessage() {}

func (x *ListLuckyGiftPoolBalancesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[31]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftPoolBalancesResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftPoolBalancesResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{31}
}

func (x *ListLuckyGiftPoolBalancesResponse) GetPools() []*LuckyGiftPoolBalance {
	if x != nil {
		return x.Pools
	}
	return nil
}

// LuckyGiftExperimentOverride 把单个用户强制固定到某个实验组，用于放量前的白名单验证。
// user_key：内部用户为十进制 user_id 字符串；外部用户为 "ext:" + external_user_id。
type LuckyGiftExperimentOverride struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	UserKey       string                 `protobuf:"bytes,1,opt,name=user_key,json=userKey,proto3" json:"user_key,omitempty"`
	Arm           string                 `protobuf:"bytes,2,opt,name=arm,proto3" json:"arm,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftExperimentOverride) Reset() {
	*x = LuckyGiftExperimentOverride{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[32]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftExperimentOverride) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftExperimentOverride) ProtoMessage() {}

func (x *LuckyGiftExperimentOverride) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[32]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftExperimentOverride.ProtoReflect.Descriptor instead.
func (*LuckyGiftExperimentOverride) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{32}
}

func (x *LuckyGiftExperimentOverride) GetUserKey() string {
	if x != nil {
		return x.UserKey
	}
	return ""
}

func (x *LuckyGiftExperimentOverride) GetArm() string {
	if x != nil {
		return x.Arm
	}
	return ""
}

// LuckyGiftExperimentArmStats 是实验开始以来单组的抽奖聚合，由 lucky_draw_records 按 rule_version 现算，非物化口径。
type LuckyGiftExperimentArmStats struct {
	state            protoimpl.MessageState `protogen:"open.v1"`
	Arm              string                 `protobuf:"bytes,1,opt,name=arm,proto3" json:"arm,omitempty"`
	RuleVersion      int64                  `protobuf:"varint,2,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	StrategyVersion  string                 `protobuf:"bytes,3,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	TotalDraws       int64                  `protobuf:"varint,4,opt,name=total_draws,json=totalDraws,proto3" json:"total_draws,omitempty"`
	UniqueUsers      int64                  `protobuf:"varint,5,opt,name=unique_users,json=uniqueUsers,proto3" json:"unique_users,omitempty"`
	TotalSpentCoins  int64                  `protobuf:"varint,6,opt,name=total_spent_coins,json=totalSpentCoins,proto3" json:"total_spent_coins,omitempty"`
	TotalRewardCoins int64                  `protobuf:"varint,7,opt,name=total_reward_coins,json=totalRewardCoins,proto3" json:"total_reward_coins,omitempty"`
	ActualRtpPpm     int64                  `protobuf:"varint,8,opt,name=actual_rtp_ppm,json=actualRtpPpm,proto3" json:"actual_rtp_ppm,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *LuckyGiftExperimentArmStats) Reset() {
	*x = LuckyGiftExperimentArmStats{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[33]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftExperimentArmStats) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftExperimentArmStats) ProtoMessage() {}

func (x *LuckyGiftExperimentArmStats) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[33]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftExperimentArmStats.ProtoReflect.Descriptor instead.
func (*LuckyGiftExperimentArmStats) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{33}
}

func (x *LuckyGiftExperimentArmStats) GetArm() string {
	if x != nil {
		return x.Arm
	}
	return ""
}

func (x *LuckyGiftExperimentArmStats) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *LuckyGiftExperimentArmStats) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *LuckyGiftExperimentArmStats) GetTotalDraws() int64 {
	if x != nil {
		return x.TotalDraws
	}
	return 0
}

func (x *LuckyGiftExperimentArmStats) GetUniqueUsers() int64 {
	if x != nil {
		return x.UniqueUsers
	}
	return 0
}

func (x *LuckyGiftExperimentArmStats) GetTotalSpentCoins() int64 {
	if x != nil {
		return x.TotalSpentCoins
	}
	return 0
}

func (x *LuckyGiftExperimentArmStats) GetTotalRewardCoins() int64 {
	if x != nil {
		return x.TotalRewardCoins
	}
	return 0
}

func (x *LuckyGiftExperimentArmStats) GetActualRtpPpm() int64 {
	if x != nil {
		return x.ActualRtpPpm
	}
	return 0
}

// LuckyGiftExperiment 是单奖池 AB 实验事实：两组各钉住一个不可变 rule_version，
// 运行时按 bucket_salt+user 哈希分流；同一奖池同时最多一个未完成实验。
type LuckyGiftExperiment struct {
	state                protoimpl.MessageState `protogen:"open.v1"`
	AppCode              string                 `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	PoolId               string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	ExperimentId         string                 `protobuf:"bytes,3,opt,name=experiment_id,json=experimentId,proto3" json:"experiment_id,omitempty"`
	Name                 string                 `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
	ControlRuleVersion   int64                  `protobuf:"varint,5,opt,name=control_rule_version,json=controlRuleVersion,proto3" json:"control_rule_version,omitempty"`
	TreatmentRuleVersion int64                  `protobuf:"varint,6,opt,name=treatment_rule_version,json=treatmentRuleVersion,proto3" json:"treatment_rule_version,omitempty"`
	// treatment 组流量比例（ppm，0..1000000）；0 表示只有白名单 override 能进入 treatment。
	TreatmentTrafficPpm int64  `protobuf:"varint,7,opt,name=treatment_traffic_ppm,json=treatmentTrafficPpm,proto3" json:"treatment_traffic_ppm,omitempty"`
	BucketSalt          string `protobuf:"bytes,8,opt,name=bucket_salt,json=bucketSalt,proto3" json:"bucket_salt,omitempty"`
	// running / paused / completed；paused 时全部流量（含白名单）回落 control。
	Status            string `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"`
	WinnerArm         string `protobuf:"bytes,10,opt,name=winner_arm,json=winnerArm,proto3" json:"winner_arm,omitempty"`
	WinnerRuleVersion int64  `protobuf:"varint,11,opt,name=winner_rule_version,json=winnerRuleVersion,proto3" json:"winner_rule_version,omitempty"`
	// 结束实验时把获胜配置重发布成的新最新版本，全量流量由它承接。
	FinalRuleVersion int64                          `protobuf:"varint,12,opt,name=final_rule_version,json=finalRuleVersion,proto3" json:"final_rule_version,omitempty"`
	CreatedByAdminId int64                          `protobuf:"varint,13,opt,name=created_by_admin_id,json=createdByAdminId,proto3" json:"created_by_admin_id,omitempty"`
	StartedAtMs      int64                          `protobuf:"varint,14,opt,name=started_at_ms,json=startedAtMs,proto3" json:"started_at_ms,omitempty"`
	EndedAtMs        int64                          `protobuf:"varint,15,opt,name=ended_at_ms,json=endedAtMs,proto3" json:"ended_at_ms,omitempty"`
	UpdatedAtMs      int64                          `protobuf:"varint,16,opt,name=updated_at_ms,json=updatedAtMs,proto3" json:"updated_at_ms,omitempty"`
	Overrides        []*LuckyGiftExperimentOverride `protobuf:"bytes,17,rep,name=overrides,proto3" json:"overrides,omitempty"`
	ArmStats         []*LuckyGiftExperimentArmStats `protobuf:"bytes,18,rep,name=arm_stats,json=armStats,proto3" json:"arm_stats,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *LuckyGiftExperiment) Reset() {
	*x = LuckyGiftExperiment{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[34]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftExperiment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftExperiment) ProtoMessage() {}

func (x *LuckyGiftExperiment) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[34]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftExperiment.ProtoReflect.Descriptor instead.
func (*LuckyGiftExperiment) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{34}
}

func (x *LuckyGiftExperiment) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *LuckyGiftExperiment) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftExperiment) GetExperimentId() string {
	if x != nil {
		return x.ExperimentId
	}
	return ""
}

func (x *LuckyGiftExperiment) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *LuckyGiftExperiment) GetControlRuleVersion() int64 {
	if x != nil {
		return x.ControlRuleVersion
	}
	return 0
}

func (x *LuckyGiftExperiment) GetTreatmentRuleVersion() int64 {
	if x != nil {
		return x.TreatmentRuleVersion
	}
	return 0
}

func (x *LuckyGiftExperiment) GetTreatmentTrafficPpm() int64 {
	if x != nil {
		return x.TreatmentTrafficPpm
	}
	return 0
}

func (x *LuckyGiftExperiment) GetBucketSalt() string {
	if x != nil {
		return x.BucketSalt
	}
	return ""
}

func (x *LuckyGiftExperiment) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *LuckyGiftExperiment) GetWinnerArm() string {
	if x != nil {
		return x.WinnerArm
	}
	return ""
}

func (x *LuckyGiftExperiment) GetWinnerRuleVersion() int64 {
	if x != nil {
		return x.WinnerRuleVersion
	}
	return 0
}

func (x *LuckyGiftExperiment) GetFinalRuleVersion() int64 {
	if x != nil {
		return x.FinalRuleVersion
	}
	return 0
}

func (x *LuckyGiftExperiment) GetCreatedByAdminId() int64 {
	if x != nil {
		return x.CreatedByAdminId
	}
	return 0
}

func (x *LuckyGiftExperiment) GetStartedAtMs() int64 {
	if x != nil {
		return x.StartedAtMs
	}
	return 0
}

func (x *LuckyGiftExperiment) GetEndedAtMs() int64 {
	if x != nil {
		return x.EndedAtMs
	}
	return 0
}

func (x *LuckyGiftExperiment) GetUpdatedAtMs() int64 {
	if x != nil {
		return x.UpdatedAtMs
	}
	return 0
}

func (x *LuckyGiftExperiment) GetOverrides() []*LuckyGiftExperimentOverride {
	if x != nil {
		return x.Overrides
	}
	return nil
}

func (x *LuckyGiftExperiment) GetArmStats() []*LuckyGiftExperimentArmStats {
	if x != nil {
		return x.ArmStats
	}
	return nil
}

// CreateLuckyGiftExperimentRequest 在一个事务里发布 treatment 新版本并登记实验，
// 避免"先发布后建实验"窗口期内新版本被最新版本语义全量放开。
// control 组自动钉住当前最新已启用版本。
type CreateLuckyGiftExperimentRequest struct {
	state               protoimpl.MessageState         `protogen:"open.v1"`
	Meta                *RequestMeta                   `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	Name                string                         `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	TreatmentConfig     *LuckyGiftRuleConfig           `protobuf:"bytes,3,opt,name=treatment_config,json=treatmentConfig,proto3" json:"treatment_config,omitempty"`
	TreatmentTrafficPpm int64                          `protobuf:"varint,4,opt,name=treatment_traffic_ppm,json=treatmentTrafficPpm,proto3" json:"treatment_traffic_ppm,omitempty"`
	OperatorAdminId     int64                          `protobuf:"varint,5,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	Overrides           []*LuckyGiftExperimentOverride `protobuf:"bytes,6,rep,name=overrides,proto3" json:"overrides,omitempty"`
	unknownFields       protoimpl.UnknownFields
	sizeCache           protoimpl.SizeCache
}

func (x *CreateLuckyGiftExperimentRequest) Reset() {
	*x = CreateLuckyGiftExperimentRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[35]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CreateLuckyGiftExperimentRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateLuckyGiftExperimentRequest) ProtoMessage() {}

func (x *CreateLuckyGiftExperimentRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[35]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CreateLuckyGiftExperimentRequest.ProtoReflect.Descriptor instead.
func (*CreateLuckyGiftExperimentRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{35}
}

func (x *CreateLuckyGiftExperimentRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *CreateLuckyGiftExperimentRequest) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CreateLuckyGiftExperimentRequest) GetTreatmentConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.TreatmentConfig
	}
	return nil
}

func (x *CreateLuckyGiftExperimentRequest) GetTreatmentTrafficPpm() int64 {
	if x != nil {
		return x.TreatmentTrafficPpm
	}
	return 0
}

func (x *CreateLuckyGiftExperimentRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

func (x *CreateLuckyGiftExperimentRequest) GetOverrides() []*LuckyGiftExperimentOverride {
	if x != nil {
		return x.Overrides
	}
	return nil
}

type CreateLuckyGiftExperimentResponse struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Experiment      *LuckyGiftExperiment   `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
	TreatmentConfig *LuckyGiftRuleConfig   `protobuf:"bytes,2,opt,name=treatment_config,json=treatmentConfig,proto3" json:"treatment_config,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *CreateLuckyGiftExperimentResponse) Reset() {
	*x = CreateLuckyGiftExperimentResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[36]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CreateLuckyGiftExperimentResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateLuckyGiftExperimentResponse) ProtoMessage() {}

func (x *CreateLuckyGiftExperimentResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[36]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CreateLuckyGiftExperimentResponse.ProtoReflect.Descriptor instead.
func (*CreateLuckyGiftExperimentResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{36}
}

func (x *CreateLuckyGiftExperimentResponse) GetExperiment() *LuckyGiftExperiment {
	if x != nil {
		return x.Experiment
	}
	return nil
}

func (x *CreateLuckyGiftExperimentResponse) GetTreatmentConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.TreatmentConfig
	}
	return nil
}

type ListLuckyGiftExperimentsRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Meta          *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId        string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	Status        string                 `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"`
	WithStats     bool                   `protobuf:"varint,4,opt,name=with_stats,json=withStats,proto3" json:"with_stats,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftExperimentsRequest) Reset() {
	*x = ListLuckyGiftExperimentsRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[37]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftExperimentsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftExperimentsRequest) ProtoMessage() {}

func (x *ListLuckyGiftExperimentsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[37]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftExperimentsRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftExperimentsRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{37}
}

func (x *ListLuckyGiftExperimentsRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ListLuckyGiftExperimentsRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *ListLuckyGiftExperimentsRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *ListLuckyGiftExperimentsRequest) GetWithStats() bool {
	if x != nil {
		return x.WithStats
	}
	return false
}

type ListLuckyGiftExperimentsResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Experiments   []*LuckyGiftExperiment `protobuf:"bytes,1,rep,name=experiments,proto3" json:"experiments,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftExperimentsResponse) Reset() {
	*x = ListLuckyGiftExperimentsResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[38]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftExperimentsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftExperimentsResponse) ProtoMessage() {}

func (x *ListLuckyGiftExperimentsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[38]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftExperimentsResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftExperimentsResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{38}
}

func (x *ListLuckyGiftExperimentsResponse) GetExperiments() []*LuckyGiftExperiment {
	if x != nil {
		return x.Experiments
	}
	return nil
}

// UpdateLuckyGiftExperimentRequest 调整放量或暂停/恢复。
// treatment_traffic_ppm 使用显式存在性语义：未设置表示不修改流量，避免 proto3 缺省 0 被误解释成"放量清零"；
// status 为空表示不修改状态。
type UpdateLuckyGiftExperimentRequest struct {
	state               protoimpl.MessageState `protogen:"open.v1"`
	Meta                *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	ExperimentId        string                 `protobuf:"bytes,2,opt,name=experiment_id,json=experimentId,proto3" json:"experiment_id,omitempty"`
	TreatmentTrafficPpm *int64                 `protobuf:"varint,3,opt,name=treatment_traffic_ppm,json=treatmentTrafficPpm,proto3,oneof" json:"treatment_traffic_ppm,omitempty"`
	Status              string                 `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"`
	OperatorAdminId     int64                  `protobuf:"varint,5,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	unknownFields       protoimpl.UnknownFields
	sizeCache           protoimpl.SizeCache
}

func (x *UpdateLuckyGiftExperimentRequest) Reset() {
	*x = UpdateLuckyGiftExperimentRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[39]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpdateLuckyGiftExperimentRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateLuckyGiftExperimentRequest) ProtoMessage() {}

func (x *UpdateLuckyGiftExperimentRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[39]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateLuckyGiftExperimentRequest.ProtoReflect.Descriptor instead.
func (*UpdateLuckyGiftExperimentRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{39}
}

func (x *UpdateLuckyGiftExperimentRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *UpdateLuckyGiftExperimentRequest) GetExperimentId() string {
	if x != nil {
		return x.ExperimentId
	}
	return ""
}

func (x *UpdateLuckyGiftExperimentRequest) GetTreatmentTrafficPpm() int64 {
	if x != nil && x.TreatmentTrafficPpm != nil {
		return *x.TreatmentTrafficPpm
	}
	return 0
}

func (x *UpdateLuckyGiftExperimentRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *UpdateLuckyGiftExperimentRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

type UpdateLuckyGiftExperimentResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Experiment    *LuckyGiftExperiment   `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UpdateLuckyGiftExperimentResponse) Reset() {
	*x = UpdateLuckyGiftExperimentResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[40]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UpdateLuckyGiftExperimentResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateLuckyGiftExperimentResponse) ProtoMessage() {}

func (x *UpdateLuckyGiftExperimentResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[40]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UpdateLuckyGiftExperimentResponse.ProtoReflect.Descriptor instead.
func (*UpdateLuckyGiftExperimentResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{40}
}

func (x *UpdateLuckyGiftExperimentResponse) GetExperiment() *LuckyGiftExperiment {
	if x != nil {
		return x.Experiment
	}
	return nil
}

type SetLuckyGiftExperimentOverridesRequest struct {
	state           protoimpl.MessageState         `protogen:"open.v1"`
	Meta            *RequestMeta                   `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	ExperimentId    string                         `protobuf:"bytes,2,opt,name=experiment_id,json=experimentId,proto3" json:"experiment_id,omitempty"`
	Upserts         []*LuckyGiftExperimentOverride `protobuf:"bytes,3,rep,name=upserts,proto3" json:"upserts,omitempty"`
	Removes         []string                       `protobuf:"bytes,4,rep,name=removes,proto3" json:"removes,omitempty"`
	OperatorAdminId int64                          `protobuf:"varint,5,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *SetLuckyGiftExperimentOverridesRequest) Reset() {
	*x = SetLuckyGiftExperimentOverridesRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[41]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SetLuckyGiftExperimentOverridesRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetLuckyGiftExperimentOverridesRequest) ProtoMessage() {}

func (x *SetLuckyGiftExperimentOverridesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[41]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SetLuckyGiftExperimentOverridesRequest.ProtoReflect.Descriptor instead.
func (*SetLuckyGiftExperimentOverridesRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{41}
}

func (x *SetLuckyGiftExperimentOverridesRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *SetLuckyGiftExperimentOverridesRequest) GetExperimentId() string {
	if x != nil {
		return x.ExperimentId
	}
	return ""
}

func (x *SetLuckyGiftExperimentOverridesRequest) GetUpserts() []*LuckyGiftExperimentOverride {
	if x != nil {
		return x.Upserts
	}
	return nil
}

func (x *SetLuckyGiftExperimentOverridesRequest) GetRemoves() []string {
	if x != nil {
		return x.Removes
	}
	return nil
}

func (x *SetLuckyGiftExperimentOverridesRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

type SetLuckyGiftExperimentOverridesResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Experiment    *LuckyGiftExperiment   `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *SetLuckyGiftExperimentOverridesResponse) Reset() {
	*x = SetLuckyGiftExperimentOverridesResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[42]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SetLuckyGiftExperimentOverridesResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetLuckyGiftExperimentOverridesResponse) ProtoMessage() {}

func (x *SetLuckyGiftExperimentOverridesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[42]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SetLuckyGiftExperimentOverridesResponse.ProtoReflect.Descriptor instead.
func (*SetLuckyGiftExperimentOverridesResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{42}
}

func (x *SetLuckyGiftExperimentOverridesResponse) GetExperiment() *LuckyGiftExperiment {
	if x != nil {
		return x.Experiment
	}
	return nil
}

// EndLuckyGiftExperimentRequest 结束实验：把 winner_arm 钉住的配置快照重发布为新的最新版本，
// 同事务内完成实验收口，保证结束瞬间的版本收敛没有中间态。
type EndLuckyGiftExperimentRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Meta            *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	ExperimentId    string                 `protobuf:"bytes,2,opt,name=experiment_id,json=experimentId,proto3" json:"experiment_id,omitempty"`
	WinnerArm       string                 `protobuf:"bytes,3,opt,name=winner_arm,json=winnerArm,proto3" json:"winner_arm,omitempty"`
	OperatorAdminId int64                  `protobuf:"varint,4,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *EndLuckyGiftExperimentRequest) Reset() {
	*x = EndLuckyGiftExperimentRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[43]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *EndLuckyGiftExperimentRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*EndLuckyGiftExperimentRequest) ProtoMessage() {}

func (x *EndLuckyGiftExperimentRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[43]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use EndLuckyGiftExperimentRequest.ProtoReflect.Descriptor instead.
func (*EndLuckyGiftExperimentRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{43}
}

func (x *EndLuckyGiftExperimentRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *EndLuckyGiftExperimentRequest) GetExperimentId() string {
	if x != nil {
		return x.ExperimentId
	}
	return ""
}

func (x *EndLuckyGiftExperimentRequest) GetWinnerArm() string {
	if x != nil {
		return x.WinnerArm
	}
	return ""
}

func (x *EndLuckyGiftExperimentRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

type EndLuckyGiftExperimentResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Experiment    *LuckyGiftExperiment   `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
	FinalConfig   *LuckyGiftRuleConfig   `protobuf:"bytes,2,opt,name=final_config,json=finalConfig,proto3" json:"final_config,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EndLuckyGiftExperimentResponse) Reset() {
	*x = EndLuckyGiftExperimentResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[44]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *EndLuckyGiftExperimentResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*EndLuckyGiftExperimentResponse) ProtoMessage() {}

func (x *EndLuckyGiftExperimentResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[44]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use EndLuckyGiftExperimentResponse.ProtoReflect.Descriptor instead.
func (*EndLuckyGiftExperimentResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{44}
}

func (x *EndLuckyGiftExperimentResponse) GetExperiment() *LuckyGiftExperiment {
	if x != nil {
		return x.Experiment
	}
	return nil
}

func (x *EndLuckyGiftExperimentResponse) GetFinalConfig() *LuckyGiftRuleConfig {
	if x != nil {
		return x.FinalConfig
	}
	return nil
}

// LuckyGiftHit 只返回批量逐份开奖中实际中奖的精简位置，不复制全部审计明细。
// 声明追加在文件尾以保持既有 protobuf message index 稳定。
type LuckyGiftHit struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	GiftIndex      int32                  `protobuf:"varint,1,opt,name=gift_index,json=giftIndex,proto3" json:"gift_index,omitempty"`
	DrawId         string                 `protobuf:"bytes,2,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"`
	SelectedTierId string                 `protobuf:"bytes,3,opt,name=selected_tier_id,json=selectedTierId,proto3" json:"selected_tier_id,omitempty"`
	MultiplierPpm  int64                  `protobuf:"varint,4,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"`
	RewardCoins    int64                  `protobuf:"varint,5,opt,name=reward_coins,json=rewardCoins,proto3" json:"reward_coins,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *LuckyGiftHit) Reset() {
	*x = LuckyGiftHit{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[45]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftHit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftHit) ProtoMessage() {}

func (x *LuckyGiftHit) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[45]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftHit.ProtoReflect.Descriptor instead.
func (*LuckyGiftHit) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{45}
}

func (x *LuckyGiftHit) GetGiftIndex() int32 {
	if x != nil {
		return x.GiftIndex
	}
	return 0
}

func (x *LuckyGiftHit) GetDrawId() string {
	if x != nil {
		return x.DrawId
	}
	return ""
}

func (x *LuckyGiftHit) GetSelectedTierId() string {
	if x != nil {
		return x.SelectedTierId
	}
	return ""
}

func (x *LuckyGiftHit) GetMultiplierPpm() int64 {
	if x != nil {
		return x.MultiplierPpm
	}
	return 0
}

func (x *LuckyGiftHit) GetRewardCoins() int64 {
	if x != nil {
		return x.RewardCoins
	}
	return 0
}

// 调账消息也只追加在文件尾，保持所有既有 protobuf message index 稳定。
// adjustment_id 是业务幂等键；RequestMeta.request_id 只做链路追踪，不能替代资金幂等语义。
type AdjustLuckyGiftPoolBalanceRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Meta            *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId          string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	StrategyVersion string                 `protobuf:"bytes,3,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	AdjustmentId    string                 `protobuf:"bytes,4,opt,name=adjustment_id,json=adjustmentId,proto3" json:"adjustment_id,omitempty"`
	Direction       string                 `protobuf:"bytes,5,opt,name=direction,proto3" json:"direction,omitempty"`
	AmountCoins     int64                  `protobuf:"varint,6,opt,name=amount_coins,json=amountCoins,proto3" json:"amount_coins,omitempty"`
	Reason          string                 `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"`
	OperatorAdminId int64                  `protobuf:"varint,8,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *AdjustLuckyGiftPoolBalanceRequest) Reset() {
	*x = AdjustLuckyGiftPoolBalanceRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[46]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AdjustLuckyGiftPoolBalanceRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AdjustLuckyGiftPoolBalanceRequest) ProtoMessage() {}

func (x *AdjustLuckyGiftPoolBalanceRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[46]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AdjustLuckyGiftPoolBalanceRequest.ProtoReflect.Descriptor instead.
func (*AdjustLuckyGiftPoolBalanceRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{46}
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetAdjustmentId() string {
	if x != nil {
		return x.AdjustmentId
	}
	return ""
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetDirection() string {
	if x != nil {
		return x.Direction
	}
	return ""
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetAmountCoins() int64 {
	if x != nil {
		return x.AmountCoins
	}
	return 0
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetReason() string {
	if x != nil {
		return x.Reason
	}
	return ""
}

func (x *AdjustLuckyGiftPoolBalanceRequest) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

type LuckyGiftPoolAdjustment struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	AdjustmentId    string                 `protobuf:"bytes,1,opt,name=adjustment_id,json=adjustmentId,proto3" json:"adjustment_id,omitempty"`
	AppCode         string                 `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	PoolId          string                 `protobuf:"bytes,3,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	StrategyVersion string                 `protobuf:"bytes,4,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	Direction       string                 `protobuf:"bytes,5,opt,name=direction,proto3" json:"direction,omitempty"`
	AmountCoins     int64                  `protobuf:"varint,6,opt,name=amount_coins,json=amountCoins,proto3" json:"amount_coins,omitempty"`
	Reason          string                 `protobuf:"bytes,7,opt,name=reason,proto3" json:"reason,omitempty"`
	OperatorAdminId int64                  `protobuf:"varint,8,opt,name=operator_admin_id,json=operatorAdminId,proto3" json:"operator_admin_id,omitempty"`
	BalanceBefore   int64                  `protobuf:"varint,9,opt,name=balance_before,json=balanceBefore,proto3" json:"balance_before,omitempty"`
	BalanceAfter    int64                  `protobuf:"varint,10,opt,name=balance_after,json=balanceAfter,proto3" json:"balance_after,omitempty"`
	CreatedAtMs     int64                  `protobuf:"varint,11,opt,name=created_at_ms,json=createdAtMs,proto3" json:"created_at_ms,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *LuckyGiftPoolAdjustment) Reset() {
	*x = LuckyGiftPoolAdjustment{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[47]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftPoolAdjustment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftPoolAdjustment) ProtoMessage() {}

func (x *LuckyGiftPoolAdjustment) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[47]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftPoolAdjustment.ProtoReflect.Descriptor instead.
func (*LuckyGiftPoolAdjustment) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{47}
}

func (x *LuckyGiftPoolAdjustment) GetAdjustmentId() string {
	if x != nil {
		return x.AdjustmentId
	}
	return ""
}

func (x *LuckyGiftPoolAdjustment) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *LuckyGiftPoolAdjustment) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftPoolAdjustment) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *LuckyGiftPoolAdjustment) GetDirection() string {
	if x != nil {
		return x.Direction
	}
	return ""
}

func (x *LuckyGiftPoolAdjustment) GetAmountCoins() int64 {
	if x != nil {
		return x.AmountCoins
	}
	return 0
}

func (x *LuckyGiftPoolAdjustment) GetReason() string {
	if x != nil {
		return x.Reason
	}
	return ""
}

func (x *LuckyGiftPoolAdjustment) GetOperatorAdminId() int64 {
	if x != nil {
		return x.OperatorAdminId
	}
	return 0
}

func (x *LuckyGiftPoolAdjustment) GetBalanceBefore() int64 {
	if x != nil {
		return x.BalanceBefore
	}
	return 0
}

func (x *LuckyGiftPoolAdjustment) GetBalanceAfter() int64 {
	if x != nil {
		return x.BalanceAfter
	}
	return 0
}

func (x *LuckyGiftPoolAdjustment) GetCreatedAtMs() int64 {
	if x != nil {
		return x.CreatedAtMs
	}
	return 0
}

type AdjustLuckyGiftPoolBalanceResponse struct {
	state            protoimpl.MessageState   `protogen:"open.v1"`
	Adjustment       *LuckyGiftPoolAdjustment `protobuf:"bytes,1,opt,name=adjustment,proto3" json:"adjustment,omitempty"`
	Pool             *LuckyGiftPoolBalance    `protobuf:"bytes,2,opt,name=pool,proto3" json:"pool,omitempty"`
	IdempotentReplay bool                     `protobuf:"varint,3,opt,name=idempotent_replay,json=idempotentReplay,proto3" json:"idempotent_replay,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *AdjustLuckyGiftPoolBalanceResponse) Reset() {
	*x = AdjustLuckyGiftPoolBalanceResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[48]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *AdjustLuckyGiftPoolBalanceResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AdjustLuckyGiftPoolBalanceResponse) ProtoMessage() {}

func (x *AdjustLuckyGiftPoolBalanceResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[48]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AdjustLuckyGiftPoolBalanceResponse.ProtoReflect.Descriptor instead.
func (*AdjustLuckyGiftPoolBalanceResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{48}
}

func (x *AdjustLuckyGiftPoolBalanceResponse) GetAdjustment() *LuckyGiftPoolAdjustment {
	if x != nil {
		return x.Adjustment
	}
	return nil
}

func (x *AdjustLuckyGiftPoolBalanceResponse) GetPool() *LuckyGiftPoolBalance {
	if x != nil {
		return x.Pool
	}
	return nil
}

func (x *AdjustLuckyGiftPoolBalanceResponse) GetIdempotentReplay() bool {
	if x != nil {
		return x.IdempotentReplay
	}
	return false
}

// 用户画像协议追加在文件尾，避免改变既有 message index。外部策略哈希只存在于 owner 数据库，
// 本协议永远只下发 external_user_id，防止运营误把不可逆内部键当成外部用户身份。
type LuckyGiftUserProfileWindow struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Draws         int64                  `protobuf:"varint,1,opt,name=draws,proto3" json:"draws,omitempty"`
	WagerCoins    int64                  `protobuf:"varint,2,opt,name=wager_coins,json=wagerCoins,proto3" json:"wager_coins,omitempty"`
	PayoutCoins   int64                  `protobuf:"varint,3,opt,name=payout_coins,json=payoutCoins,proto3" json:"payout_coins,omitempty"`
	NetCoins      int64                  `protobuf:"varint,4,opt,name=net_coins,json=netCoins,proto3" json:"net_coins,omitempty"`
	RtpPpm        int64                  `protobuf:"varint,5,opt,name=rtp_ppm,json=rtpPpm,proto3" json:"rtp_ppm,omitempty"`
	HasRtp        bool                   `protobuf:"varint,6,opt,name=has_rtp,json=hasRtp,proto3" json:"has_rtp,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftUserProfileWindow) Reset() {
	*x = LuckyGiftUserProfileWindow{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[49]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftUserProfileWindow) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftUserProfileWindow) ProtoMessage() {}

func (x *LuckyGiftUserProfileWindow) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[49]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftUserProfileWindow.ProtoReflect.Descriptor instead.
func (*LuckyGiftUserProfileWindow) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{49}
}

func (x *LuckyGiftUserProfileWindow) GetDraws() int64 {
	if x != nil {
		return x.Draws
	}
	return 0
}

func (x *LuckyGiftUserProfileWindow) GetWagerCoins() int64 {
	if x != nil {
		return x.WagerCoins
	}
	return 0
}

func (x *LuckyGiftUserProfileWindow) GetPayoutCoins() int64 {
	if x != nil {
		return x.PayoutCoins
	}
	return 0
}

func (x *LuckyGiftUserProfileWindow) GetNetCoins() int64 {
	if x != nil {
		return x.NetCoins
	}
	return 0
}

func (x *LuckyGiftUserProfileWindow) GetRtpPpm() int64 {
	if x != nil {
		return x.RtpPpm
	}
	return 0
}

func (x *LuckyGiftUserProfileWindow) GetHasRtp() bool {
	if x != nil {
		return x.HasRtp
	}
	return false
}

type LuckyGiftUserProfile struct {
	state                          protoimpl.MessageState      `protogen:"open.v1"`
	AppCode                        string                      `protobuf:"bytes,1,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"`
	PoolId                         string                      `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	IdentityType                   string                      `protobuf:"bytes,3,opt,name=identity_type,json=identityType,proto3" json:"identity_type,omitempty"`
	InternalUserId                 int64                       `protobuf:"varint,4,opt,name=internal_user_id,json=internalUserId,proto3" json:"internal_user_id,omitempty"`
	ExternalUserId                 string                      `protobuf:"bytes,5,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	RuleVersion                    int64                       `protobuf:"varint,6,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	StrategyVersion                string                      `protobuf:"bytes,7,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	Stage                          string                      `protobuf:"bytes,8,opt,name=stage,proto3" json:"stage,omitempty"`
	PaidDraws                      int64                       `protobuf:"varint,9,opt,name=paid_draws,json=paidDraws,proto3" json:"paid_draws,omitempty"`
	EquivalentDraws                int64                       `protobuf:"varint,10,opt,name=equivalent_draws,json=equivalentDraws,proto3" json:"equivalent_draws,omitempty"`
	LossStreak                     int64                       `protobuf:"varint,11,opt,name=loss_streak,json=lossStreak,proto3" json:"loss_streak,omitempty"`
	PendingSpendJackpotTokens      int64                       `protobuf:"varint,12,opt,name=pending_spend_jackpot_tokens,json=pendingSpendJackpotTokens,proto3" json:"pending_spend_jackpot_tokens,omitempty"`
	GuaranteeDrawsRemaining        int64                       `protobuf:"varint,13,opt,name=guarantee_draws_remaining,json=guaranteeDrawsRemaining,proto3" json:"guarantee_draws_remaining,omitempty"`
	DownweightActive               bool                        `protobuf:"varint,14,opt,name=downweight_active,json=downweightActive,proto3" json:"downweight_active,omitempty"`
	DownweightFactorPpm            int64                       `protobuf:"varint,15,opt,name=downweight_factor_ppm,json=downweightFactorPpm,proto3" json:"downweight_factor_ppm,omitempty"`
	OneHour                        *LuckyGiftUserProfileWindow `protobuf:"bytes,16,opt,name=one_hour,json=oneHour,proto3" json:"one_hour,omitempty"`
	TwentyFourHours                *LuckyGiftUserProfileWindow `protobuf:"bytes,17,opt,name=twenty_four_hours,json=twentyFourHours,proto3" json:"twenty_four_hours,omitempty"`
	FortyEightHours                *LuckyGiftUserProfileWindow `protobuf:"bytes,18,opt,name=forty_eight_hours,json=fortyEightHours,proto3" json:"forty_eight_hours,omitempty"`
	Lifetime                       *LuckyGiftUserProfileWindow `protobuf:"bytes,19,opt,name=lifetime,proto3" json:"lifetime,omitempty"`
	BaseRewardCoins                int64                       `protobuf:"varint,20,opt,name=base_reward_coins,json=baseRewardCoins,proto3" json:"base_reward_coins,omitempty"`
	OrdinaryWinCount               int64                       `protobuf:"varint,21,opt,name=ordinary_win_count,json=ordinaryWinCount,proto3" json:"ordinary_win_count,omitempty"`
	HighMultiplierOrdinaryWinCount int64                       `protobuf:"varint,22,opt,name=high_multiplier_ordinary_win_count,json=highMultiplierOrdinaryWinCount,proto3" json:"high_multiplier_ordinary_win_count,omitempty"`
	RtpCompensationJackpotCount    int64                       `protobuf:"varint,23,opt,name=rtp_compensation_jackpot_count,json=rtpCompensationJackpotCount,proto3" json:"rtp_compensation_jackpot_count,omitempty"`
	CumulativeSpendJackpotCount    int64                       `protobuf:"varint,24,opt,name=cumulative_spend_jackpot_count,json=cumulativeSpendJackpotCount,proto3" json:"cumulative_spend_jackpot_count,omitempty"`
	GuaranteeHitCount              int64                       `protobuf:"varint,25,opt,name=guarantee_hit_count,json=guaranteeHitCount,proto3" json:"guarantee_hit_count,omitempty"`
	ZeroDrawCount                  int64                       `protobuf:"varint,26,opt,name=zero_draw_count,json=zeroDrawCount,proto3" json:"zero_draw_count,omitempty"`
	GrantedDrawCount               int64                       `protobuf:"varint,27,opt,name=granted_draw_count,json=grantedDrawCount,proto3" json:"granted_draw_count,omitempty"`
	PendingDrawCount               int64                       `protobuf:"varint,28,opt,name=pending_draw_count,json=pendingDrawCount,proto3" json:"pending_draw_count,omitempty"`
	FailedDrawCount                int64                       `protobuf:"varint,29,opt,name=failed_draw_count,json=failedDrawCount,proto3" json:"failed_draw_count,omitempty"`
	MaxMultiplierPpm               int64                       `protobuf:"varint,30,opt,name=max_multiplier_ppm,json=maxMultiplierPpm,proto3" json:"max_multiplier_ppm,omitempty"`
	MaxRewardCoins                 int64                       `protobuf:"varint,31,opt,name=max_reward_coins,json=maxRewardCoins,proto3" json:"max_reward_coins,omitempty"`
	FirstDrawAtMs                  int64                       `protobuf:"varint,32,opt,name=first_draw_at_ms,json=firstDrawAtMs,proto3" json:"first_draw_at_ms,omitempty"`
	LastDrawAtMs                   int64                       `protobuf:"varint,33,opt,name=last_draw_at_ms,json=lastDrawAtMs,proto3" json:"last_draw_at_ms,omitempty"`
	AggregatedAtMs                 int64                       `protobuf:"varint,34,opt,name=aggregated_at_ms,json=aggregatedAtMs,proto3" json:"aggregated_at_ms,omitempty"`
	DataLagMs                      int64                       `protobuf:"varint,35,opt,name=data_lag_ms,json=dataLagMs,proto3" json:"data_lag_ms,omitempty"`
	User_24HRtpThresholdPpm        int64                       `protobuf:"varint,36,opt,name=user_24h_rtp_threshold_ppm,json=user24hRtpThresholdPpm,proto3" json:"user_24h_rtp_threshold_ppm,omitempty"`
	unknownFields                  protoimpl.UnknownFields
	sizeCache                      protoimpl.SizeCache
}

func (x *LuckyGiftUserProfile) Reset() {
	*x = LuckyGiftUserProfile{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[50]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftUserProfile) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftUserProfile) ProtoMessage() {}

func (x *LuckyGiftUserProfile) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[50]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftUserProfile.ProtoReflect.Descriptor instead.
func (*LuckyGiftUserProfile) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{50}
}

func (x *LuckyGiftUserProfile) GetAppCode() string {
	if x != nil {
		return x.AppCode
	}
	return ""
}

func (x *LuckyGiftUserProfile) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *LuckyGiftUserProfile) GetIdentityType() string {
	if x != nil {
		return x.IdentityType
	}
	return ""
}

func (x *LuckyGiftUserProfile) GetInternalUserId() int64 {
	if x != nil {
		return x.InternalUserId
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *LuckyGiftUserProfile) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *LuckyGiftUserProfile) GetStage() string {
	if x != nil {
		return x.Stage
	}
	return ""
}

func (x *LuckyGiftUserProfile) GetPaidDraws() int64 {
	if x != nil {
		return x.PaidDraws
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetEquivalentDraws() int64 {
	if x != nil {
		return x.EquivalentDraws
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetLossStreak() int64 {
	if x != nil {
		return x.LossStreak
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetPendingSpendJackpotTokens() int64 {
	if x != nil {
		return x.PendingSpendJackpotTokens
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetGuaranteeDrawsRemaining() int64 {
	if x != nil {
		return x.GuaranteeDrawsRemaining
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetDownweightActive() bool {
	if x != nil {
		return x.DownweightActive
	}
	return false
}

func (x *LuckyGiftUserProfile) GetDownweightFactorPpm() int64 {
	if x != nil {
		return x.DownweightFactorPpm
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetOneHour() *LuckyGiftUserProfileWindow {
	if x != nil {
		return x.OneHour
	}
	return nil
}

func (x *LuckyGiftUserProfile) GetTwentyFourHours() *LuckyGiftUserProfileWindow {
	if x != nil {
		return x.TwentyFourHours
	}
	return nil
}

func (x *LuckyGiftUserProfile) GetFortyEightHours() *LuckyGiftUserProfileWindow {
	if x != nil {
		return x.FortyEightHours
	}
	return nil
}

func (x *LuckyGiftUserProfile) GetLifetime() *LuckyGiftUserProfileWindow {
	if x != nil {
		return x.Lifetime
	}
	return nil
}

func (x *LuckyGiftUserProfile) GetBaseRewardCoins() int64 {
	if x != nil {
		return x.BaseRewardCoins
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetOrdinaryWinCount() int64 {
	if x != nil {
		return x.OrdinaryWinCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetHighMultiplierOrdinaryWinCount() int64 {
	if x != nil {
		return x.HighMultiplierOrdinaryWinCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetRtpCompensationJackpotCount() int64 {
	if x != nil {
		return x.RtpCompensationJackpotCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetCumulativeSpendJackpotCount() int64 {
	if x != nil {
		return x.CumulativeSpendJackpotCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetGuaranteeHitCount() int64 {
	if x != nil {
		return x.GuaranteeHitCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetZeroDrawCount() int64 {
	if x != nil {
		return x.ZeroDrawCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetGrantedDrawCount() int64 {
	if x != nil {
		return x.GrantedDrawCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetPendingDrawCount() int64 {
	if x != nil {
		return x.PendingDrawCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetFailedDrawCount() int64 {
	if x != nil {
		return x.FailedDrawCount
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetMaxMultiplierPpm() int64 {
	if x != nil {
		return x.MaxMultiplierPpm
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetMaxRewardCoins() int64 {
	if x != nil {
		return x.MaxRewardCoins
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetFirstDrawAtMs() int64 {
	if x != nil {
		return x.FirstDrawAtMs
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetLastDrawAtMs() int64 {
	if x != nil {
		return x.LastDrawAtMs
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetAggregatedAtMs() int64 {
	if x != nil {
		return x.AggregatedAtMs
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetDataLagMs() int64 {
	if x != nil {
		return x.DataLagMs
	}
	return 0
}

func (x *LuckyGiftUserProfile) GetUser_24HRtpThresholdPpm() int64 {
	if x != nil {
		return x.User_24HRtpThresholdPpm
	}
	return 0
}

type ListLuckyGiftUserProfilesRequest struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	Meta           *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId         string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	IdentityType   string                 `protobuf:"bytes,3,opt,name=identity_type,json=identityType,proto3" json:"identity_type,omitempty"`
	InternalUserId int64                  `protobuf:"varint,4,opt,name=internal_user_id,json=internalUserId,proto3" json:"internal_user_id,omitempty"`
	ExternalUserId string                 `protobuf:"bytes,5,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	Stage          string                 `protobuf:"bytes,6,opt,name=stage,proto3" json:"stage,omitempty"`
	Status         string                 `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"`
	SortBy         string                 `protobuf:"bytes,8,opt,name=sort_by,json=sortBy,proto3" json:"sort_by,omitempty"`
	SortDirection  string                 `protobuf:"bytes,9,opt,name=sort_direction,json=sortDirection,proto3" json:"sort_direction,omitempty"`
	Page           int32                  `protobuf:"varint,10,opt,name=page,proto3" json:"page,omitempty"`
	PageSize       int32                  `protobuf:"varint,11,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	// cursor 是 owner service 生成的不透明 keyset 游标；page 仅保留旧客户端协议兼容，服务端不再执行 OFFSET。
	Cursor        string `protobuf:"bytes,12,opt,name=cursor,proto3" json:"cursor,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftUserProfilesRequest) Reset() {
	*x = ListLuckyGiftUserProfilesRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[51]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftUserProfilesRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftUserProfilesRequest) ProtoMessage() {}

func (x *ListLuckyGiftUserProfilesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[51]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftUserProfilesRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftUserProfilesRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{51}
}

func (x *ListLuckyGiftUserProfilesRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ListLuckyGiftUserProfilesRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetIdentityType() string {
	if x != nil {
		return x.IdentityType
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetInternalUserId() int64 {
	if x != nil {
		return x.InternalUserId
	}
	return 0
}

func (x *ListLuckyGiftUserProfilesRequest) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetStage() string {
	if x != nil {
		return x.Stage
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetStatus() string {
	if x != nil {
		return x.Status
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetSortBy() string {
	if x != nil {
		return x.SortBy
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetSortDirection() string {
	if x != nil {
		return x.SortDirection
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesRequest) GetPage() int32 {
	if x != nil {
		return x.Page
	}
	return 0
}

func (x *ListLuckyGiftUserProfilesRequest) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

func (x *ListLuckyGiftUserProfilesRequest) GetCursor() string {
	if x != nil {
		return x.Cursor
	}
	return ""
}

type ListLuckyGiftUserProfilesResponse struct {
	state         protoimpl.MessageState  `protogen:"open.v1"`
	Profiles      []*LuckyGiftUserProfile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"`
	Total         int64                   `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
	SnapshotAtMs  int64                   `protobuf:"varint,3,opt,name=snapshot_at_ms,json=snapshotAtMs,proto3" json:"snapshot_at_ms,omitempty"`
	NextCursor    string                  `protobuf:"bytes,4,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"`
	HasMore       bool                    `protobuf:"varint,5,opt,name=has_more,json=hasMore,proto3" json:"has_more,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftUserProfilesResponse) Reset() {
	*x = ListLuckyGiftUserProfilesResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[52]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftUserProfilesResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftUserProfilesResponse) ProtoMessage() {}

func (x *ListLuckyGiftUserProfilesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[52]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftUserProfilesResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftUserProfilesResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{52}
}

func (x *ListLuckyGiftUserProfilesResponse) GetProfiles() []*LuckyGiftUserProfile {
	if x != nil {
		return x.Profiles
	}
	return nil
}

func (x *ListLuckyGiftUserProfilesResponse) GetTotal() int64 {
	if x != nil {
		return x.Total
	}
	return 0
}

func (x *ListLuckyGiftUserProfilesResponse) GetSnapshotAtMs() int64 {
	if x != nil {
		return x.SnapshotAtMs
	}
	return 0
}

func (x *ListLuckyGiftUserProfilesResponse) GetNextCursor() string {
	if x != nil {
		return x.NextCursor
	}
	return ""
}

func (x *ListLuckyGiftUserProfilesResponse) GetHasMore() bool {
	if x != nil {
		return x.HasMore
	}
	return false
}

type GetLuckyGiftUserProfileRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Meta            *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	PoolId          string                 `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	IdentityType    string                 `protobuf:"bytes,3,opt,name=identity_type,json=identityType,proto3" json:"identity_type,omitempty"`
	InternalUserId  int64                  `protobuf:"varint,4,opt,name=internal_user_id,json=internalUserId,proto3" json:"internal_user_id,omitempty"`
	ExternalUserId  string                 `protobuf:"bytes,5,opt,name=external_user_id,json=externalUserId,proto3" json:"external_user_id,omitempty"`
	JackpotPage     int32                  `protobuf:"varint,6,opt,name=jackpot_page,json=jackpotPage,proto3" json:"jackpot_page,omitempty"`
	JackpotPageSize int32                  `protobuf:"varint,7,opt,name=jackpot_page_size,json=jackpotPageSize,proto3" json:"jackpot_page_size,omitempty"`
	// jackpot_cursor 由上一页 next_jackpot_cursor 原样返回；jackpot_page 仅保留协议兼容。
	JackpotCursor string `protobuf:"bytes,8,opt,name=jackpot_cursor,json=jackpotCursor,proto3" json:"jackpot_cursor,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetLuckyGiftUserProfileRequest) Reset() {
	*x = GetLuckyGiftUserProfileRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[53]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLuckyGiftUserProfileRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLuckyGiftUserProfileRequest) ProtoMessage() {}

func (x *GetLuckyGiftUserProfileRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[53]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLuckyGiftUserProfileRequest.ProtoReflect.Descriptor instead.
func (*GetLuckyGiftUserProfileRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{53}
}

func (x *GetLuckyGiftUserProfileRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *GetLuckyGiftUserProfileRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *GetLuckyGiftUserProfileRequest) GetIdentityType() string {
	if x != nil {
		return x.IdentityType
	}
	return ""
}

func (x *GetLuckyGiftUserProfileRequest) GetInternalUserId() int64 {
	if x != nil {
		return x.InternalUserId
	}
	return 0
}

func (x *GetLuckyGiftUserProfileRequest) GetExternalUserId() string {
	if x != nil {
		return x.ExternalUserId
	}
	return ""
}

func (x *GetLuckyGiftUserProfileRequest) GetJackpotPage() int32 {
	if x != nil {
		return x.JackpotPage
	}
	return 0
}

func (x *GetLuckyGiftUserProfileRequest) GetJackpotPageSize() int32 {
	if x != nil {
		return x.JackpotPageSize
	}
	return 0
}

func (x *GetLuckyGiftUserProfileRequest) GetJackpotCursor() string {
	if x != nil {
		return x.JackpotCursor
	}
	return ""
}

type LuckyGiftUserMultiplierStat struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	HitType       string                 `protobuf:"bytes,1,opt,name=hit_type,json=hitType,proto3" json:"hit_type,omitempty"`
	MultiplierPpm int64                  `protobuf:"varint,2,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"`
	DrawCount     int64                  `protobuf:"varint,3,opt,name=draw_count,json=drawCount,proto3" json:"draw_count,omitempty"`
	WagerCoins    int64                  `protobuf:"varint,4,opt,name=wager_coins,json=wagerCoins,proto3" json:"wager_coins,omitempty"`
	PayoutCoins   int64                  `protobuf:"varint,5,opt,name=payout_coins,json=payoutCoins,proto3" json:"payout_coins,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftUserMultiplierStat) Reset() {
	*x = LuckyGiftUserMultiplierStat{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[54]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftUserMultiplierStat) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftUserMultiplierStat) ProtoMessage() {}

func (x *LuckyGiftUserMultiplierStat) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[54]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftUserMultiplierStat.ProtoReflect.Descriptor instead.
func (*LuckyGiftUserMultiplierStat) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{54}
}

func (x *LuckyGiftUserMultiplierStat) GetHitType() string {
	if x != nil {
		return x.HitType
	}
	return ""
}

func (x *LuckyGiftUserMultiplierStat) GetMultiplierPpm() int64 {
	if x != nil {
		return x.MultiplierPpm
	}
	return 0
}

func (x *LuckyGiftUserMultiplierStat) GetDrawCount() int64 {
	if x != nil {
		return x.DrawCount
	}
	return 0
}

func (x *LuckyGiftUserMultiplierStat) GetWagerCoins() int64 {
	if x != nil {
		return x.WagerCoins
	}
	return 0
}

func (x *LuckyGiftUserMultiplierStat) GetPayoutCoins() int64 {
	if x != nil {
		return x.PayoutCoins
	}
	return 0
}

type LuckyGiftUserJackpotCondition struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Name          string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Numerator     int64                  `protobuf:"varint,2,opt,name=numerator,proto3" json:"numerator,omitempty"`
	Denominator   int64                  `protobuf:"varint,3,opt,name=denominator,proto3" json:"denominator,omitempty"`
	RatioPpm      int64                  `protobuf:"varint,4,opt,name=ratio_ppm,json=ratioPpm,proto3" json:"ratio_ppm,omitempty"`
	LimitPpm      int64                  `protobuf:"varint,5,opt,name=limit_ppm,json=limitPpm,proto3" json:"limit_ppm,omitempty"`
	FactorPpm     int64                  `protobuf:"varint,6,opt,name=factor_ppm,json=factorPpm,proto3" json:"factor_ppm,omitempty"`
	Passed        bool                   `protobuf:"varint,7,opt,name=passed,proto3" json:"passed,omitempty"`
	Reason        string                 `protobuf:"bytes,8,opt,name=reason,proto3" json:"reason,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftUserJackpotCondition) Reset() {
	*x = LuckyGiftUserJackpotCondition{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[55]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftUserJackpotCondition) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftUserJackpotCondition) ProtoMessage() {}

func (x *LuckyGiftUserJackpotCondition) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[55]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftUserJackpotCondition.ProtoReflect.Descriptor instead.
func (*LuckyGiftUserJackpotCondition) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{55}
}

func (x *LuckyGiftUserJackpotCondition) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *LuckyGiftUserJackpotCondition) GetNumerator() int64 {
	if x != nil {
		return x.Numerator
	}
	return 0
}

func (x *LuckyGiftUserJackpotCondition) GetDenominator() int64 {
	if x != nil {
		return x.Denominator
	}
	return 0
}

func (x *LuckyGiftUserJackpotCondition) GetRatioPpm() int64 {
	if x != nil {
		return x.RatioPpm
	}
	return 0
}

func (x *LuckyGiftUserJackpotCondition) GetLimitPpm() int64 {
	if x != nil {
		return x.LimitPpm
	}
	return 0
}

func (x *LuckyGiftUserJackpotCondition) GetFactorPpm() int64 {
	if x != nil {
		return x.FactorPpm
	}
	return 0
}

func (x *LuckyGiftUserJackpotCondition) GetPassed() bool {
	if x != nil {
		return x.Passed
	}
	return false
}

func (x *LuckyGiftUserJackpotCondition) GetReason() string {
	if x != nil {
		return x.Reason
	}
	return ""
}

type LuckyGiftUserJackpotHit struct {
	state         protoimpl.MessageState           `protogen:"open.v1"`
	DrawId        string                           `protobuf:"bytes,1,opt,name=draw_id,json=drawId,proto3" json:"draw_id,omitempty"`
	RequestId     string                           `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
	RuleVersion   int64                            `protobuf:"varint,3,opt,name=rule_version,json=ruleVersion,proto3" json:"rule_version,omitempty"`
	Stage         string                           `protobuf:"bytes,4,opt,name=stage,proto3" json:"stage,omitempty"`
	Mechanism     string                           `protobuf:"bytes,5,opt,name=mechanism,proto3" json:"mechanism,omitempty"`
	ReasonCode    string                           `protobuf:"bytes,6,opt,name=reason_code,json=reasonCode,proto3" json:"reason_code,omitempty"`
	ReasonSummary string                           `protobuf:"bytes,7,opt,name=reason_summary,json=reasonSummary,proto3" json:"reason_summary,omitempty"`
	TierId        string                           `protobuf:"bytes,8,opt,name=tier_id,json=tierId,proto3" json:"tier_id,omitempty"`
	MultiplierPpm int64                            `protobuf:"varint,9,opt,name=multiplier_ppm,json=multiplierPpm,proto3" json:"multiplier_ppm,omitempty"`
	WagerCoins    int64                            `protobuf:"varint,10,opt,name=wager_coins,json=wagerCoins,proto3" json:"wager_coins,omitempty"`
	PayoutCoins   int64                            `protobuf:"varint,11,opt,name=payout_coins,json=payoutCoins,proto3" json:"payout_coins,omitempty"`
	OccurredAtMs  int64                            `protobuf:"varint,12,opt,name=occurred_at_ms,json=occurredAtMs,proto3" json:"occurred_at_ms,omitempty"`
	Conditions    []*LuckyGiftUserJackpotCondition `protobuf:"bytes,13,rep,name=conditions,proto3" json:"conditions,omitempty"`
	// event_key 只标识这条画像大奖事实，供前端稳定追加去重；不包含用户策略键或用户哈希。
	EventKey      string `protobuf:"bytes,14,opt,name=event_key,json=eventKey,proto3" json:"event_key,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LuckyGiftUserJackpotHit) Reset() {
	*x = LuckyGiftUserJackpotHit{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[56]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftUserJackpotHit) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftUserJackpotHit) ProtoMessage() {}

func (x *LuckyGiftUserJackpotHit) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[56]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftUserJackpotHit.ProtoReflect.Descriptor instead.
func (*LuckyGiftUserJackpotHit) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{56}
}

func (x *LuckyGiftUserJackpotHit) GetDrawId() string {
	if x != nil {
		return x.DrawId
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetRequestId() string {
	if x != nil {
		return x.RequestId
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetRuleVersion() int64 {
	if x != nil {
		return x.RuleVersion
	}
	return 0
}

func (x *LuckyGiftUserJackpotHit) GetStage() string {
	if x != nil {
		return x.Stage
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetMechanism() string {
	if x != nil {
		return x.Mechanism
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetReasonCode() string {
	if x != nil {
		return x.ReasonCode
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetReasonSummary() string {
	if x != nil {
		return x.ReasonSummary
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetTierId() string {
	if x != nil {
		return x.TierId
	}
	return ""
}

func (x *LuckyGiftUserJackpotHit) GetMultiplierPpm() int64 {
	if x != nil {
		return x.MultiplierPpm
	}
	return 0
}

func (x *LuckyGiftUserJackpotHit) GetWagerCoins() int64 {
	if x != nil {
		return x.WagerCoins
	}
	return 0
}

func (x *LuckyGiftUserJackpotHit) GetPayoutCoins() int64 {
	if x != nil {
		return x.PayoutCoins
	}
	return 0
}

func (x *LuckyGiftUserJackpotHit) GetOccurredAtMs() int64 {
	if x != nil {
		return x.OccurredAtMs
	}
	return 0
}

func (x *LuckyGiftUserJackpotHit) GetConditions() []*LuckyGiftUserJackpotCondition {
	if x != nil {
		return x.Conditions
	}
	return nil
}

func (x *LuckyGiftUserJackpotHit) GetEventKey() string {
	if x != nil {
		return x.EventKey
	}
	return ""
}

type GetLuckyGiftUserProfileResponse struct {
	state                  protoimpl.MessageState         `protogen:"open.v1"`
	Profile                *LuckyGiftUserProfile          `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"`
	MultiplierDistribution []*LuckyGiftUserMultiplierStat `protobuf:"bytes,2,rep,name=multiplier_distribution,json=multiplierDistribution,proto3" json:"multiplier_distribution,omitempty"`
	JackpotHits            []*LuckyGiftUserJackpotHit     `protobuf:"bytes,3,rep,name=jackpot_hits,json=jackpotHits,proto3" json:"jackpot_hits,omitempty"`
	JackpotHitTotal        int64                          `protobuf:"varint,4,opt,name=jackpot_hit_total,json=jackpotHitTotal,proto3" json:"jackpot_hit_total,omitempty"`
	SnapshotAtMs           int64                          `protobuf:"varint,5,opt,name=snapshot_at_ms,json=snapshotAtMs,proto3" json:"snapshot_at_ms,omitempty"`
	JackpotPage            int32                          `protobuf:"varint,6,opt,name=jackpot_page,json=jackpotPage,proto3" json:"jackpot_page,omitempty"`
	JackpotPageSize        int32                          `protobuf:"varint,7,opt,name=jackpot_page_size,json=jackpotPageSize,proto3" json:"jackpot_page_size,omitempty"`
	NextJackpotCursor      string                         `protobuf:"bytes,8,opt,name=next_jackpot_cursor,json=nextJackpotCursor,proto3" json:"next_jackpot_cursor,omitempty"`
	JackpotHasMore         bool                           `protobuf:"varint,9,opt,name=jackpot_has_more,json=jackpotHasMore,proto3" json:"jackpot_has_more,omitempty"`
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *GetLuckyGiftUserProfileResponse) Reset() {
	*x = GetLuckyGiftUserProfileResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[57]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLuckyGiftUserProfileResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLuckyGiftUserProfileResponse) ProtoMessage() {}

func (x *GetLuckyGiftUserProfileResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[57]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLuckyGiftUserProfileResponse.ProtoReflect.Descriptor instead.
func (*GetLuckyGiftUserProfileResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{57}
}

func (x *GetLuckyGiftUserProfileResponse) GetProfile() *LuckyGiftUserProfile {
	if x != nil {
		return x.Profile
	}
	return nil
}

func (x *GetLuckyGiftUserProfileResponse) GetMultiplierDistribution() []*LuckyGiftUserMultiplierStat {
	if x != nil {
		return x.MultiplierDistribution
	}
	return nil
}

func (x *GetLuckyGiftUserProfileResponse) GetJackpotHits() []*LuckyGiftUserJackpotHit {
	if x != nil {
		return x.JackpotHits
	}
	return nil
}

func (x *GetLuckyGiftUserProfileResponse) GetJackpotHitTotal() int64 {
	if x != nil {
		return x.JackpotHitTotal
	}
	return 0
}

func (x *GetLuckyGiftUserProfileResponse) GetSnapshotAtMs() int64 {
	if x != nil {
		return x.SnapshotAtMs
	}
	return 0
}

func (x *GetLuckyGiftUserProfileResponse) GetJackpotPage() int32 {
	if x != nil {
		return x.JackpotPage
	}
	return 0
}

func (x *GetLuckyGiftUserProfileResponse) GetJackpotPageSize() int32 {
	if x != nil {
		return x.JackpotPageSize
	}
	return 0
}

func (x *GetLuckyGiftUserProfileResponse) GetNextJackpotCursor() string {
	if x != nil {
		return x.NextJackpotCursor
	}
	return ""
}

func (x *GetLuckyGiftUserProfileResponse) GetJackpotHasMore() bool {
	if x != nil {
		return x.JackpotHasMore
	}
	return false
}

// ListLuckyGiftDailyStats 面向 Databi 的按日聚合：只读 lucky_draw_pool_day_stats 读模型
// （北京日 +08:00 分桶，由后台游标增量刷新），不扫抽奖事实表，避免 BI 访问打热事实库。
// strategy_version 过滤用于按策略族拆分展示（如幸运礼物V3 tab 只看 dynamic_v3）。
type ListLuckyGiftDailyStatsRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	Meta  *RequestMeta           `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
	// pool_id 为空表示全部奖池汇总。
	PoolId string `protobuf:"bytes,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"`
	// strategy_version 为空表示不按策略过滤；取值 fixed_v2 / dynamic_v3。
	StrategyVersion string `protobuf:"bytes,3,opt,name=strategy_version,json=strategyVersion,proto3" json:"strategy_version,omitempty"`
	// [start_ms, end_ms) UTC epoch ms；服务端按北京日换算成 stat_day 闭区间。
	StartMs int64 `protobuf:"varint,4,opt,name=start_ms,json=startMs,proto3" json:"start_ms,omitempty"`
	EndMs   int64 `protobuf:"varint,5,opt,name=end_ms,json=endMs,proto3" json:"end_ms,omitempty"`
	// region_ids 为空表示全部区域；按房间可见区域 ID 过滤（0=GLOBAL 房间只在不过滤时计入）。
	RegionIds     []int64 `protobuf:"varint,6,rep,packed,name=region_ids,json=regionIds,proto3" json:"region_ids,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftDailyStatsRequest) Reset() {
	*x = ListLuckyGiftDailyStatsRequest{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[58]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftDailyStatsRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftDailyStatsRequest) ProtoMessage() {}

func (x *ListLuckyGiftDailyStatsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[58]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftDailyStatsRequest.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftDailyStatsRequest) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{58}
}

func (x *ListLuckyGiftDailyStatsRequest) GetMeta() *RequestMeta {
	if x != nil {
		return x.Meta
	}
	return nil
}

func (x *ListLuckyGiftDailyStatsRequest) GetPoolId() string {
	if x != nil {
		return x.PoolId
	}
	return ""
}

func (x *ListLuckyGiftDailyStatsRequest) GetStrategyVersion() string {
	if x != nil {
		return x.StrategyVersion
	}
	return ""
}

func (x *ListLuckyGiftDailyStatsRequest) GetStartMs() int64 {
	if x != nil {
		return x.StartMs
	}
	return 0
}

func (x *ListLuckyGiftDailyStatsRequest) GetEndMs() int64 {
	if x != nil {
		return x.EndMs
	}
	return 0
}

func (x *ListLuckyGiftDailyStatsRequest) GetRegionIds() []int64 {
	if x != nil {
		return x.RegionIds
	}
	return nil
}

type LuckyGiftDailyStat struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// stat_day 是北京日（+08:00）YYYY-MM-DD。
	StatDay      string `protobuf:"bytes,1,opt,name=stat_day,json=statDay,proto3" json:"stat_day,omitempty"`
	DrawCount    int64  `protobuf:"varint,2,opt,name=draw_count,json=drawCount,proto3" json:"draw_count,omitempty"`
	TurnoverCoin int64  `protobuf:"varint,3,opt,name=turnover_coin,json=turnoverCoin,proto3" json:"turnover_coin,omitempty"`
	// payout_coin 为用户可见返奖（effective），与既有 DrawSummary 口径一致，含未发放/失败行。
	PayoutCoin     int64 `protobuf:"varint,4,opt,name=payout_coin,json=payoutCoin,proto3" json:"payout_coin,omitempty"`
	BaseRewardCoin int64 `protobuf:"varint,5,opt,name=base_reward_coin,json=baseRewardCoin,proto3" json:"base_reward_coin,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *LuckyGiftDailyStat) Reset() {
	*x = LuckyGiftDailyStat{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[59]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LuckyGiftDailyStat) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LuckyGiftDailyStat) ProtoMessage() {}

func (x *LuckyGiftDailyStat) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[59]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LuckyGiftDailyStat.ProtoReflect.Descriptor instead.
func (*LuckyGiftDailyStat) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{59}
}

func (x *LuckyGiftDailyStat) GetStatDay() string {
	if x != nil {
		return x.StatDay
	}
	return ""
}

func (x *LuckyGiftDailyStat) GetDrawCount() int64 {
	if x != nil {
		return x.DrawCount
	}
	return 0
}

func (x *LuckyGiftDailyStat) GetTurnoverCoin() int64 {
	if x != nil {
		return x.TurnoverCoin
	}
	return 0
}

func (x *LuckyGiftDailyStat) GetPayoutCoin() int64 {
	if x != nil {
		return x.PayoutCoin
	}
	return 0
}

func (x *LuckyGiftDailyStat) GetBaseRewardCoin() int64 {
	if x != nil {
		return x.BaseRewardCoin
	}
	return 0
}

type ListLuckyGiftDailyStatsResponse struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Stats         []*LuckyGiftDailyStat  `protobuf:"bytes,1,rep,name=stats,proto3" json:"stats,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ListLuckyGiftDailyStatsResponse) Reset() {
	*x = ListLuckyGiftDailyStatsResponse{}
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[60]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ListLuckyGiftDailyStatsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListLuckyGiftDailyStatsResponse) ProtoMessage() {}

func (x *ListLuckyGiftDailyStatsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_proto_luckygift_v1_luckygift_proto_msgTypes[60]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListLuckyGiftDailyStatsResponse.ProtoReflect.Descriptor instead.
func (*ListLuckyGiftDailyStatsResponse) Descriptor() ([]byte, []int) {
	return file_proto_luckygift_v1_luckygift_proto_rawDescGZIP(), []int{60}
}

func (x *ListLuckyGiftDailyStatsResponse) GetStats() []*LuckyGiftDailyStat {
	if x != nil {
		return x.Stats
	}
	return nil
}

var File_proto_luckygift_v1_luckygift_proto protoreflect.FileDescriptor

const file_proto_luckygift_v1_luckygift_proto_rawDesc = "" +
	"\n" +
	"\"proto/luckygift/v1/luckygift.proto\x12\x12hyapp.luckygift.v1\"\xa5\x01\n" +
	"\vRequestMeta\x12\x1d\n" +
	"\n" +
	"request_id\x18\x01 \x01(\tR\trequestId\x12\x16\n" +
	"\x06caller\x18\x02 \x01(\tR\x06caller\x12&\n" +
	"\x0fgateway_node_id\x18\x03 \x01(\tR\rgatewayNodeId\x12\x1c\n" +
	"\n" +
	"sent_at_ms\x18\x04 \x01(\x03R\bsentAtMs\x12\x19\n" +
	"\bapp_code\x18\x05 \x01(\tR\aappCode\"\xba\a\n" +
	"\rLuckyGiftMeta\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x1d\n" +
	"\n" +
	"command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" +
	"\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x1b\n" +
	"\tdevice_id\x18\x04 \x01(\tR\bdeviceId\x12\x17\n" +
	"\aroom_id\x18\x05 \x01(\tR\x06roomId\x12\x1b\n" +
	"\tanchor_id\x18\x06 \x01(\tR\banchorId\x12\x17\n" +
	"\agift_id\x18\a \x01(\tR\x06giftId\x12\x1d\n" +
	"\n" +
	"coin_spent\x18\b \x01(\x03R\tcoinSpent\x12\x1c\n" +
	"\n" +
	"paid_at_ms\x18\t \x01(\x03R\bpaidAtMs\x12\x17\n" +
	"\apool_id\x18\n" +
	" \x01(\tR\x06poolId\x12$\n" +
	"\x0etarget_user_id\x18\v \x01(\x03R\ftargetUserId\x12\x1d\n" +
	"\n" +
	"gift_count\x18\f \x01(\x05R\tgiftCount\x12*\n" +
	"\x11visible_region_id\x18\r \x01(\x03R\x0fvisibleRegionId\x12\x1d\n" +
	"\n" +
	"country_id\x18\x0e \x01(\x03R\tcountryId\x12\x1f\n" +
	"\vsender_name\x18\x0f \x01(\tR\n" +
	"senderName\x12#\n" +
	"\rsender_avatar\x18\x10 \x01(\tR\fsenderAvatar\x123\n" +
	"\x16sender_display_user_id\x18\x11 \x01(\tR\x13senderDisplayUserId\x12@\n" +
	"\x1dsender_pretty_display_user_id\x18\x12 \x01(\tR\x19senderPrettyDisplayUserId\x12*\n" +
	"\x11recharge_7d_coins\x18\x13 \x01(\x03R\x0frecharge7dCoins\x12,\n" +
	"\x12recharge_30d_coins\x18\x14 \x01(\x03R\x10recharge30dCoins\x12/\n" +
	"\x14last_recharged_at_ms\x18\x15 \x01(\x03R\x11lastRechargedAtMs\x12*\n" +
	"\x11gift_income_coins\x18\x16 \x01(\x03R\x0fgiftIncomeCoins\x121\n" +
	"\x15user_registered_at_ms\x18\x17 \x01(\x03R\x12userRegisteredAtMs\x12\x1f\n" +
	"\vroom_locked\x18\x18 \x01(\bR\n" +
	"roomLocked\x12\"\n" +
	"\rowner_user_id\x18\x19 \x01(\x03R\vownerUserId\"\xd3\x01\n" +
	"\x11LuckyGiftRuleTier\x12\x14\n" +
	"\x05stage\x18\x01 \x01(\tR\x05stage\x12\x17\n" +
	"\atier_id\x18\x02 \x01(\tR\x06tierId\x12%\n" +
	"\x0emultiplier_ppm\x18\x03 \x01(\x03R\rmultiplierPpm\x12&\n" +
	"\x0fbase_weight_ppm\x18\x04 \x01(\x03R\rbaseWeightPpm\x12&\n" +
	"\x0fhigh_water_only\x18\x05 \x01(\bR\rhighWaterOnly\x12\x18\n" +
	"\aenabled\x18\x06 \x01(\bR\aenabled\"\xcf\x01\n" +
	"\x12LuckyGiftRuleStage\x12\x14\n" +
	"\x05stage\x18\x01 \x01(\tR\x05stage\x12;\n" +
	"\x05tiers\x18\x02 \x03(\v2%.hyapp.luckygift.v1.LuckyGiftRuleTierR\x05tiers\x121\n" +
	"\x15min_recharge_7d_coins\x18\x03 \x01(\x03R\x12minRecharge7dCoins\x123\n" +
	"\x16min_recharge_30d_coins\x18\x04 \x01(\x03R\x13minRecharge30dCoins\"\xeb\x12\n" +
	"\x13LuckyGiftRuleConfig\x12\x19\n" +
	"\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12!\n" +
	"\frule_version\x18\x03 \x01(\x03R\vruleVersion\x12\x18\n" +
	"\aenabled\x18\x04 \x01(\bR\aenabled\x12$\n" +
	"\x0etarget_rtp_ppm\x18\x05 \x01(\x03R\ftargetRtpPpm\x12\"\n" +
	"\rpool_rate_ppm\x18\x06 \x01(\x03R\vpoolRatePpm\x126\n" +
	"\x17settlement_window_wager\x18\a \x01(\x03R\x15settlementWindowWager\x12(\n" +
	"\x10control_band_ppm\x18\b \x01(\x03R\x0econtrolBandPpm\x120\n" +
	"\x14gift_price_reference\x18\t \x01(\x03R\x12giftPriceReference\x12=\n" +
	"\x1bnovice_max_equivalent_draws\x18\n" +
	" \x01(\x03R\x18noviceMaxEquivalentDraws\x12=\n" +
	"\x1bnormal_max_equivalent_draws\x18\v \x01(\x03R\x18normalMaxEquivalentDraws\x12*\n" +
	"\x11effective_from_ms\x18\f \x01(\x03R\x0feffectiveFromMs\x12-\n" +
	"\x13created_by_admin_id\x18\r \x01(\x03R\x10createdByAdminId\x12\"\n" +
	"\rcreated_at_ms\x18\x0e \x01(\x03R\vcreatedAtMs\x12>\n" +
	"\x06stages\x18\x0f \x03(\v2&.hyapp.luckygift.v1.LuckyGiftRuleStageR\x06stages\x12)\n" +
	"\x10strategy_version\x18\x10 \x01(\tR\x0fstrategyVersion\x12&\n" +
	"\x0fprofit_rate_ppm\x18\x11 \x01(\x03R\rprofitRatePpm\x12&\n" +
	"\x0fanchor_rate_ppm\x18\x12 \x01(\x03R\ranchorRatePpm\x12,\n" +
	"\x12initial_pool_coins\x18\x13 \x01(\x03R\x10initialPoolCoins\x122\n" +
	"\x15loss_streak_guarantee\x18\x14 \x01(\x03R\x13lossStreakGuarantee\x12.\n" +
	"\x13low_watermark_coins\x18\x15 \x01(\x03R\x11lowWatermarkCoins\x12>\n" +
	"\x1clow_water_nonzero_factor_ppm\x18\x16 \x01(\x03R\x18lowWaterNonzeroFactorPpm\x120\n" +
	"\x14high_watermark_coins\x18\x17 \x01(\x03R\x12highWatermarkCoins\x12@\n" +
	"\x1dhigh_water_nonzero_factor_ppm\x18\x18 \x01(\x03R\x19highWaterNonzeroFactorPpm\x127\n" +
	"\x18recharge_boost_window_ms\x18\x19 \x01(\x03R\x15rechargeBoostWindowMs\x129\n" +
	"\x19recharge_boost_factor_ppm\x18\x1a \x01(\x03R\x16rechargeBoostFactorPpm\x126\n" +
	"\x17jackpot_multiplier_ppms\x18\x1b \x03(\x03R\x15jackpotMultiplierPpms\x12:\n" +
	"\x1ajackpot_global_rtp_max_ppm\x18\x1c \x01(\x03R\x16jackpotGlobalRtpMaxPpm\x12A\n" +
	"\x1ejackpot_user_round_rtp_max_ppm\x18\x1d \x01(\x03R\x19jackpotUserRoundRtpMaxPpm\x12=\n" +
	"\x1cjackpot_user_48h_rtp_max_ppm\x18\x1e \x01(\x03R\x17jackpotUser48hRtpMaxPpm\x12A\n" +
	"\x1djackpot_spend_threshold_coins\x18\x1f \x01(\x03R\x1ajackpotSpendThresholdCoins\x12?\n" +
	"\x1dmax_jackpot_hits_per_user_day\x18  \x01(\x03R\x18maxJackpotHitsPerUserDay\x12*\n" +
	"\x11max_single_payout\x18! \x01(\x03R\x0fmaxSinglePayout\x123\n" +
	"\x16user_hourly_payout_cap\x18\" \x01(\x03R\x13userHourlyPayoutCap\x121\n" +
	"\x15user_daily_payout_cap\x18# \x01(\x03R\x12userDailyPayoutCap\x125\n" +
	"\x17device_daily_payout_cap\x18$ \x01(\x03R\x14deviceDailyPayoutCap\x123\n" +
	"\x16room_hourly_payout_cap\x18% \x01(\x03R\x13roomHourlyPayoutCap\x125\n" +
	"\x17anchor_daily_payout_cap\x18& \x01(\x03R\x14anchorDailyPayoutCap\x12:\n" +
	"\x1auser_24h_rtp_threshold_ppm\x18' \x01(\x03R\x16user24hRtpThresholdPpm\x12E\n" +
	" user_24h_ordinary_win_factor_ppm\x18( \x01(\x03R\x1buser24hOrdinaryWinFactorPpm\x12K\n" +
	"#v2_high_water_boost_threshold_coins\x18) \x01(\x03R\x1ev2HighWaterBoostThresholdCoins\x12A\n" +
	"\x1ev2_high_water_boost_factor_ppm\x18* \x01(\x03R\x19v2HighWaterBoostFactorPpm\x12G\n" +
	"!v2_high_water_boost_recover_coins\x18+ \x01(\x03R\x1cv2HighWaterBoostRecoverCoins\x12H\n" +
	"!jackpot_rate_limit_window_minutes\x18, \x01(\x03R\x1djackpotRateLimitWindowMinutes\x12<\n" +
	"\x1bmax_jackpot_hits_per_window\x18- \x01(\x03R\x17maxJackpotHitsPerWindow\"\xcd\x01\n" +
	"\x15CheckLuckyGiftRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\x03R\x06userId\x12\x17\n" +
	"\aroom_id\x18\x03 \x01(\tR\x06roomId\x12\x17\n" +
	"\agift_id\x18\x04 \x01(\tR\x06giftId\x12\x17\n" +
	"\apool_id\x18\x05 \x01(\tR\x06poolId\x12\x1b\n" +
	"\tdevice_id\x18\x06 \x01(\tR\bdeviceId\"\xb8\x02\n" +
	"\x16CheckLuckyGiftResponse\x12\x18\n" +
	"\aenabled\x18\x01 \x01(\bR\aenabled\x12\x16\n" +
	"\x06reason\x18\x02 \x01(\tR\x06reason\x12\x17\n" +
	"\agift_id\x18\x03 \x01(\tR\x06giftId\x12\x1d\n" +
	"\n" +
	"gift_price\x18\x04 \x01(\x03R\tgiftPrice\x12!\n" +
	"\frule_version\x18\x05 \x01(\x03R\vruleVersion\x12$\n" +
	"\x0etarget_rtp_ppm\x18\x06 \x01(\x03R\ftargetRtpPpm\x12'\n" +
	"\x0fexperience_pool\x18\a \x01(\tR\x0eexperiencePool\x12\x17\n" +
	"\apool_id\x18\b \x01(\tR\x06poolId\x12)\n" +
	"\x10strategy_version\x18\t \x01(\tR\x0fstrategyVersion\"\xc4\a\n" +
	"\x13LuckyGiftDrawResult\x12\x17\n" +
	"\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" +
	"\n" +
	"command_id\x18\x02 \x01(\tR\tcommandId\x12\x17\n" +
	"\agift_id\x18\x03 \x01(\tR\x06giftId\x12!\n" +
	"\frule_version\x18\x04 \x01(\x03R\vruleVersion\x12'\n" +
	"\x0fexperience_pool\x18\x05 \x01(\tR\x0eexperiencePool\x12(\n" +
	"\x10selected_tier_id\x18\x06 \x01(\tR\x0eselectedTierId\x12*\n" +
	"\x11base_reward_coins\x18\a \x01(\x03R\x0fbaseRewardCoins\x124\n" +
	"\x16effective_reward_coins\x18\b \x01(\x03R\x14effectiveRewardCoins\x12#\n" +
	"\rreward_status\x18\t \x01(\tR\frewardStatus\x12(\n" +
	"\x10rtp_window_index\x18\n" +
	" \x01(\x03R\x0ertpWindowIndex\x121\n" +
	"\x15gift_rtp_window_index\x18\v \x01(\x03R\x12giftRtpWindowIndex\x12-\n" +
	"\x13global_base_rtp_ppm\x18\f \x01(\x03R\x10globalBaseRtpPpm\x12)\n" +
	"\x11gift_base_rtp_ppm\x18\r \x01(\x03R\x0egiftBaseRtpPpm\x12%\n" +
	"\x0estage_feedback\x18\x0e \x01(\bR\rstageFeedback\x12'\n" +
	"\x0fhigh_multiplier\x18\x0f \x01(\bR\x0ehighMultiplier\x12\"\n" +
	"\rcreated_at_ms\x18\x10 \x01(\x03R\vcreatedAtMs\x12\x17\n" +
	"\apool_id\x18\x11 \x01(\tR\x06poolId\x12%\n" +
	"\x0emultiplier_ppm\x18\x12 \x01(\x03R\rmultiplierPpm\x122\n" +
	"\x15wallet_transaction_id\x18\x13 \x01(\tR\x13walletTransactionId\x12,\n" +
	"\x12coin_balance_after\x18\x14 \x01(\x03R\x10coinBalanceAfter\x12\x17\n" +
	"\auser_id\x18\x15 \x01(\x03R\x06userId\x12(\n" +
	"\x10external_user_id\x18\x16 \x01(\tR\x0eexternalUserId\x12\x19\n" +
	"\bapp_code\x18\x17 \x01(\tR\aappCode\x124\n" +
	"\x04hits\x18\x18 \x03(\v2 .hyapp.luckygift.v1.LuckyGiftHitR\x04hits\"_\n" +
	"\x1bExecuteLuckyGiftDrawRequest\x12@\n" +
	"\n" +
	"lucky_gift\x18\x01 \x01(\v2!.hyapp.luckygift.v1.LuckyGiftMetaR\tluckyGift\"_\n" +
	"\x1cExecuteLuckyGiftDrawResponse\x12?\n" +
	"\x06result\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftDrawResultR\x06result\"f\n" +
	" BatchExecuteLuckyGiftDrawRequest\x12B\n" +
	"\vlucky_gifts\x18\x01 \x03(\v2!.hyapp.luckygift.v1.LuckyGiftMetaR\n" +
	"luckyGifts\"f\n" +
	"!BatchExecuteLuckyGiftDrawResponse\x12A\n" +
	"\aresults\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftDrawResultR\aresults\"\xdd\x03\n" +
	"\x17ExternalGiftDrawRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x19\n" +
	"\bapp_code\x18\x03 \x01(\tR\aappCode\x12(\n" +
	"\x10external_user_id\x18\x04 \x01(\tR\x0eexternalUserId\x12\x1d\n" +
	"\n" +
	"request_id\x18\x05 \x01(\tR\trequestId\x12\x1d\n" +
	"\n" +
	"gift_count\x18\x06 \x01(\x03R\tgiftCount\x12\x1f\n" +
	"\vunit_amount\x18\a \x01(\x03R\n" +
	"unitAmount\x12!\n" +
	"\ftotal_amount\x18\b \x01(\x03R\vtotalAmount\x12\x1a\n" +
	"\bcurrency\x18\t \x01(\tR\bcurrency\x12\x1c\n" +
	"\n" +
	"paid_at_ms\x18\n" +
	" \x01(\x03R\bpaidAtMs\x12#\n" +
	"\rmetadata_json\x18\v \x01(\tR\fmetadataJson\x12\x17\n" +
	"\apool_id\x18\f \x01(\tR\x06poolId\x12\x1b\n" +
	"\tdevice_id\x18\r \x01(\tR\bdeviceId\x121\n" +
	"\x15user_registered_at_ms\x18\x0e \x01(\x03R\x12userRegisteredAtMs\"\xb2\x03\n" +
	"\x18ExternalGiftDrawResponse\x12\x17\n" +
	"\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" +
	"\n" +
	"request_id\x18\x02 \x01(\tR\trequestId\x12\x19\n" +
	"\bapp_code\x18\x04 \x01(\tR\aappCode\x12(\n" +
	"\x10external_user_id\x18\x05 \x01(\tR\x0eexternalUserId\x12\x1d\n" +
	"\n" +
	"gift_count\x18\x06 \x01(\x03R\tgiftCount\x12\x1f\n" +
	"\vunit_amount\x18\a \x01(\x03R\n" +
	"unitAmount\x12!\n" +
	"\ftotal_amount\x18\b \x01(\x03R\vtotalAmount\x12#\n" +
	"\rreward_amount\x18\t \x01(\x03R\frewardAmount\x12%\n" +
	"\x0emultiplier_ppm\x18\n" +
	" \x01(\x03R\rmultiplierPpm\x12#\n" +
	"\rreward_status\x18\v \x01(\tR\frewardStatus\x12!\n" +
	"\frule_version\x18\f \x01(\x03R\vruleVersion\x12\"\n" +
	"\rcreated_at_ms\x18\r \x01(\x03R\vcreatedAtMs\"i\n" +
	"\x19GetLuckyGiftConfigRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\"]\n" +
	"\x1aGetLuckyGiftConfigResponse\x12?\n" +
	"\x06config\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\"\xc0\x01\n" +
	"\x1cUpsertLuckyGiftConfigRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12?\n" +
	"\x06config\x18\x02 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\x12*\n" +
	"\x11operator_admin_id\x18\x03 \x01(\x03R\x0foperatorAdminId\"`\n" +
	"\x1dUpsertLuckyGiftConfigResponse\x12?\n" +
	"\x06config\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\"R\n" +
	"\x1bListLuckyGiftConfigsRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\"a\n" +
	"\x1cListLuckyGiftConfigsResponse\x12A\n" +
	"\aconfigs\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\aconfigs\"r\n" +
	"\"ListLuckyGiftConfigVersionsRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\"h\n" +
	"#ListLuckyGiftConfigVersionsResponse\x12A\n" +
	"\aconfigs\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\aconfigs\"\xca\x01\n" +
	"\x1eRollbackLuckyGiftConfigRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12.\n" +
	"\x13target_rule_version\x18\x03 \x01(\x03R\x11targetRuleVersion\x12*\n" +
	"\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"\x92\x01\n" +
	"\x1fRollbackLuckyGiftConfigResponse\x12.\n" +
	"\x13source_rule_version\x18\x01 \x01(\x03R\x11sourceRuleVersion\x12?\n" +
	"\x06config\x18\x02 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x06config\"\xcc\x02\n" +
	"\x19ListLuckyGiftDrawsRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\agift_id\x18\x02 \x01(\tR\x06giftId\x12\x17\n" +
	"\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x17\n" +
	"\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x16\n" +
	"\x06status\x18\x05 \x01(\tR\x06status\x12\x12\n" +
	"\x04page\x18\x06 \x01(\x05R\x04page\x12\x1b\n" +
	"\tpage_size\x18\a \x01(\x05R\bpageSize\x12\x17\n" +
	"\apool_id\x18\b \x01(\tR\x06poolId\x12(\n" +
	"\x10external_user_id\x18\n" +
	" \x01(\tR\x0eexternalUserId\x12#\n" +
	"\rexternal_only\x18\v \x01(\bR\fexternalOnly\"q\n" +
	"\x1aListLuckyGiftDrawsResponse\x12=\n" +
	"\x05draws\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftDrawResultR\x05draws\x12\x14\n" +
	"\x05total\x18\x02 \x01(\x03R\x05total\"\xaf\x03\n" +
	"\x14LuckyGiftDrawSummary\x12\x17\n" +
	"\apool_id\x18\x01 \x01(\tR\x06poolId\x12\x1f\n" +
	"\vtotal_draws\x18\x02 \x01(\x03R\n" +
	"totalDraws\x12!\n" +
	"\funique_users\x18\x03 \x01(\x03R\vuniqueUsers\x12!\n" +
	"\funique_rooms\x18\x04 \x01(\x03R\vuniqueRooms\x12*\n" +
	"\x11total_spent_coins\x18\x05 \x01(\x03R\x0ftotalSpentCoins\x12,\n" +
	"\x12total_reward_coins\x18\x06 \x01(\x03R\x10totalRewardCoins\x12*\n" +
	"\x11base_reward_coins\x18\a \x01(\x03R\x0fbaseRewardCoins\x12$\n" +
	"\x0eactual_rtp_ppm\x18\b \x01(\x03R\factualRtpPpm\x12#\n" +
	"\rpending_draws\x18\t \x01(\x03R\fpendingDraws\x12#\n" +
	"\rgranted_draws\x18\n" +
	" \x01(\x03R\fgrantedDraws\x12!\n" +
	"\ffailed_draws\x18\v \x01(\x03R\vfailedDraws\"\xbf\x03\n" +
	"\x14LuckyGiftPoolBalance\x12\x19\n" +
	"\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12\x18\n" +
	"\abalance\x18\x03 \x01(\x03R\abalance\x12#\n" +
	"\rreserve_floor\x18\x04 \x01(\x03R\freserveFloor\x12+\n" +
	"\x11available_balance\x18\x05 \x01(\x03R\x10availableBalance\x12\x19\n" +
	"\btotal_in\x18\x06 \x01(\x03R\atotalIn\x12\x1b\n" +
	"\ttotal_out\x18\a \x01(\x03R\btotalOut\x12\"\n" +
	"\fmaterialized\x18\b \x01(\bR\fmaterialized\x12\"\n" +
	"\rupdated_at_ms\x18\t \x01(\x03R\vupdatedAtMs\x12)\n" +
	"\x10strategy_version\x18\n" +
	" \x01(\tR\x0fstrategyVersion\x12.\n" +
	"\x13manual_credit_total\x18\v \x01(\x03R\x11manualCreditTotal\x12,\n" +
	"\x12manual_debit_total\x18\f \x01(\x03R\x10manualDebitTotal\"\xa0\x02\n" +
	"\x1eGetLuckyGiftDrawSummaryRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\agift_id\x18\x02 \x01(\tR\x06giftId\x12\x17\n" +
	"\auser_id\x18\x03 \x01(\x03R\x06userId\x12\x17\n" +
	"\aroom_id\x18\x04 \x01(\tR\x06roomId\x12\x16\n" +
	"\x06status\x18\x05 \x01(\tR\x06status\x12\x17\n" +
	"\apool_id\x18\x06 \x01(\tR\x06poolId\x12(\n" +
	"\x10external_user_id\x18\b \x01(\tR\x0eexternalUserId\x12#\n" +
	"\rexternal_only\x18\t \x01(\bR\fexternalOnly\"e\n" +
	"\x1fGetLuckyGiftDrawSummaryResponse\x12B\n" +
	"\asummary\x18\x01 \x01(\v2(.hyapp.luckygift.v1.LuckyGiftDrawSummaryR\asummary\"\x9b\x01\n" +
	" ListLuckyGiftPoolBalancesRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12)\n" +
	"\x10strategy_version\x18\x03 \x01(\tR\x0fstrategyVersion\"c\n" +
	"!ListLuckyGiftPoolBalancesResponse\x12>\n" +
	"\x05pools\x18\x01 \x03(\v2(.hyapp.luckygift.v1.LuckyGiftPoolBalanceR\x05pools\"J\n" +
	"\x1bLuckyGiftExperimentOverride\x12\x19\n" +
	"\buser_key\x18\x01 \x01(\tR\auserKey\x12\x10\n" +
	"\x03arm\x18\x02 \x01(\tR\x03arm\"\xc1\x02\n" +
	"\x1bLuckyGiftExperimentArmStats\x12\x10\n" +
	"\x03arm\x18\x01 \x01(\tR\x03arm\x12!\n" +
	"\frule_version\x18\x02 \x01(\x03R\vruleVersion\x12)\n" +
	"\x10strategy_version\x18\x03 \x01(\tR\x0fstrategyVersion\x12\x1f\n" +
	"\vtotal_draws\x18\x04 \x01(\x03R\n" +
	"totalDraws\x12!\n" +
	"\funique_users\x18\x05 \x01(\x03R\vuniqueUsers\x12*\n" +
	"\x11total_spent_coins\x18\x06 \x01(\x03R\x0ftotalSpentCoins\x12,\n" +
	"\x12total_reward_coins\x18\a \x01(\x03R\x10totalRewardCoins\x12$\n" +
	"\x0eactual_rtp_ppm\x18\b \x01(\x03R\factualRtpPpm\"\x88\x06\n" +
	"\x13LuckyGiftExperiment\x12\x19\n" +
	"\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12#\n" +
	"\rexperiment_id\x18\x03 \x01(\tR\fexperimentId\x12\x12\n" +
	"\x04name\x18\x04 \x01(\tR\x04name\x120\n" +
	"\x14control_rule_version\x18\x05 \x01(\x03R\x12controlRuleVersion\x124\n" +
	"\x16treatment_rule_version\x18\x06 \x01(\x03R\x14treatmentRuleVersion\x122\n" +
	"\x15treatment_traffic_ppm\x18\a \x01(\x03R\x13treatmentTrafficPpm\x12\x1f\n" +
	"\vbucket_salt\x18\b \x01(\tR\n" +
	"bucketSalt\x12\x16\n" +
	"\x06status\x18\t \x01(\tR\x06status\x12\x1d\n" +
	"\n" +
	"winner_arm\x18\n" +
	" \x01(\tR\twinnerArm\x12.\n" +
	"\x13winner_rule_version\x18\v \x01(\x03R\x11winnerRuleVersion\x12,\n" +
	"\x12final_rule_version\x18\f \x01(\x03R\x10finalRuleVersion\x12-\n" +
	"\x13created_by_admin_id\x18\r \x01(\x03R\x10createdByAdminId\x12\"\n" +
	"\rstarted_at_ms\x18\x0e \x01(\x03R\vstartedAtMs\x12\x1e\n" +
	"\vended_at_ms\x18\x0f \x01(\x03R\tendedAtMs\x12\"\n" +
	"\rupdated_at_ms\x18\x10 \x01(\x03R\vupdatedAtMs\x12M\n" +
	"\toverrides\x18\x11 \x03(\v2/.hyapp.luckygift.v1.LuckyGiftExperimentOverrideR\toverrides\x12L\n" +
	"\tarm_stats\x18\x12 \x03(\v2/.hyapp.luckygift.v1.LuckyGiftExperimentArmStatsR\barmStats\"\xee\x02\n" +
	" CreateLuckyGiftExperimentRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x12\n" +
	"\x04name\x18\x02 \x01(\tR\x04name\x12R\n" +
	"\x10treatment_config\x18\x03 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x0ftreatmentConfig\x122\n" +
	"\x15treatment_traffic_ppm\x18\x04 \x01(\x03R\x13treatmentTrafficPpm\x12*\n" +
	"\x11operator_admin_id\x18\x05 \x01(\x03R\x0foperatorAdminId\x12M\n" +
	"\toverrides\x18\x06 \x03(\v2/.hyapp.luckygift.v1.LuckyGiftExperimentOverrideR\toverrides\"\xc0\x01\n" +
	"!CreateLuckyGiftExperimentResponse\x12G\n" +
	"\n" +
	"experiment\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftExperimentR\n" +
	"experiment\x12R\n" +
	"\x10treatment_config\x18\x02 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\x0ftreatmentConfig\"\xa6\x01\n" +
	"\x1fListLuckyGiftExperimentsRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12\x16\n" +
	"\x06status\x18\x03 \x01(\tR\x06status\x12\x1d\n" +
	"\n" +
	"with_stats\x18\x04 \x01(\bR\twithStats\"m\n" +
	" ListLuckyGiftExperimentsResponse\x12I\n" +
	"\vexperiments\x18\x01 \x03(\v2'.hyapp.luckygift.v1.LuckyGiftExperimentR\vexperiments\"\x93\x02\n" +
	" UpdateLuckyGiftExperimentRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12#\n" +
	"\rexperiment_id\x18\x02 \x01(\tR\fexperimentId\x127\n" +
	"\x15treatment_traffic_ppm\x18\x03 \x01(\x03H\x00R\x13treatmentTrafficPpm\x88\x01\x01\x12\x16\n" +
	"\x06status\x18\x04 \x01(\tR\x06status\x12*\n" +
	"\x11operator_admin_id\x18\x05 \x01(\x03R\x0foperatorAdminIdB\x18\n" +
	"\x16_treatment_traffic_ppm\"l\n" +
	"!UpdateLuckyGiftExperimentResponse\x12G\n" +
	"\n" +
	"experiment\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftExperimentR\n" +
	"experiment\"\x93\x02\n" +
	"&SetLuckyGiftExperimentOverridesRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12#\n" +
	"\rexperiment_id\x18\x02 \x01(\tR\fexperimentId\x12I\n" +
	"\aupserts\x18\x03 \x03(\v2/.hyapp.luckygift.v1.LuckyGiftExperimentOverrideR\aupserts\x12\x18\n" +
	"\aremoves\x18\x04 \x03(\tR\aremoves\x12*\n" +
	"\x11operator_admin_id\x18\x05 \x01(\x03R\x0foperatorAdminId\"r\n" +
	"'SetLuckyGiftExperimentOverridesResponse\x12G\n" +
	"\n" +
	"experiment\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftExperimentR\n" +
	"experiment\"\xc4\x01\n" +
	"\x1dEndLuckyGiftExperimentRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12#\n" +
	"\rexperiment_id\x18\x02 \x01(\tR\fexperimentId\x12\x1d\n" +
	"\n" +
	"winner_arm\x18\x03 \x01(\tR\twinnerArm\x12*\n" +
	"\x11operator_admin_id\x18\x04 \x01(\x03R\x0foperatorAdminId\"\xb5\x01\n" +
	"\x1eEndLuckyGiftExperimentResponse\x12G\n" +
	"\n" +
	"experiment\x18\x01 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftExperimentR\n" +
	"experiment\x12J\n" +
	"\ffinal_config\x18\x02 \x01(\v2'.hyapp.luckygift.v1.LuckyGiftRuleConfigR\vfinalConfig\"\xba\x01\n" +
	"\fLuckyGiftHit\x12\x1d\n" +
	"\n" +
	"gift_index\x18\x01 \x01(\x05R\tgiftIndex\x12\x17\n" +
	"\adraw_id\x18\x02 \x01(\tR\x06drawId\x12(\n" +
	"\x10selected_tier_id\x18\x03 \x01(\tR\x0eselectedTierId\x12%\n" +
	"\x0emultiplier_ppm\x18\x04 \x01(\x03R\rmultiplierPpm\x12!\n" +
	"\freward_coins\x18\x05 \x01(\x03R\vrewardCoins\"\xc6\x02\n" +
	"!AdjustLuckyGiftPoolBalanceRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12)\n" +
	"\x10strategy_version\x18\x03 \x01(\tR\x0fstrategyVersion\x12#\n" +
	"\radjustment_id\x18\x04 \x01(\tR\fadjustmentId\x12\x1c\n" +
	"\tdirection\x18\x05 \x01(\tR\tdirection\x12!\n" +
	"\famount_coins\x18\x06 \x01(\x03R\vamountCoins\x12\x16\n" +
	"\x06reason\x18\a \x01(\tR\x06reason\x12*\n" +
	"\x11operator_admin_id\x18\b \x01(\x03R\x0foperatorAdminId\"\x92\x03\n" +
	"\x17LuckyGiftPoolAdjustment\x12#\n" +
	"\radjustment_id\x18\x01 \x01(\tR\fadjustmentId\x12\x19\n" +
	"\bapp_code\x18\x02 \x01(\tR\aappCode\x12\x17\n" +
	"\apool_id\x18\x03 \x01(\tR\x06poolId\x12)\n" +
	"\x10strategy_version\x18\x04 \x01(\tR\x0fstrategyVersion\x12\x1c\n" +
	"\tdirection\x18\x05 \x01(\tR\tdirection\x12!\n" +
	"\famount_coins\x18\x06 \x01(\x03R\vamountCoins\x12\x16\n" +
	"\x06reason\x18\a \x01(\tR\x06reason\x12*\n" +
	"\x11operator_admin_id\x18\b \x01(\x03R\x0foperatorAdminId\x12%\n" +
	"\x0ebalance_before\x18\t \x01(\x03R\rbalanceBefore\x12#\n" +
	"\rbalance_after\x18\n" +
	" \x01(\x03R\fbalanceAfter\x12\"\n" +
	"\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\"\xdc\x01\n" +
	"\"AdjustLuckyGiftPoolBalanceResponse\x12K\n" +
	"\n" +
	"adjustment\x18\x01 \x01(\v2+.hyapp.luckygift.v1.LuckyGiftPoolAdjustmentR\n" +
	"adjustment\x12<\n" +
	"\x04pool\x18\x02 \x01(\v2(.hyapp.luckygift.v1.LuckyGiftPoolBalanceR\x04pool\x12+\n" +
	"\x11idempotent_replay\x18\x03 \x01(\bR\x10idempotentReplay\"\xc5\x01\n" +
	"\x1aLuckyGiftUserProfileWindow\x12\x14\n" +
	"\x05draws\x18\x01 \x01(\x03R\x05draws\x12\x1f\n" +
	"\vwager_coins\x18\x02 \x01(\x03R\n" +
	"wagerCoins\x12!\n" +
	"\fpayout_coins\x18\x03 \x01(\x03R\vpayoutCoins\x12\x1b\n" +
	"\tnet_coins\x18\x04 \x01(\x03R\bnetCoins\x12\x17\n" +
	"\artp_ppm\x18\x05 \x01(\x03R\x06rtpPpm\x12\x17\n" +
	"\ahas_rtp\x18\x06 \x01(\bR\x06hasRtp\"\xfd\r\n" +
	"\x14LuckyGiftUserProfile\x12\x19\n" +
	"\bapp_code\x18\x01 \x01(\tR\aappCode\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12#\n" +
	"\ridentity_type\x18\x03 \x01(\tR\fidentityType\x12(\n" +
	"\x10internal_user_id\x18\x04 \x01(\x03R\x0einternalUserId\x12(\n" +
	"\x10external_user_id\x18\x05 \x01(\tR\x0eexternalUserId\x12!\n" +
	"\frule_version\x18\x06 \x01(\x03R\vruleVersion\x12)\n" +
	"\x10strategy_version\x18\a \x01(\tR\x0fstrategyVersion\x12\x14\n" +
	"\x05stage\x18\b \x01(\tR\x05stage\x12\x1d\n" +
	"\n" +
	"paid_draws\x18\t \x01(\x03R\tpaidDraws\x12)\n" +
	"\x10equivalent_draws\x18\n" +
	" \x01(\x03R\x0fequivalentDraws\x12\x1f\n" +
	"\vloss_streak\x18\v \x01(\x03R\n" +
	"lossStreak\x12?\n" +
	"\x1cpending_spend_jackpot_tokens\x18\f \x01(\x03R\x19pendingSpendJackpotTokens\x12:\n" +
	"\x19guarantee_draws_remaining\x18\r \x01(\x03R\x17guaranteeDrawsRemaining\x12+\n" +
	"\x11downweight_active\x18\x0e \x01(\bR\x10downweightActive\x122\n" +
	"\x15downweight_factor_ppm\x18\x0f \x01(\x03R\x13downweightFactorPpm\x12I\n" +
	"\bone_hour\x18\x10 \x01(\v2..hyapp.luckygift.v1.LuckyGiftUserProfileWindowR\aoneHour\x12Z\n" +
	"\x11twenty_four_hours\x18\x11 \x01(\v2..hyapp.luckygift.v1.LuckyGiftUserProfileWindowR\x0ftwentyFourHours\x12Z\n" +
	"\x11forty_eight_hours\x18\x12 \x01(\v2..hyapp.luckygift.v1.LuckyGiftUserProfileWindowR\x0ffortyEightHours\x12J\n" +
	"\blifetime\x18\x13 \x01(\v2..hyapp.luckygift.v1.LuckyGiftUserProfileWindowR\blifetime\x12*\n" +
	"\x11base_reward_coins\x18\x14 \x01(\x03R\x0fbaseRewardCoins\x12,\n" +
	"\x12ordinary_win_count\x18\x15 \x01(\x03R\x10ordinaryWinCount\x12J\n" +
	"\"high_multiplier_ordinary_win_count\x18\x16 \x01(\x03R\x1ehighMultiplierOrdinaryWinCount\x12C\n" +
	"\x1ertp_compensation_jackpot_count\x18\x17 \x01(\x03R\x1brtpCompensationJackpotCount\x12C\n" +
	"\x1ecumulative_spend_jackpot_count\x18\x18 \x01(\x03R\x1bcumulativeSpendJackpotCount\x12.\n" +
	"\x13guarantee_hit_count\x18\x19 \x01(\x03R\x11guaranteeHitCount\x12&\n" +
	"\x0fzero_draw_count\x18\x1a \x01(\x03R\rzeroDrawCount\x12,\n" +
	"\x12granted_draw_count\x18\x1b \x01(\x03R\x10grantedDrawCount\x12,\n" +
	"\x12pending_draw_count\x18\x1c \x01(\x03R\x10pendingDrawCount\x12*\n" +
	"\x11failed_draw_count\x18\x1d \x01(\x03R\x0ffailedDrawCount\x12,\n" +
	"\x12max_multiplier_ppm\x18\x1e \x01(\x03R\x10maxMultiplierPpm\x12(\n" +
	"\x10max_reward_coins\x18\x1f \x01(\x03R\x0emaxRewardCoins\x12'\n" +
	"\x10first_draw_at_ms\x18  \x01(\x03R\rfirstDrawAtMs\x12%\n" +
	"\x0flast_draw_at_ms\x18! \x01(\x03R\flastDrawAtMs\x12(\n" +
	"\x10aggregated_at_ms\x18\" \x01(\x03R\x0eaggregatedAtMs\x12\x1e\n" +
	"\vdata_lag_ms\x18# \x01(\x03R\tdataLagMs\x12:\n" +
	"\x1auser_24h_rtp_threshold_ppm\x18$ \x01(\x03R\x16user24hRtpThresholdPpm\"\xa0\x03\n" +
	" ListLuckyGiftUserProfilesRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12#\n" +
	"\ridentity_type\x18\x03 \x01(\tR\fidentityType\x12(\n" +
	"\x10internal_user_id\x18\x04 \x01(\x03R\x0einternalUserId\x12(\n" +
	"\x10external_user_id\x18\x05 \x01(\tR\x0eexternalUserId\x12\x14\n" +
	"\x05stage\x18\x06 \x01(\tR\x05stage\x12\x16\n" +
	"\x06status\x18\a \x01(\tR\x06status\x12\x17\n" +
	"\asort_by\x18\b \x01(\tR\x06sortBy\x12%\n" +
	"\x0esort_direction\x18\t \x01(\tR\rsortDirection\x12\x12\n" +
	"\x04page\x18\n" +
	" \x01(\x05R\x04page\x12\x1b\n" +
	"\tpage_size\x18\v \x01(\x05R\bpageSize\x12\x16\n" +
	"\x06cursor\x18\f \x01(\tR\x06cursor\"\xe1\x01\n" +
	"!ListLuckyGiftUserProfilesResponse\x12D\n" +
	"\bprofiles\x18\x01 \x03(\v2(.hyapp.luckygift.v1.LuckyGiftUserProfileR\bprofiles\x12\x14\n" +
	"\x05total\x18\x02 \x01(\x03R\x05total\x12$\n" +
	"\x0esnapshot_at_ms\x18\x03 \x01(\x03R\fsnapshotAtMs\x12\x1f\n" +
	"\vnext_cursor\x18\x04 \x01(\tR\n" +
	"nextCursor\x12\x19\n" +
	"\bhas_more\x18\x05 \x01(\bR\ahasMore\"\xdd\x02\n" +
	"\x1eGetLuckyGiftUserProfileRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12#\n" +
	"\ridentity_type\x18\x03 \x01(\tR\fidentityType\x12(\n" +
	"\x10internal_user_id\x18\x04 \x01(\x03R\x0einternalUserId\x12(\n" +
	"\x10external_user_id\x18\x05 \x01(\tR\x0eexternalUserId\x12!\n" +
	"\fjackpot_page\x18\x06 \x01(\x05R\vjackpotPage\x12*\n" +
	"\x11jackpot_page_size\x18\a \x01(\x05R\x0fjackpotPageSize\x12%\n" +
	"\x0ejackpot_cursor\x18\b \x01(\tR\rjackpotCursor\"\xc2\x01\n" +
	"\x1bLuckyGiftUserMultiplierStat\x12\x19\n" +
	"\bhit_type\x18\x01 \x01(\tR\ahitType\x12%\n" +
	"\x0emultiplier_ppm\x18\x02 \x01(\x03R\rmultiplierPpm\x12\x1d\n" +
	"\n" +
	"draw_count\x18\x03 \x01(\x03R\tdrawCount\x12\x1f\n" +
	"\vwager_coins\x18\x04 \x01(\x03R\n" +
	"wagerCoins\x12!\n" +
	"\fpayout_coins\x18\x05 \x01(\x03R\vpayoutCoins\"\xfc\x01\n" +
	"\x1dLuckyGiftUserJackpotCondition\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12\x1c\n" +
	"\tnumerator\x18\x02 \x01(\x03R\tnumerator\x12 \n" +
	"\vdenominator\x18\x03 \x01(\x03R\vdenominator\x12\x1b\n" +
	"\tratio_ppm\x18\x04 \x01(\x03R\bratioPpm\x12\x1b\n" +
	"\tlimit_ppm\x18\x05 \x01(\x03R\blimitPpm\x12\x1d\n" +
	"\n" +
	"factor_ppm\x18\x06 \x01(\x03R\tfactorPpm\x12\x16\n" +
	"\x06passed\x18\a \x01(\bR\x06passed\x12\x16\n" +
	"\x06reason\x18\b \x01(\tR\x06reason\"\x8a\x04\n" +
	"\x17LuckyGiftUserJackpotHit\x12\x17\n" +
	"\adraw_id\x18\x01 \x01(\tR\x06drawId\x12\x1d\n" +
	"\n" +
	"request_id\x18\x02 \x01(\tR\trequestId\x12!\n" +
	"\frule_version\x18\x03 \x01(\x03R\vruleVersion\x12\x14\n" +
	"\x05stage\x18\x04 \x01(\tR\x05stage\x12\x1c\n" +
	"\tmechanism\x18\x05 \x01(\tR\tmechanism\x12\x1f\n" +
	"\vreason_code\x18\x06 \x01(\tR\n" +
	"reasonCode\x12%\n" +
	"\x0ereason_summary\x18\a \x01(\tR\rreasonSummary\x12\x17\n" +
	"\atier_id\x18\b \x01(\tR\x06tierId\x12%\n" +
	"\x0emultiplier_ppm\x18\t \x01(\x03R\rmultiplierPpm\x12\x1f\n" +
	"\vwager_coins\x18\n" +
	" \x01(\x03R\n" +
	"wagerCoins\x12!\n" +
	"\fpayout_coins\x18\v \x01(\x03R\vpayoutCoins\x12$\n" +
	"\x0eoccurred_at_ms\x18\f \x01(\x03R\foccurredAtMs\x12Q\n" +
	"\n" +
	"conditions\x18\r \x03(\v21.hyapp.luckygift.v1.LuckyGiftUserJackpotConditionR\n" +
	"conditions\x12\x1b\n" +
	"\tevent_key\x18\x0e \x01(\tR\beventKey\"\x9a\x04\n" +
	"\x1fGetLuckyGiftUserProfileResponse\x12B\n" +
	"\aprofile\x18\x01 \x01(\v2(.hyapp.luckygift.v1.LuckyGiftUserProfileR\aprofile\x12h\n" +
	"\x17multiplier_distribution\x18\x02 \x03(\v2/.hyapp.luckygift.v1.LuckyGiftUserMultiplierStatR\x16multiplierDistribution\x12N\n" +
	"\fjackpot_hits\x18\x03 \x03(\v2+.hyapp.luckygift.v1.LuckyGiftUserJackpotHitR\vjackpotHits\x12*\n" +
	"\x11jackpot_hit_total\x18\x04 \x01(\x03R\x0fjackpotHitTotal\x12$\n" +
	"\x0esnapshot_at_ms\x18\x05 \x01(\x03R\fsnapshotAtMs\x12!\n" +
	"\fjackpot_page\x18\x06 \x01(\x05R\vjackpotPage\x12*\n" +
	"\x11jackpot_page_size\x18\a \x01(\x05R\x0fjackpotPageSize\x12.\n" +
	"\x13next_jackpot_cursor\x18\b \x01(\tR\x11nextJackpotCursor\x12(\n" +
	"\x10jackpot_has_more\x18\t \x01(\bR\x0ejackpotHasMore\"\xea\x01\n" +
	"\x1eListLuckyGiftDailyStatsRequest\x123\n" +
	"\x04meta\x18\x01 \x01(\v2\x1f.hyapp.luckygift.v1.RequestMetaR\x04meta\x12\x17\n" +
	"\apool_id\x18\x02 \x01(\tR\x06poolId\x12)\n" +
	"\x10strategy_version\x18\x03 \x01(\tR\x0fstrategyVersion\x12\x19\n" +
	"\bstart_ms\x18\x04 \x01(\x03R\astartMs\x12\x15\n" +
	"\x06end_ms\x18\x05 \x01(\x03R\x05endMs\x12\x1d\n" +
	"\n" +
	"region_ids\x18\x06 \x03(\x03R\tregionIds\"\xbe\x01\n" +
	"\x12LuckyGiftDailyStat\x12\x19\n" +
	"\bstat_day\x18\x01 \x01(\tR\astatDay\x12\x1d\n" +
	"\n" +
	"draw_count\x18\x02 \x01(\x03R\tdrawCount\x12#\n" +
	"\rturnover_coin\x18\x03 \x01(\x03R\fturnoverCoin\x12\x1f\n" +
	"\vpayout_coin\x18\x04 \x01(\x03R\n" +
	"payoutCoin\x12(\n" +
	"\x10base_reward_coin\x18\x05 \x01(\x03R\x0ebaseRewardCoin\"_\n" +
	"\x1fListLuckyGiftDailyStatsResponse\x12<\n" +
	"\x05stats\x18\x01 \x03(\v2&.hyapp.luckygift.v1.LuckyGiftDailyStatR\x05stats2\xf7\x03\n" +
	"\x10LuckyGiftService\x12g\n" +
	"\x0eCheckLuckyGift\x12).hyapp.luckygift.v1.CheckLuckyGiftRequest\x1a*.hyapp.luckygift.v1.CheckLuckyGiftResponse\x12y\n" +
	"\x14ExecuteLuckyGiftDraw\x12/.hyapp.luckygift.v1.ExecuteLuckyGiftDrawRequest\x1a0.hyapp.luckygift.v1.ExecuteLuckyGiftDrawResponse\x12\x88\x01\n" +
	"\x19BatchExecuteLuckyGiftDraw\x124.hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawRequest\x1a5.hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawResponse\x12t\n" +
	"\x17ExecuteExternalGiftDraw\x12+.hyapp.luckygift.v1.ExternalGiftDrawRequest\x1a,.hyapp.luckygift.v1.ExternalGiftDrawResponse2\xff\x11\n" +
	"\x15AdminLuckyGiftService\x12s\n" +
	"\x12GetLuckyGiftConfig\x12-.hyapp.luckygift.v1.GetLuckyGiftConfigRequest\x1a..hyapp.luckygift.v1.GetLuckyGiftConfigResponse\x12|\n" +
	"\x15UpsertLuckyGiftConfig\x120.hyapp.luckygift.v1.UpsertLuckyGiftConfigRequest\x1a1.hyapp.luckygift.v1.UpsertLuckyGiftConfigResponse\x12y\n" +
	"\x14ListLuckyGiftConfigs\x12/.hyapp.luckygift.v1.ListLuckyGiftConfigsRequest\x1a0.hyapp.luckygift.v1.ListLuckyGiftConfigsResponse\x12\x8e\x01\n" +
	"\x1bListLuckyGiftConfigVersions\x126.hyapp.luckygift.v1.ListLuckyGiftConfigVersionsRequest\x1a7.hyapp.luckygift.v1.ListLuckyGiftConfigVersionsResponse\x12\x82\x01\n" +
	"\x17RollbackLuckyGiftConfig\x122.hyapp.luckygift.v1.RollbackLuckyGiftConfigRequest\x1a3.hyapp.luckygift.v1.RollbackLuckyGiftConfigResponse\x12s\n" +
	"\x12ListLuckyGiftDraws\x12-.hyapp.luckygift.v1.ListLuckyGiftDrawsRequest\x1a..hyapp.luckygift.v1.ListLuckyGiftDrawsResponse\x12\x82\x01\n" +
	"\x17GetLuckyGiftDrawSummary\x122.hyapp.luckygift.v1.GetLuckyGiftDrawSummaryRequest\x1a3.hyapp.luckygift.v1.GetLuckyGiftDrawSummaryResponse\x12\x88\x01\n" +
	"\x19ListLuckyGiftPoolBalances\x124.hyapp.luckygift.v1.ListLuckyGiftPoolBalancesRequest\x1a5.hyapp.luckygift.v1.ListLuckyGiftPoolBalancesResponse\x12\x8b\x01\n" +
	"\x1aAdjustLuckyGiftPoolBalance\x125.hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceRequest\x1a6.hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceResponse\x12\x88\x01\n" +
	"\x19CreateLuckyGiftExperiment\x124.hyapp.luckygift.v1.CreateLuckyGiftExperimentRequest\x1a5.hyapp.luckygift.v1.CreateLuckyGiftExperimentResponse\x12\x85\x01\n" +
	"\x18ListLuckyGiftExperiments\x123.hyapp.luckygift.v1.ListLuckyGiftExperimentsRequest\x1a4.hyapp.luckygift.v1.ListLuckyGiftExperimentsResponse\x12\x88\x01\n" +
	"\x19UpdateLuckyGiftExperiment\x124.hyapp.luckygift.v1.UpdateLuckyGiftExperimentRequest\x1a5.hyapp.luckygift.v1.UpdateLuckyGiftExperimentResponse\x12\x9a\x01\n" +
	"\x1fSetLuckyGiftExperimentOverrides\x12:.hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesRequest\x1a;.hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesResponse\x12\x7f\n" +
	"\x16EndLuckyGiftExperiment\x121.hyapp.luckygift.v1.EndLuckyGiftExperimentRequest\x1a2.hyapp.luckygift.v1.EndLuckyGiftExperimentResponse\x12\x88\x01\n" +
	"\x19ListLuckyGiftUserProfiles\x124.hyapp.luckygift.v1.ListLuckyGiftUserProfilesRequest\x1a5.hyapp.luckygift.v1.ListLuckyGiftUserProfilesResponse\x12\x82\x01\n" +
	"\x17GetLuckyGiftUserProfile\x122.hyapp.luckygift.v1.GetLuckyGiftUserProfileRequest\x1a3.hyapp.luckygift.v1.GetLuckyGiftUserProfileResponse\x12\x82\x01\n" +
	"\x17ListLuckyGiftDailyStats\x122.hyapp.luckygift.v1.ListLuckyGiftDailyStatsRequest\x1a3.hyapp.luckygift.v1.ListLuckyGiftDailyStatsResponseB0Z.hyapp.local/api/proto/luckygift/v1;luckygiftv1b\x06proto3"

var (
	file_proto_luckygift_v1_luckygift_proto_rawDescOnce sync.Once
	file_proto_luckygift_v1_luckygift_proto_rawDescData []byte
)

func file_proto_luckygift_v1_luckygift_proto_rawDescGZIP() []byte {
	file_proto_luckygift_v1_luckygift_proto_rawDescOnce.Do(func() {
		file_proto_luckygift_v1_luckygift_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_luckygift_v1_luckygift_proto_rawDesc), len(file_proto_luckygift_v1_luckygift_proto_rawDesc)))
	})
	return file_proto_luckygift_v1_luckygift_proto_rawDescData
}

var file_proto_luckygift_v1_luckygift_proto_msgTypes = make([]protoimpl.MessageInfo, 61)
var file_proto_luckygift_v1_luckygift_proto_goTypes = []any{
	(*RequestMeta)(nil),                             // 0: hyapp.luckygift.v1.RequestMeta
	(*LuckyGiftMeta)(nil),                           // 1: hyapp.luckygift.v1.LuckyGiftMeta
	(*LuckyGiftRuleTier)(nil),                       // 2: hyapp.luckygift.v1.LuckyGiftRuleTier
	(*LuckyGiftRuleStage)(nil),                      // 3: hyapp.luckygift.v1.LuckyGiftRuleStage
	(*LuckyGiftRuleConfig)(nil),                     // 4: hyapp.luckygift.v1.LuckyGiftRuleConfig
	(*CheckLuckyGiftRequest)(nil),                   // 5: hyapp.luckygift.v1.CheckLuckyGiftRequest
	(*CheckLuckyGiftResponse)(nil),                  // 6: hyapp.luckygift.v1.CheckLuckyGiftResponse
	(*LuckyGiftDrawResult)(nil),                     // 7: hyapp.luckygift.v1.LuckyGiftDrawResult
	(*ExecuteLuckyGiftDrawRequest)(nil),             // 8: hyapp.luckygift.v1.ExecuteLuckyGiftDrawRequest
	(*ExecuteLuckyGiftDrawResponse)(nil),            // 9: hyapp.luckygift.v1.ExecuteLuckyGiftDrawResponse
	(*BatchExecuteLuckyGiftDrawRequest)(nil),        // 10: hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawRequest
	(*BatchExecuteLuckyGiftDrawResponse)(nil),       // 11: hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawResponse
	(*ExternalGiftDrawRequest)(nil),                 // 12: hyapp.luckygift.v1.ExternalGiftDrawRequest
	(*ExternalGiftDrawResponse)(nil),                // 13: hyapp.luckygift.v1.ExternalGiftDrawResponse
	(*GetLuckyGiftConfigRequest)(nil),               // 14: hyapp.luckygift.v1.GetLuckyGiftConfigRequest
	(*GetLuckyGiftConfigResponse)(nil),              // 15: hyapp.luckygift.v1.GetLuckyGiftConfigResponse
	(*UpsertLuckyGiftConfigRequest)(nil),            // 16: hyapp.luckygift.v1.UpsertLuckyGiftConfigRequest
	(*UpsertLuckyGiftConfigResponse)(nil),           // 17: hyapp.luckygift.v1.UpsertLuckyGiftConfigResponse
	(*ListLuckyGiftConfigsRequest)(nil),             // 18: hyapp.luckygift.v1.ListLuckyGiftConfigsRequest
	(*ListLuckyGiftConfigsResponse)(nil),            // 19: hyapp.luckygift.v1.ListLuckyGiftConfigsResponse
	(*ListLuckyGiftConfigVersionsRequest)(nil),      // 20: hyapp.luckygift.v1.ListLuckyGiftConfigVersionsRequest
	(*ListLuckyGiftConfigVersionsResponse)(nil),     // 21: hyapp.luckygift.v1.ListLuckyGiftConfigVersionsResponse
	(*RollbackLuckyGiftConfigRequest)(nil),          // 22: hyapp.luckygift.v1.RollbackLuckyGiftConfigRequest
	(*RollbackLuckyGiftConfigResponse)(nil),         // 23: hyapp.luckygift.v1.RollbackLuckyGiftConfigResponse
	(*ListLuckyGiftDrawsRequest)(nil),               // 24: hyapp.luckygift.v1.ListLuckyGiftDrawsRequest
	(*ListLuckyGiftDrawsResponse)(nil),              // 25: hyapp.luckygift.v1.ListLuckyGiftDrawsResponse
	(*LuckyGiftDrawSummary)(nil),                    // 26: hyapp.luckygift.v1.LuckyGiftDrawSummary
	(*LuckyGiftPoolBalance)(nil),                    // 27: hyapp.luckygift.v1.LuckyGiftPoolBalance
	(*GetLuckyGiftDrawSummaryRequest)(nil),          // 28: hyapp.luckygift.v1.GetLuckyGiftDrawSummaryRequest
	(*GetLuckyGiftDrawSummaryResponse)(nil),         // 29: hyapp.luckygift.v1.GetLuckyGiftDrawSummaryResponse
	(*ListLuckyGiftPoolBalancesRequest)(nil),        // 30: hyapp.luckygift.v1.ListLuckyGiftPoolBalancesRequest
	(*ListLuckyGiftPoolBalancesResponse)(nil),       // 31: hyapp.luckygift.v1.ListLuckyGiftPoolBalancesResponse
	(*LuckyGiftExperimentOverride)(nil),             // 32: hyapp.luckygift.v1.LuckyGiftExperimentOverride
	(*LuckyGiftExperimentArmStats)(nil),             // 33: hyapp.luckygift.v1.LuckyGiftExperimentArmStats
	(*LuckyGiftExperiment)(nil),                     // 34: hyapp.luckygift.v1.LuckyGiftExperiment
	(*CreateLuckyGiftExperimentRequest)(nil),        // 35: hyapp.luckygift.v1.CreateLuckyGiftExperimentRequest
	(*CreateLuckyGiftExperimentResponse)(nil),       // 36: hyapp.luckygift.v1.CreateLuckyGiftExperimentResponse
	(*ListLuckyGiftExperimentsRequest)(nil),         // 37: hyapp.luckygift.v1.ListLuckyGiftExperimentsRequest
	(*ListLuckyGiftExperimentsResponse)(nil),        // 38: hyapp.luckygift.v1.ListLuckyGiftExperimentsResponse
	(*UpdateLuckyGiftExperimentRequest)(nil),        // 39: hyapp.luckygift.v1.UpdateLuckyGiftExperimentRequest
	(*UpdateLuckyGiftExperimentResponse)(nil),       // 40: hyapp.luckygift.v1.UpdateLuckyGiftExperimentResponse
	(*SetLuckyGiftExperimentOverridesRequest)(nil),  // 41: hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesRequest
	(*SetLuckyGiftExperimentOverridesResponse)(nil), // 42: hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesResponse
	(*EndLuckyGiftExperimentRequest)(nil),           // 43: hyapp.luckygift.v1.EndLuckyGiftExperimentRequest
	(*EndLuckyGiftExperimentResponse)(nil),          // 44: hyapp.luckygift.v1.EndLuckyGiftExperimentResponse
	(*LuckyGiftHit)(nil),                            // 45: hyapp.luckygift.v1.LuckyGiftHit
	(*AdjustLuckyGiftPoolBalanceRequest)(nil),       // 46: hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceRequest
	(*LuckyGiftPoolAdjustment)(nil),                 // 47: hyapp.luckygift.v1.LuckyGiftPoolAdjustment
	(*AdjustLuckyGiftPoolBalanceResponse)(nil),      // 48: hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceResponse
	(*LuckyGiftUserProfileWindow)(nil),              // 49: hyapp.luckygift.v1.LuckyGiftUserProfileWindow
	(*LuckyGiftUserProfile)(nil),                    // 50: hyapp.luckygift.v1.LuckyGiftUserProfile
	(*ListLuckyGiftUserProfilesRequest)(nil),        // 51: hyapp.luckygift.v1.ListLuckyGiftUserProfilesRequest
	(*ListLuckyGiftUserProfilesResponse)(nil),       // 52: hyapp.luckygift.v1.ListLuckyGiftUserProfilesResponse
	(*GetLuckyGiftUserProfileRequest)(nil),          // 53: hyapp.luckygift.v1.GetLuckyGiftUserProfileRequest
	(*LuckyGiftUserMultiplierStat)(nil),             // 54: hyapp.luckygift.v1.LuckyGiftUserMultiplierStat
	(*LuckyGiftUserJackpotCondition)(nil),           // 55: hyapp.luckygift.v1.LuckyGiftUserJackpotCondition
	(*LuckyGiftUserJackpotHit)(nil),                 // 56: hyapp.luckygift.v1.LuckyGiftUserJackpotHit
	(*GetLuckyGiftUserProfileResponse)(nil),         // 57: hyapp.luckygift.v1.GetLuckyGiftUserProfileResponse
	(*ListLuckyGiftDailyStatsRequest)(nil),          // 58: hyapp.luckygift.v1.ListLuckyGiftDailyStatsRequest
	(*LuckyGiftDailyStat)(nil),                      // 59: hyapp.luckygift.v1.LuckyGiftDailyStat
	(*ListLuckyGiftDailyStatsResponse)(nil),         // 60: hyapp.luckygift.v1.ListLuckyGiftDailyStatsResponse
}
var file_proto_luckygift_v1_luckygift_proto_depIdxs = []int32{
	0,  // 0: hyapp.luckygift.v1.LuckyGiftMeta.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	2,  // 1: hyapp.luckygift.v1.LuckyGiftRuleStage.tiers:type_name -> hyapp.luckygift.v1.LuckyGiftRuleTier
	3,  // 2: hyapp.luckygift.v1.LuckyGiftRuleConfig.stages:type_name -> hyapp.luckygift.v1.LuckyGiftRuleStage
	0,  // 3: hyapp.luckygift.v1.CheckLuckyGiftRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	45, // 4: hyapp.luckygift.v1.LuckyGiftDrawResult.hits:type_name -> hyapp.luckygift.v1.LuckyGiftHit
	1,  // 5: hyapp.luckygift.v1.ExecuteLuckyGiftDrawRequest.lucky_gift:type_name -> hyapp.luckygift.v1.LuckyGiftMeta
	7,  // 6: hyapp.luckygift.v1.ExecuteLuckyGiftDrawResponse.result:type_name -> hyapp.luckygift.v1.LuckyGiftDrawResult
	1,  // 7: hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawRequest.lucky_gifts:type_name -> hyapp.luckygift.v1.LuckyGiftMeta
	7,  // 8: hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawResponse.results:type_name -> hyapp.luckygift.v1.LuckyGiftDrawResult
	0,  // 9: hyapp.luckygift.v1.ExternalGiftDrawRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	0,  // 10: hyapp.luckygift.v1.GetLuckyGiftConfigRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	4,  // 11: hyapp.luckygift.v1.GetLuckyGiftConfigResponse.config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 12: hyapp.luckygift.v1.UpsertLuckyGiftConfigRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	4,  // 13: hyapp.luckygift.v1.UpsertLuckyGiftConfigRequest.config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	4,  // 14: hyapp.luckygift.v1.UpsertLuckyGiftConfigResponse.config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 15: hyapp.luckygift.v1.ListLuckyGiftConfigsRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	4,  // 16: hyapp.luckygift.v1.ListLuckyGiftConfigsResponse.configs:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 17: hyapp.luckygift.v1.ListLuckyGiftConfigVersionsRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	4,  // 18: hyapp.luckygift.v1.ListLuckyGiftConfigVersionsResponse.configs:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 19: hyapp.luckygift.v1.RollbackLuckyGiftConfigRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	4,  // 20: hyapp.luckygift.v1.RollbackLuckyGiftConfigResponse.config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 21: hyapp.luckygift.v1.ListLuckyGiftDrawsRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	7,  // 22: hyapp.luckygift.v1.ListLuckyGiftDrawsResponse.draws:type_name -> hyapp.luckygift.v1.LuckyGiftDrawResult
	0,  // 23: hyapp.luckygift.v1.GetLuckyGiftDrawSummaryRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	26, // 24: hyapp.luckygift.v1.GetLuckyGiftDrawSummaryResponse.summary:type_name -> hyapp.luckygift.v1.LuckyGiftDrawSummary
	0,  // 25: hyapp.luckygift.v1.ListLuckyGiftPoolBalancesRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	27, // 26: hyapp.luckygift.v1.ListLuckyGiftPoolBalancesResponse.pools:type_name -> hyapp.luckygift.v1.LuckyGiftPoolBalance
	32, // 27: hyapp.luckygift.v1.LuckyGiftExperiment.overrides:type_name -> hyapp.luckygift.v1.LuckyGiftExperimentOverride
	33, // 28: hyapp.luckygift.v1.LuckyGiftExperiment.arm_stats:type_name -> hyapp.luckygift.v1.LuckyGiftExperimentArmStats
	0,  // 29: hyapp.luckygift.v1.CreateLuckyGiftExperimentRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	4,  // 30: hyapp.luckygift.v1.CreateLuckyGiftExperimentRequest.treatment_config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	32, // 31: hyapp.luckygift.v1.CreateLuckyGiftExperimentRequest.overrides:type_name -> hyapp.luckygift.v1.LuckyGiftExperimentOverride
	34, // 32: hyapp.luckygift.v1.CreateLuckyGiftExperimentResponse.experiment:type_name -> hyapp.luckygift.v1.LuckyGiftExperiment
	4,  // 33: hyapp.luckygift.v1.CreateLuckyGiftExperimentResponse.treatment_config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 34: hyapp.luckygift.v1.ListLuckyGiftExperimentsRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	34, // 35: hyapp.luckygift.v1.ListLuckyGiftExperimentsResponse.experiments:type_name -> hyapp.luckygift.v1.LuckyGiftExperiment
	0,  // 36: hyapp.luckygift.v1.UpdateLuckyGiftExperimentRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	34, // 37: hyapp.luckygift.v1.UpdateLuckyGiftExperimentResponse.experiment:type_name -> hyapp.luckygift.v1.LuckyGiftExperiment
	0,  // 38: hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	32, // 39: hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesRequest.upserts:type_name -> hyapp.luckygift.v1.LuckyGiftExperimentOverride
	34, // 40: hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesResponse.experiment:type_name -> hyapp.luckygift.v1.LuckyGiftExperiment
	0,  // 41: hyapp.luckygift.v1.EndLuckyGiftExperimentRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	34, // 42: hyapp.luckygift.v1.EndLuckyGiftExperimentResponse.experiment:type_name -> hyapp.luckygift.v1.LuckyGiftExperiment
	4,  // 43: hyapp.luckygift.v1.EndLuckyGiftExperimentResponse.final_config:type_name -> hyapp.luckygift.v1.LuckyGiftRuleConfig
	0,  // 44: hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	47, // 45: hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceResponse.adjustment:type_name -> hyapp.luckygift.v1.LuckyGiftPoolAdjustment
	27, // 46: hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceResponse.pool:type_name -> hyapp.luckygift.v1.LuckyGiftPoolBalance
	49, // 47: hyapp.luckygift.v1.LuckyGiftUserProfile.one_hour:type_name -> hyapp.luckygift.v1.LuckyGiftUserProfileWindow
	49, // 48: hyapp.luckygift.v1.LuckyGiftUserProfile.twenty_four_hours:type_name -> hyapp.luckygift.v1.LuckyGiftUserProfileWindow
	49, // 49: hyapp.luckygift.v1.LuckyGiftUserProfile.forty_eight_hours:type_name -> hyapp.luckygift.v1.LuckyGiftUserProfileWindow
	49, // 50: hyapp.luckygift.v1.LuckyGiftUserProfile.lifetime:type_name -> hyapp.luckygift.v1.LuckyGiftUserProfileWindow
	0,  // 51: hyapp.luckygift.v1.ListLuckyGiftUserProfilesRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	50, // 52: hyapp.luckygift.v1.ListLuckyGiftUserProfilesResponse.profiles:type_name -> hyapp.luckygift.v1.LuckyGiftUserProfile
	0,  // 53: hyapp.luckygift.v1.GetLuckyGiftUserProfileRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	55, // 54: hyapp.luckygift.v1.LuckyGiftUserJackpotHit.conditions:type_name -> hyapp.luckygift.v1.LuckyGiftUserJackpotCondition
	50, // 55: hyapp.luckygift.v1.GetLuckyGiftUserProfileResponse.profile:type_name -> hyapp.luckygift.v1.LuckyGiftUserProfile
	54, // 56: hyapp.luckygift.v1.GetLuckyGiftUserProfileResponse.multiplier_distribution:type_name -> hyapp.luckygift.v1.LuckyGiftUserMultiplierStat
	56, // 57: hyapp.luckygift.v1.GetLuckyGiftUserProfileResponse.jackpot_hits:type_name -> hyapp.luckygift.v1.LuckyGiftUserJackpotHit
	0,  // 58: hyapp.luckygift.v1.ListLuckyGiftDailyStatsRequest.meta:type_name -> hyapp.luckygift.v1.RequestMeta
	59, // 59: hyapp.luckygift.v1.ListLuckyGiftDailyStatsResponse.stats:type_name -> hyapp.luckygift.v1.LuckyGiftDailyStat
	5,  // 60: hyapp.luckygift.v1.LuckyGiftService.CheckLuckyGift:input_type -> hyapp.luckygift.v1.CheckLuckyGiftRequest
	8,  // 61: hyapp.luckygift.v1.LuckyGiftService.ExecuteLuckyGiftDraw:input_type -> hyapp.luckygift.v1.ExecuteLuckyGiftDrawRequest
	10, // 62: hyapp.luckygift.v1.LuckyGiftService.BatchExecuteLuckyGiftDraw:input_type -> hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawRequest
	12, // 63: hyapp.luckygift.v1.LuckyGiftService.ExecuteExternalGiftDraw:input_type -> hyapp.luckygift.v1.ExternalGiftDrawRequest
	14, // 64: hyapp.luckygift.v1.AdminLuckyGiftService.GetLuckyGiftConfig:input_type -> hyapp.luckygift.v1.GetLuckyGiftConfigRequest
	16, // 65: hyapp.luckygift.v1.AdminLuckyGiftService.UpsertLuckyGiftConfig:input_type -> hyapp.luckygift.v1.UpsertLuckyGiftConfigRequest
	18, // 66: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftConfigs:input_type -> hyapp.luckygift.v1.ListLuckyGiftConfigsRequest
	20, // 67: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftConfigVersions:input_type -> hyapp.luckygift.v1.ListLuckyGiftConfigVersionsRequest
	22, // 68: hyapp.luckygift.v1.AdminLuckyGiftService.RollbackLuckyGiftConfig:input_type -> hyapp.luckygift.v1.RollbackLuckyGiftConfigRequest
	24, // 69: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftDraws:input_type -> hyapp.luckygift.v1.ListLuckyGiftDrawsRequest
	28, // 70: hyapp.luckygift.v1.AdminLuckyGiftService.GetLuckyGiftDrawSummary:input_type -> hyapp.luckygift.v1.GetLuckyGiftDrawSummaryRequest
	30, // 71: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftPoolBalances:input_type -> hyapp.luckygift.v1.ListLuckyGiftPoolBalancesRequest
	46, // 72: hyapp.luckygift.v1.AdminLuckyGiftService.AdjustLuckyGiftPoolBalance:input_type -> hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceRequest
	35, // 73: hyapp.luckygift.v1.AdminLuckyGiftService.CreateLuckyGiftExperiment:input_type -> hyapp.luckygift.v1.CreateLuckyGiftExperimentRequest
	37, // 74: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftExperiments:input_type -> hyapp.luckygift.v1.ListLuckyGiftExperimentsRequest
	39, // 75: hyapp.luckygift.v1.AdminLuckyGiftService.UpdateLuckyGiftExperiment:input_type -> hyapp.luckygift.v1.UpdateLuckyGiftExperimentRequest
	41, // 76: hyapp.luckygift.v1.AdminLuckyGiftService.SetLuckyGiftExperimentOverrides:input_type -> hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesRequest
	43, // 77: hyapp.luckygift.v1.AdminLuckyGiftService.EndLuckyGiftExperiment:input_type -> hyapp.luckygift.v1.EndLuckyGiftExperimentRequest
	51, // 78: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftUserProfiles:input_type -> hyapp.luckygift.v1.ListLuckyGiftUserProfilesRequest
	53, // 79: hyapp.luckygift.v1.AdminLuckyGiftService.GetLuckyGiftUserProfile:input_type -> hyapp.luckygift.v1.GetLuckyGiftUserProfileRequest
	58, // 80: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftDailyStats:input_type -> hyapp.luckygift.v1.ListLuckyGiftDailyStatsRequest
	6,  // 81: hyapp.luckygift.v1.LuckyGiftService.CheckLuckyGift:output_type -> hyapp.luckygift.v1.CheckLuckyGiftResponse
	9,  // 82: hyapp.luckygift.v1.LuckyGiftService.ExecuteLuckyGiftDraw:output_type -> hyapp.luckygift.v1.ExecuteLuckyGiftDrawResponse
	11, // 83: hyapp.luckygift.v1.LuckyGiftService.BatchExecuteLuckyGiftDraw:output_type -> hyapp.luckygift.v1.BatchExecuteLuckyGiftDrawResponse
	13, // 84: hyapp.luckygift.v1.LuckyGiftService.ExecuteExternalGiftDraw:output_type -> hyapp.luckygift.v1.ExternalGiftDrawResponse
	15, // 85: hyapp.luckygift.v1.AdminLuckyGiftService.GetLuckyGiftConfig:output_type -> hyapp.luckygift.v1.GetLuckyGiftConfigResponse
	17, // 86: hyapp.luckygift.v1.AdminLuckyGiftService.UpsertLuckyGiftConfig:output_type -> hyapp.luckygift.v1.UpsertLuckyGiftConfigResponse
	19, // 87: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftConfigs:output_type -> hyapp.luckygift.v1.ListLuckyGiftConfigsResponse
	21, // 88: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftConfigVersions:output_type -> hyapp.luckygift.v1.ListLuckyGiftConfigVersionsResponse
	23, // 89: hyapp.luckygift.v1.AdminLuckyGiftService.RollbackLuckyGiftConfig:output_type -> hyapp.luckygift.v1.RollbackLuckyGiftConfigResponse
	25, // 90: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftDraws:output_type -> hyapp.luckygift.v1.ListLuckyGiftDrawsResponse
	29, // 91: hyapp.luckygift.v1.AdminLuckyGiftService.GetLuckyGiftDrawSummary:output_type -> hyapp.luckygift.v1.GetLuckyGiftDrawSummaryResponse
	31, // 92: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftPoolBalances:output_type -> hyapp.luckygift.v1.ListLuckyGiftPoolBalancesResponse
	48, // 93: hyapp.luckygift.v1.AdminLuckyGiftService.AdjustLuckyGiftPoolBalance:output_type -> hyapp.luckygift.v1.AdjustLuckyGiftPoolBalanceResponse
	36, // 94: hyapp.luckygift.v1.AdminLuckyGiftService.CreateLuckyGiftExperiment:output_type -> hyapp.luckygift.v1.CreateLuckyGiftExperimentResponse
	38, // 95: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftExperiments:output_type -> hyapp.luckygift.v1.ListLuckyGiftExperimentsResponse
	40, // 96: hyapp.luckygift.v1.AdminLuckyGiftService.UpdateLuckyGiftExperiment:output_type -> hyapp.luckygift.v1.UpdateLuckyGiftExperimentResponse
	42, // 97: hyapp.luckygift.v1.AdminLuckyGiftService.SetLuckyGiftExperimentOverrides:output_type -> hyapp.luckygift.v1.SetLuckyGiftExperimentOverridesResponse
	44, // 98: hyapp.luckygift.v1.AdminLuckyGiftService.EndLuckyGiftExperiment:output_type -> hyapp.luckygift.v1.EndLuckyGiftExperimentResponse
	52, // 99: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftUserProfiles:output_type -> hyapp.luckygift.v1.ListLuckyGiftUserProfilesResponse
	57, // 100: hyapp.luckygift.v1.AdminLuckyGiftService.GetLuckyGiftUserProfile:output_type -> hyapp.luckygift.v1.GetLuckyGiftUserProfileResponse
	60, // 101: hyapp.luckygift.v1.AdminLuckyGiftService.ListLuckyGiftDailyStats:output_type -> hyapp.luckygift.v1.ListLuckyGiftDailyStatsResponse
	81, // [81:102] is the sub-list for method output_type
	60, // [60:81] is the sub-list for method input_type
	60, // [60:60] is the sub-list for extension type_name
	60, // [60:60] is the sub-list for extension extendee
	0,  // [0:60] is the sub-list for field type_name
}

func init() { file_proto_luckygift_v1_luckygift_proto_init() }
func file_proto_luckygift_v1_luckygift_proto_init() {
	if File_proto_luckygift_v1_luckygift_proto != nil {
		return
	}
	file_proto_luckygift_v1_luckygift_proto_msgTypes[39].OneofWrappers = []any{}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_luckygift_v1_luckygift_proto_rawDesc), len(file_proto_luckygift_v1_luckygift_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   61,
			NumExtensions: 0,
			NumServices:   2,
		},
		GoTypes:           file_proto_luckygift_v1_luckygift_proto_goTypes,
		DependencyIndexes: file_proto_luckygift_v1_luckygift_proto_depIdxs,
		MessageInfos:      file_proto_luckygift_v1_luckygift_proto_msgTypes,
	}.Build()
	File_proto_luckygift_v1_luckygift_proto = out.File
	file_proto_luckygift_v1_luckygift_proto_goTypes = nil
	file_proto_luckygift_v1_luckygift_proto_depIdxs = nil
}
