From a2e34269fd5ada365577d63cd4366f3ee34f5919 Mon Sep 17 00:00:00 2001 From: tomas Date: Tue, 3 Sep 2024 17:16:07 +0800 Subject: [PATCH] =?UTF-8?q?add=20test=20v1=20=E4=B8=8D=E8=A6=81=E5=90=88?= =?UTF-8?q?=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/fortunedragon/constants.go | 20 + gamerule/fortunedragon/fruitsAlgorithm.go | 359 ++ gamerule/fortunedragon/func.go | 215 + gamesrv/fortunedragon/action_fortunedragon.go | 48 + .../fortunedragon/playerdata_fortunedragon.go | 16 + .../fortunedragon/scenedata_fortunedragon.go | 43 + .../scenepolicy_fortunedragon.go | 363 ++ .../Client_Config/Config/base/CashMania.lua | 382 ++ .../Config/base/FortuneDragon.lua | 334 ++ .../Config/base/FortuneMouse.lua | 284 + .../Client_Config/Config/base/FortuneOx.lua | 293 + .../Config/base/FortuneRabbit.lua | 346 ++ .../Config/base/FortuneTiger.lua | 293 + .../Client_Config/Config/base/Matrix.lua | 3959 +++++++++++++ .../Client_Config/Config/base/PrizeModel.lua | 52 + gamesrv/slotspkg/external/ExportGoConfig.bat | 14 + gamesrv/slotspkg/external/README.md | 3 + .../Link/Matrix/FeaturesForm15X1TypeA.xlsx | Bin 0 -> 10541 bytes .../Link/Matrix/FeaturesForm19X1TypeA.xlsx | Bin 0 -> 10550 bytes .../Link/Matrix/FeaturesForm20X1TypeA.xlsx | Bin 0 -> 10541 bytes .../Link/Matrix/FeaturesForm25X1TypeA.xlsx | Bin 0 -> 10551 bytes .../Link/Matrix/FeaturesForm30X1TypeA.xlsx | Bin 0 -> 11064 bytes .../Link/Matrix/FeaturesForm35X1TypeA.xlsx | Bin 0 -> 11071 bytes .../Base/Link/Matrix/FeaturesForm40X1.xlsx | Bin 0 -> 10532 bytes .../Link/Matrix/FeaturesForm40X1TypeA.xlsx | Bin 0 -> 10532 bytes .../Link/Matrix/FeaturesForm7X1TypeA.xlsx | Bin 0 -> 10536 bytes .../Link/Matrix/Line100Form12X5TypeA.xlsx | Bin 0 -> 13681 bytes .../Base/Link/Matrix/Line100Form6X5TypeA.xlsx | Bin 0 -> 13763 bytes .../Base/Link/Matrix/Line10Form343TypeA.xlsx | Bin 0 -> 11829 bytes .../Base/Link/Matrix/Line10Form3X5TypeA.xlsx | Bin 0 -> 11877 bytes .../Base/Link/Matrix/Line1Form3X3TypeA.xlsx | Bin 0 -> 10485 bytes .../Base/Link/Matrix/Line1Form3X3TypeB.xlsx | Bin 0 -> 11796 bytes .../Base/Link/Matrix/Line1Form5X5TypeA.xlsx | Bin 0 -> 10981 bytes .../Base/Link/Matrix/Line20Form3X5TypeA.xlsx | Bin 0 -> 12193 bytes .../Link/Matrix/Line25Form36666TypeA.xlsx | Bin 0 -> 12270 bytes .../Base/Link/Matrix/Line25Form3X5TypeA.xlsx | Bin 0 -> 12183 bytes .../Base/Link/Matrix/Line25Form3X5TypeB.xlsx | Bin 0 -> 12174 bytes .../Base/Link/Matrix/Line25Form3X5TypeC.xlsx | Bin 0 -> 12018 bytes .../Base/Link/Matrix/Line25Form3X5TypeD.xlsx | Bin 0 -> 12074 bytes .../Base/Link/Matrix/Line25Form3X5TypeE.xlsx | Bin 0 -> 12065 bytes .../Base/Link/Matrix/Line30Form3X5TypeA.xlsx | Bin 0 -> 12162 bytes .../Base/Link/Matrix/Line30Form3X5TypeB.xlsx | Bin 0 -> 12028 bytes .../Base/Link/Matrix/Line30Form3X5TypeC.xlsx | Bin 0 -> 12033 bytes .../Base/Link/Matrix/Line30Form3X5TypeD.xlsx | Bin 0 -> 12104 bytes .../Base/Link/Matrix/Line30Form3X5TypeE.xlsx | Bin 0 -> 12244 bytes .../Base/Link/Matrix/Line30Form3X6TypeA.xlsx | Bin 0 -> 11684 bytes .../Base/Link/Matrix/Line30Form4X5TypeA.xlsx | Bin 0 -> 11585 bytes .../Base/Link/Matrix/Line30Form4X5TypeB.xlsx | Bin 0 -> 11703 bytes .../Base/Link/Matrix/Line3Form3X3TypeA.xlsx | Bin 0 -> 11937 bytes .../Link/Matrix/Line40Form34543TypeA.xlsx | Bin 0 -> 12331 bytes .../Base/Link/Matrix/Line40Form3X5TypeA.xlsx | Bin 0 -> 12225 bytes .../Base/Link/Matrix/Line40Form3X5TypeB.xlsx | Bin 0 -> 12342 bytes .../Base/Link/Matrix/Line40Form3X5TypeC.xlsx | Bin 0 -> 12366 bytes .../Base/Link/Matrix/Line40Form3X5TypeD.xlsx | Bin 0 -> 12386 bytes .../Base/Link/Matrix/Line40Form4X5TypeA.xlsx | Bin 0 -> 11709 bytes .../Base/Link/Matrix/Line40Form4X5TypeB.xlsx | Bin 0 -> 11745 bytes .../Base/Link/Matrix/Line40Form4X5TypeC.xlsx | Bin 0 -> 11807 bytes .../Base/Link/Matrix/Line40Form4X6TypeA.xlsx | Bin 0 -> 11683 bytes .../Base/Link/Matrix/Line50Form3X5TypeA.xlsx | Bin 0 -> 12588 bytes .../Base/Link/Matrix/Line50Form3X5TypeB.xlsx | Bin 0 -> 12579 bytes .../Base/Link/Matrix/Line50Form3X5TypeC.xlsx | Bin 0 -> 12599 bytes .../Base/Link/Matrix/Line50Form3X5TypeD.xlsx | Bin 0 -> 12482 bytes .../Base/Link/Matrix/Line50Form3X5TypeE.xlsx | Bin 0 -> 12576 bytes .../Base/Link/Matrix/Line50Form3X5TypeF.xlsx | Bin 0 -> 12558 bytes .../Base/Link/Matrix/Line50Form3X5TypeG.xlsx | Bin 0 -> 11462 bytes .../Base/Link/Matrix/Line50Form3X5TypeH.xlsx | Bin 0 -> 11460 bytes .../Link/Matrix/Line50Form45454TypeA.xlsx | Bin 0 -> 12522 bytes .../Base/Link/Matrix/Line50Form4X5TypeA.xlsx | Bin 0 -> 11565 bytes .../Base/Link/Matrix/Line50Form4X5TypeB.xlsx | Bin 0 -> 12535 bytes .../Base/Link/Matrix/Line50Form4X5TypeC.xlsx | Bin 0 -> 12576 bytes .../Base/Link/Matrix/Line50Form4X5TypeD.xlsx | Bin 0 -> 12692 bytes .../Base/Link/Matrix/Line50Form4X5TypeE.xlsx | Bin 0 -> 12801 bytes .../Base/Link/Matrix/Line50Form4X5TypeF.xlsx | Bin 0 -> 12828 bytes .../Base/Link/Matrix/Line50Form4X6TypeA.xlsx | Bin 0 -> 12653 bytes .../Base/Link/Matrix/Line50Form5X5TypeA.xlsx | Bin 0 -> 11870 bytes .../Base/Link/Matrix/Line50Form5X5TypeB.xlsx | Bin 0 -> 11893 bytes .../Base/Link/Matrix/Line50Form5X5TypeC.xlsx | Bin 0 -> 11910 bytes .../Base/Link/Matrix/Line50Form6X5TypeA.xlsx | Bin 0 -> 12532 bytes .../Base/Link/Matrix/Line5Form3X3TypeA.xlsx | Bin 0 -> 11950 bytes .../Base/Link/Matrix/Line5Form3X3TypeB.xlsx | Bin 0 -> 10641 bytes .../Link/Matrix/Line60Form33633TypeA.xlsx | Bin 0 -> 12663 bytes .../Base/Link/Matrix/Line60Form8X5TypeA.xlsx | Bin 0 -> 12876 bytes .../Base/Link/Matrix/Line65Form6X5TypeA.xlsx | Bin 0 -> 12889 bytes .../Base/Link/Matrix/Line70Form9X5TypeA.xlsx | Bin 0 -> 13080 bytes .../Base/Link/Matrix/Line75Form5X6TypeA.xlsx | Bin 0 -> 13436 bytes .../Base/Link/Matrix/Line75Form6X5TypeA.xlsx | Bin 0 -> 13181 bytes .../Base/Link/Matrix/Line80Form10X5TypeA.xlsx | Bin 0 -> 13276 bytes .../Base/Link/Matrix/Line80Form3X5TypeA.xlsx | Bin 0 -> 13076 bytes .../Base/Link/Matrix/Line80Form4X6TypeA.xlsx | Bin 0 -> 13332 bytes .../Base/Link/Matrix/Line80Form7X5TypeA.xlsx | Bin 0 -> 13214 bytes .../Base/Link/Matrix/Line90Form11X5TypeA.xlsx | Bin 0 -> 13463 bytes .../Base/Link/Matrix/Line95Form8X5TypeA.xlsx | Bin 0 -> 13455 bytes .../Base/Link/Matrix/MatchForm7X7TypeA.xlsx | Bin 0 -> 10462 bytes .../Base/Link/Matrix/SameForm5X6TypeA.xlsx | Bin 0 -> 10939 bytes .../Base/Link/Matrix/SameForm5X6TypeB.xlsx | Bin 0 -> 10943 bytes .../Base/Link/Matrix/WaysForm333331.xlsx | Bin 0 -> 10401 bytes .../excel/Base/Link/Matrix/WaysForm33555.xlsx | Bin 0 -> 10964 bytes .../Base/Link/Matrix/WaysForm344444.xlsx | Bin 0 -> 10511 bytes .../Base/Link/Matrix/WaysForm3X5TypeA.xlsx | Bin 0 -> 10511 bytes .../excel/Base/Link/Matrix/WaysForm44668.xlsx | Bin 0 -> 11054 bytes .../Base/Link/Matrix/WaysForm4X5TypeA.xlsx | Bin 0 -> 10512 bytes .../Base/Link/Matrix/WaysForm4X5TypeB.xlsx | Bin 0 -> 10995 bytes .../Base/Link/PrizeModel/PrizeModelTypeA.xlsx | Bin 0 -> 9033 bytes .../Base/Link/PrizeModel/PrizeModelTypeB.xlsx | Bin 0 -> 9373 bytes .../excel/Base/OptHall/S_OptGroup.xlsx | Bin 0 -> 9912 bytes .../excel/Base/Slots/CashMania/Bet.xlsx | Bin 0 -> 13967 bytes .../CashMania/Feature/S_MidItemInfo.xlsx | Bin 0 -> 9702 bytes .../Slots/CashMania/Feature/S_Others.xlsx | Bin 0 -> 9452 bytes .../Slots/CashMania/Feature/S_RandomItem.xlsx | Bin 0 -> 9378 bytes .../Slots/CashMania/Feature/S_RandomMid.xlsx | Bin 0 -> 9682 bytes .../Slots/CashMania/Feature/S_WinItem.xlsx | Bin 0 -> 9391 bytes .../Slots/CashMania/Feature/S_WinMid.xlsx | Bin 0 -> 9697 bytes .../Slots/CashMania/Generic/Formation.xlsx | Bin 0 -> 9524 bytes .../Slots/CashMania/Generic/ReelBaseSpin.xlsx | Bin 0 -> 12829 bytes .../Base/Slots/CashMania/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../Base/Slots/CashMania/Generic/Symbol.xlsx | Bin 0 -> 12379 bytes .../excel/Base/Slots/CashMania/Settings.xlsx | Bin 0 -> 10242 bytes .../excel/Base/Slots/FortuneDragon/Bet.xlsx | Bin 0 -> 13940 bytes .../Feature/S_BaseMultiplier.xlsx | Bin 0 -> 9424 bytes .../Feature/S_FreeMultiplier.xlsx | Bin 0 -> 8611 bytes .../Feature/S_FreeMultiplierCount.xlsx | Bin 0 -> 8760 bytes .../Slots/FortuneDragon/Feature/S_Others.xlsx | Bin 0 -> 10473 bytes .../FortuneDragon/Generic/Formation.xlsx | Bin 0 -> 10211 bytes .../FortuneDragon/Generic/ReelBaseSpin.xlsx | Bin 0 -> 19183 bytes .../FortuneDragon/Generic/ReelFreeSpin.xlsx | Bin 0 -> 18881 bytes .../Slots/FortuneDragon/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../Generic/S_ReelSureWinBaseSpin.xlsx | Bin 0 -> 18954 bytes .../Generic/S_ReelSureWinFreeSpin.xlsx | Bin 0 -> 19261 bytes .../Slots/FortuneDragon/Generic/Symbol.xlsx | Bin 0 -> 11578 bytes .../Base/Slots/FortuneDragon/Settings.xlsx | Bin 0 -> 10266 bytes .../excel/Base/Slots/FortuneMouse/Bet.xlsx | Bin 0 -> 13940 bytes .../Slots/FortuneMouse/Feature/S_Others.xlsx | Bin 0 -> 9366 bytes .../FortuneMouse/Feature/S_SuperStack.xlsx | Bin 0 -> 9489 bytes .../Slots/FortuneMouse/Generic/Formation.xlsx | Bin 0 -> 9532 bytes .../FortuneMouse/Generic/ReelBaseSpin.xlsx | Bin 0 -> 19275 bytes .../FortuneMouse/Generic/ReelReSpin.xlsx | Bin 0 -> 13299 bytes .../Slots/FortuneMouse/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../Slots/FortuneMouse/Generic/Symbol.xlsx | Bin 0 -> 12378 bytes .../Base/Slots/FortuneMouse/Settings.xlsx | Bin 0 -> 10245 bytes .../excel/Base/Slots/FortuneOx/Bet.xlsx | Bin 0 -> 13967 bytes .../Slots/FortuneOx/Feature/S_Others.xlsx | Bin 0 -> 9393 bytes .../FortuneOx/Feature/S_SuperStack1.xlsx | Bin 0 -> 9603 bytes .../FortuneOx/Feature/S_SuperStack2.xlsx | Bin 0 -> 9714 bytes .../Slots/FortuneOx/Generic/Formation.xlsx | Bin 0 -> 9537 bytes .../Slots/FortuneOx/Generic/ReelBaseSpin.xlsx | Bin 0 -> 19517 bytes .../Slots/FortuneOx/Generic/ReelReSpin.xlsx | Bin 0 -> 16886 bytes .../Base/Slots/FortuneOx/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../Base/Slots/FortuneOx/Generic/Symbol.xlsx | Bin 0 -> 12378 bytes .../excel/Base/Slots/FortuneOx/Settings.xlsx | Bin 0 -> 10242 bytes .../excel/Base/Slots/FortuneRabbit/Bet.xlsx | Bin 0 -> 13967 bytes .../Feature/CashPrizeWeight.xlsx | Bin 0 -> 11249 bytes .../Feature/S_ForceCashCountWeight.xlsx | Bin 0 -> 9850 bytes .../Slots/FortuneRabbit/Feature/S_Others.xlsx | Bin 0 -> 12621 bytes .../FortuneRabbit/Generic/Formation.xlsx | Bin 0 -> 9534 bytes .../FortuneRabbit/Generic/ReelBaseSpin.xlsx | Bin 0 -> 19634 bytes .../FortuneRabbit/Generic/ReelFreeSpin.xlsx | Bin 0 -> 12926 bytes .../Slots/FortuneRabbit/Generic/S_Map.xlsx | Bin 0 -> 11592 bytes .../Slots/FortuneRabbit/Generic/Symbol.xlsx | Bin 0 -> 11733 bytes .../Base/Slots/FortuneRabbit/Settings.xlsx | Bin 0 -> 10296 bytes .../excel/Base/Slots/FortuneTiger/Bet.xlsx | Bin 0 -> 13940 bytes .../Slots/FortuneTiger/Feature/S_Others.xlsx | Bin 0 -> 9408 bytes .../FortuneTiger/Feature/S_SuperStack.xlsx | Bin 0 -> 9474 bytes .../Slots/FortuneTiger/Generic/Formation.xlsx | Bin 0 -> 9532 bytes .../FortuneTiger/Generic/ReelBaseSpin.xlsx | Bin 0 -> 24386 bytes .../FortuneTiger/Generic/ReelReSpin.xlsx | Bin 0 -> 14859 bytes .../Slots/FortuneTiger/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../Slots/FortuneTiger/Generic/Symbol.xlsx | Bin 0 -> 12422 bytes .../Base/Slots/FortuneTiger/Settings.xlsx | Bin 0 -> 10245 bytes .../excel/Base/Slots/GateofOlympus/Bet.xlsx | Bin 0 -> 12914 bytes .../GateofOlympus/Feature/Multiplier.xlsx | Bin 0 -> 11115 bytes .../GateofOlympus/Feature/S_ReelChoose.xlsx | Bin 0 -> 9762 bytes .../Slots/GateofOlympus/Feature/Scatter.xlsx | Bin 0 -> 12738 bytes .../GateofOlympus/Generic/Formation.xlsx | Bin 0 -> 10532 bytes .../GateofOlympus/Generic/ReelBaseSpin.xlsx | Bin 0 -> 18331 bytes .../GateofOlympus/Generic/ReelBaseSpin1.xlsx | Bin 0 -> 15302 bytes .../GateofOlympus/Generic/ReelBaseSpin2.xlsx | Bin 0 -> 15403 bytes .../GateofOlympus/Generic/ReelBaseSpin3.xlsx | Bin 0 -> 15299 bytes .../GateofOlympus/Generic/ReelBaseSpin7.xlsx | Bin 0 -> 15010 bytes .../GateofOlympus/Generic/ReelBaseSpin8.xlsx | Bin 0 -> 15436 bytes .../GateofOlympus/Generic/ReelFreeSpin.xlsx | Bin 0 -> 15344 bytes .../GateofOlympus/Generic/ReelFreeSpin4.xlsx | Bin 0 -> 15343 bytes .../GateofOlympus/Generic/ReelFreeSpin5.xlsx | Bin 0 -> 15321 bytes .../Slots/GateofOlympus/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../Slots/GateofOlympus/Generic/Symbol.xlsx | Bin 0 -> 13406 bytes .../Base/Slots/GateofOlympus/Settings.xlsx | Bin 0 -> 10031 bytes .../external/excel/Base/Slots/Test/Bet.xlsx | Bin 0 -> 13967 bytes .../Base/Slots/Test/Feature/S_Random.xlsx | Bin 0 -> 41768 bytes .../Base/Slots/Test/Generic/Formation.xlsx | Bin 0 -> 9455 bytes .../Base/Slots/Test/Generic/ReelBaseSpin.xlsx | Bin 0 -> 11355 bytes .../excel/Base/Slots/Test/Generic/S_Map.xlsx | Bin 0 -> 12378 bytes .../excel/Base/Slots/Test/Generic/Symbol.xlsx | Bin 0 -> 11976 bytes .../excel/Base/Slots/Test/Settings.xlsx | Bin 0 -> 10205 bytes .../excel/Base/System/S_Simulator.xlsx | Bin 0 -> 10323 bytes .../excel/Base/Template/1000_Map.xlsx | Bin 0 -> 13922 bytes .../excel/Base/Template/1001_BetSize.xlsx | Bin 0 -> 9583 bytes .../excel/Base/Template/1002_BetLevel.xlsx | Bin 0 -> 9669 bytes .../excel/Base/Template/1003_BetLine.xlsx | Bin 0 -> 9454 bytes .../Base/Template/1004_BetChangeList.xlsx | Bin 0 -> 9897 bytes .../excel/Base/Template/1005_Scatter.xlsx | Bin 0 -> 10216 bytes .../excel/Base/Template/1006_Symbol.xlsx | Bin 0 -> 12109 bytes .../excel/Base/Template/1007_Matrix.xlsx | Bin 0 -> 12200 bytes .../excel/Base/Template/1008_Formation.xlsx | Bin 0 -> 10373 bytes .../excel/Base/Template/1009_Jackpot.xlsx | Bin 0 -> 9905 bytes .../excel/Base/Template/1010_SuperStack.xlsx | Bin 0 -> 9561 bytes .../excel/Base/Template/1012_PrizeModel.xlsx | Bin 0 -> 9025 bytes .../Base/Template/1013_OptAuthenticate.xlsx | Bin 0 -> 8935 bytes .../excel/Base/Template/1014_Vector.xlsx | Bin 0 -> 10217 bytes .../excel/Base/Template/1015_Text.xlsx | Bin 0 -> 9600 bytes .../excel/Base/Template/1016_FirstBet.xlsx | Bin 0 -> 9568 bytes gamesrv/slotspkg/external/excel/Settings.xlsx | Bin 0 -> 9192 bytes gamesrv/slotspkg/external/excel2lua.bat | 2 + .../slotspkg/internal/dao/dataset/a_debug.go | 31 + .../slotspkg/internal/dao/dataset/dataset.go | 220 + .../slotspkg/internal/dao/struct/struct.go | 38 + .../internal/dao/thinkingdata/filter.go | 69 + .../internal/dao/thinkingdata/formatter.go | 270 + .../internal/dao/thinkingdata/structs.go | 377 ++ .../internal/dao/thinkingdata/thinkingdata.go | 81 + .../exported/excel2go/base/cash_mania.go | 777 +++ .../exported/excel2go/base/fortune_dragon.go | 506 ++ .../exported/excel2go/base/fortune_mouse.go | 392 ++ .../exported/excel2go/base/fortune_ox.go | 439 ++ .../exported/excel2go/base/fortune_rabbit.go | 480 ++ .../exported/excel2go/base/fortune_tiger.go | 401 ++ .../exported/excel2go/base/gateof_olympus.go | 1098 ++++ .../internal/exported/excel2go/base/matrix.go | 3965 +++++++++++++ .../exported/excel2go/base/opt_group.go | 22 + .../exported/excel2go/base/prize_model.go | 58 + .../exported/excel2go/base/simulator.go | 171 + .../internal/exported/excel2go/base/test.go | 5262 +++++++++++++++++ .../internal/exported/excel2go/base/var.go | 265 + .../exported/excel2go/storage/storage.go | 723 +++ .../exported/excel2go/structs/structs.go | 854 +++ .../slotspkg/internal/generic/ddb/config.go | 65 + gamesrv/slotspkg/internal/generic/ddb/ddb.go | 113 + .../internal/generic/errors/errors.go | 332 ++ .../internal/generic/errors/errors_test.go | 20 + .../internal/generic/errors/format.go | 225 + .../slotspkg/internal/generic/errors/init.go | 42 + .../internal/generic/errors/wrapper.go | 25 + .../internal/generic/global/config.go | 119 + .../generic/global/configencryptor.go | 119 + .../slotspkg/internal/generic/global/ddb.go | 136 + .../internal/generic/global/global.go | 318 + .../internal/generic/global/global_test.go | 16 + .../internal/generic/global/globalmgr.go | 87 + .../internal/generic/key/access_type.go | 8 + .../internal/generic/key/activity_type.go | 5 + .../internal/generic/key/authenticate.go | 17 + .../slotspkg/internal/generic/key/branch.go | 40 + .../internal/generic/key/broadcast_type.go | 6 + gamesrv/slotspkg/internal/generic/key/coin.go | 14 + .../slotspkg/internal/generic/key/common.go | 6 + gamesrv/slotspkg/internal/generic/key/ddb.go | 43 + .../slotspkg/internal/generic/key/event.go | 6 + .../slotspkg/internal/generic/key/group.go | 14 + .../internal/generic/key/invite_award_type.go | 13 + .../slotspkg/internal/generic/key/log_type.go | 15 + .../internal/generic/key/machine_key.go | 11 + .../internal/generic/key/machine_mode.go | 7 + .../generic/key/machine_ratio_type.go | 8 + .../internal/generic/key/mail_type.go | 6 + .../slotspkg/internal/generic/key/pay_type.go | 6 + .../slotspkg/internal/generic/key/payment.go | 118 + .../internal/generic/key/player_black.go | 7 + .../internal/generic/key/player_mode.go | 7 + .../internal/generic/key/process_command.go | 6 + .../internal/generic/key/rate_mode.go | 7 + .../slotspkg/internal/generic/key/reasons.go | 64 + .../internal/generic/key/redimo_type.go | 10 + .../internal/generic/key/room_type.go | 7 + .../generic/key/second_stage_strategy.go | 8 + .../internal/generic/key/service_name.go | 10 + .../generic/key/session_callback_seq.go | 7 + .../internal/generic/key/session_key.go | 9 + .../internal/generic/key/spin_type.go | 17 + .../slotspkg/internal/generic/key/tag_hub.go | 39 + .../slotspkg/internal/generic/key/theme.go | 42 + .../slotspkg/internal/generic/key/unique.go | 7 + .../internal/generic/key/user_tag_system.go | 22 + .../slotspkg/internal/generic/key/win_type.go | 27 + .../internal/generic/pkg/hashx/hash.go | 111 + .../slotspkg/internal/generic/pkg/jwts/jwt.go | 91 + .../internal/generic/pkg/jwts/jwter.go | 9 + .../slotspkg/internal/generic/pkg/slice.go | 24 + .../slotspkg/internal/module/player/bet.go | 106 + .../slotspkg/internal/module/player/coin.go | 208 + .../internal/module/player/dataset.go | 26 + gamesrv/slotspkg/internal/module/player/db.go | 217 + .../internal/module/player/lastbetid.go | 16 + .../slotspkg/internal/module/player/method.go | 326 + .../slotspkg/internal/module/player/player.go | 96 + .../internal/module/player/playermgr.go | 59 + .../internal/module/session/session.go | 87 + .../internal/module/shared/structs.go | 2804 +++++++++ .../slotspkg/internal/module/shared/types.go | 76 + .../slotspkg/internal/module/shell/mono.go | 20 + .../slotspkg/internal/module/shell/session.go | 29 + .../slotspkg/internal/module/shell/shell.go | 60 + .../slotspkg/internal/module/shell/storage.go | 40 + gamesrv/slotspkg/slots/dataset.go | 17 + gamesrv/slotspkg/slots/desc/formation_desc.go | 219 + gamesrv/slotspkg/slots/desc/machine_desc.go | 176 + gamesrv/slotspkg/slots/desc/node_desc.go | 93 + gamesrv/slotspkg/slots/entity/cheat.go | 60 + gamesrv/slotspkg/slots/entity/custom.go | 35 + gamesrv/slotspkg/slots/entity/db.go | 34 + gamesrv/slotspkg/slots/entity/entity.go | 62 + gamesrv/slotspkg/slots/entity/feature.go | 286 + gamesrv/slotspkg/slots/entity/formation.go | 335 ++ gamesrv/slotspkg/slots/entity/node.go | 460 ++ gamesrv/slotspkg/slots/entity/node_desc.go | 74 + gamesrv/slotspkg/slots/entity/progress.go | 195 + gamesrv/slotspkg/slots/entity/rand.go | 169 + gamesrv/slotspkg/slots/entity/reset.go | 196 + gamesrv/slotspkg/slots/entity/round.go | 18 + gamesrv/slotspkg/slots/entity/serializer.go | 83 + gamesrv/slotspkg/slots/entity/spin.go | 129 + gamesrv/slotspkg/slots/entity/win.go | 326 + gamesrv/slotspkg/slots/formation/coords.go | 31 + gamesrv/slotspkg/slots/formation/formation.go | 187 + gamesrv/slotspkg/slots/formation/helper.go | 35 + .../slotspkg/slots/formation/symbol_line.go | 441 ++ .../slotspkg/slots/formation/symbol_match.go | 215 + .../slotspkg/slots/formation/symbol_same.go | 146 + .../slotspkg/slots/formation/symbol_way.go | 250 + gamesrv/slotspkg/slots/handler.go | 129 + gamesrv/slotspkg/slots/intf/callback.go | 13 + gamesrv/slotspkg/slots/intf/feature.go | 16 + gamesrv/slotspkg/slots/intf/formation.go | 68 + gamesrv/slotspkg/slots/intf/master.go | 140 + gamesrv/slotspkg/slots/intf/node.go | 22 + gamesrv/slotspkg/slots/intf/plugin.go | 18 + gamesrv/slotspkg/slots/intf/spinner.go | 72 + gamesrv/slotspkg/slots/machine/feature.go | 49 + gamesrv/slotspkg/slots/machine/formation.go | 289 + gamesrv/slotspkg/slots/machine/machine.go | 58 + .../slots/machine/machine_callback.go | 107 + .../slots/machine/machine_master_custom.go | 118 + .../slots/machine/machine_master_data.go | 218 + .../slots/machine/machine_master_feature.go | 126 + .../slots/machine/machine_master_formation.go | 79 + .../slots/machine/machine_master_misc.go | 126 + .../slots/machine/machine_master_node.go | 38 + .../slotspkg/slots/machine/machine_spinner.go | 426 ++ gamesrv/slotspkg/slots/machine/node.go | 56 + gamesrv/slotspkg/slots/playasrecorder.go | 91 + .../slotspkg/slots/plugin/cashmania/base.go | 279 + .../slotspkg/slots/plugin/cashmania/common.go | 16 + .../slotspkg/slots/plugin/cashmania/descx.go | 197 + .../slotspkg/slots/plugin/cashmania/init.go | 9 + .../slots/plugin/cashmania/simulator.go | 65 + .../slots/plugin/cashmania/tospecial.go | 32 + .../slots/plugin/fortunedragon/base.go | 142 + .../plugin/fortunedragon/choose_wheel.go | 28 + .../slots/plugin/fortunedragon/common.go | 33 + .../slots/plugin/fortunedragon/descx.go | 55 + .../slots/plugin/fortunedragon/init.go | 10 + .../slots/plugin/fortunedragon/simulator.go | 69 + .../slots/plugin/fortunedragon/tospecial.go | 43 + .../slots/plugin/fortunemouse/base.go | 125 + .../slots/plugin/fortunemouse/common.go | 15 + .../slots/plugin/fortunemouse/descx.go | 39 + .../slots/plugin/fortunemouse/init.go | 7 + .../slots/plugin/fortunemouse/super_stack.go | 68 + .../slots/plugin/fortunemouse/tospecial.go | 57 + .../slotspkg/slots/plugin/fortuneox/base.go | 143 + .../slotspkg/slots/plugin/fortuneox/common.go | 16 + .../slotspkg/slots/plugin/fortuneox/descx.go | 41 + .../slotspkg/slots/plugin/fortuneox/init.go | 11 + .../slots/plugin/fortuneox/simulator.go | 78 + .../slots/plugin/fortuneox/super_stack.go | 73 + .../slots/plugin/fortuneox/tospecial.go | 57 + .../slots/plugin/fortunerabbit/base.go | 166 + .../slots/plugin/fortunerabbit/common.go | 17 + .../slots/plugin/fortunerabbit/descx.go | 34 + .../slots/plugin/fortunerabbit/init.go | 8 + .../slots/plugin/fortunerabbit/tospecial.go | 54 + .../slots/plugin/fortunetiger/base.go | 273 + .../slots/plugin/fortunetiger/common.go | 62 + .../slots/plugin/fortunetiger/descx.go | 45 + .../slots/plugin/fortunetiger/init.go | 11 + .../slots/plugin/fortunetiger/simulator.go | 90 + .../plugin/fortunetiger/specialrespin.go | 67 + .../slots/plugin/fortunetiger/tospecial.go | 85 + gamesrv/slotspkg/slots/plugin/generic/base.go | 48 + .../slotspkg/slots/plugin/generic/descx.go | 20 + .../slots/plugin/generic/descx_jackpot.go | 83 + .../slots/plugin/generic/descx_scatter.go | 97 + .../slots/plugin/generic/descx_super_stack.go | 40 + .../slotspkg/slots/plugin/generic/jackpot.go | 156 + .../slotspkg/slots/plugin/generic/scatter.go | 91 + .../slots/plugin/generic/super_stack.go | 79 + gamesrv/slotspkg/slots/plugin/init.go | 49 + gamesrv/slotspkg/slots/plugin/test/base.go | 69 + gamesrv/slotspkg/slots/plugin/test/common.go | 5 + gamesrv/slotspkg/slots/plugin/test/init.go | 7 + gamesrv/slotspkg/slots/reg/customs.go | 20 + gamesrv/slotspkg/slots/reg/plugins.go | 34 + gamesrv/slotspkg/slots/reg/register.go | 71 + gamesrv/slotspkg/slots/slotsmgr.go | 41 + gamesrv/slotspkg/slots/types/cli/1to2array.go | 55 + gamesrv/slotspkg/slots/types/cli/cli.go | 48 + gamesrv/slotspkg/slots/types/cli/simulator.go | 930 +++ .../slotspkg/slots/types/rpc/simulator.pb.go | 310 + gamesrv/slotspkg/tools/converter/converter.go | 47 + protocol/doc.md | 3 + protocol/fortunedragon/fortunedragon.pb.go | 792 +++ protocol/fortunedragon/fortunedragon.proto | 67 + 409 files changed, 42499 insertions(+) create mode 100644 gamerule/fortunedragon/constants.go create mode 100644 gamerule/fortunedragon/fruitsAlgorithm.go create mode 100644 gamerule/fortunedragon/func.go create mode 100644 gamesrv/fortunedragon/action_fortunedragon.go create mode 100644 gamesrv/fortunedragon/playerdata_fortunedragon.go create mode 100644 gamesrv/fortunedragon/scenedata_fortunedragon.go create mode 100644 gamesrv/fortunedragon/scenepolicy_fortunedragon.go create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/CashMania.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/FortuneDragon.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/FortuneMouse.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/FortuneOx.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/FortuneRabbit.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/FortuneTiger.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/Matrix.lua create mode 100644 gamesrv/slotspkg/external/Client_Config/Config/base/PrizeModel.lua create mode 100644 gamesrv/slotspkg/external/ExportGoConfig.bat create mode 100644 gamesrv/slotspkg/external/README.md create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm15X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm19X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm20X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm25X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm30X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm35X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm40X1.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm40X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm7X1TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line100Form12X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line100Form6X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line10Form343TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line10Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form3X3TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form3X3TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form5X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line20Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form36666TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeD.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeE.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeD.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeE.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X6TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form4X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form4X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line3Form3X3TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form34543TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeD.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form4X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form4X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form4X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form4X6TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeD.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeE.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeF.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeG.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeH.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form45454TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeD.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeE.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeF.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X6TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeC.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form6X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line5Form3X3TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line5Form3X3TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line60Form33633TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line60Form8X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line65Form6X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line70Form9X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line75Form5X6TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line75Form6X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form10X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form4X6TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form7X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line90Form11X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line95Form8X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/MatchForm7X7TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/SameForm5X6TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/SameForm5X6TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm333331.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm33555.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm344444.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm3X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm44668.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm4X5TypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm4X5TypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/PrizeModel/PrizeModelTypeA.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Link/PrizeModel/PrizeModelTypeB.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/OptHall/S_OptGroup.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_MidItemInfo.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_Others.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_RandomItem.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_RandomMid.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_WinItem.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_WinMid.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_BaseMultiplier.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_FreeMultiplier.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_FreeMultiplierCount.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_Others.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/ReelFreeSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_ReelSureWinBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_ReelSureWinFreeSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Feature/S_Others.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Feature/S_SuperStack.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/ReelReSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_Others.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_SuperStack1.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_SuperStack2.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/ReelReSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/CashPrizeWeight.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/S_ForceCashCountWeight.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/S_Others.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/ReelFreeSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Feature/S_Others.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Feature/S_SuperStack.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/ReelReSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Feature/Multiplier.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Feature/S_ReelChoose.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Feature/Scatter.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin1.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin2.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin3.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin7.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin8.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin4.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin5.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Bet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Feature/S_Random.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/ReelBaseSpin.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/S_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Slots/Test/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/System/S_Simulator.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1000_Map.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1001_BetSize.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1002_BetLevel.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1003_BetLine.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1004_BetChangeList.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1005_Scatter.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1006_Symbol.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1007_Matrix.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1008_Formation.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1009_Jackpot.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1010_SuperStack.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1012_PrizeModel.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1013_OptAuthenticate.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1014_Vector.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1015_Text.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Base/Template/1016_FirstBet.xlsx create mode 100644 gamesrv/slotspkg/external/excel/Settings.xlsx create mode 100644 gamesrv/slotspkg/external/excel2lua.bat create mode 100644 gamesrv/slotspkg/internal/dao/dataset/a_debug.go create mode 100644 gamesrv/slotspkg/internal/dao/dataset/dataset.go create mode 100644 gamesrv/slotspkg/internal/dao/struct/struct.go create mode 100644 gamesrv/slotspkg/internal/dao/thinkingdata/filter.go create mode 100644 gamesrv/slotspkg/internal/dao/thinkingdata/formatter.go create mode 100644 gamesrv/slotspkg/internal/dao/thinkingdata/structs.go create mode 100644 gamesrv/slotspkg/internal/dao/thinkingdata/thinkingdata.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/cash_mania.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/fortune_dragon.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/fortune_mouse.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/fortune_ox.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/fortune_rabbit.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/fortune_tiger.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/gateof_olympus.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/matrix.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/opt_group.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/prize_model.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/simulator.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/test.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/base/var.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/storage/storage.go create mode 100644 gamesrv/slotspkg/internal/exported/excel2go/structs/structs.go create mode 100644 gamesrv/slotspkg/internal/generic/ddb/config.go create mode 100644 gamesrv/slotspkg/internal/generic/ddb/ddb.go create mode 100644 gamesrv/slotspkg/internal/generic/errors/errors.go create mode 100644 gamesrv/slotspkg/internal/generic/errors/errors_test.go create mode 100644 gamesrv/slotspkg/internal/generic/errors/format.go create mode 100644 gamesrv/slotspkg/internal/generic/errors/init.go create mode 100644 gamesrv/slotspkg/internal/generic/errors/wrapper.go create mode 100644 gamesrv/slotspkg/internal/generic/global/config.go create mode 100644 gamesrv/slotspkg/internal/generic/global/configencryptor.go create mode 100644 gamesrv/slotspkg/internal/generic/global/ddb.go create mode 100644 gamesrv/slotspkg/internal/generic/global/global.go create mode 100644 gamesrv/slotspkg/internal/generic/global/global_test.go create mode 100644 gamesrv/slotspkg/internal/generic/global/globalmgr.go create mode 100644 gamesrv/slotspkg/internal/generic/key/access_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/activity_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/authenticate.go create mode 100644 gamesrv/slotspkg/internal/generic/key/branch.go create mode 100644 gamesrv/slotspkg/internal/generic/key/broadcast_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/coin.go create mode 100644 gamesrv/slotspkg/internal/generic/key/common.go create mode 100644 gamesrv/slotspkg/internal/generic/key/ddb.go create mode 100644 gamesrv/slotspkg/internal/generic/key/event.go create mode 100644 gamesrv/slotspkg/internal/generic/key/group.go create mode 100644 gamesrv/slotspkg/internal/generic/key/invite_award_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/log_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/machine_key.go create mode 100644 gamesrv/slotspkg/internal/generic/key/machine_mode.go create mode 100644 gamesrv/slotspkg/internal/generic/key/machine_ratio_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/mail_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/pay_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/payment.go create mode 100644 gamesrv/slotspkg/internal/generic/key/player_black.go create mode 100644 gamesrv/slotspkg/internal/generic/key/player_mode.go create mode 100644 gamesrv/slotspkg/internal/generic/key/process_command.go create mode 100644 gamesrv/slotspkg/internal/generic/key/rate_mode.go create mode 100644 gamesrv/slotspkg/internal/generic/key/reasons.go create mode 100644 gamesrv/slotspkg/internal/generic/key/redimo_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/room_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/second_stage_strategy.go create mode 100644 gamesrv/slotspkg/internal/generic/key/service_name.go create mode 100644 gamesrv/slotspkg/internal/generic/key/session_callback_seq.go create mode 100644 gamesrv/slotspkg/internal/generic/key/session_key.go create mode 100644 gamesrv/slotspkg/internal/generic/key/spin_type.go create mode 100644 gamesrv/slotspkg/internal/generic/key/tag_hub.go create mode 100644 gamesrv/slotspkg/internal/generic/key/theme.go create mode 100644 gamesrv/slotspkg/internal/generic/key/unique.go create mode 100644 gamesrv/slotspkg/internal/generic/key/user_tag_system.go create mode 100644 gamesrv/slotspkg/internal/generic/key/win_type.go create mode 100644 gamesrv/slotspkg/internal/generic/pkg/hashx/hash.go create mode 100644 gamesrv/slotspkg/internal/generic/pkg/jwts/jwt.go create mode 100644 gamesrv/slotspkg/internal/generic/pkg/jwts/jwter.go create mode 100644 gamesrv/slotspkg/internal/generic/pkg/slice.go create mode 100644 gamesrv/slotspkg/internal/module/player/bet.go create mode 100644 gamesrv/slotspkg/internal/module/player/coin.go create mode 100644 gamesrv/slotspkg/internal/module/player/dataset.go create mode 100644 gamesrv/slotspkg/internal/module/player/db.go create mode 100644 gamesrv/slotspkg/internal/module/player/lastbetid.go create mode 100644 gamesrv/slotspkg/internal/module/player/method.go create mode 100644 gamesrv/slotspkg/internal/module/player/player.go create mode 100644 gamesrv/slotspkg/internal/module/player/playermgr.go create mode 100644 gamesrv/slotspkg/internal/module/session/session.go create mode 100644 gamesrv/slotspkg/internal/module/shared/structs.go create mode 100644 gamesrv/slotspkg/internal/module/shared/types.go create mode 100644 gamesrv/slotspkg/internal/module/shell/mono.go create mode 100644 gamesrv/slotspkg/internal/module/shell/session.go create mode 100644 gamesrv/slotspkg/internal/module/shell/shell.go create mode 100644 gamesrv/slotspkg/internal/module/shell/storage.go create mode 100644 gamesrv/slotspkg/slots/dataset.go create mode 100644 gamesrv/slotspkg/slots/desc/formation_desc.go create mode 100644 gamesrv/slotspkg/slots/desc/machine_desc.go create mode 100644 gamesrv/slotspkg/slots/desc/node_desc.go create mode 100644 gamesrv/slotspkg/slots/entity/cheat.go create mode 100644 gamesrv/slotspkg/slots/entity/custom.go create mode 100644 gamesrv/slotspkg/slots/entity/db.go create mode 100644 gamesrv/slotspkg/slots/entity/entity.go create mode 100644 gamesrv/slotspkg/slots/entity/feature.go create mode 100644 gamesrv/slotspkg/slots/entity/formation.go create mode 100644 gamesrv/slotspkg/slots/entity/node.go create mode 100644 gamesrv/slotspkg/slots/entity/node_desc.go create mode 100644 gamesrv/slotspkg/slots/entity/progress.go create mode 100644 gamesrv/slotspkg/slots/entity/rand.go create mode 100644 gamesrv/slotspkg/slots/entity/reset.go create mode 100644 gamesrv/slotspkg/slots/entity/round.go create mode 100644 gamesrv/slotspkg/slots/entity/serializer.go create mode 100644 gamesrv/slotspkg/slots/entity/spin.go create mode 100644 gamesrv/slotspkg/slots/entity/win.go create mode 100644 gamesrv/slotspkg/slots/formation/coords.go create mode 100644 gamesrv/slotspkg/slots/formation/formation.go create mode 100644 gamesrv/slotspkg/slots/formation/helper.go create mode 100644 gamesrv/slotspkg/slots/formation/symbol_line.go create mode 100644 gamesrv/slotspkg/slots/formation/symbol_match.go create mode 100644 gamesrv/slotspkg/slots/formation/symbol_same.go create mode 100644 gamesrv/slotspkg/slots/formation/symbol_way.go create mode 100644 gamesrv/slotspkg/slots/handler.go create mode 100644 gamesrv/slotspkg/slots/intf/callback.go create mode 100644 gamesrv/slotspkg/slots/intf/feature.go create mode 100644 gamesrv/slotspkg/slots/intf/formation.go create mode 100644 gamesrv/slotspkg/slots/intf/master.go create mode 100644 gamesrv/slotspkg/slots/intf/node.go create mode 100644 gamesrv/slotspkg/slots/intf/plugin.go create mode 100644 gamesrv/slotspkg/slots/intf/spinner.go create mode 100644 gamesrv/slotspkg/slots/machine/feature.go create mode 100644 gamesrv/slotspkg/slots/machine/formation.go create mode 100644 gamesrv/slotspkg/slots/machine/machine.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_callback.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_master_custom.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_master_data.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_master_feature.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_master_formation.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_master_misc.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_master_node.go create mode 100644 gamesrv/slotspkg/slots/machine/machine_spinner.go create mode 100644 gamesrv/slotspkg/slots/machine/node.go create mode 100644 gamesrv/slotspkg/slots/playasrecorder.go create mode 100644 gamesrv/slotspkg/slots/plugin/cashmania/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/cashmania/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/cashmania/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/cashmania/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/cashmania/simulator.go create mode 100644 gamesrv/slotspkg/slots/plugin/cashmania/tospecial.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/choose_wheel.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/simulator.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunedragon/tospecial.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunemouse/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunemouse/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunemouse/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunemouse/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunemouse/super_stack.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunemouse/tospecial.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/simulator.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/super_stack.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortuneox/tospecial.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunerabbit/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunerabbit/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunerabbit/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunerabbit/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunerabbit/tospecial.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/simulator.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/specialrespin.go create mode 100644 gamesrv/slotspkg/slots/plugin/fortunetiger/tospecial.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/descx.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/descx_jackpot.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/descx_scatter.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/descx_super_stack.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/jackpot.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/scatter.go create mode 100644 gamesrv/slotspkg/slots/plugin/generic/super_stack.go create mode 100644 gamesrv/slotspkg/slots/plugin/init.go create mode 100644 gamesrv/slotspkg/slots/plugin/test/base.go create mode 100644 gamesrv/slotspkg/slots/plugin/test/common.go create mode 100644 gamesrv/slotspkg/slots/plugin/test/init.go create mode 100644 gamesrv/slotspkg/slots/reg/customs.go create mode 100644 gamesrv/slotspkg/slots/reg/plugins.go create mode 100644 gamesrv/slotspkg/slots/reg/register.go create mode 100644 gamesrv/slotspkg/slots/slotsmgr.go create mode 100644 gamesrv/slotspkg/slots/types/cli/1to2array.go create mode 100644 gamesrv/slotspkg/slots/types/cli/cli.go create mode 100644 gamesrv/slotspkg/slots/types/cli/simulator.go create mode 100644 gamesrv/slotspkg/slots/types/rpc/simulator.pb.go create mode 100644 gamesrv/slotspkg/tools/converter/converter.go create mode 100644 protocol/fortunedragon/fortunedragon.pb.go create mode 100644 protocol/fortunedragon/fortunedragon.proto diff --git a/gamerule/fortunedragon/constants.go b/gamerule/fortunedragon/constants.go new file mode 100644 index 0000000..9407967 --- /dev/null +++ b/gamerule/fortunedragon/constants.go @@ -0,0 +1,20 @@ +package fortunedragon + +// 房间类型 +const ( + RoomMode_Classic int = iota //经典 + RoomMode_Max +) + +// 场景状态 +const ( + FortuneDragonStateStart int = iota //默认状态 + FortuneDragonStateMax +) + +// 玩家操作 +const ( + FortuneDragonPlayerOpStart int = iota + FortuneDragonPlayerOpSwitch +) +const NowByte int64 = 10000 diff --git a/gamerule/fortunedragon/fruitsAlgorithm.go b/gamerule/fortunedragon/fruitsAlgorithm.go new file mode 100644 index 0000000..4aa587f --- /dev/null +++ b/gamerule/fortunedragon/fruitsAlgorithm.go @@ -0,0 +1,359 @@ +package fortunedragon + +func (w *WinResult) Init() { + w.EleValue = make([]int32, 15) + w.WinLine = nil +} + +// 玛丽游戏 +func (w *WinResult) InitMary() { + w.MaryOutSide = -1 + w.MaryMidArray = nil + w.MaryOutRate = 0 + w.MaryMidRate = 0 + w.MaryLianXu = 0 +} + +// 正常游戏 免费游戏 +func (w *WinResult) CreateLine(ele [][]int32, free bool) { + w.Init() + w.result(ele, free) + //Print(w.EleValue) +} +func (w *WinResult) Win() { + w.getWinLine() +} + +// 玛丽游戏 +func (w *WinResult) CreateMary(maryGame [][]int32) { + w.InitMary() + w.MaryOutSide = RandSliceInt32IndexByWightN(maryGame[0]) + for i := 0; i < 4; i++ { + ele := RandSliceInt32IndexByWightN(maryGame[1]) + w.MaryMidArray = append(w.MaryMidArray, ele) + } + //fmt.Println("外圈元素", w.MaryOutSide) + //fmt.Println("内圈元素", w.MaryMidArray) + w.MaryWin() +} +func (w *WinResult) MaryWin() { + var outRate int64 + switch w.MaryOutSide { + case Watermelon: + outRate += 200 + case Grape: + outRate += 100 + case Lemon: + outRate += 70 + case Cherry: + outRate += 50 + case Banana: + outRate += 20 + case Apple: + outRate += 10 + case Pineapple: + outRate += 5 + } + var flag = w.MaryMidArray[0] + var n int32 + for _, v := range w.MaryMidArray { + if flag != v { + break + } + n++ + } + for _, v := range w.MaryMidArray { + if w.MaryOutSide == v { + w.MaryOutRate = outRate + break + } + } + if n >= 3 { + if n == 3 { + w.MaryMidRate = 20 + } else if n == 4 { + w.MaryMidRate = 500 + } + w.MaryLianXu = n + } + //fmt.Println("外圈倍率:", w.MaryOutRate) + //fmt.Println("内圈倍率", w.MaryMidRate) +} + +func (w *WinResult) result(ele [][]int32, free bool) { + sl1 := make(map[int]bool) + sl2 := make(map[int]bool) + sl3 := make(map[int]bool) + n := 0 + for i := 0; i < Column; i++ { + for j := 0; j < Row; j++ { + val := RandSliceInt32IndexByWightN(ele[j]) + if val == Scatter { + if !sl1[j] { + sl1[j] = true + } else { + noScatter := make([]int32, len(ele[j])) + copy(noScatter, ele[j]) + noScatter[Scatter] = 0 + noScatter[Bonus] = 0 + noScatter[Wild] = 0 + val = RandSliceInt32IndexByWightN(noScatter) + } + } else if val == Bonus { + if !sl2[j] { + sl2[j] = true + } else { + noBonus := make([]int32, len(ele[j])) + copy(noBonus, ele[j]) + noBonus[Scatter] = 0 + noBonus[Bonus] = 0 + noBonus[Wild] = 0 + val = RandSliceInt32IndexByWightN(noBonus) + } + } else if val == Wild { + if !sl3[j] { + sl3[j] = true + } else { + noWild := make([]int32, len(ele[j])) + copy(noWild, ele[j]) + noWild[Scatter] = 0 + noWild[Bonus] = 0 + noWild[Wild] = 0 + val = RandSliceInt32IndexByWightN(noWild) + } + } + w.EleValue[n] = val + n++ + } + } + + if free { + //免费 不中 玛丽游戏和奖池 + eleVal := make([]int32, len(w.EleValue)) + copy(eleVal, w.EleValue) + var wls WinResult + wls.Init() + wls.EleValue = eleVal + wls.Win() + for _, v := range wls.WinLine { + flag := v.Lines[0] + if flag == Scatter { + noScatter := make([]int32, len(ele[2])) + copy(noScatter, ele[2]) + noScatter[Wild] = 0 + noScatter[Scatter] = 0 + vv := RandSliceInt32IndexByWightN(noScatter) + w.EleValue[v.Poss[2]] = vv + } else { + wildNum := 0 + for _, el := range v.Lines { + if el == Wild { + wildNum++ + } else { + wildNum = 0 + } + } + if wildNum >= 3 { + noWild := make([]int32, len(ele[2])) + copy(noWild, ele[2]) + noWild[Wild] = 0 + noWild[Scatter] = 0 + w.EleValue[v.Poss[2]] = RandSliceInt32IndexByWightN(noWild) + } + } + } + } +} + +func (w *WinResult) getWinLine() { + n := 0 + var flag int32 = -1 + for k, cols := range LineWinNum { + flag = w.EleValue[cols[0]] + //Bonus Scatter 不参与线数 Bonus下班单独计算 + if flag == Bonus || flag == Scatter { + continue + } + var line []int32 + var pos []int32 + for _, key := range cols { + //不计算 Bonus + if (flag == w.EleValue[key] || Wild == w.EleValue[key] || flag == Wild) && w.EleValue[key] != Bonus && + w.EleValue[key] != Scatter { + if Wild != w.EleValue[key] { + flag = w.EleValue[key] + } + n++ + line = append(line, w.EleValue[key]) + pos = append(pos, int32(key)) + } else { + if n >= 3 || (flag == Banana && n >= 2) { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(flag, n), + }) + } + n = 0 + pos = nil + line = nil + break + } + if n == 5 { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(flag, n), + }) + n = 0 + pos = nil + line = nil + } + } + } + + w.getBonusAndScatter() + + //test code + //if len(w.WinLine) > 0 { + // fmt.Println("====== 赢的总线数 =======", len(w.WinLine)) + // for k, v := range w.WinLine { + // fmt.Print(k+1, " ") + // PrintWin(v.Lines) + // fmt.Println(k+1, "位置 ", v.Poss, " 中奖线号:", v.LineId, " 线元素:", v.Lines, " 倍率:", v.Rate) + // } + //} +} +func (w *WinResult) getBonusAndScatter() { + //只计算Bonus和Scatter + for k, cols := range LineWinNum { + var n int + var line []int32 + var pos []int32 + for l, key := range cols { + if w.EleValue[key] == Bonus { + n++ + line = append(line, w.EleValue[key]) + pos = append(pos, int32(key)) + } else { + if n >= 3 { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(Bonus, n), + }) + } + n = 0 + pos = nil + line = nil + continue + } + if l == 4 { + if n >= 3 { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(Bonus, n), + }) + n = 0 + pos = nil + line = nil + } + } + } + n = 0 + pos = nil + line = nil + for l, key := range cols { + if w.EleValue[key] == Scatter { + n++ + line = append(line, w.EleValue[key]) + pos = append(pos, int32(key)) + } else { + if n >= 3 { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(Scatter, n), + }) + } + n = 0 + pos = nil + line = nil + continue + } + if l == 4 { + if n >= 3 { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(Scatter, n), + }) + n = 0 + pos = nil + line = nil + } + } + } + n = 0 + pos = nil + line = nil + for l, key := range cols { + if w.EleValue[key] == Wild { + n++ + line = append(line, w.EleValue[key]) + pos = append(pos, int32(key)) + } else { + if n >= 3 { + isHave := false + for _, i2 := range w.WinLine { + if i2.LineId == k+1 { + isHave = true + break + } + } + if !isHave { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(Wild, n), + }) + } + } + n = 0 + pos = nil + line = nil + continue + } + if l == 4 { + if n >= 3 { + isHave := false + for _, i2 := range w.WinLine { + if i2.LineId == k+1 { + isHave = true + break + } + } + if !isHave { + w.WinLine = append(w.WinLine, WinLine{ + Lines: line, + Poss: pos, + LineId: k + 1, + Rate: GetRate(Wild, n), + }) + } + n = 0 + pos = nil + line = nil + } + } + } + } +} diff --git a/gamerule/fortunedragon/func.go b/gamerule/fortunedragon/func.go new file mode 100644 index 0000000..d046378 --- /dev/null +++ b/gamerule/fortunedragon/func.go @@ -0,0 +1,215 @@ +package fortunedragon + +import ( + "fmt" + "math/rand" + "strconv" +) + +func GetLineEleVal(gameState int, needRate int64, eleLineAppearRate [][]int32, isLow bool) (WinResult, []int, [][]int32) { + var preInt [][]int32 + for i := 0; i < 1000; i++ { + var wls WinResult + wls.CreateLine(eleLineAppearRate, false) + wls.Win() + var rate int64 + var bonusNum int + var wildNum int + for _, v := range wls.WinLine { + if len(v.Lines) == 0 { + continue + } + rate += v.Rate + if v.Lines[0] == Bonus { + bonusNum += len(v.Lines) + } else if v.Lines[0] == Wild { + wildNum += len(v.Lines) + } + NowWildNum := 0 + for _, l := range v.Lines { + if l != Wild && NowWildNum > 0 { + if NowWildNum < 3 { + NowWildNum = 0 + } + } else if l == Wild { + NowWildNum++ + } + } + if NowWildNum >= 3 { + wildNum += NowWildNum + } + } + + //fmt.Printf("%v || rate %v", wls.EleValue, rate) + //fmt.Println() + var n int64 = 5 + if gameState == FreeGame { + n = 50 + } + if wildNum >= 3 || bonusNum >= 3 { + continue + } + if isLow { + continue + } + if rate >= needRate-n && rate <= needRate+n { + var poss []int32 + for _, v := range wls.WinLine { + poss = append(poss, v.Poss...) + } + var noPoss []int + for k := range wls.EleValue { + isF := false + for _, pn := range poss { + if k == int(pn) { + isF = true + break + } + } + if !isF { + noPoss = append(noPoss, k) + } + } + //fmt.Println("...........find rate: ", rate, " 第 ", i+1, " 次.") + return wls, noPoss, nil + } + if rate != 0 && rate < 50 && len(preInt) < 10 { + preInt = append(preInt, wls.EleValue) + } + } + return WinResult{}, nil, preInt +} +func GetLinePos(lineId int) []int { + if lineId <= 9 || lineId >= 1 { + return LineWinNum[lineId-1] + } + return nil +} +func GetRate(ele int32, num int) int64 { + if data, ok := EleNumRate[ele]; ok { + if r, ok2 := data[num]; ok2 { + return r + } + } + return 0 +} +func RandSliceInt32IndexByWightN(s1 []int32) int32 { + total := 0 + for _, v := range s1 { + total += int(v) + } + if total <= 0 { + return 0 + } + random := rand.Intn(total) + total = 0 + for i, v := range s1 { + total += int(v) + if random < total { + return int32(i) + } + } + return 0 +} +func PrintFruit(idx int32) (str string) { + switch idx { + case Wild: + str += "Wild" + case Bonus: + str += "Bonus" + case Scatter: + str += "SCATTER" + case Bar: + str += "Bar" + case Cherry: + str += "樱桃" + case Bell: + str += "铃铛" + case Pineapple: + str += "菠萝" + case Grape: + str += "葡萄" + case Lemon: + str += "柠檬" + case Watermelon: + str += "西瓜" + case Banana: + str += "香蕉" + case Apple: + str += "苹果" + case Bomb: + str += "炸弹" + } + return str +} + +func Print(res []int32) { + fmt.Println(res, len(res)) + str := "" + for k, ele := range res { + switch ele { + case Wild: + str += "Wild," + case Bonus: + str += "Bonus," + case Scatter: + str += "Scatter," + case Bar: + str += "Bar," + case Cherry: + str += "樱桃," + case Bell: + str += "铃铛," + case Pineapple: + str += "菠萝," + case Grape: + str += "葡萄," + case Lemon: + str += "柠檬," + case Watermelon: + str += "西瓜," + case Apple: + str += "苹果," + case Banana: + str += "香蕉," + } + if (k+1)%5 == 0 { + fmt.Println("第", strconv.Itoa((k+1)/5), "行 ", str) + str = "" + } + } +} +func PrintWin(lines []int32) { + str := "" + for _, ele := range lines { + switch ele { + case Wild: + str += "Wild," + case Bonus: + str += "Bonus," + case Scatter: + str += "Scatter," + case Bar: + str += "Bar," + case Cherry: + str += "樱桃," + case Bell: + str += "铃铛," + case Pineapple: + str += "菠萝," + case Grape: + str += "葡萄," + case Lemon: + str += "柠檬," + case Watermelon: + str += "西瓜," + case Banana: + str += "香蕉," + case Apple: + str += "苹果," + case Bomb: + str += "炸弹," + } + } + fmt.Println(str) +} diff --git a/gamesrv/fortunedragon/action_fortunedragon.go b/gamesrv/fortunedragon/action_fortunedragon.go new file mode 100644 index 0000000..f0c4ea5 --- /dev/null +++ b/gamesrv/fortunedragon/action_fortunedragon.go @@ -0,0 +1,48 @@ +package fortunedragon + +import ( + "mongo.games.com/game/protocol/fortunedragon" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + + "mongo.games.com/game/common" + "mongo.games.com/game/gamesrv/base" +) + +type CSFortuneDragonOpPacketFactory struct { +} +type CSFortuneDragonOpHandler struct { +} + +func (this *CSFortuneDragonOpPacketFactory) CreatePacket() interface{} { + pack := &fortunedragon.CSFortuneDragonOp{} + return pack +} + +func (this *CSFortuneDragonOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { + if op, ok := data.(*fortunedragon.CSFortuneDragonOp); ok { + p := base.PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warn("CSFortuneDragonOpHandler p == nil") + return nil + } + scene := p.GetScene() + if scene == nil { + logger.Logger.Warn("CSFortuneDragonOpHandler p.scene == nil") + return nil + } + if !scene.HasPlayer(p) { + return nil + } + if scene.GetScenePolicy() != nil { + scene.GetScenePolicy().OnPlayerOp(scene, p, int(op.GetOpCode()), op.GetParams()) + } + return nil + } + return nil +} +func init() { + //fortunedragon + common.RegisterHandler(int(fortunedragon.FortuneDragonPID_PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP), &CSFortuneDragonOpHandler{}) + netlib.RegisterFactory(int(fortunedragon.FortuneDragonPID_PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP), &CSFortuneDragonOpPacketFactory{}) +} diff --git a/gamesrv/fortunedragon/playerdata_fortunedragon.go b/gamesrv/fortunedragon/playerdata_fortunedragon.go new file mode 100644 index 0000000..e617dce --- /dev/null +++ b/gamesrv/fortunedragon/playerdata_fortunedragon.go @@ -0,0 +1,16 @@ +package fortunedragon + +import ( + "mongo.games.com/game/gamesrv/base" +) + +type FortuneDragonPlayerData struct { + *base.Player + leaveTime int32 //离开时间 +} + +func (p *FortuneDragonPlayerData) init() { +} +func (p *FortuneDragonPlayerData) Clear() { + +} diff --git a/gamesrv/fortunedragon/scenedata_fortunedragon.go b/gamesrv/fortunedragon/scenedata_fortunedragon.go new file mode 100644 index 0000000..51fffb2 --- /dev/null +++ b/gamesrv/fortunedragon/scenedata_fortunedragon.go @@ -0,0 +1,43 @@ +package fortunedragon + +import ( + "mongo.games.com/game/gamesrv/base" +) + +type FortuneDragonSceneData struct { + *base.Scene //场景 + players map[int32]*FortuneDragonPlayerData //玩家信息 +} + +func NewFortuneDragonSceneData(s *base.Scene) *FortuneDragonSceneData { + sceneEx := &FortuneDragonSceneData{ + Scene: s, + players: make(map[int32]*FortuneDragonPlayerData), + } + sceneEx.Init() + return sceneEx +} +func (s *FortuneDragonSceneData) Init() { + +} + +func (s *FortuneDragonSceneData) Clear() { + //应该是水池变一次就判断修改一次 + //s.slotRateWeight = s.slotRateWeightTotal[0] +} +func (s *FortuneDragonSceneData) SceneDestroy(force bool) { + //销毁房间 + s.Scene.Destroy(force) +} + +func (s *FortuneDragonSceneData) delPlayer(SnId int32) { + if _, exist := s.players[SnId]; exist { + delete(s.players, SnId) + } +} +func (s *FortuneDragonSceneData) OnPlayerLeave(p *base.Player, reason int) { + if /*playerEx*/ _, ok := p.ExtraData.(*FortuneDragonPlayerData); ok { + + } + s.delPlayer(p.SnId) +} diff --git a/gamesrv/fortunedragon/scenepolicy_fortunedragon.go b/gamesrv/fortunedragon/scenepolicy_fortunedragon.go new file mode 100644 index 0000000..6bbfe10 --- /dev/null +++ b/gamesrv/fortunedragon/scenepolicy_fortunedragon.go @@ -0,0 +1,363 @@ +package fortunedragon + +import ( + "mongo.games.com/game/gamerule/fortunedragon" + "time" + + "mongo.games.com/goserver/core" + "mongo.games.com/goserver/core/logger" + + "mongo.games.com/game/common" + "mongo.games.com/game/gamesrv/base" + "mongo.games.com/game/proto" + protocol "mongo.games.com/game/protocol/fortunedragon" +) + +// //////////////////////////////////////////////////////////// +var ScenePolicyFortuneDragonSington = &ScenePolicyFortuneDragon{} + +type ScenePolicyFortuneDragon struct { + base.BaseScenePolicy + states [fortunedragon.FortuneDragonStateMax]base.SceneState +} + +// 创建场景扩展数据 +func (this *ScenePolicyFortuneDragon) CreateSceneExData(s *base.Scene) interface{} { + sceneEx := NewFortuneDragonSceneData(s) + if sceneEx != nil { + if sceneEx.GetInit() { + s.SetExtraData(sceneEx) + } + } + return sceneEx +} + +// 创建玩家扩展数据 +func (this *ScenePolicyFortuneDragon) CreatePlayerExData(s *base.Scene, p *base.Player) interface{} { + playerEx := &FortuneDragonPlayerData{Player: p} + p.SetExtraData(playerEx) + return playerEx +} + +// 场景开启事件 +func (this *ScenePolicyFortuneDragon) OnStart(s *base.Scene) { + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnStart, sceneId=", s.GetSceneId()) + sceneEx := NewFortuneDragonSceneData(s) + if sceneEx != nil { + if sceneEx.GetInit() { + s.SetExtraData(sceneEx) + s.ChangeSceneState(fortunedragon.FortuneDragonStateStart) + } + } +} + +// 场景关闭事件 +func (this *ScenePolicyFortuneDragon) OnStop(s *base.Scene) { + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnStop , sceneId=", s.GetSceneId()) +} + +// 场景心跳事件 +func (this *ScenePolicyFortuneDragon) OnTick(s *base.Scene) { + if s == nil { + return + } + if s.GetSceneState() != nil { + s.GetSceneState().OnTick(s) + } +} + +// 玩家进入事件 +func (this *ScenePolicyFortuneDragon) OnPlayerEnter(s *base.Scene, p *base.Player) { + if s == nil || p == nil { + return + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.Name) + if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + playerEx := &FortuneDragonPlayerData{Player: p} + playerEx.init() + playerEx.Clear() + + sceneEx.players[p.SnId] = playerEx + + p.SetExtraData(playerEx) + FortuneDragonSendRoomInfo(s, sceneEx, playerEx) + + s.FirePlayerEvent(p, base.PlayerEventEnter, nil) + } +} + +// 玩家离开事件 +func (this *ScenePolicyFortuneDragon) OnPlayerLeave(s *base.Scene, p *base.Player, reason int) { + if s == nil || p == nil { + return + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerLeave, sceneId=", s.GetSceneId(), " player=", p.SnId) + if sceneEx, ok := s.ExtraData.(*FortuneDragonSceneData); ok { + s.FirePlayerEvent(p, base.PlayerEventLeave, nil) + sceneEx.OnPlayerLeave(p, reason) + } +} + +// 玩家掉线 +func (this *ScenePolicyFortuneDragon) OnPlayerDropLine(s *base.Scene, p *base.Player) { + if s == nil || p == nil { + return + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerDropLine, sceneId=", s.GetSceneId(), " player=", p.SnId) + s.FirePlayerEvent(p, base.PlayerEventDropLine, nil) +} + +// 玩家重连 +func (this *ScenePolicyFortuneDragon) OnPlayerRehold(s *base.Scene, p *base.Player) { + if s == nil || p == nil { + return + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerRehold, sceneId=", s.GetSceneId(), " player=", p.SnId) + if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok { + FortuneDragonSendRoomInfo(s, sceneEx, playerEx) + } + } +} + +// 返回房间 +func (this *ScenePolicyFortuneDragon) OnPlayerReturn(s *base.Scene, p *base.Player) { + if s == nil || p == nil { + return + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerReturn, GetSceneId()=", s.GetSceneId(), " player=", p.Name) + if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok { + //if p.IsMarkFlag(base.PlayerState_Auto) { + // p.UnmarkFlag(base.PlayerState_Auto) + // p.SyncFlag() + //} + //发送房间信息给自己 + FortuneDragonSendRoomInfo(s, sceneEx, playerEx) + s.FirePlayerEvent(p, base.PlayerEventReturn, nil) + } + } +} + +func FortuneDragonSendRoomInfo(s *base.Scene, sceneEx *FortuneDragonSceneData, playerEx *FortuneDragonPlayerData) { + pack := FortuneDragonCreateRoomInfoPacket(s, sceneEx, playerEx) + logger.Logger.Trace("RoomInfo: ", pack) + playerEx.SendToClient(int(protocol.FortuneDragonPID_PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO), pack) +} +func FortuneDragonCreateRoomInfoPacket(s *base.Scene, sceneEx *FortuneDragonSceneData, playerEx *FortuneDragonPlayerData) interface{} { + //房间信息 + pack := &protocol.SCFortuneDragonRoomInfo{ + RoomId: s.SceneId, + GameId: s.GameId, + RoomMode: s.SceneMode, + SceneType: s.GetSceneType(), + Params: common.CopySliceInt64ToInt32(s.Params), + NumOfGames: proto.Int(sceneEx.NumOfGames), + State: proto.Int(s.SceneState.GetState()), + ParamsEx: s.GetDBGameFree().OtherIntParams, + GameFreeId: proto.Int32(s.GetDBGameFree().Id), + //BetLimit: s.GetDBGameFree().BetLimit, + } + + //自己的信息 + if playerEx != nil { + pd := &protocol.FortuneDragonPlayerData{ + SnId: proto.Int32(playerEx.SnId), + Name: proto.String(playerEx.Name), + Head: proto.Int32(playerEx.Head), + Sex: proto.Int32(playerEx.Sex), + Coin: proto.Int64(playerEx.Coin), + Pos: proto.Int(playerEx.Pos), + Flag: proto.Int(playerEx.GetFlag()), + City: proto.String(playerEx.City), + HeadOutLine: proto.Int32(playerEx.HeadOutLine), + VIP: proto.Int32(playerEx.VIP), + } + pack.Player = pd + } + proto.SetDefaults(pack) + return pack +} +func (this *ScenePolicyFortuneDragon) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { + if s == nil || p == nil { + return false + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerOp, sceneId=", s.GetSceneId(), " player=", p.SnId, " opcode=", opcode, " params=", params) + if s.GetSceneState() != nil { + if s.GetSceneState().OnPlayerOp(s, p, opcode, params) { + p.SetLastOPTimer(time.Now()) + return true + } + return false + } + return true +} + +func (this *ScenePolicyFortuneDragon) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) { + if s == nil || p == nil { + return + } + logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " eventcode=", evtcode, " params=", params) + if s.GetSceneState() != nil { + s.GetSceneState().OnPlayerEvent(s, p, evtcode, params) + } +} + +// 当前状态能否换桌 +func (this *ScenePolicyFortuneDragon) CanChangeCoinScene(s *base.Scene, p *base.Player) bool { + if s == nil || p == nil { + return false + } + if s.GetSceneState() != nil { + return s.GetSceneState().CanChangeCoinScene(s, p) + } + return false +} + +// 状态基类 +type SceneBaseStateFortuneDragon struct { +} + +func (this *SceneBaseStateFortuneDragon) GetTimeout(s *base.Scene) int { + if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + return int(time.Now().Sub(sceneEx.GetStateStartTime()) / time.Second) + } + return 0 +} + +func (this *SceneBaseStateFortuneDragon) CanChangeTo(s base.SceneState) bool { + return true +} + +// 当前状态能否换桌 +func (this *SceneBaseStateFortuneDragon) CanChangeCoinScene(s *base.Scene, p *base.Player) bool { + return true +} +func (this *SceneBaseStateFortuneDragon) OnEnter(s *base.Scene) { + if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + sceneEx.SetStateStartTime(time.Now()) + } +} + +func (this *SceneBaseStateFortuneDragon) OnLeave(s *base.Scene) {} +func (this *SceneBaseStateFortuneDragon) OnTick(s *base.Scene) { + if time.Now().Sub(s.GameStartTime) > time.Second*3 { + if sceneEx, ok := s.ExtraData.(*FortuneDragonSceneData); ok { + for _, p := range sceneEx.players { + if p.IsOnLine() { + p.leaveTime = 0 + continue + } + p.leaveTime++ + if p.leaveTime < 60*2 { + continue + } + //踢出玩家 + sceneEx.PlayerLeave(p.Player, common.PlayerLeaveReason_LongTimeNoOp, true) + } + } + s.GameStartTime = time.Now() + } +} +func (this *SceneBaseStateFortuneDragon) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { + return false +} +func (this *SceneBaseStateFortuneDragon) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) { +} + +// //////////////////////////////////////////////////////////// +// 开始状态 +// //////////////////////////////////////////////////////////// +type SceneStateStartFortuneDragon struct { + SceneBaseStateFortuneDragon +} + +func (this *SceneStateStartFortuneDragon) GetState() int { + return fortunedragon.FortuneDragonStateStart +} + +func (this *SceneStateStartFortuneDragon) CanChangeTo(s base.SceneState) bool { + return false +} + +// 当前状态能否换桌 +func (this *SceneStateStartFortuneDragon) CanChangeCoinScene(s *base.Scene, p *base.Player) bool { + if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok { + if playerEx.IsOnLine() { + return false + } + } + return true +} + +func (this *SceneStateStartFortuneDragon) GetTimeout(s *base.Scene) int { + return 0 +} + +func (this *SceneStateStartFortuneDragon) OnEnter(s *base.Scene) { + this.SceneBaseStateFortuneDragon.OnEnter(s) + if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + sceneEx.SetGameNowTime(time.Now()) + } +} + +// 状态离开时 +func (this *SceneStateStartFortuneDragon) OnLeave(s *base.Scene) { + this.SceneBaseStateFortuneDragon.OnLeave(s) + logger.Logger.Tracef("(this *SceneStateStartFortuneDragon) OnLeave, sceneid=%v", s.GetSceneId()) +} + +// 玩家操作 +func (this *SceneStateStartFortuneDragon) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool { + logger.Logger.Tracef("(this *SceneStateStartFortuneDragon) OnPlayerOp, sceneid=%v params=%v", s.GetSceneId(), params) + if this.SceneBaseStateFortuneDragon.OnPlayerOp(s, p, opcode, params) { + return true + } + if _, ok := s.GetExtraData().(*FortuneDragonSceneData); ok { + if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok { + switch opcode { + case fortunedragon.FortuneDragonPlayerOpStart: + playerEx.Clear() + } + } + } + return true +} + +// 玩家事件 +func (this *SceneStateStartFortuneDragon) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) { + logger.Logger.Trace("(this *SceneStateStartFortuneDragon) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " evtcode=", evtcode) + this.SceneBaseStateFortuneDragon.OnPlayerEvent(s, p, evtcode, params) +} + +func (this *SceneStateStartFortuneDragon) OnTick(s *base.Scene) { + this.SceneBaseStateFortuneDragon.OnTick(s) +} + +// ////////////////////////////////////////////////////////////////////////////// +func (this *ScenePolicyFortuneDragon) RegisteSceneState(state base.SceneState) { + if state == nil { + return + } + stateid := state.GetState() + if stateid < 0 || stateid >= fortunedragon.FortuneDragonStateMax { + return + } + this.states[stateid] = state +} + +func (this *ScenePolicyFortuneDragon) GetSceneState(s *base.Scene, stateid int) base.SceneState { + if stateid >= 0 && stateid < fortunedragon.FortuneDragonStateMax { + return this.states[stateid] + } + return nil +} + +func init() { + //主状态 + ScenePolicyFortuneDragonSington.RegisteSceneState(&SceneStateStartFortuneDragon{}) + core.RegisteHook(core.HOOK_BEFORE_START, func() error { + base.RegisteScenePolicy(common.GameId_FortuneDragon, fortunedragon.RoomMode_Classic, ScenePolicyFortuneDragonSington) + return nil + }) +} diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/CashMania.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/CashMania.lua new file mode 100644 index 0000000..fc59d1d --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/CashMania.lua @@ -0,0 +1,382 @@ +-- +local _ = {} + +_.CashManiaBetBetChangeList = { + [0] = { + index = 0, + bet_change_list = 0.3, + bet_size_index = 0, + bet_level_index = 0, + }, + [1] = { + index = 1, + bet_change_list = 0.6, + bet_size_index = 0, + bet_level_index = 1, + }, + [2] = { + index = 2, + bet_change_list = 0.9, + bet_size_index = 0, + bet_level_index = 2, + }, + [3] = { + index = 3, + bet_change_list = 1, + bet_size_index = 1, + bet_level_index = 0, + }, + [4] = { + index = 4, + bet_change_list = 1.5, + bet_size_index = 0, + bet_level_index = 4, + }, + [5] = { + index = 5, + bet_change_list = 3, + bet_size_index = 0, + bet_level_index = 9, + }, + [6] = { + index = 6, + bet_change_list = 5, + bet_size_index = 1, + bet_level_index = 4, + }, + [7] = { + index = 7, + bet_change_list = 9, + bet_size_index = 3, + bet_level_index = 0, + }, + [8] = { + index = 8, + bet_change_list = 10, + bet_size_index = 1, + bet_level_index = 9, + }, + [9] = { + index = 9, + bet_change_list = 15, + bet_size_index = 2, + bet_level_index = 4, + }, + [10] = { + index = 10, + bet_change_list = 30, + bet_size_index = 2, + bet_level_index = 9, + }, + [11] = { + index = 11, + bet_change_list = 45, + bet_size_index = 3, + bet_level_index = 4, + }, + [12] = { + index = 12, + bet_change_list = 90, + bet_size_index = 3, + bet_level_index = 9, + }, +} + +_.CashManiaBetBetLevel = { + [0] = { + index = 0, + bet_level = 1, + }, + [1] = { + index = 1, + bet_level = 2, + }, + [2] = { + index = 2, + bet_level = 3, + }, + [3] = { + index = 3, + bet_level = 4, + }, + [4] = { + index = 4, + bet_level = 5, + }, + [5] = { + index = 5, + bet_level = 6, + }, + [6] = { + index = 6, + bet_level = 7, + }, + [7] = { + index = 7, + bet_level = 8, + }, + [8] = { + index = 8, + bet_level = 9, + }, + [9] = { + index = 9, + bet_level = 10, + }, +} + +_.CashManiaBetBetLine = { + [0] = { + index = 0, + bet_line = 10, + }, +} + +_.CashManiaBetBetSize = { + [0] = { + index = 0, + bet_size = 300, + }, + [1] = { + index = 1, + bet_size = 1000, + }, + [2] = { + index = 2, + bet_size = 3000, + }, + [3] = { + index = 3, + bet_size = 9000, + }, +} + +_.CashManiaFormation = { + { + spin_type = 1, + node_type = "BaseSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line1Form5X5TypeA", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 2, + node_type = "FreeSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line1Form5X5TypeA", + symbol = "Default", + first_init_method = 3, + other_init_method = 3, + first_init_symbols = {}, + other_init_symbols = {}, + }, +} + +_.CashManiaReelBaseSpinRange = { + {5, 5, 5}, +} + +_.CashManiaReelBaseSpinReel = { + {1, 200, 2, 200, 3, 200, 4, 200, 5, 200}, + {6, 200, 7, 200, 8, 200, 9, 200, 10, 200, 11, 200, 12, 200, 13, 200, 14, 200, 15, 200, 16, 200, 17, 200, 18, 200, 19, 200}, + {1, 200, 2, 200, 3, 200, 4, 200, 5, 200}, +} + +_.CashManiaSymbol = { + [1] = { + id = 1, + name = "100倍", + is_wild = false, + group = {1}, + pay_rate = {0, 0, 100}, + client_order = 1, + client_dsc = "", + }, + [2] = { + id = 2, + name = "5倍", + is_wild = false, + group = {2}, + pay_rate = {0, 0, 50}, + client_order = 2, + client_dsc = "", + }, + [3] = { + id = 3, + name = "1倍", + is_wild = false, + group = {3}, + pay_rate = {0, 0, 10}, + client_order = 3, + client_dsc = "", + }, + [4] = { + id = 4, + name = "0.5倍", + is_wild = false, + group = {4}, + pay_rate = {0, 0, 5}, + client_order = 4, + client_dsc = "", + }, + [5] = { + id = 5, + name = "0.1倍", + is_wild = false, + group = {5}, + pay_rate = {0, 0, 1}, + client_order = 5, + client_dsc = "", + }, + [6] = { + id = 6, + name = "5FreeSpin", + is_wild = true, + group = {6}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [7] = { + id = 7, + name = "10FreeSpin", + is_wild = true, + group = {7}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [8] = { + id = 8, + name = "20FreeSpin", + is_wild = true, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [9] = { + id = 9, + name = "wildx1", + is_wild = true, + group = {9}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [10] = { + id = 10, + name = "wildx2", + is_wild = true, + group = {10}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [11] = { + id = 11, + name = "wildx3", + is_wild = true, + group = {11}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [12] = { + id = 12, + name = "wildx5", + is_wild = true, + group = {12}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [13] = { + id = 13, + name = "wildx10", + is_wild = true, + group = {13}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [14] = { + id = 14, + name = "wildx15", + is_wild = true, + group = {14}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [15] = { + id = 15, + name = "wildx20", + is_wild = true, + group = {15}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [16] = { + id = 16, + name = "wildx30", + is_wild = true, + group = {16}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [17] = { + id = 17, + name = "wildx40", + is_wild = true, + group = {17}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [18] = { + id = 18, + name = "wildx50", + is_wild = true, + group = {18}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [19] = { + id = 19, + name = "wildx100", + is_wild = true, + group = {19}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [200] = { + id = 200, + name = "empty", + is_wild = false, + group = {200}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, +} + +_.CashManiaSymbolBetRatio = { + { + bet_ratio = 0.1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneDragon.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneDragon.lua new file mode 100644 index 0000000..c4cbd5d --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneDragon.lua @@ -0,0 +1,334 @@ +-- +local _ = {} + +_.FortuneDragonBetBetChangeList = { + [0] = { + index = 0, + bet_change_list = 0.15, + bet_size_index = 0, + bet_level_index = 0, + }, + [1] = { + index = 1, + bet_change_list = 0.3, + bet_size_index = 0, + bet_level_index = 1, + }, + [2] = { + index = 2, + bet_change_list = 0.45, + bet_size_index = 0, + bet_level_index = 2, + }, + [3] = { + index = 3, + bet_change_list = 0.5, + bet_size_index = 1, + bet_level_index = 0, + }, + [4] = { + index = 4, + bet_change_list = 0.75, + bet_size_index = 0, + bet_level_index = 4, + }, + [5] = { + index = 5, + bet_change_list = 1.5, + bet_size_index = 0, + bet_level_index = 9, + }, + [6] = { + index = 6, + bet_change_list = 2.5, + bet_size_index = 1, + bet_level_index = 4, + }, + [7] = { + index = 7, + bet_change_list = 4.5, + bet_size_index = 3, + bet_level_index = 0, + }, + [8] = { + index = 8, + bet_change_list = 5, + bet_size_index = 1, + bet_level_index = 9, + }, + [9] = { + index = 9, + bet_change_list = 7.5, + bet_size_index = 2, + bet_level_index = 4, + }, + [10] = { + index = 10, + bet_change_list = 15, + bet_size_index = 2, + bet_level_index = 9, + }, + [11] = { + index = 11, + bet_change_list = 22.5, + bet_size_index = 3, + bet_level_index = 4, + }, + [12] = { + index = 12, + bet_change_list = 45, + bet_size_index = 3, + bet_level_index = 9, + }, +} + +_.FortuneDragonBetBetLevel = { + [0] = { + index = 0, + bet_level = 1, + }, + [1] = { + index = 1, + bet_level = 2, + }, + [2] = { + index = 2, + bet_level = 3, + }, + [3] = { + index = 3, + bet_level = 4, + }, + [4] = { + index = 4, + bet_level = 5, + }, + [5] = { + index = 5, + bet_level = 6, + }, + [6] = { + index = 6, + bet_level = 7, + }, + [7] = { + index = 7, + bet_level = 8, + }, + [8] = { + index = 8, + bet_level = 9, + }, + [9] = { + index = 9, + bet_level = 10, + }, +} + +_.FortuneDragonBetBetLine = { + [0] = { + index = 0, + bet_line = 5, + }, +} + +_.FortuneDragonBetBetSize = { + [0] = { + index = 0, + bet_size = 300, + }, + [1] = { + index = 1, + bet_size = 1000, + }, + [2] = { + index = 2, + bet_size = 3000, + }, + [3] = { + index = 3, + bet_size = 9000, + }, +} + +_.FortuneDragonFormation = { + { + spin_type = 1, + node_type = "BaseSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 3, + node_type = "FreeSpin", + id = 1, + seq_id = 1, + reel = "FreeSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 2, + other_init_method = 2, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 1, + node_type = "SureWinBaseSpin", + id = 1, + seq_id = 1, + reel = "SureWinBaseSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, +} + +_.FortuneDragonReelBaseSpinRange = { + {3, 3, 3}, +} + +_.FortuneDragonReelBaseSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 2, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, +} + +_.FortuneDragonReelFreeSpinRange = { + {3, 3, 3}, +} + +_.FortuneDragonReelFreeSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 3, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 2, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 1, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 3, 5, 3, 5, 6, 7, 2, 5, 6, 5, 3, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 1, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 2, 4, 6, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 1, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 2, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 3, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 3, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 3, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 3, 4, 7, 3, 6, 3, 4, 7, 7, 6, 2, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 1, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 1, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 4, 7, 3, 7, 6, 4, 2, 4, 3, 3, 3, 6, 1, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 3, 5, 5, 7, 2, 3, 4, 7, 6, 3, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 3, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 1, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 1, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 2, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, +} + +_.FortuneDragonReelSureWinBaseSpinRange = { + {3, 3, 3}, +} + +_.FortuneDragonReelSureWinBaseSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 2, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 1, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 3, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 2, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 2, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 2, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 3, 4, 5, 7, 7, 2, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 6, 6, 5, 7, 6, 4, 5, 4, 6, 1, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 3, 2, 6, 5, 2, 6, 6, 3, 4, 6, 4, 2, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 5, 3, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 2, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 2, 5, 5, 7, 2, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 2, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 2, 7, 7, 6, 2, 7, 3, 7, 5, 2, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 3, 6, 7, 7, 3, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 1, 3, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 2, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 1, 3, 3, 3, 6, 1, 7, 6, 3, 5, 4, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 2, 7, 3, 4, 5, 5, 5, 6, 3, 1, 7, 7, 2, 6, 5, 4, 6, 6, 3, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 4, 3, 2, 7, 5, 6, 6, 6, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 2, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 3, 7, 5, 2, 6, 6, 5, 2, 7, 4, 4, 4, 7, 2, 6, 6, 3, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 2, 7, 6, 5, 5, 5, 2, 2, 5, 7, 2, 7, 3, 4, 5, 3, 7, 7, 2, 5, 5, 5, 1, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 3, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 3, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 3, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, +} + +_.FortuneDragonSymbol = { + [1] = { + id = 1, + name = "Wild", + is_wild = true, + group = {1}, + pay_rate = {0, 0, 100}, + client_order = 0, + client_dsc = "", + }, + [2] = { + id = 2, + name = "元宝", + is_wild = false, + group = {2}, + pay_rate = {0, 0, 50}, + client_order = 0, + client_dsc = "", + }, + [3] = { + id = 3, + name = "红包", + is_wild = false, + group = {3}, + pay_rate = {0, 0, 25}, + client_order = 0, + client_dsc = "", + }, + [4] = { + id = 4, + name = "灯笼", + is_wild = false, + group = {4}, + pay_rate = {0, 0, 10}, + client_order = 0, + client_dsc = "", + }, + [5] = { + id = 5, + name = "福炮", + is_wild = false, + group = {5}, + pay_rate = {0, 0, 5}, + client_order = 0, + client_dsc = "", + }, + [6] = { + id = 6, + name = "花结", + is_wild = false, + group = {6}, + pay_rate = {0, 0, 3}, + client_order = 0, + client_dsc = "", + }, + [7] = { + id = 7, + name = "铜钱", + is_wild = false, + group = {7}, + pay_rate = {0, 0, 2}, + client_order = 0, + client_dsc = "", + }, + [8] = { + id = 8, + name = "X2", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [9] = { + id = 9, + name = "X5", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [10] = { + id = 10, + name = "X10", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [200] = { + id = 200, + name = "Empty", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, +} + +_.FortuneDragonSymbolBetRatio = { + { + bet_ratio = 1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneMouse.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneMouse.lua new file mode 100644 index 0000000..c808d80 --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneMouse.lua @@ -0,0 +1,284 @@ +-- +local _ = {} + +_.FortuneMouseBetBetChangeList = { + [0] = { + index = 0, + bet_change_list = 0.15, + bet_size_index = 0, + bet_level_index = 0, + }, + [1] = { + index = 1, + bet_change_list = 0.3, + bet_size_index = 0, + bet_level_index = 1, + }, + [2] = { + index = 2, + bet_change_list = 0.45, + bet_size_index = 0, + bet_level_index = 2, + }, + [3] = { + index = 3, + bet_change_list = 0.5, + bet_size_index = 1, + bet_level_index = 0, + }, + [4] = { + index = 4, + bet_change_list = 0.75, + bet_size_index = 0, + bet_level_index = 4, + }, + [5] = { + index = 5, + bet_change_list = 1.5, + bet_size_index = 0, + bet_level_index = 9, + }, + [6] = { + index = 6, + bet_change_list = 2.5, + bet_size_index = 1, + bet_level_index = 4, + }, + [7] = { + index = 7, + bet_change_list = 4.5, + bet_size_index = 3, + bet_level_index = 0, + }, + [8] = { + index = 8, + bet_change_list = 5, + bet_size_index = 1, + bet_level_index = 9, + }, + [9] = { + index = 9, + bet_change_list = 7.5, + bet_size_index = 2, + bet_level_index = 4, + }, + [10] = { + index = 10, + bet_change_list = 15, + bet_size_index = 2, + bet_level_index = 9, + }, + [11] = { + index = 11, + bet_change_list = 22.5, + bet_size_index = 3, + bet_level_index = 4, + }, + [12] = { + index = 12, + bet_change_list = 45, + bet_size_index = 3, + bet_level_index = 9, + }, +} + +_.FortuneMouseBetBetLevel = { + [0] = { + index = 0, + bet_level = 1, + }, + [1] = { + index = 1, + bet_level = 2, + }, + [2] = { + index = 2, + bet_level = 3, + }, + [3] = { + index = 3, + bet_level = 4, + }, + [4] = { + index = 4, + bet_level = 5, + }, + [5] = { + index = 5, + bet_level = 6, + }, + [6] = { + index = 6, + bet_level = 7, + }, + [7] = { + index = 7, + bet_level = 8, + }, + [8] = { + index = 8, + bet_level = 9, + }, + [9] = { + index = 9, + bet_level = 10, + }, +} + +_.FortuneMouseBetBetLine = { + [0] = { + index = 0, + bet_line = 5, + }, +} + +_.FortuneMouseBetBetSize = { + [0] = { + index = 0, + bet_size = 300, + }, + [1] = { + index = 1, + bet_size = 1000, + }, + [2] = { + index = 2, + bet_size = 3000, + }, + [3] = { + index = 3, + bet_size = 9000, + }, +} + +_.FortuneMouseFormation = { + { + spin_type = 1, + node_type = "BaseSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 3, + node_type = "ReSpin", + id = 1, + seq_id = 1, + reel = "ReSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 3, + other_init_method = 3, + first_init_symbols = {}, + other_init_symbols = {}, + }, +} + +_.FortuneMouseReelBaseSpinRange = { + {3, 3, 3}, +} + +_.FortuneMouseReelBaseSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 5, 3, 4, 2, 7, 7, 7, 6, 5, 5, 5, 4, 6, 5, 5, 5, 4, 7, 7, 7, 4, 7, 6, 5, 3, 3, 3, 5, 7, 6, 5, 7, 6, 5, 7, 7, 7, 6, 5, 7, 4, 3, 6, 5, 7, 6, 3, 6, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 1, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 7, 6, 4, 5, 4, 6, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 5, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 7, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 4, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 6, 6, 2, 7, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 6, 6, 7, 4, 6, 6, 6, 5, 4, 7, 6, 4, 7, 3, 6, 7, 6, 7, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 1, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 6, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 2, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 6, 6, 6, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 7, 6, 5, 7, 3, 6, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 6, 5, 2, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 6, 6, 7, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 1, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 7, 4, 5, 7, 7, 7, 3, 6, 7, 5, 6, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 7, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 4, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, +} + +_.FortuneMouseReelReSpinRange = { + {3, 3, 3}, +} + +_.FortuneMouseReelReSpinReel = { + {1, 1, 1, 2, 2, 2, 2, 7, 7, 7, 7, 8, 8, 8, 6, 6, 6, 6, 3, 3, 3, 3, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8}, + {1, 1, 1}, + {1, 1, 1, 2, 2, 2, 2, 7, 7, 7, 7, 8, 8, 8, 6, 6, 6, 6, 3, 3, 3, 3, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8}, +} + +_.FortuneMouseSymbol = { + [1] = { + id = 1, + name = "wild", + is_wild = true, + group = {1}, + pay_rate = {0, 0, 300}, + client_order = 1, + client_dsc = "", + }, + [2] = { + id = 2, + name = "倒福", + is_wild = false, + group = {2}, + pay_rate = {0, 0, 100}, + client_order = 2, + client_dsc = "", + }, + [3] = { + id = 3, + name = "红包", + is_wild = false, + group = {3}, + pay_rate = {0, 0, 50}, + client_order = 3, + client_dsc = "", + }, + [4] = { + id = 4, + name = "钱袋", + is_wild = false, + group = {4}, + pay_rate = {0, 0, 30}, + client_order = 4, + client_dsc = "", + }, + [5] = { + id = 5, + name = "爆竹", + is_wild = false, + group = {5}, + pay_rate = {0, 0, 15}, + client_order = 5, + client_dsc = "", + }, + [6] = { + id = 6, + name = "橘子", + is_wild = false, + group = {6}, + pay_rate = {0, 0, 5}, + client_order = 6, + client_dsc = "", + }, + [7] = { + id = 7, + name = "花生", + is_wild = false, + group = {7}, + pay_rate = {0, 0, 3}, + client_order = 7, + client_dsc = "", + }, + [8] = { + id = 8, + name = "SuperStack", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, +} + +_.FortuneMouseSymbolBetRatio = { + { + bet_ratio = 1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneOx.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneOx.lua new file mode 100644 index 0000000..a0f6859 --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneOx.lua @@ -0,0 +1,293 @@ +-- +local _ = {} + +_.FortuneOxBetBetChangeList = { + [0] = { + index = 0, + bet_change_list = 0.3, + bet_size_index = 0, + bet_level_index = 0, + }, + [1] = { + index = 1, + bet_change_list = 0.6, + bet_size_index = 0, + bet_level_index = 1, + }, + [2] = { + index = 2, + bet_change_list = 0.9, + bet_size_index = 0, + bet_level_index = 2, + }, + [3] = { + index = 3, + bet_change_list = 1, + bet_size_index = 1, + bet_level_index = 0, + }, + [4] = { + index = 4, + bet_change_list = 1.5, + bet_size_index = 0, + bet_level_index = 4, + }, + [5] = { + index = 5, + bet_change_list = 3, + bet_size_index = 0, + bet_level_index = 9, + }, + [6] = { + index = 6, + bet_change_list = 5, + bet_size_index = 1, + bet_level_index = 4, + }, + [7] = { + index = 7, + bet_change_list = 9, + bet_size_index = 3, + bet_level_index = 0, + }, + [8] = { + index = 8, + bet_change_list = 10, + bet_size_index = 1, + bet_level_index = 9, + }, + [9] = { + index = 9, + bet_change_list = 15, + bet_size_index = 2, + bet_level_index = 4, + }, + [10] = { + index = 10, + bet_change_list = 30, + bet_size_index = 2, + bet_level_index = 9, + }, + [11] = { + index = 11, + bet_change_list = 45, + bet_size_index = 3, + bet_level_index = 4, + }, + [12] = { + index = 12, + bet_change_list = 90, + bet_size_index = 3, + bet_level_index = 9, + }, +} + +_.FortuneOxBetBetLevel = { + [0] = { + index = 0, + bet_level = 1, + }, + [1] = { + index = 1, + bet_level = 2, + }, + [2] = { + index = 2, + bet_level = 3, + }, + [3] = { + index = 3, + bet_level = 4, + }, + [4] = { + index = 4, + bet_level = 5, + }, + [5] = { + index = 5, + bet_level = 6, + }, + [6] = { + index = 6, + bet_level = 7, + }, + [7] = { + index = 7, + bet_level = 8, + }, + [8] = { + index = 8, + bet_level = 9, + }, + [9] = { + index = 9, + bet_level = 10, + }, +} + +_.FortuneOxBetBetLine = { + [0] = { + index = 0, + bet_line = 10, + }, +} + +_.FortuneOxBetBetSize = { + [0] = { + index = 0, + bet_size = 300, + }, + [1] = { + index = 1, + bet_size = 1000, + }, + [2] = { + index = 2, + bet_size = 3000, + }, + [3] = { + index = 3, + bet_size = 9000, + }, +} + +_.FortuneOxFormation = { + { + spin_type = 1, + node_type = "BaseSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line10Form343TypeA", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 3, + node_type = "ReSpin", + id = 1, + seq_id = 1, + reel = "ReSpin", + matrix = "Line10Form343TypeA", + symbol = "Default", + first_init_method = 3, + other_init_method = 3, + first_init_symbols = {}, + other_init_symbols = {}, + }, +} + +_.FortuneOxReelBaseSpinRange = { + {3, 4, 3}, +} + +_.FortuneOxReelBaseSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 5, 6, 7, 6, 6, 6, 2, 2, 2, 1, 1, 4, 4, 4, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 2, 6, 5, 7, 6, 6, 6, 2, 2, 2, 5, 6, 2, 2, 2, 5, 7, 6, 6, 4, 2, 7, 7, 7, 6, 5, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 6, 6, 6, 5, 7, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 7, 5, 2, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 2, 2, 2, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 7, 7, 5, 5, 5, 7, 6, 1, 2, 4, 6, 5, 7, 2, 2, 2, 7, 4, 7, 5, 6, 7, 7, 7, 5, 6, 7, 4, 6, 1, 5, 5, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 7, 7, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 6, 5, 7, 6, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 5, 5, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 7, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 5, 4, 6, 6, 6, 3, 4, 7, 2, 5, 6, 7, 2, 6, 6, 6, 6, 6, 7, 7, 7, 7, 5, 4, 7, 5, 7, 2, 6, 7, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 7, 7, 7, 7, 6, 2, 7, 5, 6, 4, 4, 4, 4, 3, 1, 2, 3, 4, 4, 7, 5, 5, 5, 5, 6, 6, 6, 6, 4, 7, 6, 1, 1, 7, 4, 5, 7, 6, 5, 4, 6, 7, 4, 7, 3, 5, 6, 7, 1, 5, 7, 3, 4, 6, 7, 2, 2, 2, 2, 7, 7, 6, 6, 3, 4, 6, 5, 1, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 6, 3, 6, 7, 2, 3, 7, 6, 5, 4, 7, 6, 4, 3, 3, 3, 3, 4, 7, 7, 5, 1, 6, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 7, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 5, 1, 7, 4, 6, 7, 4, 6, 7, 4, 6, 3, 7, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 7, 7, 7, 7, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 6, 7, 1, 6, 5, 7, 3, 5, 6, 7, 7, 3, 6, 7, 5, 5, 7, 7, 7, 7, 7, 6, 5, 5, 5, 5, 1, 1, 1, 1, 2, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 6, 6, 5, 1, 7, 7, 7, 7, 6, 3, 7, 5, 4, 4, 7, 6, 7, 7, 7, 7, 7}, + {5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 5, 5, 5, 6, 7, 5, 4, 3, 6, 7, 5, 4, 3, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 3, 7, 5, 3, 7, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 6, 6, 6, 7, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 7, 3, 6, 4, 7, 2, 2, 2, 6, 6, 6, 3, 7, 5, 6, 6, 6, 3, 7, 5, 3, 7, 6, 4, 3, 6, 7, 4, 6, 7, 3, 2, 7, 7, 7, 6, 3, 3, 3, 5, 7, 7, 7, 3, 6, 3, 1, 1, 7, 6, 3, 7, 5, 6, 6, 6, 7, 3, 5, 6, 7, 4, 6, 6, 6, 5, 3, 2, 7, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 3, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 7, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 6, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 3, 3, 3, 5, 7, 3, 5, 7, 6, 5, 7, 7, 7, 7, 6, 6, 3, 7, 4, 6, 2, 3, 5, 7, 2, 1, 5, 7, 6, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 7, 4, 2, 7, 7, 7, 6, 6, 6, 7, 7, 7}, +} + +_.FortuneOxReelReSpinRange = { + {3, 4, 3}, +} + +_.FortuneOxReelReSpinReel = { + {9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8}, + {9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8}, + {9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8}, +} + +_.FortuneOxSymbol = { + [1] = { + id = 1, + name = "wild", + is_wild = true, + group = {1}, + pay_rate = {0, 0, 200}, + client_order = 1, + client_dsc = "", + }, + [2] = { + id = 2, + name = "元宝", + is_wild = false, + group = {2}, + pay_rate = {0, 0, 100}, + client_order = 2, + client_dsc = "", + }, + [3] = { + id = 3, + name = "金锦盒", + is_wild = false, + group = {3}, + pay_rate = {0, 0, 50}, + client_order = 3, + client_dsc = "", + }, + [4] = { + id = 4, + name = "钱袋", + is_wild = false, + group = {4}, + pay_rate = {0, 0, 20}, + client_order = 4, + client_dsc = "", + }, + [5] = { + id = 5, + name = "红包", + is_wild = false, + group = {5}, + pay_rate = {0, 0, 10}, + client_order = 5, + client_dsc = "", + }, + [6] = { + id = 6, + name = "橘子", + is_wild = false, + group = {6}, + pay_rate = {0, 0, 5}, + client_order = 6, + client_dsc = "", + }, + [7] = { + id = 7, + name = "炮竹", + is_wild = false, + group = {7}, + pay_rate = {0, 0, 3}, + client_order = 7, + client_dsc = "", + }, + [8] = { + id = 8, + name = "SuperStack1", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [9] = { + id = 9, + name = "SuperStack2", + is_wild = false, + group = {9}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, +} + +_.FortuneOxSymbolBetRatio = { + { + bet_ratio = 1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneRabbit.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneRabbit.lua new file mode 100644 index 0000000..b11b893 --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneRabbit.lua @@ -0,0 +1,346 @@ +-- +local _ = {} + +_.FortuneRabbitBetBetChangeList = { + [0] = { + index = 0, + bet_change_list = 0.3, + bet_size_index = 0, + bet_level_index = 0, + }, + [1] = { + index = 1, + bet_change_list = 0.6, + bet_size_index = 0, + bet_level_index = 1, + }, + [2] = { + index = 2, + bet_change_list = 0.9, + bet_size_index = 0, + bet_level_index = 2, + }, + [3] = { + index = 3, + bet_change_list = 1, + bet_size_index = 1, + bet_level_index = 0, + }, + [4] = { + index = 4, + bet_change_list = 1.5, + bet_size_index = 0, + bet_level_index = 4, + }, + [5] = { + index = 5, + bet_change_list = 3, + bet_size_index = 0, + bet_level_index = 9, + }, + [6] = { + index = 6, + bet_change_list = 5, + bet_size_index = 1, + bet_level_index = 4, + }, + [7] = { + index = 7, + bet_change_list = 9, + bet_size_index = 3, + bet_level_index = 0, + }, + [8] = { + index = 8, + bet_change_list = 10, + bet_size_index = 1, + bet_level_index = 9, + }, + [9] = { + index = 9, + bet_change_list = 15, + bet_size_index = 2, + bet_level_index = 4, + }, + [10] = { + index = 10, + bet_change_list = 30, + bet_size_index = 2, + bet_level_index = 9, + }, + [11] = { + index = 11, + bet_change_list = 45, + bet_size_index = 3, + bet_level_index = 4, + }, + [12] = { + index = 12, + bet_change_list = 90, + bet_size_index = 3, + bet_level_index = 9, + }, +} + +_.FortuneRabbitBetBetLevel = { + [0] = { + index = 0, + bet_level = 1, + }, + [1] = { + index = 1, + bet_level = 2, + }, + [2] = { + index = 2, + bet_level = 3, + }, + [3] = { + index = 3, + bet_level = 4, + }, + [4] = { + index = 4, + bet_level = 5, + }, + [5] = { + index = 5, + bet_level = 6, + }, + [6] = { + index = 6, + bet_level = 7, + }, + [7] = { + index = 7, + bet_level = 8, + }, + [8] = { + index = 8, + bet_level = 9, + }, + [9] = { + index = 9, + bet_level = 10, + }, +} + +_.FortuneRabbitBetBetLine = { + [0] = { + index = 0, + bet_line = 10, + }, +} + +_.FortuneRabbitBetBetSize = { + [0] = { + index = 0, + bet_size = 300, + }, + [1] = { + index = 1, + bet_size = 1000, + }, + [2] = { + index = 2, + bet_size = 3000, + }, + [3] = { + index = 3, + bet_size = 9000, + }, +} + +_.FortuneRabbitCashPrizeWeight = { + { + id = 1, + prize_value = 0.5, + weight = 144, + }, + { + id = 2, + prize_value = 1, + weight = 25, + }, + { + id = 3, + prize_value = 2, + weight = 25, + }, + { + id = 4, + prize_value = 5, + weight = 100, + }, + { + id = 5, + prize_value = 10, + weight = 50, + }, + { + id = 6, + prize_value = 20, + weight = 25, + }, + { + id = 7, + prize_value = 30, + weight = 15, + }, + { + id = 8, + prize_value = 50, + weight = 10, + }, + { + id = 9, + prize_value = 100, + weight = 5, + }, + { + id = 10, + prize_value = 500, + weight = 1, + }, +} + +_.FortuneRabbitFormation = { + { + spin_type = 1, + node_type = "BaseSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line10Form343TypeA", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 3, + node_type = "FreeSpin", + id = 1, + seq_id = 1, + reel = "FreeSpin", + matrix = "Line10Form343TypeA", + symbol = "Default", + first_init_method = 3, + other_init_method = 3, + first_init_symbols = {}, + other_init_symbols = {}, + }, +} + +_.FortuneRabbitReelBaseSpinRange = { + {3, 4, 3}, +} + +_.FortuneRabbitReelBaseSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 8, 8, 8, 6, 2, 4, 5, 6, 7, 6, 6, 6, 2, 2, 2, 1, 5, 4, 4, 4, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 5, 6, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 2, 6, 5, 7, 8, 8, 8, 2, 2, 2, 5, 6, 2, 2, 2, 5, 7, 6, 6, 4, 2, 7, 7, 7, 6, 5, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 6, 6, 6, 5, 7, 5, 6, 7, 2, 5, 6, 5, 3, 3, 3, 6, 2, 5, 7, 6, 8, 8, 8, 6, 7, 5, 2, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 2, 2, 2, 7, 8, 8, 8, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 7, 7, 5, 5, 5, 7, 6, 1, 2, 4, 6, 5, 7, 2, 2, 2, 7, 4, 7, 5, 6, 8, 8, 8, 5, 6, 7, 4, 6, 1, 5, 5, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 4, 4, 4, 7, 7, 7, 3, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 6, 5, 7, 6, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 5, 5, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 8, 8, 8, 2, 7, 7, 2, 2, 6, 5, 2, 6, 4, 7, 6, 3, 5, 4, 6, 6, 6, 3, 4, 7, 2, 5, 6, 7, 2, 4, 5, 6, 6, 6, 8, 8, 8, 7, 5, 4, 1, 5, 7, 2, 6, 7, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 6, 5, 7, 4, 6, 2, 7, 5, 6, 4, 4, 4, 4, 3, 5, 2, 3, 4, 4, 7, 5, 5, 5, 5, 8, 8, 8, 8, 4, 7, 6, 5, 1, 7, 4, 5, 7, 6, 5, 4, 8, 8, 8, 8, 3, 5, 6, 4, 1, 5, 7, 3, 4, 6, 7, 2, 2, 2, 2, 6, 7, 6, 7, 3, 4, 6, 5, 1, 7, 6, 6, 4, 5, 8, 8, 5, 7, 6, 4, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 5, 5, 5, 5, 3, 6, 7, 2, 3, 7, 6, 5, 4, 7, 6, 4, 3, 3, 3, 3, 4, 7, 7, 5, 1, 6, 5, 7, 4, 6, 3, 2, 5, 5, 4, 7, 7, 5, 3, 4, 8, 8, 5, 6, 4, 7, 5, 5, 5, 5, 8, 8, 7, 6, 3, 1, 1, 1, 5, 3, 4, 6, 7, 5, 3, 6, 4, 7, 6, 4, 1, 7, 5, 8, 8, 5, 5, 5, 1, 7, 4, 6, 7, 4, 6, 7, 4, 6, 3, 7, 5, 6, 3, 5, 6, 4, 7, 5, 6, 4, 5, 7, 7, 7, 7, 1, 2, 2, 3, 3, 7, 8, 8, 8, 8, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 6, 7, 1, 6, 5, 7, 3, 5, 6, 7, 7, 3, 6, 7, 5, 5, 8, 8, 8, 8, 7, 6, 5, 5, 5, 5, 1, 1, 1, 1, 2, 4, 6, 3, 5, 8, 8, 8, 8, 6, 5, 3, 4, 2, 6, 6, 6, 6, 5, 1, 7, 7, 7, 7, 6, 3, 7, 5, 4, 4, 7, 6, 5, 5, 5, 5, 7}, + {5, 5, 5, 6, 7, 3, 6, 4, 4, 4, 3, 3, 3, 4, 7, 1, 6, 5, 5, 5, 6, 7, 5, 4, 3, 6, 7, 5, 4, 3, 8, 8, 8, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 1, 1, 1, 3, 7, 5, 3, 7, 6, 4, 7, 6, 3, 4, 6, 5, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 6, 6, 6, 8, 8, 8, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 7, 3, 6, 4, 7, 2, 4, 3, 6, 6, 6, 3, 7, 5, 8, 8, 8, 3, 7, 5, 3, 7, 6, 4, 3, 6, 7, 4, 6, 7, 3, 2, 7, 7, 7, 6, 3, 3, 3, 5, 8, 8, 8, 3, 6, 3, 1, 1, 7, 6, 3, 7, 5, 2, 2, 2, 7, 3, 5, 6, 7, 4, 6, 6, 6, 5, 3, 2, 7, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 3, 7, 4, 4, 4, 7, 6, 6, 6, 8, 8, 8, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 8, 8, 8, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 8, 8, 8, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 4, 4, 4, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 3, 3, 3, 5, 7, 3, 5, 7, 6, 5, 7, 7, 7, 7, 6, 6, 3, 7, 4, 6, 2, 3, 5, 7, 2, 1, 5, 7, 6, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 7, 4, 2, 7, 7, 7, 6, 6, 6, 7, 7, 7}, +} + +_.FortuneRabbitReelFreeSpinRange = { + {3, 4, 3}, +} + +_.FortuneRabbitReelFreeSpinReel = { + {200, 200, 200, 200, 8, 8, 8, 200, 200, 200, 200, 200}, + {200, 200, 200, 8, 8, 8, 8, 200, 200, 200, 200, 200}, + {200, 200, 200, 200, 8, 8, 8, 200, 200, 200, 200, 200}, +} + +_.FortuneRabbitSymbol = { + [1] = { + id = 1, + name = "wild", + is_wild = true, + group = {1}, + pay_rate = {0, 0, 200}, + client_order = 1, + client_dsc = "", + }, + [2] = { + id = 2, + name = "元宝", + is_wild = false, + group = {2}, + pay_rate = {0, 0, 100}, + client_order = 2, + client_dsc = "", + }, + [3] = { + id = 3, + name = "钱袋", + is_wild = false, + group = {3}, + pay_rate = {0, 0, 50}, + client_order = 3, + client_dsc = "", + }, + [4] = { + id = 4, + name = "红包", + is_wild = false, + group = {4}, + pay_rate = {0, 0, 10}, + client_order = 4, + client_dsc = "", + }, + [5] = { + id = 5, + name = "铜币", + is_wild = false, + group = {5}, + pay_rate = {0, 0, 5}, + client_order = 5, + client_dsc = "", + }, + [6] = { + id = 6, + name = "爆竹", + is_wild = false, + group = {6}, + pay_rate = {0, 0, 3}, + client_order = 6, + client_dsc = "", + }, + [7] = { + id = 7, + name = "胡萝卜", + is_wild = false, + group = {7}, + pay_rate = {0, 0, 2}, + client_order = 7, + client_dsc = "", + }, + [8] = { + id = 8, + name = "Cash", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [200] = { + id = 200, + name = "Empty", + is_wild = false, + group = {200}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, +} + +_.FortuneRabbitSymbolBetRatio = { + { + bet_ratio = 1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneTiger.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneTiger.lua new file mode 100644 index 0000000..704672c --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/FortuneTiger.lua @@ -0,0 +1,293 @@ +-- +local _ = {} + +_.FortuneTigerBetBetChangeList = { + [0] = { + index = 0, + bet_change_list = 0.15, + bet_size_index = 0, + bet_level_index = 0, + }, + [1] = { + index = 1, + bet_change_list = 0.3, + bet_size_index = 0, + bet_level_index = 1, + }, + [2] = { + index = 2, + bet_change_list = 0.45, + bet_size_index = 0, + bet_level_index = 2, + }, + [3] = { + index = 3, + bet_change_list = 0.5, + bet_size_index = 1, + bet_level_index = 0, + }, + [4] = { + index = 4, + bet_change_list = 0.75, + bet_size_index = 0, + bet_level_index = 4, + }, + [5] = { + index = 5, + bet_change_list = 1.5, + bet_size_index = 0, + bet_level_index = 9, + }, + [6] = { + index = 6, + bet_change_list = 2.5, + bet_size_index = 1, + bet_level_index = 4, + }, + [7] = { + index = 7, + bet_change_list = 4.5, + bet_size_index = 3, + bet_level_index = 0, + }, + [8] = { + index = 8, + bet_change_list = 5, + bet_size_index = 1, + bet_level_index = 9, + }, + [9] = { + index = 9, + bet_change_list = 7.5, + bet_size_index = 2, + bet_level_index = 4, + }, + [10] = { + index = 10, + bet_change_list = 15, + bet_size_index = 2, + bet_level_index = 9, + }, + [11] = { + index = 11, + bet_change_list = 22.5, + bet_size_index = 3, + bet_level_index = 4, + }, + [12] = { + index = 12, + bet_change_list = 45, + bet_size_index = 3, + bet_level_index = 9, + }, +} + +_.FortuneTigerBetBetLevel = { + [0] = { + index = 0, + bet_level = 1, + }, + [1] = { + index = 1, + bet_level = 2, + }, + [2] = { + index = 2, + bet_level = 3, + }, + [3] = { + index = 3, + bet_level = 4, + }, + [4] = { + index = 4, + bet_level = 5, + }, + [5] = { + index = 5, + bet_level = 6, + }, + [6] = { + index = 6, + bet_level = 7, + }, + [7] = { + index = 7, + bet_level = 8, + }, + [8] = { + index = 8, + bet_level = 9, + }, + [9] = { + index = 9, + bet_level = 10, + }, +} + +_.FortuneTigerBetBetLine = { + [0] = { + index = 0, + bet_line = 5, + }, +} + +_.FortuneTigerBetBetSize = { + [0] = { + index = 0, + bet_size = 300, + }, + [1] = { + index = 1, + bet_size = 1000, + }, + [2] = { + index = 2, + bet_size = 3000, + }, + [3] = { + index = 3, + bet_size = 9000, + }, +} + +_.FortuneTigerFormation = { + { + spin_type = 1, + node_type = "BaseSpin", + id = 1, + seq_id = 1, + reel = "BaseSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 2, + other_init_method = 4, + first_init_symbols = {}, + other_init_symbols = {}, + }, + { + spin_type = 3, + node_type = "ReSpin", + id = 1, + seq_id = 1, + reel = "ReSpin", + matrix = "Line5Form3X3TypeB", + symbol = "Default", + first_init_method = 3, + other_init_method = 3, + first_init_symbols = {}, + other_init_symbols = {}, + }, +} + +_.FortuneTigerReelBaseSpinRange = { + {3, 3, 3}, +} + +_.FortuneTigerReelBaseSpinReel = { + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 0, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 6, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 0, 7, 7, 3, 6, 4, 7, 6, 0, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 0, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 0, 5, 7, 6, 6, 7, 7, 6, 3, 5, 0, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 0, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 0, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 0, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 0, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 4, 6, 6, 6, 3, 4, 7, 0, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 0, 0, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 0, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 0, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 0, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 0, 0, 0, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 0, 7, 5, 3, 5, 5, 5, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 0, 0, 0, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 0, 3, 4, 7, 6, 6, 6, 7, 7, 0, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 0, 0, 0, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 0, 6, 6, 5, 7, 6, 0, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 0, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 0, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 0, 0, 0, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 0, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 0, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 0, 4, 5, 7, 7, 7, 3, 6, 0, 0, 0, 7, 4, 3, 7, 5, 6, 6, 6, 7, 0, 5, 6, 7, 4, 6, 5, 6, 5, 0, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 0, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 0, 7, 2, 0, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, +} + +_.FortuneTigerReelReSpinRange = { + {3, 3, 3}, +} + +_.FortuneTigerReelReSpinReel = { + {8, 8, 0, 200, 200, 8, 8, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 200, 200, 8, 200, 200, 0, 8, 8, 200, 200, 8, 0, 0, 200, 200, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 0, 200, 200, 8, 200, 200, 0, 0, 8, 200, 200, 8, 200, 200}, + {8, 8, 0, 200, 200, 8, 8, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 200, 200, 8, 200, 200, 0, 8, 8, 200, 200, 8, 0, 0, 200, 200, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 0, 200, 200, 8, 200, 200, 0, 0, 8, 200, 200, 8, 200, 200}, + {8, 8, 0, 200, 200, 8, 8, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 200, 200, 8, 200, 200, 0, 8, 8, 200, 200, 8, 0, 0, 200, 200, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 0, 200, 200, 8, 200, 200, 0, 0, 8, 200, 200, 8, 200, 200}, +} + +_.FortuneTigerSymbol = { + [1] = { + id = 1, + name = "wild", + is_wild = true, + group = {1}, + pay_rate = {0, 0, 250}, + client_order = 1, + client_dsc = "", + }, + [2] = { + id = 2, + name = "元宝", + is_wild = false, + group = {2}, + pay_rate = {0, 0, 100}, + client_order = 2, + client_dsc = "", + }, + [3] = { + id = 3, + name = "玉饰", + is_wild = false, + group = {3}, + pay_rate = {0, 0, 25}, + client_order = 3, + client_dsc = "", + }, + [4] = { + id = 4, + name = "福袋", + is_wild = false, + group = {4}, + pay_rate = {0, 0, 10}, + client_order = 4, + client_dsc = "", + }, + [5] = { + id = 5, + name = "红包", + is_wild = false, + group = {5}, + pay_rate = {0, 0, 8}, + client_order = 5, + client_dsc = "", + }, + [6] = { + id = 6, + name = "爆竹", + is_wild = false, + group = {6}, + pay_rate = {0, 0, 5}, + client_order = 6, + client_dsc = "", + }, + [7] = { + id = 7, + name = "橘子", + is_wild = false, + group = {7}, + pay_rate = {0, 0, 3}, + client_order = 7, + client_dsc = "", + }, + [8] = { + id = 8, + name = "SuperStack", + is_wild = false, + group = {8}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, + [200] = { + id = 200, + name = "Empty", + is_wild = false, + group = {200}, + pay_rate = {0, 0, 0}, + client_order = 0, + client_dsc = "", + }, +} + +_.FortuneTigerSymbolBetRatio = { + { + bet_ratio = 1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/Matrix.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/Matrix.lua new file mode 100644 index 0000000..02c7893 --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/Matrix.lua @@ -0,0 +1,3959 @@ +-- +local _ = {} + +_.MatrixFeaturesForm15X1TypeA = { + { + type = "FeatureForm15X1TypeA", + link_type = 2, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm19X1TypeA = { + { + type = "FeatureForm19X1TypeA", + link_type = 2, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm20X1TypeA = { + { + type = "FeatureForm20X1TypeA", + link_type = 2, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm25X1TypeA = { + { + type = "FeatureForm25X1TypeA", + link_type = 2, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm30X1TypeA = { + { + type = "FeatureForm30X1TypeA", + link_type = 2, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm35X1TypeA = { + { + type = "FeatureForm35X1TypeA", + link_type = 2, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm40X1 = { + { + type = "FeatureForm40X1", + link_type = 2, + direction = 0, + line_count = 0, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm40X1TypeA = { + { + type = "FeatureForm40X1", + link_type = 2, + direction = 0, + line_count = 0, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixFeaturesForm7X1TypeA = { + { + type = "FeatureForm15X1TypeA", + link_type = 2, + direction = 0, + line_count = 50, + lines = { + {0, 0, 0}, + }, + form = {1, 1, 1, 1, 1, 1, 1}, + }, +} + +_.MatrixLine100Form12X5TypeA = { + { + type = "Line100Form12X5TypeA", + link_type = 0, + direction = 0, + line_count = 100, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + {10, 10, 10, 10, 10}, + {9, 10, 9, 10, 9}, + {10, 9, 10, 9, 10}, + {8, 9, 10, 9, 8}, + {10, 9, 8, 9, 10}, + {9, 10, 10, 10, 9}, + {10, 9, 9, 9, 10}, + {9, 9, 10, 9, 9}, + {10, 10, 9, 10, 10}, + {8, 8, 9, 10, 10}, + {11, 11, 11, 11, 11}, + {10, 11, 10, 11, 10}, + {11, 10, 11, 10, 11}, + {9, 10, 11, 10, 9}, + {11, 10, 9, 10, 11}, + {10, 11, 11, 11, 10}, + {11, 10, 10, 10, 11}, + {10, 10, 11, 10, 10}, + {11, 11, 10, 11, 11}, + {9, 9, 10, 11, 11}, + {12, 12, 12, 12, 12}, + {11, 12, 11, 12, 11}, + {12, 11, 12, 11, 12}, + {10, 11, 12, 11, 10}, + {12, 11, 10, 11, 12}, + {11, 12, 12, 12, 11}, + {12, 11, 11, 11, 12}, + {11, 11, 12, 11, 11}, + {12, 12, 11, 12, 12}, + {10, 10, 11, 12, 12}, + }, + form = {12, 12, 12, 12, 12}, + }, +} + +_.MatrixLine100Form6X5TypeA = { + { + type = "Line100Form6X5TypeA", + link_type = 0, + direction = 0, + line_count = 100, + lines = { + {1, 1, 1, 1, 1}, + {1, 1, 2, 1, 1}, + {1, 2, 2, 2, 1}, + {1, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {1, 1, 1, 2, 1}, + {1, 2, 1, 1, 1}, + {1, 1, 2, 2, 1}, + {1, 2, 2, 1, 1}, + {1, 1, 3, 1, 1}, + {1, 1, 3, 2, 1}, + {1, 2, 3, 1, 1}, + {1, 3, 3, 3, 1}, + {1, 3, 1, 3, 1}, + {1, 3, 2, 3, 1}, + {1, 3, 4, 3, 1}, + {2, 2, 2, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {2, 3, 2, 2, 2}, + {2, 1, 2, 2, 2}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {2, 3, 4, 3, 2}, + {2, 2, 4, 2, 2}, + {2, 4, 4, 4, 2}, + {2, 4, 3, 4, 2}, + {3, 3, 3, 3, 3}, + {3, 3, 4, 3, 3}, + {3, 3, 2, 3, 3}, + {3, 4, 4, 4, 3}, + {3, 2, 2, 2, 3}, + {3, 4, 3, 4, 3}, + {3, 2, 3, 2, 3}, + {3, 3, 3, 4, 3}, + {3, 3, 3, 2, 3}, + {3, 4, 3, 3, 3}, + {3, 2, 3, 3, 3}, + {3, 4, 2, 4, 3}, + {3, 2, 4, 2, 3}, + {3, 4, 5, 4, 3}, + {3, 3, 5, 3, 3}, + {3, 2, 1, 2, 3}, + {3, 3, 1, 3, 3}, + {4, 4, 4, 4, 4}, + {4, 4, 5, 4, 4}, + {4, 4, 3, 4, 4}, + {4, 5, 5, 5, 4}, + {4, 3, 3, 3, 4}, + {4, 5, 4, 5, 4}, + {4, 3, 4, 3, 4}, + {4, 4, 4, 5, 4}, + {4, 4, 4, 3, 4}, + {4, 5, 4, 4, 4}, + {4, 3, 4, 4, 4}, + {4, 5, 3, 5, 4}, + {4, 3, 5, 3, 4}, + {4, 5, 6, 5, 4}, + {4, 4, 6, 4, 4}, + {4, 3, 2, 3, 4}, + {4, 4, 2, 4, 4}, + {5, 5, 5, 5, 5}, + {5, 5, 6, 5, 5}, + {5, 5, 4, 5, 5}, + {5, 6, 6, 6, 5}, + {5, 4, 4, 4, 5}, + {5, 6, 5, 6, 5}, + {5, 4, 5, 4, 5}, + {5, 5, 5, 6, 5}, + {5, 5, 5, 4, 5}, + {5, 6, 5, 5, 5}, + {5, 4, 5, 5, 5}, + {5, 6, 4, 6, 5}, + {5, 4, 6, 4, 5}, + {5, 4, 3, 4, 5}, + {5, 5, 3, 5, 5}, + {5, 3, 3, 3, 5}, + {5, 3, 4, 3, 5}, + {6, 6, 6, 6, 6}, + {6, 6, 5, 6, 6}, + {6, 5, 5, 5, 6}, + {6, 5, 4, 5, 6}, + {6, 5, 6, 5, 6}, + {6, 6, 6, 5, 6}, + {6, 5, 6, 6, 6}, + {6, 6, 5, 5, 6}, + {6, 5, 5, 6, 6}, + {6, 6, 5, 6, 6}, + {6, 6, 4, 5, 6}, + {6, 5, 4, 6, 6}, + {6, 4, 4, 4, 6}, + {6, 4, 6, 4, 6}, + {6, 4, 5, 4, 6}, + {6, 4, 3, 4, 6}, + }, + form = {6, 6, 6, 6, 6}, + }, +} + +_.MatrixLine10Form343TypeA = { + { + type = "Line10Form343TypeA", + link_type = 0, + direction = 0, + line_count = 10, + lines = { + {1, 1, 1}, + {1, 2, 1}, + {1, 2, 2}, + {2, 2, 1}, + {2, 2, 2}, + {2, 3, 2}, + {2, 3, 3}, + {3, 3, 2}, + {3, 3, 3}, + {3, 4, 3}, + }, + form = {3, 4, 3}, + }, +} + +_.MatrixLine10Form3X5TypeA = { + { + type = "Line10Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 10, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {3, 2, 2, 2, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine1Form3X3TypeA = { + { + type = "Line1Form3X3TypeA", + link_type = 0, + direction = 0, + line_count = 1, + lines = { + {1, 1, 1}, + }, + form = {3, 3, 3}, + }, +} + +_.MatrixLine1Form3X3TypeB = { + { + type = "Line1Form3X3TypeB", + link_type = 0, + direction = 0, + line_count = 1, + lines = { + {2, 2, 2}, + }, + form = {3, 3, 3}, + }, +} + +_.MatrixLine1Form5X5TypeA = { + { + type = "Line1Form5X5TypeA", + link_type = 0, + direction = 0, + line_count = 1, + lines = { + {3, 3, 3}, + }, + form = {5, 5, 5}, + }, +} + +_.MatrixLine20Form3X5TypeA = { + { + type = "Line20Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 20, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {2, 1, 3, 1, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine25Form36666TypeA = { + { + type = "Line25Form36666TypeA", + link_type = 0, + direction = 0, + line_count = 25, + lines = { + {2, 5, 5, 5, 5}, + {1, 4, 4, 4, 4}, + {3, 6, 6, 6, 6}, + {1, 5, 6, 5, 4}, + {3, 5, 4, 5, 6}, + {2, 4, 4, 4, 5}, + {2, 6, 6, 6, 5}, + {1, 4, 5, 6, 6}, + {3, 6, 5, 4, 4}, + {2, 4, 5, 4, 5}, + {2, 6, 5, 6, 5}, + {1, 5, 5, 5, 6}, + {3, 5, 5, 5, 4}, + {2, 5, 4, 5, 6}, + {2, 5, 6, 5, 4}, + {1, 5, 4, 5, 4}, + {3, 5, 6, 5, 6}, + {1, 4, 6, 4, 4}, + {3, 6, 4, 6, 6}, + {2, 4, 6, 4, 5}, + {2, 6, 4, 6, 5}, + {1, 6, 4, 6, 4}, + {3, 4, 6, 4, 6}, + {1, 6, 6, 6, 4}, + {3, 4, 4, 4, 6}, + }, + form = {3, 6, 6, 6, 6}, + }, +} + +_.MatrixLine25Form3X5TypeA = { + { + type = "Line25Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 25, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine25Form3X5TypeB = { + { + type = "Line25Form3X5TypeB", + link_type = 0, + direction = 2, + line_count = 25, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine25Form3X5TypeC = { + { + type = "Line25Form3X5TypeC", + link_type = 0, + direction = 0, + line_count = 25, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine25Form3X5TypeD = { + { + type = "Line25Form3X5TypeD", + link_type = 0, + direction = 0, + line_count = 25, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine25Form3X5TypeE = { + { + type = "Line25Form3X5TypeE", + link_type = 0, + direction = 0, + line_count = 25, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {2, 2, 1, 2, 3}, + {2, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form3X5TypeA = { + { + type = "Line30Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {2, 1, 3, 2, 3}, + {1, 3, 2, 3, 1}, + {3, 2, 1, 1, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form3X5TypeB = { + { + type = "Line30Form3X5TypeB", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form3X5TypeC = { + { + type = "Line30Form3X5TypeC", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {1, 2, 3, 3, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form3X5TypeD = { + { + type = "Line30Form3X5TypeD", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 1, 2, 3, 1}, + {1, 3, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {3, 2, 1, 1, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form3X5TypeE = { + { + type = "Line30Form3X5TypeE", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 3, 3, 2, 3}, + {1, 1, 1, 2, 1}, + {2, 2, 2, 1, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form3X6TypeA = { + { + type = "Line30Form3X6TypeA", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {3, 2, 1, 2, 3, 2}, + {1, 2, 3, 2, 1, 2}, + {1, 1, 2, 2, 1, 1}, + {3, 3, 2, 2, 3, 3}, + {1, 2, 2, 2, 2, 1}, + {3, 2, 2, 2, 2, 3}, + {1, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 3}, + {3, 2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2, 1}, + {2, 2, 1, 1, 2, 2}, + {2, 2, 3, 3, 2, 2}, + {1, 3, 1, 3, 1, 3}, + {3, 1, 3, 1, 3, 1}, + {1, 2, 3, 2, 3, 2}, + {3, 2, 1, 2, 1, 2}, + {1, 2, 1, 2, 3, 2}, + {1, 2, 3, 2, 3, 2}, + {1, 3, 1, 1, 3, 1}, + {3, 1, 3, 3, 1, 3}, + {3, 2, 1, 2, 3, 3}, + {1, 2, 3, 2, 1, 1}, + {1, 1, 2, 2, 1, 2}, + {3, 3, 2, 2, 3, 2}, + {1, 2, 2, 2, 2, 3}, + {3, 2, 2, 2, 2, 1}, + {3, 1, 3, 1, 3, 2}, + }, + form = {3, 3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine30Form4X5TypeA = { + { + type = "Line30Form4X5TypeA", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 1, 2, 3}, + {2, 3, 2, 3, 4}, + {4, 3, 4, 3, 2}, + {3, 2, 3, 2, 1}, + {1, 2, 3, 2, 3}, + {2, 3, 4, 3, 4}, + {3, 2, 1, 2, 1}, + {4, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine30Form4X5TypeB = { + { + type = "Line30Form4X5TypeB", + link_type = 0, + direction = 0, + line_count = 30, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine3Form3X3TypeA = { + { + type = "Line3Form3X3TypeA", + link_type = 0, + direction = 0, + line_count = 3, + lines = { + {1, 1, 1}, + {2, 2, 2}, + {3, 3, 3}, + }, + form = {3, 3, 3}, + }, +} + +_.MatrixLine40Form34543TypeA = { + { + type = "Line40Form34543TypeA", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {1, 1, 1, 1, 1}, + {1, 1, 4, 3, 2}, + {1, 2, 4, 2, 2}, + {1, 2, 3, 4, 3}, + {1, 3, 1, 1, 1}, + {1, 4, 5, 4, 3}, + {2, 1, 2, 1, 1}, + {2, 1, 3, 3, 2}, + {2, 2, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {2, 3, 2, 1, 1}, + {2, 3, 3, 4, 3}, + {2, 4, 5, 3, 3}, + {2, 4, 5, 4, 3}, + {3, 1, 1, 2, 2}, + {3, 2, 4, 2, 1}, + {3, 3, 3, 3, 2}, + {3, 3, 2, 2, 2}, + {3, 4, 4, 4, 3}, + {3, 4, 5, 3, 2}, + {3, 4, 5, 4, 3}, + {3, 4, 2, 2, 2}, + {3, 3, 2, 3, 2}, + {3, 3, 3, 1, 1}, + {3, 2, 5, 4, 3}, + {3, 1, 1, 1, 1}, + {2, 4, 4, 4, 3}, + {2, 4, 3, 2, 2}, + {2, 3, 5, 4, 3}, + {2, 3, 4, 3, 2}, + {2, 2, 4, 4, 3}, + {2, 2, 3, 1, 1}, + {2, 1, 1, 2, 1}, + {2, 1, 1, 1, 1}, + {1, 4, 5, 3, 2}, + {1, 3, 2, 3, 3}, + {1, 2, 3, 2, 2}, + {1, 2, 4, 3, 2}, + {1, 1, 2, 1, 1}, + {1, 1, 1, 2, 2}, + }, + form = {3, 4, 5, 4, 3}, + }, +} + +_.MatrixLine40Form3X5TypeA = { + { + type = "Line40Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 2, 2, 3, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine40Form3X5TypeB = { + { + type = "Line40Form3X5TypeB", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 1, 1, 2}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {3, 3, 3, 3, 2}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine40Form3X5TypeC = { + { + type = "Line40Form3X5TypeC", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 2, 3, 1}, + {2, 3, 2, 1, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 2, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {3, 3, 2, 1, 2}, + {1, 1, 2, 3, 2}, + {3, 2, 3, 3, 3}, + {1, 2, 1, 1, 1}, + {1, 2, 3, 2, 2}, + {3, 2, 1, 2, 2}, + {2, 1, 2, 1, 1}, + {2, 3, 2, 3, 3}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {2, 2, 2, 2, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine40Form3X5TypeD = { + { + type = "Line40Form3X5TypeD", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {2, 1, 3, 2, 3}, + {1, 3, 2, 3, 1}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 1, 1}, + {3, 1, 1, 2, 3}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 1, 2, 1}, + {3, 3, 1, 1, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine40Form4X5TypeA = { + { + type = "Line40Form4X5TypeA", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 1, 3, 3}, + {4, 4, 2, 4, 4}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine40Form4X5TypeB = { + { + type = "Line40Form4X5TypeA", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {1, 2, 3, 4, 4}, + {4, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {3, 4, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {2, 3, 2, 1, 2}, + {3, 2, 3, 4, 3}, + {1, 2, 2, 2, 1}, + {4, 3, 3, 3, 4}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {2, 2, 1, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 3, 3, 3, 4}, + {3, 2, 2, 2, 1}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {1, 2, 3, 3, 4}, + {4, 3, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {2, 1, 1, 2, 3}, + {3, 4, 4, 3, 2}, + {1, 2, 2, 3, 4}, + {4, 3, 3, 2, 1}, + {2, 1, 2, 3, 4}, + {3, 4, 3, 2, 1}, + {1, 2, 3, 4, 3}, + {4, 3, 2, 1, 2}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine40Form4X5TypeC = { + { + type = "Line40Form4X5TypeC", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {4, 3, 2, 3, 4}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2}, + {3, 4, 3, 4, 3}, + {2, 3, 2, 3, 2}, + {3, 2, 3, 2, 3}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {2, 2, 3, 2, 2}, + {3, 3, 2, 3, 3}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 2, 2, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {4, 3, 3, 3, 4}, + {1, 2, 2, 2, 1}, + {3, 1, 1, 1, 3}, + {2, 4, 4, 4, 2}, + {4, 2, 2, 2, 4}, + {1, 3, 3, 3, 1}, + {3, 3, 1, 3, 3}, + {2, 2, 4, 2, 2}, + {4, 4, 2, 4, 4}, + {1, 1, 3, 1, 1}, + {4, 4, 1, 4, 4}, + {1, 1, 4, 1, 1}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 4}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine40Form4X6TypeA = { + { + type = "Line40Form4X6TypeA", + link_type = 0, + direction = 0, + line_count = 40, + lines = { + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4, 4}, + {1, 1, 2, 2, 1, 1}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 4, 4, 3, 3}, + {2, 2, 1, 1, 2, 2}, + {3, 3, 2, 2, 3, 3}, + {4, 4, 3, 3, 4, 4}, + {1, 2, 3, 3, 2, 1}, + {2, 3, 4, 4, 3, 2}, + {3, 2, 1, 1, 2, 3}, + {4, 3, 2, 2, 3, 4}, + {1, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 3}, + {3, 4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3, 2}, + {4, 3, 4, 3, 4, 3}, + {1, 2, 2, 2, 2, 1}, + {2, 3, 3, 3, 3, 2}, + {3, 4, 4, 4, 4, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 2, 2, 2, 2, 3}, + {4, 3, 3, 3, 3, 4}, + {1, 2, 3, 4, 3, 2}, + {2, 3, 4, 3, 2, 1}, + {3, 2, 1, 2, 3, 4}, + {4, 3, 2, 1, 2, 3}, + {2, 1, 2, 3, 4, 3}, + {1, 2, 1, 2, 3, 4}, + {3, 4, 3, 2, 1, 2}, + {4, 3, 4, 3, 2, 1}, + {2, 1, 2, 2, 1, 2}, + {3, 2, 3, 3, 2, 3}, + {4, 3, 4, 4, 3, 4}, + {1, 2, 1, 1, 2, 1}, + {2, 3, 2, 2, 3, 2}, + {3, 4, 3, 3, 4, 3}, + }, + form = {4, 4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form3X5TypeA = { + { + type = "Line50Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 2, 2, 2, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 2, 3, 2, 3}, + {3, 2, 1, 2, 1}, + {1, 1, 1, 1, 2}, + {3, 3, 3, 3, 2}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 1, 2, 3, 3}, + {2, 3, 2, 1, 1}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {1, 1, 2, 3, 2}, + {3, 3, 2, 1, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeB = { + { + type = "Line50Form3X5TypeB", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {2, 1, 3, 2, 3}, + {1, 3, 2, 3, 1}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 1, 1}, + {3, 1, 1, 2, 3}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 1, 2, 1}, + {3, 3, 1, 1, 1}, + {3, 3, 2, 3, 2}, + {1, 1, 3, 2, 1}, + {2, 2, 1, 2, 3}, + {2, 1, 1, 3, 2}, + {2, 3, 1, 1, 3}, + {3, 1, 1, 3, 1}, + {1, 2, 2, 3, 2}, + {1, 2, 3, 1, 3}, + {1, 3, 1, 2, 3}, + {2, 2, 3, 3, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeC = { + { + type = "Line50Form3X5TypeC", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 2, 2, 1, 3}, + {2, 2, 2, 3, 1}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {3, 3, 2, 1, 2}, + {1, 1, 2, 3, 2}, + {3, 2, 3, 3, 3}, + {1, 2, 1, 1, 1}, + {1, 2, 3, 2, 2}, + {3, 2, 1, 2, 2}, + {2, 1, 2, 1, 1}, + {2, 3, 2, 3, 3}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 1}, + {3, 3, 3, 2, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 2, 2, 1}, + {3, 3, 2, 2, 3}, + {3, 2, 1, 2, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeD = { + { + type = "Line50Form3X5TypeD", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 1, 2, 3, 1}, + {1, 3, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {1, 1, 3, 3, 3}, + {3, 3, 1, 1, 1}, + {2, 1, 3, 2, 3}, + {2, 3, 1, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 2, 2, 1}, + {3, 1, 1, 1, 1}, + {1, 3, 3, 3, 3}, + {3, 3, 3, 3, 1}, + {1, 1, 1, 1, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeE = { + { + type = "Line50Form3X5TypeE", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 1, 1, 2}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {3, 3, 3, 3, 2}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {1, 1, 2, 2, 3}, + {3, 3, 2, 2, 1}, + {1, 1, 2, 3, 2}, + {3, 3, 2, 1, 2}, + {1, 2, 3, 2, 3}, + {3, 2, 1, 2, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {1, 3, 1, 3, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeF = { + { + type = "Line50Form3X5TypeF", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 2, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {3, 3, 2, 1, 2}, + {1, 1, 2, 3, 2}, + {3, 2, 3, 3, 3}, + {1, 2, 1, 1, 1}, + {1, 2, 3, 2, 2}, + {3, 2, 1, 2, 2}, + {2, 1, 2, 1, 1}, + {2, 3, 2, 3, 3}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 1}, + {3, 3, 3, 2, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 2, 2, 1}, + {3, 3, 2, 2, 3}, + {3, 2, 1, 2, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeG = { + { + type = "Line50Form3X5TypeG", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {1, 1, 1, 1, 2}, + {3, 3, 3, 3, 2}, + {2, 2, 2, 2, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 1, 2, 2}, + {3, 3, 3, 2, 2}, + {2, 1, 1, 1, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form3X5TypeH = { + { + type = "Line50Form3X5TypeH", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {1, 1, 1, 1, 2}, + {3, 3, 3, 3, 2}, + {2, 2, 2, 2, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 1, 2, 2}, + {3, 3, 3, 2, 2}, + {2, 1, 1, 1, 1}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine50Form45454TypeA = { + { + type = "Line50Form45454TypeA", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {1, 1, 1, 1, 1}, + {1, 1, 1, 2, 1}, + {1, 1, 1, 2, 2}, + {1, 2, 1, 1, 1}, + {1, 2, 1, 2, 1}, + {1, 2, 1, 2, 2}, + {1, 2, 2, 2, 1}, + {1, 2, 2, 2, 2}, + {1, 2, 2, 3, 2}, + {1, 2, 2, 3, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 1, 2, 1}, + {2, 2, 1, 2, 2}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 2}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 3, 3}, + {2, 2, 2, 2, 1}, + {2, 3, 2, 2, 2}, + {2, 3, 2, 3, 2}, + {2, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 3, 3, 3, 3}, + {2, 3, 3, 4, 3}, + {2, 3, 3, 4, 4}, + {3, 3, 2, 2, 1}, + {3, 3, 2, 2, 2}, + {3, 3, 2, 3, 2}, + {3, 3, 2, 3, 3}, + {3, 3, 3, 3, 2}, + {3, 3, 3, 3, 3}, + {3, 3, 3, 4, 3}, + {3, 3, 3, 4, 4}, + {3, 4, 3, 3, 2}, + {3, 4, 3, 3, 3}, + {3, 4, 3, 4, 3}, + {3, 4, 3, 4, 4}, + {3, 4, 4, 4, 3}, + {3, 4, 4, 4, 4}, + {3, 4, 4, 5, 4}, + {4, 4, 3, 3, 2}, + {4, 4, 3, 3, 3}, + {4, 4, 3, 4, 3}, + {4, 4, 3, 4, 4}, + {4, 4, 4, 4, 3}, + {4, 4, 4, 4, 4}, + {4, 4, 4, 5, 4}, + {4, 5, 4, 4, 3}, + {4, 5, 4, 4, 4}, + {4, 5, 4, 5, 4}, + }, + form = {4, 5, 4, 5, 4}, + }, +} + +_.MatrixLine50Form4X5TypeA = { + { + type = "Line50Form4X5TypeA", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 3, 3, 3, 4}, + {3, 2, 2, 2, 3}, + {2, 1, 1, 1, 2}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {4, 3, 2, 3, 4}, + {3, 2, 1, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 3, 4, 4}, + {3, 3, 2, 3, 3}, + {2, 2, 1, 2, 2}, + {1, 4, 1, 4, 1}, + {4, 1, 4, 1, 4}, + {4, 2, 4, 2, 4}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {2, 4, 2, 4, 2}, + {4, 3, 3, 2, 1}, + {1, 2, 2, 3, 4}, + {1, 2, 3, 3, 4}, + {4, 3, 2, 2, 1}, + {2, 1, 4, 3, 2}, + {3, 4, 1, 2, 3}, + {4, 4, 1, 4, 4}, + {1, 1, 4, 1, 1}, + {4, 1, 1, 1, 4}, + {1, 4, 4, 4, 1}, + {4, 2, 2, 2, 4}, + {1, 3, 3, 3, 1}, + {4, 2, 3, 2, 4}, + {1, 3, 2, 3, 1}, + {4, 1, 2, 1, 4}, + {1, 4, 2, 4, 1}, + {4, 4, 2, 4, 4}, + {1, 1, 3, 1, 1}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form4X5TypeB = { + { + type = "Line50Form4X5TypeB", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 1, 3, 3}, + {4, 4, 2, 4, 4}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {1, 1, 1, 1, 2}, + {4, 4, 4, 4, 3}, + {1, 2, 3, 4, 3}, + {1, 2, 3, 4, 4}, + {4, 3, 2, 1, 1}, + {4, 3, 2, 1, 2}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form4X5TypeC = { + { + type = "Line50Form4X5TypeC", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {4, 3, 2, 3, 4}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 3, 3, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 2, 1, 2}, + {3, 2, 3, 4, 3}, + {2, 1, 1, 2, 3}, + {3, 4, 4, 3, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {3, 3, 4, 3, 2}, + {2, 2, 1, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {2, 2, 3, 2, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 3, 3}, + {4, 4, 3, 2, 2}, + {2, 3, 2, 3, 2}, + {3, 2, 3, 2, 3}, + {3, 4, 3, 2, 3}, + {2, 1, 2, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 4, 3}, + {4, 3, 2, 1, 2}, + {2, 3, 4, 4, 4}, + {3, 2, 1, 1, 1}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {4, 3, 3, 2, 1}, + {1, 2, 2, 3, 4}, + {2, 3, 3, 4, 4}, + {3, 2, 2, 1, 1}, + {1, 2, 1, 2, 3}, + {4, 3, 4, 3, 2}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form4X5TypeD = { + { + type = "Line50Form4X5TypeD", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 1, 3, 3}, + {4, 4, 2, 4, 4}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {1, 1, 1, 1, 2}, + {4, 4, 4, 4, 3}, + {1, 2, 3, 4, 3}, + {1, 2, 3, 4, 4}, + {4, 3, 2, 1, 1}, + {4, 3, 2, 1, 2}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form4X5TypeE = { + { + type = "Line50Form4X5TypeE", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {1, 1, 1, 1, 1}, + {1, 1, 2, 1, 1}, + {1, 2, 2, 2, 1}, + {1, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {1, 1, 1, 2, 1}, + {1, 2, 1, 1, 1}, + {1, 1, 2, 2, 1}, + {1, 2, 2, 1, 1}, + {1, 1, 3, 1, 1}, + {1, 1, 3, 2, 1}, + {1, 2, 3, 1, 1}, + {2, 2, 2, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {2, 3, 2, 2, 2}, + {2, 1, 2, 2, 2}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {3, 3, 3, 3, 3}, + {3, 3, 4, 3, 3}, + {3, 3, 2, 3, 3}, + {3, 4, 4, 4, 3}, + {3, 2, 2, 2, 3}, + {3, 4, 3, 4, 3}, + {3, 2, 3, 2, 3}, + {3, 3, 3, 4, 3}, + {3, 3, 3, 2, 3}, + {3, 4, 3, 3, 3}, + {3, 2, 3, 3, 3}, + {3, 4, 2, 4, 3}, + {3, 2, 4, 2, 3}, + {4, 4, 4, 4, 4}, + {4, 4, 3, 4, 4}, + {4, 3, 3, 3, 4}, + {4, 3, 2, 3, 4}, + {4, 3, 4, 3, 4}, + {4, 4, 4, 3, 4}, + {4, 3, 4, 4, 4}, + {4, 4, 3, 3, 4}, + {4, 3, 3, 4, 4}, + {4, 4, 2, 4, 4}, + {4, 4, 2, 3, 4}, + {4, 3, 2, 4, 4}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form4X5TypeF = { + { + type = "Line50Form4X5TypeF", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 4, 3}, + {4, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {3, 4, 3, 2, 3}, + {2, 3, 4, 4, 4}, + {3, 2, 1, 1, 1}, + {2, 3, 3, 4, 4}, + {3, 2, 2, 1, 1}, + {2, 2, 1, 2, 2}, + {3, 3, 4, 3, 3}, + {1, 2, 2, 2, 1}, + {4, 3, 3, 3, 4}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2}, + {3, 4, 3, 4, 3}, + {1, 1, 1, 2, 2}, + {4, 4, 4, 3, 3}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {4, 3, 2, 3, 4}, + {2, 2, 3, 3, 4}, + {3, 3, 2, 2, 1}, + {2, 2, 1, 1, 2}, + {3, 3, 4, 4, 3}, + {1, 2, 1, 1, 2}, + {4, 3, 4, 4, 3}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {2, 1, 1, 2, 1}, + {3, 4, 4, 3, 4}, + {1, 2, 2, 1, 2}, + {4, 3, 3, 4, 3}, + {2, 3, 2, 1, 1}, + {3, 2, 3, 4, 4}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form4X6TypeA = { + { + type = "Line50Form4X6TypeA", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4, 4}, + {1, 2, 3, 3, 2, 1}, + {4, 3, 2, 2, 3, 4}, + {2, 3, 4, 4, 3, 2}, + {3, 2, 1, 1, 2, 3}, + {1, 2, 1, 1, 2, 1}, + {4, 3, 4, 4, 3, 4}, + {2, 1, 2, 2, 1, 2}, + {3, 4, 3, 3, 4, 3}, + {2, 3, 2, 2, 3, 2}, + {3, 2, 3, 3, 2, 3}, + {1, 1, 2, 2, 1, 1}, + {4, 4, 3, 3, 4, 4}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 2, 2, 3, 3}, + {3, 3, 4, 4, 3, 3}, + {2, 2, 1, 1, 2, 2}, + {2, 3, 3, 3, 3, 2}, + {3, 2, 2, 2, 2, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 4, 4, 4, 4, 3}, + {4, 3, 3, 3, 3, 4}, + {1, 2, 2, 2, 2, 1}, + {3, 1, 1, 1, 1, 3}, + {2, 4, 4, 4, 4, 2}, + {4, 2, 2, 2, 2, 4}, + {1, 3, 3, 3, 3, 1}, + {3, 3, 1, 1, 3, 3}, + {2, 2, 4, 4, 2, 2}, + {1, 1, 3, 3, 1, 1}, + {4, 4, 2, 2, 4, 4}, + {4, 4, 1, 1, 4, 4}, + {1, 1, 4, 4, 1, 1}, + {4, 3, 2, 1, 1, 1}, + {1, 2, 3, 4, 4, 4}, + {1, 1, 1, 2, 3, 4}, + {4, 4, 4, 3, 2, 1}, + {3, 2, 1, 1, 1, 1}, + {2, 3, 4, 4, 4, 4}, + {1, 1, 1, 1, 2, 3}, + {4, 4, 4, 4, 3, 2}, + {4, 3, 2, 2, 2, 2}, + {1, 2, 3, 3, 3, 3}, + {2, 2, 2, 2, 3, 4}, + {3, 3, 3, 3, 2, 1}, + {2, 4, 1, 1, 4, 2}, + {3, 1, 4, 4, 1, 3}, + }, + form = {4, 4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine50Form5X5TypeA = { + { + type = "Line50Form5X5TypeA", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {4, 3, 4, 5, 4}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {4, 5, 4, 3, 4}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 5, 3, 3}, + }, + form = {5, 5, 5, 5, 5}, + }, +} + +_.MatrixLine50Form5X5TypeB = { + { + type = "Line50Form5X5TypeB", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {4, 4, 4, 4, 4}, + {3, 3, 3, 3, 3}, + {5, 5, 5, 5, 5}, + {3, 4, 5, 4, 3}, + {5, 4, 3, 4, 5}, + {4, 3, 3, 3, 4}, + {4, 5, 5, 5, 4}, + {3, 3, 4, 5, 5}, + {5, 5, 4, 3, 3}, + {4, 3, 4, 3, 4}, + {4, 5, 4, 5, 4}, + {3, 4, 4, 4, 5}, + {5, 4, 4, 4, 3}, + {4, 4, 3, 4, 5}, + {4, 4, 5, 4, 3}, + {3, 4, 3, 4, 3}, + {5, 4, 5, 4, 5}, + {3, 3, 5, 3, 3}, + {5, 5, 3, 5, 5}, + {4, 3, 5, 3, 4}, + {4, 5, 3, 5, 4}, + {3, 5, 3, 5, 3}, + {5, 3, 5, 3, 5}, + {3, 5, 5, 5, 3}, + {5, 3, 3, 3, 5}, + {3, 5, 4, 5, 3}, + {5, 3, 4, 3, 5}, + {4, 4, 5, 4, 4}, + {4, 4, 3, 4, 4}, + {3, 5, 3, 4, 4}, + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {2, 2, 1, 2, 3}, + {2, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + }, + form = {5, 5, 5, 5, 5}, + }, +} + +_.MatrixLine50Form5X5TypeC = { + { + type = "Line50Form5X5TypeC", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + form = {5, 5, 5, 5, 5}, + }, +} + +_.MatrixLine50Form6X5TypeA = { + { + type = "Line50Form6X5TypeA", + link_type = 0, + direction = 0, + line_count = 50, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + }, + form = {6, 6, 6, 6, 6}, + }, +} + +_.MatrixLine5Form3X3TypeA = { + { + type = "Line5Form3X3TypeA", + link_type = 0, + direction = 0, + line_count = 5, + lines = { + {1, 1, 1}, + {2, 2, 2}, + {3, 3, 3}, + {1, 2, 3}, + {3, 2, 1}, + }, + form = {3, 3, 3}, + }, +} + +_.MatrixLine5Form3X3TypeB = { + { + type = "Line5Form3X3TypeB", + link_type = 0, + direction = 0, + line_count = 5, + lines = { + {2, 2, 2}, + {1, 1, 1}, + {3, 3, 3}, + {1, 2, 3}, + {3, 2, 1}, + }, + form = {3, 3, 3}, + }, +} + +_.MatrixLine60Form33633TypeA = { + { + type = "Line60Form33633TypeA", + link_type = 0, + direction = 0, + line_count = 60, + lines = { + {2, 2, 3, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 5, 3, 3}, + {1, 2, 5, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 5, 3, 2}, + {1, 1, 3, 3, 3}, + {3, 3, 3, 1, 1}, + {2, 3, 3, 1, 2}, + {2, 1, 3, 3, 2}, + {1, 2, 3, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 5, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 5, 2, 2}, + {1, 1, 5, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 5, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 5, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 5, 1, 3}, + {3, 1, 3, 3, 1}, + {1, 3, 3, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 2, 1, 1, 2}, + {2, 2, 4, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 6, 3, 3}, + {1, 2, 6, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 6, 3, 2}, + {1, 1, 4, 3, 3}, + {3, 3, 4, 1, 1}, + {2, 3, 4, 1, 2}, + {2, 1, 4, 3, 2}, + {1, 2, 4, 2, 1}, + {3, 2, 4, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 6, 2, 3}, + {2, 2, 2, 2, 2}, + {2, 2, 6, 2, 2}, + {1, 1, 6, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 3, 6, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 3, 2, 3, 2}, + {2, 1, 6, 1, 2}, + {1, 3, 2, 3, 1}, + {3, 1, 6, 1, 3}, + {3, 1, 4, 3, 1}, + {1, 3, 4, 1, 3}, + {1, 3, 4, 3, 1}, + {3, 1, 4, 1, 3}, + {3, 2, 2, 1, 2}, + }, + form = {3, 3, 6, 3, 3}, + }, +} + +_.MatrixLine60Form8X5TypeA = { + { + type = "Line60Form8X5TypeA", + link_type = 0, + direction = 0, + line_count = 60, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + }, + form = {8, 8, 8, 8, 8}, + }, +} + +_.MatrixLine65Form6X5TypeA = { + { + type = "Line65Form6X5TypeA", + link_type = 0, + direction = 0, + line_count = 65, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {6, 6, 5, 4, 4}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {3, 3, 4, 5, 6}, + {6, 6, 5, 4, 3}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {3, 4, 5, 6, 6}, + {6, 5, 4, 3, 3}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + form = {6, 6, 6, 6, 6}, + }, +} + +_.MatrixLine70Form9X5TypeA = { + { + type = "Line70Form9X5TypeA", + link_type = 0, + direction = 0, + line_count = 70, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + }, + form = {9, 9, 9, 9, 9}, + }, +} + +_.MatrixLine75Form5X6TypeA = { + { + type = "Line75Form5X6TypeA", + link_type = 0, + direction = 0, + line_count = 75, + lines = { + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5, 5}, + {1, 2, 3, 4, 5, 4}, + {5, 4, 3, 2, 1, 2}, + {1, 2, 3, 4, 5, 5}, + {5, 4, 3, 2, 1, 1}, + {1, 2, 3, 3, 2, 1}, + {2, 3, 4, 4, 3, 2}, + {3, 4, 5, 5, 4, 3}, + {3, 2, 1, 1, 2, 3}, + {4, 3, 2, 2, 3, 4}, + {5, 4, 3, 3, 4, 5}, + {1, 2, 3, 4, 4, 3}, + {2, 3, 4, 5, 5, 4}, + {5, 4, 3, 2, 2, 3}, + {4, 3, 2, 1, 1, 2}, + {1, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 3}, + {3, 4, 3, 4, 3, 4}, + {4, 5, 4, 5, 4, 5}, + {2, 1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3, 2}, + {4, 3, 4, 3, 4, 3}, + {5, 4, 5, 4, 5, 4}, + {1, 2, 3, 4, 3, 2}, + {2, 3, 4, 5, 4, 3}, + {5, 4, 3, 2, 3, 4}, + {4, 3, 2, 1, 2, 3}, + {2, 3, 4, 3, 2, 1}, + {3, 4, 5, 4, 3, 2}, + {4, 3, 2, 3, 4, 5}, + {3, 2, 1, 2, 3, 4}, + {1, 2, 3, 4, 4, 4}, + {2, 3, 4, 5, 5, 5}, + {5, 4, 3, 2, 2, 2}, + {4, 3, 2, 1, 1, 1}, + {1, 1, 2, 3, 4, 4}, + {2, 2, 3, 4, 5, 5}, + {5, 5, 4, 3, 2, 2}, + {4, 4, 3, 2, 1, 1}, + {1, 1, 1, 2, 3, 4}, + {2, 2, 2, 3, 4, 5}, + {5, 5, 5, 4, 3, 2}, + {4, 4, 4, 3, 2, 1}, + {1, 2, 3, 2, 3, 2}, + {2, 3, 4, 3, 4, 3}, + {3, 4, 5, 4, 5, 4}, + {5, 4, 3, 4, 3, 4}, + {4, 3, 2, 3, 2, 3}, + {3, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 1}, + {3, 4, 3, 4, 3, 2}, + {4, 5, 4, 5, 4, 3}, + {4, 3, 4, 3, 4, 5}, + {3, 2, 3, 2, 3, 4}, + {2, 1, 2, 1, 2, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 2, 2, 2, 2, 3}, + {4, 3, 3, 3, 3, 4}, + {5, 4, 4, 4, 4, 5}, + {1, 2, 2, 2, 2, 1}, + {2, 3, 3, 3, 3, 2}, + {3, 4, 4, 4, 4, 3}, + {4, 5, 5, 5, 5, 4}, + {1, 1, 2, 2, 1, 1}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 4, 4, 3, 3}, + {4, 4, 5, 5, 4, 4}, + {5, 5, 4, 4, 5, 5}, + {4, 4, 3, 3, 4, 4}, + {3, 3, 2, 2, 1, 1}, + {2, 2, 1, 1, 2, 2}, + }, + form = {5, 5, 5, 5, 5, 5}, + }, +} + +_.MatrixLine75Form6X5TypeA = { + { + type = "Line75Form6X5TypeA", + link_type = 0, + direction = 0, + line_count = 75, + lines = { + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 3, 3, 2, 3}, + {1, 1, 1, 2, 1}, + {2, 2, 2, 1, 2}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {4, 4, 4, 4, 4}, + {6, 5, 4, 5, 6}, + {4, 5, 6, 5, 4}, + {6, 6, 5, 6, 6}, + {4, 4, 5, 4, 4}, + {5, 4, 4, 4, 5}, + {5, 6, 6, 6, 5}, + {6, 5, 5, 5, 6}, + {4, 5, 5, 5, 4}, + {6, 5, 6, 5, 6}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {5, 4, 5, 4, 5}, + {5, 5, 6, 5, 5}, + {5, 5, 4, 5, 5}, + {6, 4, 6, 4, 6}, + {4, 6, 4, 6, 4}, + {5, 6, 4, 6, 5}, + {5, 4, 6, 4, 5}, + {6, 6, 4, 6, 6}, + {4, 4, 6, 4, 4}, + {6, 4, 4, 4, 6}, + {4, 6, 6, 6, 4}, + {6, 4, 5, 4, 6}, + {4, 6, 5, 6, 4}, + {6, 6, 6, 5, 6}, + {4, 4, 4, 5, 4}, + {5, 5, 5, 4, 5}, + {4, 4, 3, 4, 4}, + {3, 3, 4, 3, 3}, + {4, 3, 3, 3, 4}, + {3, 4, 4, 4, 3}, + {4, 3, 4, 3, 4}, + {3, 4, 3, 4, 3}, + {4, 2, 3, 2, 4}, + {2, 4, 3, 4, 2}, + {4, 4, 4, 3, 4}, + {3, 3, 3, 4, 3}, + {3, 2, 4, 2, 3}, + {3, 4, 2, 4, 3}, + {4, 3, 2, 3, 4}, + {2, 3, 4, 3, 2}, + {2, 2, 4, 2, 2}, + }, + form = {6, 6, 6, 6, 6}, + }, +} + +_.MatrixLine80Form10X5TypeA = { + { + type = "Line80Form10X5TypeA", + link_type = 0, + direction = 0, + line_count = 80, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + {10, 10, 10, 10, 10}, + {9, 10, 9, 10, 9}, + {10, 9, 10, 9, 10}, + {8, 9, 10, 9, 8}, + {10, 9, 8, 9, 10}, + {9, 10, 10, 10, 9}, + {10, 9, 9, 9, 10}, + {9, 9, 10, 9, 9}, + {10, 10, 9, 10, 10}, + {8, 8, 9, 10, 10}, + }, + form = {10, 10, 10, 10, 10}, + }, +} + +_.MatrixLine80Form3X5TypeA = { + { + type = "Line80Form3X5TypeA", + link_type = 0, + direction = 0, + line_count = 80, + lines = { + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 1, 2, 3, 1}, + {1, 3, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {1, 1, 3, 3, 3}, + {3, 3, 1, 1, 1}, + {2, 1, 3, 2, 3}, + {2, 3, 1, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 2, 2, 1}, + {3, 1, 1, 1, 1}, + {1, 3, 3, 3, 3}, + {3, 3, 3, 3, 1}, + {1, 1, 1, 1, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {1, 1, 1, 1, 2}, + {1, 1, 1, 2, 2}, + {1, 1, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {1, 1, 2, 2, 1}, + {1, 1, 2, 2, 2}, + {1, 1, 2, 3, 2}, + {1, 2, 1, 1, 1}, + {1, 2, 1, 2, 2}, + {3, 1, 2, 1, 2}, + {1, 3, 2, 3, 2}, + {1, 2, 1, 3, 1}, + {3, 2, 3, 1, 3}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 2, 2, 3, 3}, + {2, 1, 1, 1, 1}, + {2, 1, 1, 2, 2}, + {2, 1, 1, 2, 3}, + {1, 2, 2, 1, 2}, + {2, 1, 2, 2, 3}, + {2, 1, 2, 3, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 1, 1, 2}, + {2, 2, 1, 2, 3}, + {1, 1, 3, 2, 1}, + {2, 2, 2, 1, 1}, + {2, 2, 3, 3, 3}, + {3, 3, 3, 3, 2}, + {2, 2, 2, 2, 3}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixLine80Form4X6TypeA = { + { + type = "Line80Form4X6TypeA", + link_type = 0, + direction = 0, + line_count = 80, + lines = { + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4, 4}, + {1, 2, 3, 3, 2, 1}, + {4, 3, 2, 2, 3, 4}, + {2, 3, 4, 4, 3, 2}, + {3, 2, 1, 1, 2, 3}, + {1, 2, 1, 1, 2, 1}, + {4, 3, 4, 4, 3, 4}, + {2, 1, 2, 2, 1, 2}, + {3, 4, 3, 3, 4, 3}, + {2, 3, 2, 2, 3, 2}, + {3, 2, 3, 3, 2, 3}, + {1, 1, 2, 2, 1, 1}, + {4, 4, 3, 3, 4, 4}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 2, 2, 3, 3}, + {3, 3, 4, 4, 3, 3}, + {2, 2, 1, 1, 2, 2}, + {2, 3, 3, 3, 3, 2}, + {3, 2, 2, 2, 2, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 4, 4, 4, 4, 3}, + {4, 3, 3, 3, 3, 4}, + {1, 2, 2, 2, 2, 1}, + {3, 1, 1, 1, 1, 3}, + {2, 4, 4, 4, 4, 2}, + {4, 2, 2, 2, 2, 4}, + {1, 3, 3, 3, 3, 1}, + {3, 3, 1, 1, 3, 3}, + {2, 2, 4, 4, 2, 2}, + {1, 1, 3, 3, 1, 1}, + {4, 4, 2, 2, 4, 4}, + {4, 4, 1, 1, 4, 4}, + {1, 1, 4, 4, 1, 1}, + {4, 3, 2, 1, 1, 1}, + {1, 2, 3, 4, 4, 4}, + {1, 1, 1, 2, 3, 4}, + {4, 4, 4, 3, 2, 1}, + {3, 2, 1, 1, 1, 1}, + {2, 3, 4, 4, 4, 4}, + {1, 1, 1, 1, 2, 3}, + {4, 4, 4, 4, 3, 2}, + {4, 3, 2, 2, 2, 2}, + {1, 2, 3, 3, 3, 3}, + {2, 2, 2, 2, 3, 4}, + {3, 3, 3, 3, 2, 1}, + {2, 4, 1, 1, 4, 2}, + {3, 1, 4, 4, 1, 3}, + {1, 4, 1, 1, 4, 1}, + {4, 1, 4, 4, 1, 4}, + {1, 2, 1, 2, 1, 2}, + {3, 4, 3, 4, 3, 4}, + {2, 3, 2, 3, 2, 3}, + {3, 2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2, 1}, + {1, 3, 1, 3, 1, 3}, + {4, 2, 4, 2, 4, 2}, + {2, 4, 2, 4, 2, 4}, + {3, 1, 3, 1, 3, 1}, + {1, 4, 1, 4, 1, 4}, + {4, 1, 4, 1, 4, 1}, + {1, 2, 3, 4, 3, 2}, + {4, 3, 2, 1, 2, 3}, + {2, 3, 4, 3, 2, 1}, + {3, 2, 1, 2, 3, 4}, + {1, 2, 1, 2, 3, 4}, + {4, 3, 4, 3, 2, 1}, + {2, 3, 2, 1, 2, 3}, + {3, 2, 3, 4, 3, 2}, + {1, 4, 4, 4, 4, 1}, + {4, 1, 1, 1, 1, 4}, + {2, 4, 1, 1, 4, 2}, + {3, 1, 4, 4, 1, 3}, + {1, 3, 4, 4, 3, 1}, + {4, 2, 1, 1, 2, 4}, + {2, 4, 1, 4, 1, 3}, + {3, 1, 4, 1, 4, 2}, + }, + form = {4, 4, 4, 4, 4, 4}, + }, +} + +_.MatrixLine80Form7X5TypeA = { + { + type = "Line80Form7X5TypeA", + link_type = 0, + direction = 0, + line_count = 80, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {5, 5, 6, 7, 7}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {6, 6, 5, 4, 4}, + {7, 7, 6, 5, 5}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {3, 3, 4, 5, 6}, + {4, 4, 5, 6, 7}, + {7, 7, 6, 5, 4}, + {6, 6, 5, 4, 3}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {3, 4, 5, 6, 6}, + {4, 5, 6, 7, 7}, + {7, 6, 5, 4, 4}, + {6, 5, 4, 3, 3}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + form = {7, 7, 7, 7, 7}, + }, +} + +_.MatrixLine90Form11X5TypeA = { + { + type = "Line90Form11X5TypeA", + link_type = 0, + direction = 0, + line_count = 90, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + {10, 10, 10, 10, 10}, + {9, 10, 9, 10, 9}, + {10, 9, 10, 9, 10}, + {8, 9, 10, 9, 8}, + {10, 9, 8, 9, 10}, + {9, 10, 10, 10, 9}, + {10, 9, 9, 9, 10}, + {9, 9, 10, 9, 9}, + {10, 10, 9, 10, 10}, + {8, 8, 9, 10, 10}, + {11, 11, 11, 11, 11}, + {10, 11, 10, 11, 10}, + {11, 10, 11, 10, 11}, + {9, 10, 11, 10, 9}, + {11, 10, 9, 10, 11}, + {10, 11, 11, 11, 10}, + {11, 10, 10, 10, 11}, + {10, 10, 11, 10, 10}, + {11, 11, 10, 11, 11}, + {9, 9, 10, 11, 11}, + }, + form = {11, 11, 11, 11, 11}, + }, +} + +_.MatrixLine95Form8X5TypeA = { + { + type = "Line95Form8X5TypeA", + link_type = 0, + direction = 0, + line_count = 95, + lines = { + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {5, 5, 6, 7, 7}, + {6, 6, 7, 8, 8}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {6, 6, 5, 4, 4}, + {7, 7, 6, 5, 5}, + {8, 8, 7, 6, 6}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {3, 3, 4, 5, 6}, + {4, 4, 5, 6, 7}, + {5, 5, 6, 7, 8}, + {8, 8, 7, 6, 5}, + {7, 7, 6, 5, 4}, + {6, 6, 5, 4, 3}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {3, 4, 5, 6, 6}, + {4, 5, 6, 7, 7}, + {5, 6, 7, 8, 8}, + {8, 7, 6, 5, 5}, + {7, 6, 5, 4, 4}, + {6, 5, 4, 3, 3}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + form = {8, 8, 8, 8, 8}, + }, +} + +_.MatrixMatchForm7X7TypeA = { + { + type = "MatchForm7X7", + link_type = 4, + direction = 0, + line_count = 20, + lines = { + {0, 0, 0}, + }, + form = {7, 7, 7, 7, 7, 7, 7}, + }, +} + +_.MatrixSameForm5X6TypeA = { + { + type = "SameForm5X6", + link_type = 3, + direction = 0, + line_count = 20, + lines = { + {0, 0, 0}, + }, + form = {5, 5, 5, 5, 5, 5}, + }, +} + +_.MatrixSameForm5X6TypeB = { + { + type = "SameForm5X6TypeB", + link_type = 3, + direction = 0, + line_count = 25, + lines = { + {0, 0, 0}, + }, + form = {5, 5, 5, 5, 5, 5}, + }, +} + +_.MatrixWaysForm333331 = { + { + type = "WaysForm333331", + link_type = 1, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {3, 3, 3, 3, 3, 1}, + }, +} + +_.MatrixWaysForm33555 = { + { + type = "WaysForm33555", + link_type = 1, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {3, 3, 5, 5, 5}, + }, +} + +_.MatrixWaysForm344444 = { + { + type = "WaysForm344444", + link_type = 1, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {3, 4, 4, 4, 4, 4}, + }, +} + +_.MatrixWaysForm3X5TypeA = { + { + type = "WaysForm3X5TypeA", + link_type = 1, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {3, 3, 3, 3, 3}, + }, +} + +_.MatrixWaysForm44668 = { + { + type = "WaysForm44668", + link_type = 1, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {4, 4, 6, 6, 8}, + }, +} + +_.MatrixWaysForm4X5TypeA = { + { + type = "WaysForm4X5TypeA", + link_type = 1, + direction = 0, + line_count = 100, + lines = { + {0, 0, 0}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +_.MatrixWaysForm4X5TypeB = { + { + type = "WaysForm4X5TypeB", + link_type = 1, + direction = 0, + line_count = 60, + lines = { + {0, 0, 0}, + }, + form = {4, 4, 4, 4, 4}, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/Client_Config/Config/base/PrizeModel.lua b/gamesrv/slotspkg/external/Client_Config/Config/base/PrizeModel.lua new file mode 100644 index 0000000..07ce268 --- /dev/null +++ b/gamesrv/slotspkg/external/Client_Config/Config/base/PrizeModel.lua @@ -0,0 +1,52 @@ +-- +local _ = {} + +_.PrizeModelPrizeModelTypeA = { + [1] = { + id = 1, + ani_type = "big_win", + min_multiple = 10, + max_multiple = 25, + }, + [2] = { + id = 2, + ani_type = "mega_win", + min_multiple = 25, + max_multiple = 50, + }, + [3] = { + id = 3, + ani_type = "epic_win", + min_multiple = 50, + max_multiple = -1, + }, +} + +_.PrizeModelPrizeModelTypeB = { + [1] = { + id = 1, + ani_type = "big_win", + min_multiple = 15, + max_multiple = 30, + }, + [2] = { + id = 2, + ani_type = "mega_win", + min_multiple = 30, + max_multiple = 45, + }, + [3] = { + id = 3, + ani_type = "epic_win", + min_multiple = 45, + max_multiple = 60, + }, + [4] = { + id = 4, + ani_type = "epic_win", + min_multiple = 60, + max_multiple = -1, + }, +} + +return _ \ No newline at end of file diff --git a/gamesrv/slotspkg/external/ExportGoConfig.bat b/gamesrv/slotspkg/external/ExportGoConfig.bat new file mode 100644 index 0000000..7702846 --- /dev/null +++ b/gamesrv/slotspkg/external/ExportGoConfig.bat @@ -0,0 +1,14 @@ +@echo off +if exist "external" (cd external) + +if not exist converter.exe ( + echo Building converter... + go build -o converter.exe ../tools/converter +) else ( + echo converter.exe already exists. +) + +converter.exe go /excel ../internal/exported/excel2go .. +echo Done. +pause +exit \ No newline at end of file diff --git a/gamesrv/slotspkg/external/README.md b/gamesrv/slotspkg/external/README.md new file mode 100644 index 0000000..983125a --- /dev/null +++ b/gamesrv/slotspkg/external/README.md @@ -0,0 +1,3 @@ +# external + +### 后续需要移植出去,暂时放这里 \ No newline at end of file diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm15X1TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm15X1TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..55ca9cc0be3a773e91f0c3077c2190f735485ac7 GIT binary patch literal 10541 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 aho9{Zin6dzNe2YR<468c+cd?~)&B$Jmp=vo literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm20X1TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm20X1TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0df7af8dce0682697ae230b8c542ac7b454ceefd GIT binary patch literal 10541 zcma)i1z1(v);1ji($d{24HD8RAl)t9>`h8{cSuQhOLupNJ&!=yHG${rzX$x&3qzX^asV4!;A^=jF^s1V;C_mI zlm+zifP;Z)Lx6#y{9R1n)|S!P%JOqehZH0;O2DDdVa3L>F$1YWrKTS(A%<u!D^ zNPq)AX=n0=UWXU1)thQXtfP;q3Bh4Dbag-dj^DG@8@0;HCro3|R&7D*J0w1Iz5SZVNG98k%kfIK4GDqFEpPBP?! znw@HbM#o~I40OU3xy*YmOL$B0p8i7w^;xdcowi(mMI@qS2B)_WTWiCv+3`8`MjoZg zw%bxtqjfLBR^1h~d@K`mB?y?X*kvr_HiUd`n9KO}2Yf|L%~@53GIDd(R=OKAr+dl# z?@sr>uix+NUMnAMJK2=(iQj4vZN+k+^f1j~*yB%NqcO7Mw5I?_An&0US?ucxM)9Q@ znAsxg@kHlfm&jIh%@80h1WtE7AAnfboc{#6@lhsM;0b7vC!kUP4)g~bfYCG3?$Ik! zT};?LhtMmT8?7=6;mpDy@4+&BxMJ#M{|%6e0=KRseaLB`v$(B@fD?+6RK5JyX=hB^oH)P-|;b1HNlv zD^E-#-as=x>MG3a=ms0pK+dIv!nq)|*)?JPMgPv<3f#nRxB_Yn>J-tbeJ)IdjTo9J zdUKkCPrw!tNkVS<8=K^D-K=l?!5BgdU^A|UKapt)nk4_oztTL2*bWXohfID zM>)K**4D)ov`q^J0L=WV5R`@TE&Oz?u6qE~AW3&yH+?81TZ)pQ>_C`ozDYNF#vbtT z?(ziTpKu%dn6tQ=82&$7Z>Mc;NA06@$wXEE}Y{V!M+9`Qcw}@|T zID>@sv~yF6I5muq$QiUY>o|ATO<~?N%4)2lE*KxJE>^V9&A=AY;$78Tq|AgB0X*<8 z=c=t#hbF(q#w_TINrdeVaA%Jn`TJrmuWdhsSW3IsRyFOL9W}b#!1H^nG?WdjYT^V} zhDrF%aia#IX=IQ~ZwA>4sdaQys+X>iV2|p!hOT3EkWT0}U|gil?BHG%yN>)uj5L56=}sI{ z%0>1eqo>w5BfOWR~nNj|`z{_6(PBs7wpsA6O{h!&VjmRb$>B-70 z92gk(f5`q+VSWx(yb8z~#DwThRN;worlT9fX6C~sn!+~cg+x80ou-^3>$i|VMPt`g zPDG)LraR*(fHME}8!ED-q>c`MKKvUWB`rhnbAm{;ej(IjORRCCl{zfdIO>tgAPQ1n zuU4Q@ZBwa~r{c&b)@jR;E(bNn-Pj(Zy zEPs{388aQIh&ud+VmB;27jzUQl=lt|9)1eDZQ)dF+H!27>56pV#aE3!;H$N~RI{r) z$=9uMfeO^97E~C8ngKJaZ=ALmKAX*v;Yz3sZcLH139RAw@SXVWV$s#TggXn)r+$&& zACGRVj9~(QV#2t6E@&2QooH-dQ;k{w>A)PvZa9mEFB%2*tXJ3aHO&IU8dadsXFhbr z6LFHX;qEQ!jI?h)P(rb8owi(^xH04zPUw5dD+%aC(c@OwW9b$brB*SnlB7ZNBoh|V zcWcqhu=cVRAWnHVh*prr-ej=v-C72ES_c-FkWVc5{#+D!hKdX|nil+{ZbvR)THmqixOQC0VqpTwF4tNjd!km1;8YUSEAC&4A^@*tzE zz;57Lh+EfHuy@-#iFe<)mBr?bT&Es781K(7sMk-u1|@s3 zr3~?7HYrQ-lG0jDO>K6+%lK+6YYqDL{aV|4H+6rNE|w>aCPpCao%3iInmXa=g?i|s zM)a1vX|v0ZIzA6DFl*1Tj3A#=%X zLn%`ET$Z8YrI@?B;5I(G0kwI)~bgq3>x#ig)J!DKCftN$X!c!Q@B)i zbmFvR3>j$aE8}Gb*i$*0)TYB%)twa8y9ew);(X#Q53>4}hcgwhXnm@*ICLf#A_Wq| zmA6GYFLu`{RP2e({GS?a*8T$KH1bxBas! zX;`Ed7Bvc+w3p|wru6}%RwtyhueF`tL&M*ff3CHnvMQxCn^yIP2^#&7IWK6Yz6=~0 zFrVP_?xWOUsKghW;Jqn81yM9)bJ8cF*N>}ve9uze=9+Xn)y5#5CiQI)B4vf;PyiqtB=@Xo#78Cd`QOuJY4j+Q}E&9=M@WuE@av$YjcLLFi5yNAiu`>_J zvH{6kO3-`Km3{U&0CNLzH19TPc{i3F2J~VDc`$fxrI*S#PFf&qm!#5($yHmbb_d^n zgL1C!i^P>`y3ysY@ut0&HKvAm9d15N`gvV83*q?;Q-kcBpbPt4RajW?Ci!MSeObjH9(mTTMbcn86 zN^-n%)i@(^d#y83hLSw03nSs2^$t(_HpqR>x&lH*Ta^do(xd?vG; zvK`pvuvN6;v_WK_Y<*(dFU+6kQ;<!5*+B4)2=qzaD$(!NV#)+JB77ej0YRD0+$iXA0YnsCi`5x zKW(!1rbbpqe-!Um5BMnIFkoPbc)yCAzr=nD|J*tE)mLor*zrBZ*E}l@+$|<4wG|mY zC$p*R@2arRj}v|l1#a~?y`7hBYL)@5laqG~xC#n2A9;C6ra+;sr)PdJMKpVa&;>bt z0s=GlRlL1Km4POnclY=AHx^rKxjd-Cw;~dQ>v^hty2mKN?r(GK#?P$Jnzm+m$uT1W z6OR+wT42UChGW92^G}ZL_m!`IYGqFeR+H>#AvgezC&0PvA(!Gl|E^Sh=GGap@zU6w~q+O_L z&e$s8X(YQTRyo?_16SfF+Y@#{GXIZms!f1s#s*!q;o=J>*vOP&J#;X!)z|dLOuni#qiKD_M zW}X~{dO?y1;=+XsVTWv%wbk!^c@40ZI2D@2Vw0CS?1B_3i#P@Upe8I@KS<^)duO*ZqEgNOw`RjsN;&x@&CkxH9PRya{&9^Pw6a4u>sv zyJsuX)Ai=6Cp%Kt*mF6e|?r*w3l$}1+3%>38f8;0xLdK<$49Gxz;QCQ~jbZMEi`` z$_++C`x)L^2XaXbR`B5litfPz5J^HN7*&mq2o8*cJYe}(oim$k6xQl*uY_!UVIm}| zz$RGH<=2LW{CJK*DV3;{d4mFyPP7gp>ut24FrlSd{N?!lygK+4HT4rqBAS^{+s96{ z7JsT^M(>ium8@muZ70ly+cDK`(FV5*2N#u)OsU;~?u&)I(}-6b%VdLU?`3crXk`u= z^dWH__2tT0P2R^4b;qC(I#5DF!eYT$&JcG@i!1rJpiqt1sq)E?N73vEWcj`0dY$}D zVF4GprL8i5r15Rw+#t!9g>S+<%~^p}>teFK5}1jsR=uX8=v*{a@dz~XMbAV*EzSMRDX2aKn&j3OKL zSb1XJAJvNIHaS7zt-Q!t=QnWNir~4fRS$xqjIk)G`eP2wkUGJJ~7PZ|1KA8Oy2m?c&R#O5qygQH&huk2+aMb^6=~Zfn7G==qw+CZRGF)* zfK_#>j7v;CAc=B)SFxa*N$njvm*zTJYwl%Ax`?eMlxN0|3~H8 z9o{bV^t-W277PsO*Cq$Fcd;}AK9{T0TAGodUQCbIGZXKMK^at16teE*o3=|-{gp_& zjx)K4C5+pnd>y)VO5uHK=0~Gj(8>a?7*!f@f834~I{7G&;hZTXf>D*W>mZYL8NT2N*q!Z+oV_&=wjbP>D{U1Ay z!Q-5|{KT-$$w}qTrL4L!2n}IOlVWnEDbsPDdp_eg@pPx3*{1f#utO(8HPf#XZj!F= z@juYAHG(wn+f4*#icyU0ja)6RY5`U2;E!w=nbxb&nP}kQ#DiBMD>z&m5y$i8>3j`= zhunL9!g@rgY|{2fz{uq{w)ey$Sac$N&}K!g&1pw^ZMh4z;OSxn>{a8Xs;b5{#p5F( zDq!M)tg;JBrbGC!gGHCELW*^g-FD1B<;Ycw!2Oo(h;-M8>Ou-=Ws+I&lkxI ze_)JZ1WwMKG`nUVvzc(FuVaUCFZ2XhMX(fWmuttdXfYyYve@yxrjbB`oTjxka@{RJ z7nR)x*=CKe?^21&6<)~^lg%jgyCWRDh2x=0jsS|k_10f);4|zIOev52QH0h|U|eR+ zK|f?}er{Z4mJ|?xkmdfdYWFhr18m4PcdOR7)P4(F4Nn%wYEXjz9itr9cg8IXB)6Kd zJmuMr@3aA51n!4t#awN6T5(s+vsEl+*xqs0WPOo!tJ!ySebYLF9r$UN?mOmi_}bfQ zwEJ-7oyZTRpd%Wt8Kv22+#8IN(B5f-dPYu8g?rH^NfN8s%e~Gi1!+uIn?4N%4KMNc zc6C~kS0RLgCRJl0i_&^J2L;JzF(QvrcUxlV@mIRKvMiSL??%kC2f}mdf+;=bh{D7?=5|!4IcCsQTf&XVKSaBJ$%?JCNU&3Wa8s0+_iD0dG); z*M%-uQSKvs$k>VzvZ%4!1;_UBp*;G0yQJt*AH`!Tq@n197}&YH>9{vgF-vjh(Cc3` z#{cN2@!s#)+`s_q`p^WFLZQ+f=_4R;mx~$MC8LTS6PG2nPt1V*MVs<|m*OIz6NqVJyEH-*}t=&}LYO07#g^t0&*K0&9i)JKU)_BY^* zP$cN(KCfdGxW&bngON(tYX@+s^-Or2-SoFq`7YauxSHEF^-dR2`| z0%$U&s7FA1sou(WkT3oHPFNG7z*CR^km$=wSHo)j8Y35*Td2d$$5ock{ECm-=XyNlE;7ErxwgF8; z04HGmO^b{n;LEkZI_-8$a(^zpp4GCwTtpmn?I-ea{Ez~wcyzJw;tc&Z788oE>Oe30 z`pBa>cohcs}vqDy8ybe{$5ez7gdDKY@SohjXpJ1pS{u7?$dH_q`o}I4VD~#ggL;~u%(lh2ofOa7Q7Zj@P}k+bWCRy)OfG>P z7g@Liwq4lIw{%2yw0D!->ZV&Wa~7{_y36n{zgz6Lr#J_My<{cC?wvGD79wmHW;)LC zAI?}~J(z%4{z^>0hgB4&+suzBbZM1%1suA3-J0Qf>`c#uy04jB*F{_>D1`EgdZZWn z6eY25{~X2XBRQ|~c<2m+!`;>K**917PIe>DjgJ*pZ}oLF^llCV*ZU6da&D^BU?|`y zee2-!jm~~J#UUBpO@Es5Tui%ru)o`WxHd_b_B{885XH`<`O#j2>f3yRcc_w?C!4;E zx8j2GF5@O#QsDe$w8Sn&Z7*6B6Bm3l4?hD_tLyE2Y|}dOGXLWh*{G<}HzsZ8E(eWC zt!>gG0W~t1W$$Ebqq~)=ISnO*3XlU$S#!e|eB87oe3vCoXhZkRQqwEL@I-*^BXH|( zd1}BWCTP{9Oj-)JYs=H^#kTCjgS;i92h^b75#8&m0yk#9+nc+G`P0ailu=X6LNb4c zlk&E-bdSUWj6z7`cLlM*s0Czk{+#44QHV4Ql<8?{o)@st*11BY@%Cqdk>@Lt?hlQ3x~ z5*P}ZP-47?#!%xqB4c4NBVf*^)FVg*@=IY42FD^wQ(HZQ@#F z+rlzCS$QZSW`;yYAMWnC_O(iwca)ze+I?AZ<8_STKt8dfCf8bLl%r59T5Gn+->7*)cu>)X#LAVhisCmD~BUVB;$VN6~xCKgNK5&J#t79of%jNEVbm+;5OJm8h81PFH=@(VWO9Bw3)s zGTb05_~a)AC<#k&qSGt3R3@c=zO1SM%1(xLfA%XiEho?=k^mp6_GKpn%*1sjCwZu| zlA6evVa3(Q=CE&D`S47(#_qhd5Hqxp!QGH{dYXZz1y{eN2YjykS8uCpXCfyB5M%o>#W?$4*)F3l{XQ~*qtdHN4hxv*6;3nmSwvZ zma5LfjUDnE^l@dax{CJqtiKLlj2@I(DW99)eu^3!FK^I(J2RZ5YmZmI#DooVZ(4<5 z0|kBG3UV;^oEj-oJ1%b&B>NOdxQMA>Qg}Q&SCcUKx!HS}x3fUC-7+z;M^-6dpnSyY zk?5brW>e?@n8i~+=<2B-^xXY?Iw}F0>H~}n73~3L)+Rq|&hVJA=Y~++cZDX4ow~w+kwC|@niIR(>`$6(#;!=@p^%;;({VyAQgrMyR@~xyunH? z$z253CNV$|I&iQHa^?$Rjvtio79uz7=Z@+_BujTgi=E(X6(#p@N^9eigm4T4^AeS9(l)Z z)kmniJXHL$^+)LAJUH60#|Uk{PVU@p+&+lrRt*TeI2{7*T&YiQB9~vUaue~(lrJk; zF@I2G9RG?O-nkT!Jhe=>SopQzez(9V?Tg4TMdh)0#$Ce!@;`&4Rku!7`4pV{r{Fvt zV?PJyxn*QvV`K6BTOeFP+h&0Y!#%zFQSX|M+|Lh!R4EgsbdpV3LzR$GODJ_fT3Y(2^(}Xq`|ePSa0^JybKe?TjH0QS=p4^)~FmncfG7Vuo3nITO?H z42ix)+x?-M*YxzHtv#DL<+C}bG#_qW~O^v0S4H`vfkI|gA6 z5RTl}D`o~{e0nM;k5!!w$NHVmkA%LIL&x977c8H`n9sm-R*u@|R&l|tEb-l(8e`$} z54%sl)7H7Yj;BkVygoZyvnQf+^DH&Ya%1X#t>c(VZkGDd!pP)vLeo^(`@-^p*a>Ee z+fmT9w%)j#M;-j6!P}QH=QoUM;#H*mr_L!GAcNY0Q2sax$BmfB6W{ixKJ67fF<-9F zqckqJ?QjofoU%4$Lo%cr0oHBl2q*VCc)bB#m;6rWSpWMp^Xaq_Oc!8e`DZ84mCLdD z@#(vjr$+$cFB!&X$F9y}52O(&F-;q6(b z4RURQvE%Y@zP7O`+8tfxOUf1=W2M_rivH|i8HE|<>y|y&hH@?n1M_AK;P7_n&`Bz= zq|}%JNmR=}Q88rkyH=YWeNvy6EKvwW#>ln6)YMjINA!ed^^gR&A4S&gBRNZ7_eO%t zTXtOuzzIXK)BncuUnj%=4Nh2;)}r$#7{#ADL%2`Zrxo=}?C$G8TSJPXrJD zhd`!F+!~^|O1sy&6|;`FkUkM&D(C~!{CAfGyd{{gT%&a$4iQ~es95Ls+iqpu4RSb~ zA=P7igmeRn&cnSg*M~;Ps10`MK+useV&rpJv#L$1d-OvTfPDceEnXbk;jY*jCGI^2 z3VngspSio2EBoiRI})fs8KYBYf_*E5a`e2@nJg&C(|iT%ToNZM%b8^$v~=O?iR>)| z)a2A~wHCX$t!Qk}95J3+96AY%JI_9EoX|4R z;vnSbL;!mYTchV6xO9?e)rAE1Ek|$EBPsN96&FSU7jN8Uh}3-K)hK99NK7mQI0%=P z5%VpO6Xj}pQsbF##7E^5^q`DKeRGpKp~*;*y24yZwhUn0#&?&1JC;y*Q)(6!6Gu2N zz7!aoRA#N%I6IGPD z=9~JcL`jPT*>pxBm8GUaZAHgs?o|(>rj$`vLrtn-hY?*@ z@v{De=udjlZ|$h3C;Km_|0Wy#ss1Nj=C}IeQ$qf&{ug=X|GMd?ob#{oeA8-BKhw|u zrSMObW=Z~*ul}6qpNZ|+(Jz!9{;u{PY3@%uf7XM)?I08UbpIdK;hz@p|2V$Tuhr^i3reZM_!{9WyL^Y2dsf7V&Q4U`c6^!s<%{;x?t^Ll=b z=Loy}itw}YUo4-0KHGote4cfGMJ@L~bbqsc{+#}wREOVIwqgI8{=a7M^YWAUAomXX T=aNSQLj#j}@-|5RtoQ!_5I<4HD8JA#v!21JVuB-JR!<(%s#mNGT1{E!~Zh(nue=%OCW4pYVOY z_xcyt#omWA_srV&>@{mxGm0{>a8IBfM~M6?@bUVef&6e|VsESnvUdP8D?W(fJp2La zr`Q{LP!At86qGIu6cona#S9%BnA~h_-p02}!?IumANU_stS_1|QYcqy2hx+^cogVS zo0-o8Ig!)0C$1Uv_>o%uXqLp=djU--&eIXgkgQuFpH@H2DqGWdLKrJ^HWzkzO&GNX zk$Ke~yA-_K*U4m3+LCJwCN_wDW>+hI8gQHBu?Vt8LEVw1VYi8373%`3=v>>}*Nuu& z;l>({>d9K|-wNg6lP{^{6u51WZJ@jR4p20wxl6Y{=Lfw;C0%566@=Mb9rDOc%Bwf^ zE>(5dl9nE+dlI?q^;*Z@CRtyS7=XtiXRWv{;(yIjCS=$jAZlU7rZ)IKKVM_1t1fx5Fed(UWjTY%<0w+c{Ut0ivmroJb+kZLoCA?#+n1a^k~s@{?TCl)UYL_*#n@tfVjVnJ z-#uxrJZUnvP)mwy=oQm3aQs%azF56}A7X_$s<_Vo+Mh#9*zbIKteIbEupwJVyS{GD z_l%>SHa0Q$8;-?pOEx}VD}28W77=}@wJr6@iUrpU;J$;?mrdk@hQGPLdoZ7YjW`8i ztbdH;iB$#(8Fw%O743mTdfw&yZoBlwW{@6_ zu=x?s(#@E8U-+|8j-+xXwtCRyS#IZKxVSfvhMX*9l<0q7Chj(QQ>qN~e9E6qxNvTj z<-Z9*5N~6vRkIbapjLLkLMW-4&scYy$W66jj@-l;$Xhmm)Qj}7Ba&OMHPwJJ}Z-ATl+79lyt&-Py1)cbT8ua;jR#_CDsdyy1km zH*FhaZG+BJ9U^bf^JR&66-pUtDSY)}q}X*iY7+qet|-6QyVo_^xw_cUlf`AA!Z^^e zOXHJCL{Scpb|AxM^;{r71&_j*E2pq}h|gR_@$lVbz{}Z@D8>zM3s<9SatTKuIeF_% zfr4b$p*`o8XVD;K75XEs{~lFfA82*6`590CT>$NufU7;o8f;-|>hyc;8G|4a5KgyqpuNoxIe^8kz%ye%Q5W{HS3YEA~kFyd@@Ei#M7Oae<2>^RY+ywW`V zCGr{#?F1ZvtmWl~h(2`TnRQ(zuN}(s7n~UW*=oT#Orv?!@*IEq0r*lc%b=m z0$%L;o0Fr?#^qHh5~#$Wr)j7C!iApSxmo#v()q*SK8F_@6!}l|yBFgcpa=;*vOB&g z<8xIWU{z)<>GI%qBdWr1;phJlTNp126v6FbMrTOjm!i+oFBL(SqM z?nkwyzTm?L{i1m);46U%+vm6>sMG=L#M0c3J%n_b;=(yGBxPD zIE|IcSdaFKyFr45K3z}bT8qem_ETg$&Wi?3zxx|Q{9*JoVa?@2xz*6# znP;ta0`;AHEh71%Yi?GBa3~radq07)Og-@~&u>Dp8?$}3q*#*H^amJh{H<}RJ3l1G*TD1#Jb-`@MV6nzPv$6>^ zl88k5I#o92zGkQF$S2Cs7z)V=W7vm*b^S*Y*J21eKCEHhECgLK^haT_8N8km2;InmUJaegE|3 z=7whQC%*hH%A5&KA^Q=a_8Hdox}ED~jOkoMZU#PwF8*04 zO!#_FhrHToc<`hZKUBxYGXNO0)WLqUxA6ZAdGoxU&{+@5NeTV`Tu!V%ms5(aeFgw0 z_<#l?M7G4-m1jLiFZH#)h|@Bm$V-oJnX15-z(wTdz%^3J#ij^tX?^YccYZ|U&&%Bq zu%@WQc!7?Zj0nwZtT6f{O+85R`esZBx;m9|x;g=~33c+i7%iyj%@4crfek50&={sl z!I${Gnlk%UjeHL!5Jy~1!E&D(C-wAU-E4P}9o%SR!T^Q*hsnYEb$2nFpbRrv)P{wP z!upi$Y@DQ8F+wE=)VpFYz2et3n>H#fB`b_NyM?4*R$Bx>WfIH?cS-JZlGJr?;s;o3 zOHs>@d0Sn|s$>y^^ax7gxfDXKVR6b@EJ5tf66!Ed7_I$@s%Q= zL4<-0kyBZaV9h-C!v{BW0JVG3Nv=T-ZSwjGrEIPcF`PFHnIQJz0X8H%gCj;RF^o|N zC%u2w_1*SeyiP*Gxm<0QXzRSS#djl+FopY=m|ht3D(w?)Ln$m+X;Wy`6*hV>Tc?!D zvH4|drfxeAq@ien8Gguqj>BAGM~mIKR*Std%0RGv7BIQO2I-lswfvr*AqKQJ10WP0 zEoy>AD7F;+-sp_)ig^a^%6SaFv5@*u7Sv*tZ7%cF>umZwRTYg_EH z0n;nMe{MI(@vX)2e~N7Iu)P^8Au#mxBX4g9dPnwZuytI*yz&poJ|rR@-CjUqSHxG- zNt8pnB*K-Ric)IrpjFmM)IBm*`p*XyMYFNVRW83J#wov!iq#x{BflKgrCiS-!ZEmJv(n`4nuBVYe83zSydH=bJx}zK~G&*wz01mu7>YbB)9W-5K?Z^n)(- z#l2%`v7nib!AmFBkWW^7i|zO0mHT>voXVYog*Oc$Ek(W;t=n)z+H_~z=={cepF-r> zGty4X+|GXHG5@}wKBn;x8?KXusjca6Y5e6q5k?dO6jbW-U+K=DVn2m{?xGOQCHvk(L=E!o=Z8YH4r}AI+g=E`(pdl!-Gd zZBnx}Wk(^q;Z|tUEmXH+Y6be3%5R7le=Xut)?`qEt&FMRxz#eQscqO>M(tbO1z&1e zS1sr{A0n6>6@xGLgLRn~d;yYl1FpvEq4l^%XujxNxw{FuXsxTx44UUg3rErSy6Y#^|0ecX=<4`u=jgyu zW$2HyCd5&n`)VR20``Qh?#&nw;IiyBAC2izmOymnn*|5!=-6c<_DawxQp3ss!WTy%9(IqX4vN((@p45><%V?V= z-C~8%WfpqyC>J!2iX%F*;q?NM7lUqfj(hdBY*O#7%!IdRT8XhFhIE6CgJ7|+gHDM^ zv6XWc7^R7u_7(LV`X!z$tdJl%-mGVKF$jd z8QD)W?9i)&h)u5tJ1Cbm-izo{PJ6i#ZZh(0#*@#XyOQwl(2&*&*r=3~OBEZWBISUFf*e5uz1#t#AuOSbp<+3kxk5Z?S3CxZ^9xv5L_8#$DYEvj5-LG07&K#b z>H>09v2@$OoIn|F=JXZiIYRW7&y^pC8wEpV2FO3nt-RuE&Izen6PNFi#7$+h?XeKU z=BBGkLZMR{gUF?-)+o|!sBz?^<)GHbdPc z9_mw^U$~|PM;vu%HcAG&Nh*_CwrqN-aL5lBnaX39hM*#Nx$yT`!P}wAoio{>`fVybH-^POq-MaW*56gQWWAm#gbjVW+w0wUb<+! zKTkt5z~Hhs4~nm`j5-(dNOgQR2-BADCOuhMP)YQ(V+ES9B5bB}*_*iN{b;Oo{Sg3H z_;cG?W^HX6C<2`B)GfmjP_>pyO)fuJDnHJU!1xU(PY2;d4FlcjWzqtz>l;`~%F;y|tU#RUt&(f5XTQ3(a z&I{m(6l7S%CqoDD5&G#q}9l4VYiv zV!WI+=t!)tMzvT|_-E!y)D_hx^04Ps$wNV*{@UcgPVP3Q;Ky|JtB!Wed=IWS^VkpI zm<4J0zI5}Jh*|Z%T&^u-^XuG9of$> z8CB;?io(}i1K#bDR(~PYt>a2BVvXeWE?kBzfKNXR zVLStbM>DC@ckXAiZ9U}*pzIB?zZT}+5_KRXQ3;mFp4>)_8*3}x`fAm}x>euW*z!FF z;hc<+e!*Z}g7K>?6Ww~ow1pLf-pr1fTPTtQh~T z8q{O-rK5o7;aXv;N06Oum#{G|eIYW$=Jd33w^BC!c$9`nz=XJBX~x$?pFRJv>!g<_ zZ`mgyqxccy5!zW-$=7LDcSOeY?2Yr(NKEaJPvncqIfSwd*LmMTASY;8hp;5 ztA)-IC+4UcD^*uFt0^8E4p$R54jOKu{U}cR4ogoFr@geuRzJ@e1&34E@I*x5+vs6z zj^#Q?-UD~zHG}Q*>@*o&dGRM@97=;CA6pHkzda=@^gw;?^#ok5R_y_kir+}lj#KS; zl{%;=?r1PVUtP}Wf~DPk$uE&&Xu)>AIUq{9c&xTTC7{Ho5-re z^fa5*QGl6F5*79`(8}t}tjaPiI2a|z>rK_}MW!)g_!e)g&PryVwS$%q zt4sBKa?mZ4BHnkVO>0!on#d2T)9v5sgFgZ9hNi_m?6+G9m#uQutf$yzxN34f$$Qp7 zTs(MMr|?5kc3*zS9g12Ntj4;FQr(U*E}cK57(<5v~R5AKy?~7fu%8M^oM(iiM+zOwMEuf*?3QHe7l!WP&9JU6Q`oI2%g=P&p8 zM9P|;lSFWA!)A}f6Xr?24hIU3O>k2p^=P+P0>^8NkMwcSZbzb+n%(KpQXDyD%j)Ul zIY^cD)*5mk3S9-MoU>*oRZ4E5M0h>3%Q8ohtBY-Jir&~eqRcx7G*iN!F~(zV)t0$KxeJ~vOpO?82bHd5~9 zHf=);o&}@>ZlHDB+skLwnB<@)3+j3lEHuqlf&GuN-)~=O!xZ=!2py1qIt|HfZ^fQ- zLx-udY~Z9YD2%G;8?}L(XYmF-M`;`G@_?G6=rSqq)k>u|rvwgDpwl*lI{$wwz+Y|e<+r%#JN|E6U%5ZExXYFKOoivj0FT=9Lz z7mdz%MHAT=_UUVId?NQc9)R2N8OZAi2^fH~lFajLpP}XuYRd?xy`-6wsYSuD04CAe zj71tLvC!K8Q}Cf4TS5bt7LXu#ji*J<1oY_&xJJJfpWc_xU|_rGq!^tDUzKif6iIRoB9rBJ7;?q4HHeIE{v(v>d95kWgqTSgAfOfwVH)y^Kl-sf%bCl*= zJd8k^XjqSJPs1YQ~zmrmKwT;=47ZEyFE1 z5{-=nzh}ZEU4*3V72qf@Xz2Ya+x|Gr;ukW8J-nhw{br%3A{Vx)m*Bw*=GONnT{*5@n;Mhrij zZl|pTGobnS`GH#Y2l=eU=S%JwGViaWq=08=agw{#wLMs|0B+=FJ|RXxtH;f3Lem=h zqR@{^$`LV@6@ac=r?b|C&K5-xP=gX-(J$T3^meIgMoR^yV&0jqthwP65#hTuBKHL@ zcoVPeQj1HIs8o={5Af#g;$**leCV=ynXEKn=cbS6lP&rCdnFqtZ@7WL!zBlOq}gkKHC(y8aa%Zm~?P4!BpPzq~2&_vUUQp zh1ixV3CE$lh{(RYG!qE#jwNxFv*E<~56s}k@^HH)>8{Hsngt zWfbxu)4!8p#WToC?6Oa6k^dZ--NDB90%mGZbmac_cF&uFLK)F)7AvlQv+jk@8$jz# z)6v`c1clGiCSvEl?O3xz45%IKG7*tQQXbJ%!&L?m)&A2t)Go0lth)hyOh82nzN^jc z^{F359*#l7*$fcqHAIE@8!@bHWtgm`Hy5*O5@Df|;p7x~^3wn9K@0{DWYgdi@fVpDBG_UCO?1z3I}vg>VNsYN-l zKB*-1aCHC&C1@(KBR$Pqla0b$&Jr)NJ|T}|%hsQ7qBUU~&05^VT8?mC*7acq+Sc5C zHr~kjUSIrduiQvomFHnUzmfmUcAT@@pTd|#{5ed&$+v#8X%S?PfN7VLUug`&b6Mhv zUc~Rn;5^hP2(pv8>t2-aoLi_mi!yWm*kDK~Z`)Y}*|YmHbUw0QW~+K;b(0c1I#%AG zD>yZjrtkE;egS}waA#44Vh;y@*E;WP<}*25q;XWy@#q}QeFJ*V_>db{RC)U0Se9P~ax@;TBY1htKDz&pGhr!$mVLxOa>x`y& zN=ysZ?`ec+r%w6Bo>4TcU)`NF-;x?lk8}e0IwKQ8dD{whfSq3=JVmt8xNW{nyZZLP z=LkNb2q%s;LbKZ62_J44GhzCUW`TmKjR7i;dev2|6j`VeP5F$1{MD2{zZw2jbJQm! zSc{$OXHPM+fhReEPY_e*fiko_a)*mBsckhpjE_|m2Ez1F7pPBOe*w@~@%hR%vw-(-uU z<0LiOzrJfcJ9Es6LYUnYn<7?=q}W3{abPbK_JI0#t#4Fcd1; z7^M^Js#@v~Rl^2ywL8pN`Rt7ICD*rO9bJR(GQl>aSzx>5ItjYIm-vG<16yu5N-#xV zaMf=j@7);u38<%7R9UidO-@l6T6DectNATXj!Vu^grQB@=D4SsI>wSwCCwxn;e+^U zIOBN&%}D2_pdNP94AXrTy zb5)Kw%n%Pvrvxj^q%(wcU}m&{;$)_ zhtoe31w6+KhgOfE`w+kdVGU_wr6Y5G#k9)}tbeq)8g{>|(Cq~=e+lk0k2pP; zgQxCGG;Fhw&o}a3MtPiWu$uAyBKpBaXHk9^YlFj-v_`ux=iy@z#HnWRrq!F&_ZSAL zK@gy{4nKjzP-nuF3hy2xwIPuCEpOLiW#7zJdos=Z`;p00;oc<@MF#$_*{m4oUj+)* zxFwI57PHIdv9exWjpuHnV5VnAX|y;dZpPuy&yYRWNW>;b@FLi-dyP-Rm$o6xvR!jI z&$y=P5(vJgI&(6!etMPsRG<7^ANlc+BU7A>4DS`8?D;5Qvwy4mg4rADpL;|51?5w_ zhwzgG|LYiC`<1<&lc}APzKXkpDOmS01eGQZ+I0Xh#4eJq(c|h=jSQ4jas9+d2cH$5 z!s>X4Fsz2~2X`#FV!g*ogi)Fi1?@F#j+_~D>!s0aiU1)tBiEWS)CT#l=SD#1JYI67 z8vaTe)b!@$=GH(?l7+>mAFa_-6>GXPlUS}LMwF5b;LJt>^3yutDJf7pBR$ABjSxJ? zb{D|gHgL};HLNSf4+)-pDlj^(%vpL)15IzzKWSz-Jdk$SI-x8I8c0ziR-9lY&mAyB zO`cmLo;A3o&3<=9T2bop(ZXLXR#r6Bz9Sa3EHe{sGcF-}uX+G8ql~s1ZbAb;oGhTx z6rTQ!3YpyM^2{@yQP=nUP*>d9*?JWwmkpAJh&m{~A#z!?su2#gLy5o}H&pY0LqhrZ@xO`LmcbNg!XO%`~cZ461b#t=D#DzhQQyN zMZ~&fSv9)0*yrt+W7=&SJA4P;UoH>l@?JwL%0R>5{M@F0wJZJZpobS43L1*+;Wq~* z6x6@C>z9ImuctglpkL#$^C^k!uXyxNqrXR_N6asy4S!;OuAu*A>~V?y8jr>v$KN`# z{%P;`o~%dVU-oGJ4*R1+>vxKNZ#4P~9sBTR|7r9;ZAZVue{Y=m3;yFFApZsbvyJ9| zJ@iA&`C~jjv>M#c@bkX_|72-}{BQB<_lf=<*d7i2VhM@jZ?OLgbHD5PJs{YtoNBKEKAJhh2Yp_!0bP$In0C?caNT9+NfC~V^>Py<& zxmen{7;AbuSUMZBdf0*}ir`_N6#!tN{!xQskfMkZCYj~YFhY# z(oa7SRGh;ZcvBGgjha8Z_oYXytdtiAme`rm=5<_oY-MhG*eW#yMJ#t^T~v`X^~u#W zXMZ~Iy){^CfK7IgCps>8MIy#SZfJ~NmJQHVZ5_)JJGSr8}~<^#jic;Rz=#Xic*Sf12~ArB#+;=w+8Q|U3E)>XQy82 z1^sZcs({5014@{}B~(}Z(0f_9ns*oAk0Fzn{unC0d}g_c%Z~^dO59t6nVLFNNVJS2 zC7l}v7~NjIo-v<{jVM@CFTv>H>r*+DBz5tppFt{7j&tzBzpPn)l^z&EL5IFRvF!To z9hntMj-lI|-56Nc$~FVDAD5uJ8pUw_DM{CJC=ekKIDqQkV2W$hYY7X5={gjJs8E<1 zJ6VF9*;s$>{|nFm$C&)fqgN*>DZp`Hg&hY$D93vQR~V^gL2S}{N)`_=9GMR$yqO6l zoex(s;x2`)7q1$NJ&Lis-Eh*Rk%Mwx&2?!HC_J>cBVi{y$;2MK7zm^S zRqj_^Jdb7kTDW*25>>rb6v9di2_SNn)dmL%cNkdl>83gn>7C1CR?-@zekBWACsv){ z0#CjG3Od6TiClNzbo1~k)meS;vLAg*&6H3oHJR}8I$=rT`x$qUcHvu^{(8T$ZxLg6 zROWEx^m-5Zd&f32>gqDIp;>UbJ2wY>2+iFk($2X4pEG5AcG4pXmLb~mHIg5aZlbiMj83>~`WrWjs8GVptVUZ3N)njlwY2o&Z11$Cbz?h$g?#jg z#>~3P8hO0 zgfzD;K5vEX6}hiRk8RRNR-{+ZVkR{B5!x9rt&Ma`;}6m&dYWqDtrvVo)sa?Er|8@+ zOM9*MriDLgkN8PGa-XcY+(yAYi zg^DYLa(#L*Bphv~Iyo%W#MMWrK9PIv!;MTIpgmqeT3QJ&_e3x7qu1U$#wwmm3$Xam zFv~-kY0$tL46?YubdnIw)Q_<8)R_oQ2`j#ITAkTyxrtqu6*I<7%CfIQlu46yFCRGb zv1u3G9+eZnXg)$DlW9KDHWZ+deLT7`mjg5a-8;L~1_E}g&WWx4WsL%nH@fzCzvHJ6 zW9EG~2)X{|y`{+cn(uU6oCjUeJ>l&u_H)?h;7fMY1MJJ(b0iw-d-mNDwW>S|G64xz zb}zH6#KXy;!+KLN%&>bGB%>2DeE<@58Mx*1HgTcGbefhlzkB~Z$exM|NKw{SJX6Xo z+$d2arnK1BUz~jx-1rsc#7xkk`8>4PQF;%kvb;IEVg7vw7=MAG>J5UeZ{_{2{hh%u zp;VJlJ(5nx;k-r0(5B{8m5r_zrCP%qvW)u%QTa5O_u#CjZI1JuJ`262A2r%)3m)R4 z8|+~sulnithIeqcMY+nCVjP@lhDS@&E!!qZSw;jVb4p2(nTy5aG3Kwo56^*8hM%Y! zC$dy6^7i;|uKGSGjhqF$qh+x3(e;rG_+At~)}lMp=p3Z3efv_X<#IrZH`qEZj6Amd@ z1b5l7e5E>nRfV-PvUgZ^MX+0mTj5~^^3?;0&{uBCWs-c-CC4Xsb!zgwCvQzu_|>k! zNE1!$)K$E_{r0=#GXKN0dOtl?)OJMvgN!yei0v>0N^$>*X8DRz)1Nq(g(8|50EB^} z`40~KE2jU=hcM7^6-t)>zqjtB3F{$tw2~1ieM$OsF%8!l$M~x|{_`y|YS%S}XN{!roy*yiEht7;Dmqsb5iQRXUL=iWDfM508jD6Pq&y*J5@`zudXWjd{mi zkYyE>tA^#iLp5WRHL zhI~i;C(D6+Y=g;zS`8x#06+vaiGT5c^BYS`7iYF#2acbFkdwR;w?YBsPo@hp<|FeM z=fzn3*II{+-`BJbTYKm{NQ(m;14*^D)_crB^h|H%i(_%Z0wBlvfu~!WFYM$5B}H=2lp@5Q~`WKLYBXl{OBEh=2`?h zVF)5FcP!)5c8>Qy4C@?*Wea-2ltnihW6f$ai_PhcI+*en@5EwAS@KXY0s$<%bIiEZ z9#{%y;hQ*g`xFy0gHE-eE(aklpqZueUi&!wqh+8o9yB2B(tNFS%1aI!xD8EC8z6oy z|CBn@jo&y;w9I)79O?2BqC~_~NO0NM)AyXw*H|9pW%l;<;&pEQ67m9h`h;8K`_bbP zNDOb+Lhqs;e+u{q{M#rK&yHUQ8E%qB5 z(BaQaHa)E3_d)Ea5Gv)2E7SE|5qWuf3$JXlZYIEy-D))O41Sx)YNlhyRz~cx5Osmk0X}M@WLUD@$Z6|xYAe+^7MM2&ItP+m zkUMlNQW0TVO|stF@B&{urr#+>n#uCa5X&ZCqd`{F?h6alM)e+JevkzbXp7CiP{4@SiZPi{N-x55@EVG_d-MI1C7Ezwh4;PTeuS=qvv_IG+=fbht}>CMQ6EJSBTFcZFJ`t0o*`emMd71nz9g&9B*f4C&M1>;awqhYgA;qloHeLv35$tYoxt~d|;A*!; zWXRJFmIkXANuLTmUpTE8=>D{XPiS#izq5EN$h&$QNzW46w6;Jg&bcz|ll2&YPDJQE zYxVfrw2^7Ygkc+wT=fPbF;;t3eGk}&;JP)1gZG`l656y6$`E>F1P8!#6CJ#isNHn8-~27Rlu!6)k7&r!ju&QXZ-lMV!D9Q)F}1%93Q8 zlye;p)6zhjYMdJR(>Ojk{pst+oiRR3dL)sKDLi43G1UpjfU-iP?(0!37ytMZ6xNOuyf^I)%K&*wOC-4B^g(n1sUN3g#jPeyyT}Zua8z zBzE%RO)5Xdq!@-GVv0r!$b4P{{;b`9!xf~%2El|>jg=p0d zg*ZP|O~oBVuQHebrn5mVJ}?d?)Q_cxQW#>Hz0mzCKX{^_B_ zZxwd(==qBQE!&sxNw!&!;}jzotw#K2V1OQifEEKlb2QbyceOZB7b^N^bHH%1h#tKmmvVKrQqtF7&>j%!zsxXoHO5o?+gGn_ zkB7{YQeHgB;?Z6n*snpZc6yeg(~oG-4sj_NR7k|X`tXaj4F?)xYdIha^2VL488ic`Z{yJAHFwX zj}D_Jcxv`z&9fB?Y#`-tBmj-GcDJroYn{?_G(b4z8*593*=jd!rU~Q;*!O-pWvh&z z#K6kiGK^OaLNh z^_!@VeAIBH66|dbv$%LRh#s*U1GrsyV;!^;sH3XWirhh%&(R_|imz^$+UoL!#i3u3 z?yK{YHO%m<{oe*~`37SqBjA>RCF&cpYegwcsb(=X2oSn%`+Fl5)5cDdWezkjI;yx=z4~cWZm*deEsP*-!iQ znM-sLU8zyBi`5iz$x~=#Y@UacZA*_K}$M(-)gV zvW?NW+FaLK)n@q#-sac@jv{XI=PY~=C}Cb-UGI2E=vmdD37pS# zNAa^!@!r(qZ_}KODbBS=JcwaXN^vZ2jv=k@*oEyKZy@Ecx?CyAle#}O2HH)($F?G% zxE+1r;p3Ujbjd@nWDd|$)7RI~EgCZiRXwb6lLZ?PvU8s;*!@^jt_d;zy) zx?GZhnP_Ffx&(tG-4pH(iG8myaSVK=w7Lnm(QYrJo={U~Cdbi?wTF1lFlTq9krvv@ zXrk0~W%Af~VKk&lnzc;axp{W**(;A`e0$FM{4ivukP9Q@>0nDc($v*uJ*>|;Igl>X&Huv zM5Pk5ISKKO8aXU8cW_Ule+A+zVI~An2?T*5O^1@`k%yr#uGVJML`*`<#myA_*_%kr zNdD#pb_3xRrfPib5G&%!>%cm?nl)nLlXCR^6daWc8qgW;8f8(9$o zXcWI@A#{}3jM@}m;>=!bxQvRKh8?>zCI7rgwC zkCP*GXI3k4t7MA=AC5##+0Gu)H=Dr1PH>@AE;g8us-k}tgQ%l2e-(amim}3&tcfARgOKwD0SX<5WBtdBV z>{%xG74_w7ItV@nhs4lLdoYA%$KL-$&2~QG5N#apLvoKGT{4vq(nNwIisOR7!?FvqbY4G1Lm9i{#qTA*0 z^G_6zjA4|tP;O7+8fMbl9Q<-oRnEzzJVls743E_qbvlsYbkM2QS`eg(R9S+fjq(0l^ff4QQVDfEht?>-16}6Ni=qG|czB3K5k$F;-<)-HLM? z%lhz2F3j4$08Vp1HhI`!{m{fO{btQJ0<#j4M4+ z+=^psFL1RFUnB~xQYdFj3f-_U@MEco55v4{<}$6SM-NkErHzX;pRUgVomy%8?E3(h zgpOgV$b!STm8Zu35BCcPdRT^mTZjEd>&wJFp9B$t5A=&|sI9g=^U8vN!#Xv^Ymc?E z1Y49c-gj0R+G44Wy-L0&O=w{>L4wxhX$*?fUOo+slp{D}6%(3G$BC=XO4@!{ZW!&c zgEUzTxso?_Qf;@br8Ha3>|**&Hv@jLjGOMIF@a2ZQvB4;w8(ANw#wB=V)Vs1`71aO z)zAI4s5I$R_&Z$j99*bXXRm-#3xfo8xw`kPdeN(aWMc1C!lhjs!0X#wRFdA2#_cM=`hFUno;~E|Jh9Zdt37M?+&YMgE2?KkjFAVziCk`w?RlWxy8gulP?bGx|2=4hi2~nGyj(%xk`}; zy}~N?i$?@@Ue#-_hHzb&ulKc@ekub6_Vq z?MQlqg97RkWK+0(+u!NvuLX!Pj#GW!iMeK{#nBE1BdEwDxUeRRfEZHSfur@(X3RPs z5*gaW21B~vRJjrr;rkOo*hO1BPRusw;0#Wn#G2_?_@n?lnM}NZg$*Jpkw+3@9?Iox zh{p>A^095>h0=riTKSL&6dcA?1v$hD!uc^gtAYCyx@7r1eGUf8F{z;ZaodQ{z6$+D zkBVy15A$R=9nl&lUG#h`uj2HnbzPp|ETYf1`EM z%Xi!lL{$rcx$7TaHPBgEJ!d37LYdxBw3S_!!1@w)LbE_~5PtpOq*j;-oiiZ6~zdm*_qur`(ENH4CD^4&+^*cR9y2 z*|wTw!hx<@#m-W=K~&R4iK#|k_eyg{=$|>|*^KVXNXE5pOjq-XjD?sMH8@z3z%A%( z6p78oAtx8NT!on)3=!kG%Q@^(u#!}@W9oDbgheCu!U|DZMB#g|cI>vp4Zor&5>}6b zu_Cu!g)8Y(4Te1=D@6ty8)0g9h$4Aee$h-_&#IpjIm%!GE0caE(Lo<>wN2(ZG!MDQ zTW4XdyVKg1cQ-^9lm4VKk!u{nn2!Ix$@cW|^8WNk*5YL1L|WyGHlF%qN#_6k!Y2F zG`@D=+oUY0@litk2i9MW&(y);zqSXRvVUzkN&VITovvws zy9E0~UMk}dH&&Y?gQV8W;5ic>n{%2GPd_S0g*^r4`0tVhdpPvyJ>1P`rC$}=q75hd z^m6B0nh+x(>c%f|B~kD#^V<+}lYG@UR!Jx5^p?LFjQUmWAd==e*Vp#ZYX0ynV8vQ~ zJJB~>q9vJ(h#s0j>pf*d5`Dl#19C)}5o_LvY|zvHbYP=HA9Z_toR8_>3%NU0kXz_l z>OIiEYk4Ri@rEOmG$)yMtY@b&&~?hFt$HHmh3+vmz3IlMQEjsQW~iM+vI5gfthcL~ z9BDRS=iPDBjechZp(#p;%03y!ybl7lf?wj`Ehe06e|BswI=^wCvDwWRPlo0ZhZVza z5s@cfpE~*Nt|^Z0t}MhuSLQ$YFdlxNoDpiz7*J;l?c4f`Gj(-#vA6xNN&nlR0f3Uk zDVtz+qOjxO2h1ez@jAVha_QpGhC#%AFT&Uw6C92P{U>+p>5ZVex_w4( zwJ_Gy6iYubA`Ff6;a1Mr)?G4qtl62s3z^%@F9d5-A<&!l33THS+XErz!{tk1lsQFH^6&`cliUj;lY5em1P|aeUYsdBmRd`b$mRW!-yi z-q(UnD|s?y*|f$d$)Ds_+88{T;Ed8>FeqxwFp%jGVqTI;keVu@j`2Dg^}yK+r8Asp zvaFs9_BvM=8=`MVH)w>BQO8gZN73qQ;!iA5S@4(5(|y4n^$eIgPxl+Nj zvk>HM&A2OEjriwY_+9w#wc;P2vpC-1+C u?@|3l{9jc5yY$~(RRIBNWB>pf^n(PoQ<7&tfBg@kZOa+} literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm35X1TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/FeaturesForm35X1TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e98709e064a229f255c1a8364caefd6ddee35fd1 GIT binary patch literal 11071 zcmeHNgqnrAVPjOQAq1#r;cn z@4dU*-S02B_vFbrC(oI8lKjrRGjnD}Ssn@bApjKs1ONckfQrn@4-NPbKxTrC`2jnusyEnE!PJnikMijff?7XlFB^8efZi&tPUbP6|%-Zm@2R8&qE_Y?0R#UL_ z$<{UJyx;e`(qC&pOmUPWJ}i7mD#}Y?V1!+s1JG7(g=Rlx3iFvz;Wb9l6bUTJ%SzCs z^Nw?&2-S}i_%2rGG4{#>U7uO4x?c(^of-8?c4#(R1R_gAY(50#tv{{G0`^-m;U)b@ zQ+uO7nkONdC4fpw{ym(7_|VnLw4aTBD(*OfnXb&6K=uLA>cr1CTF!o-%3EjI84Q11tmcGeIkCy(Wm zEaJ(?W`_ZWSLc?~W)pFdg=?y%I6eG*N(T~Tt^thGXr+qrj@|@kHOntEfrf>S=%q>H z;WRaJwy<+yXZyMTA3gtzIr*o*{yG^fkHm=^ei(dD{jNuFg_&l?j$LvGY<`QtnRRQ- zmz7xBd3!D;=33NB;hkIOk?)mt`m(Xavjo@29WPxHJvjH}Y?tPM{B3(X+Jh8lsknWa zfgl>Ys=ew{?l|VpMT@5*(XTg)L)qx>1BuY!3{A)Y1znJeMJ~E8yLtJ*b=G6v5ZEhPmc+6b6Nx$(iA&;NkDnH67QLeDulFC_ zjU2tEF+-wY)V(d(IkcTtRh6O-%SOuEzTD?WY3?qSbioh!kR|2&g`=AbRIcs74l6$A zY!Eh^(3<4Kn^4+ihK;7iitS;kOd6)58G+*jFSxV%_K*)XnP>cK>Yh|ooG|oa zyxUTc$cR_Nx`(T>y+WE-0NOhARsUhPKgCkOnuV2>p4@C_;j4`LO@+PH<9v_6%m%+6$K>^hS3S=tRGteDg+RVI%M$Xk+Q32k7RwQ?gv{Ep0{wp}r} zFg4T2q2Mp91YT+lx*lS5ES0DiHZUz4(wb2vbS;(3nb*o}RRp1)oAmD?_R1?&KX!g} z5GISHC7y*}EJzLT1yc4;wXdZ0xi+g0xiF<_?{EVTTniI^FfLMmDn!oNBFQC$xzPE1 z4u_I6Kk~)XsE;Ao4|#AiHVu@io|i)&x;Ezth!}4fA;L6lyjJWaG^pvF8RgJe)|5@l zC)95;H3u0#Ua)(o^U|*MSB=@f&po=}5nh`2i`kMXq)%;s$^YUr^G;tR7S>1O_Wkc!%5)-3d;siNH zM^_diCAvSxZ}Mn%8*c6+7_1%SHboyjt5`iANd}lcvUl^Sd4)2Wu}d&_m)?tr-{&z6 znUjC~R3PBB%cG=`LkC{+VW?|hnGUb0AqP+;*OYRD9~we;5@C{j6KHOZ`#G4`dnv_E zJi!h`EX*~&^U{`@-^Q~c;)wj5()(9p#-Ivm4 zwlH^0@SUkxk0Q`TKn9;I=p-o6Ipvc3B>c1Uu91=z%X$%3DILnRW0dkC66Jn5Dyx0{ z#uK6LWLdm>mL4fF4#jmx{b%tGs!-MYvjBm$0ZF4q{Jf@Xd~!x3OOGaezq&Gy1kh6D z#1X6P*6i(8PR_+)*RIhDeQp8a973%aj^1|OK|s#Yn}1}pTxFTbPo7J|8BGEJBEZ@F zdkp+Dr~e%f5#Z@6JXrpBZ{5k`HiH~kp@(6;A=5oh$#=@5&wQA|dRkY|I2!OGz;$b-9xRDIGb2(?C1;g-MN$Z>{vW2_z9ETuQ zroM)aop*B4R#C~kOO&RPU)4AZ8j`B6N5*3zQYfD>JR;^oV#X3u3+j~A*}lw+ee<+1 z+d4W=1=nMnWY8ZAb_ucn$YT(f(Cbe+b@T`m7KNEo82_X(*!sqhPzMpkE5ArTWdk~b zr1L_=iA;;GT)qQY?S}iEDOa2AK;ry^am*2Qk!P>C_1NiMnwYT?{Jvf_u<(pOKXcZ+ z|BCrfao~9hLUAeFY9JT@05RMo{uKvYtSl^CUD$s+aQ+MkxhX60D^&3K$#P20`pqoX zWigJxQsaR6>zc+vYY&4bSxKN%5SgaN$DR-nOs;aqsw9+p{r=k0xZ9K8hTx$8nf2G) zdVcB$a{~_>*FJr^9g0~Eic#^CQZ-sN!Ei9gx5Xz$}@_A`>R^EQ2DxpR5v?@E3 zEu1Ug*SXo~BV7-W5MW^$KAy<05{3E+@8`1=f)RuTy7NE|)vYCO7Apdi4^snpzLvB4 zrlklxTIkJ&S|;XZ&PFZqc%ql!#+sE{cp@|$UNo>2hLo}P zzL5xC6o9xM4tiTN4piGn5`*%rgg|9lbe_~T$XitXYV9z>ZGka|9E72S{ z#a;KB+7?|<8+>Ob}khd zHfn%!|#|TKEBnAIKII za$_a7?}CA9sQ?jK4F(nr$QZZNJl1Q-Epl@f2*Cx99lH8+7T#&l%BFv`7xAyYAT4-{ znnRht*VWrCtd{_04&f$D0r!=M3>DVcU)+qZbEYXouyTfUi zVms(kIqt#F(6cIbcI}70-Cf7r``5^F2^cA&_Lx6+MbHA?X<}qruwTk*YIA9VYn%$r znuA<|NKYvoI~Hk(LDmy&SGIgWOQ(!$g(y>L-f0r)lnbo;)%2U9LKT?qUF;9?U}Cki zof474=nl!VU71t7uJjk5#)zs?J<=ijl{xY>D8Xw4P;EWm9=D2H4Dbbn$4du7yV4(NI@yhEw~oY9P4^o01h7-8JcRF9)wO|RUm zuQG@8Ea8jB91sH~TIS zo0!OF#`@0Eq>*LYm}v`%LizGue6;rb^$lR}9^btwVrb8KNL-WtR`FgAG{Wj`%|34G zq3*w9r7i2bkxAgBoN+?UGJN^OqQr!;5QNSWV4hMjQrU9ceiZAk`odG0s+bEnVuEg_ zTveK4n|h*!CW#+przF(saUxs3P9)7-aVZ|wpi$6>0hUE`Z9B8kQlhd1_p#3@C4Phz zSMVmRqkMe`m2KSF`|Upd&a`xU#R1WWl5OIhfU#IAN+$40LsA*<5fO=;s0XARxF(oU zct|PG^GQKYK=~A6;IYUXQC53)SPt`73pJey;OX-BZ1HDhC@@)Q-g{qX|GsVYTRl@5 z$i#3?Bd2xJTBz5eeF}7<9U-Yfu~%gmz`)MOAfLY&2mAVrDZ<47L?j#`ZziJe-};=$ z9U{g^>M(x~(IbIG^RLxgyTAFS-?Z|6hm3ntV1_@hq}x|pfCEsP<-=pGkWEGmm=W^& z_Zh2DHV*?B2Mb`GP5~xKVL(F-6r+HcI`VC!ZftoQq zRHJq<)P+(x4IheKtv?RTV81^dV;)SbA59CRGQc&J(f%w4{jQfR93YN`Uajv1oI#`h z33`ES9f~V4z^ug(>?$5fZIZ@9Af`(_n3%}iX~S7tN%)&|OQb61PwC$0bgD6rTSVdF zPm1S$6R##zv4M-%k7~d#{Ps0flBv2tPP*65^E7f#LWz@`s%~!g?y&#k0fb`Z;T`}N zrH<PU%s{He7OHQe;4M;d8=fz9bS5R{p`kpd%pF?uE~OLLFuQ53G+~$~j2@qe zX3K*6b+{;e@JnH(j0<1m)4UxoYGp$F^qi;s<$OspddWIj=7rdVQhThZq z&TfnJpIBa+kZczScT2VKtN6diZ&xb|dkgm8_P>SheH|qTzVyR4T39RIg;NX;-iE-Yv3;K~`l+^Un%bRbf6NxO(~0 z{&3JNIaTIX`XT+lM<=eXI}wPI&80kG8NkP>4RK7>_m0` z1G8bZ8Q|~>)Qp9X0f#h(YMipb;M+=lXdIO$vmQ&DIdDun|H~uUjitaCWR?r&VpXGc zq{5u~8P$$%RXGkYQtBr1TSH1LE19Wd$^h@n`4XdVB7q-`{RT?L168U@4S`vUvt*G? z)5h1(XsNdicAPg&w>fB0R7 z-#Nm*KU9H?HqTTpu-hr_k^S;o=F5#Rdfmaj6u zAJrf-Dtsfv=+d)fxA3)tHN661DPdmV#>VSaXTzs;?6;e?E*CZ~CG)yY-%-tvSX?e9 z!mi}zhe(y*Sv|{@u#IqkCUDAR-nW!a)QjE0a`jrlrXBFX)ZZO1U8X*vs z>$O$%96v1*nK(zA;|%^oTU5`u^#S~@hoc?z%>+* zGHn|BfVw!&jV)MDkugtDB705U}h!qLqW#k^tOkO17Cb+jfcH8d+OZ3xI zK6Z^MW+*dEakZXAFI_5ok{xI?ERxqhA8+3ZDQ2(~so{h5#)O9Uy`%Nb;24R`IFi{I zlx~c{*W|g-cx_sc=wtSP(8<2CZ}x!+S`DvyVGfjpou4}M?VIR>)D{5v^wQ{pQ^8A5U zS}SBurbzuid>m_#uk0%w29S?t{?jMg~XKmt#b0@j63tEmL;2HUzZU zOwsW+YH9ru$5s8CbJr`jrES3eYaaUIiB?i1Ec)3 z7;VM-bQ=T=rv)G?2Qzep4yjIlRl$_7zeTMg6#LpNWhr#;U5;CTw&wa7blFeQq#Vaw zyb8=}MoO}+LV?KoG^8gfpc3_^Fbj%Z={*Wlx)wF@9WPT~e620aSX5lY)!k(1gAcK& zq1>g+g9f5=ka9xYARFrWo-&HxmHI$jL?!SFQ-9LhHb>gQX(FZ8lj)_SJ9!i9uvf=C z(=(VkCZCs3TEB1849SrwU){b`$85E!>RqflQ~1%n0)bzCAHkrrkq=dAsW}%`{axD$nXi= z&rOUl99yp-t&%Sij(vM>!mj${;q8Em@_D{rS$TGP2p`#gxsZ+hQ1+~6rTb3!d&wB*}JbThv~_e-`pP2@v%JD)JBs>!8cq+LYoF*6VeW0zHkY)T`x{Mu^17b!~H z2d{F$&zL$_TF+M1NPL!aJN9$+eO=DIo|%0ibhk6ucNH!RFBQ%%?i9|(;u_}M4%0cZ zAUs?}m4*!1hCEQ4>1At2dLPbVu}B0;yjkdYxp!6YTPE{st$rZj>k|%mTABebJi>$N z&j(HyS1&sYm!G+4x2C+q3J2~g(GEHA8-br)M=Lc`qpJOERg0alak|chNcYEa)l|XeJT_xRyQezte)=gemlsPke z;q(tkdL|LeEMczLp3F1MqPqe8bXr}(#iBS#luCk(+ZcT`km(td3Syil>S3 z3Wbwn-ldKCDZQ5k2>lysKA$6s30@n}Ea?^$Np5Hm0 z*A}kL!MSX>O+X=%`d(bhu=iwwah7Hp^E-s~&Z@`SQil z16>n4hH0V-58_uSjRJ0O7WQ><4T3fg`VBuWlk~h7L!K^-h34E~tC9KQSzG2giSq&l=eXA59>DDmxaf^q>0;VOM zJN~M$)y57H_A;7KuF1C03X?v>4Z{z)^OcFti0Pw+Aw#-+ieWQFzo~5#vDPfxyyanI z>o+eL^2r|7-{iEji#n!kZQl*V9i$HB6)ze>%=HvvArJ@ufP2IP4?oFiJ6OBPkDy?{ zyY98LOiPvzi|5r$y){G?&AEi;u<;>x&f%^jz3iq}z}Bv{1{MpFNaDlcgW58pndMxK zsiKXT^z5OFS=gs>EAM2~iK!f{JpY97iO0DLdG!H8S&FksM4lrBf^|C-5Ub;zkVgLi zeJ4-r)9n51&C3bGt%*SN+?(a2yehbmc zWcU?vIK3YJi&|DD&KBlsuFlpDmcKFVbqZJ>%0WDG82piXa8G|Znmx6ZCM0ORKP0&A z!SYV9t!m1le zC8lyyE^A;S4v15zw0?me)Lh+QAgh`XZV*}yMldBgKF!QKDpeQ#!nF%6Q;mvA#LA%? zZXCrQXl@*nj7`HCqDYRS;!g&PtA7xWw|G)StcEJ~c17WGN+-NP2J)RnbgOs(GT6lWrCbIFks%RT8`|ACUf*x|qRk0zqfp1ixf@=as ztS9M z<`yj&@{jJ3q)H=H3Vsho;H}ID@Jg;Z#7x;4;^@L|2649d=_26`&Hoi};Y;V6q$D@U zK|FLG?D2T1O;+zAwmqu)%g=$vl1@a)keAV5l4L7OhYfmtA0!B^A+(uWZR9y{DfGP8 zXzg58L9;3>-I4XFnHxp^6iFIU7$`Zzh>!r<#=SwHYk84?4blNGpi$r3!`ot z+?wZ{Q(&a7Hh48)>P%8TLO|`xe~xm;IVn}REOO7zIcAnTVr`fdyZvZ9{wz`uKK~dhC2}4KO3KkqvQW<4{mh-+H#ZoZB|6#B{O*QV9}>LT2Gv_ z8k^byMoo<>*b%;KW6o}H7`@t1f6Ur*qP#jMzO-o3YA1 z%eTcCjQ8p0&9^k6M&7F$>EKIX5Lgtnq2?v~sc^26jWg&j@9M++tG7|f@?Gj{`{>nw zconkYF25S@8!pw5NI}I8%cS?2v?Yz%XQ8um!k89qUXN3KonP&>@s`zKJE=q^ z$Xm3xtC<3ACUE=BVbi5vXC;vdMyS#rInKN<$^&`-B(hfuw(|=inlvbkCVkJkdSodWg`;6- z1D-fV3K%#G@hqVVF1U@ny)kL>&xB#ioi59?t8RX@a;xuDAICf%mY;h!Y=b@mA-nig z6Mt6sR+G-5r}6_msM@SkRxeg*zI!|?}n8D0_mWuoI(@LyZTe?S3%3V18< z|8F4ws^`}R;vbqevHtTT{?<mOPrsH% ze^v17!|5Li)Zq2izdWk`3jHhpAWb)D)`l81$R0`=J50#`*Jum5hy4>zU`CQ2X&NAPo{2Qi$7 zACP{Ey#a!H1fZdy^kAT%F#aiK;PJC|w)TW$^|yVBR%WSeo^7~Oyw9B1M&d@NQjg0?ge1?(;S0=sh^ z$q2DrJsW3K9g*Y=;v&_uffWj@jp*@?&m9==lIM4#5$V3gi98T3@jx`@KZ!PR0GT~9 z?e%V1t`mUYy$`<(S#MFC>qv*}iJEDk1*+lfiyhf9ar?;REb6x-9>9BHPRvb)Qm#{e zO}_!P#2J4|vO9S)#igAT>cm1=%`)cI9I;6c%4BHQF3FZabhK2?$iiJvDrH&F zvTM6S(8ZA%P_~z=I$lzWAX)Y^Wkp8A?TW04y>zV7vBmc>*J&f5;9zd&Xcz1h0&rtv zM#{9)<-Pv22Zcc_j)E2M#;d4uvv+Eke|_AMoz82vhE6-g*&}3zaz_LF(QHF&GVLOp zgw7^*ha*yIKiygAlzUamn_aYDU^Y@FmXLcs5QW{tbMKidxK?d9UFRq8ox^vry~FswU2`Lr zxoA(iguRlPZt{nV!#WCF799e-rzzp~toDW-b4PoHu`Lz!y>^ndJj$Cb;`7KnOqq-r zL)rv^qIrblh`U~*U*C4IdAiw_KpG^xQ^YPde0Xuqi+&c^k@QNWO2EpePdQyhMuu3J z5W55GCJmK8>-*ZfZh=Qu|GQ6tePGqy_NO=b?*eGQ1l$}zHegFLGv_}&k9gZBnhCxq>BoD$UM?dJhcy~xUaFi!LZfD;QC1(tCLMCH)k4TF`&6QN4;N7OX- z=cl>r@~ea6Xh@W4{DP|#4E^ErNz}B`F=63f3Nkse;l@P+1s5+*de4U^Bc}i&%Rrk&3NR=oudo_B z+YNVVBMPbvlLyZoL+DqbizOXp$S2`L1Cy;H4EA2XXRJv&(DQ_t@>!Rx@}W5C4Sn%k zD#SMEfMtjeslpEFViDUZO0TaB9--dCIHhJXI=YO}qi_mdtr6U~nj9#Bf$>`HKVInP z_y%W1(5>a)6pHf3MM<05<~@NPt1Ucfexq(6aiyi)OKJ(>=HrbtqA=I+i+&0Xi_cy0 zo=jbpDHp_7&W3g5!EMx80OF`}f8Mk0PNc?-+HYOb)Xp|N$D3hZCTZ)+u^5!DA*XU( zt?q^A!Wm-&XNv1tzWZl{jn3=jt-M>w1qbj^7;AYib-1YyKd51c;A?dF#5zu_$5Zci zN4@?uFbaMjH|wr>OOI^ZGC(evo9#-L_=7j`$27<0M$Vwiw!g_Y|8{*%SPQ!l-bA#_ z&Ggky(dP{&oKqyd171gDPu?vwtZ6p9EEp-*$kAD!QlEC722n@?9XE|))p~~NSB86M z==|802tKmls4GKG>xh{bsA?pXD1S5}m4#}$V0O|PFG}k2V4~}F6^70@WAboyNJdsG z*#?k8dggHWOBd}Je>8^3Vt;yr{mC2qa8yzu?W1i&h*qQ}QuoFlrggC*M87dlD8^OM zgM2UNOmt3d&#!854)#)7&uQnhk83J%!PSTA$mFFilj05v_>9+%W&V4j;y2*; zl5ZJui}cj?>ngJsRa}P)&*M`%=g!=mO!3nAO$06m)}so-x-h#K2Q5@7wsmzvO&h1d?SOT*SsPZe2#oVK}9eqDtst%5$b2r5<~3Z=JDa06I(^T zr1>|c{S@{{V1dV&-KIpbNwV4IHUn^x|iwp1jt*TcU9TU zG3Ht8s-;!QPTmPOu22{H61a+8@3}?Fy4n??wNkG;*0qLzLO(p(sAtR#uvDYii65O! zm&h40)&DXde{|20-Z?wEfwzgSXEKai5=+$Rmat(fmpm2&hW1PtUx?^U4iKB($oEAwA^N(gsjYu2Vx~Lo^!j;~Fc4_MNby{#IS5JG$IhJ&6fHH6-j7sQC zZ>l5E9b0D&wW3-27pluOm`_YYA!V3BziyvV;M+*y z{}k8|;&>gU$LzHzl6=igrnvxl;K4FP@*9d1G@`0Bc0J~1gFUCa22FR3JI?8(` z;k#iaKl+GXKItUI!^OeGp=t9y!VMN;Wu&L2m-B=E#`M(V0j#PN4+lG-fq%wZNKMaz zz@x1}6=c*cIa@8{giJ?|ysH<96O4<88~+Sh&i~&SZR*@Ae1@k?52{$OM2Mz-BH;5S zS1mfdFk<2Ns^f zI>OuKR{Qma`{5!le1ZUMfCy0nJ6e8vULK87qClgXA54>Q-_DFIGV0d{`U_1 z7_~p_u+Eldc4mJ>?H6~%7?B82P{~BU!kfRuehUBGHutoa9f-JyeWX`?%71v-jMM79 zV#!G5)H2#p=b9ZQ%?Jl?cDo7B0vnqY=hvvIyF@)+h&3Jf`pTxkVXb9BOe~*T-NP8n zyCs3akUe!jUr9Bvh0o3H?d_G#=4!qGrueml%)r`v4IzU=j8HG(Jg3nU`;*4aDM4!7 zsJF?7$(+p$@0Ri-&zBoRrqyI9{SCdCr=2EH66B_m67$eIH8VGnLyhdaBm;4q!VInG z51>aQXU0MK6%9B>gdX%gm@&=5gvwdjn<957M<1nI7rdZ+mZW-eJAIXl^GFX;wye;) zv@FXzoz$q-Rclg2uamii40+ZOy+G2hLySHc=4`7C_3F&k)dfyZNGh;s>S#`LWjX6L z81m|K3rYg|Qq&u(dxA>RTc814(L2ukdqA!N3#gg%7q6J)-rV>S;V8F#jFfl5nau9qit4QQ@^`{+PAs`zRvAt?nxGeobYICoLNdxJ=~b3qqcqvMiiDn zom0v>H3svHB6*&d5Gjlcwh8EH)Pr^jvX?m)8^_~RR^0D|6E_~(YW6TI zzAq%ybl&;(_WJF4OKnwp&^#|%7>a?{Z9kd8f@G`6<A;FR!(hD{Tg2loPIw2;*R>@gpkt1pRp=99L zFa2aOr!dIsgY1>_3f#Eu7{k_Ma#-EY!%iUpAWPlYAoC zYsOh-JQCi=B5ePbS8kwOi14lCE+XhDMc5dthS>qh5AzUjM3EJDNTY+wYTfmPm}3A! zluRYm7zeiU>fm6Yz~Ova1t#tL0Z~~uMi+^-R>t`VvBetVrG&lrwa96jT1U2I3{&Bb z_Z?WxL3D?#e#OblIZJ9=Zn$&TpEb55>pjn0UaN;epfD(p?kOg# zRV&eLsB`6{yZ-M}?O9`KDOa+c0ybys?*AJR#HAmef8R}D-U%a9RhaYxm zHOK_J%czi9HE(*Uasda7&48FCZ&4AvTm^fq;q6fs&sgd*x@09?tKoOq_nRY=Dv&Z? zBNvh=N%!QcX<%-7o^E9;r3@>`~padF9 zX>u_S)y8InFzp1cQxjE$l_gF(zCsh0ht71ac#{-me~yu>I|SgqXl*-9uc=7^g@aR_ zyXDyeD%X-}D1d_{z%k}HmIa(VU4&zG40LCvghhI{H);w4S??IT0e4v+a?Y{q{51)z z(JvfjnE~S|<0o}W6mJ>h1HbG)u_RX5^R@J2(oYV~_Wx*o%+l9#SHovvm0T4Zmp7LS zjfHbYh5JOz6~dgdB@nF1wb;lkn~24ZsfM9JtG)|8OIKWGvr@D)FN7mjm}VWD2pu3m z=<~xP^+kXv4_~(@m{F_ce2(~{QGhIMC_7%~t)h6`tOy>P1G;%*k)A`Mg@=POrVyJ= zrL~qiRAqbsMIs^q#>}1>S?zrXD~tj|8$VHN`FZnFyn&lmh+^YW3&y z>>A38TQTf_a=$`h3nKJ9lspn*(KS;>9%s#U_%B>oc?(Fu$_JaxrVz5nok>YPt6E z_sEsFE3!@O;ia(>2nB`uYm);zzqU04KZdK5x;oMGJ-FV_NAE>PEy==u$Te+=SyY#5 zG{V79OF}h@`qcocu&U*KDQj`ecHh&lbUAS=euW8|Xh4PGR9tC5Kdn&=pOP`z{H$4V z#^3|7U|k-WbTkv zeIe7Um`~l(E zddd?()%(`r>ILtXgd-uTYOpk9VjK0{XxqoFN$Y0zt-6+m=5NsmXXJ#8i-zmcERzbX z4C`sr9*)YdaL2U;w)_});`bSnT70%uPJ@pK`R}$7e9jiLqW!n3QIF7<4+Dt8v_sVn z_r7nthK}+Wh>#;TrKXg*mv9)wqSQwK#-)@>(kA15cKt`M5}1xNI4AZ#ttOf zUZq^#5}Pn`Hq7hXwpqNG`iNoXZ02EeQ3I-6gTCj)f!MFWL$IJD$pkiW`z)aw<5Zf}@xC9B;`b@R%fe;jM~VnlcXzTl42?ptGb%xGG0WG&Ibs zKaLKEsY{sz4L8#lNYQ6v=_}#1mlW9<6o|JMa4~iAE7)~!dCI8@oO62tfT&7;-0h5g1K-rE{<#d@ms4wMYIKo&}#_fti zT_6F8ykm`J1&_}hHF-b|IW2gy*6<_v=emRKqS!y`mFdN^>#{zDusaDoXOKaKon&-0 z^VliGmIQ9iJLZh8?a)apeYj8}raX_A^?k7c%XBkyaM{y$Gwm z(7e>1n|aXM`qaGADkV4=CCBSc<<5D!31Zk5e~a$d^gbI$Z69{ms`*a( zsGijk@71Q;zcB`X61^Romhy1eZXsN;&Q-UW;*{s9&iMrNtlo3=;A@$}f19+!^bL0? za#gqr>o!ttJKCgV{(ymZN_BdY@Cv6myl2w5j+KW;RGc4Ca_I5fUVPpohV$+X=#*o|yqAtGSAb&@W8vcOV&Y%N#4RD5 z!LEDKknp{a!Edj9V;u*o)1(nBhe2mB+)F~@r4&27Lq+%Qvow&rAUa(_pR6640M?iq z5%`$|)t8I9O%_$$(yy)pzb8rcohdQ4&=!EmyxM5$guh*|%;OUodumPs!I3S80}@}T zC&fA(C^#n0U75_I-EtWmt2s8($3?##fnsKUt4mLL=nPTNH^6h0E$yu_;zAU;3{pK~ zPfw_j*+L2TdS;(xfuL9$)6^KXsV8oA)_Y4GkVYRwc3ux}r`ahTo?$smOwth`_eN%% ziw}AMjsm;P|9PwmzqIsHC~C=CO+Nv>p@o3Er_rW{(0LmfZ&RC&5eDBP(mt=KOsn=C-$B&$*++R9e+@QyPAVEbsel z3pdZ^4I)Bm8}9OenxgD7E$h`zX0)IZ9i~LB9SS`G&4!$%C~+}rd^@J1*K>3=;_v{CA^#RnDF;07N6E|z~OQ%AZcpGyzIi&axHvXT25A-?W z>any%34+)7niWk!pDsn$7`I|m`|_C$?UtOCqT=CelBh?C!wTsVu%#kDW*fD#ThM&b z0{b%8MIX!{tFw5ehJwhwZnB;7>ArU}=P2=%pfM%pDFafJ4KImv6X$g<-8-E4BEM7& z7|=&=kk@}{r~0T8@TQQN7L-r$osA}vOCt(Wm-I!h)B$B8t>SENe8jP?0ppA~QDotO ze~j?q-EG)xl^V}p5C6lUDK!uM_ZoWSZqI`dvg=lPHEC|<$X zd=e*Ksz?`nr-+|lnaG?NZ^rqxEH|fSY@Szll@gzSv)OA)a}SO{;~>TF88=N8BW)80 z9OeZLWv_Dl7=u~*Le9L4R}^8;B=S`3+%EY7Jb3=RCEMrFof&|+r;}RSNnZOx4C5L7 za1Z=3Msn}oDTdn{YC*Np@F^CTn~TGfuO8MNTxLG&Z_4e2jr6q*ulC=r_3q!~T~%r# z&>+zU)FKy{oqTtTM>V^dOq%dn$h^68zS+9Fw8&EMISqo5#D_3^Z!5+OXgVU=SBJa@ zW-Spdzs8WyzKWC;JwIEsWyfBSS207k? zH*c0E`W<3JRxC;tvxnvI$*Z-Q3L{M=z(1SmJ)5 z3UWCrYt78^PAG%N?gqx7EDYAxaeSNZy=dB+NgrPkirLSE7iE85Pn2tUw*oA zgv=uu92E$hl;FNO+-RP}=Lo4B9lVJcKR1{6e)$brQ<(L+vJ7b-1dtgs<=OEJv*NoP z;+ui35s(fJ0a}=;L5Y#Oo10y4N=g+(^I5ES{hPJ4K5qam*Nul6^Kma*asD~>J!>jzKb7)*+irIGp`dCGkCY{a@0)SFMDb4ZJ_#AoYZ8;6yi{Yfr_L zMSzkM9U$>*Dgbw(R@`##`dH(QKqlZ4?RD72Ff7R;YB#7uCRr+}B`H(6BTN;7POkX*Jtn4j*#+)UwLh_xW_`PoJ`xqnD zXR-8*6takrxBzkZS`f8`N3!nfVt1+{2HrA1G7z4GKMbQP`-?Y$$-Ki?nrDGFQuW_5 zm+v!^?mK5AD*>ZGwl(S;G{ATMQNSr>)@T$gn)dK1Nw$+;VYGjUF=AeFKyYJ&F_@Jz zMZO-kL9FXp;KI%-#^DNE3*T~$?p|k} zSEecl-xecDccyC5-`aY!WeP17ewaA#Kfeu^vxxJ<*+{CLIIJuhCeuG|cM??aM7K3F=v60 zw6kTmjM0v+!OV29Em;=WKCxDsp^piFuzFz29Y-0a=nJmKb;O-Jvp)gN6q_0w1lRNg zmAP5Z>#j=B^7yFu6y*i98OI#&G;7CbBC3qJbOU^lKs9$PU!XbJ+!WNqUb>Qpv__vA z9P1>B7!-6#hN?H+6d1`WfINUoi2w(-T;^`7cCIe2_bs5nG_t#nls)mniAOSDtXV}X ziU4AKhfNQS$C{|#i9%V(c$t$N{4qKP9l`JAb=OzJ&rNUF+tl*W1@!9?Typ8#2M~Us z9C)pjPxUMMcUO!bYPg$z?sGpq5c^aHpKzT}xO9wQJ%!9uG2)zG$&0kSD0Fpfjz=sq zeYW>eP5v&*{-O?jt}V(3p6;59{xZeQld!K<9XsF}zaJT2 z2L@~i#?P@*zti(n8D)Pfzz}COwymlpnkB#`S->Y^LKVQ>Y_DWLa3s}}MXIDI*uBIU z;?aoU#2eIf>EKYbGqNI-k}Lk1gK1s$U51No3~oe#XYNcZ#;GI%0^etli}2vSo7~&t z5_1+*N!_62S78g^bX%R6Q+joQWMMSf!xY%so8tG))QX~ za~a5hj#xgr{ckS+l^6bRbRuH36rDcMDE;8<2p_HwE9#fnKiAbycAH}rZ2|!gbsa%> zZvp3o)nxG%PS5kpr(LgM{iCGRvHKN7Zq7*ri*cWMywiu-fBJfvj$?MO^&049oX71B zs}<`nW)NI-8tHewHaJX0Z@j}a4WrIG<=TGWF^fK|O z0YzpX#nF%x>pNR{{!2oIv(JFd{;lrw=iX4iyPx)Rs;Bl3?k55MR}x)E+`-=2%--2R z^|hlJSntsVmBbI)cK|RX&l9fD-_@!a8!D^e`bm-vKKpP2tLq`gy!uu!xMSH3D;p~w zMtMd8v|GP9a%#e>pTejmCc0-ka-|hbW0?PHZUl73=cP!d>94Fw!)QTaVI#^-y14YT zzy>{8sk%Eof$d6qL^;tA&U_>wKcxeniW0Rm!h>Sd7{PONXA!(@3r94eX;VISK=9;K zq47~g&N2}lG^1(%gt^i1K*~YOxQYa5AW5A>X`F>3cfcGqac+%d*6@ZNl6gs1UgA+; z>8~E6AQ9rw5rbNqo({M9E)KF=HGr8`N?!#xu8AK;9?)P0&v;6WOksU->KV(T=X-Xb zC*|T|vkH^Tv6q5~Iw-Xvc2Tsd83y&83W5LKOiGlnuaYK=#49t8xyD=&^VyuVu7;xv zY~&UJC{G@~>GDhfakMWT+Pe{O53*k(a82gU&m@5C!QYsN$GB!$H@G!Bc0%vF9rX-9O2Oe{c4Y8 zPX6S7`=j5D{^^k(F~5wy{|obT1^r*f9+&8^_Gs*}{iFQqcYA*pU_A=|vPbt%*uToL z{-o&7s-nNqF%L8QFQfmiG5Qn!XPM03@Vf_x{5SlsqM85ep&xwCzuMzNtHS+sKmQlt zca}yd{^76w?C774?a|OLmQMc(`wutwr=CBf!N2t&k^D6OAF<(|8vaaP{;eSm>z9VV zQknn%&tCJe_x*K-_ou}_5BvVMxcE=l-$#FcD)=+b`ddLR=})`=r0xIe^kYfSul6{? zF26?j5&Tzy&+l{l&k~hpAWb)D)`l81$R0`=J50#`*Jum5hy4>zU`CQ2X&NAPo{2Qi$7 zACP{Ey#a!H1fZdy^kAT%F#aiK;PJC|w)TW$^|yVBR%WSeo^7~Oyw9B1M&d@NQjg0?ge1?(;S0=sh^ z$q2DrJsW3K9g*Y=;v&_uffWj@jp*@?&m9==lIM4#5$V3gi98T3@jx`@KZ!PR0GT~9 z?e%V1t`mUYy$`<(S#MFC>qv*}iJEDk1*+lfiyhf9ar?;REb6x-9>9BHPRvb)Qm#{e zO}_!P#2J4|vO9S)#igAT>cm1=%`)cI9I;6c%4BHQF3FZabhK2?$iiJvDrH&F zvTM6S(8ZA%P_~z=I$lzWAX)Y^Wkp8A?TW04y>zV7vBmc>*J&f5;9zd&Xcz1h0&rtv zM#{9)<-Pv22Zcc_j)E2M#;d4uvv+Eke|_AMoz82vhE6-g*&}3zaz_LF(QHF&GVLOp zgw7^*ha*yIKiygAlzUamn_aYDU^Y@FmXLcs5QW{tbMKidxK?d9UFRq8ox^vry~FswU2`Lr zxoA(iguRlPZt{nV!#WCF799e-rzzp~toDW-b4PoHu`Lz!y>^ndJj$Cb;`7KnOqq-r zL)rv^qIrblh`U~*U*C4IdAiw_KpG^xQ^YPde0Xuqi+&c^k@QNWO2EpePdQyhMuu3J z5W55GCJmK8>-*ZfZh=Qu|GQ6tePGqy_NO=b?*eGQ1l$}zHegFLGv_}&k9gZBnhCxq>BoD$UM?dJhcy~xUaFi!LZfD;QC1(tCLMCH)k4TF`&6QN4;N7OX- z=cl>r@~ea6Xh@W4{DP|#4E^ErNz}B`F=63f3Nkse;l@P+1s5+*de4U^Bc}i&%Rrk&3NR=oudo_B z+YNVVBMPbvlLyZoL+DqbizOXp$S2`L1Cy;H4EA2XXRJv&(DQ_t@>!Rx@}W5C4Sn%k zD#SMEfMtjeslpEFViDUZO0TaB9--dCIHhJXI=YO}qi_mdtr6U~nj9#Bf$>`HKVInP z_y%W1(5>a)6pHf3MM<05<~@NPt1Ucfexq(6aiyi)OKJ(>=HrbtqA=I+i+&0Xi_cy0 zo=jbpDHp_7&W3g5!EMx80OF`}f8Mk0PNc?-+HYOb)Xp|N$D3hZCTZ)+u^5!DA*XU( zt?q^A!Wm-&XNv1tzWZl{jn3=jt-M>w1qbj^7;AYib-1YyKd51c;A?dF#5zu_$5Zci zN4@?uFbaMjH|wr>OOI^ZGC(evo9#-L_=7j`$27<0M$Vwiw!g_Y|8{*%SPQ!l-bA#_ z&Ggky(dP{&oKqyd171gDPu?vwtZ6p9EEp-*$kAD!QlEC722n@?9XE|))p~~NSB86M z==|802tKmls4GKG>xh{bsA?pXD1S5}m4#}$V0O|PFG}k2V4~}F6^70@WAboyNJdsG z*#?k8dggHWOBd}Je>8^3Vt;yr{mC2qa8yzu?W1i&h*qQ}QuoFlrggC*M87dlD8^OM zgM2UNOmt3d&#!854)#)7&uQnhk83J%!PSTA$mFFilj05v_>9+%W&V4j;y2*; zl5ZJui}cj?>ngJsRa}P)&*M`%=g!=mO!3nAO$06m)}so-x-h#K2Q5@7wsmzvO&h1d?SOT*SsPZe2#oVK}9eqDtst%5$b2r5<~3Z=JDa06I(^T zr1>|c{S@{{V1dV&-KIpbNwV4IHUn^x|iwp1jt*TcU9TU zG3Ht8s-;!QPTmPOu22{H61a+8@3}?Fy4n??wNkG;*0qLzLO(p(sAtR#uvDYii65O! zm&h40)&DXde{|20-Z?wEfwzgSXEKai5=+$Rmat(fmpm2&hW1PtUx?^U4iKB($oEAwA^N(gsjYu2Vx~Lo^!j;~Fc4_MNby{#IS5JG$IhJ&6fHH6-j7sQC zZ>l5E9b0D&wW3-27pluOm`_YYA!V3BziyvV;M+*y z{}k8|;&>gU$LzHzl6=igrnvxl;K4FP@*9d1G@`0Bc0J~1gFUCa22FR3JI?8(` z;k#iaKl+GXKItUI!^OeGp=t9y!VMN;Wu&L2m-B=E#`M(V0j#PN4+lG-fq%wZNKMaz zz@x1}6=c*cIa@8{giJ?|ysH<96O4<88~+Sh&i~&SZR*@Ae1@k?52{$OM2Mz-BH;5S zS1mfdFk<2Ns^f zI>OuKR{Qma`{5!le1ZUMfCy0nJ6e8vULK87qClgXA54>Q-_DFIGV0d{`U_1 z7_~p_u+Eldc4mJ>?H6~%7?B82P{~BU!kfRuehUBGHutoa9f-JyeWX`?%71v-jMM79 zV#!G5)H2#p=b9ZQ%?Jl?cDo7B0vnqY=hvvIyF@)+h&3Jf`pTxkVXb9BOe~*T-NP8n zyCs3akUe!jUr9Bvh0o3H?d_G#=4!qGrueml%)r`v4IzU=j8HG(Jg3nU`;*4aDM4!7 zsJF?7$(+p$@0Ri-&zBoRrqyI9{SCdCr=2EH66B_m67$eIH8VGnLyhdaBm;4q!VInG z51>aQXU0MK6%9B>gdX%gm@&=5gvwdjn<957M<1nI7rdZ+mZW-eJAIXl^GFX;wye;) zv@FXzoz$q-Rclg2uamii40+ZOy+G2hLySHc=4`7C_3F&k)dfyZNGh;s>S#`LWjX6L z81m|K3rYg|Qq&u(dxA>RTc814(L2ukdqA!N3#gg%7q6J)-rV>S;V8F#jFfl5nau9qit4QQ@^`{+PAs`zRvAt?nxGeobYICoLNdxJ=~b3qqcqvMiiDn zom0v>H3svHB6*&d5Gjlcwh8EH)Pr^jvX?m)8^_~RR^0D|6E_~(YW6TI zzAq%ybl&;(_WJF4OKnwp&^#|%7>a?{Z9kd8f@G`6<A;FR!(hD{Tg2loPIw2;*R>@gpkt1pRp=99L zFa2aOr!dIsgY1>_3f#Eu7{k_Ma#-EY!%iUpAWPlYAoC zYsOh-JQCi=B5ePbS8kwOi14lCE+XhDMc5dthS>qh5AzUjM3EJDNTY+wYTfmPm}3A! zluRYm7zeiU>fm6Yz~Ova1t#tL0Z~~uMi+^-R>t`VvBetVrG&lrwa96jT1U2I3{&Bb z_Z?WxL3D?#e#OblIZJ9=Zn$&TpEb55>pjn0UaN;epfD(p?kOg# zRV&eLsB`6{yZ-M}?O9`KDOa+c0ybys?*AJR#HAmef8R}D-U%a9RhaYxm zHOK_J%czi9HE(*Uasda7&48FCZ&4AvTm^fq;q6fs&sgd*x@09?tKoOq_nRY=Dv&Z? zBNvh=N%!QcX<%-7o^E9;r3@>`~padF9 zX>u_S)y8InFzp1cQxjE$l_gF(zCsh0ht71ac#{-me~yu>I|SgqXl*-9uc=7^g@aR_ zyXDyeD%X-}D1d_{z%k}HmIa(VU4&zG40LCvghhI{H);w4S??IT0e4v+a?Y{q{51)z z(JvfjnE~S|<0o}W6mJ>h1HbG)u_RX5^R@J2(oYV~_Wx*o%+l9#SHovvm0T4Zmp7LS zjfHbYh5JOz6~dgdB@nF1wb;lkn~24ZsfM9JtG)|8OIKWGvr@D)FN7mjm}VWD2pu3m z=<~xP^+kXv4_~(@m{F_ce2(~{QGhIMC_7%~t)h6`tOy>P1G;%*k)A`Mg@=POrVyJ= zrL~qiRAqbsMIs^q#>}1>S?zrXD~tj|8$VHN`FZnFyn&lmh+^YW3&y z>>A38TQTf_a=$`h3nKJ9lspn*(KS;>9%s#U_%B>oc?(Fu$_JaxrVz5nok>YPt6E z_sEsFE3!@O;ia(>2nB`uYm);zzqU04KZdK5x;oMGJ-FV_NAE>PEy==u$Te+=SyY#5 zG{V79OF}h@`qcocu&U*KDQj`ecHh&lbUAS=euW8|Xh4PGR9tC5Kdn&=pOP`z{H$4V z#^3|7U|k-WbTkv zeIe7Um`~l(E zddd?()%(`r>ILtXgd-uTYOpk9VjK0{XxqoFN$Y0zt-6+m=5NsmXXJ#8i-zmcERzbX z4C`sr9*)YdaL2U;w)_});`bSnT70%uPJ@pK`R}$7e9jiLqW!n3QIF7<4+Dt8v_sVn z_r7nthK}+Wh>#;TrKXg*mv9)wqSQwK#-)@>(kA15cKt`M5}1xNI4AZ#ttOf zUZq^#5}Pn`Hq7hXwpqNG`iNoXZ02EeQ3I-6gTCj)f!MFWL$IJD$pkiW`z)aw<5Zf}@xC9B;`b@R%fe;jM~VnlcXzTl42?ptGb%xGG0WG&Ibs zKaLKEsY{sz4L8#lNYQ6v=_}#1mlW9<6o|JMa4~iAE7)~!dCI8@oO62tfT&7;-0h5g1K-rE{<#d@ms4wMYIKo&}#_fti zT_6F8ykm`J1&_}hHF-b|IW2gy*6<_v=emRKqS!y`mFdN^>#{zDusaDoXOKaKon&-0 z^VliGmIQ9iJLZh8?a)apeYj8}raX_A^?k7c%XBkyaM{y$Gwm z(7e>1n|aXM`qaGADkV4=CCBSc<<5D!31Zk5e~a$d^gbI$Z69{ms`*a( zsGijk@71Q;zcB`X61^Romhy1eZXsN;&Q-UW;*{s9&iMrNtlo3=;A@$}f19+!^bL0? za#gqr>o!ttJKCgV{(ymZN_BdY@Cv6myl2w5j+KW;RGc4Ca_I5fUVPpohV$+X=#*o|yqAtGSAb&@W8vcOV&Y%N#4RD5 z!LEDKknp{a!Edj9V;u*o)1(nBhe2mB+)F~@r4&27Lq+%Qvow&rAUa(_pR6640M?iq z5%`$|)t8I9O%_$$(yy)pzb8rcohdQ4&=!EmyxM5$guh*|%;OUodumPs!I3S80}@}T zC&fA(C^#n0U75_I-EtWmt2s8($3?##fnsKUt4mLL=nPTNH^6h0E$yu_;zAU;3{pK~ zPfw_j*+L2TdS;(xfuL9$)6^KXsV8oA)_Y4GkVYRwc3ux}r`ahTo?$smOwth`_eN%% ziw}AMjsm;P|9PwmzqIsHC~C=CO+Nv>p@o3Er_rW{(0LmfZ&RC&5eDBP(mt=KOsn=C-$B&$*++R9e+@QyPAVEbsel z3pdZ^4I)Bm8}9OenxgD7E$h`zX0)IZ9i~LB9SS`G&4!$%C~+}rd^@J1*K>3=;_v{CA^#RnDF;07N6E|z~OQ%AZcpGyzIi&axHvXT25A-?W z>any%34+)7niWk!pDsn$7`I|m`|_C$?UtOCqT=CelBh?C!wTsVu%#kDW*fD#ThM&b z0{b%8MIX!{tFw5ehJwhwZnB;7>ArU}=P2=%pfM%pDFafJ4KImv6X$g<-8-E4BEM7& z7|=&=kk@}{r~0T8@TQQN7L-r$osA}vOCt(Wm-I!h)B$B8t>SENe8jP?0ppA~QDotO ze~j?q-EG)xl^V}p5C6lUDK!uM_ZoWSZqI`dvg=lPHEC|<$X zd=e*Ksz?`nr-+|lnaG?NZ^rqxEH|fSY@Szll@gzSv)OA)a}SO{;~>TF88=N8BW)80 z9OeZLWv_Dl7=u~*Le9L4R}^8;B=S`3+%EY7Jb3=RCEMrFof&|+r;}RSNnZOx4C5L7 za1Z=3Msn}oDTdn{YC*Np@F^CTn~TGfuO8MNTxLG&Z_4e2jr6q*ulC=r_3q!~T~%r# z&>+zU)FKy{oqTtTM>V^dOq%dn$h^68zS+9Fw8&EMISqo5#D_3^Z!5+OXgVU=SBJa@ zW-Spdzs8WyzKWC;JwIEsWyfBSS207k? zH*c0E`W<3JRxC;tvxnvI$*Z-Q3L{M=z(1SmJ)5 z3UWCrYt78^PAG%N?gqx7EDYAxaeSNZy=dB+NgrPkirLSE7iE85Pn2tUw*oA zgv=uu92E$hl;FNO+-RP}=Lo4B9lVJcKR1{6e)$brQ<(L+vJ7b-1dtgs<=OEJv*NoP z;+ui35s(fJ0a}=;L5Y#Oo10y4N=g+(^I5ES{hPJ4K5qam*Nul6^Kma*asD~>J!>jzKb7)*+irIGp`dCGkCY{a@0)SFMDb4ZJ_#AoYZ8;6yi{Yfr_L zMSzkM9U$>*Dgbw(R@`##`dH(QKqlZ4?RD72Ff7R;YB#7uCRr+}B`H(6BTN;7POkX*Jtn4j*#+)UwLh_xW_`PoJ`xqnD zXR-8*6takrxBzkZS`f8`N3!nfVt1+{2HrA1G7z4GKMbQP`-?Y$$-Ki?nrDGFQuW_5 zm+v!^?mK5AD*>ZGwl(S;G{ATMQNSr>)@T$gn)dK1Nw$+;VYGjUF=AeFKyYJ&F_@Jz zMZO-kL9FXp;KI%-#^DNE3*T~$?p|k} zSEecl-xecDccyC5-`aY!WeP17ewaA#Kfeu^vxxJ<*+{CLIIJuhCeuG|cM??aM7K3F=v60 zw6kTmjM0v+!OV29Em;=WKCxDsp^piFuzFz29Y-0a=nJmKb;O-Jvp)gN6q_0w1lRNg zmAP5Z>#j=B^7yFu6y*i98OI#&G;7CbBC3qJbOU^lKs9$PU!XbJ+!WNqUb>Qpv__vA z9P1>B7!-6#hN?H+6d1`WfINUoi2w(-T;^`7cCIe2_bs5nG_t#nls)mniAOSDtXV}X ziU4AKhfNQS$C{|#i9%V(c$t$N{4qKP9l`JAb=OzJ&rNUF+tl*W1@!9?Typ8#2M~Us z9C)pjPxUMMcUO!bYPg$z?sGpq5c^aHpKzT}xO9wQJ%!9uG2)zG$&0kSD0Fpfjz=sq zeYW>eP5v&*{-O?jt}V(3p6;59{xZeQld!K<9XsF}zaJT2 z2L@~i#?P@*zti(n8D)Pfzz}COwymlpnkB#`S->Y^LKVQ>Y_DWLa3s}}MXIDI*uBIU z;?aoU#2eIf>EKYbGqNI-k}Lk1gK1s$U51No3~oe#XYNcZ#;GI%0^etli}2vSo7~&t z5_1+*N!_62S78g^bX%R6Q+joQWMMSf!xY%so8tG))QX~ za~a5hj#xgr{ckS+l^6bRbRuH36rDcMDE;8<2p_HwE9#fnKiAbycAH}rZ2|!gbsa%> zZvp3o)nxG%PS5kpr(LgM{iCGRvHKN7Zq7*ri*cWMywiu-fBJfvj$?MO^&049oX71B zs}<`nW)NI-8tHewHaJX0Z@j}a4WrIG<=TGWF^fK|O z0YzpX#nF%x>pNR{{!2oIv(JFd{;lrw=iX4iyPx)Rs;Bl3?k55MR}x)E+`-=2%--2R z^|hlJSntsVmBbI)cK|RX&l9fD-_@!a8!D^e`bm-vKKpP2tLq`gy!uu!xMSH3D;p~w zMtMd8v|GP9a%#e>pTejmCc0-ka-|hbW0?PHZUl73=cP!d>94Fw!)QTaVI#^-y14YT zzy>{8sk%Eof$d6qL^;tA&U_>wKcxeniW0Rm!h>Sd7{PONXA!(@3r94eX;VISK=9;K zq47~g&N2}lG^1(%gt^i1K*~YOxQYa5AW5A>X`F>3cfcGqac+%d*6@ZNl6gs1UgA+; z>8~E6AQ9rw5rbNqo({M9E)KF=HGr8`N?!#xu8AK;9?)P0&v;6WOksU->KV(T=X-Xb zC*|T|vkH^Tv6q5~Iw-Xvc2Tsd83y&83W5LKOiGlnuaYK=#49t8xyD=&^VyuVu7;xv zY~&UJC{G@~>GDhfakMWT+Pe{O53*k(a82gU&m@5C!QYsN$GB!$H@G!Bc0%vF9rX-9O2Oe{c4Y8 zPX6S7`=j5D{^^k(F~5wy{|obT1^r*f9+&8^_Gs*}{iFQqcYA*pU_A=|vPbt%*uToL z{-o&7s-nNqF%L8QFQfmiG5Qn!XPM03@Vf_x{5SlsqM85ep&xwCzuMzNtHS+sKmQlt zca}yd{^76w?C774?a|OLmQMc(`wutwr=CBf!N2t&k^D6OAF<(|8vaaP{;eSm>z9VV zQknn%&tCJe_x*K-_ou}_5BvVMxcE=l-$#FcD)=+b`ddLR=})`=r0xIe^kYfSul6{? zF26?j5&Tzy&+l{l&k~Fy4tLAtv;B;-;8!bQ3pUeNFF8~)<+ z?jQG@1M|%6d3JYp&dw;vK*JzGJhc${HQ}f0zZ&A>jgjqJ1qWL@$L9))< zF7MFC2MGb80|fzr{&z70J3AIPYpaadPHAXX^xy;kgUXF%6J`pfDy={U5-g8GU1}3k zkT54=%J$SXlP*6(n;-3pcxOMb8QFO*Y;`Z|R>-H#4^VAw97_OYVao3ELS6$(wNV75 z(r1%|oA)M>OiD{~oyo`we!%4Fo1Z$&7I`$BtYJ`Zc-e>Bct>T+LaN9->%2Ej3R0nO z)$P?1H9HrJ(s>kJTfEuX?@F_P0vZlOzV>a>!XKY>4<@vz7}P3{k z-3`R+J%C-w*=Unn=t|Dn6E;>u4OGE85IMGH*Q#~)YR;D6&^tNHQ+>gq&pQwv=~jupf&~(!+Sz&>XUC~_4B~{t~y_K5fgQPQ~!6t9{N@^6a+E; zuO&|`K#*kI!8lZO2X?9Xm!O?a>5HwPmpqO`eWbF<=HVV=IJb22`>mEVZ|9t)lF(R1 z?y-c*_Gh~b?enh7xwDH8J{gZyh$N)J^_=Bgdp^9M)x6P}$GWW7MG&OQUxYd#%RQtK zpy8*Fx*D}^eWjwOC0oAcq>3pLa;Ci+XW61BC(ILknUrj7?`!f-ZZm$wEHex6+Sg*> z?qsFpw`u+5$mD|Nk!{pRwlV*~wzH#?t@RV%1u-vW9{GNp*$+7znKb4}%*59H3pQjV zSm~`vFP4zxlwzHDdme21($_k}NQBywLbmSOoX!|RR_Vg`YKI^YSrG!)n)YS{p~st< zjmRp?6|LFLsM+i=a7vFsX{VE5MZ7s=Lbt#wd~R+o7C_Z4nbBL(c2)0bb4tQ3iE4?a z9d{OnQCj+VQ9z$#5A9A(;5sgs1U}PNPbv8FG^|-?BK5W;XA)JCm$v_d|5CTY)2ArfQ$PEZi)I2gvQulb=arLM){4{qw$CMW1GlR!TFOFs2 z(FI|Ab`gnbGPdwaaCBXsN(mOo^)oDx6(l}JrW#XRqn&CL)AxR!oR6ZW#raR?35 zi-V~8^S6fCZ`BV9?>9J!=6IK4*a_poiM6#$9MiR$(u(N(@6?SF*d3o=hS85nnT2!p zSr7*4D4PkCw-k8v#2_&CSd)IM2kZzMei662em~5)Rvv{{4*&@oPLXMUnMdel#Y49! zwa%HQSxj83i%PBq>~I0nxB#wRJt`ha)}*Yq=*&6XEzlwnwai}*>YN~^_O>DNL0=#x z>r0@cZM5LY9>9zwt&oj<3o#&TD-_o0CBSFF3+JI4o(nnNvE~J-)PQx@K4U%zp0lPI zDgMEPn(b|?wO&1G_WD}l!{afQ*Un=uhY5qk<5*H;eN6oD2W}d=1LqoHi<&W8ie|S9 zUu->Y!O)rBy#bsS17ZT|{mUT*IYYtcp=rHrBs?=ZAmWzS=wLsPPJZvQS%9Muhea#s`K3 z4PEP`jjgDgYDNtD(UNf7Dh!!p3amzrR-bw^fp=~MMm%r(flreyIdfQn0xP_vw%bERS@S@eR^5USAUZ^yPB7&|V_>*D1**u!X(HIHOOdf8){Sd!(ek`GYlrcVNHdu`(YHQ3naXWj0F+k;b z(_Am>a{h%|xtFdSXc}t`UdE*92)(+^GM-PnnNziA7AF)fmdDFt4 z9Lqm*^%AIvC39>KHw}Ib@0SJf{x!_)jb!tI$*3r%v0?W`kV(~LhN*i!m7~L#w!!nb zfqFiaGHqEFNveyc0mdUSqF0c#Oj3rzMNHWYp5n$fCfpyS@1LzCZK>JGdlVO+%0Ql^ zxr}~|Yr+{#F2jkiqD+2m$2sD3DcgKhW3Ab^X#$woal{Mw;$~aMLk@5%6c#82djd#T z-KUqUNHk-MEDb8u!Gjp0dY?9ZU$pU9_Kl9pt2Cd_Jvdj^6Um!yk!NUBOK znTG!LfHd^XUHg{iu(_940Z&z1S%FER=7&do1#s71@#UoOVwDmrF&E=@J)AcJ19 zueAaWh_rNwyDBJH!PvOi@i>Um{{O;gQU%oD(LG~)RK<)TL^%5s0b3xpX4>tZ4J>Ua z%&w8VwNgj>16fJTil)T>)vMP^L!Kn8su}s_hwe$)Vu^2F zNON{+xIgbp0}HTb%Bu>XCFeTv&3w^%1L zV{7Bz0-VcxBJ>D22#93DUjfdaVn2m{?wflWE4G9jL_QL0K9&1kmQyr3Z_Jx(J^OF z)z4Q<#nIH~_U`WP+Hz~HfDa&g^Gb4P{iB+I-Vyo-FTs5KiBp@?=B-(ND(uLRvHmo z0S8i4n``@m%F^2)fgDjgPP}{a9G^@f<}Y5pVU&q6DQi}>HhzIjcEkO;S*J+Nf~8H^ z$5?(-ykw@BOG$%C5xOd>mgiQ}xVElwcNJw|ZO8Fa)3SO=*ZC06=%~c;azCigVzie~ zVZe+(Q`9oVrJ4SWh;7ZP8LJKMuvQu=D~F8W7(B%!&aWC~$lO)m2!;}d##enIZjl-d zI44gAaT6efazMAp+ZptsUOCuEo`_80zEG4q=!OwB909j_pYQFMzMj}IjY2yR5NNsR z{&sg0a?w^_lO6=(Mh!*Q^ST=()ms#67rHv0=^h_Cs(Sx$)(k)Hb6-P*fd3*6+`AR! z<8gi2n-`_$eNqY2Mt_)%a4`K|(kX%{TY$vRrVm)YVMHchpG#`^qqKv3f`xoZF$cPZ zv$yow97Xw&4H6xRamR2RD6+IwK^BYontzB$#aZHUhZDYJ}5fS|~J{)>=5wYv`VFu-~#d;Ba z&h4x)#7;!~nugT=en%2E6BS{-kex~?v8<6rc*TFZLcdV0z-Gl@dO!?Gtl#)Wh2dD( z0JES?2)Fc5r2s*Q*e<-oGxE?$7B%BT;(e3%-ta=JZaK}iN^1=_mm+onaFLSL5R>ef zifhBefqX}xv?>72$01=UR|e-->+KAnaFL}tqUD6WkM)RY>KeyZr1Z04b`M<`twFR$ zEPkcQE4j-mU{~ygn{hR;Sfl5;^E=hh9O<3lp7Vu|Cy_Xu%alXvujTL?8RQO_4WJ2J z3=}HZO<%{7_Qax-IMYBw!{Z`Y&60J_NGJ!jqSH>)s|mpn9vOm6z>1Y~-}i9NYwm0AVbO;wKE zlw7dgu*xhA=avKTT{*$C&Dp>)xR*jOs=7hb?ItKKU=prva%$FQR=jV8%pH%TQ@ z^VTgdWe)ivLt}YBSqKW8mkWQN1*{E<+&ObYMvs)3OD*g!+d*qYQWZkxJH$d_ISCxx zxVT<$_BO|lVP~`}ZgY1^Zieo+@xF5fHZ-irs|$l_UBP#s2d%0+H%G-kCa1xuG~89X zWWAX$g8mR~fjm4B9GoI8>f4(dm*CTgY9hc0D_uM}n6Iu8pnut)55d<|PMrrhQknc3 z1hD42NljD|RD5;X^$n7s^22=hsyA_Q_IR{(!x0esWqZe2dR<+LLzrW#Q?CqbK=pbu zHM#t7nfxSE9P=VpzBb&6Dmt1IW5N=htGkNqP*w~>FYrFADE9)h!CxKU0`1aHiU~NC zGIiRZKpw&nANb_}$&5&L&)3Y4Q8zg_+rPx(gn6LtzK+M#Jh>(~E`K2p5(Dd;5*tax zC5I^m%onWAvDC~Ym59LxP(fFtQQd|7N?TfCxmvso62KBEOtXkhgbd&#@Y(lBeHkFk z#nbEQ$e_`7u|Ra$%tx9wk{z!VA}1R6RS1{W7R{u&SjRTe)WcR0Ai!!_ZK0tGQQf6F zAvt}IBF6n))sk^Gy>IwTmiut6r4N|Q^$Jm&iu?}kT<9_Akj2|UsU5$_uA{iT6Tu9q z^eYrJB}B_d&L<`kUN?fb2AV6))|l_)mnB-ynl5f{dPd=C$+%$nWKGS#bKI-znAVo7HN!wri9s|A z`_%z!FluFdDeAF|cR$jt_SkdEeS->`ZbE^2A-CFuc2*}BHY@pdYh1nRoZctLlx1T? zLG(ji5=O1NdhA+?zCZ%S9Sy>%E1yj)7vO96CEYs8H-jna6?;D>-Q+Qb20*kCH)Nv<{4QQ`i-h~6^1 zXaZ^7b(p@KEkQSSGWM{%taGSdhkST}m1DCCn}Y!vK{j+5x`NNW5qb2rB1@n#;<>Vvg#GGBq`m+LDRUP*w4_ zL8Gm7pTy}hF?1EMI?IZ!_43~$V{yJTI1v$896yZCHQ#WM_rTtK!(>gElOm%dFOF2s zp*Sq^sZD=w@flf>2MVDVl4FHxjR#aRUK2$pR*n5t^02PBz5WkvVY>+wC@jRf{}T%h?w)T(!BM>spsVU*d z0KMN{=jH|$MEBcfM`?6gz0rPRVlRc*(H%?uiBWtx zs5+!jM9usfs_^=flw*vDFa^LsLX%p9*;C$5{tA!Jq-?3V3HZlW?6wFzA3Vu7U>t&@ zkK&Hg|32>&)L!wswBb4 zVO}^kS*CDu_0cWOky|>V=I8x)Q~_ypL8KRru-59`5@8u;qeR4A0n+Z0Qye^yi!kJv z75>j-m3Sp2mOr4Bt=A3W)9IV?xp^9FsR>+kkaD+lXc?gMEFm0l3tM(%T;kLK$Q_!^ zs2h+mP&L{F_CLvfzZKPjD)iA8Iw1Xg8j{!9hPmK|232j|$Vs7J6j3=aZUqBk^>!dc z?ilUyfS9G|F{hSgbd5QvOS5N&b&Qv$}k)|LbXL=;sQu%lU z`N%}{t$Fc=)H!j&MNNyLz{asPgAyxfbQmw<%J1{OsPu2YX&}CZe)h&OHlBL}7szdo z!YYjrUu5b3IrvbQJ+2W$Qy4$^ z@q13r$l>#q@HzuHHg%wYN#AwBRJF|a~hJqNSE6pPp4I#?@f)_H8i206D0~Q9`a5S;L$%D zHD05_wb8*V8aAThqWiG}blCY$+^CTmC?*82}`^RKJb;iwU40_qVz z8K3@ejYl!Qok^PZSce(}NUzujf`kVzpiQ(nY|L7y{8YbqmGf}H8gTN*zT5oD$iy<6gfHS)?SGrKg3NOrJ$aNN3Go*uM~ zeZOj2E-OvYz2)PH1eU+QSF~dBh8YSxWPDy-=*cQ@bA5aN^(1N~ZOjb2h%(6exS~BX z%R9Lcs|eaerZDaUppY^?h>Pl7^fP*9nyk!BpL2Lvn*tGvgaMG7xzDGld$#+%kO@Va ztXpOP*0!k6HU+kNE;9f?4-*wkGn6H5khwLPt&`mGUOcpv*0a9=f(!ygz zJL>EdEBYAZ<}}l(fh@rTT*q&yx8*a;Q7mbCd3jJam1%+MC#(J%7_L;4Qfx5c*`Cmq z0*X_@G$f_?FuXE<)^}XG6KuYDv0$+B_T&^0yrogX5+h3Q@l0UDNNwxRB!V|fS*OkV3sD~e9BXifgEZ@DbRDBj< z;{2)6fI!~5yLfNc=F7`0296Jf&=5D)IotQy%C2KKHE z)5nIW$=xA=fHgPDU#c!Fvt5B`ODml4VUO9NMV$}M9^q;|I z<7ad=%g0>M@?$RODe?JuRN`o6;9zX@#>v6l#`I^*X&pQMm<+<|e@q66ewb^l!S+#D zKn1uQuNwH*0~Q)!K{Yf*)m$%IE-gR#eexr5!7=~~r`(v9g6@&0c@?T+WtO*YbeC@g z4d=$Xh55R}}ZD1pI0tSO} zPwv=MzZ-%1bBh{vAySNChxI$aB1?Y9;>ac;{Pcsp|u3zaO~e&g6#Fnvh+0+XaO*Il)u10dzJHS`@oV4>5 z*Nlm-p5e@NM=R1SN1McY3Hkv>yy4m*up5>lRPh&VwVUvJHzt34>RDD5)*Ni3Qxv9F z9k2TuezTL~(lg|jkjCr_+;c2l6NxC2CK64sL438Gu{?n$qzkhUkGtt=KEgU(YH+N* z7<^FB6)B3&TuWdC3m@VT3I!aDquB~)ORZCFX`}Baa)5#LO@!2`7gjui$x_`KYH_$c z`VZ*z5Ahh&wL6i>iy5zTlY>j5qS4^|Uf=Y5(;sgM+2~LyK;zSGgmccL>l}jHM?Umg zubdr}^Y5*iI#P2p8Xs^wI~4g`0h@4>P`G>oXEBS&RW;^RP|c07vLtYQVuDK~G~zWQ zqoaFsmB5%jb#;2W=0wWq=~HHu>j~_6uIrLcWuESCX>6L2*gPHnx~O6>ZjzPyW(;(t zqd(#4U5_|rD2N(+cFm$LQB5&$;+D1nGOQa66N;B~*@%5O4(Mp^*ICgQ58%!iqknhP zfpBlmC2w0kEJv{sY}1~Fe0--%*caS=A>?|7``=G9A5SYG^c;+>e$NAXaJ#fTJpOOx zaS9;+DZ}z4Sr$7k-2+7Ld#pY{-)xg}#RhzJdQPz`XXNFZEc-A)gBh!_*Vg({k?Bhl zd{oNSX4;CUQ8VEZnJ(+c$QFNRMSo%20hcz#Lr*vLC4b4%)*0w`%645a%|DI}Zvq20 z`QsN@sA6D`Y_(Ca89Em4%OX*bF&XUwEl&9EeIAa(A}0~K3;&qm@qK@L4h zhhydv*Z$J&md`w-v- zK`m)~mHqRA$~l)CX#YrYRm?$Iq1y{${!(llj~HF3gJm3eoWsSSjm zXYlqcR}IXAI}>R^*<;hEFZ)+W6qxvDa@f$(W&{e?xh0QRmUGHM7+IoMlX+XnfYkH| z^;Y}%tr$GeJQ<;SJSI7u7yhQr8$1%elucRI?b=Ha^SXvhpyM^wnUjg-v#Z2sdgPe{ z0-}puBwVA#)T~CI+KJDTi%SO0OJ-l2nNmrkKg|hD=Zr7uJct>fh4kWL}Y0mU()f;1vh2}g5rt<{}Z8bY*=m;>r zL%s}b%hfp_{KP;yq<1s$!NF!3-zAx|AQL}l5BAn1EZQZ@qRF+@Hh;eYV6*+!?z`~) zJ&`& zmp}Ta(ceAN6XuuE;y*DzSJ3}5_OwKQwI^dw?QbPm|Frje5!RFNFMG6qhy78K^*cqs zR~G$+j((ike;WN)ozd^`-%Dlwg5N(nu-uGt~?{|y8r~Cf0xbk<{U&+7U75pA&{iWa&$xpj~r|o}r`l+htS9=;^mtQ0N z1pc$e=bv-?_bQ(!?5|PF{Wt7iH9x<1|MyadzqG8w|JnUNdhqk|v+zMd2KMKY$AG|q MkbAV&OZ9~NKQkRgqyPW_ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line100Form12X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line100Form12X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..96909324290551a1c371f22b894f39c22826fe1d GIT binary patch literal 13681 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 Pi3%`-1OUD>KYsdO59P1E literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line100Form6X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line100Form6X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7d702c561c9e32a08f5a026c820c7e7d87d56e0b GIT binary patch literal 13763 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 R43?+>bMU(G7R`@O{|j!UDS!X~ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form3X3TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form3X3TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..28023f573768c94fe3dd2f82a430d1a37336cedc GIT binary patch literal 10485 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form3X3TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form3X3TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..545d8271836888306c6e03f760b12ed509ce49d0 GIT binary patch literal 11796 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 APXGV_ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form5X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line1Form5X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bd06e17bc3974122a478db349eb9af0c1e4a0936 GIT binary patch literal 10981 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 S{|uHGP?i8lJ&5V&xBmi0gu~GQ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form36666TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form36666TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1f2bc22a210e5fb6eb89255fa678ab3e45182d3e GIT binary patch literal 12270 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 WStt;Re>zK4fH@=p;7I@T*Z%^7aPY7I literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cbf57fb21d14ee9bc05ce3516ce4aee20f71d69a GIT binary patch literal 12183 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e29578188be9d3dae0d929a171ea551f4b2d10d2 GIT binary patch literal 12174 zcmeHtbx>T}@-8mH-CctO4esvl8rx*)_9vf3tS)?$zJwZWVcG7;FeQ2m}ZS2nq;_SSda?NC=2nSO^F# z2m~m7aVJN23rBZj4IgImUGrc9dZWVILyxO;7S;K#x(hyE^Zxx#_yEsMIUf|2mEPOflD zT!!~rj})?oy6I5$jJPP`R(sI&aX1h!J$6D(23X-Jxgx|!w~$pfE%NoX3ACk5bO;jA z?C%l8+gz7{jYmldRQM>vGO#x)D8BE@^a9#gv-!9ultK*%6=Uh`l56-^=&m*`lTU#i zHGnx|m`)Yx<7{{IH4nh4k3TlXPOMA52a5OMWew)$DG;X*{kOHPK2J9WlBFVJNh8U`N2+2xvth?qG=G;tOYa3??=|Rijr$#QPf; z4|oPz*Ayw2@{Lazp1>c#i!^CDA9~M@1ctKa;#~RRH7co@Q;8b%i5J?0h*$;05x9bB z!FmIVx~ryFm5@L&^=}ms)lJ+v2T2ndf%7Sa`zXRuyb52Z({P5|Osy6x{f6u*eq0l3 zs$28gRGWTq<)id5Hn;EoE|JlNb??WllsTkE$%%QzJ|R6wlk+1`ub%VtbC%C1Zp6N_ zp_Ac|7_#D3aM=30lc3QhH1~oXgcc400u8JgZ+jLmCs#XDCnvk#f?2)>$T5!<-QU>e z5%M}K=s9|b9D}PUQAu0rtmCat%YbY-l+*yVdD+8lJjK@ZS8<@^r+C4OG!D0jmQI_q z(FImr7gY%aG<);vkmzK*GKBj8nNbLWca)NH?5foW-*mzq2iCd_ox=V6F}?sHf<8u1 z>Xoq9mq%CXDwPJ)>q4d!0C-ialNrkxXsB!&EETrXwig#SylxSU9)cCMI+CR&)X7B37#R zun!Hy%F{u|YS=u&`|cyA{7VSyGAe%z;YQ}z3AIUsopm>vN}9z8I~26?{6|Tx2guLD zAttw7Q>@8a`ivCR$1&Ec!5N_g^YR~R1}oiB)Ka=+D&LI&5)XW|qw=fv5krO7WGya`WoOk*ZJV z-b;?~B#^BQ_SvO5bQt+pcjGFglc=f>NDSh4cet^B6GV!;JDkmDit}WzEd|oh#&}$y ztb|b7H<$t$5w?4KL{gtd^3#9>pGAg zZv?V2zP901ZkOrj5~KAbFJ8HJ1rcU@m(Bs^62J8(Iv&Gsmc3*hFv{T;^&evrvx>DO z$%7$PN3)78$C7h+gs}Z)k6p1-r<5&PV6KRB9yC{6_bqrK*OL~{rtJHE!>+!O2tWS^ zxDvD?lB{QCmr}A)xt!;-(fF@G1p8R^mB~Zd7h}%Zji1K^Rh_F3OqC-lNfHVgN^y`<}O!KXmSG{k%oqVAcR1G1e^QsVd2k4|E~}M38ryi zr}>|Kw7(s*{ltnKb{yUrI@RIw_CaNY&-ZzFMQOjH2^DiV+9;?skYl&f6momm1o*7*#YhRK_HE^_EqTmQ&Ki> z6QL~OQG1ov7n-c0Pt0i{lq3IsU{KVJ(2Oy(60KEIcjr1Qw(Dh1x=nPJD!SJW;imxP z;cF*{HBQ60gw6n>$x{NP;WtQ0Iq}T3AvSkLxVliVJ|A)ok~aDVp>-vMT!^))i{x8i z)bBV(P1&35dI3O;F{D8aA-)0*eHI$GItJtf|AU(vM$R$e3s3B+QP!!jpgTs?Y9*(QwtQo1YR+#W&^A5POrW`dj)BD$u8gI$JlNQfhto)Ji{a z`@{@$!biW83FF1i$1fQ5HLy~f(u8Wg%$FuuV!UcT`SxKMdxGeLT2JyUJG;Xx&ym!O zv%&F&+;UUfgRYo}bK?G{UfdIf?M`Ou>8j>s4&BQ*^U&zgLU|t|jGHUvNyLH82l1+x z`muNwANbMq&^94$VDDG$g$Plt`gpHnijq`B!Ydf^y|*?APE!QGD$q$j-l6*yvCIuk z0tluvW)$vES$h%%p|`DFWsd%=NTN`8RhSmqtLKr-T3} zhPg9J+FDR-C50%KnmAK>)alDXOmxlU7bRRIlZJ2LX)a@$*6mL7jn&t}X8YI3OJGUc zN~9|0uJR-lo&6yMIiX56Skdkk^o9-CEPG%GMSA@;uW+y1e3c8&@+&7b}PC+YPk5*$|9fwDpJEww# zuaY0iFv8!H?-^kC&s+WQ;0O(5u0UC#EfT*c^1T*`s;M36~hKhw5}JSlgRiHt}Glo<<>*G_x) zOrc@SyVc$#{jk?a#*P^K%up?o56BM3-<|-BNF*#(kETQPZciq-?{h(M>RVO~VpX_E%{mR=t-OGuQ{U5Rfo%DVV^E zY}yfuR^wFjX>%R71xh74E+vzgPAuy*`wFNcmz$KE(~(kr$Bv$TTks8_8Gk>aUg7d$ zY?3H}h>$z6WL2VYbQ|GKOyYygXLqN&Ep}dE@8wA&O7`t*@i0k*KYqXb?N0&V+jl8? zDZ~0@0`o0exdY}hNbUrjt@~e=LbE34cuvREju2tVCqAPl`C4P0395fC?mJmRR2bQ< z5|S>-ruNwkU50OwG^S8Cc76x$-l_$rAs^*UY`)AGC8lia5O`oQI_xeIh;6R=^!~Sff>NPdhnyovrQA; zSQua^X-sVO5Pr<>w+?&jFi?qt|AfFKk!_A{|5bwIOxQplJ0Wre<}57(C6QTeeyAX> z;&(zcd3#oTITes2`XYW34aqF?P2r*<7EkhujEW#0O)=@cj(O}4S-u6cDbBXjny*qJ z2QBnq;FOhD{%=t)bT~UdVsN1RX!0=*TcW3A?WHtBWcYnx%+Zf+M#W77(Ke4>suY9* zp75`MHr3+{>f$&`PsUKm0iEohbEzXT9(Cl5p`4Y%Xv<7A2XYc0CjERu&rP$%I2d3a zSttgaS-J9b&u?mrOR(U^oMob%XT$j4$fJ%?!tT;vh-k6$5x0K88y%q^Z$tOhWpD;} zL`O)|AV%222X72Zq<61cVWUD_rpqBCMpX7fn{0Ndx$eR7p>wq|(nP)pfHpB}0sqkX z5*_#K-CObb%;0M0%4A|a-r#Ci@U?X|13`Y5ZS0CY-IhYrc8Iwm9)xM=P)E4Q@`&3961iZl~i}-7=Py zSvEPzm)*Uz=aQ_=>!RL%@tN^Zq)E{OJEFrLsrU%rXuf>?<%|=nRkjYwgwKN`S~hNu z%7go0^)Rey^Rew?|cWVm=3znasKUvjRJ$+>&Y3zWi*+@edmZ4Q+_x@Deg3GkPkW2G7uC#a9b#G>{w{^xxw`QR67JrJg3w zhCn9vG;Ck4wMDLY{+zJq)B{v_l}fp_>o`!`O^HrJ%hozMfH? zwy0(kK-8iy+){rXrOToTDM@Pi1bZEl-Y`+v9op znUDg$wg-l~~HEXQYUs}nV)PqWxdP==rVw%vI}y#nWk zuvM+7>z7NJjC4s(xgiQ^UB)cyrkE102p~|!bxME*Lv_=7^z)GdNaVLJZ@uy~m^BUj zf*+T|#$$fG?r2RtG)*G}-0P%uvn1~@GS;E41~GN=1y{{#6UO<#JBi>53kN$H>Sk6o zdqYPPC|=S{F6CBejr+swyEN{Evq1ReCie}}M@6W*+h7QOD7C3cSr>ev2QeuUfuop6 zXr3P_j<5r##24}f!h&ZT(=pjnzG9mAZf*_dd&$TCO_~rS_X{n0I!7Bt05a^D26Ho{ zK`7ML*mtK@fxu|+>FWNtICX!VKq|n~`k1x7jb6FI$$;7UaIm>1+!Yz%d((d?oqcm! z8}+yiiew46`GgjBM_Bc^ZKWLGf3dZ_nPB99KLl-z(X1ZUWFtnsL>*}zNmtEfhOg~5 zjbW8%J($Xe%>%beI;V)k-#rFtDP)kz*gx`eD{tBl=GS78OFsp&EC=22?{ZiaA=3MG5q4p6FFmQ=@ z3RuaVtvQ54fqmazG)WSDkosD2x{!npFd$*a3E740_bjB01Z2M~@$~=&eZy$PQMV17d$1?mvpt@BC1{66ijAVYHZ3G{ydeC^X4vs*{ zJV!z;=*u4y^QL)3&XYP%uFm*29EDJI(6Ef(>0-Q5*U`?2xc!*7nvgkZL>IOpzDxtN za?_nBnq?I~HYm3im0MblVf<>P+p+xMFj*!2*q+a{!+ zb39|+gU;Q=>3hmFGwu;ya0a%Xa1>sZY9sXtJ&czd;rusz{q z9d$c2lK_qx5fkAChow|rr~$~C0qly~5oQ3-5n0lnKM?Sv!(EWuX3#OnamdCMGrhB7 z(*&E?yL_|6$X%e(f`9c?p^V9H@FvryInczbF8X$#D;UM1*4>bk8*fbUB-_ccaQjSB z-fe2ypq{hyeRWrU0f86W6aCJD^_BLj13EFx4A?Kg7>T(>`h~w?}#@Y;PSAg#4HDN zfio<2!f$|Z$4el${^z?iLx>t7&jLv7mp;{5fAa zYz%PGHb^WJ7($9{y@9xk; z^3RVMDLprjC=RMS7kbtMNJ^_eym-ed%Z(#y+?@+(Z1mZ}-4)o6mS%&qIyOt`=V58$ zlZ;HW-zX%Hb7$4o($6C;A1iCqU0!@|s`ikXqK3TrxTtm>0G0QxrSd`qK{^SFD(iVe z5E71Cv6!wxUrG=(fjU3A-uf#HQgM|Y$dYTuq2LEQxA8Mp8x$r7=#%nK@+@X>rE)TYe70AP{FQndgI0t;sZ^J=8W(iq2w`acQk=Rpx_%gUU7Btg>ez4=T&8*knQcY;%d`%OL`@rv3C8x04s5e&YnZfW!| zZ6Ax%Gp7hutEh4W?YEZR()@SSkDIDXX(UDSL~L*kaiV-qM42iDQMxzo5d1QT#@lnU_UYX>WGARbd zIbyMIeW}UCXhnQt9jp8V^=nrc<+G*g4J{A`#=w`1`%N3;_btjJRG8$#$j=q-$Xnn0 zR*^+v-=?p!%ae`I=*iCHsyP%4pTIyh(CDL+3@4MG4LnZKcBTJ`~I41eMffGO&`&BN=I0ip;P+raWM&+P$v*^ zAF;CtDJFOQzA6mzc4vppZ=tA(b9%xN;3LTE1S42)^@m3CV#ktA(rwJbXye_wo zFP$;sVn6;!ap~Jidw?7*74|fLMK`pN;kO42#j_rbo-_YEHnw3Fk#LJwZ>o<$QvP7x zG=hvyAas-kboQ8B6*yjR4Z(4E`S}F&d3*Evpf;*qw>s13G>mptK)14;I-t>@BH9NX zc49TFov!O79eIMRUIU+n57jB2G>JsLUFd+_k5Zt?O?Y`)D9oSmRv;ZtIf?ZoS{D8F zY4T|MqWfEKNld9SoA!2v=q>7tt>7x9^~hY`F8h<=URF`wB;U#lZix$YbeV1vEp|kJw&2c z&D3XMJ$HbG6+KxO?ExV;xc9s)kuAKSjl%2l#1ud|Usnyw4Pn3Mm}?0%Vc+dhWI<{< z_g`&SUhO1Pu672@^^jt`b;T9)8VC-mPNhqBh;%md_jyeURl+LooW+6Jn<>+buBZf~ z#*kx{hHRo(GAb=I@baxGZy!f*y;V#MHlstd12u=JGo@WvaechNV4C>zLgbKC?$l={ zi{Uvvdyb(@{?Mz$u~4#kB9b*ka3d1nrj)-sk#a@LyD!`(#lI8sQU~HATROx;CLahuDRL^C_m$nHfviFx<1b&?j zoU+GP?Vy&rjkMZtG9H>upGxu75IYo7?w3o_7wafo{5T9;QFgn3T)H@R+FxNZ$duRH zE&%TA*HaI_TphFE_0Kq*zSiLc(KI=6fd>3qnSBOk>@VZ_vgfV1bO~vQaGx>3jNc1m z=X?E7saJ{_SG?SE;VCvC%ruE4V6UnzUwiJPH9GVn{yocdDY5@Q?qv8K*yVe`Z&M6B zO7;6&{jIR@N0RvWO2e;I@y|L#SVB*9FDtg>CG>;1w{Oy1II_4pH)XTtF0|>*5*+9~ z;1c`Zw~pANdwbh?Vw)@DR-lB)5;c)&wiPOT%M8!D`owpMxl6Q$=U^Edky!v>GV`J{ z9a>3A?#&=T2M4JpT$TDBzc1j^Vof|^2|#FPQTB}w>+p39(PVk4t;3lyd_9X&!!gsA zzji2}pqlQ(*LZ(20mrY zg#X>HYt)Iy$H7m&`+w5F&(z&d4U8s^+4ixb|Ew@9_)-rBqswg>$WhGS2?SAAIjH*5 z)Pn%+{vOXcDFAlyebsBD?1y6(gg^q0NEzInpIRU)ZgLjz8`H|sA#QMt4a2P*s zTp-QZn7|kd_@V!a=JDI7tIyt+sm^ryx{Kj*@y&?ZC z{DIBL@2x60`e28z!9I!)`=+~R^@TS=zZ2v|FQ@Me-*RN+vXS|?^3Y+^21JbjykB-Z z@=|^=tOc(rE&R$5xJOLGCW&D^H6(ZJdahM@Dj1!)t9RBq1<0e~sb_F>VmC>(W@=v; z2>OB3Ob@6x>)o>YXxsO(y+%?@(WNhYH1ld4K+TG` z_!NO+LR=G7_v$VMZH9;I75+UlU1|%dz+}}09AzU zh-Ry8L4QAn`Qkm#sC`Vjn73+k*%OXil7V>E^u;slfp6+yX0VIu^WC_NYtJ3U1fV09 z-)HAs{bRg$(AmHK2sS%TFug|qv)P$AJO9_}z~=VHk(tyJKf{U+?#O8u-@2V!4AClf zZ5LyC6gIZB_wX+_ zoHJG6x)L)OcTLRY&aDs7jskr;X5~*n;8bn7jKz~ zu8_Nn>xah4mZjh_6Fy^;zradxcu|W6sP20%fix9DH*m0YvqjuSt2!&(71;53dOiQ% zNv?Kvete_ZgBY~?I>2%L)zSjNIWdz0Vp9rnp%;*l@*e4GbaL~8hp~Kp-Fl!IUfc$m zkGw0;Oi(Ewag1!uIHDCY&~%jI%XhLFhdLBSa=+B8`eH8MD4nyn5pl?{9({fBl^nW9 zJ;&94d)NAVM}vls2M-s8Wn|Ii?- zBL7!_zxL_lMJ zo4$~zI8XZmej(j}`w0G+#NWCEo}xUhb^b!J2X|%t1IkbO^c3Z3BK;SNCeBZkr)l-4 z08bMDzW`Q=e**kU2Rs#hx}o_cDog&m=+o`ZQ-r7F`4<8ixG?Zn9sDDeehT=Mi~a(n z0F(273;2tfJ_UTr=6(UPQvU?}Pq^KG4%+x1f&Qdw|2e1t&3`h}pUmqi=wGSRuZM?# s=mmrRjYvHe|7!^Rvp6sPpTz$Nh$`~1U?=`9SfWE%!GO6M<8R;o7ul25CIA2c literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeC.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeC.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fd0f29af055f5662d4b679eaa94fae0f591cd264 GIT binary patch literal 12018 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 a_@4n$Sq=v5#6N;18o&}70C1=OarZwThg&}Y literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeD.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line25Form3X5TypeD.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..52bab9d958f17fc5929301c65e924c03b0381de8 GIT binary patch literal 12074 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

#TwPowiYRpo(NUb(Frm4wd$<9o=lyp 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 N=CA-j9{ta!{{l0^Zw>$e literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c3ebf64435d03c45ac9409a5527c59c17f851321 GIT binary patch literal 12162 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̄#);P{!P-Kw+`MRw^VH^DXlWE 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeE.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X5TypeE.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f93024a8db9ad5baca407cb4884089aa87177580 GIT binary patch literal 12244 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X6TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form3X6TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f43d4058904ca0e6fd35c524d5c96e77e92ed72c GIT binary patch literal 11684 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form4X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form4X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..459cddce2794607cd74fd19eb54d8c53ce3b2135 GIT binary patch literal 11585 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 A>i_@% literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form4X5TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line30Form4X5TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a1a2e7e9297cd5ac9838c967fe3104aedfe1f611 GIT binary patch literal 11703 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 kyl? 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 CzWFx* literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e2c98f3602bd361b9e319304e725e0d38e04bdaa GIT binary patch literal 12225 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f70b47bcd637f09f3f3cb07a017669444e7eb6f1 GIT binary patch literal 12342 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 LE253@=hJ@y11|l0 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeC.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeC.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ff7a7b4b770f3a0ae959d2d8ea70366608d2270a GIT binary patch literal 12366 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeD.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form3X5TypeD.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d828eabc195fbd503f4ddcab276d38bf29a3a8f4 GIT binary patch literal 12386 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form4X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line40Form4X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..564827de805b288db57907d8af22b36ba1d925e8 GIT binary patch literal 11709 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..117b471aba03f69b0340a9d3fc4833b6ab8214a6 GIT binary patch literal 12588 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 PQ2^$U0KjMZAOHRrl3AB3 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b2fe685002889c7ea076ec0fff0356ad371162db GIT binary patch literal 12579 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 i@Snx|82(B8ZvjzR9vVE;r3xje1 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeF.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeF.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b40e710da60f792a86b426397feed32bdd6c65b7 GIT binary patch literal 12558 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 J;uwE?`(I4jYW4sC literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeG.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeG.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9eb33c39ba7d72d5253425c226ad2d18ca69d22c GIT binary patch literal 11462 zcmaJ{bwJe3)?T_qS|p@fx?Yf4x{>Y_m(Hc7q&ua%MY=nrV`-#QK)OR3zeVqT!|&cZ ze{B5r#LRPM&d$tv6lLMyQ2~!FNMQ~5`2O#P0{!sT)>sj2Yv;hC2o=MHK0y8{_D%uZ z%LfAh=)nR2n12^Dva@4$wYEx+?T~?E!wfv~J*wDPHesSruF~;mAi;Gn)TcHvT>x^U zB=1bzFzWLoxB1YnNObhEHlsPsgsmQA-U)fP`CwIBgJKC`ElfF_ITf^E)f+_?)Ou|a z@pDxY$fR|o)*0VgA@!SFfA!IX-y)AjlzS7<6J8o}7w4dASx6O`Yn`joq$nL~tZA>2 zpxv?fNgg5Lic0=9j}?j)Oi%w2n$`?Y=}voofC@V4GLwrS?AF?ldv1JQ1IVjX&2C#p zW~3f9eAQD$*Vih+K^-nH8Cwu^1)zT~Yo>DC8s%pTTRTu0*Z=h)0#1fNsEGPAru=lX=mQN zKcrvjK^R;C#t>}~T_iFp@I*V#B00PG%`*i>!xt*PYPG&ktUu?Nd$~q~<=w1TJHHTy zzwAKF$YcEWO7!IxXV2^@o|FmYk)pot7YX*Qa+46Qbr&lX9`d*0)I2mv#tjI8@5pjU z=&#;?xh&WP_!<`ieZkNAl)~FvpN7|XKXn|;P)V@Ky;tyD^sHOev9~L?=6#-85R#&V z-?bHWGJJPerNhOjwt$BeSAVZM)YMoGR`TVU+aQe^J$lWOXy~9uT`RrQ!rEHz6bLG zm%lw+?_A^m6LOuTlS~FEs_gKs7Hc zn|)jr6SvM%5bZd=Sht#J+B!mE01+AmB_ZH4d23?$TPD&X!tz)#hp!+#?EqwyL3Vn zv{dM#S!=BkraU!Cme+$z)_d``gz)YJEoh{rr{e){uJGoqXRc{?cH{*-$4p) zYkUcvEaK2dOZ_W&sl&7AQI90Jv9xDIZQAXWw)_F~r*F9$cK_&^u6*h|9>vnTYc3`qdJq<6MJU-w7kd-|hACzTM>fhsB<)qs$?NQ63ddW!t#{li)@PsgQcK5#?&w%| zaj+XcB2xLXJ`5vfmN`9uzQa61`=7H5928nttDkx0KMOqlCE#KUwsbH9fgFF&LEd6H zQD@K?i6R34&;Ot7PZhSuU`416*etMOw&HIKVYWzyCGv1HB89xjMbIWQYf3XWe~S|% z7N1vIW3WPA+pSHwl>^!wPIcqZO{ixv7f~R?!`A|O_T|D?DT?tgAf5MJ9!#NA%TzPI z3F#-x@&=ACO!Z+vMEXsg0Auh3?092-)7PC&YOe3&=p{FzvuU5Pg9yF9Evq%cKbyt$C~2e`y!Yvq^3x<|;=%Ngd+vZ(d^X!nMqzE^%AWBjzoFMd=>zOM8`f zgo54^#Vp^lab>#aQN(u>@-NgzmfU1b3BLy;ro^*fdkmFF^GMqBW!T;K4VI$8-Vdta z2B>TdqEr`!RwG_>;Gf?V)=2#!$I+xckHRnGQX9_WJRY7Q6%6-oi=_@H)H&>GAY0LN zMXY)WhYHgo*zS|!n}p8_!KQF`;WVRmI`56%W^dAJipIj9dqoy+*AM$-CVjSMPxGFc zt8*Ubm%$buiVV>Y+rW=HC(r6vnQIGK!#TbeHl{Z=l?mb5^*236P>9ar$Xc&Mmxg`C zH6R*eNaGP3mn!~RdQe|R9F!1qv^W&aUZYp6e5+}+&R)&5;3J5>bu(3kx-bHtardtW?z)ewoG6N zRAT$Cn|)DpnsA7M^jtmoR(sar*QIePwg;j|0b}Z0C%rB`pfq{tR9NS{;RQ zej>9v(1{%1L45aI788`22%6?1<{WGDVzsfqX zMFIed=>F?MVSijG!zntp3lf+CD`@9Jm>%_1%IA0qa1JgJ&!l{^cD^OY(4_`b6;WAJ zGu^B-L&BU#?RW=_4X`cS(~~*6@SuIOZtjP=IsSt zjH%{r$<5unma&kirpDJjWoB)42Ty%ZdpCL06{;sIGfFX9QB8s47yP!}mP>K&$y{1j zb}NED7*ls&y;Qd8QzS`MubuG(C0usdpK_Vi-zjZ;oWJHZ8(hEjSP1s0=SVH@{G8_d z8gxBpb?;V+teTe>jNOD^Vf0u>F7f)+D_VqYJOUn?S{dZe}< z5-J@&Fmew=7+TPSY7HQhuiZ}WCbp}a)ARy`ujlteMIQvcAug{B@n{Ohnih9TZbl6a zl8i|ZZ}-C ztZqVGXB|_vXubK4xwJgG;%L0*CHra_o5e2d*eb*>?A$8EKJ3&=E2DnMiD*l|M*lU7 z37&hSU{L*1!O9|eTcfC#L(rNtkVw{+$YhG2`HZzcSUC_SP&$xa2rm1k#%5GDV-wOsVqIEpsX+;m%4Czs$lnVTNR#L1CD&XV$dLFtIfju${V; z>!j;AW6T)ffpg`jsP8Eo({-H6&12Pt^8)B*X8k2?wn!dkyt{!g(N7d%sagwBg255; zt{XQ?x$gB6PjCST;Wu5M#TbHXTC;SGpOG|rVeEWsg35|96Aw6%hp6Jj(9LKDN|voi zziVWs3KiQB$&rGkib2ha5Nqt^;RoM)O+cKoJuR4UHxp0K_M+%w0n&M}W|T^0l^9XF z?ZxL{J*m*p{s3nQ>pXZV3OpcD2sk1H+JV;m#61zdK(8jK)wdfW*q;FNQgN0g-IOy& ztgX8E^K4K}v#>fv3Fe>P;2SGfrsluVrvl8*oWZL4^qS8{gZt{>7P~&#H(-Z?Q!>kNb!=+TVGWBN0OKKc9Yj^?TM2Qlo3+<|9 zj_x|gdb#${>}%9$I&6SsP=~xM1)i9~z(uq6{yUt3RM=luD4_tvpia!E@aR3d{Uaua z9++C6xF>-v9vh|#u$GV8bE%!Zpdp%Pkb%J#hb7w)|A|y7bi|{sBh1D^=0ngpJR-zm z0sH8cq%r(Hj|~n1_=qVqHpt*aFAdAYkGc_luvwmY2W+u`Pm9oq-IvulwuWrT^U?t# zH=4``w(-QY|NRtK9wt^F9*9j3qb+{0{S)7x;sb%swutZZ3IS3S)WC_tpCMV9N`N{9 zSTEP%cL)y%BaD6beYE{{pB8~97CH{PMk$0bLC(i<1RZl4d3R)UGbYmLFr%+RsA=o!6*Y>99~M+MSJr zNC-&3dhagW=%pdcqp_Z~ngwr$G%JXYU?=maJ2J&X$MZNHe#UF<9gdp?{i7BV-e>wp z72Wl!>~wiMMLR{XB1{csXEk&j-A+j{x`?RE%8!qbh`!zEG1==`QziPqQdp0V(D3{k zh4$LJNhxMH1hIL^`N!D;T?=HF6Gs*Yr>hokC4M>qvLkT8JWeZSJq=1@DPCw#V4xA= zViJS8p2YXx|G_#tb~p@(4%dhJAJdho;cw;} zknf#Q_MvCJG#Wqgb^W+_Y{43Z-XgyqzhEzeo9gR7PEU4L1|V`v?dneT$wQ+zq2p}s zBi;i=TWg9)e4f%WD*-7xmkLvQ3KrheGau*G4&XBfC06i6 z9@}SLL#Z>yc0-YF7nN5!28t5~X;lp82o2wt7Z~^x)Koy?#{P~28S{)c>uFC6TXJkA z?rnQAZ3zVLkpBDD`0?Nk-5NWZfviEl9lWm|h%qA&0e~c;Ux$-F#eNF^-0vP}t=JNA z5qnFnc~=~IT29dDsW7FdaB3OtsdLSZk)($?Z1uPZ&M7pv$S+<#^*(7>Ft-7{K?<7^#ZyIpC~Gk)!Bs`o^4@8KYU>*JSJC^|_8hLX zEvuLGosJRTo)kM=9R~DT4EGQz_M7o%h*}0YH`8Abv#(h-Vg-2 zGqm06_5EPa^!3=DX%xnhfI!P-*Vp^opv$)UnzVogo~NN`2A=l=qy~%P?Lyb5Q(dEj zCsn~eE}D@>y&r0bkqJ0IZ1-$MdAr|S_2fnwc%4pJ2+&^byc5Y3&t9bmc-D1i~*NuJ!i&4RsvSSr#V3JF{&suqB7|0*wRUuyF#; ziAiykbC#H7UNj#n8rTg;qAukW2AF@6zHwZIpRgL|j`++n$)4UZ6>05klk?0Jq-`7H ziI0NfqZM-O*-6Zy--{EF%O2}VT$$5R{su1rWiA!9J$O$FA>%3XdLajuazbe%GjPRs zvfQvxBj0AlXtG}%RlER(Y-A_DaOg4>3}z8Zgd*qqGKr`174Cq*h_k6bu5TT^O9i*4r5t!bO(qh?nCJ z3hGf(HMLHyNa?4;?0$4&w+7IjF#D7wt>i4LZM)#j-;Qc*i#K|FcXCq?&6e2zt7)>1DM{6UR!rKl zdJO@2s%ZKhV2-~m4@=5d<#|Gk*7mB8!%c!gvxDT7^It{zT5^J_*CiBsrSOtCtb5JG zad_yfiPkb?I!43 zFNXRR7nW}59KudIwVI>?U8R&s&0DuTRk;)f-+&abN`uf5J)QY`Ef8$b<-apEq<2e; zJJ%xYvmdoaBvv73xSa}zwAJ|m zjn2UP$^ok?kIi9;f}~V_%eQp&gGq&++b!5 zLl5gi=BJ!XoCaS_0t<{QJ84GNiR6j%21W89hB*H(N2q4RatH6td|v7&1!nmcTbwcV zw>{MHnwlro1b)by&xOIp{Z5I8D&m~Yn7qvwsL8d|%qX3J&5ospsX?Q@4>LzwQf|3g zw7ejID^i$h5t{(x$4BUW=$<0%2mFJ#$HRd^tL<{0_^O$YG<7H|PA5oS^uwGGKASCu zNpq2&ZGx%0trC_1n`O0ymO7xiQ+-To@&R3(=bO6a%jvXU$b}rw@mfnSYtkQLD7sYS z_ZZ)W7(688p6{X8j$UTfQC!`N;P_Se6bhOWVdSCZy&wjzzeTcUHCLXlG2hE8O|YIe zUEJC9hx}K4IWg%9G%oM8CD)uO|QLx%fdW82JJlQaKu+=2p+ zBV2pFMXH*b{hiI2!@Xa^&3)>32^FXg$cJxuL( zXX~~PCQbJQ#%%BG_c&IRg*e(XjpYI)T-=LEuNeE^;pK#vS=pkmDA~C1uVw~Pd_iv^ zQ>Dnl5+g7;;e!iWWD~r-2s6bv)(c9vL*A$K4GbwWIvnRiDkJsZeiN|WKqWt=F@r<0 zU$45ry*gQ#Yx1n=;%2bK8Lvree9)|sIeo@dZ z0f{nagzkuWd6!3MzBMJM!zajqR7Wk1h1T|$#Ql_17%Hc7qukduK_rs8dOQX z+{~m7a}c_xLs|jfFM4f!Hsa`N##cZSAO%953>SRD*AC8SypbJ+xq3FUn{?Il7xN(c zu5X=~3^+4qvA$ne6-!|?>gpq3DQ)<-q0^!Yw7G%d<3lkJ*x$$pEY`0c`c*jO?C`j3 z;58dIzP`BkyO)xiWAe;aAN3+)`uX9##**XMoB%}rL z;{~m;WV5wa{}HT{(jmBQ`m+YaOxx*&ZrPjXXkSJ>tZOb44vS&RxGic;QSw{bS|OJM{qsIb%DhDmv3V^a^IHp55sSMi!736kv=c)_O?0K3i)yI zjjF4+>PrcC%A#gdtl3)73xtH6nn}AxdvO~YBYo)sRYyEIqfLh3_|HQ--ttK&R5%5- zx5Bf2-$(+=YBX7MsS@kz`9G3&@H0DNJRSc*$0JhRL>B4`LwvqCBE0It&r{Nked0}p z0uigA_@bOE+L9wmqBLIQBj8hL z+G7JAeA6$zae+k~%|<2xUOitN2WX1IrhQ@ce-`{Q%*aC=Pr8?F-0x|%kvfryd^yh0 zSrh&(c`m(nGWjU?Szz>sethVatSK^YNZ8FRn#66!hwe~ki85hnQ(Zcay)6-}kdJ7f z)0?LEvS5Ka^kUwt0hYWfjjttf;vxo``_*>0{2XRY0UJwB{6~l~)k52}1dC$ycMYRV zW?h7W+WTUbo7JQy;v{6@$ck>xeGi?;gD)AUO<%rpVYy5foxI3p>xaU`=l~rhloStFmfQa6cZSTEj z>O*vtB0w9Jc}`@Ql=303o4oyfM@V(_p2~5OpB8fcP^F#ervM}%elD`fw_5uh&rngk zEM1N;C6O#SJ)CeZ|I3u*q4+V_L000?9czjYVZ%s-8p4TR#F#-amS+Wi;5^2PRw|!O zMKOU-X{;8y24D#R9Ngx%EiI$tRqFd6i{L@!3t zhlOlCuU%Xo?8AwKnCB&^J&3q*A`Rp}CDDo}{2~fsi+MS$7)5Vh(g=Ri)0(Fa_S8vQ zj;pmzbPnvA3aHqsxceG76Egi-%E*ivhqlpfuTx5ohO$vu$sj03hvle$_>{^@#K137 zWgaVN>#eyYahpq`bNAO6#)IH40`rotVB@&Que#U4Dqj<)2SoVldn1=0u+$;srzgbt zFHHDP`3@m7^DH#-1@w#SaPpcQLQh04UnJQY7*6pA4d82}w7N!BB5*d|qpckVz`G-~ z@-Hg)z0Oo1ZU4x?<~8`xe_{C2)z?JZ@aCv*{o~O?#m%}VVob)sYH7JSLF)}VNR+_) z6DWPQxoL|Z-&j&+~BPB*33v3z~Jo^1A zsXgktUhFXx9+Z}KekRs7@5`R*+jWD7wYx419{lmbVaKoX-R9B`*A~WJM}ITfSKrX3wih^6+@~FhGji5RV$7N@1Inf1fUR4Y{g65|vE$IIkB|%)_|9 z2vju;sS^{+!{k4VzT)+~qX%*{p7G=>TyX&rft?v49`2 z1vm&pZ1m(r5tlzDAtvmaXi08F(&Sqe98wj!dUfl*ZxzCBSNi_yo<9(ER6PkfxyO@=!tWfg%QP4h~WFEk`vc@+2b@dlAh6Z!G7i zFVh67{zd$(aMfT521PSKIAnh#^Wz7;A7KYQYLr1$HAvy40GSZoh=w)_<8eww?W%z{;-v3xhy$*0rdQtSXlSn#H1UkcVWVnAhH zvYaJ$({qZI{!!aJKBoe%l4RVy4bCK$^v{OFerP7ri!oxf1DLG7r|6#(_@v>IT`Nq) zygCJyr8$0n9O<-SmFB>9!LG}>H}>!(L*RUL(yyh0YH4x<8V*k5%GXm|Q;40;sz*7L zx>YFPDu38xP;N^Lod`G(Oa?JS7Y ztxa8WP3l~nU95|XG!}&XJOaJ4_jfBzM($+hJ|6^jux?AH>bXLww=b8OG;} zpPmplzB*qmi+&{=(cV#3t9rP>bk2<~(F$wQ1tG7*i8ne$vsn1?^Ty;a4uVbzT&N|q zPJ0Ng0X{y3UWGWA8G%7>RUEk}5Dl4WJP*R5w|2qY?C}diS(Y$c ze`YnA@^)ky{$#B@9sV_(z&>5)m=F8qsAl~=enBc(9(7{N=w)jQv?BB=Q!?8*kbsuW z$wz6*C-4&~l7F3^-K>?>As_-x3=X#!x0$Sm_)F^rSCB*YfcBu?7#2k(`GyygWU$6M zyviryK1LCdz!G$~PF7S`Bx9_Au`d_a&&fr6Hv9A#bPWlBd&=PXp5~W^HZY@KyB+*z zpOsvmGF6SaI{*hWOO8DBHPJnpFPLvK2LJgGlX3BCzqa5|c~yN0XYZKjNoVCHx3sj zvm_27)GNz2YPG}JlQZBA8^5iw8IP&|V~dBa-f3THtIx~x8|uop8a}}V0dDNJMRhi% zC4x1isEA2U(f0o0cY8I9BnB6=TYYQebov#0t?65*3=yGo!>{@WwTSbIr{pU_3qXpv z12jzB-yHSgyy;`CMyY?S=k`_K9wccg_)#^dDV?4dDYXo9GWatPW}+oBeYS$g z7GEbNU!ZNjbDPq!hpXn2uT)9v6r7u?T_=3=?&+Ibf4@!sxOr%CLC-^Zj6H~t{)74W zj;bOslaEXMBd?G#r5|^zjiSxqsYGukiK0Az&oV=>do!XvPe9AHt!>fX$f`hcuIMPo z%MI0-bSJB5yl_8{+}U=_3von5-chiVAmqqJCa9#;gb7_-Hy}wRbn%;RyFFuapRNLF zD0SBGHE?ortFt3!T&D&i^~#?*XYU6UdtdiPf}0?hffV?Zso3SeWBIRZ-~R+B5@uV` z1r$a}C~JZc`VP%?zr_B&sD7f`8Y^$<&kAK;1v~_?UJ}-l##Py~~=>2?LyYbB@3;*#dT^==FH+78+JcT7+h+ecV>e^MzS5BF#7)azsyp zO&gWxBz(!6a%?-bR|`z*TF(9sH&hpnCYDdG6P_55XY`Yw4%suuSjoP+CY1X=%DOeM z-E+y}1^8#~>A0kPVgt=R@d&@}$aO?*Z5%;1js~i3b|446$NWCe zC@Ijp!rjTY-XMC6?JYU%SiuubYFbu|9}}Qf7QQ*H%2^?zg<*I*Flk~mJeYjkHlZvA z9!yk!p*X=ro;zrQo-n`uV$Sf6E<59zw4&7gqnWRIw47M5ZD%xkSy~$WR?LU&{hC3n z)H1pn_zBJDp=5qdAOwaBDim^ys|$}RtUtgu z%LL9z-1!*<*#`)BCSlRenHEhht+siG(j)3-EXK-#Ki5 zsl!1t$Y1JzGTQ#vpdXo9zuM!V_2K`;+j<=Ce-6n%QL>}{TfX|eqrWG%M?b$%O8mRp z|4Vbf+xdMn_?Mkxvj4m_{N2Lucawiv(0}&J!k;&l{|l^tj@=Eq_xZC#_q)g6Yk7Zp z%=)|9UzNSz4g9{z`pbY6#ZSL~hwXoL`jKk)t35{8`&Wb?mH#B({c~>rPQ827{S~$1 z|EK#G5%2fz|ISPL%gPrhTL}u=-+J)V%1@S(qAbGCC65ij2FOFb8ADl30KoqN?)N&? literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeH.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form3X5TypeH.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f8cb71724bf2b8ecb29963a8801e66205a62c809 GIT binary patch literal 11460 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeC.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeC.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..beeddb31f604eb98714cc98f166903d7e2c17906 GIT binary patch literal 12576 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeE.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeE.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3a6383d14c3c2e09831c6f03c82149878eb597e1 GIT binary patch literal 12801 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 VB#^{EgCz=x1+dm6g#PEZ{{j!i%_jf= literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeF.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X5TypeF.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6124f49a483b586615025093074c46c9141bd89e GIT binary patch literal 12828 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X6TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form4X6TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fbb3ca5b2b3396a4a1c29e218ca6c033d3b856c4 GIT binary patch literal 12653 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 PB=FZ0u$_uBJpT26ripBf literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9be533c4ea8f1b8ec31ab84d7cdeddac58b32e70 GIT binary patch literal 11893 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 SWB>p%_yq^nQw_!+zy1$!=wr?R literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeC.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form5X5TypeC.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5a9ac396cd2eae191a0580fc3e414277310944dd GIT binary patch literal 11910 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form6X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line50Form6X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1cdb95818eb008d902c74188f2361d9fa2dbbce4 GIT binary patch literal 12532 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 Do!E>Q literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line5Form3X3TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line5Form3X3TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b793aa678ab39ba6b7787f21692cb5776e2f11b1 GIT binary patch literal 11950 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%0Dw=VQ;25Mz&H;M)m<6Vtc;C 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 DRC1Vt literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line60Form33633TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line60Form33633TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..21f47e3856cb768dce1ed2e3e8bb9ba0c945723b GIT binary patch literal 12663 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 Z_XSZN1Pvzf!(xdFFogmDzA-*r{TJ#+8+rf$ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line65Form6X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line65Form6X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f8a0e4001bc92467171b84eaa011b8a7e36eb452 GIT binary patch literal 12889 zcmeHtWl$a4w(i2+g1fuBgrFg~yX(STLvV-S9w1ndpuu$o4;q}{9yDl>K=8L9d*AHM z+4sHk>V^DT@C;eeE)xb|ARH~Nv+?$lMTH^b4U1jt42hC zxVkzts(uXflT#=;L2{f3J5N|dzvT#RHFYL2vL6X_RaoGDGyrAi5nL{id_ao*8vc;#$Z;!A2n7y9 zs>U6;w7zyaWGy2Oinzr#6kRknfZJ^|$he0MmVzf#jAR{IX$_dKtBJ4q!dMGG7R~ks zUL54SFj;?)7)yzV(k}&bsf6N{TB_pnVGhe|5iol)?z1ki>#P>YaBYs+2BOfHx&b-D%d<}N9yE`a=(%)jWPMwYN z6#S1II24hmLRX##fBVuD0LmycRslohb|`TAu0tT zSM&9kUO=mh&Z8n+Y@;PYS0f05lJslwy&jlf6pY^KBR~7fRTlXK>nUZuM|o)KrIQ;R z1C4Xa3#YQxPZ;i#KPJ!8BxOA5+*@K9N*jxEW&4*YUrZc5uRew;z)+ybV}hj6yb1wxxMi;>^>J0i`fs}eYWI3E(p|B zE%~h~O|qN?C_D|#Y}-$sXS8A7crz=!?Ng!Pdh(NFM6#DU=ZBw8E!WZKOwUie2wkOp z-}?h2NsE@iY3pBuhYU7!-|X5u zh>J|46Gn(+wOlObaUON+X(0_3z6ka9zBg3*lXpHA@cG(jN^apZRU@|tpu-qY<3egk z6|j2s-D~tTBeO~dO#X@~j7zuFbWSs_*BboH&$}s3I|*F*?=Ck?XxC2?(MMnbYVyH6 zGLyML?%B}f+O+U=bt7#AZ50^VruuXpj&xqa9yM((o}N~96@y$7@+8s@^iu2*EsE-T zv*aC7D#jwn%c0QeA%6{X(g4O{Z+ja~Odtxn;>VSp0w{?WX(6B8sHuDy$o8HcMYRM^ zhmm%$%>>c1Wi~N*(nwHhSVN9#C|)x81~Q8&P|al9d}pVcPO$y#hAOEsen-XV_vtv+ z2>OnfAYgpQni~2@C}J~u!IrB{>nL#XyufC(`BqvsvltQ|#_o&TF!pCku8@M6sYV7@9c69a%$niDjh)e`@0}7eAMG* zI;-|O;4v}X!ZRX03XLco~6!7z?z!`K9Q2P{>N<#zlM&qmW=>)*S)tdy^tNs5{HhN62YsT1U||c)YFJEyCgbN)S>TW^B0=|bbMOpRqs`CSp!QyosRpz zu_rQ2W6vs3f;g)KH7Z#2Q-rLix{k=+>f&-N5OW&MWs!cA4M2#TfPSfJxo|U8)D~$R zYyR3{w)~*8MMPlG?}af6v+ph3Ke@b2aiQ@g*wrPW00062JOtR~f2D@MI{u$&0s>6s zz=88W`}Z+n$odl-a`0hDYtUGWQ^Kv%fPfc$NK5@Z99z|sFnL?kVqwp#^rQox%KX&P zJSwge_CfP2{?o6-lx|D(bk#)A&2t&Ub%+M%ikjzS;dPwN=cw3GQkCT_tUMz#HVTSn zAQ6gUJ{6<1uAn3}T_P@^P>yVBPp_y8fhl9q2ef7h?ahnKs5b7LbgS2y%IF@O1fP77 z`!5{qmbvt!V_SU*N00E4`Xi7Mb7GjQ1FfzNaI_&|JhO835?8x=p|qb1IT2}6y_ao* zR=wsNG~sBl>5QAi7((h*6A~!k)Mcf1sbN5l_1U?sV&obUK6BQ%+d=v#&sjRGQ%wPT zjVb~FfCqMoKVFtDmO!AZ3+uyy{r;`_HgP@%{MHOTWc)!Kci6#B4yV+|K*+PRr2fp{ zsX4p`TVcJ6mb%Y5FQar2mrfArDa4d^Zyk@fzVVVIj?*eJiUIjjSB-pw?^=F7+uTkkj8vh|V8gdwu0lOM zsfLT?5MvDP%G7-b1Lf5#F_Szb#*dw$hr!XTmGycwv;Bh9Z8f4ey?MQThJxLSzE~`r zckCpb!h{l$8?GGMaw&UgX(P@Nv}A60yNrS(>N6A8S@E?3m|ssp5Y`1C>61feXC>^ng);ZV`c!gw0A<8* z26k7Yx_qQf&Pp>y6YLdtcMrRy#C_C2GOSRCZYK!(pUV7Zj2%~w>r<>YU&{`JDiioB z)9>CMuI+ld`u~!AZWDdGpU%Il1lJNvLRbXrlRrUoUGRL2>JWuv3meJ1D7fODc9JLnyOAD^+MXBrMwfbzii~9`5H!-jeI13_tK&BJH1P#>Jfmo z=+uY)Xf`d`z$nq9bJIfWTAyXUq&mkhVS>9eUNTW{u<|UGPFs3a%*5i9HIhN6e*J%}hjVk>IM30 zvFZ`8q)gE#jj%)aJM1sbs52aiN64j-$9)59lrJNiKYce9itLvu#RyEn!zM&_qeg{k z$up}MP{MV^xZ1^|PRY9VQrrU#WA-M}Dw^ciaK`JBmR(Gm{wy7W-{(2GSogiupqtt_ z1GC#dBQrzao=_4!xPsz4ApR^?0a-?5W&#ca3&PVGQnfO1J`BV$RBY`|e`Ef0cP{OIJq$@bx(*Ib&reb(E)26%7Z-)QuCI?TV*TcKzis^Z zJim6Znrb}zjM!jmZh88vyff_klRICpS9}Y8UIGhk*F}6iuOS$jG@`V|OuB=yNfu+NMot|~j#VHz_S4yL~LE;im+pJoujaCW2{`DS!nZw*{e zfBk&@EruV_JdnHNnkVQY`)cFvd|1ajO?YucvO}(t=FPG>+no>a*5(L!J8eHd6_RH} zqlG!>!1?Cx{V(yRivI%iDbRm5Bb}7M@Pl2omDI8w*eKV?;=&y&<^o04gxhP{lDxK z8mW#ZvX4p7Cxi)6ddfpep*SG&z&yjp)K3cZRO&}&vxV`Z?kG&U$CEkoUfS5aK#s$u z`{M~RfPBL_c$}0|< zX1eaP9A{loD7@j9U#qk9aP*=I_LfR&_B2KT&W3aawCMUt)n00|7NB`ze`%o8?c8#A+u;uc?Aic3P>_}5s^T| zATMbgGn_?c_F2h2b||+DadqP7-{Qv6Dw6x_)&C`Lq?Pw2;As<6Gac}}sG5-M&?>na zJSiDR_T*}>(&4{caaA5TkOuOKEKM)~Rb>>D?jaHf?EOE!S04bYif&9|U%7GMpg7F? z0Jd+j{NV~ch&Fio0>@#J5YrpcqND+*Z4?3eZ)c>oGk% zgjEQO%m3{wK=GpBgPkKE?0gO*V$BQo3$UHuRf8Sre#A__fN) z78jAAeH7P3b|puy+N;@=xD0sO4s$K|qq;dD_l zXSAaS;bK(Z4{ICg#~@MCGzjksZ0AS;4@OJy)K614_F#d>z%iA9gK~lS2?k3*mjih{ zH0r>vK5|=kYto{w+hv`(-@#@kKiz}k0Utlm-FwQF5Xdtcvd`j~e@DpAfg#bfGUY23 zcZbPYPIQ0oDX2aVERiJ?8gxIfjSeT92#p%^p6~D~9ow@#Ovvlri^|~Gu5rG8I>?cm zD)ONRHSE|%L*n@&xgEd)w+{@`%9X*|E4A1J4>SCWL(Y1pC*)BK1Mu7+69f)TnS5U; z>h~lft$7C(erqSBzq!$%a)&~Y2>MO(&_Wefu^mbrfLR)ihK6cM6VHh9;6sf#A@?mv zwl4J&D$9Hcyt4J;l;-5;srcdFr--P?BKrYvOtD0MwMM7cxRu$XqhyXHsF7|U2cB0w zZfi_v_XlClbJb54KT|ae zxux-9YnJyP$w*fwHIo*2u}Vd8UsiZnSh!jO?SQNg`-e5fo{p{}p(K`X#g{v_xpQbj zTSz*Z&K^|xMufL&oNtBbjgCerBcry$fwj0h`-Khg1h{HXX8ko>gYSlwTmlj_tuu?;^uhUJ% zfuzD#0KGX%`Vt5c-%+=5z6^SuswVd&&|fH7wh`x(3{aMnlOuRu%U}~Z4*HZBFM5ZXx5_r-Y}e>H7&lYD17>YH3zBx z*?Ys4U(~~Ist-%qf~t0*gvmgg_=p!!NaHkQUNgoN`x764Dy~&LS`@Xk%@>ZJ=0Rd%()c$QUSRh6>x zj70}9DiVq5kfBra((E;VM);MHF$G&y_+4oIgBL{u*${or1f@ZZCSW2 z%-8F(dsj01@~AreZeu=-)%WrfTJSYN#odO5qOZ@{`o>zUfzM4Jlp#i=YH)*<7}XqA zm}MAkC66hdrpq{nMV@8v8v!gn*d>xFdF-d{LlEXddYO$qAm*IfpZ?QVUNIj)Rojd^ z@!p&YL@TgcWy2xU0N%Q?z>xVHu45$J8wz{4HK^=8SOwx~o-6z>YVfnt^SmZsi<*WU zOB|o8yo>YgIY&5(Tg?4ZwF`>^llt-fDDmr^H?QQ!3yEptdY;>GL9`)zBL-N58E=*Dc zR-Q$i1+F|g&RC-8yJ|e4oge-HI9vo<%ea*t@sh8Lcou9#3>m9HDwnDF=lH2?oE!~9 zT**XhcCdL^FT~7yv?nK6ZG_Qb-fG zA8!f4h4h=7;$@NTTdt_&h>&f!8KY6m&zRn7arH&BtwFUDe8qGhI3yNEy$-(?tiEyI zqt0yT9gi>QUN@r`D1(WdoVE5Bdpj9Of^4~Jnh-Eu;Je(x6xbD`gg|&kOH+d|UB!!g zW2_yT2CBRI6qqRxhfu6h6=i4nM$!|$@=H`=^lgng+pZ^byK1z;`|bru=&t2Ln3*v* z=5Ifwie3-1EU=%rLiNegA2L$7uN{!@RJP7^toRa_RA#Xxvq|$}iyF4)#?{w*uH$S8 zetRv+4r_5}n$pe3+8`himS($JNEYqNrm3NuM^ZLa3esMfO*K)ueVd|!ymmLMa_S42 zx8L;POaxvs5t1^KzRn*B+oecMTdpg`9|~XfDVffS5eA94QU^rw1!G^pt&Pj@F`E?% zrc9kUB^BMCBm+*ct++PFm@V&xDExnSH_Cof-jmcYK?jrFJKi1tM7~c^7$3*Pg|hNLor0X#eSX*eF^E582;e3uWeI3IeqvVJbWA^Oai37 zRYY~fcgY+}O@*;?-Cm*R4a3@(JSd~R+sX-cF!bp(+P23BKNmgPUdPyUjD_yJrpGtE z>+1?1klT=BF}=QJaO=TS5AA#FNNp9>P}|wtzpJSXtbc3pfsPxV%nW-inSJAnTdA!C zOmU2wG_@sS0Svq2q-+BNH?=2_6yX3ii`N;(_(=o2YWxjaIN9YZeSx$m)aoA zM(an@XKlpwD$kDKa^+rR(-nIAJS3q|EKNria}5wahb320a7m|H8i?qjA+5HUgR)9? zRF&~O?W+tWR6)=n_Y-MoJLUsl@0%Yd8FdWdM&9!>P>hzZ7t;`6iyOqI$1VGb7Uaq{ z*#||%ffBATc9YeF$fPF|jiv3RYaemF8Ko$;pNQAViAFY`Ox6d}QFFP<;;O~!uyW5{ ziq3eg@SrAI=DMOn)yjf~92sRO6p)~dZR+)A{qkgf>eHF#^e50+m=#m4@&G}&ix8dt zbX%$JeL`60mAjDrby6YxBc{k})`=}o#mE+`x@}l-+G3|n&W+$iF1}S3v7G&6eHksK zeY}rgAxmGhubUxK4SJV6z6UE-Tb>?})k)RW%E7cNZ5!-%^o}e`!E~#(pV_QNv)T)0 z{yoX;S?tl`{{G>ip%EYGG`Bn5scYTvHOw1NAG$UR(8$dG6j#p@lB=i!QuXGhbw$+C z>UGMdEwd4+tH$BXi!@k@o-h}i$wB(^Aqf~t#`inf`z3N9sek(_@|%b0QTX6&K?8*N zqdvxQ2-JN6=UrI|I#BU7fA$Eq=w0n!Icm z8(u5YZ5VpRMC}ANy`2QK==T-Tj(K=H*ADJt>B2LbaNIWcCxR%aE6TySfgCrSQ%!!x z99tdotVm6#J_+Zm->#0Jk>IR|_b|xmEy!Ihh~VKPJ;i3-;d!T0-*1t}A=W@o^HY)! zMg${`tv@F#fD}mWN1sX>@D4W9qohya6r_|}wsnd(DG;xUHlu-8FpEY{o>HE55==4~ zAPe^lDn=h}M(4s?w2Lcn$l2?li{nC6!vaC5DErHCi40Ko?ZI>K2C9W(41DoZ(wOio zwfsoaj$>g>JysVWvXRCDu_pT#MFw_^6}WpTn(aJzEdb1)tB7EZtR+YHUS?>!x;}IA zbjVvdDKC(I)w{JgoQX1$WG7it+Dxs{9VfF5tlryFm>kSPiCD{6O|apE`_LBaasup1 zRT4ER(C-Rew}9%^!|nC+Yog1tkDTs$H_Os=Q#s4CI$>9AYoETqq`Y-DJB1u@{$MKb!B6g^6>M3k58rPee;<8n z$06GRHl`TZu#~@ydS4&=qt@}OVD`J>@lY-cj_r8e$%Z9y4s|R3(kpQ)1X)~_m!eU9 z3(Dkj4t72@?i}mJtA+^JzOmsrvcZ#aC0I;ojvCMOr5Q40-4xfd^1Ig@bDL-t-_8OS z0<&P8@dQh2I+TKfOhj*-7B*5UGkNr(VcRkLsY;I&IhwsD>8W@ZpvhHF-e<+mAcv1BRpv$c5$&gQ9 z3;I)3*eQEa*Ura%^l_u-B9F6)>8e~FS^% zDj4TOU!~R3^3+qJ%p^(@F%xyVPdKpgr^d)v5VXAlH2Gg$*%cLD54K1T`+-R0_0?q) z?>KXsj7#in$Q|YhzO1Ip9J{#hHLo0TUS=amlRSTu1ck8q>~#`cQ;za~4DQH(A)@aTq64_QglHEOL>57>av)jFaMkLEeJ&76{+T1&X??qR2X;FyFi%GRtJ@hnI{wG&!0z_P?`>j7%*1^cfYe9v z^{c7bK#d~jk7CT0Xk-j^AWbg5#Hr3IN-u&sK_pyMsgDq}OXl$}k!hlNGTI>`<_E9W zgbmGY-F(XQr%dE{ev0W0JICkp=GOXZhR^TsM&eS)LbpQW3gUbXme$*SulPkE6qZt3 z4qx}DTKF^NnmCTMXH#+JOkNr#=r&{uYYL$y)v%f!MAoNNTb{nuM^f9eOswf0N~bZA zDYw(L$c1aN9`mYQ?K&;C1QsahcLlyS^2qdRNi6~dt}-za-L8aOVV2+WU8sAD=kOfC z1zG(7*`jq*(M2*>aowP3>CzM&W&%WZ*)z;oJCm+M3z8s#s- zZGJ6xM;Ftn4l>nC)5EKcZbb82uYB!SjOJ$WPl=f15E@d53OyzXC~lB`4vwy!@iCUI ztXTFm!iifU3y`(>nLbmQ)Ozqg$JDR_S@0|(1r8c-h#K5oPNEjk7!)qnJv{MnTESorS^O}|9} zfKOmz0~Y>o+M6EZJZ^9KjdTlchxua=|I+O880B$c{Wr=0xCHwTC=c}MG0NjF;=fTe z!JRi?l*ix49|JsI$^Qme0T&{`0KeDuk3}D^XMT%fgPHKX=;PJRV}!@#`8UE2)ngs} zBb9y(_?V0S2Hd0m-vIt*rjG$1v$@}ZS2PcR{|>kN_dx@|j1jE3{{!d)Rr~ir;pqMy z&G$LTfM_u2zYwX%;(t$pe-(#j{EPS>2~kNF1{}oq$r2r40S#u*%=c&i E3%P+HT>t<8 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line70Form9X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line70Form9X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2ab11cf432006fb8c892effd1e248b031701027b GIT binary patch literal 13080 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%0DuEo-_RkJakFM|wR5mCva_?gTg-CQ^z2eualA6B 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form3X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form3X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0463f2e0adf935ad5a0cb86614350dfa6b76e9b1 GIT binary patch literal 13076 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 mJr@7#6!>THCWb$W|1lvd%foBuKE}!GZ?~E_dOa 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form7X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line80Form7X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e1394938e9abc03ec7d1c2dc9ead1b3f67aee1f4 GIT binary patch literal 13214 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line90Form11X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/Line90Form11X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6b6048875ce1c0975e997c87df323e7d92329920 GIT binary patch literal 13463 zcmeHuWmH_-vToz9!67(78Vwp;gS!O{?oMODNpR}`L4pKpf(5rgfZ&h-0fIZh-GbX~ z$lfPsbN0ROydQ6jH^x0{^y(gKty$l!s#&#W%~{nd@^J8Y07L*X005u@P(?lEcZC4} zq7VRp2LNPPJqbq#khufsxrUdMxvK%Ir@b9zHasjtCIA-N{y)e6Vhyxw^ffDV zh)6bRg$GJ#YQke0#IWH0gi{ctA_%wlLPYhS3)j)mWEQ79ieo5WwLezyud~@OLxG8| z{J3WE@O1!78jpKoWNDB0IV~=&d39lWuzoR2hm({4*t=pOqt+1uS5=%dOUCm2Ox5Hk zSc%$lgd|dz#1=zECM6b>-s$~0%xQFG32Kp4h*#PSBiVUN_8rZ#M)1d zpApAm*H0OWzvJiqru0&uL@|oNHlbW#hW>QX zB4K}|u^c@59KK0KdiNa&d(I8K@8ye!vl8W;>xSXExfq+dnheAjjSX+Ga(9JkE>~Wk zA0Gyrfa_n!c+9W6s zAY>r~LMef|or*fMCZ{DZBjW1YA41A%c{4ZSzoq(*CFZSTh=e^+*cwW~?{+n@oG9_> zwxc>aBhgg1dSYE>lHtNn?e*Nu?(?B!YV(6D9~PywZZ&Ey+|$S3q`T-ckNkD3xc0xM zd$seTv=w#l^#nyy-;HqwVcvmaA#+ zn8SyC?KgCV)b2r;N+hllugQ>EG%TQ5+jwlc92EZyAu39CNN?M}nZwbVr$}=|B0Su3 ztLvK}XNJE2lf>Za)k2&K-N_}?DT30+DUmh}RX1KTsz!Rz7MlI2I{T2TPST678z*xm zSZa+;GG{h0q9e@P>7#CIe2O)TbhagCeZW1tT&9$ef=PbG4}4!!AFkFjlM$NEF{b2i zkyB|}prB}iZ<~*y58V8buVyC4_l(Y1MpTbjZOG|jO=VN`>b&E@GOdvfP#(D_0 zpg6R?Lx@mlf#6a<1&gysw~^F@dq6%_+=#G5WWxC;Hdzg|$lz&6C{oG^ zR@>TzLn}w^x$2&Tt6GP`hsF4O7camdtVlrqZ08edRt2o|6WOH~Nb&^9N;M*N<2wP5 z_hC(6{Uo)Kzlc(sR+n24v*62F`m{LAjXgiw_@Pk##Wej|;b37O7gu1v_0lorRMr!P znU!|Q6Thj$^!&_s=~@yc??*~>wxiyg7k6j!^cH@LQ?Kk3-)P>lKn62p$pCdFHzl-jIL9dL_7+~*J8O4?$O+b=CJ8yA28K4vs~zJpCp zqyL;LvAUxee~tGt+FW<*O#6F?cc4PDNOTazkwK33*j|k;9i{PWLP^gWCmcoD2nHP^ zJSkx*!?gZSPr@B>zk$h1KH}IO_N0>Y%{cUfiYTR=dg{HbIzeShor;b`T*9^~3v}eF&j@7MV2>2pw9EJ?j=`{XM7HQA`Nvh5&$v` z)V+R9L;vh#e@;m-(6ABer2o5*PjP)V?d<5Uc7vN<4mLW+U8{WI_ht-kteHY$FUJj4 zv@3I^%XP@nYjN@9=Z}XpZnKOG6=d-Bld1jHsD>xX+9#A@)tvPw znD|jLWgl4Cc)pF>Dk+;ah*B5usTrlTy-d*1BjYj`&XiB;>=JV&F$KOX!K#UnvR`3W;A6l1&Fh7J-kB!c?k_kQ5cjLSq$kiuu z?4otEf%bQn(`kqln*g;M4HN)?2x=04yqI0B%*{crY?~t~L*DAO z-rz@PLVP_xEvC-&doXc;gUH?>l^?PhLZy0;iNY3NitJa;yP5kD`{ep|)0fflc>2H` zCQ{0j440-EKRNX;r*A+FHx2Bn;@n%3{sCX4Rf*Kf$Kop}Gu_Crqr_YVt@}6Gmrq(#V zyp7R7b&{Xn8Bd{8W?s+q&864dsPlvpYC%H!);f_$M8}A-Yo%BF%p|loZY^YKfJGhb z=s6H^x)c#xc3Ei`YLr1lliLzq3(JCwq9Y$SpU%dxrX1)CfLT<%K!!;_ z6piq0^g@>clt*w5S+$=}Jxw3`HhM}rend~acSE`I98h#F9qm6R=cICaV&deOgR^NP zeXvY2#dZUKEAO4qTrpy(t)l2srH_{Yqtw)L?@6@{@LpvYRaw*L$Ah0rDer1*?KC%^ z?rP&c$r@bFb(l9(+|7cwbQHr1k4?+Sf8ZRHT|yf*j`)yKaVO-Z*RxXh`Gn3oGt;wb zJts?^#S3v9iCF&ch!x@Xfj17J$Jq2@Dgx(bXXIo+;|e34U9o41a5~2i8JdUl*jCj$ zB9Hi`B#WBwSi8RtDN33dW<&)5I2Hd}Pk#K%lfT+*LOuBe`sN!DPTbbdS4>lTkrm8} z8Cv5lMczeSUl-?+ljb2p^IjHp;uVQEt=`bdw`a|HwR#`ANz#%=HMr!}}WZr{XN=EehwBs2!0Vb88YxD%4;xaMY#MS5t()Icft80 zJ@&aL^KQ*Dz{L0KudG=yW**3SptSKsXznX+p~nBf29>Jx&La($5!m)NS~m)9XYc@hy z{2{|%dPA+iV}d#Q*kK;!%?&HW&c|$-eta*ftOtj{KMAN^QL?6e?u${@XCkA#zW^P2_}sTpGt+<7`5NLHMZTdQk=g<9Wf}m_vpb>tukmRdQ7Mq*YSI ztWW^qnmV3xh4T_>5q8jPD`G6N^C(APggj3LroB|8=dAmni*I@H^F4}xSYkrjg2U8P z>{rj}_TYx8q~u)Yi5MJD#L&k?{UK6hx!Y4?aYde%S_13WXa_S+jtVoFy9^iC%O|U= zj>o6l`wQ2b6#l-a=Vuo6XL|>$i%Cgi{=T}7!k0oUvC8lKF1j+FXJj<{T=*RBCs{Xo z)%o*BUmbCsGJ7GgmEK%jEi7JbpM+jay}x;C=hgm-<|#SHBJx)ncfQucu;s3>DQ#1c z>Ar^^?_1U!=sZLoa`^GLLO&zOPPLnL0vOjmobPr?X5tmgsFG1u#)y0U*L!ccP9OW9 zx7!6_v?#DQ_ZwZ8ZZ6-HrhlLRdbxi1355rqv*nWi<=L*lp$JA(?~QMD`bF!baqM3B z!%g%R|FvKAhGYLA@9Mu)e#v$?r~Vw*4%s5;%nk9ddGoH-4P4*ze{_64&f!Gv>+G~N zEnrX>Ai=08#ztAcCUvUkZul*bQQW2ij*>2n5ke>j8jRRjXQ7$XcOn7gY6&C^B@Cg_ z)mup&;Bm%r!ccNgXC>q%7%~h>0h8Y+C#0bR3brvJT#%pQ;jFs*m*)w3t8k(=P0$V) z8&$F+wPchzxS!Ag)X>P~tmW2&aSf`nUqnpw=)iy{_f+K6<=7I|vhl~&6$XZLs1@{R zv$*P*85{GVSmi<;WQsyetqFwU)=oNVFH|4s_kP$CjxEVBgmE!sfc)b1%g&Qd*U8kU z-CkJ;GBF|4wYBmIko+QH(i8|G)p;u!sE2epGK| zenR#j`JFXP9y#QAN^V_B5i|&8>ygu!NMvZM28TO|P*~mXxK|PexWvNB%=9G;MZR6j zelycR^z9St?Y-^`hd=RHJ2^|y0;Y2S2jR`Pk{kStX*G2}tRI)^7DA<54OZj-eDaGJ zDg+q<*c(r@!s^eS4SF5?Vqk9@>OhC(7lW*i*hQpa6ollq#{ZP8F%l(h7DoyyS^#3w za-$)%m#PZy_s26((IUQ7)g$~tsM82rJcisHg>v17RfV!b1od^cg9|J>J?mY|0`-Gk90yQg}pvdYs zGpmCm(5}-6QQrm`4&T~=VFz$qu>}VF4)M(pS{QVI8#}j@=E!lK0^;5wj+i$F-11U1 zuIq@38Stt8A8p`QzQZ9PiTe3xB^Zi=1~2$^dmV&@o*|F{tk+Z3UclVi#aQx;&x_1? z08}u!b%eXlMp8Zo!BM^|gxV_htsXQjSD?5B-y^=haMrn1oMw6okPncj1Z3UpFmLH- zy5snc$U_(M6Bg<}?z_-|-_UXbEGZS;_5EeXH_B3&RO2sqdUpiQk8^?~pz8Z2mG*7} zOkBrrYd_)0_}&->{wA6*1cqMw-XOO3N#V8s*aRuCIJ*RO^_krKd$Z#hN2wNQae(f;6_!o>Zs zQ3c8=z3V^Sc@P!^XXJvz_H`3BVfR)q7l7u-j^+ybb?`9lQAG9|tpEy>fcLTZY0>fD zvT_lfs0#?yehxK5maD4z}{VZfSw?a4*Yu`r%`~Q$oiyw}xu*!Y29GYAtI0l6=3hx4_%auk1 z#hL>9zU8o4_hZPnz_5S7qC0}kj@C+}SQzW{^p)WcI4})Qcp)_?3ml5I5h$4lB>S{~ z%>%$#XRhVoZ%8A%UDw3q-ogVTv~;ulG(I*`EuSo?*{W^6A^1?`a)peNx)ULHMO7V= z@J@w^Mc10{LUpTxH-J$NeBhx48NK6bTe|xgq^xm(HIT<$nrrw*iv9ygq!Xl^6~@Ja zH<0I@ov-aSCzgts|j8m6z)G6u}IQ>4yMDDwtGg*lFKH| z>`bQ4kS&0{6J2((PN-vI9*Y(C0+LQtzKGYF%8jgc<+MIA&e;IFZ#RDNDHFy#k}F3K zJDtM^rrFzesRtFvqV_?UJ(vYq0+svggf8kRcD%;c(ax$T$SP?*lu =JB<-J3EOE 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 CA$QLJ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/MatchForm7X7TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/MatchForm7X7TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..97231f418cf1832d6bdf4978cea992663ec9b48b GIT binary patch literal 10462 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ᜎQe}L Q02T5=fY@olkDLPVe+H3$-~a#s literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm333331.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm333331.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ca6ba5dbc0f04f36c9875c44898a8fcf6998f534 GIT binary patch literal 10401 zcmaJ{Wk6M1)216~>F$*7?oR3Mu0!gf8>CCR5u~KMyStBsfP^$i3CIU}-|N-yzVG_M zKAb(XX76X#nl)$UQI>;*LI8Ujp^6*APuKqp_{R@sj;6{0M<~nQFCe5FHUFu-Jgo!V)CR z37@(*{f)tZAFkb>dQGxxfVl)LrHiSl#C`i5E z;VpK)S~7`@uJk5@nH}t)#my&wEvOyRSQvSe;J(Q6@Vi8pm$t^i~{qM3L4FQ%GI5A zWo5@35F*#T)${`Fk`1K^nXx$(Y?Ze}1HQ3T2pJCrid)&RX^i9)7HX~aHs{XulLz0O zAAa7v-`l@YKiTzgEI*LC)gj(V;6&|XUc_`In8HD4;=t`p2arPELw{s-Z6q8gkZodN zk8Z@5ScF|6Uo*5ugtQet-}n9Qf_=mFJJ2y7PVzV(f#!b%8ttDzn>qr_pOE&BQ<3Xo z#tdGAeh?c1rq`yMhSWnQ3D}cpsdym{>0{eX$BMVy17|8qF(d}%0OR*ZOZ0G$0J5yR(lo^Uqt_=(THA-4a$D<8taKsg<(yPVtfiW0 zCs%=DEbd+?5ls}_uBaa6>Z75hh35$*A1v zO&`2z^|{=u(htv^42ZI>GR)5DV2^32W^9un2uRl9``kdK-UwM9xdtQN|{$}T8u@yG~?85CD%wf@h zNrbZ{Eynv(L|CTQi>dEeOEy0BY!^rDyekYhLD{W}%k2tXx-#0@s^Z?NeWL?#*gmac zV#E?~aRHU~8JfqP_!Gtu{BzQp_tA6FZngWyUM%jz$r94qgBp#IXOyL9t)sLf&R81~ z!Gm=2>mHo`nxVeS3>BPLN+=a(d@j19_mlG`-${{`qw?46)^A?Em9ijy z!u8*S3FITLo_0UN$iE9b`zhez2(WdrGBP@C+;AfI5(^_FfD22Cdj8S%E@x}4ANniK*3X-+t_VpO7ueZlq zQ%UzeAIhc0Vo3K%JXc;jrSWILM4Pw-zd!W`a^#C!CrdD(;X-}I!fey`zN=&i^3s3> zQ-~#10~fH$e4(cq3@e=q5PybS(JT5+ezWLf3*FmJvi(G=qrr13hha}ixsYHll+Z9! zqHf8c0Zdl?cxmaB{<}Hh4O;L=kyfgDj%b%^*VH#+(dKMJR|a)BJ_BSHO!qgNPNEp7!W5t z-wUyp)RY7HOYK!8qYcod&11kj3m@P0U54bXkof>;W|#P;?5?2TgYd`*uw+N!4uU*6 zJ14BpkQ$(IB%j;(1aMHu2p{ioOLW*HdG&!gV0^l3i>|K|JExI>V&S8D%@}XUKOO2v zreuCg6`|C51snA~G8136SB08C@P$(V6gK4Rm3mSc;qqo>3LJP}nc=ZXwfO3{sw%kV zTYNRNsv-3@>Q-x8E8J0Z)Lze%X0G#Q8UfvwpV|8<9x$L?D&K#q0h|vUi z`B?p|9>aoFLyi_9paljo4`6Xw+mT|VBxc&mrqL3DrD-Kl-dYIkz6{3NXpcDog}D*4 z*pPF2_clg(?vhu4!t9BiXGrvB7vcK0k>NPz>nCM49ps$Xq~t+i7ZSbOWE;6LDRudF zw_&dWt>F9o@lkEc>~nn@3L#@1lwe6#-aQj;)+h9H1@VI2NEte-ArErQ`;p19b^0_^ zQT8^>tjxV?pQoMK_8Pn5Ek(KbqP;%eY6nZ=IOb4?-T)}HKda|Con_Lsj@ID&^ch^& zVL#*W6MX_Oi#A?3@=U-|Hk?68>9#_`p?t6g1Mfq`w|ze@&h^VH0tP*Xpb8=8_)p#t z-lH<(fLNtFlevfSL7B!6&9=Bd9 z(tq7FtUor*TYbm$r|?F7C`7Wx)mv+uOjAHtQKGP1V6!~H0iBQoVX+=`xps^L$2Z`q z|3Q|BIEw((+PkvK|2EhoULn1d&djUIEUOGXX?sr4OsIX$(96uAbdxR$QGF=3Z7_M| zV6_9}Uh>KYMb!ocNgcmBaQ>qI3baKs(x_joqrn{i{#_)8m))h0E*GofZTfIGO7e(p zN91_~a)`qD^U&dH{x}ahp5*H3z=Al5vfPKu*oDKT%Z&D+x17$fE&^A9I<5GURKy)= z7n<8L`8r8^5_z(|R`!A;bsbda3<;@&Ra)jB`3d(CQ5Tq-23iL%ek*FEN7MOpY>`i9JG1Dz;+tqqe&WLHVj%e#K!hM@sMQ>NHI5~>6zBIMJ*Kalt~>eNW+e=UUYt=NHjjw!jlmXQ8nry?l?f@0wlFc9Dyn)yE6(=AYBU5N$5bSoeDO?Xey5@W zJ2?c#7uOw{N;QoCB}&dcukCn)%OchB-ooiwQT-=&^#R}whr{Kox!1v?>x;E|Wk#1{ zPE`1UR_a#+sZxcXT9*uo)<<7_>aAn9te2SSIqrU!5fEon@29|>VGY9!w?1%7=lkHG@%@Lo2z*lO+xAMr_cA83GjWIKg zUE6qHgJWruDD#cWPM?S1l447%0%((hqE{FwBHDW5=O>d6g}#}cYifmL{QzMI@_6gw zl6$D(?c= zqZX$Dh1JcN#&|%Qeze#&K|Gc0oE@R>U(ZUVIzD=X`L0U#=lA%jlob%2r0!Zj>(#cZ z>~U5n-+Eb}Dtw#5Az;L{1?vrvdKG5;-Y9QReRM!~xv?>5VMaopQA<~Afg{^hzuAb} zfRkT>c`#L@rLI4?Jfj_)nImT3mG@AQqsS6$@k&IEUM|j}yhX#_oE?$mmRqSs|GlOS zQ@gOQx#G5D>0Akysy2fPWOYm(&z+8WU47HRI`ZJgzRR_aZOw{-+X;->X{pQgQExNwmW;@JDoh(9jE(zY*?lglWzs4IA#_oouT?k=FTn%9`i(&WBn49c;9 zK|{`k5=X%t#a)@`z2oly#C$GLf#R zyvm7USVYbjd(@vtURtK zAJHffc{SqM;C#?n&nA;&V*}2Ucj^Gq=T2b))h2TGS~JCR(}% zY>Ev-Wn*L{i0>4XUX4ceZdh2xgU(HSvx5#4DY{Zmu$pxEt^qz>OZ&`@n0Ee+(?d6U zTQK!0lYd#tTHdPqt_Rlg?S$s8M3dL0+bfNTT-p7Q-pl28=h4qOSILL9loW8A=oF3_ zjUn;ejg>#JSt`X7_r{|Vxlutv!eYbO&69M^NxckiL#3W<&=gRhh^5^V&I^*`ev$S` zbr}z(t)seVtXVL0ahSAf`I8u5YhGy0rlexOG*$|meZQ3i1~+X@5+be2_I%JdjEE4FhC%R5hXwKu;pm_;XyqG?%bU|~?Plo^ zPia+R>$V;5mmG@2CgzH0<)O$h-tPSUHqZ{p3YUzHnY}U+?sd=ytjBFpZ>!<5Ucna= zDo8!YPDtq6&DrDlGUA4E!)^VVoSUx4G|_LN(1D5taeaA6vpeLzYRInIYkN%cT}nEX zdgFbid$!u*d&uxu8^n>xkdRbaF~7dFge2dlXBGnV(6S{{Lj_vefkxK@1z>#56_ojC zr|MHn!D#k;w`s|$f-2%)yFY>BRfaG2tosm_lQxZ^wFF|-B1Owge4(t7Dp6|mJ)r(WJ{o<3Yq|mZHs`Ith`vv96_Vbn>_qM%aaCGI|(S5V07hkz- zSGxdC8KN?E7OUzAb**ep4yG`Jb5-19S)y5lQm}kSHv&QHyNuUMM%{_Ewa8YRO26ls z&z!VCFCKr_5h#LzA^$w&TwGt-nY%nCmvef$F`#}dpBIx4!jo3S5l6DEyP}qL6`Czj z5EK$%EyDiw%(dusa(-kDnC1uXXx4k3ITb!Z1kW@hL$E8XH=|tCE4-PPHr<)fs=lQ4 z&9!9O8dVkxuYZeP_gX7{Bh_Wxqn*bkgl%>{Y16;xqic6A{xzdIsH`Mn(<3lzpSX6G zSigZQt%Nm_*XP3~bo-2|Qbz7;^IOo`GM*%LmdoL!GZ}Q+Nhsq5b3`ew{^;OOg3fRC8BzpzU=%pk@>NfgLl~VI4Xb9XyI;_&Q<@mwPMvbm>F3 zKvU>3??I555iuIOyeqOx%qox5J&8Crz4!pMbxC_`)`?L^;c`8Awj?1(&1AWzrbS)p zcUO%}R=GGcSMRJ z@!Y8IOz})E(~D=Vz}!=IORnrqoJii~z7YFp)>8cs`iZQ1Oh~z`&H^uJrI8`$=$y=f z`^6X%in}1EyvfadYANOS*UBX1^DhUz5sw7n_^8vOU8Ds4jn|t5%=$#qKg4_~L2oLy zsBqw97_qUru&A+44GBTa^L|~kf0bbh8?npVuJTNUX~!1X zt1j}L`a;)dx{xa2`_TnSpyOUU-nvb`hV4AN99Lalm7-VOp*xVLeI6(D?LPfytkI|q z!CLhDDD}M<({j)WE%*G(g*m)$m}PJJ=S&)zxVTjBC0b-i?H8^Nx@T17v4D;PI;uK; zQcBJZdNS7$L?V_o6A>TfjSP;8)4s-wKgizgNMdbN&v9}_^%UW%AUgVQN8aYz8=GZ5G#%YgPE6<;Y2MK8+8!P`sEyM=~Tj<<-> zh|rw$WsuhYuxon@6RgLy#YGmC+Hh=ukkDH>er%tdI&MNrk)$XlL)?J43mg~HgaTG^ zf)Lq{gQ8OgSstk6yH%S+ab zq-yD1#5dm09kMN96dGb%TcUUL#jGy}?kNJ(X@ZHbnxO5qdLD~FR$~N&-GQ>NrKdS~ zz&}EfVtfdA5wFTCCAAukT)tU9giB*&$>-^1yrU^_)k)0V+No=d%CiD@%q?u&nR)%Z z7L63pVnx}Ai2h8wUErul{_~xfE<~}fkn2VzqxVsjgA;a8 zAQm40K4RxsFA!{=tk>+rfKCdXCAshz8FIsD_*cME*k!6RXLoOdIA@wC>}Yc^fg3FX zb(vx!oMLn`>dvBMW7>iw{zn~~;h?7R4dYTfNK`0q!phH!e$Qx4KWW38LL#ZT#3yoZ zVKZ|(KL>at5V{*;Urc$<(IgTnv$DYr!H5m-yZ`pep3VfGwd3 zT}K!Z%-_2wne{Vv-=Dm^ukVGO9GkxP#S_a#q{L zkD)Q&`nXCL6eR6>cbE=Bb4MBb~NcYCG+nFb7wtCo* zCT5$YX|{{JR5kE*F#{E#5cdlUWfX^IbZ+C@S=kCl#F_N!%fsn$r^aT~OM+yfk0-oS zcsR63W9Aza*be$Q??=oixM;rYGXwTN6EPCCo-ZJcB<9ESB=9Zg4b^T!tw zI&+gpx#2iR{`i-k*qQEbnpfLuXJOIMCS0HAXk=m8pX(F}m(YTrIkIqwJs9Yf18=(> zDze*-d~WYBch|Qtg~$SF51-cHnXOB!?FB}*2@mQc@rQgyy3MH`rb~w|O0yfaoy_ZV z=lShKfCIjyS_mMpn4J~G&B%Oz)pNS(;iG!5%@FvSETQYxd4~1%1>bN8>-R4sdqNIM zKEAv@t`B!LO7A+piTc}wo`7Fq&WDMtmPa)NE2|YL9Y-DWhfyl$_EO}?hcp&kpzE5# z@1|xzt-@qK$60H;KNwm$g+0#py+hj}qoYh=YOUd6v}STeL%t|OgLJ%*Z(#j?tZm1L z=el&*jH$W$QR`V$pnPs1IG%MwGp#%-Mlvoh7(Fc@-HK1!D}dIhkD^= z(T2NA!}z5`5}zk1DNP9720}EblE%qy)iu<1%t-m-K3t0J(j+K-Plk*5nkz&bhrlqE z92SNdV9AUwRD>b~Yem&S^lmnsy+r1fcxE7!a3+Q|WQ-aG!h2;1@~m}M2rJb*OG)yn z@;BClognI&PSq8L{jiTy1&L#`nNV0t%PEMJq%s>^!v;l${mP$cF)_gR&B-i%eSF-7 z(9qsP&S-}ZZk_8U2npb<-LG7a9}X26QdW}zJB`BaERtc2(+VXd=L!U*;<;PRc(!lpOup@{Z0d^hwjP3U1|L%9NTUWPV>dZ3u2iH zm8q&xRRb7Ex~MVKO0)y)x_z(PklMlZ(_q;SjmE+#Ai*d}ETi4ZaN``6%jMFBYN>MH zke)@|QAszeS?ctp$y6yS2J+0oBhB+S8YTA<%DBcOfs@m$fgM05vd4zQ+DdLw+c_k$ zC;a%xV5gG6PVP)?OuszazW}Q${KH5FM`5MKJHz?NL2b2VXv!lBYvkAI>(RBxX3afm zXiGW?Fg!Dak9X(sp0TD6idYl789nf=GH1?Sc7Dj3IgV`IeSKywXFlM#afMHE^tGbl zW4cICy4CxGl#jtH9?|(+At$nkcbby9AXVS0hM7wDD?9Ie?Gln^ygr43&TK1WSk zO^dCrdfW1M$}P69HP&xqI9#@iW?&q+kU~U+mJhm1xkNgS-7}Ynm1^iT?#`_z2S4Y+ zdIZmE+uU)umlp!49dk6jn7?2#OFF~HnR%@ttnVEH4#w2xPK?1AA790#nC_U`K~KYJ+)A`Hsp_e}95$c@siRIrKX z0b=yNapZ%~f_c5D5|j&Rel()h;Ekweh+0kcmcPUI`zwPmO(7W*C;6a)jGM^{9aPlk zXJOU#C|7Aw7mRQP-3;9p~n-S;Vptmb50Ksgi>Qm5@?Jp=mv34mLu z_|XQ^q63O$-_WQ@6R{)Ljb}-}h&?`D6qr^oqG(rQXyG-F+Xf9XBY-Zcw7i zRD#vf$}pUuig{Px2porfd$VQierjTK+uRQqU#(Zk99TI`A5iO5MQ90KJ&wqDv(UTpN}GhB2J;_ zN|L6Lmu(H_s``a0JRM6=+8i-~u5In`^C||==Baiw0Nu~&)!#znC}5dx472$&1P=NK z5eO)j?4qa6(_v1T#wl6?P_6~XxTA6;i#L@Hc6dm#kEMEIovy#BYd(Pg_hRK^F%rxW zU~czkBM!*z-um!(Z|!jbApR}G^dwmxKOx)8jN1R$_D9`rSMb0>TXKCtcA#M9?Uy3| zFiC|GuYK6wCZfVH+YB3%db6Fr=4IA`zd~Zb@-DhHz)dAU*m2OkUFF2fQ)?wax~y#u z^3_YHZm5S_8loj~jJ6yViRoiTQB1>-RxqqA_Kkh7ducdBw%28 z9`}^s$gziPXj!=hBeH~EaEe;Q$Ip5l&J3vodWysmlsRKJ!ZR~F-Cc20y0s(Hyg`(C z`wtYX1HD_xuLL;^r2%J*r5^ts%fAZ0{{|;4YJ17WBaBjyZ5q7C>tlfXDfZL}{m-uY zfo@y8f^87Am|tvNs2}61UCGp-obj2jA_Hqg$_)H-xvZ!ta{|Si+|p-j ztGN{*^lY)4sr(&8w6u&Utv2Vxoj4rOA_=}$A_ggpH}1BB8V(U(>b5+~Ufnf_aZ}qp z$mJWwg{y@v(oHgwA!*hi>Dj0=Q=FX~?+u>(mGliIu0h?zNJSmXUxIk#`TMVsdO%Tz zjZprO?llke9P~s8l|^yDLDSCog(yw*s+NfQl9+ zoh7NItuQCi$|_QkElP@VU0+5L%QvZUm1H9*i}Aq1)NW{UGUT2}AnA??jMwD;ip!oI z6#k5sZROMnE<#nY$ys&Y8a_2Ro!QWgh4I*M>Ph>wsyJZytp=g;G$U#Lumy7R@+RSu z(H%{0)(vrGIk3noKqFROJj}5>7P%rL18OHOA@`tm7%jbmrWR^i3nzjku-P1%?t%iI z)aLraE1pr`@A5=n(#_3w10tX8FclVgL~>j7x@1Eu0_+Pp3~$_GYP6uAvKEB6nmKT} zB_F_Wxh$op>Es3(wTlZVkb`c$x#WYL9LxasX<>ce{i3ExA!Oe z=}GvfJ?ej|{l$g)6QVyUJ-@VLA6NF@M*lbVeZd){>%V>%@arP@A=@L zGyGYd{51m?`p+5uu2udouzr7c)yK2%? zcK-?6|9a>rTFuY#E_SJ|C4v{YnBPvzaRfE bn$M5R4;F&59Q2PZj}C_ZV=W3&Jn8)(2r=}s literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm33555.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm33555.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f323e05f7ddd5d920373bd5b4237af9f5916fb74 GIT binary patch literal 10964 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%0Airdyog54ASA#^CDZ zu9yc_NS|T7n~Q~~01zQ6oGL_mC-<9+ifsU!8;1N=x0LLq^1fo3%*VlEt1PKpgk@-5akP-gPkqEqTfTStFdik&5Cx*a&aTAZ$j0l&Yp zZ^Ic!9;VdMlJWd3O>{0qoPxkSI|amGu%_mZ6on$ z62{_n@cz7&oY61+j7euEp&qu-r5vOc+N6MJTTw)R|4ULdt*HjTFlJulJ~RphI6Kot z&W1|+%A#7YPvls7R@Y&YC+;}0NXGM3%jgB6Aj~b;l%QDb@yhLRl)2P5SqTA!5s?@O z-fyluzUvM*1g^Fy0x(N?XJKTL8ecyi`X;}$H)fQD>UwDQQcHKl&7&H5OkV&!`t*ufRlJ;{=h!)U zbymNsH$*U2!f`eF{>ZnbzFTWiSIn0?b%@U8x&`UZj0)FHChQ7m zKNocRZ%3F9N0d-H5F^V!dws6ljt%z@|66=`1yKHyVSbb>jvkik0AhAMkPI-_nq-}D zvA)^ApxBW$boWY-xgVi^8m+e5)c8uC@oODoMB?RI@}iqzJ>fi=Hp|EG1|J7`A0g`= z$0qp$H)qv(ABm#I30N0Jn>M)mtt0(wKi@UJ*coO(l$M*q2x}lOU5wf2rlOosIxmOl zr{C$hE>I=R0qpQ z+)!V)?CECAQ&9wjm%|VTf&P6bslcLQVus%3qZ$?c5k}@f{Ipj_@aCMDuL$>< zYm_$3KB~(i4coWf=4+6uuee1X_)uAuTDo@8kS~xXK(d=~;tfZ7M)kfRc^(g$=X);39*r((O?$6i2Z}CZZ6W3%| zHY+b?nO4*s{p_v)r}oAcsF(4mI^=0R+D=Z#2RdG1h&^vbg?nA(|Sxn#j*Y1HXx?xdE6C7RJD@6uDlYiwE}^Y}8&ky( zCiAT`f~P+PAd{P4oVrCbX?dL;Xo)#ESS-V2v+X7#qVvcT`Ub|^ISp8NkhZn{M?&=(UATO(8CK21r0^^ z@E45|3hFz9H5%sP0?K)=Q#qsfZwcRu>3(?2uPqs}jhsUF~1Yt3M(7lR)%aJM!Vp{>$nA(uw|5|C12&TmAkaA^%qY ziyrge9{Q2^@oPLjv?|=s^z+{o{)tj8`QP%@pA-Evu|4|vh0@aB)&4Eb{b}dVBJj7J z8={}?|E(na)54!;mcK1TVE?l4*9qqT|Fai7?0tW=?*8=nXOHi<$I-v5{qFevY2eQ~ z>$ib$lAnJ64%>g5^docU*LaMu%dZGOD*wgf`RBX+CzIz<_gB<%|4sKdujkL{|H*Io kZDj)Suj&7520t%9*$#5j@IRM4HWW6L?1Q%=z@y&(07?cx%K!iX literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm3X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm3X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..18cb62c75fc0e41c5391fbb9b939e6ef1b7fb3d9 GIT binary patch literal 10511 zcma)CbzD^4)}}+cq`T9hJEaArySrnClJ;=Tl_HFaWsJ1gpAb_&AV0YzE(1KEL6a%aE z*}uijS4kn0(UD$fGPQ*tFu(fhuL-k79tS699NZgK7Ji!qQne|fipjUjS7}m|i7?T0 z(n!(nT>K~xn{r7d|C+}Z(H63I;1Ee`mZxl|y)ak>g>;$OO$cghZNxJ_xuC(!r%cUp zTUK_g{#n$jw~B6nZHj?3F#wlS-bQglEZ~~8T-azZP~6g*U41yGuuyZQrz!VKA7$|E zkArXPcRPDmYDe2{4rTjNH`=6IiCpNtfH`buqDeeV7Eb(*3?Mo59qb~Ta|7`hk!&L? zM@$2u#2ow*<%)q7610uTk3HXe5bhQC-+?|nFr*TB1X}zNXpFxCZQ=kldqUbfenqw$ zfY*BnyOO)nCcn_h^%CqqR8E9YLbn{e0amxYj}vch4M1B(x~6!qr$HML7a0UP8NO0D z>DA|&B-GTfQOn^Vr-SOPE&5U?g7$^&UH*W_dl;LV04U;)TnP`4c+ktnI!A|E$UPfJ zB{F)cM*4{{&zG#OUhoNxR6MHa+zYas-IMm8jBbPNAT5IAKEaH`{6Kc=n2QqUAcG~1 z-~7TQDB_5WBCWXml|$yZel{@q`#4f7a5Je^I2ACBev!$1sYJBosS(>(XP4+Y)sJwc za$D1+bCKUyyW6zpH&mV-!rT5#&E6V)HuU7j9i_I-ftyj{`pO#?_v|7XkB{3I`0UX;@N8P%5jzn@j)@EK~z?i1O}YI#w%^f zs{joT{Y}VmD;(u^3R`@dOa6@2l5SzU+mg|{=|IN$k*?>US#EybyEqdn!!YG>@6Y)h zCxZ@LmtMugl+|cYxc+lmfqul*-S%ff`DX#tUjl9pKpT*ynVIwN$>(q<g4Xa?dw`jOO(y)7^4f-aEbr3giKGbUGgf2{UhFZq>Wyo)TB+lGe< zx0ygbb+>X`@XH=nG$Y0?lV@oxGE`J@CilA?Ahl{i35T^vDn><{tZ}UfF!00IAGEEv z$|SP6;-y)N1@>v$2H(2$YMkF2#aiZQ(kI6D-$I3hurE5W%CpNB`N$_;2uLXLNR(#+ zN~(Am7hGMJ(xG2zQ$8@REj z8^&|zN4P2?LBjmOYM9f8G%l;55$XaW$ctfh&*UI)GnF&dP^R;yO zQC=28I&xBHq|~`(8p%Np*c{*Uhlpnvyl+u2oW8}_d=u*HdB8fX0(R5_k1P(uxXTuu z%9i3kl8!T%nBJIfnzkn7k-3Ld>M~et2HgzPy9#jh*_hN)_xsS*yqj4b5;OvJKXaOv zy0q(gAB$Iu0Twb|lw3T=NaQk}mD1%xz~$r;`;-eU7G2BiywCtvUOdI9<}&`lV0^={ zRu`LEpTB<{CJ|_f*gHvxZe41Z>r-C{9cTX5a))10?z@;wF=)P>A zn(V}uZP0`B!rGWow_e41VD$Y!Pu9qJa#1bwR78T!w!uM!Byox0R^skA=EGI}*t?wP zhx=(Nf^UR&D;TQO85$?6<^kdl?-6hg@8%+Lh&W>)jh@R6@5b0Ds1M&G3e+51r{Mx3HYcUZ<_b1a^s7xp zSH&H!)WQ^U*QI~-ALe1FJ?9<4!A#>lqWhM}>H}wGA8`Svl3>xqgFrLHM!k>xelnW` zDik8@HH?>6!O}(bW^Od_)7KkicCC9BVC$)a@IzU{0@*`^earb!-%*VTc(N(HP&F zowkG+-M~=V5kUG9FcSr6>xf%5WD)!0_BlD8jU?VrflWbnj~Gq%u1lzw0fGLvsWG3- zgN|WCVBlYV739leZ@{oD0F*Y+WuPDN(kGP?=6eMz6*SN_uYJh-_m`rak(_=*fWJeR zo1ikDx~{4slVZ&-d{PBq-$_YyQe<+7RI#nAvR?wW7h0mkSLEthHwi8dHU>6zhu;ZK zh#(6C9SxnVKjb$?WY0%sRmCJ2=phZfbDkn9I%YU-Z4Js`qh5*mT0tj7S~|piy=d$Z z99*2F=ZLZa|JKo_%CEtrM`nC9#f<IP+5jwoqctqWjHL_lt6Bq;G9CWB;XDNzD2} zSzz9~*H%k`B(ka*>1MX|tIlz9JvdKYiJt4o!b?b}L$lWP(9qX%{?u29q%g!=*|#CE zwb)N%&W?d`v!$7x*>4;5%X=d9XgCOn zRKi~ynm@#T3jbUt542Vs2sw#-rPh2azkAzE(del#XQgv!8SSZa&QFkJMS`|^-Gt^9 znp@<->r_-dBA%jREk}NSG8r(K>)E*`mdI8QPzGSPw;)jNfx5q+gc``g_xA4Y?%HN+ zt&kt%<&C)X(E57~L4#xTaBrakr-@Vh)8?%i0VwMdHmj{`++Rf*Sla_#YTHyV>AM`knI4ybF24u&S&#M-Dh^l*ynAUA>e@_yM#Q#e z+l<`?cT_9;EIXHs;ADG>Nm4*P(wMoczHu8$1R7tRL()1u4&$6W70g3`5WxxEqTp!M zhk6CHm;NC(h0CENf7lK4(s*RM)#va#SYOZU%ijE01D_w2Fm3cl zIS7Z-VbadgL^*;a{`P%<@(oimh59^FG7Ovh>Z(Kw~f35H%?=B*C{XVSVe6|E{qEC696~;Izi1QiG+Qasw zVc(%5tQWCUDW{Y*vWTn%Ojj5dX%yP87)=jIJd@}*i5npd-07r=})e$WxAH1(e%+S<2u_dLSiFADE!fXwuJ!bJQOg2jIoC4fkmhT7{6+@(LuMmr0#_r&3U-Uv38Xy<=p-&Q z(9rO>2(~k1onNF>gIm#QC+al><*DN6cSQ1nUh%w0|Ejz|fY#bx^3VqTzsqA)rmJ(Pz^wr5o^hy&4@~LXIinN>RoOx+^+m6F(Gc;UVK!8U% z0rKWd&={PkFpRo>@N~O5$`q5HBjH*LyU%vm8vV8k;hhI!5wX0~bKJzl-tC+n&fQ@bv@0H~ zHQVVo}m|TpZziK0;?fF6W~l(-XJW3oOljNvA)1^^%}g>W zm~0qo=o&QY`;harr4=@-#mitpY_XyY>x2}@Kz;(>@1E(Rfg;?zy%PMM4&YXaz_G#6%+N zrto$EE9IFQtG$A<6uTLV#hp#BSUjCqu9&{rQ*$1m%_X~cKgmTfVM+H#F%7$_f|G5q)oQQHLK3)eRC~XHbxX*hS$BttbL=Iu$BfI zb8F)Tg|L5~NnZE=u;|>COL)nw1}-g*Sa%D2w?|s@nN+WyJH41KiqEHF9ky*+`E_RQ z8?zhm$^wBT?K{xHgcAj9`cWwJ86YBtMT4RHdoKGnGItsGeyhPI~GZ?SOaWCRRLh8t4MU*uTmH!@~D9hFpYrnLFD{pq=r4(Z>v z`R*v6g`5!Z-S5Epo-bv`25i@&oS>~72NFhThpQbQ?C!XRPjDLulfk#7r&YL@u^S{H zHAVrZBo)gtz9jkX2TWWiGycfpm_8WCi=2$q$-YXtPP@7zGGX9o0_)s$ScuM)pqn|H zdD>jo0jt*`A2_gc?N?!QF(ISLhAtyk@Od_3j^`_~1sg*T`Syce8j@mg$T_2cVwZUx z@5sb)8O8fyt%}=P-W?gX7cSI6W=j%tR!@{^XqeZQOpHdTOPU0aw$go&q{uZZ1Q zR%~ZbV1k6rC2I6TOmK1hC@#-x1E}DMv#G*lN0^)TN>4%ZSvjZDu-Jz-!`Ve-vX7o9 zgx=3U73wvfP^oxL6rI>LPFJbJ`jSqDV+=JFT&_q|AH;K`?^zO9KvQ!kEuOi@92VT! z>v&Oo3%wzBF>EDz6?#c*x-7`KY)*nN=%rDhzc4tOdF~ZqNhoZC9rGsE_h_XQKVB-5 zQO>9icq4rmLg1%Oj{!*u`5Ub^3YzwcW>m!P7GpLRnU~vhF%4T=pP5%%rGtYwH=y$OJlpG~Ud31Ok zqT>fdFh2c(-Lgy=4^j!0axjcy%$$5ZjC>myIAsKLSPjpbl6ME_{SP`fH?SePO`1Wn z=(Gl-{lvuHiV358l(g~VQVL`rVl&0{Njo9&p^d5F6~>8C{5YvPWKdpO`ZrYJ^}SV% zHzmRn+y)Su*BZ^7@^uPSczz;fOV3NjKe1(ZK;RAcBHw@khQuYhE0KD3TCRW+G$+Rf zIO%qxkj%{Qbm=ILopa^%4R9T0%KPh#IN^n_f>qDiGLx&Mw~->fpWA0!z{%IgwKT_U z>Akc%@4ur8%%BS&32%UEc;gCnfrX%a}c?||Ru-THj0SOaTt4;9x2f1&z zFLj`bd<}&UNk5&2=6AMXEx4mWRa-T3Q5b%Vt{fP*g#okr011&gMteLVW+-}0EBdul z87wG8Mk!G0N5W5m^I_*{id>& zULK!*^|bEdH1pkfQ)wq;q_1sweHgmle|TGPU9Aa6jX)DvkNCmtbk{8j#q9RW+iBm$ zcenS>x7+tu7TI#XXTeYsc)9eu9ibdU~vX=>0JkVd|Tt~}@oT0``?@`zF zVa5S?5L@_#nE`E{H}i?j>uAfu50{i<5~^PTdhXpW+EcpQ6vZN%lyJ-b>Go!~E7fz_ zsz{Y!7y9y+#!o~9@6w1ombhU}y>rVfFHNIUfsPNLt=r}4L5GB}Rf}>tS%U5@U$1A| z3itO)wk$p{LqSK3FRF{YSOsscZ|~=S#I9tFS>k-840buGXn&XOlUjuR5!(D!QDQho z5oJ;^HmGCea*_Pck!=kT!hg<=%R17LS6-w(0(Z1)GD6G}AMx6ByWJ1>2AC~!3M zm@zQuVPZq5d=yB1P$%T<1?4_sS*a$Tgz>>6`ti|D!M!_?##YXSkrX&IhnXl4ACHpE z)4`pN^LKN3?_b!YHG|QZFGHX4ksp!a-77X+!|bFUhon}8_Nd%0c77VDnPKs<``g=n z9|{U(c=LJ8_`$7u8s9g7wwvbTEO6rMc3D%2bH7f^`4J|RE{<1`QN=QzF;t_~hLJS^ zvw766aiwf~fdeceiWK};TRR&w55}HO!K1lM2axOVuM=)0Fn5%pvRB?*%&$v@he?y` z$>z$Lk{7^ei3Gf+d9PXxGavMD#7^P`-Nb=rzR;PDAp-{?D>6p3r^!ySVu(p@MKhfq z#1b;VeWF6WqmX5VVnfr*$BVM5N(<2Zu^OO-=|(jv!v+(T;{{zQs5B))LsE(#pIy17 zJ|*|_wz?9eFcsC46;x(fL2N)O4LMp9$VmyDN$N^Z^U-3bu#mUHO=?Ii;M}$g;Gb$s z+(EUGG_{c@*pPF3?17FA&w#BDVxjkEf4eJpQa5EVbo(2HcJ`CJy}`H4$;9p92F-pA z)6L632RID-yuvCIAg=2QZ_F}YR|eOS0e-OktGnK1h3a%Ebmk*6b1PXTD#RvQL zpGVHezL(pnomtwz7>-US<-hBR6Q z32Ed*q&VaJRkXFP4aGk$6_zIo-^oZ8ru0n-V+=ZGkv@&?TmsuC3{0O$am}RlAb?qn z35n51*=2ExuQ2d=5@Atdrucm{5dbsvOQ#GOTx}in8hk;!#3k6uoGpZ1-l>ugh)!{* zL`k#0Oa=P|s3X*`l5_ zUa2NVaqjd?t~qep>wUKI+)DPvd}X$`p6Qb4VCLH;QGL`KYDVs*&V3+n2wenDz;4Y$O}$nWN{4qAsago3ZjS6tkRzH6u)s_`xiRPS%MeR^v#X;oN**K{;W zZOj}$BrLj1`=uGm$=zc}9uKddLh@7ZRxh81aT{ zhqm3Zm7t10<7nJO-Mcdd;8V}As6%DE zkv5lVf(_=cC!_IoFw3bgRe+Y^k!RvqFMM6hfpZsU_h2D zTrIWEwWW=IAILF`>~5lEPQ9^{5X_hA)=-P16wr5}GsBZGr)&3OkQTFE=cR^}#Kxh) z`M)ul4>;=?MDD6F=fY|pgq0=1>mTO0M8YH9Uta0y-&`d#W=>t5o~}8QGJ5%zndW%` zdS2+eW>Q&YzOga0$VzFRj(YvEVlZ)%mHK83e5GeN;pJ10IAtt^ns9c_qA68PG4R7Z zV*_klHyA0LB<;G9@Ng2?(cG`MVkjBNlQl-~anpftZ^f}Ma8U{n zaTsuIQ#$f;*IWvaE^Yk+?V;+}1=GBHVtf-6xG9jdz(N(T=cPQs7RpbbXf?T`swk4p z&nfYNSJ;FykgL^R(SGPevM-xNQC^^TnIX)x8P16(xaG>hp?Gg>RWL38Ts!)i1RNaiIM79C_|Q!@w6x5e8AU=jI8`NL@tbbD6H{8ht^#QUbIf168r1C`iX99g1k)-;E}=+d>;z9AgCoxs&aZ!SUKx@104_}sg5-$CwzNB zEKrK`+%sMu>JZsug_eE(p#4U{+qi(s9a<|PK+GVd_$=E0Vtsg&lFoRK5eyp(CrLGj zJFC&GvClM24LlH$)fK>Z9O+J+QRUlbrZy6Jk;T`uTs1Ja-I+oQ&Ka9N742UkQDhSM zlFNpU_C>I0ok#j)WjVJTjG6uNYBGNd2_ro-TC>$DX)7KNJV!>TnS@0S=Z(KI`zW?t8F4FX+LojIG^AYY{*8<4*nAU_##Vu`nX#dk#@cRmi-8r<%^c;N%_ z_w>_wL5Xbtn0}IBe;uCdymYX4HnVp&Q1x&$1L-}bpt7W4`z`>w#6|KoT712lv7wS0 zj=u!y@bizS(7K*tOlzS6AzdqOm^qk9P)c*+!2QOpu`?4M{WJzGF_8n?v1_eZYQsX6 zg)!hcueUs@W`L3=HG>7Yg^dUo$qvgy(Q3&EezqbrcLGK5&pAJMaCypc`JmpkPN1S)8E6Y4TSO%!a$%%(Kbj6{RXJ*1|#V6+O*9>7~l+)F~ zOljgpkOelG!7`jtA(C5Po_QrO>-n7@=}Ee{*sMY2vmd0vqYO)Kid`13X+}WoQo`}Y z&!xo(`6+5biL01-E;Q!@na&rabTu4Zprg0(fd#K%TdvOe;U@+%A$^(w4?z26eAiU2 z!gu(&2e7y1k#Vls)=h4$4h7#UFzk0s9KVU&U#^bk^IbzKzJi3p{<%2+q9OerpvM6X z0SQ6&_=!RZ0r3yv`eopsX$Mak=vRAUG})2;nUDVN^!JSPr1Q&Z{2w|$XVCw0_B2I* zwI^p!?JrELzx(^0YxN}j%OCAu)&9l2`W>R*2}FNt$32ehKb-!XPV~F_?}V5?)gK-c z@}KH|&}07BLq9P;ezm8E)`0n$e*Txj-%)BL|4Y95y`#S;wkJQoP+I+~+JB_E-|hUq z3;fg04be~c|FI|h-NNsOmVa7^!Te?6k0Z?g|FeI5T>Jj0-Tm(I_afh)9w+{)_GiiO zcLTrgv;H&?L-Nz_Ut#-SoqnS3{Ay1TcK;ROC*?ngJbxeCzf*ahbbm#y;6HT#B=-E? p{oe@=e_Htr|3~-#)q|gxpL7SsSFk^)JSGGtg#4qoQmQAt{{!d+I)MNH literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm44668.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm44668.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..add5c35934c405ce6ca3a1b196abdd62b0e32b4b GIT binary patch literal 11054 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm4X5TypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm4X5TypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e5790d5e0415b6175d19bae29d21de9c6836cba1 GIT binary patch literal 10512 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

    }== zywM<4nqZ;K8?Zo2o?9cGHM*hCd3#A-QR?yD%3mW^K{C{#GZw8ZBLi+TE+J>HdH^fE zjJ_IfLW>}rBB0S6p7E3hnbPLs)H9w%-}mfLU)sgRb`>U%V?PxUZBTkc{Gw=8D;#Qv z8i7Ale0e5-IM$y5?cD^p2ZNRf zT~oLV-V)~Q!{1m$#JXnLG`h7oL0@O%fLVL4jwbmul7i30#W>#kN)oT_l)$Y^UG=cA38s0(EoDw zI7NT8M`w@iFI20)`}>`2^(g$yAKhQo{zbj|9irbEM1N|>K8)-?oc^0n^t<}+jF>;w z?;jHKpXz_`WB%7eKTzcU>EwDKA8kM94g2R|=A`3_1i;D1heY$$9f#RqStG>>}!2j%WHE&u=k literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm4X5TypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/Matrix/WaysForm4X5TypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..add4d90709c6df1e2b1ffa9214a38847e915c63c GIT binary patch literal 10995 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 Mz&u@~{qgPp042kV9smFU literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/PrizeModel/PrizeModelTypeA.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/PrizeModel/PrizeModelTypeA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d30b0172de24d5c0f423fb1de0fd84ef2900794b GIT binary patch literal 9033 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Link/PrizeModel/PrizeModelTypeB.xlsx b/gamesrv/slotspkg/external/excel/Base/Link/PrizeModel/PrizeModelTypeB.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..18fb28cded849c19fca96c5181f61b9ba98685b0 GIT binary patch literal 9373 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 VK!C#I$2$$EfNrQX_EY`%^*@ari*^72 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/OptHall/S_OptGroup.xlsx b/gamesrv/slotspkg/external/excel/Base/OptHall/S_OptGroup.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cd9a456a5b61b7ac40a258cd98ba483afd8210ad GIT binary patch literal 9912 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_MidItemInfo.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_MidItemInfo.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..efcd4485ee93b908954f6c11998b174b74fbf694 GIT binary patch literal 9702 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⩔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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_Others.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_Others.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5b4fc4fad0cfc10f274a152507427b6be960b07f GIT binary patch literal 9452 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 ZiFvAuKsY@9c(4Hz&;bvPL$rT<`aiP?l^Fm4 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_RandomMid.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_RandomMid.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..75e061b13267b8418d2da984b627fb7a157a338a GIT binary patch literal 9682 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 PK?Za{r16gO$GiUrRAXQn literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_WinItem.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_WinItem.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8a6330c5bfe10a01ef10453e8f8d5b25474bea30 GIT binary patch literal 9391 zcmeHN^;?wN+8$!)4grzw?(Qx@x@+jJ89Jm(x}>`Wq?88fPEk-AL>iP1fp6SrpQD?z zzrWz@^~0KXu6gfgu32+Gbw97F5*$1p00Dpm001ZeWoUceHZTAHIuHQB1t7s1NI5$} zES(@Gn%*v!U?Wy9M+fpkcv$*;04((Wf7bu-2~?$wI`yz)$y}sfV0VCphh;t3z8xXV57bqXJ=`X<1WMiHz!51YWFWz59XxNsx-ZnA&qgtNUi@$k0(8#Y-=C*L=}qGv8D}80g2M~5?NsdbVE^knj_+| zeOxV`Gm@r6?L0Z)Z0WNqd_Oj@0_E2IJsd#wFAj=p+-V65b4|Di%1)Wprw0nEnw zbN|ON|A)Qtx1U~>q^tzTffarfd`~gfA+*3qIpe@4v#o4#3&W9dYs#0AP~3WZAu9nX zcuVS&{n|6vJLAl%zR0Tx%hv-ZO$IqQ+vTYlYCH$weWMa)VX!_-ZZ@Ri4^8p zxI)p(_N#VYKIPZ8qdv~VB~(larP31#dY1{GBzI4E3bhMLsJm+eMs^}cZYa&+Na^%% z^R|!dr`6SEX~Ht$a=u>e^8*{(i)FyL&lfXf{kGWKIWfz0o!Ev8FF5K%%qMgv`EVwd z>#zUTWzs+tST#_0p+^7!FrjyNIk0&;yV;vLJKO)vXT_QeDjV!r{wB8f6vw{u*>4M? zvNzy0A_m$vIlu~`HMkffvMD~%C(Rwlp_ zDVj`!Z>p!Lg#~Bu<`_~zKMYZ+U}z?|4A{mGMV=+^+vOs3Yq4M;8E#}OXGf1L%qGl# z4c6Wz(N7FOs3G62V_edFL?g~jX#KSWK}IEUAUQQ5nwh`3qnpIKXcc{}R}`)Lkd{5i zP^(r`f#u~_wET|n)2RFT3wBYI?yuYkc~W-1(V|>gy&_Eb0f}18gD9A$^Y^@u5o|x` zM^Sj0Nbl{p0Lwk=EV7sRX58iVmJ@ocqNyTq9cwtPY|`?<^CLVWPap|Jm2RpW7#~;L z-}emd9c&6~)dnqIv=k^}Nkym=CVWo2_O#S8#{?r&dN}Q9^y7tnhCvPzVo&0xMHQi; z^8&|wc1~gqGe#NfqecZ4)HShL z1$E*ln6NVmP9Moa;1;#oHCAWo5kDqRI}i1cc!y_;e{FCaRw3VR<{_wv{{F+A{ctq^ z�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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_WinMid.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Feature/S_WinMid.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7748fb20a13dbbeff6e2f67ed5e4e6561cc77988 GIT binary patch literal 9697 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/CashMania/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..67990f3e13f9da92096105891432d629288001e4 GIT binary patch literal 12379 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 Wq6{pAWB>pPM|*iG_1VtlijaSoyydVm<=7)I$O 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_BaseMultiplier.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_BaseMultiplier.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3a9ba33ae66d1a0ce225390f0470606cd31fb77a GIT binary patch literal 9424 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 Rl@%5EMg|&4S3~^7_kS#TH%$Nl literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_FreeMultiplier.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_FreeMultiplier.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..26d212ad07f63b74f74cb622dc63f6aebd6cb33a GIT binary patch literal 8611 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_FreeMultiplierCount.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Feature/S_FreeMultiplierCount.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49c5d9aa95e7a58b2ddb0bbbc26d3ace0f243b41 GIT binary patch literal 8760 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 XiUJah9zS;mp#wT#)e(d4=d1q#G!Rm7 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/ReelBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/ReelBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..aa448e02d31d13f912b7f14f4a97023c1d60e070 GIT binary patch literal 19183 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 BR;mC1 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/ReelFreeSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/ReelFreeSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6fee26b40d40a3d5fa818a24a78a57cc42a285a6 GIT binary patch literal 18881 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49abd74cf4cc942f322910187473ee138df2d7e4 GIT binary patch literal 12378 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..229350b0a80875e09de0743382e34a16f7a1c39a GIT binary patch literal 12378 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 Mf+#EZi=RjT2XS-n{Qv*} literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Settings.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Settings.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7a517f2c8fbdf5a7efd73b1c07e9f959906e2d84 GIT binary patch literal 10245 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 aoBq3UswyJFKn4I{z+T8OoNm(n`1XH(!ZUXO literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Bet.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Bet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..96f997af1855d949bdd05590c9adc69f753a1057 GIT binary patch literal 13967 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_Others.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_Others.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..15b57292d65cf8b18ec0e36d292ecb153431e2b3 GIT binary patch literal 9393 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 N7~p0sPy5HG{{s{#N<07n literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_SuperStack2.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Feature/S_SuperStack2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..88b8ea741b46f0880f5ae38c5f957c7a9599c27f GIT binary patch literal 9714 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/Formation.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/Formation.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..559d3c2df38773c8555d1e6d8ef30ec15a517137 GIT binary patch literal 9537 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 Mpw&Pn)z5$b5A@fwRsaA1 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/ReelBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/ReelBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..98a7ebdcea675eb969dc3552b96405985147ebe3 GIT binary patch literal 19517 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 azibp4@mEj21`rD1Zx0Zka>eoV_P+p^hySwx literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49abd74cf4cc942f322910187473ee138df2d7e4 GIT binary patch literal 12378 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneOx/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..99436c71f22622e028f802133694fd664b536267 GIT binary patch literal 12378 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

    DjJ7ljgneE^)YSH0RP_HCg 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Bet.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Bet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..96f997af1855d949bdd05590c9adc69f753a1057 GIT binary patch literal 13967 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/CashPrizeWeight.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/CashPrizeWeight.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d5f2be81c003992629348c523a4f984ae78c94fc GIT binary patch literal 11249 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/S_Others.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Feature/S_Others.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dbda08f45a609e658d487ce534884221677f5ee9 GIT binary patch literal 12621 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 R0jR*g2XFv@o#yAa{{j(?e7pbv literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/Formation.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/Formation.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..175a45c465e2a8843664a5eb9c45a6261921fa4e GIT binary patch literal 9534 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 CiLd|w literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/ReelBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/ReelBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..74dbc7e2136695c61a848abad1bf0741c4a77f81 GIT binary patch literal 19634 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 K*e)jpJNh3)UF}l< literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/ReelFreeSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/ReelFreeSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..044152074835211be70b40199942918d353b0b58 GIT binary patch literal 12926 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneRabbit/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..faa598212a7ed33fd91ef29eb80efebf41483903 GIT binary patch literal 11592 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 gl>S+oi{?+#zZ+I%IYCh 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 WrUVBe832F^c_Bb}N<#bN*Z%|lhB&AI literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Bet.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Bet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f5c9db610be584798fb0318a275d4cd21ab376d7 GIT binary patch literal 13940 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Feature/S_Others.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Feature/S_Others.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b570564a8351ad6b5993f63175efa3a809b3719c GIT binary patch literal 9408 zcmeHNg;!K-_Z~W>8bjO%{gb*Ir~|2_WSJjefHi*RRInj4}b_j1^@t*05QJM2`3l;03HDVzy%<~8b~-h zd00Am7;E~vSh^dr`8YaI6vM+Z6arwO_y2GEFZMu%=CD%_2Ufezj)-K3c1%%JSs5}} zE13b!7E+cEP?x6h8!^Lm0KJu(RxNTjt(wDx0o{=xQRO0?p1A0m1KXvZ3XKWc>x4?T z1ECw)0;$lK71{~)$#Fb|L=PYk#OVek#pXpbHan_2Dp~>_5GvPZ_o4E(czLvl1Z_Lh zMj7nI!miM8j~=W7qbHHs6Q3}3RucJ7I`7`8J?7G;sm^hKsKu6cmcWQttJ(s(B$wM6 znZheHsD-s2(mJ{!g!a5j{oqDBpr1>#w@1l>t$*v4hYu;K_ zqo?t;Kogdr1K z6#1OV2fpp$$nKF?wkv>7t^3%=WbT!)TPO#|+I)oH39r&H5@((~Ny=RWWO|ztrd08t zpu>lt?@74XES$!ZU6e0jtmGAok$=uOz#zSa#@XE+96%Sy3W zr+Bpt=7qJ{o^+#{SmcDi*}3cBO0&>=R_284uonjDfPnq$cdM8Z9^wNJ_@&QBq!BB* z^6Q`DmKdKYxW}TumCZ{9&T~s6F-@LaAHDvVAGgo7X#fYXBQ6ntOIOE|jSr$ajO7C% zj=qSCWzdaHpd}TPV?&eI($Y_KMADYhO+XBneTNiQJ7u5tE&1p^*A^nQ-d@ACLkW|sXK zSUrm`Y5=#5cC*mPA&e&GO&oSc>6=j~Q0neuK^ux$hnlF{je@>(7av&!y3~)M@FABx zN?Io4E~wO#BafWok)8IZPaoHei3iH2ZzxU*O5^Gt3JEy|GfncwWu%*U(sjh8@Q7p_ z<#7PC)m-Tp5-pIP;4Uu5*u;O&!$Evk4XpnBjs9bZifTq@`Z}s;?UklARgVh0LM|e1 zZnG5;o8fdlp$3D06?!@PFs;e`b3as2GFt|G#^yP*+mugNhNf+b9n2 z94~zAj~?t)ds@4g$ipDUB|1v3z~fa?rdA`}IR$n&=SW}3*r3-L55`wG+>>tRH?cVI z&v6|f0tn7yM`LivX8V?^2I~^ zYJ{5ygg7-F?PJUF`w9qE5lrtXgA%o7d(poQvqBIq4|O?K`!mX;pw>^~2jKW4q$ zRHdXv4y;H>`XxElYRnOgM+|Z~YItjA+0N;jLoP~f&Dsnv8fYhIHAVuKna!r8&r5L4 z`qQxDMv@F|7$JxD7C*f!Q3}AW3Qf(~{qSh;`LQVMuC5WsTl=A56c%4Y|7#8roBDeE zV6d=wwNi*5`i)I1cHJFqaJCDgrC zUhoKRC>XWyQ(Ip*_UMp)GPsXr6#412fMp}13$;lP0dXYPKe7H>)`$M(vk7(>B) zvL(SVcrd`ckLJ9*;rT`dt5L3*1}4OKDKc$yr7?z2AELjE`zW5H>LiPoZB6-I7YJ|W9sOy`wD^`t=&|!%mSe{XAofwipHF-_Gehih>(AZtOKui_FkxNCZ3#t zpA@W2%VhipbQ04Fg* zDexkVBU}q8%qk-tvK`wIsWXgTDh=)I!`YL3Xgy5KJKA4uD(Lm7OnV!So$I;(&;vn{ z@`KK#&DEj>)=X(|INdH8tnYMbJK4;|dSr&*OUGat`2~q@a?JR~Fla!nP z2G=#TxQZrz0r4TD5;!ufD9h?uStoZjg}hR&H%_DzlcxD$RU$?{+S@4k3f5(#DrM+5+ZNq*$m zKSR~S#?sM}{pbE?lflj)To^=ua1##77qn%LH}++KTkVLd;YAMG0Y zutw$L(N1$MR$RMXx=JDOfxSbBh7Yf~UMT#s)zJ>O#O7zdqS@BXh*|iQ8Bg`J;3a{2 z;%pOZ8l%=L`%O61rnjH#OvUSQw@F9|Pz8i4<=~AEqOHb>iysnRX4f5I2eKGOQL%j% z8$6jQFj(n)Cgm4_jW6K9(^hoJyoVaLZEJLrJvNx593b+&7d+4jt6G~t%8m4eV)(16XQ8*7i34<*UIaG*)1lF&nEZ*W18@^=Xk|=E-f$vdc&%eBr6ytFyQ}E(6 zf4iV%kMg{)juJqVOeLl+Q$gSpNvGP6U2Ktyy&3)9oZ%gUJaLp&HTXe0;&rBovC-S; zLZNtW`(d=K@0E1JgI`kPStJMBQJxt+ICR-2QRQbE-nVo?*he;yFn~w(c5x?}GO&H(aUiV|JUZ0F|#hp1t4)FU+;=IpW zI$v%X#36bSA@a!D*_tyJo0CNqy@Rz13G2y2AHRq<59WKVkjX6y*?B*AAEtDl(2Qq< z>OSwlr$_vr#kpvn%>!t%FxC&38TD|22pa4(`yuCjyi8QJqw%RR46eb+8D$ti9BadS z1v};%8$n%As}avy;wKx8J#YSan8=#ziy)0MCbqq-w1oqnx~+#S&d}(HG?uz!-^O{! zwD}D0j<7IS%6EMVJ4%tB8RRt>eblrC!$ei_lVEa6>?PU!in^FYQWu!)eDjgqZajCV z`j*sgpN5yKu#UB_Z?dXzaI;a|?2dfHiKbHmyh!>P^mL!5a?jNof7f78TVJ;9K@_pt zAfu1x!C@6UX(O;HDjC_dnMhgLkhR!xENv#ZGUsSt@hOG$o6u4u za{cN39e)HnC+}-v{!e4kCyxB@3O}{E+=-2WODvxg_S)A8SqA|3RDk=p5L&H5$gh z(&33ZrsC^9ep>Tkr#Ykma$`yw!H_>9_-zodyEn3KXj|%ykh+5p*p2c;NXvFos1k^x zm&wdrB(+$iC`!+f6KC!vQgT(xyEGlv+GsT@ohhW3s0}2QCmEZI8fw5xL0c5nFk-aX z$@N~Y!S3>1fM?|gqn}>7WU~}{H5=|w@khbc#|#}3-WsJ@rnpYZ2#&*5Nz&_tg(K%a zO{00JgAt_hfLn{CxOsMm0-2n(g?DIVP#Od1L`OVf4hm4gE002{d1bjlf$>)CUbF~^e!Xo=>-wem5O_vNJwf)_zD!q z5#e*ivTZyyjM<7zY+dRTZDSrlhgre+;=@M2aF*}MUQlMa&OOPpsVJefUSUf(jmbA` zUoj##W0J1Ww8;BieRt8mGEBT-94GUAt1}0s&CJL+x*hPK5nW-7O<&1QrHM7>2@}!5CXUM#P@LwmRQdep54PW7O@LC`f1YCS{Wh4C_ zD@f2!f?btsDa{YYW#76~6N+Yf#!RGn9SPCW7i&`6MieXIMYem^sS|{X8yB6bpB!XE z+=Gp0gkNBwc{N9$X%R5u<=6vc(kRd@i*3GKS1*U$u7AbC%A+?8Sa1UQnZ8=t!e9>U zoG$~F)aYzSsnv_@$%vH;`S0*sqwaZ=rjTRkr`Hfj;foy8+-SE=9q*o0t?o4<2Atxz9e zmV9grq`{E0XtR5vUj~n(9@pn(mXxZtX_`Ra&uBIn$!^-;Vb(iecu2f_K<%m}S+vr} zb@u7$*|K%*g>o~Hdq6<{%i8+4xHpdl zl-YUHNZ_&RVh;wg+`z3`jYXlFGG#AuxFe=QiJEsB4ANf!-_<3-d&5oSG>3A;7=*VB z-6BY01vIecDaHVa8qIREjlv>QhBh|s-*W4@7V2M_1B(_5wg9uO-cz#V=h!UMW$F=6 zVGVWg5k|KpTDiP8fP2C4Ln;!767y)_{%5=NR0&2()!D4%%EjVx8bykZuVP#Ql8&ew zI_d$*Z?(iC1j=d3oIdb;p*X0`k<9)oPYw4f>^%>T9K0hdxFewD>b6%OUy`H4{#6J* zcR%<&eAtXZk-aU*0>jBl`-o`cO;H_XYiOh0$Ap2T3)^L_&q=Pr$Q}4J*d8%O`lW?Z zD;I7$;%PV}t*_9^WGd%h>|Ilk3A&I*$$`}QqhNNXow$}`fzi`Fq6;r7`A+RMQ979| z(Yf_-zQtFh(=3-(1Wi7q$c=XkG>zH|aK&t6OJ0uE%sLVr;HcvLc!LeQoyhvkul8I5 zMBoP?1$?`UlJcw_3>vVP905X z|0;y*gh0buu(*f|jZlG}tbi?J)MEqT)AsA`R=Cu~nFZ$~ zL;cIKH-LT0Gd+$2W${(_sgzBDHI!`r>0t(ssSlVLsRv(K6nkOLzQ-s`x(9R`RcH7= z;Zsx{w=gd65SL)YL#YZv>Dg!g^62&w_~%qCptV~3DKsPBfoAV`e}#&Tshg#RhKHN2 zll8BN0d~s6iD3=+b$jd1EjpM{s)5<0C`{;Y-}bukwHP$#7n4eta)bTE3)av(X`gu^ug~8!ecX7T(kHn= zLb*=u@(#DM8ets!NZ*5UBKmz57Tb7Xa#hiTLI^sDmF8lqw1*h&u`4kEzh%LWw@Hc; z-;H1whjCpXH~o#W{MPN9<0AxRDHthKMl3u8x}!C@{;P}!+*8lKj=4!wuL%`_?XE|= zr0}Ahx2ye2tYI(`dggZ4Y<)$l9&MD*FZEx6NQ_w_`MZT^PxlHKD@6$U z9+hXtsDONO=3w+(0yP5an3TFt6J|Ya!VE{BHwl~{)W4W08y<7>y7djX5E1FQvpa?s z@&29l3OGJi=!Uvj9O`cBU#|X9BKa%p{Z%vho%{Z*n1m;F$M$gGNu9ynO8EGt&PAY0 zXz)=rYi+`rT`nRnWhS5D-T2j$S$2K<<}&e(H|I+5EvXeo3d>9@Y{a@bp-s(qzeUzg zvDzm)%XlcPg2|@SY#lG)l$GUU29tI1(P|^qXl{sl1N%PKCZfDe7T)+M7vsw@d=W?b zp`y&r@z59v#ID=`VObB*3F8-1*Sp_#`<+K@={3S`iy81BWpW~ZEBW&UGfaS@70LcSAMML%XyPc^>KBx zYFd++x;k_GGTf95u&j1^I{}HG8h3p{s5VX#s37kwI=nkyA>D6I!dq!68tJzdJ<6NS=8bsmPnwge$l{fzX~tg0VIOK- z*ZKzTYbPkIe3Az+J!Z_R=?ZX+Lr;oxX^s`>MB)3CPC>3L);XD49JeGPDoqL4U3->x zHoP|Nl@OcuK~HgmGuv@HbdoklQDiAa2eKp@Ad!c3r=a*6hVb<$D=iCcJc~>pTH!>% z4N9!>ADMSbTCbQ5Wga$EpJ4r+d8RHd|05pMWq)nCz;36dA1xucON>ZxLaq}-q^LG0 z4fFGb8i1VNrUgGXokCN|GEZ591l z4&NiPl-*K__=-S*8qrH9Cl>}Ow6MmZXphibyJ)J8KQcGO7j?@LXbcbt^QDSPaN)GSjrkXq`Fv#!xRzq$s zN}oK@V6ZlzKK4Y?wm0->V$u*7fvjl&)&3i4?uqfUKWOp$P9sxf0 z?!}y+9+kW0-)u{?lNY|Tynz;Le=TY-u&hw6@aMNM{xf|4IsW0D3{{1H0{pW-{2#*~ z$Jfvp`CGU6zTy3z*>BVL&{_Xp2kpM`Kid|+O#y&N=-T!FH!<$x+^=Q-MrwiPCjVb$ z`##G3GTUzy3ureGigLf`b|2t=%JUn5nBXVC?*!<+>3s?K+fBQBy=gB>6g_ordb3Gmc6uAMB94D`ElCPIoDYxQ`BZ3B2w9oNf-hTkXw9u8pD{ zlw@ox@P4LuH?PSWnCPNFa*%CBF2PS~V)D%D6+k!FDT2>Fssm+%$)F6GmAWnOb&o77 z(|nI0SdzVq;(X84r8mzTHBMohclyaO>N8z3mdsCEUq8yDhLk*+Bl0RqkHU>jg(YgX zxNU>;=I$0vrP-H#KypsR>G8vuAGr-OS~MV2p2CbSj67y>sA&Hb9(YlAejK1qNwnp< z^-4xj&6wRWT_TJYrZ$Zn&!=U~%33vhCDu0D-FL*@RF<%RU2%AqI=MyQ&|h>>GF1>+ z>N823;&ag$D*9SFm~X+$L|0do)@tyD+=dm|)3)SnP=Tr$bwX()wmgW=_8dcg(d>#g z|M<12*XB34#Or}nMF!{59%rcUlF02)&mw|bx3?$&wZ8}y-?#;ej1cG|LVs8Yftt8M z9o#wCe>?vx%>Q9E{^_TeBq}SSaN&j@z;0=WnuTXs=q4OEq&Jl63P1Rq^)8TUcBXU4Ld20AK(e001N2@x+0{+u61&2OBC(s%F}ZjplYVMvENym2+tE;-|-%~Q1NrCVXr@t z$}`WwyesCGAYH7qR-zxiIqGN!PRQdebnB3oesruvC?tG+v1-Y<)@c}tjs;*L%#qv? za-m2etYX-fo2o({l!obLFn_Yk4uPzTH?8NFi$ro9t6u(Q%Qv15=8ZA$}E0zKMH6)9jb8 zSh1jAM$Y>nu;A;86V>c-Ryus|1H@sZMp#B?+lbuC27aKI5~CIAu-h?n-Xv^T-Q$Qhds)_secEudsk5rv0 z@_}NBI$;7U){;3cJizUA}La3<$QHaO@AS8sUey>G;*4BUO5)z_eL=>(6?W06P zS+R=~w;Agug46qz7vbF*4-UFrtsO9^zlwSG9xYG6@gg}(gOTn>MGh3_aG!(WUavF0 zJ1Z#oC+)27qVZ6D@f{9?fzHE6!zdv0JvbFi7Ko3xyS-Dqhjl029lu^IvF|}90p!a$ z6C-KF+k85yo6hmGF#|JRJIYrBQ-Y$I#`quQ_O4(<`zWwbb_ButeB2^KesDHQzO+=q8bs%%1 z`+81Vqt?N)hvd}&bL;H42ZP54R%`veAO5*_8GI-%RF6o+Y6wD+Ah_^HB6hcdLOt9$ zemrpfmXR}(+T&(v5Ctsd@=l~*tSg?kMYo=o9=xHpXuif8*2{%SLfm&x{e$s%Q6{mzpX(ReT6Ek*ll1ifRR~zg~*?WOt#f6HCsLx%nciQtMEQ zKLCH+^9SOB@a(cCSwinw3=Lw&9wsTD6+J!SY$?{I@hMNjN8ZS3CU{3-h=#f4X$2gPPyWo6 z`a((0&Ex#uxiWg1(~V3&(^g3>G%|k3H_N%xqzs7f#xUO#NE|-;GDP45)e!x|lFmD{cjYnZ6>tMdtL`@k(bJtmQ5ewLN&p)Ko7xL|=p^)BXS z0W74IEQyAH@nHyd5M4%MjhMj4{m;)hAcXW2-sJkZ@eiBZ$*N@Bq8V=*iRBHD_*o2} zqgQW~=ClfFNHCuYmB4TEqSe-U(`0RhVkRwBBD$SV4}nuPn46Ql9gR~T6ty!l+Y}#| z9ZAUwRX=>lL z6%|F1k`cVCO2&=b0#Wh|)dDa?OtW;7Cwwfw5$l>7!Gqh|AE)HxS*H+A>~Is{I#Q6! z_Cw|gITKW_Tq94dkk5O2#FKgLca(R8yKcKLErr#;*i#f(h@Ze4{1+1kAIc@XbPwb{ zwKs`glhwX1yZtU2XGNkq`EbovJw_X+EdU@wT^?K>_};O!!oIj-Icrl=(p)k^>MIR5 z>j@_-#0p?hnfS7q!9(uxj#Z87!5OxxgEoF;yp7zbqZM zrDdU+H9?7kXR9~bw_-ICuq(A07Kw-=ABY>(mtny@sS-BV#7<;KK%|x=JV+4adhjBjMjl%d?W-)<2}^pDlzjeCgMA%QLZ9?uO>92q&b)suqta1%r3l^0A1 zBkkShmSgw+%~i~809>A1&_o5T*;3pCNe6VJjrkJFaUrj*%dM>pcg?n_3U&`BKcRA| zpQa-L+m5hb+6#cJU0+-&MVZU;kCVwJonzn5r+$Bvt=_MH6Z?%4MxuGT`Bp4Dx?cKp zOYQ`(F;!}9nE0P61k(EYSSP|qU?=^}OZXvo4;!c>l;g+whthZT6rITha9fBs18Ghd zVUu^+P<4Vy3Xm;qQi7_e9P;^q~q<0ZY& znnGi)bhi(aguYaRP5mNv1W%_kWNO$zRU@1|GCtY5IotIu6-{E8NRHkd7FDcl)*euf zB}4k<*VtniFrghDqAFe=b*3e$0h16*x~d~)P*}gJPRBMQ86+3EPuld#Ex{c4oUT+F z*#x$b{K0Gc#EY$)7fUT%Q_as?D3A7`1)LkA%S_GvWGHzGg%*E9pU;&6n?Ie8SCZW_ z3&SH=k0Z#3Ef<1iR7~SzSi=Qsb;v8erd9%TyO0t_0q(54ISrchy_bU0BFy(4 z`3;6o%?cL*FZFwIggZ~mjJA0I6yaqP9YhA!JMa8>ZP?0*-kooai*90jk>6REXl=AQ zGE)qsY(gTud}V(={tj&HaftSK$$%=$!|PHR-B|+I(j0y;1x6o^3lYc;9e1b+FRlID zc>Tdnu`jt2pQCBkE>1{Tah(ve;>{4dXm_%;on~p?ITtZKz=ozX+DeYijk}xH(v_M= z=q|zQ35dEcS(9qnNec<)`set}yZvfoh9@u%H|(pNiA$TfxOxQ}n;lOE6&IpeJdVJd z(=6&%$-vvw$-#m}!X)EvMe^H~Pw!2>f88ja>f|rN_Px2TByJV=yXh1Ny#6-z_F8Qz z3Ws_!S)CgdKex?JljkEBSkpH$)MCmu3P_KU}FWCM0FL5|?Q66}Ty4p>7XJ1m_SY&X|E*I!BiqVe}(^a`XDx{g< zGNZtur^{3QQW|uk|F9KjcNu&|YLLsW!6bCFCDNTS+lQ2Of}iol_?2zy^z`UDwg$ml zKf{Y9>$!Q_OVX8~%4f>~a#8sEJ5ftWxCM?HDKwYEhEL3Wle| zeSAHoi<)I}Dd|f*+@Fk(AO`rv7oeo`NylWE#8 z!GlLHnzNf{VZw0Sjb>BKYoYH-?tPSn;L4ZXE?a~w>JI0%W~qj9d~Mv!6i#vlrXk5J zbhvMAImQM#Dubcnk76C4QPPBhKi0924MbQ`pw8oPr>V%l+buJo|AO2D2wKJ}J#67y zaRz@(^uMz#rkbP3Yv%4s{V2Lx2xqS?QlW0jmS7>4Y3@;~l=k{!N=H?$(G}g;ni^M} zUgi>1y1c(Bh#Ze?m`k-gM>z!rU5MQ!>qVFg-VXBBh}PMq23*uS!AgsVQhQu$QZ@hJ zeV>80mh@D4QMS`0e_!-Y18ZrB)QNVKebK%>0qS6t9d|FU<5wXZ`w`=~hJ44b5~e;m z&F#+6XNSHkj;!K+M#K6>G};>ql{iDxM5lq6{@+OYEC98&?)jFkCReEJPD^7tbGNBg zW>VlAL}vfHJvF0H$#{d<5j;ZdwQ+vW`R*P*4p8^sciR06&brQn3Qz7gQG`ErJJcpKqzm zMJZOG;L%V=tVNU(i$peml%>NlQWh9W1>aYHlUt~k|8b%V0?6S9PLdaj^-UFJcf8iZ z)2g+31d;RKy{DdEH_<1tMdSWV3h$vo%$2jre(SAGiMEuE+Sk)%QyZvqv#?@2&6W11 z{yny=kbg`@0*v z<|)e^bhCrtS%^|j*o5HF82b@_Kb$EF!iF6RpK*h>%A_1Ns`W@@F{+RBX~=gt4tQ}i zpoAu=kG$W_Xy%|Y{RB+3Pr!6f>m|AO@t&V|s6>NB%qQaq0o3sB{dP2oi(4~wqusAr zU&#_G)@FG|QZ>|O8~B4Qy`@?6X4pb)8u?H}!_2}{pt>KEra?P7Sop|0(1VBjr+N}K z_!i%f_V+)18s%g$Vz4Q7%~fb zn|>-nhyK45Lun=~XJKdScN}XR|o={Slg-sOw7mcGbmdCYaK& z9cq}1cZv)6HlW}6M|1nDk2`rM&wLwk#R}2U5&R((8#6bkrKX3Qt&{Z+y;#O8D|AWV zhMmE@ZG1nf$P(vFZ0UiFO+DC@HIjI9i+Kv8#qEhJ$*k_fKr4)Mk+t$&2Gcp5oX!4= z#lGOo%=rtMISE;IQ+9Ac8bOdW6Qy>2Q$rI3k^q}Fw|x~9Kj=pz$aCeF9x44@dH^~+ zm&q(Gjk7SpTNN~}7dm1PS5Zt*O*x%t2RMBuG*Dr&4u8ZPJx1TVpga54;MC;?T_taP zE!JvP0X}VWQhb9E(yH>6t*+?H8VP=t4NQ570f!<}y!X?GPra*UK8w#@k46kn)&-E8 zP_^jn7 z6O8OTX-L8j(67MlS5nI2n+)KFJ#>eTk6#t5{aW#DsnlOewlacM%&_oB(6*N8^4 zT{N0R$!!}8Lc3e-)J<~j3mQa+Km`HTtB%Z5exBRSvyDZf-k5r2 zJJ9%(7v;+|Pz=bP`>GXbV`kNqgpE>G<=3PRSdY<>I8f|uO-&WfsOcPM1}ZrY&C}GmA`p&Bj~!vGo1E^j{->&HI33!>&9~#z%fqkd z4A$&Hp#)KAxhtzGIVlIPY%U+Nq@z(Ysh3_)c z3uz;lD*-Q0V$=`|maQL1xD}u;(5JX0d@&A-TJ>5N=9slL>f0zsabd}r2)#+V7>Z8G7($}2BFv4wlvc=vTDmhc9Zb6fAg{bv3O&j4P(lBBw3%WmP!p1I^~Zga=1Uf7UW&yrqZXyK zTsk%%mAo~Go2>NAw`7Q3Whz`vhZAd6$_XSh=qYfwK2Hx_J9m4vTG=V?m{U1CzuL?( zGd!nt#OWn$7SN~O!Gzh_7RU>d?^;=OI9yLy7yd8DkdWCB-O4}TEb?LFuwecG|37n#U*r60 zXa9_3g#F(y@i%k(*C@ZbWIv-Q;r^p%_G^G&w_HC1ND%!9@N)z9EA-bU^e5C7;n^YV zdG}vi(qAL|wN?9x2LQsz0D!+WZok6+T5$gizoGaO{EzbcEBdcl?$796gsuGZ!~dJ} X)D(dTdi-|d1Qwtjks4X)etY$Qstm;S literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/Formation.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/Formation.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7bb4940f067d72a424af296d8fc4104d4d1c1559 GIT binary patch literal 9532 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/ReelBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/ReelBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..26d42213df0e3006f37acb39eb90d7b3ee8ea06a GIT binary patch literal 24386 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 M5Y2O2C;F$q0qAZL_y7O^ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/ReelReSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/ReelReSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..93b4919f44932f015e88a2d16c452955a818bb07 GIT binary patch literal 14859 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 KGsc`hzWqOQe+g*- literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49abd74cf4cc942f322910187473ee138df2d7e4 GIT binary patch literal 12378 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f83708436f46b1f48f7662625efe6e259ac844d3 GIT binary patch literal 12422 zcmeHtWmH^Swsir)CAbEc;O-XOU4py2y9NmE?(QDkA-KB)DmX!dyMJ|ayWhQ??)U#2 z+thsD21!;&k=m01H3;+Ni26$ViVp@O!0J)F=02%-WTua!_*4f0? zSx?2o-o#0V-rdHUDE|#OWi9|5wEn-x|KU3@p15w=%ZNUB3hfmV51bLfk7TOU{W^&fJt%Yk>evm}C31!;zjl?iVdTC`Pd?s`QmDb17c2BlnC=&wtsCp`K*c75MWIr?468g5SoNSNI$-wm2vq@f}dDj?hHGc z6cNnbGXot9XXXD5J6mi`!p7~p*VCLKy2XADPT_MmnK#+cMvlGqD~fpG0Z{lChBm4)l3sz-P6k9kco0MN98Ij980h~v z|CgEnhw1pYzg`(HE8oY65PT}}6f%6fuo{ajB<&_B(N3)5>o58JZDUjc8QyC5`*+AH zxPcJjex1Hgqrg?(sKa66n=RJL2vl?)(k8d6;FJdk7iek<$7C^w%FTWh*M;kan>2AL z4@%e080w0a(md&rbyBgpbCEB|Q}k-MuxLf^f-(8hK4}ihYOERFRf8=EDIZq_*EVzH z9wtm>_$?(DA0U1R<&yb1n}#v$WN5Zr?LBNwe0`6rs%*|>QEQm($W7v*XKdYbDU#8R z_Uuh3mpQCN!isvwJS9Fvo_p=5*}!@}mgUjU0ozwGd^QpgL0Gy5a#sINlBH2XW-$l= zfB@vx-h%FoyETKGouieZot@PmF04>h(Jq4#**B-*)&EKEE3!m@R0(-dl@gDr%~F?0 zxVC+Osu7D(y2{+k<78~1B#W#@2rAxVbj;~V7t3DGB6)LmS$P^dQ?D6)UFop#WIwam z`l*taf2Af`92z}j)C_#pOi4rx;iQ@pAD`5{F_?d;k&3yFXtc5!B%P!W1r2piU2HiS zZnEXUd{RDH4ZM`g2>z6da0!`AE)ua)iT?0FfC+1yhO$x~53(rNj6gTNx~kpG=uh;P z_|lT%Iu?zOfb(I_IR-k)x>4FTZMd>w(vaFE&e}ydU*e}P@PW-fXsOY#9I;Pk%MKCYW%7cN+m2kdmB(S38c zoF2FjaPVB0Tq04uj!G<6dZ&>&?-|b`dx?E*K&5u&LMo7KS+3Z}sovRjiWuwkCE-%# zE4bxrnpOFm8E4whP-QlyuQipLKOKk#`xgks`?=hK=~h+iGzKj99}= zKjc2ndsCS?uQG4hCn)mc#idW$w$5MECP{GwtbHL@t!GeC7^qv$<{fchcnTDdG`-js zkmFukeFi=Od@yW8ITuC)9>;dz;2fm0^Jo>GyyqHIV%>gDi58RazNR5`yig(zvEKwv zpOELEc}=^8-1H!JNZO@tP2;@==&N9x#Iv@2Q~541R0{ork69<-dNE+N)Zm^bD(7Uk zZsN)G+lp_R|HQKE)PA||La>JB5j2HkYj|9g4kw--QcA_*U5}$q|FByK|CK`XZBm^H zSfm3dcKV=FwgF}VgqY+I<>xW>J}^?V7$vW8@J81rk&34vdWpVk4M}Rw`UxhWDeewI z8dllZyNsS2!Zi7jF~m^sDZX31$k7L;X{YAiVwOhZwHCXn)uvy-1UkZ7@KHmkl=Um!r(!LQk` zPtNH{r1+XFKb#ygc=@!ja8|#D%7MTpbDsVx-3SNwz{O(`ag{e}Iw`=u zlATB{FlO@As=dut+S}oWSxj<``mi0=q%ksA_~A4WO{yl@&qFL$Gx^}n81f%_#x`G6)>T`>ahZ-A8Eke2ld%lz5hm_5apBU+?Upeg}X`UGm zV_8k3SR-|@{n)`l66aD`ojT8!xC4{SJF(WCaniW_jmPZrV7z$wrsboS2yGDh33e`-lJ`Yjd7}Y*mdyzpb#r>rx?j@-H-vKhglQTo~^LG_uh-mT+>D5{b#g?kkt z$q(e6w8v|D%o)L49&GhxwwdT`9qGgDaCojyFiNM=@$ts&vfRy58zOhqB2dZX_X6*8 z>f_vC2|hsnJYI0x`L=~8v4Nz3P9B%D_jwWT^e&)AiGi5Yoorj~=LVXDMm!h(M%o>I z{@tG3=hp^RXM8(?Nx)%^{s`_t*Woi3az$fb&vQ#m<9Q!jS@e`XmmC{ZOnuJ}&3toh zQu3$s{xai`1Z~Au7s&?)#j82+&htcq=Ul^eO#M}DckVEEqpXkJa%=Ne$L9Mu=H|D1 zKAwTXXIY#-9eVQkwg(-=#QVex4P?RLZD{D8V`LPCdh%=>Ja}<2`k;Scm=UZbbA(!O zPu9eX9=KuJx)BN#64MrK4Wg~+}-u@(zo5i>$%bWQ6Mdhd1HLd@@-VwOYDNnmBCc}gocPO8J5ePB<`DS&1J(5ur77@R}P2RXs&0fea`&EXhnR3 z`?gI?n8zEJs75Q%Kq1#4?qwuj4?~%6g0pxsW;_&9UXe2{Hb%57U*9@MTJW?Hf825Y zV@(^ZOC&6hglFJ^^^k}~43n?Z&}IK>3&XrmX+nERpx#jGes&^z>g1|?;th5|NGtvn z+NxW6xc8&NdpG&Lj%cPCz8GYgy_5H#FF4u^CT7*4~x(64!4S-%Asl! z5uv;VMIX5nQYtDNGDk1qEKuTBq>uF|?1TbuLUUbrIg@^1%#x5arf4S1 z=xRY7qX-_4J5Z0&6pD&i4owu-|9E|^$i9Vf@w4|zy=K_a;A=rcaSq{{WZXiD)7>b{ zDPoOT5VR0cpmNGI=qDxd!|zGs6)&4mu2)M(Rw(C`BPKv8L*Lt_En>{3XHc-Ytf6|& zNJO6NR{C>h=sRdeGJf`{Vjwq>Ymym+D&;^jp)`tC)^vXxC`jd`y@f#UB~qxADN&zT z9%f7$u%{wh*e_Vr16uepu2jAoqk8$C*j$MY(`M7(&WW(oRstg zCVV~lYH8@kl3BE}2I$u`%tzK)ijlubD#t0R<0Vl%aJ)-;X80Qq=cH`|8IhqjD%AM} z+$oZ%$4Qc?O%%%x5w)=cRfmMfr`elNuRiIcpc1?63GVj2x>L4c^2JtV2Quy-DA1%y z3GN{!Ufub>;0xK!jFr+-Up11`H+c2i&xid7rYsZ`h)h zmXIiH#v!zKnP9Rc*QAA)-dL9Nl=Wj8*vQ&!pWoU#=G>LM83Fl|*xTXUn z>HWGlzo+}$eHWTfppdEn>3?;K%zrq=%mmpOAQ8wZCOr@$-+rSQX~UzLET5o0T>H4t z#D~Tkt=QAzf0@oEof zc_k5c*-_QPOqX~C6U|S@@0WfWwb};NgGSa+T^Mz%6IU$9n%gQZ15M{!7PatwyJEGl zy1u94F5%+==h%gc)AB4@UhOTTjE*$el-L!nreA=%!uJB-rQt~(bItF8bKh+rZOI}} zkiR5LJs1Tk<%^!zSw#J?`s_jYEfLkC13{+?df<@^*?$yd`os~|pjS@uzN^Xh6p zXQmi_kH(1BgU)!m4$UpkC}`IwsL`L&=`+qu@*yTkBH}?hM3{&1z9s|lKMW+b&!v0U zbfP5BPFGTG?#=?*>X1>>Z!6kBvYjUB z;a+Qf?4mk|)ZO(>eRhk@7&ID@O`tlFt5s9P&-n^_#WpHA$dt?oXJRDXfB+fZwG$G* z6?`JEFc{C9W6DK8B*X_*V>nX%^*#x~T}tG%W5x`TmW*+O(Xs!F_eJP73#v=Dq@H1$ zVxQmNn3OE&7|4hqTGM+607HSX2xgq4j?fLvlbI7ukdv9axoNbBq6?f5;}Lrm_oNJ# zr*u3c(b z>Cj|JFOdnjQ)GT9ck3}96>az)m0Uu#lS3nGEra{`1z+9?S^;_z|9(dT<4h#WN%2T5 z(ep^LhMRGhXx_4$w|y~+(q&U|3cslNsMV;s<0v3PlOumVNxbv0CpGY=Ccb{Q&XHKU z=Yfbgt8-&V!xVU)N(}tlB3tzQNb`NmSV&45dZ|@P5uBOn1xK&g5$ap**fvEN=KQ=0 zLH&fc|1&sF$#ENQAsUh+9!(7uL3rBi!P22{!&Igr*&5bAnWli|O6|e?XjHPnFN;9; z{SB0_B-ip5tV~m(^3@}TGaq{2SVmF}5*mzaqMo2VwR0jCDow#S-fHv(4UF99=!>;0 z(9ml6*YJm(ie>kS@2~p9uZO`p@fEI@5&6xu9_%C7NA!cDgMkF-yl!Nm4eESWtp@t* z8ubpl9TJPMBytn4{Ncw?9ZY#>#~Z4jlJ>zJ>Q=!D97yCMT~JXPq^{+l3oLA&#GfYuYg3dZl z-!ok9C7`c;vglJ)%cX>g8{#gvT(g0{x*S^Z6UzQlSP`axPcxl{bJcP8VB)LdX{I?? z2^}d1p3l{Q@&>pPxBX4OeDu#pqlm z)im>H3RQ2!eQb_iCjLaom%XhPMaw-*T|tUB0R{nzSO_r!Zu&G7BA?dsVMw0M{M(p_ z&XevPyf}LT3ozY zIVG}p1D=$>D+HB|{~7QmPD{fDF(UYHRwTaDx3pQ6pha+xQ-ZH|>_;bT=13cW8IZ;L zJpJSyLFA(}YBctab`N@PSB&@ncl_u^HdWULrI~Jc ze{6C6N;93!O>9gUew}}1m_IdS?eIjgyGYLo#k}l{-n-(8yOe+Xf@eM_7N#}7?asHB zW$J3i#v*r!XBi_Q5gO1! zDTWN%QsK50D^nVHn2nD#z!@9sAmZx4bBr^9j3Lp$h4Fsl%+l1LT~HuYI z_cnx;qO?R(3=eG!A1bCb-jmqWP%nXE4Ji=+oeG;!v`Gf6bEpPOfD_bHsW?F?3==Iz zhq)NWB^I5HwodQS4~k;UpDs5p6MC&R-x)d8+0DWWKkzlIRIycC%O2nXlrLN4O6E>f zO0Ez9LrfBu9u5|ZZB`45LB$YtANDMoX|AOvhIp>jcHM0oG^;!db_P({h#u?NL-Z;t z7ui$zI>0o%eUS95Y?^=-1Z)1ZzAi}XowMpy_wEoCdDSAk>H2P4_rV1qa6Yn%TWZG=M}Lg~avs5lUxT@4>F-79g#Y*+ z&ksMMJ}tyna0`!s!c=g3c;8%;{XrD;=JLJ!dAIp?D24$4!_(UA1-tDwuLDQd(?h~~ z_Y?B-%~eH8%m?`GqKMb~_88xX^EpOj67#{Ch^d^Xi=QJA4E!(G8AD)q#XUY)YXvxQ z`bLr1>U zV&PD7U2&!a_90G-TO_6acn`GVeVvNgL2t20v6@594fcPsPx8&Via{DrgeiNr*_HGg zIi+lBZwBp%5I;u~BBREh5ENzWx|!3q>9o}%oQopTdVWqy{pu^-g_yxvcZ$kh4)^Gn2$1Z1)t%yuaY zky7x@cTA!hqboe@3)ShLJl2`_5_$WAp}VrtGB-7(r!OhJ4t}>)Iq5zmwYXAC`G5L;4>83 z+Ld9>-q|ob$?bx}j?VLuxYs{CgABD<3y358&sb=Bc9b}xQpxRW&}j@-9~%X&Iv55Z z424U<0w85zQ{K7y$mueChbLaZOfD-j(M`HBYfW26d>nI`J`_E->wH3NQP+S_y92fW z_#TqU`-sDmtgOriwC%73(wOcgP`>0KMJwb)^%FoHS;<3sK&kW&4Aw>SJp-EUHG#V$ zQ(sN`Tix`a%$AsFl(bD%@pBRwo9xm0l?lcZek|5P*Fk!4^gegyx7a>?Koea;ZLv_t zF^BKBhoxnlJzt4zQJ@N0Q7B|RfomaTDTC;Mv~}EMyF<|y&3J|6ntuhR*0ai}_w|(C zmx-4^{Mi%LwGxQX6^NjG|Z%l5xYB+4F2P+bC&W;pag_4CrGXlT- zG4{+k@Ob;RQ0ojwzdx~I>GkafE^;x{BQaS1_w*U-)w^F_`S%oW(PBdW9cZuD1sMQ9 z{L>*hIeS=}IQI-ZA+IVmH^z7z9$AP|1&y)<6s_$Y*U!)yn-Agf- z9YRk*O~o+&qS75-v*9&Z6ja3(z4wNWQ&@$3<>R*Z#N?Yd`8|ni<@q<#_W)I8Tx*>l zN#0!YGL$jYt<5pW0ViKXr;z~5MpFFygi5nKlPALFVAr)R)FLH;Oz9VlCpr zLFYE?qs^f+BMrQ|ZakVzjX(8ri&F5#dlZJ!xuJ6}ZYK+&-_M?;GOAoAq~@%3zdla6 zO&_}?t)*7MCIuZIz8FCE0n7a_qp+)B-`RJ6&f}4-=dB0#JJj&qHT#$@3PFPytcY3M z_ce;JV`1-pk{Xc3@hE(WJ4uC2xKFl$t|#MMK!sV~Kfbx$Bd&GC_O3i|e&Tc0#5)_B zaEb)!<#cU?rA8KeTlyWN9TPeGFYaagdK9|R3EcO}P3Rf1)Jm(9&IOIqmfwh-wDZ}L z+}cyZTK!(YrbgPrUF&^GZnZ7ZKp*%PJ&1Cs5NwKdm2bjJis-%=qO_raf9U~obqOkLF>o@z3e4T{piM>R)fPNB}@6_aU?#duNzLxvB<{t3P z=Vu%iH^-+V_4^(Nx(_14R@g}3G;g&T;GdmwcWTMorJc8-%+|>8fi6IvGH}93vNA?; z>#>F8ye@Q!fK9c`+Gd$=kFW59e-^TTHzTnsS}qTuXuBAc_o4s8jF=lZniwlPJ6hP9 z{jw&7D)LtI0`EHEeM1c|fAD6c+N@`YG1xAUZq_os!iaR^paEZ8K%wU)M+ zH=?%-p*YZ7k2zBuH8UQEZxn)AL|?9Da9n1r+hsSpGay8^hdRiFA*MSa>Jx1#5+-CL zF50fPcp_qJ3vBiIqZ$Xkaj4zb?lN|uk2GZ1WZ#EJagj;z@{IVc~8NXDJTF;ogCNK`yd+c_InrCude*UZ|(^@TjG1-h+=j?XAR8OX{XAO>} zEiu$&9m+;Ol#E&|Ynoi@#T!xog~h}1@)NJS&#tFni1*#jQpj?K_Pl|c7xzlJOUQ@> zKd|x#qkH11U(I&z4f8!$)wVrfq==Hq^h1nk^&pC21-NJPQA;JM1FmxFVf`W^C9PSs zH_yoW>Qso=;aQUBgD}1?HR}EjrSf)G!nTImRQx2Zox|dB1X0Y_V9J`wJvA7% z@zA-Z8uVQX@zP{uYCd`~pr>&(OE>4F&ePD|!YX^UHt z`c}MsAo%=k6J#c;<7W(aid3@}h(S}bd{U(|6bpWvRfso33W4Cq_;RMOFC(6{qtDCJ zY7~;>&tHSmqT7_4HiR8yPP5(x+5jh4DwkkhV12dt_-_jamE795{L6*xN9h>Xzm@mQ z39D;QWa@p!w<8N}7j~gZoS*do7QuTHz|^k!5Cwz=AmV?QPg?rp^>>` zg#u6TU`+QczGUSBLNpivOtM#*_r6E260G{38(3>+=(;|k`o8E6~X!O8bj($ka~ zR`ny_jvp45S(1ZbC_-j&$JGNr>5L4;^v`OA@LM9lYNW<~v5B-D^ia^MB$AO}FGOEd zL#DdMvyBj<(N=G)m=^JkD^7WLiy|9+pN5B^amrb-{hGe}vC(_ec9j!6d8^f_=p(X) zlt)2Q^H)qJk5)BxIDSmXnJR_jj_4>ENWv1sqTGHioH6iG{{TYxE!;ev71V~eO7jjM z3&I!Q3;Go|>eTL#zOi;-{usEVPh!w$<1;%@1V1yTx8D8obpGS^nd7VEsg(|=E&k9$ zS*9x@dM0}l6dyEfNstx3G{R{(`Q6>yjRWi!qkRXjOi0XHn(abxj^KCpA87MD-o~*z zXX=OQ>XXR=p|@S&NvFG~ZF_p4_+W)uo0A~shL;H5O&+Mo$8(6uzWD&NRmGmuTcrhr zGobC>l$pY=bl|DoslcYuFw0{y4pAJ=>kq5jqq`n%xojd6d84uMKy zzqQHzF8r@8K7WY<0NilDg#VX@pWktQZ}j*J$s6H+e#F1Eef*B{`_9;3C~=^&-hXHw z`L$2>JIe3X^1o2}u>K>;uiE+VD8JVf|3cZu{e|*-h4FWQ-*dpf0Gx?`0sNH_{x14^ z-1nDgJNciYzej<;Bm8SL@RvLQu=gGS__x^LckzF<<$o79r~aGxKP`{{Y?h361~& literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Settings.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneTiger/Settings.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..72ea38a9645e73e0655a0a5ffd4666fe39ad15c8 GIT binary patch literal 10245 zcmeHNWl&t}vK@SI39bXd-GT>qNq_(Wf;(Ywch^902<{$Sg1ZE_AOQvfBuKE}4sVik z-^)4NbN|1pd-hcAJyW&2YftaBy8G+(DJ#Ii;{p%?KmY(h2`GM7vSb4T03;#+0FMAb z*jEy^HcqBCPWo!@cBYQHtZvp|P%b+^YS31kpu<>^Cga_GXB%(azy87rvX#h>-hMv?X48fjbDm(@V8p3{g87a{k z)E-fe$h-?Lkn5XH6}FY5A~fmi;i)<;O#yaUFyO=< zCBEp;8Oo55O5sN&A^Q=+PI%yC;d;k2|E*2cGFL-cQBsku8wXLJ;?GSu;Oy zYTQga;K;$U1Qss@C~gQB^S2yCp@9Nxq(s(Q?EPGisAES-0^ZA|xsgp0=BvSsfw{{+QXXOiK$^JngTJ)9C z1?TM!GE0%Q&=cXSD-9J zh0;{t!4&Ms#`^R84?X{jIr*o*{yt7g0geMJagk&$W&%qF#^WO56`k#cLm zn-Y`Xe0we}=9JSw?vY;Un(3Z$YF3lymWSo(f|DeL9FT4{-J;R0aNF33gdOi79knal z?N0?R-6=ceiemhhGk+=^@qR5gh?VBvkI-30qc7lTla3{yW}*Y3_K7@ZDUD9zH?oiw zV&zfpzA;&#pd(za@I~uoD-W+yrRA`P?O?%UrkFy>u^6q3n9t(hkDugfy0PmZ+zgsO<&- zDMdI~4O0WrMzzF7!WmQG#}&5&G}%vu*bB_4x%iD6u*7gf?3J-tClM(pv$~XPiHgA4 z7V7Mlyr5KMBmee6cT3{B03XB(kcUd5u(}j7)(h4~-MQ?KOctD}3I&5|qVr5khZ@8_ z95?nriBC)L6?tVS&+0i}n>_~z%*O~vP=vztBQa=_ZGLf--4m@P*nizgwyQ|uautKy& zqK04Xl(i5qG*blct83?5#3*L2o^BU4rB-A4;v!DUo!|~bI&UicW<_=`l1fo{@>C71MS?PUjDm}*0|Bvz3gZ~2f^)ulWq2K zcgjNoo(#cl4U0(Z)i|L_VB-=I_v_SzeV(fP@gzIdG9p6-%XNde*9UFz($;!~TQ@4Y-G^l2kO*}!95p`s zElW*+<&7S`7A%5$W{yt$YR>?imZY#f=}YP&g(mnHH(Vn|oFA;ZV`i{NQ3uq71q!%c zvC%lzGNMI$f4{0`;vN+_bI`c|j{0}VA%({U(nC>WfCK;#LLu?5l;~(-YU)I}Ya6=C0PDMcb#$euXe5PkJnCd%_I_JeFT>~5_gqRj>+#Zv~^0NW|r2=bUEg?0{FwUF0Ys0o|18-Alt7j@qikRls=hjWMNZ{39lj z9vcy0TBgCO<7cDCWpQ_M(R09SX724KqS?EtzScOmZb~Mj9M)}b4IxGPS0l!^Hwjga zw*9@w-&~bJLfJCXa`fW`96MEq2t}&Y&5e{;O+Oq^qqEiIC~B0~I`ZTQ^AH5xTgfne z#;fx?v{l7Md51)ZPZc!U8MY%a99Ks6Q9r7$bG);Ud(M8ZEGp&f21{4vz>!Ohsn<;p zZ>&&<<_p3nUpZ$unUG5m^aYxR4I8buPRb1IhHdq^nW;qHRuF8~!ndu&ei@WRJ_|G< zMqinXj3(YiQabY`!LPlBzW)1r==;CFPneoS2?XK#t-g#s25^;k0UzPFh4C4_w9c

    -AavZ8cgudZMaUmRJ^Ha_OQb2TAqACsL} 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 C<8xF1 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Feature/Scatter.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Feature/Scatter.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b67124fa52db9dcc42d24a3981cc8fbdf4781957 GIT binary patch literal 12738 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/Formation.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/Formation.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e674d7b161a8cb4a911e5c97e4cb5f8e585c1dcc GIT binary patch literal 10532 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 Z{{jOk$h`WsS<#*mcQDU%FcdF*{{yoMc%uLS literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..35ec79ae8ffa6a2982e144661d840b89c226934b GIT binary patch literal 18331 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 HTj_rRthZ`< literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin1.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c54dbc2919a2323f7d32c48d3228f9cbe7be8ec1 GIT binary patch literal 15302 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin3.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin3.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..59930bde0b391333f528fdeced04c8fa9edce319 GIT binary patch literal 15299 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 bZS;5dt0)5j4ApN7c?5tQFxvGwze)cEoXM`P literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin7.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin7.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fb8757177fd0faab4f87ad3bda838998c69ef5ab GIT binary patch literal 15010 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin8.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelBaseSpin8.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..db126a2e427c0e3115b97993d194c4f76e097471 GIT binary patch literal 15436 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ccb274e7a7696370de6231f733f7845a4b22095f GIT binary patch literal 15344 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

    TB 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∋7ntPTIkJ zRD5#RGjnNT(zJ8#mE?8<#J*mkrt(KdSyscR7p!+3uCH#Y661F|q*n~rQM=5b=)D*- z>Z%8JR<69FDiuU9W7a6x)#n78w4P!-zAlc?pmw@RG})!dQm)r>LAhc0vRcvCld*}P z_<)z#wWKmEr~xz{X0-7Z-@$#4f)!@)w5tjv+I~Oe6~Os8g%HdVQ7OFP;iaVGTK`}t z1wm<_ z6SMZC*Bi0L^i9W6W2^4=#TB5?rCR$9ScQCS1NJ*9+;7LLn@5`F=x6U6=4mGdlIaOm ztVVWk1$`gxlG-0{9xiU?+8<6gKG-u&4W(TA`aYhvKFksKr!YNcU99-t9mhOw`xYGqZE{fkJbY4c)EZnp?uxPKm zcwUo`M1@_G!k|DKvxFqz@4brI=yHsiI$XgWLuaWoxGs&S{#45!^$Xe+TE&t*(_CQJ zVZ)%8tNGLCPtBe_eae`H2H1_06ZoXtOzd}oxNK%NCTDxWwOICY^t0KfhU!4((CHs1IAf8Yg<@ljDN^eO#sd9W$aA5>8lYq_v@e zLGO)is5qCE42q4t9+G2O)`X|z7N4o^s`6puu{zsVHK)8n#CWYl9`I7>=ERucm)I&v|F<{^^NLAG3m zOWKSSA%sVov$jL=7LUFai-tUe&Hr`d6uAs$BuD6|EEQvHlhe!FlC0Bp&NXi9kGtHl z&r;;kv?MsIg)GoX_edq!&1E>?ltbrHINHnD@HI(lw@~1DL$hoxNQ+gU+|H!Vy%(sj z;;$9iMhoZ1#@#{7*+pk`7N;;D;xh}GCS@HoBu8v3z88nFdDX5@=+K9io*GI4)Wpo-*3gSR)~84)O@TH)JvXMxDbuXuAL# zvZ${HTrOb4A|7dgnrLmlLK@<* zyyNC|B(w?{CykFwi=szMM>Y4abi(OmBm)nir=y8_i9x=ud(ikY3q&sOTY+}SkY-CU z2Nzifl3Mjrl3Kf1(z>C3G@hOdLg!?_1$wvU&=Mwj;pSelMLKC+ESi=iyk{(W??TOx zJX;}3HKFww*a!BYU__dOK6}bk)*O&WfXAzy+ajIBIkvoqYk(6Nn{`eZ6iGcwgw@Yj zA!0ShLsClz9;mKOT@O)o)-^8AYFe=3aY1p>Rme*tk~YgQUCTQT#BrH*cU2AP_hupE zU@;41KX7LjlU~9T6BF9?hOO@{n9_mmUHcQ*ggi%Jx`+(L94_`su!AlhN}%6^!uDG( zAXz;pV7mHqpS&>Y0l(`@!&5GGKx;C#;{70M!qn8!!rvFRvA4s|9m~_VbvgF=DWPG$ zael)_$2iJ5={vBxO1atPVzsmjL=p4V20TR#?fJ#{%o%(Y(^E1?fepMu-$>E~u`fzw z4pqVZ;D&RA8$rs|9rPcU;?7rdBB^bU;Uy)Lpx^2^81^40WflCyJWU#pqswy$k4_%# zL?T1W7G!6Nt=uevk}GPm%a!FC6o%f*-O)?FTLS)F9tlTv1^>8Bx7IT~ut_I7y-g`2 z;eg8z65T&x$-mel4??LvO-5rS;|W!h+>0OxijG?{N-!*DbCliR=WeZ%#B<0JEhUVu zM&2Jo!QHt~^KeB$a(3MUE@QAt=xmK!h2Cet!4r~eB7S0?w3qzG!+ddE1+~ty#$$cm z4M|TPx5tqpALeP*;~Z_G3$}v$mVoKy_D`D( z^g1MaI#b->2*7aZBP_CwK3F2xmwUm=?KuO}HA?x_xW{SMajUHlPh?Co*_IW>Inrbs zQq(gNeT;iKF)uq-;IYTOTAB(NKRzf@bcEtXsenGGIkc&u$xt*dB|?Rm)x|r2cbqjP z$FO~Y#Ur(ClB?nd$4%bn)P#q+Mc^9Gtnid4*fo}ojK3(u`}L>;6~gJCEXz(!H1L06 z5iH8+`U}ewU=t16uPkfAMH$0?VPOO|X(IfEMU<*DG)NwUM{^r%8Di9_Cv^6tKSNmv9G}`^fSC*E8 z;}Tewi}2C;iM0D}h0?r?s#;pCwdhLeoB=d61=76PU~!qG!le$&`;N&st)q zGzn(A3zaq|GOH9IH%{LSn`WswyuUThgsY8^L16pA7^CqAW8JTe)Mh^zr?P%!wE2S( z#^V>nt3MDie`OrA_=EA{Cn6S~qK8{st6+N?C|I%N@u5p2p<21*kwDZy*UFo#rp5L! z#*t{8mXUJ!m1X~rc6AyT_Jh7R)+zTon?8}Yyqd9BW_xfKGvnO0v~l{LbR0^nw;(9( zTRn0k7N4g_i|zN`(*JB57GJQ3?03$Oe{#~6uPW;kKN_q(g7?Axkv~uA+66Kr!5x)~ zaSQESE{2oHCD5K5PS$3V(4mOQt+S`vF724t=bk9Wx^=_*u=G8$CvN-i9dkSh%)a;- z&qlNTOh_tbY+H~-?P;rQ^;wueLr<^^Z=|`Li8pD940PVtsc#Mq%aT5yT4qol!pXTB zKI9Ly%Zl3P!%rC10#zMpU|_@2nQ0MHw0M0$%sRYT43qh-vI&BYsXp72rKBF5$$GAq zj5p1C(FGqTKtflTH#_?p>HVI0?nn1$X7sJwlOR$L{^V>|OM#;H-5HJa%NtHKfufx3 zD7`q#xy?Y>z3bMtgyw}$lW!5-CaNmiFi?cdUl%JQFk6Ph<+f;vhE!b+r~p&XagE-_OX*B4aJ!=n@kE5usl zR2;{2yQ#dpvvjDm+qL!+iXFcSm?f>{HrAUp2mJV+ zk^q4dFODpwdL1C_P5J8T%DEKUF7aDoSRr(Isk5!cMO&S#08tt;?*Y)T>|&F>tUoR`vy>W*{o_qTz%)fF>%3|JE=n!Az1 zP(BS!vAKoM_D06jTS=9oM>4R`J_Ky@InZxo$#99fCx13>K`pWn%S_=VF8e5Xg1AoL z?Hj&1b!@|m##~Oyqc$h?03P;#_!S6brwxM^{6#(d1VC{+ANW}kh;oP?EUAP2>LtuF zk-exEgZbFuDB-sk5?U^mJ_Q-w$Cq1MIKE!)UR+-H>mM>cZyJ}E z@A!vf6o`Fq`*UIx#`N_BmX;q`mjwv2>!4)LezK~~RF{kb*#HrfVjQKKwDwj9XA9R&0pjw>dM zuUF<>1St~-U+sr zK8qQ?Mo4$wGCeIlWcw7bs+0GY+ez}c zL7HzF_t;0I?-&$w(k3L&G7&KMl{66#&|aj0Kka% zy%6ljNjcEM)Yg>g$LEg|ojpw%d;Aw@Z8+P$Bp1t))#sIw1ODZqOMUVI8d7oObu#;` zYm7J)rY{@xJZTh37(8gkwNb_W0sHS$9x|Y9Z^(JRN;l_=_qtOHX^Ayid|W{aW$U)* znjX01J}t2s23rN7i0a69-~89(1g%NiHRiXDteq=WV!8HWp*E z(FYaBb%mF*Q`Qf}Nn(D}(>I zHupjQ?s%(ox|_2E$>ZU^2B%%n^P&5N@BPVi-o4^#I5P26q9ia>=iMz|Z~<3((^ z8(X+Tz@h^lRt%x`7$%GQG~4Mug|nY|W(_%G z3rb`8Ry7}Awt1DWBTIwBB}?1U$WnhA=IR$dxNrFaN%uiqX3NH0DqPR;lqB2N*+lqC zJ;mOy&#^sw!g&2E_azpg;Wy{ORQXJ?k|24DCk~odNI{CcZQPz=(OjqH9zu*d6gG&% ze0?zpPM_T(x1JOUBpGM2g1!`KPzsQb;gHojh`uM8WHBT_CMPRU*sSn7*Ai|=-ur@j zi>IB>s7%dsy2IC-2^xUNImgW0)XT6;o}VAvKvKra^VGRsHUGRsdV{y-R}=NcM=~7q zU^jdf0+EM90m@UAD2A7{?|e+z@ZoIkZA0U3X{+WNs_?Xy^aoK4K;KJu1xk zK}rJMT?@h`vB?HRw)rKzP0)GCSzMxEyyH`|T^8Dkd~1=RQuV1K_&9r!*d~ zI--Pp0k@M(G4}*KtQ?yGPgga>5a!iKzGdD<4FmE(Xmx$%q)aNV&{L1@+L$Vxl4#0L zAAYE^l^49u(AaZrb~ zSa`wGl|Ia2G-oVk&H=CFmV|C*s$KPNx5`MNR6p1XyLS@XKno9>3yYLX`aD3bW_u-9 zsVh>9M_!z+J)#0-RE@lKFl~6$k4MLhp6zV}P#x6d;O^lpUeYR&Pe@({bc(8+WbQ=Q zG%ND{QZ=ICS{lo1 zX@KxOYE5eI>m6)bC7Y`T!(<&vjt*8D0z1hfgTO>uGPFEPrtu-B8h_Ie(Ma1ULXsfV z*+$0kPoZW6&`ZdyY4TFVdzIScn~;3~zb}XtM{OKy_NcS*UMOD#6yC|O8#*}J( zAn$jCNjFYgVl78fe-=#^Q`=Zc>Z;Axy(Js}s>l+pnZ0T%UNzX_hmXN9!lKaoPA&-w zj)(DePD=1=j9tjvQPs;E<#K-WI5Sl?LbVCiDTTtr4+Gk2s^ZgCC2#GfI0qtjo9HS6 z#m?2jtxFE9v7m=)tyufnZI5}7tw;5un+k1@g$&%^wRYN@Mjd&q+0qFP=#FUVlBjJ- z*B}oQKfUmM;&p;MU<_zza4Ix$(7%Odv|All|NNL-Ybb{L0FLZ`F9sP$mrV`^pFy#L z5Bib+i1|)HcN zYjBKM_Si`{oAw-+$$2hGoF^((UnjXJ*II|d$xYFIy&04FRaG1DYyjAuBwOVw%521{ z4wIr9u_9nHij>!6GUp z+a>)TD2FWTyurykVlgo@iY-N{k)u=oo;ViPQ z4JIi*!-FSut4NU4s`2SBTJgO<>(5!LV3P-h^NXQ=3RIyQS zgVvr*e9PL=2zJ; zPi=F-M1@Ka#-MlB%%*dkQL)DE-Z~l*UI@RQVAYjzEs-ZQK49Y!<;~(r&||<<*n!L1 zYdSYdYcrKOo>-zHi&A!9)aQ#fBZgVREZs?_ZUXTdh@ca32|m$vVpW%H82xC-3kn^o ze)5bvnun_|-TLkKkTcv|sJ0h6xQy*+v>o(|PDjQ^h{HJ}(-H`J^Au%jy1Kho32XG) z=(o<-ytD|~<+?Y`glCjj-K`MzFsTs74OnPt0rDtRD2s164IS(<;=} zE3G=HOr)x<-E2E@;{87Bp$i5c(kc;O^*^KssekpYE92i7Q-2j)j!Z3Kto`OdT0oWS zb2|*(j$Uf$lu^Xk`k_YWB?n($cg5j#9xI_3_?s6O-bZ8^y=5Hs&)oRF5btv+94ojE zS+=wdd6`QjvzcR5j)!+|EFw^qZg^z%_E44PyhI*FT+FB-4%D8`7{-T?izSLA99YRQ zr6H2@xY0$1+-JF*j~TGtMyEmy+ma>YaWYdv1MlBn?^;y1AlAI@;cux#Cac&wM^2(7 z9!36;wt9kFY8=$3438oE*b9G&i*WgQkMRLqulRR=)s!O?z6bkhDY&8$>ra2RFmyCE zQ2{zy+L`}wTi~REbPqFD|8eUop@{tMI4r2!3TobU@v!{rq+~zc_UNp7{vipl8gi#4B1HrO2 zyfhL(dvd-9nRv;(LA((&fQ7zs`MkwBm3cZe2l6-0Vok-<0-mpwOLv*_;EY~|=1cx5E+cQumyT211HKrXkC){Q=AAQV3&TucW&B-T z-j?Inyx=uBH&|Wh;955mdt*gM``1oP#`cb;-$NX@YWhDVZeZ1U#SPhYF{6oJCf%UM zU549|p=pFG5gV!IOUsGRWSOF(ak$WfY*!DhA@k328TUQ6hO^R)+NR`AAV%lPY0yXD zr8@@HX3SLHZCS<1E3E}GOS6~zW9)b4aksb8=9^YKA8l(PGET21NU~;2X}`0DPd41! zcv^d;2~4G~&@K`WQ)uW^8+cI#!AE8izyX~rhIR#z-4_z0%8!SdY-=urqYlr7Kz{Bf z%NEhz0+D&)`}FKnu*#gF{km*XV~P!B%-ZVmwFk3{Zi=%zG5KcEmFe}-bWHl}W+fd$ z81cmvJaMu^((beA{p=O2t4s4-6XG{gaAbbcM&vG$&T4AcOWt)tUSiu^lnIHEbUdcO zK6rPAqZkhX!1?>r_8ui72bwfhlTUqY5~ql3cpbN&S7Js4|K&zz1_VBK0r-tDcv40C z)#40azy6QGfi3ONCo`c_9wY?b$OYF1*15KXyn+|sjiP<~DOZ&oV^za;ZryEWq@s?^ z0W-TGg(&t0mj9TOX{PR& z0AW@YwA4ot%|jA%Ya!0~P&gwDFJylt0}OJ4%`&o*(9FCFgIwmQ>NnCm-6Bdh-I=%5 z?9Uim^cXwP1qZ8DQ0O4lg&bZTLTaXP*=+lYB7V>oXh|#Ig{SZBZ>pD|i_oWO$0g*u ziH{#jf~9lQ$BMIi;(>=$Zu;D<9b2WGKC|CIllBeC)vi#aaGgvBHKt-jNC>jU38}CX z&YVkE{Na<_-a*a00HtU$HS67UIa}*|lAMQSL4iAPcJ=b8*tJG(q2a>%R2YRbL}L#h z<@+W5;#KiU& zS#l1n5uTX^v@f@L{Y%pxyV{1Q1;0T72UGAxv0s9zvlGzX_CMDB58DO+^5e#2x|wmm zU&0U_Y#oUyw`N<6F3=U`qvmpDvTVXm&!^Y{hCMdp@r1%LdEB|_6J@6`X}5kN<$7Z5 zS?=gZ4h@;xXy;is)_GcwqJpL|S6q)*i^0u>fT-5HFLz;aMjg2ujLavpKtPa*pMs|4 zgH~M?7n7vGV{5X0XL+IMsyilLa7_{H7)w&?=T$8~^!l#PUt#%V`ys-HLlCsEbiwYi zM0OjH6CmHzHqxn$ouZ1J$3=m!6@qK{bP`WaB#}%Em&Uqjxh2qmF9iYq75V*Hv*VWL z%LalzoL$)}$%JY%pl&sL+ByZeN;jL8iaM(*Vua0Y-|T4ZNFigPck^MVGscGMV162P zUp|%C5xSS6hwFqmia8hIW&~D`SknuvtUu;!2uKF-Qs!UZM*OMKKmPj{cM}z5{tEEd zD^kA#lz~I?FBhhM7ySLA$WPG~@KWrzYa_o4|Fx+8rzik$gz!W7-;~(@j`MqI^-m;L zq<=QzZ-v&sqx@b{`V++ud?nz|uKbGfqrmicl;6+fexd{u{Y#V|Cv?A~{JyLB69wV< z50u~c7=H)&Jw^Qqa8LIG;Ag`6yXfz$<)5PE;PoO{4^F?YoqtF8>jLtpJOJ>S836d( za`Jcazpe&;6_;oGMf}gT!SB+44YLrt D@57KD literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin5.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/ReelFreeSpin5.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f20b84a06cbcf349df37f9ecf7d502c9c309678e GIT binary patch literal 15321 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49abd74cf4cc942f322910187473ee138df2d7e4 GIT binary patch literal 12378 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f12c84e58d95894593f397a8a16858689f304c81 GIT binary patch literal 13406 zcmeHubyQs0(r@GL1a}RtjU>2xfDqi>tqJb#1oz+;+}+(ZxC9BoB?PzE$=rD}H+R1E z{(WnG_w?#>s{8D!wfE`zRn@MlR+NQ;#s`0I&e?kXoX4 zwoWFtPI@YC_9h@5W>*_)vRr7$m)QVF@c928|BIi%Si**74=eV-DV#@0+{&~VaU@%r z?$P8|nlXN%`HW@#w7`tLAIB~P?<1$_a;w%j>xOST^xnkT@#q3+v_yoCt-J5q2HC3$ z-Y!odUU7Mi*l7eSX;MekDpmo>2xFL8f@kaD#)_8>yASXlGtt%Or=)f!0t!+`f+Qr| zQ8+eDc#}EM19VR%5+)?7*ka0I2~kM1Y0RM5SoZV$~?A_nSSv|L7Y(W z$q8X3F(UX?*EHM*L@VD#ypIy=QZ_ED9uKpI*cN+P`1y~WRGw6WU$X4ApD`r!FVHCX z-)zKDf%KtRD^R{P#~5Jp?`V$#4uG&S;k8hn3+scz*XEcRk}?T^K^FsDe4F~h>wUYw_5DAP>Jx3F3 z5DW9q^M8@~zZi~xTY6cX{F`1@Z6`n)ZwSBOu>nH!#*iFNS%G@qgls!KAP#)$BociI&?PdA3<8Y4t7@m2@B92gt=Mj{qI>CCJd=O-7=n?qm{Uw#VV*g` zsb9N-DPfN$$BE8dM#X*icugGQ;kMs^u~==!BftR~(AKGRJYg)Jkqd{00h02npr^94 z$xdyA_^pUUbE)U2$O>cC6%yz)cKWnx$^f&ZcwGQOd(b8W*wx=G;--lX(-?~Zqbi?> z2-QEO79oi{eBzLipJ<=DreqnE%SI6?6YwW5dMjc6CXT(R$65&c>mtA_vs&bI%JDl! z6H%#~Mw8esjF23jnW>H+1ugBlJxzWO7OFv|e_^fiS=blC8`i+q_%0`Bm5I~@s>+8d}1B>#BqvI)=`TYhlSp8pcTiAKp@d|58PsuKX|fh7-ytXzhHjp{Vse4M`# zy}q(Aa&|DviC7!k$KIBqKeo4;>oEa8jb;xr$x#}OP=2SlW-lQ!02s-90P%gGALRsrs#ts*57?$ z)k)g$s$F5>GJQOH#r!hu*l3zMEfuUf9@@_}zgy5?nR=9DKgf7*>301A7 z{4}vQO~>3^^0mqL^_p()yY(DmLyr#xh3{yIo_E{=7hJLnDSf^)T%*}&MnAru^L-sJ z`E*J7>|T&g%Ym)G)JyN(*>l#3#v^CYom2^dGCm1i< zA~ejLgBw8g;3YU!^tf4c+J_5knfdMmH646iL8<1-%Nw3{0lomT`G%Ry+G2ene^CdY zMxR~<(1TdvB~@-XHB9i*X@35UekGj)iA}~F^N%zme1iS=Zu2N3eDaO#51)Mv3+bX0 z{q4)R$P@x%CZ4TYTWn=L9ln~yBvq;p+2KwYqw|IzOp!69Xi^Oh(}eYrRrc<12M;If z*AVs^%d)Nj4Tko7Kfex15osy2oY(bt(|i#e!W`_4h#Ykp_qd&QMf3)N<-~|?&}BI! zW6kg!>7O*{z9g2~4{Ss=C;=*RG*44Zs0saiXQs}p}9FIr&NaZ>5~R+vm<}sS@5gSjrrVq z+BDQpRLU_ zU%3a&tmN5sy*ABYUN`R2f)i~@Y#;6+XG{X;hY`Yd7W>FyOKFLET+VDB*rvhU2oR! z-)}~k0>Ypb6UID^<+#6~t5O9CYO*T*K;O|#s9-+hOe+FZo$SFOAGB}Imj}@r^}RZ* zdswrgfvTkSGbQsQl8X4~l*i9Wxfnone2QrN%2x+1#oJ4nlrJiu)8Jo+{69AExgAusvYqcz!NR-Bef+LJ!oV{tktH0!fvP zUgA9Q1DMN6|L{_Us^EBK!7S@IlXnAW__|1B%soTnR99g2`1aPR@a=xuzVUEekKax@HH)PZ>kOpo#22kIJ#c44*U{SlM zE5Au7tKPBL+O`djGnwto3FA`3YRBMmcrP!1B$FL>J=eErBF}suhAAqa@iGTa^Z9vO zpoA1RZBcB5BWyjCCblL~C(L>)jh4+>dVTx)Vi<&d+4OW&(hS=Vedp@~$2ApiQvoawe3`RPLb`sq+Pk}+pLc6#Q6&=TA(QIyfP6j=J)hNZ4~p&JJczXB;i1usc04bF8--i;?Q86QdpqF zSi0xpQb5KtbDkID$_gLO6zp;${hX6tuo5A*3!EB(DWxKo9t;g3PlLiE=aep31lQDr ziavUM4jli6v7?K9L5_H-u)KZLaIkmztPoe^gm93+)UL`G^vj&VW}FPE_pTt#MuNG% z4GbE>&3Xk<%9L||#3=nCsE}d|U$=*3sP&9kyg7%Ivy`y`KM72H77Kh8bLc!W9Qrj`GT~3u|Py(vsg%#F}i?WPUPB1P>>xc*#&)Qil0y z*CcVy2>+9H(SgR#;o0;fh?d|v6}o9`GU0X#Tdm*U$IDLA6X%xEbHm)*%M{hf*n(v# z$C%jGV4cq7)=F;|>VLSI5C$d!3Ar^~CHq&gRUVrySD~*WS5QBz%v-M-Q@5z^7G@u4 z0Bs@fc@E8*hE2B%=Pg_}$H7DSO9$ljNzERSxyx%D-X3xqo7f_LO8dE5NVbu1`pGlL z2h#b!Spd#4dBh%8^#1eGKwjS$Vym2MO^)QQLFTli#TPxs#jYM&PewHdqO)!%Kj!+m3qt&xUX!t339jq5!!7@)d?l94>G!YQjP z(*>_3TU)+&IC;6lKrLYZ7G#2=;skg@nw%w==yB-W0Rs<>FrZe4lEZ*^kqa~KW%!!4 zX-2)stxK=bqyyA-=n${U_-2-OR-3?`3j2g4*oJ^k-$cB!JCL%^Zwq4ky8P%NwXmO` zXMC;Vl&0qZ6@#$E7*FCQwI=qYmJ#vB%dz_p{Px1As98iC`%B|IKHJi=n`MpiQXj^m z*)|G0^^pepgPhWzbyAM}cwOVq0UJuUgCZlQxT;U6>E7sEon3~_+S8*gxjr**)4y;> z=)97yUDT=Xbkc}^<>oLtb0sVd#S(p^yX}XvA++Qr{&pmZx;5o9<_nBcAtKHfUL)Z} z@3>;P@`hOuJbZvON?n9jE)JXcP^~>WD;1Iuc^3o(>!oMCC!GPS4G?ytoT&zeO8DaZ zWnD-KRQ_?+IBSTdQ{-1-qpppL$`6XuFw`CzAvk6=#vduWL&#;289E?H=h<`VFxt^n zp9NAs`qE;r&%^@zyYZ7~^_~Ly2lk$R>A)WjXhrMIss!G^d8Pji0D>jtLnwutmv-gC zw+rIj;(hUW`l-6dt9lE%j|;WWn>{W{-ji|#3*Nyd9PM6r-*0Y?)&(~<*1Vsuz71bz zDU{E~7j2w&3Pkzbc{+HzfB)+CFgqR+qgF(V=EKMDbI;`YaG9Lk$;W>?+S2B8^Kh|o zvOU|oy};)BWB_{a?sCs+WBlfI`w@4~>`kNK$%Ngc_v+e5{)gm6W~`(%`=qd_H2dT* zB;Y0!R zpR0{L3b$cLLq(`zS3_ZVdLu$s)VI;+kTKJGQPX86H~u%Nz%jo76Q z%8O``LRtnT^PJBdGOlTRKUdePeL0^F#RNye=a#GmVs?e6HM9s z{7Mx}9RDPA!2~fU#_e$byzve#t~_bw&og;tpRbKPW#tA<84-7KDKYn~!hr*bDTWZ# z$0n%_>f?~~1W~a{ihzvGqQ!QH)``N#V*_~OQYcG!<5DS`d6iQr3wV`NDeHM>QYg!L zXHqHKdD&Aa8y=&_u831zuxEB9=m*Dd#>Zqf7Uf>c4@RA|60pLJ!CZ8CRsk5HSNz2F zJ*x1I07@=3PzT`nA9qny@v9>{17y3DtB@Jt7`kMt5X)e#x-_d$%isvRtkdmfr79b|cGgr! zZXN!Ef5HaD?Cr6dBLQlUv$`%m*DeP&-*jcL7LDP9CbU_T$6kQOS6Lg!h(VKltSb%O zjj(E()t;2r1^D3%#~m8wYqJW2%P70P&H5xMXgIz>pm;r$WB5E?=7}JF%Q9QWi3BK1 z|Fm4wVqQx>&0N)Dpk=^vu5&T}fv@Gtn3ib)WCSU4!;C*KgZNXOW^7Sr^b7nk2v9d4 zD=8xY=^IU_@CJqih$u$hp&kJIc-X&X#`*schufv9$!baUOp;5t2+4U;rj-! zKWdKb9>!fDgh6q3TYHsg6t>QT2Z3eTo&>W1EA1E^Xdr_FcZ?d;ug$?d#snH%w%1#sYSgT2Gr0OW>CJVVYKzE?d%v`Y2l`YsKu08IiWV7O6y|Gv4Y6f@ zF(3I=arL5xH?)~T%G=#YUNhzt+1>DFQ`;1+-RNdBl9a)uNxkEK7GtB)rO%d(3#G>? zt;^r{2_|KjeA+ScZFsYdAX)-Ra^B#f2P0~3b@ZSDm7OSU<&Kn$sxNZCUhrzvdLXfI z*JJ5svYU|PnhXeo)%CCMlqSGl~%j%7>&l1t7!@7 zXlj&vt-RK&V}f&H6iS|={DA<~qbTgQnaHXyLCan1}|@K6P}i{TMT0v zrkOKejA9wFoO4wSb)atPE@e~{`DLf?%Q?*kJ0Yl3}l8u0H2||Uu62}}-y%3WU!yG}qu#M8|IgI<+)LvG@~BtopAJCBcvxkNDa#YG@18v>4SFIu)6J=b z25!8+k=$2#HoXi}SXIwift1{Yrd(&&33Jx_k|o&C4M}-uuBB9>rTc}U@y6ity!U(A zcsEzZYv{mvoF<2gQH1KU&G2PKm$o35dam$Su0RjN*S!{>ap|PDhK(h#UoertH#djm z9BQ(5Odl1y9>Ruh#=Y9x;L5G#PBXmzf(;BY!euRgC3F;seX=adrp)NG+_*fI3B8g0 zvH)2JS(|NjSiUgJCodnGWBFh?NQg#s((c%diZUT8zwzm`M~sf`f$9OGBYW$*9$Q{g z^#M|L9U(o6wNr;iF#J=OkC}<8!mKMve#{D^R6G?5&bcYEbzJ_c@%eVqQtm^D+Newy zf`{7BSxeX9OTD6$vLr8WZv^j#%7LNjH5X=H5D_Ouq$i(?Ch0>DZAuzo`U;6JmYr6i zZATgBMiyH2I7_!LM%X`+pmLDA-G+3(682qNq2xXo-Vq}}n29r+lXL-}UBe9?a~gyq z{f%$5l@)}x_|Uinh`ynH;E{n>l8}OhWAq0 zR0862+>;oU7Xz!ytCw33slhd&KQ%L9sv9wo4BdBAE!NE!SgNy#7u1D|fps;<994ID zHLi`A9|31Dm4)_VKVJEY94=(^x)KKo7W=VBjt_;;t`N;3#X0L`A+MG>$u0tFUR_=v zj&AmiudB=ZQ`pM`MM+)8kJehfGTK$UACE27!;l)<&F%?Q4Gq5Deg$4$c7qY}=S2Sh zfJi60sk%NmUFAafvwZz4UFBqMVq?Pc>-;NIb)+G0M<|ZhL3vIp;bCV)>r5c|{?lSL zq4}&tnAY63EB|_?sk0f7L*anXGDb=&)W3<$VcXYNro6A4Pc28G)g9Os*~=}g`08O^}_o?8IN$9Pjt z8upfk^OM(V=PfeQ66oM^=_^}_66OB8nYc&;{L#@iGTt^q$5;cH7zzyncu#02j)pqz zk}_tKlwFJw2Uue}v=C03;v#7YLaZ%f*qG)xcXCrhy?B~+)Bs{46`)A8Njid4s0N2W z2=<{^lB5`(jqydBxx|YLTqYZBou0$5G=(@v@2}pE>or%dvht{NnT6*I^4Bew11qfM z_Xz=SFPapJW=~X#ejoz|*`zGp94zKrtUk{N7DCksezRy~xReuoA+vT)D^W29;6TyzAC4rrS=E%=t)zUvh>fb_`S_0CR>Y7U@XtC+ zz!;B*y>)M~E9x@>C2wkP2JVQFKSqfjz78Te?klS_2uf)GeSj`n?FDDxRi~OyI{Ya8arDU7iU~ipQd-8Of~4E|m3MO+!?c$1ds<+h8994JuYu@JGx^Yw*WRI)aM*NzX-% zG6+%AeeLY_m*TV{_A`dTn&sHch6&c zZj zr;m~1Yq0XLSVoW+Uq>H#`tPs1^R>?K_4^X)7M{_*5TF;r-jhS*uBJ^}uigA|%D;DO z@P;(KDhJH0>#O#$0yJzI|a=519+}VW~x_NQO-t=aiJ7b!Pg>Yhu zSP7U&QQwBNAR?CFDBl07-n)b8Xi=noz%VEko2vdQzd_fO#aqg<-E7BHG*se?$XrSN zwEJsNM$0OC^dV9+HKYQ43D11hJFB8~dVjTgwym*q9hWV8xuDN(Dd*qm6nIqaT(nvf zJR^WQ$`Y3ymnP)86T0O=Dz3u-%k7{hu_$gO0n53~IMus;{){A<`I;HrFAK5n#AUxz zua zyTE9_X+O6KAZTn)c{=_&WB)tn_iPl`fOjY{joW1KS-9hK#exG<8rOBP^Iaq+)=~v_ zHL(7Se%zH|m@w9gogHg-bN2RHsl;V}@2&!)gL! zWkeUlE4X*{MwuR%3+5HsHEMEQnP5zJA&3|!8jo}U7}N$w1Dxr4pFE1w5W|RBn!M{} zn9Q|yr-_q14o{;QiWnGxlc6vuS$LIXzg7SC#4(k zg7@DPX6FP-j(^p)!apER#mUml67;(J7K3)idu)Znc@zW&F%v{X+JhG@(-Xci zrfH5n#XLI)A9AX(yM+5+{|AlLF14k3% zw@!{0wr0QJ?Kv-RhbfHLb>14b;a6tXIyUtkCmRk6%TD4rRc?vSx@PRlg#Oq00L@$` ziuq6)b(=^Q3*|`j$f-KL;LL)J9vgSo)Xh}NNgroiZw=>$x~C@me3EI!n~X%_x;SU$ zgwIXiYTcKXTrAR-J^aN`=u9B#fAT*>ZYy$Q3r3p%T@YDp!#%Td`vL)XUZW9!O`LAtQa0 z7*|#&RYZU(U0S>|A~W2cVF?pJ4VCn+s?3iXDTzq^yFQ&SOu;5J16c}0H!6IvP!+U4 z9lEujJ~FhGzB-iF34%IQF9F_sR~2k9khRRu00r5~7#Sr?`q8=B59b>xPAA&ddPOX2 z2D`mx&@4eljr~YB9a<4&hT`%JBgqh?KO@DEh(9CEkiS18{ZNlTBlF^xzs+@6Ka7@k z)xV$Ead02sYeRfG&UCdrocO)FsbsK;_Z1NFi$U(}~bA z{+qFgA}AmM;kQf@aoW5ad&5Az!O>pv+?t2brQ7dSuKb!LxtWi*dI8SyBct5ZS%-QS z3}5@_5;4W%$pC>nIPTdp#sJ#5Ho$i|p%%b3= z_&czMVu1TTjO~mR9qsHvEJk*YCO(uNW*KY)-xZ(S|2@Tol6rD1lBziIy_FOmk!7dzaT}H6C~#GP`m{66DpPH zMC*>cZxZu+FNdJYjp*nE9iiHP`ECICHOh~6)||BhlF&7-CgG6iICB=;X!M#aHL6Y2 z&0z&^ID=&z)oMU+5!GH~2vXKwj&;x;4*60_j5hxZrLs?23mklO4lKfm29YG&)A=jb znWx)qH5vtt=De%dnOh1={%Bi!0*jWM4K{@J7Nou3V$N4~&ztptWhyQVsKrCjMXLZ% z6dgMs)5E5v>Ds`CtCnBWYa9gWIApym{=67IUm<7#Xkv=2#DyPEIof%svB6X*+Zxh1 z31fSFZl?oJ?i)b_1m8Iy^tNp9CS@H(`JEav&?f<%EB%r$JN~iomgN}?901>O0LMJ& zf7d(%d;9+?9$4f4b!5bMM}xPY;1JZ_7Ql7k^FGAzjM^PJMHO_GKTh$!O2PBLfDfieWn+k~^5lUXU@z4K0?-DMLS0SD#9L z1#bI266I9qlxcO>d1yiSt#Yoco^q`f7z3h-_nO$H zOs-@5J-xgk{!N9lw>7|2yKZY%!5@6s%Y*M1p2^(2d8Lc!+S8Tf&$jhq|FXIekW66z z|Ih!P`17~^^ZF0}rBIapcLD$2-2Erx&ucCiP=9On{+;pnhS$GX2f^vE-`Zb)Xa4s# z!M|7mfC+?O%>P5v;O}yNZx;JY5<2q#oy32%j{Pp>_uBnmQU)>qQOd7M{_j$LPnQ2B zB?Fur{D(HSU#auorTm^x{7XtF$uB9tXBU4L@caJnF9C|wzXbfX8~mO1_Ym_h)|YgD zu>Kx!{x0F)!+^i|0e}Gp0N_7@g5TNy-Io8IU5NQ_?EkXtin1_ZO#=Xsf4;!V%E$Ke G)BgdLCc*vy literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Settings.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/GateofOlympus/Settings.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a31818e0b6900d02754ce7efb4dddc6886523e22 GIT binary patch literal 10031 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 SB^>}ruOI1GZ{LXCe*GW0l29T5 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/Test/Bet.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/Test/Bet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..96f997af1855d949bdd05590c9adc69f753a1057 GIT binary patch literal 13967 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/Test/Feature/S_Random.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/Test/Feature/S_Random.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2bcd2d11bd786f77a3922979b7fc74801ce63617 GIT binary patch literal 41768 zcmeGCyEhQr328J~aCe8`7Tg;Mmd2fs-~1|J3m?vu2W zqq~KpyOE~1vxS=hhnIsrRXze7Q!We~Q2+n^{cnswManq1n+v1wOrcf!E30j-iv-G# zWs?qE2JW|1bf={3AM!zD%gbAqfuX9p{0?by4##J=z4g4A_N2)_sB=9V%)3oHc&etD z9f;^3q3yc~Y~4&1czwD|i*FJ?^!*YnxSxZ!OmV0-_lW%$<(9(F2Zz4bIR)O4qNVvA zj(97@(F=F?Y<%8PREujrV)nhWufVFbXQ=1cLOSO&7>?L{(Vb|aMv0+SP%l~me7{sK zp5mv%#KhZc{6q8)1hY>B^t2GW{N!SKMAswY=RUFe$w=Yw*k z_p0EZq~#L9VnM1p@I8G5HteK%C!M#b0cdjBsT*J8>h|7uiHgxYJFOphH-*tn!}m1u z2hDT%;+@dW(*!+41~Y6OA_dsp-X(So*nD7j-Jv1(P`M~`vg-6MM8$G$3+|3=SZrdX zMp5f_QE170Rwz7Zzw4R!!-+Q2WZ%@apBZx@l7R(MNjtbhhJkr`frnB3zj-UZVVeaU z;H_(bGol0DYUFBR@5agTTK>OY`oFPj{$D=5BI(0>cy65Vvyd0+k>4WAEHqR0oU;2L z%%5SoGoFnFGZG7%pKs+P-SZmW`aml`XM1P-wX7-dD!}pe#7mV$4S`xtw`g^}e{O6< z#!YsWi#t~63Z}6yKl=WcH;!c|Z{e?4bj40Xtck@kV~M(ViHlN)SN!=} zc|~-cRRKc>kwcF(X7Fzr^`3L~&+I1E)#d2JGU2m!?~g%@Ayf0?i+_LO`{`Eq zPbqf-&VH7=Bl?C8N~iDCiZTdLyR5`qO9#xydRQa_ofsWM$sHmGP}4#f_A_kVXJ7uE zxU$c7OAR3-!-RrWO_T|Jv&Yc%@cbEASvqP`%IT0AY~DF(s_j zgu2eozF&ODp#OWUPQ8i=OD6j1a5b_FxWDOvcQj8m^Y<~ zRHl2GVspxBr4)%cjqtRCrZp41rf4Nv?ujM z)(wR7dS;@Foy--%cI)DyiacaQ*rt=04)bSQaCIMB@z+L}kmsf^I2AfDy+hn3rmh_7 z!PI{md5JQjFP@6z8qA-0A`umAIInb0vVsb_K*@yyy#mv3 zge46Wj-n0(7mwK%66{hbty}Mw`|Gb-OsstCv6izv`}g%I`AmL|?Pf>m|HR+kgn{~q z{rO3@B|7{8k_#sA-1vHP%xLi)ju;tK6%o$%)8QAKiCi3ZFnwk&ZOB&YI>Os|EO~_A zf*9W{(UiX};(mZ#89DpLn&-5vWmkapTdDWv4gaW1^6Y8^$;P6xkf-gGTk!LGzPH)@ z+T+XrBde2;Q;rdUjX)e828I*{1r}iS|Lg_-S8o4*_XSws^aj-Z-}_gQG;G_$g&}(z z_V3GNn+uP>YPgH#qm=TA0}(p7joo(nfYzzqik#M}$XQ*qhgG(YA$bl^AD=MV6X=f$LszD#BP& zji7cBT?Cau&l1fJ>=p~eOh33L7h_M2^HYgW6GW&7i>Lgeiq1BTAD2pg)ET-MO(m}3CuxIfFgLFfi zjPT{mzUN>Fc!mhor*gRdvSq^XVOd+~9~rOZc6#X?s9o3-|9|Arm2IdpaWD+b4=5ZA zF;L_G6B*sCEiByKIRE>@{Td>n$sZEFaREEZ*9XePGgxK3I!Ws9ER*HF-ygg^M{p_@ z(wD~4%KzQQf1qOBN#cO>J?9!1F~c6-t4*53jU{YmM~&0KlN|P-Uoub(@C(d%2N@8a z(^5WsqvQ(vK3khooK0ov*a3c>hOVxGF3!yWLYFF-n;z$Z%lt-|QN@D5 zoMCR0$rv4#dL7#Ju4}@B9c0fZ&SY(X%}tfj{p3I^EHXh5h)|NgNZE`!UoPFFrLe&P zt3=ZqGjH%6b6Kh4QQ0b1-s;Qe@NxG<)T7TzO3np8ej3DX7mnYzJ;~N65K}7N{uK|+ ztL^DfyMu4dtGO+b*`sA`=`21A-Ju#XBo`7_W9sk9H8LTz5e)KYglO=^|71= z-a}Dr()7c$J2+{Ur*1+8mhrJKo_sj~9(4tFNEPoMYt{DmEoIxLdbBE;*tu$77O0D~ zkZmyBwEpJv#D#zoT|wU`-w9t-gXdlu!kJ^LRlQ-OeAf?(HQrDwHy%*i;j|S_OP`5c z?ShC@H^Hn0e5x6;nVt*IwjK>dzXIwDqbYoin~}WAnAzdhkCwXt8F6u)lG%@G4~6~K zY>YBneuo7_*m9eSVG7VnNXoy6b9)7m9I-rqS&VNyyQhL6f+t{WeEFYHlajUilfB8| zhf(jougdsCCE5~Z;jd?^a5E}x#dU$r?USo&rSc-`;zkCMej&NSY+w5~Mbzrs6XWgA zk8A&K62zZ(Cv6$UKs$JJmGa1n?WJ9Gw};Zs z?Qep?%L}Cep17^siTp`RpnvT&&|BY#22|zAx_@{6`t97wb9TIoe#5iq)BUYcj?zdg zL+;`V+K-pZd7a>!!=M*y`Cs$Ztr54*6rwr zlktv~{yA&I%@o7U*xe6rDLYS4odte{9KE}mx2p&_N_#JY)@WkX;ckECl3wBvfbf~F z0~qDhPE8-{bKFPg=X_gWmY_-|3zJaO5;ck9|v;s!tN!*+`Xp0AP`5oJGLjv1kgaxodhvKolBamfCs3?=b8uT5LhNV6iKD-ihIa!R~?~>XtGYa>n1fLy4?YW=_g5 zGSKYZe(OR0g+GfrInN?FuOyjA5BAoNrh9p~YIKY1H{+Wd5vg>Ol)R#pyuB12J=~i@ zz-9;Pb69Km`eUz(V&8jfaAIiUa%ckoJ;@IgUrUGy4mdp_x$7ywX}VGT>Q8!Js@vu7 zDqlzD0z#8zPVjeKyTbNiQzoOU7|BQsjqu+NlR&?=Q54c<3+6L_jj$cGJRaPADii;wiF-3F6D|p=ToxER z-hOmxP3s6Jsmai*$?*9-{n+5=;xfi>JbLFsHIR+J{0k)(;-O`?7m+uaz`T;sj|PilwL(Q(2DngA zZ$HO3KuHCs7{{sqrkJF;T{?7U8vu*7-&QjNVgTcX%ka;e-4m3tTk&}64j z(Slbvtq4evHtL)f9O-bN13RLXDMB8oQ#?Z}yhHaIU$2U_$C-FqTL<3aKd@hcYEy5w z?$1T7h2Po9&5o`u4X^1oGA)c`*ld2c z3-$B085gvugFC&K3zt+t=pLmUwxO0lnHqT??(`pSPDA@~T!!*IzTTrpRpb2)ODr_I zKJLNv-C_XfPUB)0b(<%P^5L+cszi{nvka~6Le6;e`*8pN8vDP3UYmfysn6aKOYA}| z+w4N_(_j+rpPK5Qn*D0^>KRtBg!kJ1X-TpmA%98u>3mXS{?Wm!wh{f`&6_oL8WO*_ z#{q+LDTc66W|8SyNnZ21x~94!#sVH668HP~*ycsrJ?vBBo2aS_e+1npdTF`6?Zbli zDsrzMHCRg4aAeZ5Sw~hCRIc3OU|QJ zG9Iy~c}urzWoMd#>-Sw02uWQz`}|YfD(; zGtw01tPJ2}eJpIr^D0Y#oqnIHtbp*&c6SIk&fa_j#Iks4R4HEzEDi)&uAwEKp(S3W zS48B1_@4AO?6{Gf0lulSQ+V)yHLCXy2vdjB&k_-)I*`Z#G0LdvwP)O$Seovu7*S_^ z#-w%pS*Pwtp^-m4u|V(#EI{z@3Sb}RLMemKieDYFux}68ZDs#o+<9-lYxQp(KF%0& z{aX!H!c3Et9~LR~|G&Pedf*k0tIcZHD(ud`^2XNG$JYG)uj6brbK+1Zrh6SWe*tAT zoErPrS==% zOVh#i8|SjVN6j0mmdkC=^e)Hc!m`spO&@ib)xG4>sZ)N?r~F_9zW2idJ`iIP=}^5H zr*P>Mo9_Q_R@|FV8eokraT;p%IcCkr4I8cQwxNENN!coZgD+e~VT^~~K*T+p78i2b)4h`sIx?ejnkh=>dAzAWB- z{H?}t5zE!h=sV2#X`JyjGTzICTR8@n^_ht#@OtZM4FinNIcCo}7R~vOn)oD0)H}$~ zr>L`C=gLK1cUSOFO7F9S!dOF?EZDE$#tEuWn#NCkS%06PKmRkgUHo-dmqQnmXXJUO z@n+}^e4dWF4KzfrM6{dnzj(}OaV=LGbsBJ$x(Jg!I8o!S1JXxG7{9Ku+6RaSe|k_9 ztJUE*eM9+cWcer%W(z@!rh5`{{5eQaTEO?cfUkm3varlBSa!u>U|kFIp3lY z=P`E!w_z?N18xE1TLUqHxg7iz*Q}hB&5OEY6$ z7G}YbSq|)44-ekFZec)BljZUCSriqKebGs7RyG#@#@8(>KP>7yE((N>VsutLSst)+xUlaRc8H`l*Y1ts~frzK6gZYuJ|nCf?EQJ>JZ;5bK}Cnx{(k&6<2 zokY*;o_C#;v8XNDIUu9+q_=u=XB{3BFHk4s!@*L3n6pI#piP*ueWk#t;`CE6JK?u{ zc+A+~t>9@>Y3v`Ac3oMAQh4KXXVeC2ub(1wD9*2qXZ~wUcrK_H=5*GX2D4PG(ed%^}vyS@k^9O$W zwoit_K8E?+XM7&d>vpY$?!vjK1GixT+hclzCjvnbqDW*Jg_{egZ@Xz4|KNme* zF04T5?D&|gYatBQ^eju@1AG$`7ew2lpkQuZW!Y{mR{itSrt)~;i1#P{hkKU{HZ1?L zdy}-5rZK`Kw>Es)hujZ+8#ZH^?5HGQ1LNOgefJT8grKoP0mTJXcfrJBU$LTzuxz;1 zq&ES362ByIb03+`9=6(y!RCvLCTr7OacIM=&LJ2dU2ZwS6UiSb+Ou*?ShKhw?+Y0d zrMPag~ za+24jp@IST>+--t7i{Q$#R&{3;Tm?l2ti=gNIDjwqDA=ECwh{K{Q?yN5ST0-2?CNT zWE?T^mc25V^CqDplIs&|rE3H(tDHcZ`CP6tu3X$0{+_SzQ-boZ1a`8el%G@M%X|0( zIBENpd0^etKYmaSk?J??{m>bFI0JvTlI?KU<2~x{X~Hl+#JLHd>o?6KCnCPYz*mSI zg@P5%Y=_3{{R~S;Mf{F;F!Ugdg4t+?+?9O$fR-Xw18v>y)w~EhOF^uE&`E{gG5A)+ zA0NVdtr*RxBg@RAegexWmU{^Qg^@M`X3S+XStB3(oys5$cZ`6f3@$j0N)y~&*=J;BntT3s94k`>K*+@rTb_EQ{?0%Wo*Io^i<1CE$=?4&20R@ zpW;ComdR%-G3?j_g~dSyV2AUAxiPZi%)9RLAzyj0PwlODY5o#d?Us?A3xQ2&OH{c^ zWjfb0{oLU|%z5c^!NnfJ#UPOA+4~Zo|LFn@8}|4^^wHOo0;%YuuZ{&lmTw-hMs$o! zIgGqph_XZQ^7<@VDX;B6yj*f*(^0~DL9~K>WNiD4=p>mc7!`LAy%MP?kw+%dV<$Uz zOeEjiRbR=kB(sSmjzn2-Kk``x)6kgX+*iKTv+!gpBX9PgqoOAYYR{qg4myAnOc}N&zsi?1gmk{Ne~G% z>yt}a=NVIrR^FyK!=g%7m&C-%Kw*5F2TJh;7v3N!uG9RK(bA|xcP^%(o#gB&fr`@e zmGBcbA%)$GQ-m$S zA33u6!M2|FH^HJB_H@liQ2Q*=usDT&5cCAWc`Uj93Sydjnc>?DW5vRQ=K=3GxnWPH zR9#|5iz@-c*zZ+iq^YmgDuS$Al+p#e@xF!mLwu}EFHAbedq#XJR`3AtkG{Us;*cBr zv6L~`7U;UWIh`KTYl+{XI1eN8Zct`8IO0Zml`U!ows-E?ibxjT`KCy4+hY5CaB(4& zsOf^?C<-3oM%jQNY9IEuBUTB5+zit7utF$y)n1PSvhKGmQxQ^}FAmH_eiCE(&!^zW z-1xNaByI5t)O9|8F+ODomn;IOH43Tv1M>W_i1TMO6pz+*_ZR~i98jifuc#ZV^tF^b zL0C64A;K7+=?8f^nourP=zd#s5^lYeKAoGmQm4@09LVS50fiat#$4Aw%z3zBrC23N z5O&u>L?-M)<;3@)#)L%!3Vb-u{1F-hk>%DA8iUrBf%1)KK}mgIb3q*$G_-0`9Yhph zYFedhiZM^Pe~Q!05!lgv#sXr`ykjZ`CzbK>J1xP6c@R(nPXD!I#RAVU6Rg^ET0+&?PaUB^z5Zh?8;^7{V5yRJ zQXGa+5nV~Y)G|njSq*zmtsH6snHW%{QazgumkS`Q@21Nh_>!1X^e38@A~OJXNYk25 z7{#lhwm4KS#)=jfXpWe=VhiTW(jdc$tjYbCttX2|D)jv2X#TMGrOHbH4;8^#>cISP zV1V}1b3C3$2~X$VA7(-fFk&!Uv7g7d91zh{7S#e}1!;A^Nwm9wc2LD4n7x~OA&^K4 zW3W76PuKjECqLeaZ(w*moW06RAJH*Pa8g_c;=vn)cW$P;^($K7}ku!zC$_xx*K$gbTl`6|1CAQL9>}Z_E}U-UHQ#dBRiiL`~`gSYzX% z{@Vd()K;$PuqkaGC--PpzjzIu5mX`P<}>Gj+Aee9xU`Z@5gWqj2CAq%d>y4_*m}$hxPH_8HLi0_ zy)#7N4cUbugB1D-Ya7(@Rpv0{eA>WuttSmkm9SM4B>d&#yv*&&geH?V@i}LD4SC|nr@d;Rr+Q5p{w#tweNfsv2_tVu%nUsoJ8d zEJG!6qM*z;q12k$vln|xf_XYQE33o+C;GPYK#E%}8m5GnJ1fXgq_tl}dhS9>S7{ru zOjY@snk)F~qX|6#SVv0FL`b0z(rP5c(ji(kM_WgUHv|i(`X?>-WLQUYe2+WaM@20W z*&o6+IjE2A2+l_ky2w=3g2Z4)(%;%`8&HM@@D#Au1!U}kg#yscX;xGwTLg6#;7Hb z0$5agQ_#DZ1BAEvwST&+WpD_zP>wjooke^BOsD z=ot$KwuNQ1L$G)BKkA^Sud#8_bL#{zOaEc7RiZ8@q9h_->_a%TyD=DczoygbfB){Z zo}n3aW=XBoUgd2vi0bxUxuGYS8HyJrR2_9Rf2urnff?m7eG(=`WAJ_w=djBx*n{_8 zMwrVY>MulxqW#CRyy+?eodzUv_q5NPA7YJeYzfD$d4*s}8994FW;t%Mihzc|d|$Gg zWIUOz>9xycUaAhBD8|2Nb&N7-p94vbn5qgN4cQ}_K1zoSVb$Yd0RNe_?6;M{|E?#l3=zr zU90zs3*@|g;5AA=VRd6t*fw4Hh+wt+Yed?MXCNhNoM6X%?))vvAI=N~y70m(S@HJn zj5r`Gu2}Gtm zbAQ@!hrJ7j82SC=P-raEO;G3=paCh=KUI~{SOu+a0P~!fkAi3WQ-}d`?}vQx z;O|Yd94p&@85NLoP7OYL`(h;TJu92zSPbS;`oBY@7K?+gT;$j6TqFl?FjR`G1+Mog zO7l3uK`3`Yga_uTosj!epcla#kgTEU^#g#xZN2XlwoHWhjjV-hZ;*z zRM+i(3w<=|LRZxfTp_aQYDtH9buY~|>IeQiW`;%cj8Bb)!pKszpBxM*ATU)iV*k^X zBK1Hne-kpS*i`~-uzaKxBxP-(M7aRVIeqaQR42f3nB@j@O>Y)>W#wojf@_=3IKqw$ zgF>F=Q*j9q_2tw(hv`}J)UH=G%ryz<&`5+}(X1=!3;v-=ML>FL>A@G+-zlQ5gg_zC zBs|Jw2r$K%u}mpB!yve#xAn!Va!LEV)Iy(>JGE6HYPjj8bM7`GxVgl?VG#E`dTlBn z&Ovz0A`N#E5#Pd6^<&AY1P~djq!Nz(6`6a z|9an5^SyjRKI)%oJZM0@qyoNPNpX4fKlp0AePGeDf`le7sGemPF+}Uf8ENr2MIja^Fp>uZx=FE4(GLjmbAfJzY3GNp4t#uWe(kOQ1Vv4hS8ZXLZgeOQcM!4%)s@dDE?NW;##CD!<0rXr(>ENYy#Li{Y%yhFEKV0 zZoI*i=BaRQ#gV0@@+m*2qf`>#+D4V0mCS5x$R;KG9J z+3sbO`&c6JWqLp9iCpOZ{D2KgQy)pk;<||sphDJ4lmk$1+R>~cBRmuA`o8mGD<%0Z zeL>a_PQ~perF0-hC3Xk-uvlgvsUvPGK%+kHvB*{;*ed53% zR!8kEw(q?zfFS$0v@O)+WS)F?zK`yr<70Tne1VEpW2z!ASI)lC%Xo;raZ5h&qkWv%(|3Ei)y@@ZpQPn^!<>3|CKRvPkWtq~Yc%jr< zK4leH8RwWK*Opgs`(qZ8)J?H2kFV`>p<6(euKauoH5Xw4b%&_lkJ}KDl(RN9yr4rA zNI1Wu9)CCOn5K?q4=oG0Uyg-iW0uiN^pi8qyUs0=o(%ikYft2V8R|I_Y_+Rjp${?? zoD~PNjP7uUVutq2i&w*{(1T%lGp! zcD#x20tT_ByTk{5>t_CoZWs{a%hqW#-r{^NQw@~^{Y-#^mQ5&ZGrk5EDOyhP;K;Jg z!qH&WFVdnE;ZRvPD6;_GJt`DXL?#A?RdCEu!1)p_LJ|V*j4cG6%3*T(V!@R{=~8m1 z!nIFF^DG4l--ea5y}8mWK8s9=3R|)8;r&H@H=36+f$|qM>m1$#m78IbE4&aX_Q=x} zvvb#*MZvFafu7IR2j86I6VIj3E6!;aKYUSyH%XeWe)q`x0vG3NhI2kE71X%aKL|vQ zqekX|5S2}P<%{|I+;8<8?>3bolVxC+wI0xK)YFeM*&Oa^sC?EHnwDxEZ8?<*h`xSG z#vuYtsWH$F07d<6LQC|GIj-H8c+G3lAHbX-D?K~Ml$T<@33!>UN zj8$~3j0{{boRtbS?aS=)#biy%NpFe&yk;l zeT;Ouf8&wqje|Kc1Bjf=%BBNZr_RhlS3=w_ZhzgW~rp+2t8@M95ci$IgDigq%n_n*zL?gT1eb@Xt&${+W;WRHbJiJ~6h?T#fp zqXOQZqEU}CeM(jj4EnOnUnjzW=MpjbT^tB70@}`abyOdnoL2ODmCVNpUfcWx_T^xR zc3>`g`32gI7JdvJZb$=l!Y@RZN#?!tCMPsPp$p`6J-=xUfIbY4gI_wy#q6)@TxS?> zl?O#}NCvDvYtq?b`FYCA^1vz;p=SK_E}y=`9^XL#X#_(CMAz*A_39bPS(qgWm0V4^ zZ|aY?1ZDbR<$6mA!dox)PsazP3fE*EK*HjD!ohNhu_Lp0O<_#v zq4LXn2mxG-QaLK#AMm{{IGFFKyM7~VZeB8h_6MnCUKVr~cEMM704Pwk>w8|{(yl&GjJSb%~>e(gt z9P;~v1ZRq<`_KoMpx5@{@NN4Q%r205=XGJ78!sgZFKXmnnUSD zI#RjHji3sdFK+w?@_Lj)qZ%QxswSblUkmYZBPOFjx$Bi{tMmuvaJqO8WMq;|APoOto6B>EbXhtM7f#YG@Y`(-Z^5Dn65ns)NE}&^Mb`@eaYf!_@-gR!!pH3@&Y5Z4ZYlpX?ij$$6i51Bu^cit(L=|^3 zSEm*`=J3v96x9UjSEwEfT**o1fYrrZbD5ABVdNZre!6cfuBXMGmaM|>j&#}>=Jzk2YPJW2l6b=HEwSe{#M)Q zp}XK%x#H$@Evn;=0pC%Ny6IYY+Lzuq?Oingzm^qy|sA&Wt!1=#h2*)s1+3i5dZ z9!m;nGCH2Q`{_>maaODD{Lww{Q|`LxHqoDIYOTnKO;qG%Y1&}MqQ1j7s9YMQ3p8%7 z!(=_2cFBSLfb}{ISa-Jv208p(QbSb8CpR*X0mFZH$}AvUM0yCp0>p3v0oNA4`+27n z&DjZu8jS(Rzsa~m1Z0FKp+{5+mBK0Pi^_G@*Y?1GDbZD-#|~zEt!3iarJ_Z@JEnb3 zXk3@jJzCjlmd?pXQhx*~)`U}~htMY{WfjP#0D`$;2Vs`bauu>05FJktSwbrs@pWxP zDBTv{LK8HW(CczzL@7wVUMy$Fzh*=n%J8kHFcIyR;Q3U(St2N{Xl&SSZ6$Y3FwTZ zYQF>yk>4!=3E@F#jlb{-Vv6gShi4`2tHKGbvz)4s{qUB)O-2zG$ofRxz>V!5Gn;RF zsz5Ar4Zjw&ihdgB;R!q1Bg6Vf16)h;Ak&780Vl;3(nIOXS6z;wgKI@K>F z-^8}}Wjv~Kf2PVbEK0X5$j-|#gke*PM^#uNw3u0bhKP{zE%2Z#Ym(ea``AUZbZ>to z0oZN#sh&t=P^8KLLRLU~v#706j-eX8Fg=+P$q_Vd`#Xe?VcMp)>cI*B=hh431ge&f zQUR<1qvVOgdp=SOk5)j4`@rTtojV)cj1aQIrE7dd5Ef+$AHVM>#Wcbya88g^!8NAc zqi)W~G`gP3om-`0wy~8ZK|tm#6QRL0a#BOHAH=^#oKx_!xF@f~0%TFTWU67sJ(=jU zFQYNdvwAX}WHv!BpT@C&4Kv`~_L!7}cJ0lj1lhVSisG85tJ>dLhS_+9DR2q-S7|T} z61w4F6<(7q*e?<8UXvYqEm}!FkD}QL#S-OAo=c1b*Rt{Ct?VK-fGz&XjGDOGVkN5i z8lKx?3By7M6tl3m$jP0&bT>(?l*WR;Yghk7Zy36BFd(uYL~vIB*R}c#Bdf#gS=FZ= zjg`zKJmEM~$*tzz@!4Qkg<*nVh=N&Ip*W29BJp#TSrGvR17H%Q0HZdjx<}5Zqeuji z9@u27)!XCPd|xkzE@h99NM2Joi$>^4ajN#)DbKvMCSbr4p;VB16N8jw9G7*8PI+dP ze-p$gGSg*hcoK}g#wO)FMJ)H5WawBcg)+-ZB{+QCWr*Tyvaf`G{wliul5Du7P2W4v zxca{#VRV5If~cq^c*o;dX1d+kw+w2&xiJ(%S}kDd)ECijZQihACHOzR%M;`;(@ zX_q?Q`1W_!l{k0uQ+^?_cfc5G$#pmFp(Z)Q6n0}4@6R5S+<%t-%n=ZFbF&WSTqHl5 zrD1h)Eq8LId^1m%^!<0rhA1J1?{$q*S?N^z2w{m12ln4R$|#}0UB1b2CTEbsS$8LA zz$f10N#yW^L-Y*Yuc0r3?=&S$kMEK}h674-xZUE_CHTpRJ&cizA);t31gGqq zF&1H*^`~%vYNdG$L&DxLVZS#BhJE!+nLkDbcKZa=^)U`KOUF zdw1}qUr)?WlX5K_b#$y+<~S6Y?}$ZPRXm1j4>9Z+9RedCF@B}rC?jX77S~YvGFjTveNPD(%)dWZ>1Cexi7AV*7-PdF6= z3q>R(tmMD#gbZ}1aK*O#@(PPe?NO%ZaeT7&T2AeEQ~K7ue_?az&vY+H_Jh{o}TTN)0U z+YsLMe!b=qmXYw2)NyDk8k{WHu=p!wqXY{Ez6EOGLKZhY#?=rWL2yGL=A|4#g`1ig z{S8|+jAe9Zw6l!RFOUgpb`y?SK)A}TsJ$!s=M>$Tj9llLL z*S%v>JD|J33M1_DGd82vsku^uu_g%?kJ}MJ8uKRkLcuvVVpK_Z$@9>3cep|J_eAWi zgpvpNDkZPFSGqO$9Gcb5j3HO=Gh&=CAqnS{HyOH&n1VG)6@?b5q8OR*`y&C<`G*KS zVt|8a_@Zd4ZVGfx?@`%27-c}gKQu5Hd@+2sw&C5$?5DQlFXWkc1-8uLKX%{ zc?Yg9G+&0>yDa(v-Xm@jbL`%EOGpp@6k}-~GQ7=scOk&4PH65!4rUg;RwtaN{H*=) z_kM5wa%OIjBctaJV@?IdkLPKQ*ofa~xz+MJvey#R!GWEyP=^z6tU1jGr*S*BBK=N$ zg^(pkI*JDIp;z32yLk{7_g@7D&7N-}odKy+)y5I_Y9bUd!iM_ziwW61GW{W+aVBoz zsh875O$nN0qI;s1WuwTUv4|}eEmH>F!C1?_K73m>JqojvTyLRmV3VkEqI7e-ta!vE zf{-aIJddszk&k?ALVC_8!92Q&+zJOe6YzADtB~}49p!zU9w5qZe36^_{82}uW2sl;5V zYsH9HOo}=xZHA!RU!cgFNR}Z8&jww8kis?9XegU%1YwIy5CgqZ4TB(~vioY}0Qnhp0+6&B*7eErD z3%ZFos?r?jFKr^6wat^J%y*HLOHyIUFOda!?+cuYrx>+K>U=xZC%S$a`~+@Hj`GO~ zvuG)(#^k2kkrK<~fl&vP9YelO_^HMet49npgvT3BlA%$(>6X%E0)7cOrI0)jQf5s2 zyW0@I^@iPMyJ?ro%^gi0NXUUk4vd`tmV??ixU#@=WY{}XBwr1esX{{PG_p6{W{3_5 z1VH2wQ477Hw(=t;fNyV2v?^33SIFys=@grSeC&=y3r6V+K1)AIY5*{jz0x?y`tfg!5tNK7uh$kkE9z)1_c-?~`dps~G~{#081!}WqgBqmhF)73u*H*}qt zlECDy*}N18_{>KQbm3b0R2o(+L&zSX3)T@|1hOJR zbB#La6JGaU@-cyLC}Uy-uW24eU6tjUNQZGotDJcqrH}BVqPk}OOj`YC{5O~}QGH1M zPS=4tJP^0)-xY7Fbd=1#AhMP|+M80mNKpWXq7|6>1B9x^h1tdl1KJtpH>@Ef^A~UA z-NmT+$qZe-uq5x!V1chb85(UMe$MRaGhP#wi?xlhk%B^y#hQRCQjF zGnxiwe3^{em$N@57?r@m*owZgR}v?b&iEK|ymywJw33TexLN?+2H5DElD6`ifEd#F z*}Csum6X0e;$v&<*SaL@3U77vtUsDLrd-%Ni5gG@XmD57MTDSTvR_&j^I7Fw@bXnV6}_YB|G?iHc6HBKr9}>*0^jL* zru2I~9Bb>_itW#*P}w&O2FXzVBA9In_c)u` z0P~Lm?yD4+hw(HGNO3TX-|#jl`s((0zclbpv68$H&|`|}v=7JdApvQw*K>Q0(-6rF zGR|iip=6Db&8@#2OC+yquKjjBZ(|G&pxNQl?4V8j$=a1YGo~n7P^jZQmy6J#q5Z`g z<%u*`_hFhvwyBb?mn=`Y8e(m={vE4m`?l2+iS6fHA%8Zbw7{QoX@p0V&5aaKB>uJ& z7S|;bkJbuLO{NC}!yf*`>dm)t%Zhdpdvugcm>OS_^<;s2J39c5Z(7Mv|HcgYTTv|Y zZ;>m^=-cs(pfG6ko197-;0<4b+G)cpbBLE1fK2*lbr5!bm7&{#={SAxHD<4T6J*(B5DDU3R-zv}2R zT>CP>+rkg>@>QQ?NJ-T=`UUq0q>PnKJnEQ%7hdL^=RgifiuR%F^$}OFsMCbHhEruv zt`8+NQDq}4p-I7=!&w$tqjBI!pUQp4&(nD6H_s@)d54!jW9f4V$Gh&6d^bR-27T=7 zI?@Nk0Qx}Z%`}3d?fP z93(vem&L{-AX)UzUz~X_rDMQG7YG3&jO933mcz0gg|rZ&ii#cdsPDO!$vQ$|8gR5F zhCtTm3n0rw+8f11l+Jq67p4uv(KMGbzIFj>Eq(=%%;6lR+-*}5dK9z z{QRpe&=z`}|K)Tr_kxl|VNqks9b657wA&)W^MCO46;M?@U%0eLgLFuVbW2`RO5q36 z-6)*`7m)5Q1u5z74(SGw?oO4ulytwj{@;6Rxmd`YnKNgf9pB#jn|leOF%A>{JEeU2 z0h8e^34^UtN?5Fb$3#&l#fn=}XP6e!vYQr9&J`N#>m+@Axo-J{_WWVs!lao&C2|-z z32A07#!Dp_{<84#8NuVlsSb0#y#KJxeuh#a5Fy7$q4z5J2n;`T_?3izDhn4dvq+?1 zL`f$iX}M4vAkkOKcRkQEzW16+b+%+P9dSUc&g{m^ye)8ySId|1sgUH(JzDot`;M-t z{SX?KyhrXb8<3NzrnBh`{I60dlB~+Nn8^1?bIY*g*@<^7y`S8G7thJbp;WQ<`*w!% z?mw3Q;5F;yGAhH`YHP@5u0&equ$_5%-<6>9h?pf$cMhxM)0=a@Z%o2WqNyW$5x_06VZ6qV!)@Nt9R!1LpN zgBr1MfEb}Jij%p#Z9qaWEIlSdS~TGIA-wAS><9i|!wWXT55^PtzotC_i5hI*FyMl) zzHo~Uc##tSaymawTqoIcn!;Z_fN320tsNycuU_z8%OSKFzb46c@VI9BhrjgYLE(DO zHWLHK#~T6>8%`!~eL(rM!mfZFiJV;jsU$7WQ8#{ZLvU51cko)4i4Po2^2vHGaRS%Vje<42@Q3KRxOMOq(qBd?mb=2+C!0gt75WhrF8`7f zBxDR7h7*z}$?o{7UCZH-d`na%Cm3X{Z}~hGSF{xz-5L_4)S1x>JJUGsP|Whds>xu+ ze)@tMrO+&w$7jpM;vIN4;WDP%8i7|6c9Ed88iK;G5HR&&SDMgNHago#j>n%|f%Qya z7yS&W=sRe*tPg^8`bY|;4_fIY+=7R#X6vfVf3nqay zf{1nca6W_gFNE<<4;SFC<}$A`^-){Ob2>ADAc95=4-iSEuMz(*ozypb3)f*|m5=3I zr2e_sz`{6+g}EE(a8fBE4gknDg^4K#3-82cybH^ zK8~F%|2mNP8^xQC#vMtHGP<}$Sp7t-<>%xN6xff481f*Z(a#oPuX7W~QN)=J0ePYK zc_;Y!^0@z{KycmPEWJQd6z0CpjAFL*BFXh=I9D|rZQ@J(j=0~K0p{YZ#%}c+Q>0)b zmYM2tKw?MdPZ(d>6$h@Tumk!|Hs=aKspgfmqdxA`KuCb1@tAt55+U`m=D&vICi2K+ zO-z=;5DD9A7Ne-`Zv|$tV{!}N`%bcBNG4qpm?Lntzx?FpsM!^qFGj_1>ASYcYj2K= zSMvhp)`z`NMtT)5gu=FzP^$9kVZ*l=?Vng)u@GSQLDDyo8(R-JVxa+gGO301DehvQ zZLN(RYFrUVr_)vNKNJZX+y{j54~JUNr}&8~7GYh!*nYbtsm|j)#OBq$_k~?WKO-N~EYNO9!jtm9p-K4bwJd&^#AOR6pTt z6qPH20Qs>5XReZOzX)_f5R^O*f_k>?5k(9{VjsTey{D>JFuH&(6veE8pKlobrXnQ& zdmBBH!McfV5faT56u(l78@+cG4Ss@z=KIR}dpQ!^1Iit7w2R@Y3A#yaLA?Q4fR7fA zP62!(ELI`t^rpp;kWu#IRa;cNRx^7CI?lGdPTo}Tq-3slQp0cbOCVuBT_uJ0ITpnP z0}a#dcu|ZI7cu8b*0ZXYiZ|+}uanP&>06&`^Y+LpSFgjQa)o`i{%!7A#V`HttsW7< zm`F51UfbSM>3~{`f1}S_!QCxQCt#xwKj`;g{Xh}qt;P>W=vw&S=4vM%RiNT6A7B0O z2z8JdA2Qsb_#C>O$$djyP=7XbjA}{S)q>a`;Ckzm(_EtCfGYfMK%1Pb=sj;TQKEzF z`(93GKXXf#pid^@jS&@=W*A=?OTE^~1eeZPF+`9bTl-}jI}Y81sH6?K)o0L})-e9t zI`N7*#`$eOS#svmswJe*R`~CEshCctj6z@n_rk_a>x8rTdab0 zyc&66B~>YOt4P#udQOQ*mLMIJt{5Fq)j3)q%k7uml*@w^{F20^vcUO;tfcX}&4}n& zJT7k4rBXad4k1ljS{j{No7M1Nh7uMU9mbTqZ|9IAVqB>Vsa>Gm-@YK)4faxKsezlSjL6!xyEgcBJ-1@@ua8${sIlxB8+?U3%!<) z{!*_Z(Y6e8b}^fmDOi)VTQMdWIA)*l^l_PT3C=>sEX?5IIV!UIeJSqayKil<*MRRQ z_2_VpA5E8wJ@43iuz0`pK0|@jkPqANuhHb9P)cHi*018Qt`9}x#F2OCUB}JQ4|d?$ z?ytF1*x$L`b$SceZ$P5rWuUIe0V8G;l(eMEjGOt5gG_i>{~q!f|Go;lcqxl0sAMGUr z9hJ)X1Q|>GMF+12)uhXdpF09E)0ajg+iB42dK1;@?)0()#_9XG~i!`?&2( zxb&`96c4NQ{HE=RiGR9clxZj93(E;sBJG8K)@pn!u{!63LQE872RmqnLgND16dqP4 zNB?}q;pE<(Vt${suw1+f9;u)WFK->tD1D-jx?(B2bf$Vjg_Hp}WH)^-F?6{!Tvxx% zEu>}bR4|Z`U8>aR1?q}WoIWalKMXzc%9BAfUY{Eo9M8cq#=Gf%A0WmuTGIEdW_shc zdsM}k5Fum^%~*NFm1nCSne-zAs2-|6^GQEc8?eBZ^jT|zHZC_j4y;wXXlYYukDBeJ2wz3JfeT;5y+F2{y_H}H{@{~I?y7t*T#ESACJ zR^9I)9aJdr7txptaby%dO4v_Q9e=Hb*Y^0xdQ~NpWuPi~ES?zE&tHHaA{7ZnO?eMo zENNa;c!&8laVf{PUq*)=-+9RzPa|My_S~)NrE;JZIV!`f>{z-heqJRUlh z{L+}|G&YUAD z1AN23itIzYjLJ^v5dz8Qs%ouNj)~?MHgia`$frNNDC%2dJ6RH127W=eZiD>Lvl-2} zDt2(JtxtwK>yWqh-Dd=|ybnG^9nlC_4XfMNwg@3x*DIj2bRh27>ZYP%@J%|h^}Iaw zFxxk#jtK$l+riEECng(GQm_kof!TipDPLWD&KEEh3{#5g?_{XL3-IZXTXeoVde%Bk5=rh!}XJ^9yvj zq*+~0-i{0vH>Wi~KI_a24NV>(1aGwo@L_Z!LDI-cGh@wD3i!SwC_f(tN}#Mzqg4y?+w4^J zOHYG>yYW%5M1X%|!*$ePk>~a`H!CJGN|H`k4U#Q;8RhR?q^_*sb{(>K6*(@Z93l3~ zMfwk$8=78cu3g(KLJ(6f^xDmGus5_G8w9HCl2??>mz@rTuRiPQ}pY}*#lzm1N|A(*F52Y z#ccxSaL*=NHa)m8sj$s88ZB`~>;Mc9@_HkA1b%z>^Ta&8JJojYRC_~{FE2jM^;8#6 zn3mQ_;%AIbp#~y;Eby@SwF|;mh$zhEkj0QOEjXQMnEemfBYcgquZ5Vs0oS&nvfQ24 zSs%N?S-V{F?7EERL2NeWI_~4oq?JwY%6bCAWKG5mwLt(ovboyn{3w1PqTS2(oR_k< zr(3LhAm|kN#c5Z!8hoT((h8*n();xe4q5OpS3T8oNhQ=}QtO9GukY??-bP+i1_SX_ z6}Pot!o^dr037Vs+~#ii3LN8hjMC@Df5N)_rio7fO^4Y6-Loyo8@4PsS6j(sur}F# z6CKdiskh`6LjKlOe{Rf}tLoWp`5RUMzF$C}!0*(b}jHJxmS@O=miJqyR421FVp( zC-zh9E}Ng@G%f~R6FaSsgaWwc7yiMm>VI%cg6Za(%4qoqzH9_t$c$IaG!qS$S9RN^ zaxRXEaz5UXfopUvX{p6Z?H|M3fd}|(uRbqeFa1E~*(zA>YP`{Bm*I2vnfhhTAaW3d z_`xHG7n&J}ti#Ux{br_p|Uv@R^}3#8LGq!jnUzQXaX>y;ScdyH@x*q`$TYX%DaME1(6VaNTO+kaG zN<)=HbF2|O8UKw>@(K-z7%jerGdny8(W>z>*=eP_uGKm`qbQ;j&1lK^)4J1V_Hwc}#A)f}``4GT0nb7&C z)-(sGYMNnkkB@=DtpjfBm0j9G!z@C`;5)F4c;xw7c+kJOs4M z&HAM0rqhU6UfjeCKU>zzF$le-<^Pbtfg1vrNa+HZ>94OB4NUo@Lc?s!T$+h1j5zb% z@QljOpA`U8IBb=X87>rQ{S#J#!Q?Z-@{|XO%TFoD4LntQx89R~A=~I)l`k=Gg>_C{ zdp%n20ie3${Hj_R*)FYrF|$*tr4Z?Rv&-A{6EoUWpmoi|@L&lCbRZY2QVXmtkQ>LI z@fD6ChG&X!NL}iSX7n%V@WV{p56Xoq5d8g18;NdDPbbpG@jubR_tvElb2RAEEJnmH zahmHK+}B)3i=WZR+gpTBnuqqzJb4U++)ghRBc|$vxW~?PZQIxUOx>r@5OO}GK(?-h z(XW-^0~NPu4jdtstWJbEobm-4PZje(+B0ObsE5n9haR$I$AuVP7vj@CX891xgp8#1MoFno|8WrvM7y~#>WOFEs9u5}$^ESPcR*&Jg$ zh$xP!r%r~qEz^({mk_IU9UXprHuoGIZ4{b5M#I+XiV}!1J>}KjG_W#ZW1#ayrGHiC zxkr$3l|s}t2&X|HY2k}Ngq2+y8Yj~QvCZX!`5>jpsGucXE+r_nz=a2%bgLO}%EOYf z7gN?^a@i9~%JXWp*j+RP3jeSo(^D(d{Ggb~gvz2D{i|)JcO>BMvv<7HJDh#!m0N<0F<&WQ|Ka>i8Z@ih z#C56wfupKfMxMJr*}_wR^<)gpC#L=w%|V=U{zF-)5t zUSPo4d+s5W5;P^~({=)`&)UAW_woDoT8v|nL;15Y#E>mC^giCayX`d3VM zv~j%<9amCKL31|Bs;%%}ubJkok8TznZn3Pp>mHY>Kv9I~?VioEYGZ-cHXjC4?r$?| zI{R zPEr%9vegY#_Dhm!G{bSRYEqhJR~AD)NJMC&ID0@h{tP0?i(y-G;_(n3=W-M7ZxaXG=_z{s#Nm6`&Bt{LC|my2hI7jjf>q5{+E~UGCKmGTCG~wAUK=R6YQ@GPj??BA zL52}2mEn)ZB2}j?beoH`f00~!BkeB3PK-HyF9Q1AffYb1<|<#Yh2avs!Fb643-)uYFAIZeGhPU8ake6t6u_llPgm0zZ~D*@fz+ zMBYR?kc+6A;}t&UJTj*x9WnBJv4=rm?w|c;s`sumg58pW#7`k<5vT{*FnwP$?z=t` z9lS9&R^(W1Zl@KOR||fqlmYaH-gNW0W%ev!wvGl%g^==};u343Sckfh!np-Msqq1G ziz4k%sU6n{2P_fHXDH6u96x4vZmuYnEV0Ly$XI6A@d_Bu)>(-nH_Yc!T6hJM_3g|v zOY82?iB5=%&@-0J1=P!KJFlzhn@!d2NQyDYJ7!j5V|ffIS~jk~N56r!6>EQ{L6B&_ z>KCHPfwtQv+Q}XwjX_yN!pU&-rhR;(%hGyRbRI4t9Tfn#|V;I17|J-v5m1Uak#CP}+j1Z$;s*UA_W%z+K zG3QH($3*bOJfTBWg$a>Aw0^g}&Cx^?}lQKz!vQ zp{(-Lr*+9I1*Y)PaDezFDxRo*2QrQ`=7N{GTg{W{hdI#D9*h<{x@Z zsf~)Y5g3Qd4aF^D0-O!nKkX4~#;UXVJzK8Qp<}}Hw46E z(`p2z;~R5}UQ;T;6XMRNAIxXQD{ZICgd2_4r>mpojI@iik(HKx4l=G#z5%s{gxZ%8 zZ_N=Ivdu9b*JxYFT|HHl-9F#XE!Li75cb);^53G!HGt~!N6uDX&M3Z$8GBhvarLyq z?K~h)p~|`3lzSOA$weWv@Pg=QPl5XOP&U+Ew+~6S>m+qXWqZ|x@FiD!^;%W zEiq!|{_v~APFabTd=C%t*Qh?vrssB7H#hB#8beK}n(^tW8X3f!ju5+(6c< z^$O?)h0vx4b(nUUKMN)9w_0>6^>}2$%q3z$7de^b)E*MDKKvr2oUK*@uZAd7N2XOj z7NFg#eI+YaHe-_nU4hg`__i<5_8cj^k7>9>I1E8jIafJG9Qhlewsc@ZbpCi*Q2uWw zZd;;$6f8;`c3NWEXw-6qKmT35nsU^-RV7X4H?J$}P2)gm#nfZ`jLOmk6ER3Hbi7Ai z{zkxl9`P=LX6}P=>bl|cq?_;%IcP`(Uqs)*oD$S$r@J)1ij zz!fU`!T{MEV%Ge5YHiO*SAfJ=)*3N?a%bLu+sG-+7MiA4j4YR@A*Xja##sQ(G2u@) zIn(Hg*>=mV%%>8P$ept=AkP1)YL{wvwY5^VIvT%~!56j0MpTg+M;HigKF(x$XY@@3bD7Z)uM-olkqCwf={DHFU6J6b7DYCD>>uh4AHL~9 z^6kP;o7t9#oKb}Tu7tXtj~O@3*$@@$wy~Kt0R#Kn2N*ll5C($L73N6sr;YR|)nH)@ z{U6{PRNSHBx6iLIE9PJ#k))6gylOv_D&1Q@e)awG7M{DcV3H_lHe=Geb{#4@Xt0Up zmq=~N?QaLf!g*gVN!}gNi5{#%H^(=G6V#7H|MqWCtr<9fPFxphY7-Qz7< zsrxGZ>ppUdEdbOv$MyzzY$CRu4``vNRg0Jsh_W>Nj>OteZeo7F*UR5xZ1dKKhYr7KQ z3_P^bw1_?g=vRWG1LeXJPrC{GTo3Q}+d>3eX(OY~jam!eANm8*y7n?rXF1jDdfU+d zo(xs_vt?X_ubUrFo4XciZ=3IwhY<}|l)7^?guC`#?@=sC5dVu9O=O!TU&zcGi?y-1 zGM7d^&oqY7Vdyp_kEt*Xeh6}rS1?lXNVJGX?>8`?<|q;)=M}F%xku;V z6G~~oPFHz`xEM+4VaN~nRcEO_a&@Vexdms4I{lL>wT#>>=^^#}FT}t1zlKl1fW;K` z1BvmHw5#b7GAW?Uyxb~W->G|zS-N%5Q9 z7Ye%B9SY!3-r4K52efy|f3RB9$b7@(y|`FG91tId>K&LSpcSoL7V#;GuHkW+wyi`= zk%elD=wmh}{?a<>yGZRS!6vI(Vd=73!PUS%6N=r>x(tT==$5M(&q;pHz3C0;>w1@# z9>bd$#SMT6E*B3Ag7PlHWqeYb!A4!2)(|eBZ%B6TQ%iM ztRMQ4M@WKs&_Ch+$pqcxL$>xBBbKz~5Hs3Nt!*p{nXP}=#{wYkkF9Q&p{n1%8H8RR{c&X#i4)ax zKYY^*Wf^z~=Ccl+^LXeMuBU&J{BEMm?5=sjJ&=YCMk!+|d9eOz1e1>7HezujXa1Xk zXtFU<1-aVo6NAV3J^Xqp7dJx-iux`0_DJnQ=r0ghf+P9Z7~5n6}(=eRznGH9jm~_uJhFN_;+^^i%z#ceJkrwrIDjG zb&I=uP$eQ4sDe!)P&1=0@_H#jSHmvd3i{`#8Y_~01j-^GeA|mE8;+<(?0!81d%v)` z^gCg-mcy~&i<3~%W!P7rtx&fOI;hGNuQaLz4sPgVwVG-Gmom-q87oA~4fW1NwO!vr zj-^3TECxe3W=;e^PcsN5V;_m;y~zx&Y6>SspUj|OH`K2ORFa4=ao}&4FmhvbeEvr2 zr}Igk{|>-TRa8g*K)7=Y*ep*pUTiJ4jB3p^HdZ_-M)Pju@v7kQgPF}7^)TM zcXv;>!o3OYd>sl_#^f5PH#h}>IM%fx3<(-B&ZHqyFYL7ZhH~syqDXrS+Jt#tR&V44 z`RG1_AlN_Aon>#{0)Wf+T#UYTsAJEc@4!5lajqhd^_O}uNcRh5R$Hn*=9vJkG94Kj zuTnaQ^L@*DuFK3?RHYd`z;f{2pEu*uf4oZeV4Ocu>^L~2&(ZDsPSS-{crT5G3y(;~ z3VuDZwRn4FfeGSo_oL~UttT;@!=HaoqwP*GJX^dWPRRpGi6aOPo}@ruB%zcTpQ<&~_SPxB0w5a#X0vITHb< z^*^b{YhU^gGX@CGyw2iXrU)_oA*fC)!8~-HIyW+xe8xLJixXDx) z;wj^3Hojp4RVpc{L8>XWnZm8Rz1%R4E6KLTMVpnjgy7InJ&-*AzMitO7GliseF^!8 zUf6gdrKSKj<_n;$H$)(Z8Ozsv&CT#RXL-&PD!0&U45iV0MI9zs#tRwNuRw843z^cJ zNeqT*OTVHw59Pc7ZH)ydk+rR=%48~lsx&KG_FV{H3Xkf2cqS0le`=)NYZAR6xi>bn zbn)b5UNP3yM#Mby#fuR`nMex$Ee}?D9GhVrB3zT-TESGnmAmR?AfXHhs&163W@6`@ zw9dpU+79CsZ`3u<_<;AeXjW7SC8R6FLTbM1mL(@1#)+A0uL|oGuI)KcItljXyrRUH zT7c5rd&kFlJ~M3#2J5>v4x(c83LqZj$^|9>w1ZX zp_eHI-_|YzYaEqGrH~DZsSz!ttoS<@0*(4JC;U+TpEYm%W8$ceAfL_FmigZgoOl_L zR=D;5GIM6dQ+w1)LY<+#-n=F6Gm(U?H`!TB^|aGL(Jf4^KkT$Gcrup~$Ix1Hls*49 z+&{7h^bS_FrUdD7Trd5$89}<-UsdItX99`ea`Z0%OSm8P;)E5~sS#JJYa%_h@Ju`+ z$A^@$ZU<-KLjVjY^&tvHU6*pmHn&I`yh})z)HL|^M_7Q$a^CLjzO@>DjazA@lQxcV zA?Aok3X6%WafwHV~Ro`qJ^e>zn^w z@cvw*`y&G6npHjYL3SU(PJ3P`yytyhw{s-{RHWm!6O2kMJQZiWWyhGxygPC4n-qAJ zI_6B-f5O2!3t-mi_fdvFj+#HIg^ds{YT~Ru>JJ~jNGdY>`>I91QpY={r=sh37UTY;h&tbKOJXA>Jrefm?j6V>xFhL{(c?-&jo(0vn$q(KLdOuk5`vkvubI1UO%TusAZPJl4Vu1*ZIm6#8$v z10)G-?a@UgX^TP7f3vCRyn09MZ+LXpiS2S$4Q*L_zX|9+%_#OF%}b^-;C`DGY$g7+ zt^}IV;q#+Qg6-8WO}n;^qxtY75&f)L@b`|9t7W)TwKq0gVqUSiQ|X^J6QcM9rWk>b z;cC2OZ^%6Q>AQ<{rL72(o`AWo)6|)46D`Bg!@en;Z;3>kpLMmIfB0%C4)lDd0_l{n zpm{CND;TR`=scvX0*a|aM*0RbW%N3Dh8};(iK1nT-!L>`{YO;n=>8yLW-|NhpuJ|K z(OOI+cB6k6gr#Ff1S31yjG7X`E%@`qE-$XlT4XPx7F6@$Qnlhv)$0dQ8rLk7ICldR`9O$f=NN-gnEoW z{_73D4@^(;9pvl`zKZ$wNjPz#0=Y|`U3LmwqSKw_c-(Kk{k=XiT`?`7dqWfRtsN<{ zXK4ULi{chsfH;dYA=sW#(a83jG!XgVopt{2=esvl zsP0mHp*@PPKBh=w5x?#31Kn*)Mhn>KLMMgp)6v5@&3yMVe%XG5t*kvPjgYkn*~jDZ z*lDItioaWS{8F~di1X&WI2{i(mVF%KAC(pEtrMxU`Du*DN>!!oKnb32uPB-_>*Wv? z;ihFUPIp_h+ohwJoHbz)cHsw5F0vK2?lIi@MSLWPfP;qrcfUQhS^Cq-s+@IQEjP{) z=wra5aEqcZR&(7A1?rO*inAby3bDj3`S|)$6OwRZ2jZNug<5W&!(BFMhVCAJ(MzLr zd^mk;PWg-sPFc}K1FZ}O?_8*B1#>SJAp}yRTP9DR5t6$EC(W$$!1)XQ6uyoM6nH7^ zEE9$$e`Gt|h1tnOqGS7~uFy07O?N~#GnDkx{piRQKD}urapIgQ`ht2smPdnc=v}Ml$>&Kd!}oM@!&oYs^9wiyNZ}_FDP#k<%Liu_ z2KOaX3H5{Gk&R-ixyI(leHXKUwaAN%CpcX+nQKpo=QbZ;c>s7F@KMJGP-YiPCez}> zkPlHpr>W1Z=a|u`cb&f7F{75`Q77)RaexyBTmErd%=e4Umik9UrHJ$U^wzkD-c`Qs z8eF%YTfo{uJ+jp$L{8Sx^Z2f85XW+?g+CBd?7liWo+H~A7bsepo*og8d?tY?K5H=6 z9GQ$%mneWR7?G!-JLyG9qTC%}qM(S(w zk-o)UUQSBUP%nRl&7%0kgb!WxE<#q7kQ7UP4i?o}{O?BQ+!w&`HyvVHbpjv7?NujMdc~k3ruLk5xk+|+0x{O!Qj zF%o1ZT1bseK5~FkZ2c>ya}RN~fyQ)n#*-STH=DbS=TWxo3Pdd$CQS50>p|f>aNG>e zk6Cmg@@y{HV53C-HUno)VKFTSQyEl$lj(zom1Y(A13y5EM4n)WJ9{a|P4{Es!**LFKhCmWMf?Bbk|Y6W=Jmu zr0$n}uB3^2Rf}^YyrtKa;VO>I?l!fcmE3WDYNol!lI^$4If)%i*^)d0y5mW&7dv#w zOwU&PnBEY=>dx7Wt7g?0D@%V+TB-OkHCe++uYpX2+yiu#zf?B@h?#QUZUJp%;=#ZR z?pZOn2vd2YGWaqtokKD{^>@}#nL0PS;q99!B#u-|m|xdfecV6cFQ=U>u{CeXjM*X!Mz zG%iPB&d-kF*DIGfJWcn6LPl=#OkeV(Q6^bvQ=w=XmlY5_xi+_QZB(%0`aNg7bi!Ou zyb_r>#4h4V4D5UFwRv8`I@S7J6p}b>ewDz!m zlC;d&jyp5Alc@+Fkf^^uLHjow0iqG0?xw22#A2v3vdzSWp@ae$)PUt%E+P(%)4nV( zeiEm1{1-FzejFm_ui{5{WnIgIL|-m4M`e&jJFoNPK-UJ-vk_yBU$tlIHV;7xRCYhS zQF$UY*qdG#ktm<&QcALI)U&kr&5@o@#9^DgY=Pml_N|H|wU{vJYo(VkFK3GYWW@uu zl9m}|j@26`4h*g!%omGZvifdr5|q*Ko=r18{M=7V{9G9ZZqfz5KK% zxlD4tU1$6%lU64B!SS{}w=m7qFrVp3)fa_LEqnzC9{2!vFQvWa52|CTXC8@g!jo8~ zY69}~>Q0htmd?s5(j{G=sJ4jWm8IC23BE;(7o4{>vh5l_h6qCuYw+9K=+@EID4)-Y zfr$*rz*#l3siip&&G#P$#HIQYZ=GoJ5;@-tD9p2)JJZQn8!I`amxBC6_3XO*?ZgSP zK%;S?sk991%*3uzkPKf3@#2JS2J0@Mc$}8;!CIkqD-X?6UVBT^SZdK9v^8Qc-%d8r z^N#8EPNk+;6r23vV{5*5?HEbmm!1Cn8_Lb_>CBA%b34_7M@-}uSc46$VLfqB30crd z+7=*2_e8EZ&FC@t%|7AM$Qp4~gYJQ8KX0mS9iXOqX}k?;c%wI%`v%)wZN_8e^u9n$@yF1f8DMF}kqbiMEUho(5IiRnT@v4qon&ViZA}-}LzEtxowc zW6_%#c}S#6OO0`Z;K?^O`7ZM-TU&7KWM%ii^pQB^vmEpYLqlI-NKv29`Kp{P8h4jY zRJ#B-27gZ>gcO8m(2rLcd*0>$(lh@HweJxE3H# zZ|Yl}txElyJrC$@q&R{Rg8P8Pib|wwz12 zk#d!c90!S4btq*Q%$&?6mq>n3rq;`yf&&Bp=39vY$LcL<HHd~lNQ2FY8jZF)?}Xb{m72_s); z&s}?&!>AS%Vq_$Z)~!b%^gMfKsF%0FZu0cAGy53qFsWZ~?pqzx4knzUr8~Wg>Hf~j zLgTVKSbmbFRQDAbbJ=qba3FH_e*}UP0;d4YQ)M_p z=>C+?9f__3GA3Y4msR@x8B(#^C)8v%2IU>q+$_%HS#v-FUz~e>hN{`Tfz&nx{n4-H z*jn`wD66->0v{_-7VoY(f>Oq=>4MPrCnjc>4NPzP5WkgW0Ev~tDZ@(OwYr90by$Xc z6!;RRZP;!vr1Rf4z$Wck+XX3PrqdgknTSTl1+2Zj_A^3<^_7zu6xbWPif;hUHd%y2 z^&XO{+Rge>G{?N(qdJ)o!_G}J>Iss(htbGM02>gsu3WNw6n*;;PM>Q0p4WKo(=um% zLKc0D$w7+&hbIRAh<^xvDI7RjhnCAokGis{^mj;{{|0^jHwgLtM_=f0r{3C&+E<4D z3Q1T`8}L}?G0FhZ6j}QR#4bj|<(bF#d_eza#<)Q;YV(nSi}gzmX{XXIC*R-=FY8M~ zswM}K;KGgzAhsEEi#IBdA)~Ru**=?Az&zH07i}fJX^*8}Xs!f0{;| zRj0-h?`%&t=5Rp=5RJdeILSJCD)6r9?O7)D2W4WgW;uP^UtTux|4~kmT#b8Z02|o4 zHY6F}#S}s~n~J7>{hzX@L24L0yOlN?|4ji79bq(eTNHAFgA=!*Ra2?V2Dz4+_;KZb z0TDZuV+Ru+ACQ3s|2y1N@uBi(hd%m~bi?&@nat z_GCE!)62iIemCkS7{@41He#%3{JnTO9;SfzS!N{r-w-wTPbs)p0c4iY5YqbS$%g^l z?X$#4p6MC&gQUie%)njh5z~rKhl6`v|chYikFLH z)QR>6!gnyOA+5A>ko1*$0-Q5!@0|G;5Zbez(H)dcHRi0Bs<<2t@3qDD0;{b^vIDnt zy$SI4oGm|H0n1yR#DDv__%cM{rdE5w}yx6%#72B-p^p zK%CZ$?~Ta913#7be@$EPBq2|k*XF$J;-b%@ZUQeOb5xMW`WV%B%7b%l15?N^1*s`O zxw%teWR1nBc7qV`Qe&dXy(ERVY%P3u$;gD}ON!7%E7287)9+-Z+*gOfz-U)Km&pgt zf=ER3sY7Jy9FByN+!2`)&mLM42a5#GS2qC-k9D<)fxVz;Pp)<$ER1JS9x=^N2{^5* zb?@KN3fu&APuA5^5%nYd#+JwQc@6UupV6@Um(PrYc%YZ?I!f4ElG`*aUY{nG^GS_`OH*%KUgqw(5eeurASGy|-v$j)eTc?lEf8WqO<4Brx(?*r)w4{Fd8G)m-f`Z28D?boO zjIqyWICC2DJ-Rw>MAE3)Sup-~*PleiGfQi)=+fz14rp(-f7;G1Vj9F0saG^dS7GEF zr0fq+_vT{QM&)Oc)V=z{1m+;U16qUU`ZwSw!jw{B`I1bHdF^KxV1gjr)M$N7dnsin2 z-N0QyM+CVI@aiAP-v94lA?z&r(Q!29ObgNyY#uX?c_RvJllY&&{!z=bR=A@c(a?18 zOl)stPsvPFq&Ptnz%YAu0#j%`RL%C1avGoiZ+~gHcPob-S8$=gpugdI`9YhU_Vf$q z$E|_6LtakDr_3KGPwf1qpnF28Bj}Ojp8&u7asfOXr7?f-S8})B?#bHHH0Z&p98^|& zdL0vfJYu0c$Bz?mF_vDwrC^pA+`O_2G8~6_JcNMR?(Gg+kWaKvs#NK!ab6w#!p|a( zV$m{M&_qhbvx$_U+&=(aMwM z!ZQ}RB>ZL(SRx9grc;ZDSaXf5>cRmhhRjVX%cOVb%53Qi1KBE92v><-z}Yv!&w2~O z_zb=(gxs$%dj1Wwf#GwatJV0H=r)wCoZ#imZ*>$0J-(pLk#dN9*kG8y%M(y8b_?#4 z>1J?}Q`nRFEo@5cuBzUv5@L&@kjbvy{Mdhx*`vKs)!bU~X?5c%HK*poue@e^Y9F49 z5|vB*7UntMkxJ6zBVV7#!pHLta76a{{AO*hYwYo6uH)`D)A!!jS5v#BPfe^l{i%3< z`s43RpGrpGYw*4Cr(+!tzaJkmeQz5duc#kyz`yOsC;$IT>0iZ2VsuMj$y5@2L?{gl z8{h3u#FX55Dw_rk5Pq6cw6km1cldA{`RG&rmPg1)39aqDxC^2d`hzA$@(0fAx0>2K znu_I4S!Q+q&i)kV&mF(d(~;s@jdI-B2%uXyCEflPZYsw=K`!^@3hQy@>s@x1$`9R# zsJ~PJq-qyCxnfxn-(@a#-<%V)e3kw+LIU3wGJ>)KG72~&fq;&HfIy3Y`1|*G4=Mrz z2N?pwGw>I8TTU0t4|X5^_mi8$-Od)Kqu@XxfY(m4<4bd~`ljZ*Dr(TbJanaBDM0&e zJbk^w0na7}$%_wijfS4g$~5fY>!SH<%W?l*Zd^Gs&mwP)}BuC?F2GS5uA8)UTKOj|Ep;8A?C zL(>zF{0rQPVX}E9c&ZE0cXHQ&s@Jkr(l?{O1p^aaSB7ZIy^7d1P}B>Szm;@=V*#r# z9K6V+hOzdt%U)q?%t9vI1IF=SRfw&Er;^`!ectxE(J4ly6Rxj=@s=*Us9;km0x{;} z67lIv9{uAY}+R9uo2$t}d|ac8cjOR326T|r2g_3yw+rvd4vZ)jxNcb-{%76ovGKO1g4XXda{ zf)Rt?s6JP+w>)%niQ0>uc51k#!F~${eZbjB#Jr#7yf;)rXNle*y*p!eAs6knuSw=6 z4{UA<|1wHP)*l-p`6P76G3c`_x|}t?PuG~tdt8M;&bSGbOz10g9VY) z2YJK$@YvW_>TvjqCs@n<+ysN*gX5iCt`@}yCp#m(#na45mYq=cleza*R)?F5<)iHq zWz_eNk7`+3hr_#&ed-`1(0qM#Vy8hn*GTrY&0smwFdSKbjYsd6=qgcpR<$ZYpbFd3lpKMng1q$yIy+~Pn zE5#;TWMa11_|h%jKUsL5dnlE14-3OMXn1)FwLf74w@npVXjW(G4%o~J1oW;-Z!ODq zW=|0QZQEwd{$!cunEKaWe=bn#G38^-zt1?}Cok@^%>~xR%m%1NFs`pe%n*T!5qc@y z`~BuV_k1;Q4O}cPkr6Pq8PA7U{Y;DA$q5I9+=**Y)luYhSScNFdp#|Q|FDr_m&{~*zTq1I#<;sF4#`oZ^d9@%2<=G{1WgR^qgi&XcF`~MyRVammmPiee zlWK}uOSjb!^)l|glAV&l8C&y)kQiC%rDR`$Jlwk9{yeVQye#(8+gG8thN!b{r97>HZCrOXfVmJm;_-)+(_okHhVFMAk~!p9|r+cNva@4dHC zb`U4m^+}<(w==8GTdBUMU2YZT#N0W|Y;DTM3}LzmQQrdELE2$VLrzb^VD5^Xe5@8NsjQ>Cowb^#}E1sWCeY*^?uy@`FX|7>-?v3GgA z^e0E73NIzQ+YVp+J4}*VFuknEL9R&w_1#5%s!j+;CF`V3?bYnPy!M6|XIY=gH zL^8D0N>-nl@qQxi0tC)dVKar)UBNE+_EA{-?5an&d2a{d|T<3NkQ2Kpk z?Y05b)uD=PJ**B$1YBnZjqoR_&tb}R$ArlKd(7t&f9A*g2LRAT7y@YiiTNnBuZtb( zG}>1f_Q#G0ftql@Zktko3oO7`*SY8Cjw3j{)fDi!4RAKD3b!E! z_oePq`(Xcq-@4BHJVy5T(_$8zWWW@8EVcxjkw~$lEgN0ZXYl&twbyO}q7K2jh)37S zjS?^WK%Ea|{rADx{?w5u@j_Cf&XnW$!1#!%ne69$l`bkeoC&A8&7qYLw^bKF15WrZ*M`0BYg1%**59LSFc~7xi_-VJ3r#F1S~C zuFHGR0#vA8(#IEAu82426@{s8z>bC`V&z^+z-=tYga&7#Br-4U&5s|BqdiiA107k~ z+3w1`4(Iz>w3u=RSfX4$1E-dYU+1Gbl17>nbSwiPi=2kLS3d8`dMQremqy zF-r$xtQbL_X;e+ZqRec%Ms|-6la$FvvM3LTTvQEw2J@}ExCiCmg85jnHPk1hAeAJ8 z^`fRJlxJ``0fjc$wB0-;QhPw~ncuyMG*YPkE5VD9L;wKOf4m6}L)zKuqmhoT4u3n9 zZM?8nyF5q*170UQOxczONC|J^V^6>VsnqP! zPGXMVFJ&x1;qOFuR(TiPrT&z^$XxyH?&8LtyLUC9bFKu90QbQjQbRET_US5x0v@z6 zs@~<|EHtEVw*I`QFtO7QP2u*& zWaao=U=wooZi-yG&E~zo$>H3WZD;RwsdqSa_>NxcGvJ6{Rps+b=P!`x!wFL6&yKD%NI^ax zINtAu1%elX4e6_$A14Y|#g2w&%W>7R-(Bd5{o za$=4~sv7s3zJLCrl85yB@z-xV`x~2k*CET36*msbk3Mj8!y4o}ckbB?dc;4|gowj0 zS~A-(Z*aA?-*WFAob`ev$+f)hQ$M`@*Hp&9{#*bIKkZ|oc~q)s99DOeDM=65&G*F< zw-N*?#s?!bwA2^uVN2}GtP z5Sj63BHMVP&~AwTa`^|B3lc1#?Lti9Uw|h{-Ts+k7W={qBUg}q9!L%^q8b^vT7|}BP|3Ozc0gbzF+{# zQcxK!Y#SU~e*;IehXOA=bs?e~(1b?ckRu=e(E8@>l_rTA&j2w@#X-PK-jH9aqLc;& z;qIo&5eCg^$X<`xg-NS~$Dg>oyy|XhTGsWo%v>3SN}_>&2;)hyXd&hICNYW(hF7C% zND`7krbG9WCM%}7({IJ{k(8x0?<1PFD)P-@M`}HbY{8N9gtw??Rs!Aq^%uAiy_Qu|lPk2hC?X<#7hbQ(ES3OCHz9jsd>90o$tB1IsaR! ziDb#EB!p7s2xXlA1zbn*H~61|e>U;27qR6Os=*or090lZ16Y5tb3mxfe=Y(Ax3fc| z1pnUro!vWIm9q)KABNOo{xv;#*1*}>`4jvovLPPT{_$2xlE8oR&te7WQtO9KT)v zOUM6U4*un@S0pH@baP>a9mw5=_g_pc!~vzCUXpSxAPxUO`R};(F$MG#3!fP&fg0qm zkz@nf{BH;67er#V`$6YFAQe&ggu-+UUX@{~*DfBYEDWwG&s-{2dhk4_&Zf@OWfgpw zJlo!~lsA>+K?j!To=qM}*8oR3w8_y4iYUW~Mbm?HVM;oSrk7O+Q&Q@Cm0=$m1#-6& zM>7LvQi`{*#Uq3icPG+``rS;eW~+Sr?LlW(#?dIZqB%li)pf}^NQ7U3D{pCpMD)?Pb=6C?*t zAzb*%c-wP&Il0=IIyu?>mbVHu=N${UfPO|c51q%t2#Fy;4YhiuTD?*|_>CLk6%RrO;C5LMui&tR=h|*`p!?20ksWkmzOcot&8@1#8Gfv%0^jS zi%7FBh0#(e$vybOz4=RWu^YOhlN_}J<=##TnEt8J@b?Q%p+ly~a^&^#eR;!RB7(3IMUkzwq5 zW|sQsBf*Tj(21{ap?s^E8Sxe#;DYYzw z96k9f^U+Iv$ksb0n(HxBXt2~(*8UN81Ia20yn(7DP7qn)O&agx_`Z!!cdj5tcZS6f z!L}&><&f3GFI%XIj^A)UO&ZSyAXvErxn-c4`{t^WeNCuB;yicxnbT6OC4>V(u#b%` zS!Dq;bq%S5E886{B)$$f!KKC4Cp5>>m1f_u?|`jy4Q}C=Tn01KsPW(Gbn#Em5Byzg z6oYDUugkWd-VoK3e$In9GAXUNmaSuhFNoe>+ao)AygmLz1&hfLhHWS42vXabJ$7UY zDVb9=VklI$x)Ci%kOXNMv~kgAi&tm`eyNJCd^MIEQ8Q4rvaEl^T~DZ?YkuQi5aI|b zx-)T-xD_Kat;?sGGe$d`p+u4)UZpJ;K+#uKjoNQ`NEsK0yZ%4P5hRwBdIG=m2~H4l z02%_E9RHg{{z{QQ5()xb-@z&NpFJwnl%PFaz&6bLa4xS*Pa?cocTU<}%^h5{fjZ`S z1`x0R=@JFYCxaK$P);PLFrS0rKFgV~+>n0d=Tu zE$})-eYY~WuCb9OgW2-uL-W)5bCjH5AL{WFGIV(nY#+e*=2sBwWv9$J+HvcxrIOEx zU1z~H)=$cEC{-DssBf4%O?ba7bpUgM+t2*;7R`edcd45}=FjuTY(u99mTLojQ%mrj z{-?|2YK%|w!OsEr*Z=@2{E2_XQ#Wf13wJlp-zV@n?9Vh?Bq zh^M8gT~fZNA!mrgQA6olCtWkcf;?2Xc@npRGlFm;MZQ=i)$1w)Fgy<(Eei)*eB&W}ieNA(iPg zPm&(nnG_``0FjKQI40hi7P^b$D<$UCnU7h=v9IHtuvRo=O* zFeMp1i1IAsV94m%P{de}yU_y^mNH#$cC*7WQF5y?{s@YeYp9YDdL}m4s}>FaWs9Ku zo_oHah&`ZD_|TkDonbQN6Z>)u!g7pLgpC|^!bzk&R$H7bOgb_+F;^^a zb4Zt_Q1IWIAVRDnTSdfqlsb#zL>1Xm2T^FaP=en=U6@I_83I8HUkN zQJnlf@PH_8-POeEiTlwYC)mxdPWw%!xZSo{^F;vaGC-8**@bJ4E zCQa=*26GXjEbD>vJ3b`)kKA3 zR0>U;+|YK`4X4F|nR$^;O(~RQI^lWU**+vSY8)3 zeTH65a$zFjK^|(BG0j@o+e=Z{i_9juPSos`(#5J!T@w9aGPt_3Eq_I-YufGrKOy;L zavv-F;pC19S6~G@YUdC5#DUs*44*hrI}v$%Vimij>p?Y|ukjgdDGNHJD_?)fd>vA3 z`BDTD<6(VG6T;LmBeruGc-Pc&;%#|-IxrMAa`%)ZORi*hf*T`l&|mVKZ2bai9^Xv+ z=CQVQCCbOS@msoU5F>cA{sXvgYTEnE&+YH5TWryEGjk~plg9YdB*WaVet`5|RLIBuKvKc^gp1o-z z-w@p&1ctg~3Ub?nWn#ZZ&RO&raL5hDI?A}RspeYio~q?GQbjf(;OC~E&NL~F7fakr zg|8{->bl!AqFmSFH1ymF9*~VVR~rPRak)!`6pAsd_U=Yh+=*e1NL>Q zpDk(jMv5d;>VsPEjTv&j7YmOToImfH0kmt4tY8vKcZ*CwqVQCvbbfGj;x=s}yl^so zF-}-&^X!>mh}^-lISteFm%}HWp^To)Nl<78XF^_Xx-BxbC26gt%zo)#4SwEqsX(fEG3JwJMXdu?{w_tD8v^s4J^s?2S*xbN}MXwFSg zoD$|6L;tJO#tjuC|Ff-wCDEe}0c0w|6~7GN8^^?_b$tY5!=$j}EUca@&r>tScaH^8 z=BOqNh=e=l)xY>Q@w>!$sYrm15S$dL1Z(&EO!G^^Plg3u0)?|a@{<@MegE2uLA|IS=h$x3qTTRQ=P>=%PD^-#J5{LoWgF@~Ok1wVzyE&F4t z&I7U-3-3!}N@wW(o;V}g)YxP)ET@*LSUK05Wxjh=GMuim!|u9F3j%SSpe-?e;a(IN&YV`Hy;ZU)^Q}66SC0l6(}8l4vh{Uw?J(2Vy`frB;XeKq;0bv2yvEcIf8Xdu ze&Zqi0yvInNcO8mXnVz2XF$7DPSOyGQ7TChY1wK10l$H_YcYebG}*ki`ZGuQ$#AG( zbeQN1NOy2L)drF-araE?otJZbhb1n)zMr&aEA=YY%gabIC|!DDEd5|ph|mOECPErz zfdlLXhC^$*)Xqz>8ck`_`tEQ~pCZBVk%6>Q2#?!A^mrtLvz8@m`2noLwCKsWeU&W{ zT?TVptgTyeXU$-0NjK|vxo(V~h0X1IKFevA`Pi;XGC+zezfV_r zQTvt!Cjaq8dT4x~?8{=2URh*EC8hJnP49Z;WjyN%z74lta2RG_PhfIxQHrI+vavHT zLdQ*5t*6V+0HK0*$aJKcD|QJ%GewSU+)>N^EE-*5cclaNT^=jL#o}zN&a9?;?S&uI zQF%a9#3?n{*e6W52q_t$rGBHz*E*aE2ozgRpx#09N8L*d$lu02*vVq#N+L%%D$<03 zNc~Xe946ZH)fEu=hd1B4m;E1?<&MTFG~IC#Nj?PH2|GBP^s|rnOb~GnVU1LorSuAN zHa?NDO1EEOc)P)qW~8M{N42@0yujq;ucqxJDeq{7qW}qB+Xlol#g8Hzry{9=(|nkLons$1OEmacH%UbW|=5CNODC)t%k;& zWH8}PyLyD?@yDSAb0HAHb7U6_%U-HDq^|2vDEz0hRJo*53mS>7Sft;NF5Ln)$RH8! zi6<(1zV9u?$mvm`jtS1nP$*_3IlMUDKku4n zYC0MbUJx?spJ?22AGO)_aa*r-b3Gbf*tm**r}wSKqh|6fjXdGpJ97Knn*S?lUz&hj zFNvY=A%LNgV5KWK>cF{M$mq{Qi3}79;?m6deG7YvbR9 zv75V(y@lIvYPe2o*l|(<*iLtZQ{L8cFHf1!?>Pmj*C=fyezOD9VPrk;({+ke?}@?u z(f`yrm{&@w6{|!9A-*E;}y!AZY^`TwZe#&n^X`<>ypmFskR%gbkBgSsIv`(AORvNwFwd zQkH1>=a`oqqdt*HUVK#A_PH02ZL&lN*pfzoI?JGFAYzPx(AVrAhQ7c}WTyyzV0nN;yPo<@@&>zhGLcV$6ukzIy(`e6R^ zAj=RvZRJO+J20{r;dU#TH1GEA_s@rLojAk;?mPlUpVWfK!J9?s^E*osLUW+kiawcHFXcq zhz^C-VG^&v<5}^c2_bsV9X#tW&`|rT!bD{n#u1>aYUhY8bp_h38*w{SW zJ^FLN_37%J9qB#=-iTH-1w(bbi1A3d1Hn|{;&@t{fv@N{;fY(2$38(`mt}6%_uZAc0VsiLclS+e&KKJ$%USE@ zy~A76B&)G5rhQP+K7-tapJEs&i;|nKl;=)--;2{cwG!M6RVKggbRWy147K^TLbZ5u zex|?VwC@5HqoiP9vT}86XTSScB>y;QDo+X*(vz$k86`6d zR3G9YRcgEe4eMnceX-YNuv>r*zZ>vJcKOebvpX49CWw;h(`W+5D=3fnf>Z6R{V~>@ zB-O3HeQh4_Ra9u*r!!bBu2Sk?mMn=;L$@zi3rm5@LnQh&lWW%i)$~7h7R@roOuGoA z$dt-hGHA2X>xldwN8S~e#R_N_Oi{Bu;awEQqo~#pd^t|;wG?xmxw2^E4vBbT_q>{s z9JSz{QIi};_-NFuW*(zu6c$q%GCBV?k+7xm(q5cAtF+GBkDLm^a5`{OvY@&pO#Bqr z0?Oh~qFIrVnWm168lB43*}4YWAM1fJd8s<5F9#zDFX5=G8-2Kp>cT)QH&mRB%~~mW zfb2ewjH&WoBCJfM(W5+T>>1as`-tP(dpX1qvmh&(_?zIMT)%OPmVt{Y69XfQ-7*I_mq&AqZ{DxI;R&~{MGx(3Hc_uY4 zxFwsBeSU<>hRUShoHr{eI9x&PCf5W^|NU8_009Rp5gxaHz?}&XUgT+x_=+pQA*~ zO4lF*^rz#*SmZsaB%;M=Ll8yxVhKG2m>azfnz~=z2Q9p4Y&{7DrEcaz))Ag}YCBS* zeUY``cSy0pxv$kfB&kDP5Kc9fq+iin@u^k1t04+@$4OvJkW=zY`F_N-1DhrR*9?=Dt`t82C z)+lF(eR36&wlR6hu>0-ZRm088r8fVhm~i`*3;YJ3;%1jNt9ZM0<22&IPudmzR_O1Q zOKQw6DtHlYUs9-qfmgK~nxwmR33EU=3NnvBg(^Ih2?f0x!Be~PDiMK%3rylg7SPz= zNcQ2*O@4rOu};{F5)EaYk>F^)aTlNd+*6_n>|TdN$hAD38%I9^l=uogBp?0OuJ~t2 zY_Ib8kOKE)6u8y^{?(IBoSpyc$nYim*T_ofRHopD7a)_p!;=qsD0D%DJ~2S%A7f?l z_)WNrvprok+UMrUr#dgU^6;HH-ZV0+Q5Sq{p|#I_zi7EmeRqF5zwO)Nsq>n9b{UhK z>L=|}Cn=k|TA)Bw`6_Qb7||#glM1t@n||bM9F;FB4<<*f4kH#LGL_L#DO9u!wUeVu z5oOhku%mHYRSPStMS0(8KfNiRy>?aF!=A@kBT{t{mhY7XIsII0!NqR$$zazOWqLcm z>K&hiFZ6CIgH)}A>86!$Gl?=Xa%SZcUq(P=ho|y?|7yt}d-uouZ(cM}h5p^Z-<#ln0DqfP;RN|hOZ->h zuZ_V!p{?+m(=TnpU%`KGocsv|0A}Ix|Nn2J{A%adYWkm+u(1B`NBpC<{;QQ=3uS*= z@dEyC<=3*=uLgcSyZmVY4BxlEon(H6{;JUaguW#IU+AxT?NA literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/ReelBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/ReelBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..385740a7ae945ceff2b9cc025a4f9d4322e34406 GIT binary patch literal 11355 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 QiK77Iz}|jM^YhdH11lOfFaQ7m literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49abd74cf4cc942f322910187473ee138df2d7e4 GIT binary patch literal 12378 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/Test/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..501fb170b2cf8630259c1f306afaa9674eb74f36 GIT binary patch literal 11976 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 R0RXRlzCdIxr2TpJ{{U=j`xyWL literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/Test/Settings.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/Test/Settings.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..569e89b38308698dcf58a539e7c8cc9ea5c570a5 GIT binary patch literal 10205 zcmeHNbyQSq_Z}LgyM`2mQMwVOJEXh2h8()PC5Do25D*DT=@yWdkQxD%6hun;H+t{) z>E*lM|G%}qduFXOXVyB;UT5}sp1t?G_p73SgiHiL1)u`}06M_)XXQ(d2mnAT3IIR| zKu6SP|94tjMLQ;N&WZ+9n5-?=WeCf}GT2Ub{hFa~`!>gAwR8xpn9nt5DF z{h&*(x;|@e*Zg;3ZV`&h!XrNR_!@b;)!8!U%j$hx>x2|bctO5bf&PA96gyue=lFnaYY7tw+)CO z>07FLr@?TJgj9wgDkas|2oAD+Hyh7uzWGn>YPN-1DvFYd>^%gi#+27v>ubFiQtmp% zp;O~ldLiFjZOajfBhbZ7krH2&f78<~SkAo&3dE7lO}`EoTR5~_B@{%x=}X#NK^PxD zR7kRn2Lh)D07mDh)|2LAPowfz)QWN11-g{KNC4denI_SSpTs-+5T8^nSfvMt(cZ&` zjV`!vbyC^h$u{(`*@#1QuV^wb`*s4ps8Wm+9G7rEf(!BH1__|@7nu?obyy<8WeS6< z5ECv_V^>Qsgq`ij`5$@y4{P$bzy1QMq=3YU7qK65L-)2_Xz@P%6qsFVQ_12AfivUE zgg+y(`1RGPw3u5#BehR?t70^j_CDS{S$E{#ANc}_= z0i#eE<>?=jMHhk~6$*cEJ8R?PSE{xh@o^d|x%(ioRB|j)_j}@d@$Ez2Lal-lhVGhx z;jO6Q3wm=TY9_s_yv=?4Ni{WT#_&v}oX=;w0x0!u#ZnN$z@-dnzYUHyF5EI5NA{t@ zQ_kAQ=40C9`~+hwb?0y|{HJ6<;Is5HxLkNq0RUY19bRB|PbXJs_J;18Z>E4~zN&=gof-NsFDDuoJ7_frIQx2P)fYke6*nF0VG1DjWj;ihm7AZ{ zXD>Fkx$v*K8GHsqM60jxycN|_U0P%(VXc&%k&n!y-$toGOKf_vUhf9pc+{%-2&&s{ zAq4S&hO1bUX*qbTQ8=wDEC^U2C75QWm88KS-n$t?k0}ryNew}c?kOu{gV%;b|>zf<2Q$FT56ta5HpItZT{e)9!g)GKjcN1dXF2ywAy7* z-~N05*Fie0$-R3VIR=`}6{)HaU(^XPiF1YkASxM6iHUz^XaZdW(r9i=H4qyN|c4)m_6+>d1a-sXl68*c*XOQka$}OK_mcZm5O?g^nJaZZHCKd%%(nh;} z95kwrTNOYJgCO4R0aaX-tM+Ur3O<#K2c{WmeRcMXtg;RYSCw@Ywbc+5`jhLLvKV_* zCo~4+)h<~ZaVslv@Sdh#vCT8Zybs4)gW;KV?xV6@AzYkPc)g`f;=0`Jp_`>nA7!63 z+|YzDy!&)F2*~p&>-fSCV3@Nj$zQt=dhGR`kRVVYw*X6J7knWlnK@82}y0gX}oQF~l%p1{Lq`Lbo z0*d!@schQ97RNmgTTQKf-4R-iJjUM-1M5FDuAB#tC|0R`Tt^RC06J+m90XhQDXUhJ zHg%T>UUYw_M;pM8U!t>F;Z&H!FEZ`jL=}c%%fyB7r)aP0=h`A1k{CXj4tl^H) zsj~JdZBzsI>r))!IN6#iHg>-8dHW~I7OkT6Gn6T`Agf<;zcu4(vhPWp!5_sO)DV7H!mZEF2zhlM zE5U#Jy!HXlsK|+{*3CBN-$g?*+&tz7aMqZh0RUuhO8glOAvTtlZV>jLUz|U}Vs^5j z(;_WV#6Hs(5!yX-Fn=`3gC{c$6=|)ud2`4#gUlw6XpJ*ZV4htrY9LMGnK}fd{li@I z_>EJvsy8?A1E>|y2}M#dr|ur_Ia;p8Dx;i`yk8glhTO1Jsof~K>C0| zpr<`GaPiXQZ8R#6XY^Knf9itH=;MwBUPum#kyMfvi}EyR+MuzXiRgqRqTC+zVJNC9 zV)hgdGsZU###;wLQi|1g&RiUAq{Ju^l6+ANy(TM2u~B82tE%-Y;n3JM)K2)@Ej~OFR@Sin4qj|-7^%A(K9kM@~MkrRS{+HYr}h!z=;C9#%hA-W9fsBQKbjq9$M8KhQ+#CX zkA~8N@CJ0t@BHico}n+km(M7&O!!UqaJ2tbA@`W zKw1)Nkt5L2gj|YHAeLoR8GYjzrN8UjCs9Umm8x-99i$ttklSI2ABH3`PC_jxuwfH% z$`re3N+++eW8YuFU;oVw{QckDq)biT38f_pTGdWE1aMa^huw)alFY8Dmi40PKBq+yL%Pcm+luh)@NFj z8m~eN`BW`i!+YMdZ#VzAKAt1(eSfciWd9rTzaN$-UhGbfD3(+;fh*uaOw`2IKq{u# zCWdsDN615rjOUwM4*h%A7qK@1RdQT{#!pb&EkxW9w9&7%?mV+(Ka+NZ z4~7I&9#cEF%+r(M+K#cE+w-GayQE(zMw`j-O;X4tf5*C6PP;6~R~^#3j{8OxLZ*JQ zStOhv(;{`UC3{TJnkM;il=SZecAxI%9W7j7bpKsoTz?2`F=mkiUZ!FCqZM4}q$Te< zDrT23uq?N#`7~>NbYY>_eOa8%?0*^$W}-x|H+@=_#Cq*yRSY}aD4Mju9ec1yl)?mJ zoRHP8uu`AchZ#vLr+lZ)RI^zW6;uAOb-1=3dDi{9su}@NOne4; zj|J{7dCbKZ^Rm*<%2zsX=ckZmbUIS(^y!(yWQ6gdK&lmT;dMyn-i6Y=qT*L8T6AJu zJN6w8fdf{GZ!otSZ(2G0dVsr{kGl9ZPCB69k9vkzOx8VnsM%_o4cTDjb@`pss}!am zU1ViI3B5DNk!+t!dI;kU@zFHJL=OCTOTnD`mxmJF-NvJG_3H}@4hCNRJRpKcHi?sD zk|y)L1odp2t`YIqGn_6lq8@ZcZQt)$cIs%C zq4(tY`W=f5zkRDmWS=b4QHJ&#OxYo?%f`jrP%bC}TfH_5%yS<-rWf7wtFe01hi1#( zle{HKhK7IB1n}%6Gyx({4_aL2u_TLyx!_qoTCHtboYI+_HU257KXe7v$LXQPlWG#z z2}&U`#%5G~k1j^gSph0uSoTy2}ui9mXkiuf{10AqyYDnx!h9J*Jw&lo$XK< z+1cV8s*^odUJJX`FTB%`qby>2(-Rwc@tk5vnla<54l*V=#3s0yrnmu4Cqrs2)~QyB zdw;4T=awKzmo$$MechBG>)B$s$@jpGF3Z9zToDqbw9fP?JNxd;r*oOqD-u(9J^W_~ z`2Vk}jeD1ZlkgSsL-HT(sh?@f&BoHflKtoTXU5vqRdAx@$Lk>74Aj|ePqNrCB~L=q zPiT(LL9T_;%h;taSoRsR$qvUmO1W;Ahz8ehmWVn%CXzzp5e+puH^*YInWmYf^K4Mi z)5wlQDwZmaO}iL%7T~^&kTC4{Mq9AL`8lMfeuJNF#viu~0aK3R_)=(n(ptZRi9udM zQa8r;8WHnmc&seXKzfmD0OLedn0WE|#-N(jVnZgn30brPOE0J`iz}BFBjHg+I4~z@ zC2W>&``Ck3jN!PQh%x`3EBn5T9_pKdiPyKanaqK6_9Bl!Ej&8#U__h!`um~gwkbEcmH+9-{%NN1&YSb< zJQ|_;eODgNRdcAx>T(y;ibGl#VuL5x_iI>ZMxTImA5@fc)8jey@I2y*4()c&7t_UX zPr&?W%H%2pdCB5-rjX@iWa5~2%#rsf%)8$e~KOg z^%ys;%9`5ygj&nbtTAfQ^x0-x<(}Y(T66bP^x8`wS;R5qEct!vgA+WL*A|NRwCFX( zFBpQGSqxCcpR>Y%E5|2f?o~cP2@VWkOi8MN1kQ#fFXB-~d4v0d%mt;rxQTIw($uV8 zCTkJm;>C9rGx)J;@z^r5fV1|RB;g3{4dw<~~R)%h$ zhTzd8D@3=|f_2@|yg1rJ+O^==zuz<0nl0ctdQF~Y6nTN`dI%Vu)+cN1wR1R^9i=IM ze*;rLeBJJM5N6=QF#&O3nJwG5__FFN&-@sQ8G{=p9Ekb+(JDHsyLo_#w zF{?peQrdw)vN0YxO+Rz!D_@BwXcDuAOwY)(pj=hlol=s#$ts~BZ`U_HZ5v=7jlhiL zNYOfq>ZW0rO;U?^N6!l33XN)^Y1z|O1*DYSEHYC?E6Um}j>1>KFy^*l^!7T;+QOY0 zGlg>F2s`rrDPj{na$*4rZ|D5&vns2V5sB$AW*p7zZ;b)uhQ!&JPmdm2t8pW3JJ+gO zh!StTtaJbJ?cMe_4d17-`qE@uR+Og2rg7p17G>UNE=jd}T67I>)nDrDMGVJ{&0a(` z&?j*(iK-`qY_@ZbE>Em5_nHt>jxRw+dtbSSXg$LoPSI0zqv+6jcdWu9bh+3*0-^;x zoA2dhV-wJGo-)h%bm#?SVDroX3mxpi06M>#0ry}nVV-r`O^?I_w-_Ybh-I?LbWREY zRvsk$u!RSyv_kBqI}6r z4|y2*%|-GR88LA`!y)jcTs@DB$fwv@O&p+2OIHBfomB=kl#`swy|WTM?=jlZ3M;)A zg%zb)iZJ6O{udQ7&n-2dEWdWZBc5|lH$aQtenGIIu{_6&9$`CUk!Cx*rb(fdZ5X#u zYWN|z>#L;iQ`j)Y>QUdKRzRXqRzrm-%Xq2}<)#Sx+Z)pPkHU$A07usijhM^569fZT zR{?t`CY!B9?B3(GU+B2`W~@A zxTTQ}6t#|yo`{G7MO>aDuq0fS$+yvdGHJ;FSWbHxZTW~t$|nwo@x4~!Q92mxD%;`B z?PNtnH5XEZJwvR{HE^92iJzJ=oMABV{fp*y9A^bqlHjWR6q%E4ctUbId*Luxu-!n_ z4o~#W{ecJO!{s|#?_=($QI$jG1wbhzeO+4Y%N6fZKBoFJG*f!5yde&gTcTH#I$@^` z+1zp8vXD>dt3g?R3#Md=ljM7BEMGDdf;6*01I3!TmPLC$E5!8lIGCoJtLnbyv%6jH znyNK%!o@-^Ol(6qvO$+T3?gprAB=Vz0_dkEX54yT_z6VcVN?p|YDl{`fJAGj&e5K> z-LCirpLuCnzHl4W0Ua$iVVPl=NSlH@5r=C|hXKF7-R1Q7aJgxJw2F9=n0ZAQh*ecJ z+1d&svw%?;jud}7Z$>o_OW(mXwmb0k^n@y3-CPD3)1-I1QNT+^n zRT&VCW>Ot{qbAo=rPoTjjMy{8ypi7642Mpr(Le=x92D6 zOqex0H9-?SyD?QY+&u_9T|f&+NM7iaE@nBK<&)7q88?|S%W-Z@326+Hll0K9SIb-u zy1VE`o~`~&j>8*!#D^rS>h-1?s@yinMLE)6I;m=#?54T>>g*Gtn_oI{y$-kIGe1eB zuD3g(6}hbU&1I~LPFFCavZg~`w6rYH41BK%P=Yj)bYIU>Hma5eM;(~@o5qgQ=+e~l zkrHE}e3!8wHM?8|pV)DUC?Hwyjt-1Di%M7%jD3D0@F-_=W2+CdZ91X7`zo$>+0QzE z>~gh!jbq836imAIshebdrL+WAPc^Xz$wR)o&v5jZiOQ>k8<J!~k3BEoq&Ej~D0)xUlVgBi{dS8Un{lyq|YVi(r*|@rf=SZ@|+tRWsDUUTBUK?`kdI*1w(ulcy?KyhH zA}Ao+k>y=qazwB)MPo$K@`y|<2do&I1(yDau4}pZ0BKio{~F87Z?1f>lQp;SDx#{o zd+5*wU0>O8#{iOMc`kJY4=(@NJzhH{aFK=kO&jhve0ZnL!pU64)yWycZtmo2`6Kke z$1eXg*x-cngQ~*GLlh1tkHnB~Rx#wE#A0yrV?i8nC|vb6M4!xZ_+y2S2p7+xAsQF;&vcq6S&3_d$F}_G@}ey z(H0V_#UR)UJIo*ycc}y;exWMG=oc}<)oKx;d}#SmqeLXLW*W5jj8%#qXD{>tn)x)3 z9QT%4*dyp=DJ!_6G2dn;+=ae&c=)4;+mFT8a4^qE*sjbV~YeIduw&rxh`8N zm<>0nQMm4K>d>6OXnR7Eki~dkO}vb=<>`={gmv5sr})ZZ0qK>)i;ny!MK_G4{H#eU zPH)0cY#vhLj|UZw_@5ESIKh4RpY+3gR8N!$rynt#oOr*}&(zuZANIjr_UDle9hdJF z#T(cU*~dF^?+9jsNp}xALrs*9X}z*C z_SZ+)U)_yQgJfyo6&|pex3;G+eyAURnq>v%5{3y{$Vq;3wQLWKtD>#D+tSV$(VdPr zA*#sS(;qjAH-fOCI&SjPEWtuXezn(tuEBKJUzH5I%!vK-hs4wAqo7`b?oWyPDLbOG z_i*lCI@#>GkCHkKR6>JF1lSbp>&4F%ye-|nPLe*$X64oCZY`vJjlU_y(F`sBu&fnV zU*{~|U8lkq@&ShAf>2?!ppt=C^4wV^SegcEvuEqzpSDzi&iiEGK5?9@tWHCfL*_yn zeyCrdw~w#?cP~GZ>?4oa6hr$azKc2-+4FgxSp-%zjI1#8P?9xwP7Q<`L`O2cC6W!- zf_*K+Hr~w=7thY-EG4||1gF^*0np&J2AyA(8-!V!o0zstTc_IZF&=6CsL4)Za)zt= zo6bj_;pYIyg$L=aXzgz7B~4%6BHwgapJDtRi{-NwSnk7Fi~|p%@XaN^1yOg1o0G#o zME)0z0f6G9@gHGy5I((?7<#Of$+!4$A^sZqApgTsd-0Z*4HQ~DO?SO-wF#td+x+sl zWA#vYpYeTL%%qU311h6B-gh!D1Fjit*SwGo2PEw-?#5I@q5DJX&TFXPy2Y%Is+H09 zLeA@gVLTuK9ib|GuH7yvdp}Zz^dtG$+1Fb8N!u5}2lBPL&bIj7UcvL=7X;4d1HsBG z=QcMnyF@~Z8OtX;g3BytA$e^^^92gs`cfkmh0ny*1{txORk{S?(($S}?xBFP1gc@d z{5dp)ABMD=XZG``fsI)ite;JHJq(17CSMM2_3Px|D`H?p?K^IwxsfL#8}=d_0)wjr4V1y7?{7OTZUb*mn14YR;61im^XA*&zmD>LK>>i5a4r4! z!QO2f+nK*3;uUPh4YI{(Y{-vj#j9|LQBIXi0`dwRKNF|_9!P`|{i@xI}) z0RsVPfdBy^{Z&lY#)i(t(jq-}R1%aCE#S)cgu!5?00WsaIXJ5?pwD;Ob@bt>JBL=R z$LTe25>0}tCxpi4{7z(uh`lVgKrwJSpQzq!TL_?ursZn!=T~J~B&K~Gkd(*SNV}_H z!J%u_QeF*4g!Ds2pa%KCKM9*EIP*5r?AF?J&9Nuws@74wQz0!#Cqg;CAs#h1S4>;M zsp+c@_{!Tp^dh61VkYGLB2z^_G6H6nDANa`5qvbk_o=mNBDrt!Z^>rh%Nu|xhsPTe zqpk`ocRqB*t+dtKu{D>DR=;WRA-(jI5g3RG_vlV0f^~T>tCZK_tsaQb*po~{n`~Z` zN^OD7X6An9rh~Wx3AEw~cLV=-knaH_C&JGl3qOO5{8y0mt?dk7Q1*yfk?di>>N^2n z$=+<2`TEcm&;XjC$$_LS-wHd_SU#6W6yoFtPSA;YF7lrI_<0 z=s}6-PB0mmNR|i*b=%OSP*ZTF+$Q&I>}*8fo1?C5S6kN@=pJGHwPjX_vdT^opFBKN zGBNcN_@22CT8iV?)d>L&Hf39a3MW5!OnP@vc7Q=Bx(i*?&NWc@D8Dd|LMX7QmgN#~ zUZsr+v zOZyXe9RNV+L7ryE_e_dS75rK!VdGa(CetjQxCq#f<;DsQ(8*PuJcAUiLy^$$hBtP% z8#Ju67mnE5lHL9BXYpCHvlg>UF7lf9dwh1DrNu0#tGJraYSPJd+fIGvb*)!Jy`Xm+y@AwiAG&|ft9R}O&A3$6+k z-dVAz#oHj`AD1lPULJ;{(}}MMkk-+!0l?IC4sS$?#>g3G7_r0OYX;|X=`+K{hRvKx zK;tn0HW7XfLFPt3Y^_dHZ=Y({u(@0Ayc_82Z$`iC$7CoXyhHJnwBBBu1wc-{%Tw2>Fus9o$Jd`rY*?$+z! z=Js^c4e#9nH?68n<0JXeJ$;L|*Z1=>kCVuFJ4B{$OEY|S%iKY_iFl?7PQd0S@Pirk zO2cc$Zcr@+`KEM`N`_dYMk7^{Vek&*$cEF zxXE*OO}%886^J7G0UpCh;MzLz0bO;3vtdV|zXT~?bIcB}qTE&ayGRaoU&+_Yhi}~c z>kwpD%JJY&@l$wU@)bYNJqXTaFb(PzbkTy#1c&3^52#+mo_$-f+=RI|=~*J9&kEJs zYx{KE`1s*0O}H15Kk#02qMiAeXDsE!VH{QM6Vm;zTMqOxmK$bF$CkPmSKBr2oV^K3Bd%Qde+`3zQB4bhNd}?4LCgo4}M4N~+ zUb%g1gV`}Vz$|oJKWd8hoIe%-!h^DX+4KR?onDnx!sB;Z37&)IQDE=7B!jmy0W92| z$ut>yiCfr^VrC2)(>iBZUp{08H)kUS%w^w`8$osz_LoV1#g%|Gdv? zs%F`b2NX4MiCY$T7MOsocy4#o6=5VTWUdkmt~Mye`SiRs)v~*Gu!4Af1WHegG!c0c z3)#0w9(zLiLts}y%}tV$S(Fz}%)PdMKAf^;GZS2-L4BH9FWI&t6C)$f*jL~%K21o7 zTm((qvWO58M%6yGn&{mK%P;{F|EKHjn~)C~tCh(C#89a?K;xpBJCyL&!auZYO81b;ZYL3jwu&0{ndgM5w{}BUo~A%Z zyqOJ!&KWc}P;MoYG-?bExX>hGO^^SqEGgZ=@}AlVRclc%(mz{^X=FfufP)sF+99bX z1C2?Y0cz^=v_p(dJ@q#er;_iQx$%Czxbjxu%#G`;%+7kLP#GBFN z`~>`Wq9+VDfX{oTENyISf*mq;ELsBL^lMzXreE zI5GO|Xu$!67YdLt%sv-U1h`{#!P z>QTX6b=R5V!5d7^HOgzh(#Z%z7~)gDL4Q+M6oW(bDFL4r8&~s`N7?{SNcM*M(rHr} zpRuWVY)@*3f}b`Ghr(BMIjS;X9d9R}f`(`G?_u&ZaXkKM8cH=kZjFqXv1Oe|+D2$URy z6kdzhOrHE;XORC17jPo@)d5E$L75m~9qJZa{bg3%U z6~Xcg{mQ)Ui@-HH#*kd%1z6pykRXALUTWR7(h7iwn7xk3qtKlav_ zMSUH5yYvGzqhcGgC+#pZ_G5hc7rr`#sEr5z$pZ#la)&2!n-*(_I+SlXdZS*hk?p8CGYZyH9QfogEYA+ct4-z`Pf z)0Cl)Wf&K)xo)(}o(^x?n9B%?Ul8Uy5!jqyFOye{i^x^^mXiNKrE}eNEe2~PKVr5M zf+?=k6HINvAHt^%Yhp`vKDosF?=i{C8_aV|;$UKEY53|5hVv6F;tcrn!;k$t()&Z~ zm+-GZ<49G?8kY^J9dp-<@N!wD<{~(J(5F0TsbAJtTq1^~Uh0Txoeq=KP^?kQjZ%(~ z_9NwlI--aV&{1*XV=9>CEeYplg>s&7AL4a1Mm4?GFC$ zEYCs=!q@=r9MwhmjL4wOCHQDX_ArJG>^%rrV!u1cOiw$+lT!aYFdq-HD_b`4_~9#O zCj+P+mE|>#q1C1MFf?ixv>&phr{LEz-^Z-VXXYgsM?vD(&=z@9WKG2E%TgV~Uepe!a8)1~|sB*&wRKRNMcbWCpMClO@D2S-6ZdLEj0^c$6 zb`-_jCzOw;{qE>dYpF~9@rsq5fc2u%k1ea)OCOZ)%_U(d!m>AvyFKWNNu9GBJft;0 zczeB%^(?|&M8mU`|D;8OPsLkxx3(=a>cRM0RQlE_3%G@r{GaGBCD|o(Jbm%TX6ohn z*Wj2!KqiDep+@4gc1(RlinfT%oXBYDU)kk9;!gIlD10IK)d{Kf5gY<8SwacROnpUPEDpcAcgyMIa|5%_+#g8v4>R+ z`Qy)rgT{^y&!0VPUJqx(8xL};A@BrK@#5#v8d>Dr0r|Flelg1NhC zAQIZJp00r~6C4MBCUPg^7jW;~xPc8ipg^`4;bGYTpCgLOe0=>bQL7jH1 z5otSo=$)yTa4jB*L0o4GT1+^_sQU(5Jwt60&0tM&K8}7ce zg+boT3zW2N-os#{kcbD3u`FT6k6#iHJ^PpNax#e!*%wldjpNz(+BKjud~N3AmBDjX zz66jb4)}9jaH&;Ml8GAf&*C-7nmQFbVKOfkn7Og9L~7mPaUpjUC=kHxFVT~m-?qYE z5h!l)W*A37TlkMwoXf}ah1#8VU~XBu-CX9oPtZT5C z#n=j(ha9IntARODMnSXl4D9h67dDxVO?78K1aw7v9u+o#J?Q60o(Wk!)#gaRaFf4V z4)*2kj0@|#aTmo!<^xBMLYiJ7y?UI=x23k9Ns2(0%qov%6Wn@OS)CUFz?N=!C^H6h zAv}m7mv(ZHLyJX3Cio~uhK=1h8@je1TC@wy{J`Z(Ye0gC!NiKKCM>+6vART{nNjw* z(TlZ=W=VgtGPltt$%21d)fZI-E|qp>nJpigDy5b@f=PA~SJ~Q*Wr$(qktSm&Hgw#d zES>mlRl!vn&w1`ZF|4A(GVi=HuwKvv(c);SlU$BQBZRq>RX^(=3vIg$Utpsh#5eWE zOl-f0#)#4V943K+^WfM6n(_*`z_reh zBfl~)i(Rw>+mHb#AiHMDDq>e0Gb-yeK-pyl=Vz*4Js?x4Sxmyghs=U5Lx-Z;sHFlF zOCFlQabJXm1ZIVZnn-KAP@fCM3TzOw zfIJKTI2AS(t|D2s@@CO4UGv$tMRBn)lu@N|2SpKQnT}8nW}1agH5%)gO(FIFRC^ zto_~d`>KU35D@(DUkiH&R|`Y?m*8(&!`ymd2K$j$=gCK>$^*(ss&%*fn;pgonOqhw z3@Iptg%H0~yo@&rPYBE*2Kd+f;sp?FhC20zoX%zp)l1zU4OVl$WipS_fRW5g%*zZ| z*RdD`O0rKBR1n0WoF}fCSDsdzGZz~bm5a7_p!B)MtDgdT=y-Eu3a z{3iD5@%VO|;4gadie?)-?$XNzT-ICI5H;Bpv%;3Mvhf4gChHYUCpaBi#&nq3?c7eK z$akI7k=id2CH->S59%O;iw+Xc?V8l~Ikny`E$_p(II+ET#Vx^JQ5dAJY+Ng- zpvr4Bnt-5aOgMS6!}70uIO!v?vsG$3^P~PS+?X&+%J<+-vLzVBomz^fQ{Xwe=egBw`DtoP>RuD+$L)m!QG_Xj;$YF0imVe!{u4_5@uf2P zE+ff-VHHzzZQENHsiuwVRWBTckJP7r?I^yuJ_$e4Go~CR!hVtyWbnE9sN-=y0J{(n zu}C{0-r-w*zxXIXutbB5Z_kk+ztNOtQ!4dih-?yYeU5mETVkm`$|O8T9563N^(iTo zsm}VF(+KQzPG^;`FtU5kAZeNt_DWU`c7yILM#%^okMDFHU_T~|QI@l3EbmLW6(trz zs;Nj|ttFIiz^y^(TA5LOjf#;kzA?P7*%t;!?(7KY%8bz6lHRATB?ut)U%4v6~$wR){e^@40&(UBc( zP4p*|34J#6(KdI7^f(FK;YOUqP{opk(?){?(bgNr&kudU|5_Bl^ks@^^JmP}z zT7LZOSSeBOWQ$E+YUH?$j{Wc?`lq@4R2k|g#cCAw*-vkp6!S;-GuqBc2~w@C2Zkw0 zZ2f}V!`KooM8O|uzX#TSXIrVtyXVlXBvt(EGcS3)!-8K{y-tED;eB0v)YfQUEINO`P@6h&g^t3iSi9BeTpY&8Qx*u?#`4iJSP)|y1<*k_Go z6UMQ!$~SXI_spH*s3*xXOD zW*uF9+3o~(8wB0mL8cYR&3t8*{Iy^$%^SVD0dA86>6Arj?z`@w35YWcE;mqL2@qTE ztXBFVsjv#%8M|?m{pJ0z!9k%{t3kF16SLS+Gm}(caZ|4+2G#fzT1diCINtXpqP^ca zh}zAAiNNl{`w%(VYiu$zx;-dg%;^|xg0W0JOAZvg@7)g|`kaoQm+ov9gq{h-B>3)v zN<<@#80;=^Pi_mE*LlnCv6B+BliArDBqp{{IDtN!-xjK=%GX04fw)e>C&`*hWKbc! z&gGMsqv;Z%P_i1^U=>WgQFL59oCpVC*&bCFaNa)e37$Mi!1B|e(BVHON}Nm=Nw zFApp@ic?x%J;Iq|sO!(NH#jM(!(^yHZG=c10JFZgZxfRy%L$_7@K~?8`h=SzlkKt~k9}X7rL8 z5R{P1Auy-Nn>s1Wr0lR@OT~B_VAZYJML?FPISoQq)W~s<7V)`0#!Jl61}VntX0CrG zSuywGFk=#0n}KK19lvMTb+hgY@4^&UUS+-vvdbXB-)%hY$M13xOG{jT>iAxi8>J!6W3w#t0V?fV7ZW2?GM{syM9;nybu1U$TDPD z08b#dl&@*j#F7?esGxi}j7uZCe8$LX@ujNvnk66bt%QTfn!_Wx&$;sl_ch9j)@x*? zo9v!Ep4K;ZHnayYx)y$hOPclkTQNer8c()*Ni0AvwzK)Me#hn(1_ZUWat4ow+ncGopt`U%W1KW0J4~5jzD*jQ!cQl-%g`@dl++4z5z3r*J@6 zEsj>Z4vr5|j6V?|bQ&sV+8pr?H;$J&rYB|#REt~Qo!R-Mt#YyDH!t804Wg<1j}^Y z&RJ4Fb%+sWB6bb3_(Rx3>LVRVZc~XIPlQ>jTd;CEV%UnLjYou8%2FvS<5~oUcfms6 zR%&c{HrngfEh0gBG!y6M#Abi!Uu7DcBAh>x3r@s?NY?)pIE zL!E_8hi>o}M{VgT^)1E+xEE)#9z86J!+}cQzb_RfjixVYE>In8ZF5DBPngeD;F)iK zDV=N9DkXsPmHqtPm)zA?cEG%;mR`SBQu&;db$4^VGf3HkiU!;(Zppl85fg-f!yZ~E z?x`9nU*JCF^U)LN-!qVtc54y^&k^Uz^WRHh^*I4yZ=!2wXz<>_&eY2IR{&}_CIHjT zfCN6#wu;w%XlaIwEHM?Z3VjZgjb}-i{B5l6+XAjF(XQR{&d&iBDLAwK7>^vB1`%kO zVwv`zan!_kkT$S z03_cnsuwSw6DZufQ?oo5P@y>=x#o3Z8P@HG$XmbS+@#&nGKN{GP)oudHACvo9?T9J zry5|Cc^Wl(wjIe#kSDL84hsDQGLE@-G2L2yTvdD738mxS9fnkrjKoWw74NA-&7e3` zPHjlIciH^`A@2;FpQ1iEcUL(c1^xt@`HCQL)c(urq>&>u**OxV8bs&`Y#H~v9S*a( zOH@WxCF`2JMe@<)PrTfea9Jq4#HP6HxTs?qnmpf%ia+v&>d}2&A)1X8<~qX2{$bpa zP$rOT@iT-9tv8~8@u=!51NcfLt3I+opUDv86biSAq%c1WR<99**qNMJb9+_|(%pwd z?s809zAnjbESkMV@>28TjI4VT^y%6*9<Ft*B*oGUcWOueZXlkR8{jUMjjo;%lp zbRhx(!7*;<$UAc4EE!Z*ZbS<&q7jhvK6G(Qqr;Xac|b#!AQX@_dc!|8wbR`dGpSxT zBF^a#$T@f-Wg6(+{N&2}R$JWejJDMIzhn8Y)ZstD35nERa`6nK*mL~==lS}4!hehX z^_>4gw=Gu2+@Ap{@Fd_dh~WySo*=%)mOj5~*69w^H&Rp?bx4};{tAz~3?0KQMhoNw z&UJ;H`TJ4Fovepm9;*weYOJrIc3{axgwNH+$S4Vg-U0Ojcoc*v=^W&fevk!MWY8Pvi?(V^ik>11tD)G~CnKOh|~+JVhJq z;%6(%*%b>YnL;;{xjV4PDQOWZZMN|{F<1+8gt#j4s6-GR*xOd`vGBQ)x1|~P>aQ1Q zH&mVc?Qcmh9E{B2Za%?j6J-n%oqe&Ti?NX6yup#a9B0@W+U>id_k2}R@46y^vwEh3 zgy&rAOGRB>$lA)m(8@tu(bdM#Uh{<#%Hv0@o+&}(D&ZC}rcp^xM_vitM}%Mmqxc+D z!%dK8J%~H7d&L7``Xmjc7*?!hPak z$$rlQ40lS!ylV0k8>YHQ@2n(}{zr?+|624* zo5k<(vS_;Jeu-!L`CkfuN9lp^FMRcSqOXbV#m{e)NQwTU_8&C&+Rp3H=1)6jc)#rY zN1*fC!t1o$pB7G0ep~n>N%#L>dpF!K)qhum{(eGU*Mt7_xc67JKdVEpr~EqZ`O|

    Ga3?(bc5`w!heyJ%id|8+t9Pb<4n ge@y>hGx&A+RUVg<0{`{MqX3}*$vk^IC3(^NKmLfM;Q#;t literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1000_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1000_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b7da449e24f430eb3d58e9580e00cf48e42c104c GIT binary patch literal 13922 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1001_BetSize.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1001_BetSize.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..19fa7269a082c4356aa459a092fe51d89ea9b770 GIT binary patch literal 9583 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 J(Ej%6e*jV!D;od+ literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1003_BetLine.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1003_BetLine.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1e44ec758cfc1e306fba266bd1a442b8ddf98f8f GIT binary patch literal 9454 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1004_BetChangeList.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1004_BetChangeList.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..af182dadee584442bad92184851f91a4bc172dbf GIT binary patch literal 9897 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 O0p5f2$!e+}-~J!6{FHJ4 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1009_Jackpot.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1009_Jackpot.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..adb554e4361bb9807d231b5505432fd24b5bf2cf GIT binary patch literal 9905 zcmeHN^;?u%*B-jNMH-~LyIZDH%Wzkd}~?Z%(|g9?$vy zg7-W>?1}5S*EO@B`(A79wU)Xv96UY%5r7N;0H^?^==;95FaQ7s0sw#qK!!Dt20D9K zIeVCB`?^@U8?pH~IZ_tD!!qOnV4?T_d;JgZKvnXXa~}t`?6;H~ti%=_^WB09CfHYE zsjQlNNN+DgpIy;SNo*YN6PHymAy6&8Qxb8Xns~=wII^5!j)3#Vo0n7M`B_UYn=&rR^%MP>k!okx5Hpi2g^*+Q=C00&&=>~P!LOs z?cL+6LsOTbVsH33r7t{-KIibU&mJ-5eAqjEuL%FL%4e0(t12T3J0=wb*6MQmf>peV zQ!$_JP`3aB1Y->PqkNov2sVNkJW`oQjV_NoXL4-l{SY2>{r2iSP=kzc&vh?TPFdZU z%_&17j0&W_2%EsGW6aFlv~nxfGc_=L#??`mcy!-zfne+e)OUzIS;v1&5R>^q7$1Z{x%Kb>2T=cuK=F*btYD!6g+TR(1{J7@o0X$GJKJyT zzry?5<<| z?w3{To#UH+Vck&ZQ;6;Fg_|mi0?M+UYuD{lzJL1`2`9--F7`m7FNE5$V!!f&JC2d)(935O(rO%w%M+&}i){9z9>P_+EPOdfF z{G()O`#4I4;Q#<8Xo$mt-r?iO?hSNvFb4u1ev4;CIvT)20qj8Wz3*^eg%Px*P?(Iu zXm^?3R5Bbk`)d}B!q7kCO?#t~v}XTs8%tHRG9l_>l)M-t8W6yJ7TbE)#NK)#Rcu}m zjU(osC|mh-t7>_0ckG3I#IRWj9Uv-q*>geeEA99BS?b_{Cu{;;dI z?licJTVoE@i%%+5<|SiGTm>CnD-**4owvvbj4W^+swZ;dV-OV|Y3fY+a0Xbn4K6Vm z593^?*M6ZeWeNK&czCCznOoyMpx!!b?*k#ez7?SnkeO;ELweC)q~Q`b5azBP?d6AV zlx9_9orb5VbbL4HdD(I2ig$~i9D%Pv_jZ`!RM&Au?Bnw%!%B!0mIROMLHryC-}xRP z+P!%mMd?c+LrT`_yZgnhU*N@VkwaqJ_oqr)jBzZg$vHbu=S1X)OryzO7!Xq_^Lfs4 zV742t`@y)?#JL$OaO7R$)s$C7mS}0%B`k;B9FJBE@bs4pHNYLg6dvUJQ?zfU={J_pD3b zgcoBUrFPF;9g(xGjCZ5ouVLZU2`-Zpe=O&>Bc59pZ(t%4R#zns#a?g#t}Md2e>f6r zFeF;%^1A=DY?ADRmKP(RuRm|u$x}**JfAj=8*Ue~#+l`buJzWDyTfAlPNrT|JH%et zKxYLRZRC5ti%;fR^Mv587*}n=2SI0tW$_f89M&SMlJ~ALMnFdq31@z#7Vh0dn08D2 zCr8(djraJa&GADu*|Z_Rci4ePphJ_5I~ysoGQlPv6W`K@ag%$re+o?@V#%-1p!#ZqhNedVWEiN<{)kRLtL;CL z3I>`&Lc`eq_En{+qWq2nyA$nu1c!H~7Xi+a2RrqF&OR3MNE74A6Dsb&a|kI@o6)oP z%It8!aNpyJA+K+|n455T7ro47(YWw_c#g-y2*8Q62{>f)!)kJnJOUo>!I%BYLp00` zcf3|H@GwgbzQE@z20D_6!V+qk^VZpL9{WiSPcD1+X|hoj{k5^Ct>Bwbt%GV%Q%ehF z2BY=%L#y=4C1Nhfmty9O1VvEs`_14JH!arv-@^q6`sPF&)AqD_I z4CTU~uG!tz%F4r?{r4Bn-+XkI)>zyMCH_afFXGP*EMm^m-bHg)SSNdV>Et?qTw`Dd z5x#0J1RW!Yb7}JFQb)WBai0`j-M=`K9oc;sOVBon6NQI=nz1J}fBX3Uu0ESZ!;-8T zjmdMu-D8_j6et$>EccDzVzfIEjI@)xw%`X#Vgp@QS*I#e<9^lh*aA%B3G$Uem*?;a zU;z~{g0A*_nbq((F{V)}=u~eaF8V_a9jBot()EfGPqU4dBYJkhXBWpOPb(1_yrfXQ zF^U*8S^QT%EKg^{Lx{KvS=xwwG_TbB)9V6Di{QDJzswHw#H?f;AJ(3rYVmP=yrqzp zwq86*Izi~rD2^|d`3$G$N0TY0&`dmh=b3)M5dHXGr40g4eJbrndea$X+sFp5z1SX& z&hCC5WtsaL8TdXwC=eyE`S^2UVf(S6+h+k=Z2arXRl64_NDxy-7&%f*AGy&ifm0$j ztGH(Ps%3G>cT zHu3qS8Z8GdQVbA3qUjGv#@nH6amXoM)naGF8$Tyy<%NheP91;uYZ2g;F$hvXC^=a(GVp|zlZU=RwGolF8OVlJFUkreHbV(ukfN3rBWsK$rWT?so>Kq#GBX4w|3x&et?&?Jg6e4Hg%Pe z$Hk#vQP>flqlV|&!4_?D^XA4jlhvO`h;;5a`-XnK+0f?zlFt?eglm{5*nequcno+`EO1)*|09@wqpz^@|eq_KZxvhCoAL zCwy~@*wJkB*^u}q`|n%)`@$0^iQ1=*E>nx^24IeioQA|Q6M?4j0-Tm9=4p#GX66hA zjy_LpPR#3SGh79D?CO|9=nSdejWOi!s%}e)HK6LMIQiyDUxrwPGG8RRv@TK#U|CJ( zUpjn1rjMOoc^c*>|GiidQaOko1XOnAuXEgD?JhlK1qmg|#Mz1Emq*yd9VdP%4e@nY;RBZLrWEGB)^p_e)k_9wpLD7?7y$SyN&~WWgsa(b{ElZ5as2XLc>K} z%y39`#K%EZ&@;tEnm5XaT$^k}v{v#h#{P`zl&pS?(*{_wA%Mg3*WWYYoo;A^wv^h7 zWCwg1B%aH(*|tK^Be?s40`n6FYMS9}kqOB*oq4W>6bk1cCGVcFH*jOZ@97b)i2YNu6t26v~9t&wA?j?U-=!|1?cumW4`~8Bw z@^Eq^9(%`%eVmZ6@-_i#L;g6M=s>cKy;e=}6(irA z@HqA6xz7%1J%eqs8fn-%FyB`1G>C}g*whEPakjXAYC9-5qLv7ozhncxgEq6)XEP+tSg7~WN@$eQrmXQnhS;q^>3 zQ?lpF7b2rWsLKhf3T3T;YHT)Nx`wUGN>=uuQyk#GzqgO7?>q6 zeNI9kfKMf$bOF+B+=b+8^u@>ssmd~UN7rCZ>e6(Mq>oPq3mICoaOXvP=&iK5`ucgw zR&>f0k_C=Sjl^&Zg-T_$<<| zJM%hMK*H77JDsMe_d<71-G|A_u^Q6`T=oc%czd`QA3H0Qn!ZeCqQ)+? zW1k*lZw#>tmyU6YC8G?*djFPfdNjiNG5kjiu5?w!vV%GUn$NI>{AA&kSGNTs*)cKB;C46D+qGP>K4l)k1Sqg(3fEp^T~{hW0x z+4_-=U{YMx2~M?v0+kdvBq27J+}B|)xcjiTlRDpSG^<5z60LQ($#iFQ=G01#YljVV zb!6x3EApJ@_=cnR+n8%!%3SD1IaC}u;KPqK*>er?IGqY%I7}MHwUs!XN|^cLatv;kSnaN;% zhkEwESHReN#9B0<$9V_}v`qbn&v*Cmb+mH-Em54;orqiEgL?a6VeAeE#u2asDHtSR z3@Phn&wv-V(w5u-OOt{2Tu7w|oi7U7@9>5Jj zFW+)yMrgAr*?3+o@b)XGdBrrHUORqw$3!QBTx@YgkrZ?4CXK_%r-KaQ#{-f^ z>`7&sB%C<-sq80qi;@C2<-hjr%IRIA9^e}3 zbeQJ$8G-5Y2bOT3b&YFcIl{2+#O$Yb-@TZj$gVFLB!LLkWmx@q!Ml9YaU zj87{T80Sp8TRBC}5F)Q*bWubz5e>@hewHPBt-cY?_nFMq#>sRb9l}1ofEI6)N(Ud{ zn>W)&`kHQSbJ3`J426Rn!7ivz-o*+V1=bwNF6b(dS+X5Aat*ksw&IdTU=MQ~9A4nn zJqQ+KpNm(@lwkWw;IZJmyFRYZYrdgoAe!&bQ(caH|3*LzC!mzp-RP)6b%=4 z*wBKgZgPF~<=n@w=G3lsz)EE|?jGcm2N<}H03*KDna{YVCZI1$0EOJ-Po3r>I>>I- z*_+*K-49ns`~t2>sWX>7VcTEcUH7Bf@>Kxt-dABhw!hU2@)5ZjJlf7RY0NVTnB(0V zVFIwOxOZPUFSPmB?HA#Bl+}TC&M6NL?KlT^PSvWmph-06fnV=&)8W&iE0MsXWuY`- zimEqLqyl>zuQ0>muJ$kD$0j_<{m_CsPYOt0by{_-`M92YbS`Zvi=XFqrLPV`T!_5I zvDAkoo9y9N7p;-K0734l#Xekn8{XG&i&_U`E=S@~aF8*Zz;#*owiCiL{ex{+Z0FB2 zH$s!2P%f|fgjeV#ry<`l13DTExq26d7lx;`QE7Y6DL|Aocw2WisrOK6{at&rAN1so zp~v<}sQ&Q()Sj)Go0X-OhntP-(vk$uaS(UXoKmnHhrgR8Kv7{B!Awec>l)mc z@?_0k;lQ*#(rp<#vR)Ov!Yea6{E6v)LRynnz&L+jYlQf# z<{XC6Yao+bupt*>W@WNU1eZ_2O1&oYd00E#Kf^}eo9RI#8NjSEhap<6)N`bw<*+Gt zG1VWvO0`1ij-gQ-Zy?s{XW=CGos9`t!sQ$?rW_?6V`z#F>r-L=iX7HsL%>A#j73U4 ze@g>_y`*PV#KTF_(4dWzUX2sHK)jOb;p6~PCBe0ju_felZI$7q(Y9u!#@x59S~za{^Aa4LPXn~W&F{2**)u!}BMTF-jKDh?58X4XeBR;m-tZerm znbB`(5jyG~Rou;v^K;MhXMGcxM$c~6dG9&jLHvy$>?PV_<#Rd-uVNhZo?gXBTq!I@ zcXl^Dv*J@rP*e_q-}*I{#S;w$YHE%0Xxb#>NF{;$V%Mc)4crGdB;}Y<;Se~W1jk+^ z9HW7y$Fi;My>1#w=d7}L#LYaH*}S#Q;&%c2D%C?at-I38spk7L*Rc-TZ%F@`kbCi* zw2MFqA_%Pk;XrFZmOu-2H=v6d)@szoj4O)&(SvsrLWYJyW=o-g;p!OsC^O zSMF2B%tVC)Z*H?R$3yMKvXXFl>^jGn9Pw=V+hn>h_qBQD@-AGJgOCwr1~z^OVYZ`( zQC_J%$&~t*$Omvsb~x-|Prj_LZz5X1jLk-`7h)B#M>eF046j6j^cbUmF$#m>2)sTm zY3Qx%N|Dn%82*ai7)})>-5eoD`ABdL&Vn0v28VGVlIOUY44`RhD;aW$ITyOgUW-(@ znv3w#?Xz|)B%Nc9^GMJj`lUcyOASfv3kdzaWhBm5t-FS{pvQ8tq@9oyfcDY1Ikz1> zvy^?rt%;hB$Eb$1EvsKV_fD!3wOsVKAUX4UyJ zhLx%ze{~JFa9tVMmhy?^hWVg%( z4h|Cy{uTzChVYcS-99UXzY=7G>Df%`%qi8B{xEUptSJ8KSf-HlAm_?FE!= zoV&NCE{s~e?ed)ONBcNQ#-x^zK@U9d1j~e)61k|9G&b^JW5sA^MARMISz2{)?6YEY zn25I%>b}%pPR}>T5N{3bpWUu}+L?Q`UewZAauDa`(8zu}0U+3a`9^X~vQKE^U0#@v zPK^VacmNeG_7DqS~=2aSde1NHza}PYLW6{w33rj&zom zZSVUhL)_aX2|-his29SJrd<6?EWbTtCAGypl<#Lw+eFZ3@plGmnF5$tpbW-@G8j5^ z@src^boT%{{Y&EiP#6FxN}N*e=fEF=_BN$QL{&0s41|{BF61Rd7zF&;?b--3ig@-s zA|KjGgd&jG{Q?3ga=-Z=(`D)j`p9#p8&~4Piy`Ky8@6;Vm#+H`Q6l8j$J%E~GADwP zI82j1uF=LPkq=nY)d|XbO^T&d5D{+9@2X%CFqDPG6hU4AeT&m6O$%695%OqY(`ytt4jCO5@^KnV zp`#C_EgYpy;BM|o$Koo%Mf|DRB&dUO1%bH_!622hkf*i+tl3AH28K9JUnDO5h|Dms ztk5*=pJ#i1?CBrx{$bKbUHPvD{yKZ`vw?hQKKRol!mq$zJFq{X^N9Z~`v0dN`z!db zZKWSj06+xwckutyWct<4uf2vJmVoI0{SklbJp5|q*NWp0E4A4FSbzN0z^}*G9|j5u ze>d>sF#9X?*X;WTl;Y7J&|h=$UoHGKJ^O(N03;p*0Dnu?eue)v)cy=_B>xHiXW;!6 l{Z}{lGuo5tC$ztg8+VfS%#pejOuXDR@|!|wmz@?WfhN}YbEPEMQ;dfO7Rt-8^Lk>%wm%r>XU1+v^Mi(-kgpz%XS3r-{hM?}l!OfZhld;G z@Ru{+#riu9;8mDCiOmFko@ud>Dlh51f3L~Sqf1wl<4yr)Pdkri#)oP&)n8F6Z4Zp& z7eJskB*HS3lD3s_WscmG7(5ZEI8ZM9BP#1)Bo5le=7C0Tw5~ZH|0mxSh?`%0t#0r% zxe*B+ONs**Jeqpr-DJ0xh<=>qe!Rom_o^zIZNSiSNBtc2&WG62|J0fFN|anJe2Re( zg0UmxW;1gZM}Ao`kG1%sNQ&}H#vvBj9n8;u`~U(p{^6!?!JM=wFxyjwT}6kvsfnAV zgF6TN&-MS@^S{_9|MuvWDQb_pI58sj6>lQ@&ZicWaHLhdr4(DJbpnHx7O>yO7t@g~ zwlR|9=#V}GDg=E9ycw8Z6pi2Rqdr^Zt&GLR7olzNu8PRKa`i-h$l#VC?^?Oi4f2{g zojS`>Q1)f=`jGgrqOq({rGJ@Le&SFTiZjBlM~aH~iadf)EGxvYN6lc#?4lZON?Loj zDx&tCK*4tENKVjnM#(o!i6|k}o$)M!K6f+g*=qkj2kO&HQn0p-kZrA5o|`a@uZe|2 z`>||J8{Vxyn|f}a77Z`%1^0+TFMYvjkYPRV;ouA3ZUNM;ioS#X&{)c{C0NG#x08_2 zH9Yfqkn z^nU9v$~2#I<`jJlfZZtss(T_D5Ei^3Xn7;mApC+8wD>K&IJ-YrXa}hi{6tHIat6xM zf$C#G{cLLBri460k2P-nKHmj-iX&RH<--UC-OgJYmh-6fymrnjYhH}kQ|mF4 zA-B4dZqS5iA4Q9Y_9!9LOq3Df0mOdI|i4_al<7Xmh!lRCxz==oWScGvmm@1EW zACInZP2Nm%&OA;RDR-eHS>$8vozk+;*H1r!6p+opm!547LahDGUJpq%p}tw+xLv{? z&=unBNw9>oRm$)#r;`f6K8f^UDGCXc=iEl^IUu$Zq_t@^o$m_H7kfedJzyE5d`J9&KZ=Ad!5skDckX@hFuDgL%WB zS>x|M@t+I=2P1eepZf1!Dz(&9x?uzd{VtNzJI9LvH0!}ZvjhH)jnZGwJkLPQ6L_*r z_OKbE|5=3t=p5m@Kiune&WE)M#5?U^DT~2Hc#7w+FM{Yid^`+9G25+r5UPNPhr6@= zyJc8Hm6Q?J)o%<-o04#zI)~^L$g=z0p zh1S1&N0rTNwf>_?X8sH*Kh&3U?3e^qNfgr;Ft#;G&2rHpcZPEG{>Dnp_mh1`@fF58 zd4XY^48fGG)v$ zn@d0#!@vXph+%j96+qo>EG<3UIsVvi{fwl!dXU6zew=`s$saiDFAyRRm^-I%W16wk z%bg_h)XduF=+qs7Dm7QjB43jvF)AX`Gd`LoBqsLqq#oYPE940&Fc1*Qt>M<}3s)-2 z4#Yy%?hdb;1zag!*(Q&x;27(7 zh26S-?K^te`|l)9OU2blORjIdi>M1ZW|P0dJ$@ZpqeRmc!P1z5*{aBI*Eb4r^ZH`D z7Kr^Ub6uDm>uGB3@_x9*hi$b`pYa^^$AN|k{mx=(7xm1Z*@a8tzYaO7y--4{%8CnD4<8g@`jIVJvZW0Y3V*qfpd z9YeVZCZ@n z1p{KU`Ob)p+8=V==TUd&re9ut>cp8RQHcFf3n4)CyYUCy@)Yx^qP> zXeqKWPuDJCv}jyrXN&hcS98Vw_-#y3lL%%FgAuA=(w_~2KVpK1jisX{#~MDLC;3XZ}^%Ss|hWg3m>3AF0H4>@}gWrDQX{GKG<%A;>3QiOMg^A za%k@mqV2T2cc;86L2+>5us+15+4x_9-krYu7U1hyF1_iPjN7Ar=k?K92%r{zWdo1S{4k8e7 z;A<(oV%b4^_RSV@nl;>;qaGk}(6!go2Co5)C*wt4p<1}m2JmLJE4s5cj}%Proj!xF z2su)T-4Co=E+g?74l<8*7f6x-)<`x51))oj%j3ww_Jzc2yI&e4`v0-J&?)f2Y1x_7 z2Qh|O>CwB<$2j~&r#1pfB*l@sJ|YK^!%tV<%S!P%l&g4gnZKR^+oL}1enSnQOQMm| zQm7>KiD1z92r9D31#LzRnKQjdR3?eEs@cQ*fOL~7VFGy_RUj6}Yu}Il{Gf`Vzjq}y zj#akz1L|W4=8?-ca!ydH(pZI?nLc@uN43%WtIPQySOIZ){VxBp*fsn92~FPji_Esb z+oMDYlg$S`hDa+P&qqw|?ruI}FW;OF^2DAyMf3>!%i<2bn7>$P>cu6_4wraf?QG2z z1L9)Uz-VQwM#d4O@bL>T!<_E2LZP%M;Nbt#ag^L~O7|%vRR3u!0VC4EbFMk_EIz>U8yoCe4maT^(Zr|X5JdT!Q_r^uYg!v@@wzxP?@_`|h9koQ~ zB+6GfL$tIR;{*-q(_l(!(7a+^<(udPG8ee4JoACv4t#f~x~9|)pSLfU;T@r+x6i9_ z@v>0e?2diIh$oT*yhuMX8R!e8@_vSz9B4CXt}R%0B1u?nkkRZ@V>2yg?I9zOeQPyF z*?U&Goi+fU{3s)fJ`?$Q*8bO+PdK^{f#uFozS83=>9?UJ$drZ?yW9SVc23?m;=)VA zQKyc=?+cb%Tz*Im?-g4xpqRopeI#NR1VNY6%6;Ha!zUnZ!`OYHx#TxCmpH><0B^^@<^tpv{tj-x&lp;XRDA zE0-+R0~>tngNf?W$J1_nVy3?i zU&8`ksYs-_I!ECTL|7e*OkJiYFn)#G%5Q-}7;ri3%1(9=BTD#@6jYsSDKET-$FX&# zDHiqcF$=NIO~gLfQ0krLHzcWIeiXaMZF)gyc(GBbhDkv-B%L692tmG)&h=-;OpAa4 zFUQW5huZl%AY17@7+{Y+miZeg(mwoRAU7uV{2i`1->*in$G z5cA&_wnp3WCQGKoGEA=}lp~Nhp}W;>89(`cTD`o}fE0Lc3ylj&-aOLmhVQKK+5Lh3 zJ0j~CX66ro5m`xO0072ie-c@D4_^mM_n++bC3w(jLK1(G_7J;xwk41bOUa_eF59pi z0aq)w+siC5Rddrcp7A5IS#Jb~>Bm;HuIYj!l7&NBSFmj1VmHtElF<2rb(5^fT?EhaYf1t5bH#_R=5znu^s{9;Fe4?kM~B( zPB22>Bbg(aY4p91kH0h0#6#3-ve+oqi=>sb3soIoMY{rI9nm)Qv;vY|gQdbnD(K3c zM)_8#4xu@+S*yylz*otg%I$5+#5o8HfdC7Z(DDH z82;0hD+M~3cXyR zYC3!8hKgL&g)CC3UQ0Ll&p`x3F+hafIg-ku6AAk(7{v%S(6WSZp zV=p_9vac>^q$1_GJcp2S7sIbyM}{)iV2AV+EfwQ>pw@v33i>QZ#DKuxxAb9Qw=UR$ zvFBoQcekb{-&DO>anx?G(ew!07dZ4@T&J@x{>e^}tzG>&JYv7CRKtStUOJa}?(%4^ zBVwGD^=Sr#WkRz1!X?m=tS4WevYx+&fAUJaK4cB#(|I1kmO zm)*ycH$}dpW(iO9GkJ`UVrQftuCl6j!JQvOtBkn^v_Wbz`~?M6H9lFGRJ2OVFyo_E z2cdTEvaCF~yGr?e&DYh*M2!V2{iR`T0{p*R#m3al(n8zA&DP2KPmf7~DtAlbMEG@h z>wlh`x1oNR^I`Q%ySiYNr4mEGv=@Koi!wbUV^3qoP?S}bnJDMfDCZSBEY*BBs|%}E zN_q8t$9|{6vmVo-L`idyYWRi(u*tjU{r7>Z$lIEx-ss?taT*?nsYhqy!#AuoU{@&FwW4OCZGj_ys;CqRdWYtr2kcLjFOLK9G5Cy8&&DnQvnJN%3eTOi3u|iFlEsP@mlHQLvfRcki=2`v5G2 z633yz<1^IXX~3Hv)m;(xhr?1&JzCJ+graZ5psBD_9?;?*bcP zFRz2?GwhdsGaUOmyvnk$q0oexGYHo8vT!!naC3HX=P-A6v;1o|^MB1QnCkpfG*!Ad z@xzx9f5`Ov<lu|^mC)q*Yrp4U(|INPm*o9^_%djpunKq7h_x&J5O=&O!7Pc z_UOhBXp)2QgID9rCfOC7*M*IX+J#FHD##FpghS;jR?ir|W*_ym$J+7|>xE#7Dj5uT zCY*h;je)NFB@M|h6~1qDjI;QZX%)%$)x-f=kecozE;-&1*8-f3815J<^F`F;a>*WC zsCk)Gs2gFgX55eWSaJ1wlqUn-%q-rMfu-6D%ti-N zNnTERRZej{iFLq7>8qb`PLLNZ$C7tQM1&~jUFP$oq=j%LtrYqfrD-qmR!KP5T5k|O za{SixCgeJTb77{33nLyle>Xi-7nlE8-cNV^bIDEVP+#E0iP%r~iR|A#$#_`PRdpZn0fQ4Tb4l$i=vXk!l;BIqHrS23&^#!X9%G*1uo>hy9nac3z zao&hI>TVe!6Ro^XklNU(*%gHhdYx*W&mv4Sgt#Kf$ot(iR{#*^%Q#l!hx+lvR=JE2 znd0#<3kBtM^WvoO#*NnUxCrf<8Zwu@#G{+%T}U128V@2~P?M2cv$amupEQ3}$*gds zdcrIo{v=*kQG1|9ULoHMC#{ljH*WDaa3^n%`WjdgTYFTBw&I$9EeEXxhoz|3&YxFPeX>m-^I|wQY~o8x6ypfr zyUOe$%AEMBbSGZgm0%Yt5ny!*8=60J8yq|vj0gPw^^pIJ;D5Hid09k5<(~lmoVfmv z;LmL-%uW6_jeTG6{$$=S(IHqj>fY4eec^x3ef$yy0OnvR?EgO#av$e@L;M#KCdU8! z6aQ+D-$%LMLi>e6jq?Y}{f63ofcxdlFM!X4e*pX{ZtjcTr+2?Z;b0BDpLNlFvUeZh zKEe5gAVqdx2fw8|_W|$og1N zS_#q|KICahRPI;yOy0p zvw2gAV8q0k)i{_?woacf2e032KXePxd2?! zKN}R1*Ikw^yuA%H?fgBG^I+J!X#=wjd7s61^%&3&_I5t}I1BY7^NQHy+l99lz74yo za#n38(jX<*5A2H}9%YUyfvw9bnJ2^pou4biLcpG8;AxwKWVu&CjnP(&LxLo>9Gsn6 z(z0JsJEz4-N%zWl4(wu*Z#I3EP!rTc6q*jXP5K7NaIsSQ zVohrv?08ZG0Y?G?j{XPWE>6yNHqVgf#|p~;AqOt&r|iuPD!HU`LYuxxTM{CSw6-Mn zB{(^yIA`AOC)?h%^^T83jxZ;E@jG7e<+@ua1i@8psyv}@5Wun&*{V1##&a>UUqV}tBS z_(}uk6Jj7b2{}6M_Bp$>OVDP$bVNtv$sLeJ`LQ--O5+eYayCL?7$ZUQtxeAq^_I@g@&1MVzIn zBGGw7hDf3j3De}fgKDafrO1;dZ|6OKGj03jOvSg#n6g*%!WpHjr10#*lpGKtp+pmF zPK}nVl^vO@-8`h5roqnoW601%7LXQ>&(6r)$p5y2|{nVa(L;^E1dl#_A5O$k zFw9{USq*yCI#x?ahvg&2th#uExu#xajlpjzTV++GXj&|1i{R?3byN3!196hNh|=_y zWU+E#r;cYTw_C&kk#Z1kaHe=LxcQ3+4-7>SC1-!fZRG-w&BlSj=$9^0jll0j{%|$N z2l_~o0h)%)d=##)6EA1(3lJ+i%U(ICkixn8eUT+{uaJa;&G;D>NU5soGA&@GIH!u> z!^FN!d$oZ2#r10^iv#l*8maR`KwbZ>K%f9-o<3y1*(0Q@wEkMUSfpR zyEk+-=`JjFWp_1I9?<`HN0uv4QcSZb<*e~HIvVPjbDiUVRlB(eGa#veYXdASo3~UMF+Jy3UAAVIt9>>qVD`CXu$Tn1r7Yh5-p)-9Qkxxp4@*wrW!vb zbFzXx)U?G^9`$XB6n>;>u8aB|7f1o8L*R85hq=ll0!RpHS?#Lfy)}_b)Q=G~EB|mo ze!%_FqwZ3N*5eH)H!qy8!swG`XslaCtmB@$}0d4+*WT)2I_#qxVB3mlOw{t;nvk10in~U z@$u^e^|V#`dWPkPpGSg%zQK==M}=-*0CZG3eKPn@*Rx+%9?y2}7rQt$Q9Umn4jS6q zeJ{GW-aniVZagTgh9MG9B}iVzXlGHs4$e<*Z1nCI)gCiU)8AKLh4A*$MkcZ6JY550 zBR&poB=x2e688SOaR(oAK!fTe#?K}wsRZrb%fq+ciSGyP$w=3^;emBejqQYg1F_+> zvdEvt14}gQ6eGXy^j#)Y8fVK-PZ=+b^@M>z~0`ehn^ zx|NK=BCB-(FD98{F(5!BBg-G#j`h3JlzI=czxMVXS1XTEiH7&$?sZSvLcc)f6+=?uC?NvjpxvfHq7aJUl89F zpJpX3mAHw}EMb$pg=?`ZHrrx>r5E=~l!6W}OT`4iaL3bj>@6FwyX$=Sd;rPtkDqF3RU=`1OP;G4O1<(FgmPhMS|oNkMhpf+BFXfwu)Vf@Hp*NzI% z1B*qZ=0s?wCJmiA8wL()EqVo(fshKN)nFlH5E8|<?LKt>7z7 z;JtLF8B|wipLbj7TQ6vWYH_jAPcFxx7r|c2s+$dpgLPO&EU?!L5u75hl-Td0H)Zj@ zg!@Fp`BN@|5?kr2N;cdNe}eWKNq#s?xA{Ec<#{Q4<*<3^n(7Lq@U8xUi;$`SyJL(q z*MKoEWp?$HZRD;bc68Qhu&VnC-bHF)9c89SvxJnhKb19OhCWS|X-fq-jv_3v%f1*p zIot{<9jVszil)&kli5cUbIT%}KKi%z-xaM{m{!FH>3Fw`!~L(6D{#RqgY&F|;?=p- z`HJMZ%A3VI46J6`79}M{(MD9poR!7gxfOlIu8zsCyb5`K{7r#V64)tvCfZH`R zIS>%U-%krCXAf%=r{|5egZZKYo{|8YdJMb(8P7V ztho4$*_Kkf7U?cL9=p|d?snJN5zM>h38CxGsUqj@?po%fT_YVCa4lX&TO<48-gZ>t zcg(J4p%Fp4HV~6#XKPKAPK%q&xx9Aq8p1~`H^6ws|9(@rd zNg!=Q0x^x6ultttRpL1u@8ccR)6so9!QBKM{w6YDU7`V_4y|;3VS4HaE!!?bkOI0j zB{|c*oJ}wey(yw7KQc>`tCZIJFlhWooz;af-rluYM9=a^t<1Ym>%%{NqF6BTmX6B( zPpU``R6<#KYuYdY#f!(yUj-4xigsFjvqXi+Ls988O#4!{n5>TBaw;AgkOb9)ucLR~ zm-(=5%pKQhrMdeKr`2=f6vE7K7IRNl7(Xex=}?7kG`R+@{9t4WY=BnLJo|l;R1%Mc zwZ|@C+C8Nvbqo|LH_EliAT@XRkbOTXA0Y{zRGBL3fC|#0{DUPXcTJniw@5O+Q~KMS z@r_h!358;J1rqWZ<$f3V3IUjA>Xaxa2?76cw{(H(^{lR02}G4J0%bNeuG9jH`dabQ zY1YV;5AZoYo>d!HM@IPJyHEl;YeJhG+~tC}e7uBHqK)w1#F~Z-%E47@W?1ogg(?iW zu!=GbY+SDsqw1g(Qm;HqE0UYDF^>))N=;mNhdMOP2y_`$2kAcJ_xPAo{zxsIB<|B} zSbb+-R$Ou5a!IR>9a%c?vw3k*@(LRZ-Bw@iDwU8ILexX2 z#=iqWh&~#n6&3;z^b!*KD8!9?jE(OPiAC=Z1D-#kg7o8{csZKiq)(uzi-4tlV-CU! zrTe&a8}KSF!YB)$P<*P0GqQP^L|_b_sh2dDRx_FOhV$Y>Ong7~8+j5l7@jb@k5wnp z*E)P*m`4%XfpMda3Z_^)Z%|<;gIPVQ7+2%8qfI(2kpLI)#fM_tbSAOm*jPqbjG1Oo zat$%9UiAmdLKfGBffRxGG{MBkjgU6#T@oMD%|{3bJ0qn%B_}!VzLY-7Y z4Sj(L#RLMilz!{r_a5Helf=;c2=oU4+;|iKmu&d`61C7t?9xVfg`+gic8?$#AfDpz;g6~vvp#I zUyI|xI;O8X1)1&9g{V27Z@d)f@xat>GR4Xb5=w5S5}1i;pB*-?2*PSb=sHVVrebZH z^UiX>be59aRKlv{wBx0b7zA68K{FrySVaA4DiTjkxXagMRJy2Uo4a~dpz~h7(sFM~ zHUWI^2s)CEUy;caHMrTr1z;$J2N{nGnK;H`+0^zanwlVKN|K@UXYjds6m=4>yRnL; z0`jLG(F%4E{(`)!?Liidn>fvZD;opPcQXK;d0Zql?9Pm?^ALO@YE5wR;Or*Zw9U?P zcygEIh)pOlA3|~4wpMbkq4-KzA4Fbx3kiaZ_+I(&*B?=RUgFY z18@6`PZ__}M(93dRA)!Dd-Fc@Ee)K!?TaSX_P!ptd|<-B*$Bf%5mYDVI2W~O#SKW| z^|@ZVUG7o``vffu7A`V(8Z#qf9ZBgIod&V|GaUd!qgMb1A zPCgHDQ8b1o?@bu~S#1=mP&^tx8(x^Lj;shrs|E9sdP%AYVJu%tLUnR;eAap~Tp-AT zJw>D9HLnj|3*1|R&oJst=sfoqci#g=Me~qk*D1*2$4+D)FYUdb+%~-2s55<&`@;`G z11YPMHSmHg60vYqlCBA)Qp`HAEFj-5NgtAEm|z9=GoEINx}J|s4WvKyT(5&gT~yaX zM-cmd(q@X2OhUU|A6?KB^hgU0#hA>;7`&tpN^r+|-9e2mQlhc`J?QB)5e5LNlLF0l zq(2f$0S+ylmc}zvWhx2~j(lZ7HI)*?$PsI|DTlKspKgI@Mb*R0gSf3s&8&Vg3Ry#8 zPcb3I3K5az4PJRKHz`ygsLnBFrGvLA%Uy;WTkb+&%<1DlDX`yJ zVb?0hU3}!P=i@a_*fcS+*;hXprPtT;gY@{agez^qHz?J-^zfGB(ijG}{%B*j4uxpb zuYHilet!SUwQI`uaYnvfZ3$mFVy@{d*YJ6Q;;S+-K0>g=S*_*5R_xXEI$`v8CDYYLFQ89FI_Zv#L!@-QJ?xaG&KK z`$%3HoU_&(J%Rt(&K}{N#X<&lSAPJHXC49AOK>tba5OP~=j>={>~kqOOIUsyx+7Ap){ZI+R8e;)L;xyPOy@?7YAd90WlUn! zqrg+W@qz71!8!t52=1L@?uHa7hAFDj;ZSZ@;FS(70e-k_3hJ#Rh`ejyH0BY(M=F`o zBv>avVFEmQWv@#$K@khJh5;g%2`XI@wmw-BNTu9#!OjtlRZJdCOql{6$si#>|2d{*UoF<{vis_r^tFAmE z{*j8(@Ar8CZ=L0HrD?Z~ro_F30rj+Z97a`^9iiM#MD+5O*b$O6B3(JiB*xaD zaTC@ZcMNQAGG)&vpMW=jIfOL@UL^Jpi? z3aE?G`U4mhn~4}BF)6bzqJhl`AN6xcldY4udq2au>#VHkq(>5|FJ;aTA#ufGj61mE zoL9O+95$WmNp85r?uW=m2w)mUl&;QA!J5vzBN3-K_c7m)mWC(hHP=WFH@&;lR#e}p z-3xtS)g7*$Hso05e*gCF*V6p={xcL1Sv^M+>z93JFK*Y?C*XH0Kym>7KQfHZlI3w@ z(%sA`z0X|NHbBk|6ZN|@6WO7hv5((p*{5+T^f-+pK%1~4{kLZ5=;XWY)D>^z7W^d= zU6z8V)&Lj903o}6SAgQFx4ZgMfMi+QG`NSdeJ4cA{<-0OP~i6Kgn34aSRHSran=w% z+IWkJJ!J)h1EByEJup!O5$p@pTUlW)jWmPX79#ym6#j6XQPK>?6XkeRYVZBFYy zf+9vpR??lE)DzEXB+7iN1*dg@HO?|1(ygPK)wiSl2oANU%yN||R-lPILueD}8NV~e z`*7vwxK@0B|a{38IE>dn+kY~W1qL*{J9|~(rHdI(I z#6uhNL!Z2^Q^DuU^4pP=GkU&G9-lZ*-j7-cJt+uCX@ls)WCoOGVEzC2+_9*hO!!wnUnD^H88!#jMZYaim+4)pgUWm6 zFO``R$0wa1MAy2^71AJKs9kz(Py`68zP81xFG~qSiAW@ieFt#f z_fxWk#Z=kmnA`Q^G7db;4RYOf`&xe-nG>cd%!0+z1}DSWc5S{+B7%=?SFtltk4r*W{KE3i#eO?>?M@&X+YqNieRqX77o(M3 zwX|1*a7Ux7I}C5;eMic{ASWGf$8v9#{B8@WeIxL`0W%2|1X_iDf8c)J$L(mk7wHcdHjRn z|I^<~j{jNsw?FECs{Ie+{}Q5?^!4A`;lL&RAE$qj*)P>!lCgiQ-vdj=-|GLNX8+qw zKeLX%$Ma3UgZLi~^7(fEJtTjkBt-C!0`+pDFDu!zpWi5%{Zs9K)wP#)Uha?nwxa>$ zIsa|9^wPr1Hr?MAFo3M;vxWaO?fx5Bf8P5x^e@%F*r7jH$V-0cZ;yyTdKT#Mx7y!q z(aR~n+|&GRAO%P{0S){Uw*NNiXWIDpc#g31?+E`vBL6w_mo)OT?(e8&{V(0WNo55Y V$mjh5@b4I?AkaWL3gYLh{|B(l*_3XlYQoBn0U`bR3#PcXz9FH_{!FQc8D8cc(~8cc<`!es6i-d)L3$ zIz6*z?`QVRo;A+_NkhXRK|GBhxmCfZ*FOg0;~OJeLy&{5o#RW;qZsz%7YIMa_Iao< zSRf%F*r6aG0Dl+Lx3gn%v$jf){vy@Mj19c>eE?Ks_6?FfryL?fSsnIOnPKrrN34>R zSd7DO?FwLmd1#Bcj|k1w|LW^98Q*y8Kzf-jedVsCmJ3N*#ZH?ZNgd~{P%~1@Vm!2#%N1FQ+AKNOlFiW z)zhD9fb+BBNG4*PB};+|jlM<7^)MJ;_7XuZ)@ZRyw$+Bgy_>C-n*E zyTE4J;p&N0v7auv@3)Lfg-TPE0po#{Izm&Q0Qt2uj$_=?oSCZD^2g|QKkV7+{`SiG zItR%L!_5y(>Y!qgQuNL$&0qu9a?~xZ>~iTO%M!A*_~f%I_#-ETZ!BkZe8W&u^`DOL z^whXAZZL*h9yHyd{t53)Yy5%IBfKV$@M8QOUPD_4<0pLMW6I?^m;r&V6pQ318MEe7 z!Z{T25YE|{m_Ra)ftDJK5bL?XDnd5s7Ys*8P1tlJKCxBgI1E-7KOQ{p55K!L(K#GK zR`umdfSv)q`{>1(8boIm&vgojWt1!1rAR{}YWNAQogI;x&>1Lp1SB9;4Yj#NQpj{F z`zA~mAsBWffIwKBL3XQJJH8sOQ^+MWjXB6|e8Pcs5Yk-L*lL2h)uL5Ehw0~2&BK-u zrq3K`1l9dI$T|gdkQF%(AA0sx`!jFQ8Pnpn&CWC7JgjpE;|W)Bi@-M6C(w9hl)~-PC?He zrirUEK9ECSY88D<)-TYylpis{io1~bd>HFP8fjvL9j!0gYkhvF;}u^)i#-o`AV-Vj z?j$BFbv%3sKO_972b!X^u4o@Ufbr-7tbcgG+0n_?`pE}*(c01-%-Dg4un!`A9;s2E zw0XXwrCO2c&~UoaQ_9u~$Hq~lqaC-VvJ|+jMCgzV4|JSnC^6`+1Bm>~n^h^>Fra)u zTD8qzuu3Go0LEqE2>(Yo}l z+f~sKr#W*%3(kCaGN+PA>tsSS0qzxY19o@qK5Vx3c3!}ml+3+77e}II8x{BVC?RU? zrG(`O%D8eEN^wk774FwNATW_}XXPc)Kz{ z$2en#JhtxH5;137B^l;?^9|Zlm78!$$ksL3CbK&wnihlwzQx;&{Z4JZbCE`zjUZAX zL`0UzJEa%AVG8%DsJz;{cLO`nPssjzhJk)W*3If?Zuxfsv|j?Qwhoq#X2!-&zvrR0 zXj~zYM;G0~KtMeE580n8EKk0QP?oiwXGUp8pY;MbecpGk()Q&9rjpHjqtYaJq~WAS z2J|LSvDi223P^ogfI0YpCz78*LfQwD(`_(2hTuJZ#)7fBiW#wOBrl z3)`6~?i2a?$nw>~$yyLFXa7q)L~rm17uuH?L%fmNs=}07xu}y)N@kjfxw?%}>E&c6 zM;{fBIVEjYrFv6pQ5KN zU-K=QagVC?4O$c+hqG#Tl~(D;SGu_2RZNvd4J}W zoe+(%S5R&J$Z0vc#Q~>9OuS>k2s&DSF0(w=Jpg1X4D&o26plW*9dqZ~z(x;V!X$8Y zF`;qM1idH!ZiF-31nZ(f%6mi~fH^`8k)dEjBVPuUr+EKH*zWQ*#j&Xr#wFMAh<1x? z*-(x#7xwB$ySypVWW(eW{6hl)r&HMPEuxrg5&3D`FX+G>uQ`3P2eOWN#VBYq&(5!H z81PhIho`NciG+-AEe~Gb+%d$~2 z!n%#Yvb_t${EiyU|CZL_s{pz&FABy?V(=8e-Z6ws_ln_cAK3C-BYIzS{u4oY&|&+5 z@qUu8?;^z*qiGGX8fOj%`P-p6xfk`7xAf+c5Y7T2RB1RGhL<9rj+->wa`eTXm1$l_ zxnP2YH6?e+tbF1Kt;di;JjWU5sLI@C&MhskN&ovPe!3?gPqCAkv9~iIw zlWS~}onND%=oEY>B;0i5?Jb!KgSnRZ!O#rF`~gaL-ZjzD@x#8Vk2g@o(bVhi$B!R3 zmYb`2JQyOkq7waU`D%Q+$AAzI{#^UfGn=!<&1qf=oXDW0>-0D9I%`O5QR@>jayXb=a%C_^w=&EO?v5&ZqbK zJG_U3_?uw;LcQ#5mBAj(uXT0)GZR1=Ms-c~8TL#k?FKzg9S&X~b8oV0V|8~xX<7>; zGkeso6ZgIxdx0s$?4^(ry>zrmX``yO@hfDqTTb~#?LsvRrWQdjW4R5n;;Ew7ieLr> z=!&Rnt~(9m>YDn!Wz^o)UB@d8%gO~E=OZ|y<6_6FgMe;}p)NvDuNiNKh-HvVBkeg6 z>#9{Fb_?85wG>k32Qq?_t#Jl1Uez!I#`fC!Ehs@~eAQQC7AfyBF36MSISCL#*`b@{ z?DV_Qt{rS7PKC$uUMa{PcEE@j3~n`hUhMCh%8%}vMxh__@ikp`to*nQx@@VfN(-3h zL<>dM_4v_8s{0MtDsX)=)iKh4ToL?m-UvV9bzen)p*&S5B0!=V=*C z3++)B!r?@)gi{1j79WX^O*iwW??z;Dwb`TwJ0)%8qfF!r3Ll`GIJ!zuW}bgKwn3sH zF>V`(osTSO2FYMEuDDZ%6D^}{mUICNAwQYvz#?B#+k=L+WJ2rs!Y>EhYVG&xYS<*R zEKG#9XIqFd#Rs(m4FjMtu>#JBNU;>N7Z|088xKIbc75VV3)vq7%nK!NoR(q6t;RSa z+Fnkurhl1=w05z{#x*t8u#NV>Lqzleha7pd6S3)ZV+G`}#&{5wXMg!@fRlhYmx|OH zyek2lfrha5k&Qwzp|qY!aLIS#v))IwJewu`iC!QQu*dk-XM^FeUPgYKAWo_NGCqPJ z;2yjK3VG-llbZ1n@qtOOC%nM2+lNM5#nrmoD`7i7xJZdgh%q)Sh1G!pf1cy{)Cvr$ z{C+`6S2}0WwN|?MaN&g-qQ&_A{943Rb?}K5DeZKa-9tNOa{%=*lTS&~Qudc=^BdLB4^q2O&K_=z~79naanIcE$im zoT;Fp;qefxrpdlci7N**1E@!9)%av7-qUUiX8TKXzD!wB{7Qh{+*(mE)W9D!+fQEp zbwz}yDLbfgO-!y^0w;;hy4wth#YtNkk4&pDx-XlgQVpWsP-V|f&fc;cP?@IU*mPii z^N9duW7>ZhPDlVoRVQGg)dY2uc(4~Vzi>n27cvp+nwVAPXK&ht6WQ>B$pc~l^bJ-W&DPn zs|9ze3P5+Fk6)m1eXAnVpBYWp#eAPxn0<*==c|ryfqrEt$-q3GJbqROA`haA^PfCK zG9!}N_crsP*GUS@@-4PFW$bOaui-K^PpS%x&Hb7KiHUvj0tZRhHvUyfw4A;&heyZfc;e zIXbv>&5OmCre`$E!$m{{txKliOGom} z%CT1>6iU~kFwkM{2XB*q=4j=a57kPvzKk7;ewqFFepPHbPSQH7r-G$);tS6i>uJ_k| z)+$_7TojxU__}=9aviG=Xe}4IU&dXk&-)nfkF)fdf8izh&CY=McVAPsQ=Ad!4e1lI zL_oDUInB(_PMqhS&**Kn0&PoCEY48TIOBa8M2h&S`9rhOVqGF>ew;F77L60R$CW zfD;R6p#mB8W*d}IFWFw@PM54J%Dqcx5wkW2_omd(u8ZboX&|37_(w^r4h=C=sC+j6 zAg{kO6{afBOvRxc-HlymADtPdQ@t9_H89$+_>B>eh8c)^W#vlL&LO?TIDn=A@@hEE)$0L0u$A9bD9mG z*g@6c&$T-#g@hVoHFD0?C32=*4b%96iN*9?ID_pmELE8ILn_De?xmVXw6imDGw0kl z*n?p=Q${Y@HdeWJVXCnyRTHz7Na)gt$|cRjj*|M2xb-pm^_Z79=|ZMCBcYQrLrvdG zQX*sG9;D7TD@LTwY#FGZaU^z`R4;ya*p_Mv!Q(+<0B&ck7_2=CFEqu(6mHQar6d=V zsT!C>K3JyU%d_fhG?M!B&8jPIWke#fNu8Lz8*sc~8C(;-Tn7Az@O$y97q~R} zmiu69%g@(JhnOqWo!bG1%lSLa$qoWiFW|kp!}8g;6$p?BQQ9;!3@!qF*w9rd!+5Y^ zRsdR#xpJzQwk;raQ|0BD2%J(Co5(cBX~X-R-c8|1vI1nT(6F6Zm> zdRh`}#hb#IA^FJWCp!%g(hmFyu#H@9>v+O*#d@lt&-ED?rom?X@+bs0W1?q`=SGJWGV z^17%Km@4&g{Vv&RHle%t*?^Sz4K?mj&$m9}SH`Y9oY3XByCFn-WApj|o`q+bo*#YR z;^D+sLSUvyAtg4!2InpjqFtnqwr`RrK@7xWq_bwRwo}Gpl!Wh7CzeAr;$QK$Yt$vB z@qm#P*3Dp)*yKfGxiWN^2r%Gi2=pzqp5vps6PPY&p>fCzBHrRrvQooK0~n$)GB)DJ zG+fk!=0GvC)6|e(d^@>k6GWg*H31nPAWt^a$SCvgpklD7$zSK|k^4&`$Zkl~RZg}; z!)UU#=Bxmry^?bvf}l~gKPUHo+tR?JcVw?3WBtCy)iH!QE>aFDv?jF`6WZIw@XTx% zr!tFzAtZ;3KKqNV99#Qb>MMpXE9P=i0Ix`LWRe$6`!I#eCeDiX)df_8qbp(Yl3hSv zY>j?Iw#Cf6bXg1V`Ago+wZ%NDs1ilgj6|U5Cyt4>!*!TkGz>1Agrtft*&L3^Teh52kr|ry%2P>MKm;9M`YX?`C1v%8{BLdfEC&eS!9~BVb04-o@_LFfdhef|o?l<>(PKOG@ zKK+DZkX_dKC5W&^?9X8Nm-rdCw(b}3Mh>DpuftB!1(uclqk9!rUkpsdbqnJt_?qll zUZHF{z07&Ypd8Ou?n~KKY&=<|a-w<1!hO=d7e`KrYz&+Wa5m_TxXpaGiJlSV75f(E zr6em|A-eAUF_*gQ-6cAv{V@{xi}sfhgBt6VeRGMM=p#CwSBpl0#R$ZO;GTz@-RtdJ zT4@Y!vKkofWDY17mST;pjq_E?jg3Zi3A)ov>34hEtnbsOheX*_Kp11rcamV6b z(ulyTQQf>G2Zoh|m|%c!JXT0XY)_`IdABQxd^wiBa^h+*9XzBr9d$b#t`G$Zt%8LZ zFQYMpHx3)3LjG&TMYq-7hQbxc=!w9*Ch#Oid5$D`Y9Eg?U4{kAqFtm!HdLriK_+#6 zI~J)J)cAnJ@crG%p1#y`Vev%EtL^mTOp=I$2OFougR8ZdiW(SvWM%%^CUI~E1bINw zsk|5Bm>bEJK=m(SU6@=F%E?ngqIl{cVV?WV?W^Gj%s2Ls{a`RRlvq?o-hP)>zBHt} z=jP_i41P&TQG{(p1Y-?cEhz@%gk`@F@^yxCt5B~ia+DTmZ31|tX-pBR!(_;D){Ob=o2d}mHlN*Aoyh(I=woQ!s(jsUzDx<*^R z%EfWBLEcrV5;&Hm9fLP-g8;YG=Goa~M-K41mY6>m6w$+gd%v;frv zn0YSj6WIOw;OYv?vh|2O)V`$|%38*==Sgn}I(vyfQKllZOUCo@9>Otq8b*Xrqw8k& z6u2^H_hL92pV+;46|vqIE^Zt9BZ;=maa> zz?CUn85ENe`r;r@qje{p?X^!!WSo*;%sGwI(x#U8KDWH923lyI`f_z0@~g!#O5c&< zSU2x4h1)P%q1xW=H|%F32>f%ucIMu&bdP&oe0-q)+V4~U(!kc%@@FeDdf=&b54@DP z^IPYup3mnkqKF3xIr%ksS8yCtl31;w?R#(a#UEIv*zk2=uWOpP7;jx4M^jO)a| z7Ux}>rd&h2bvu7L#7D`3NFU&Wi*$n;ZPUM7+~m4)wf!xctgYL(hW47>u-xKHFsCC4 zgPa9kxCD(zM>aZ{kriajnAMkSMmAwEH^%ge0E*g7k#A`+H#CRrdk77RDpJk$7mTMG z=A1Hw7%M-DnYV6pX~&-DQx{_P`Z6grkT6ByP<}X#N+0L+P(Oh+UO$Yv^){Hj$jXXJ zyeE_VT;lX2D5em|w23dqajqlCZr!e)=!#G3wuf$r0tGgtbaAQ=&~W0`|1KiMU-`m0OI9-|^9)DYU zYzZU(DZ}(6SsF9)$VdUY4}A{-8!fV~I2dzIFQ4zp8hLmp$vliwVa0&=TbhLw7$zIw zqmr*TQkUF~8VMK3bXf8un|z%WdD5rmF#}IKmq*N7?l4W1t`wAlq{vCKlR*kl}lDkwL2mCFB#HD#^Wn-TH9Xj3P#F8A>TS zxj0p#d#(;C_cm{##Dp|9@gxH$$zQ464W3;Sx?=3;#)26P-{xCHJY6D5%WD@|0ZCtW z0!cI^<5Bf|jCt4%;J{?kX8W$0hpAb5Sut4ym4k@)i!y@@U547(yEO`5Ayr-*+?tY< z5I}gs^Jt|OryXxa8$=wH4ffeB@7G3t$2tBk8?J3N2NBsJ8bU0%EX_#L9CarSL>_{2 zfkmwxO_r#PKDl^wylm3;0>6g zfu8Gv%hTbqjw;&oex&{31+VZE)&ye|F z#-3vG*LX7aH2%iJ|I^;@O#GAZFMHH~SNlI+{&$FeCz}7#4tzY)e;WORcK%)ccb4=o zb%aN1?=ST~In)2O=_fMq*Ld2r!6T#hm~Z}BL z`;WZ#`#itbGJnmZ^hiJcTV?b648Ql({+a>xk?ee$;m;1+|Nq`;;D4(A!9e}Alzq+x#sE5_qrC*U9D`bnPj{vTtCNA&;z literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1014_Vector.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1014_Vector.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d5ee5620674d3613b47c74044694478a0af1c0c5 GIT binary patch literal 10217 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Template/1016_FirstBet.xlsx b/gamesrv/slotspkg/external/excel/Base/Template/1016_FirstBet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9d074c1bf74ef9437bc37fc570da5ef861249a61 GIT binary patch literal 9568 zcmeHNg;!Kt+aDNOx*I_{1?iGb>5vBL?gj-$36XMuK}wPC&LO0`K^h53i2-R4_~yp@ z>gC?=FL>`>YxbF0`~04D&YtJ@m0B8UJfEJL4x#MSx003Yi0{{d7G(0W+ zaHKdpDbM%JTzhhSkYbd+@y_@jBSq_xv%a6+KAciSdRgqdKltOm-;$jNk&s>JC6(9KH=UUNR(CnZ$@Jh&X0-tZbVO3%aO3KYpP>MZE2{ohqlS zZo=u5A`wapQlCMLIO5^o*p>OJCVDu26wU3q{PxyR{Z z-do>GB+~mK%JeQH-7Z%C%c8e~-Ai!Yy1fMg)c-C#b2rm7@n2 z=Wp}B#QYy-<1epX3|3JFa^r@*ADqLW9_ ztm_|VPQ)XNS2JI6GTa7}ddcf{fy5e&>;&}^-AN6Om2e6fj1t$W!j{O@hj_b&70^UH zfSKawO&3l40xD&81O6_3IS<(4a%G0&^v~mFrM?~UW$J#+p>HdH(Z3zhe??~jq-HX> z{;&me7}M00V+c(Frf*#A3L;lGWy^XH1T7@X1#UiU;=#$&bLQ&HJmanqvlxClB7i^q zrSkG0DMR`)?mZO{04PNT0C3=U_&Rd=xVSr*ySO;~=FhTq=AE-1;yyREyG6K22cdsN zNYoudcFL)ZoO8ayXK`;sDnik+ATKPuZLvVxW+>9Bm3RbCjF~7ps=lE-L19r&DgA(IGi&nQBr`qHf?_bD{!E2 zHEJVU7?**g6^xNgfUMk5S*WQA)+Wng-Go@ozfUC4&A_IOyE2R5wc<{XtRJ@fD2%Hp zq#^OCUr+zU)~^Z2NOeuxIHjUjIk?^?tzeUwkj#%VtptO%Pb|EgLX?*r{V~qXOjz6Y z5>jsZ({*-8CVqi1z_#c?Gr{9pj;P1k8M8xeFBD1{wh1Qq7AnDCNc8;-*`Ut;MjRe-I;GK9&<4#{O9EMD` zrRRP2p$fs$YE;>|G#lZ}X2L_^iq8*3Cs7cu68l~fa%iUC$@Y#?35}T+tgbM6dP2ZOsBm4Q?7tQ)j~B-4+dCdYL?Xt2h}}&}P$w z5}u5x=C@^63c@J{5#s78-U)Q|Ps9QYp7=ki!I_^LtsAaANI?zvrOfeB}e_+Xqu?9yD} zgrSLB_ogs4io5_}`MLmMRZcEv&eLPD4~y)u%v%1S=qV6LV(G-H;!P>_<>&Zp8 ztFwcH)>q9k&q({|#qkmaE7VwTN|_7j66OaR>hV6~!(IgvoV2m!N8%&-6F9;|kX?q3 zhJa}1dnME$d1M0o-ETWZd-t$YJO~=Z!M*J72?aOKnHk8!vvTQVjvL0qc=)f#T&7RZkYUjXH`5 zI;2R6r2ycVPP7#ex;UxAWTG#RsUeDohNh*pf_pAD)v8|d8_omj0q7+|ieHVAH0=F= zk+TXuqpPYV(dO8uLt%5nfTGL$4BM^`NwvCUl!sppE_94~aR{>WEwR`xl9@~Jgx@$l z5Dxgr@&ZSdyK2#kcDhiy(?DTGRV)E1(xynI2+L4;@QO4q3RV8)G%jq7ZlY|7nWZhd z7V3=$-kv>jy3`WRi858JyI2Z+tz~b<6^O8;-Vv)GDgSip01Fa`%iq%eW0PlARa@vH zRg}oIpI84?m$@kVM14fZc1I>=yd55s71U@sB*;>{2uXLwhKMxZqcWn(TxKh9>TJXX z0rkq6TCny80lywN8KJm5?@@9xMPsxw4tQPrc=>gdNJThe_Fx|?^|LpR&*)yn;2#$r zzIZXlb_Kby24UFO#_u63{^c7Cvv-dE{9@@@$G(gbWY%*Tm&X@Pi z96CPLE^X7tkCxl^{T>WC9~LgTX>#^8oR%n7p^5mq;uS>M_0n$j>y()>OH=YKPdU99 zu*a~wgnzI36I=yuZ-1W>z+)Kg_X)#HWdnoLhKVqlCQs?irJl0o*85+@5HVGA&!xXV zI=ni}`cAUhZU!2&hYnkQW6tYb8r)i$oJv?|;H?#VjIvomAuV5&Zkw;mUm+j-Y;A?w zD@SiKa&}}t0c7H)(3`du^cn>nMR<$8RuCbI>w7y3^1A9(yIpi|T1M(^03vC+%u03T z&cuTT*s})OhAtGd>Vl-B6b`@b$1=v=&4POa+l^YM*WqeEA6zs>5~E!LQ??A>9Z&>{ z7~SqpyeGMZE|=;J5=KwX-`aMPUA#v9aQmV}kw@qQHcGSQk{3b}+Ko2GJ1e#eRb4$E zU6m5IjOW!M9wGNms9nVk;m#=h7?lL8UP3Uk(daR^#%^!!souWq57eb0$dB9%jXr}H z(W_V>QmxaiEa8mE2HDeXnG;-*B$>4#ihs%ywsRTktx*5~E%++IAFT7VwQ{oJ`hEVL zaJ%|L&J+T;EhJkaxB+VHvtVUxh?Srrnrw z$QOU+ITVFplkq&a)J&C-CaLf>B?AL(M<$d@5-LZIv#&o!T*ILLdy@U5w0Pj}#YEa% zPZ4D*0GSWGA>)@6-OB%ENEAX5$5-CKzZLptH>GxJbt8d&Dm z(&T#egwl4rbM{&JSbia%JDtdr4Cz4wgoD@T8XrW}5zO^ieaA3ZHwcOyO^n+px)^gI zyBvEv$!Zm4Gq};ZSZa7U)=!F>4UYOxqgoIi)Nv#$&CP9NkO@~5S}3em*%Y`9@x8*mGa0oy3M?N95?46AvX~8}?Q9}5Tb)VdNEJq*HFBj5f z5DD`b0|uk;6x)VP(lbd@N)h_F3gZ$wp!mLA9;av|>wG4cy6X? z#4px2N3JD$Ga6*LS^~e%S21z5Tppjnr~{S_5pntt#8qC))b--cZL(}xV}4aqMOh6L zxkS$$#!dq`;cS;GQ7)IDTZEqyY>rQrD$bp4hjfeG9@0B4q z+nO-kJL}Qkwc+fxS`hCJ7ym+)CRDl?TmMq!{sFgSsQRox3kW>XM2EZ*^>+ zIw!{1$BwyvO*(X6W3qeF0W3}>7{a?$Ev)nKQ*a? zRVsd?3(b5$GnD%7h{ruORv2B?qim2@xqk*{4NZzLORO~TznC5Ez z)v=Uocz2A#5n#-vJ2QVy^;*U56ly-mto_xe%hzAnscmdc`E@!0gD=^>sh)4$q2T-j z+?_Y5BaP6j(tVWM3uq&I(ujf6CNgo#nxCm7bj{N)UNk$3Dj)rUK+bkN10}Hr4zUW* zCAWTdG=b@$hIt>GlXzxV5>ynMuY`@CCLL?c_rR3>-gt$KP}0NsWUEJkV1nu)LB)?l z{PE9>M=)!t6^gz6ER&}Dt5%|-k_jyy1*wvi*df|j)q1b*z0)btRvy|Y)aA=e*4)hJ z*CGq7&nIUeE=D&-1ARd*UI@lB9>A_bx27NWuJbsWIW_T8Id7Vb`vuTZ>FcVhLOy2cjuw|q z0SQ-|h%lcOhnCr4nTp!%pQw{oSV9Y240a>P|Xi0DQSz2RC9r|1qq;$N!?Yb5;NF_9sF7)u+ z;$-A)Tf5C^US4_SgT(O?T}7U;f?fm{@j5vj^>Yl%jwf=JV-A;EK$z;8>x58FhcXs ztGku-`jWje+KNWWh83u5apf(gAz06AQJF*31wLmp15tcq9+c#+Js zcU)lGbHr{}-(#cF!~O7Naq}X|SZ}7nt6}2g9Xa^aGVP$+ZO>hg z`Hc=^lfkFa0JVkREqwmdk*hQRch?6l@s`y$7qtHza1bB#8O^ZE+j<=yHrQ z(X%LaC7-(9iV8rda>Rf}nFHX>T^}d`4=wM~1BCBx3X(EE4kY)Zh4AeZFdNrZ#nZZT zbZg}rOxRMF5pca2-nHmlruQ%4GcUlDzFvw!a}e1P812#=K4Mkgr_wI1VP@5@`+76K zNwf5+x>0v>GQ)RMkW|>P$mf%mdw$C!{GRNu9!A+phV(v{=f!z(;_xsuId`s&WZYE&jKPM)shnV$HAWNjGZ-&t1kVh`g{zU4#|oE z`t+nJp%Z>0uVgNtg-@#hZn^USKWMz@!U=_?m^>s^{16M$1u}IQ`1j>bd~((?cCo*m zX4p4s$BDc|Z~4@Cb#X$lF!CPTptzyjXs`Er79rG-B;Uv)*8!U@@ZhTFrOTSh%?%$K zv@3S6Z}ubNSmx}#okpDpSfFEYI(ZbIotffowpTAKuO%NfHoh!?z!D$DbTJ{WU!gd zM=w1XV?$`;?2$DmeM?9L4lVJV-fYD3{Hry-g?AC8Y&B^v?}9dNdyeyT3K(a~aT3}k znGiw~LKh|kLyxMyUQ;s@%QvtApJ6<*+?rpc>R@Lb#?Moan3Om0&^24HC$P_+Aq&lQ z#~-jRZg3u5H@dH+^UWDd`K{j%F)q16jFH=oBrjn`ufC?w3%r%wfcfXm+4st0<{eJc+f%U13wMdcXvXL(5 zS=e&$ne=W<`zPi;({Rnwmj^;kTEqiMZ))OVOlx4jhv;_;=1qcPsT%O@vxaXU9=v8@ z>0+Vo?&9jfW#Qs(^=Cip-%jJ^X${oLD;K;Yqea};?uUy%j!fAHZ_by>7^CjNQQqJzf0q>h&w6ous2bS+e5heC(P~s5=n-h`Pf5=MO6E@0d6)qIy zU_%zNZ_U(kd!ERhUfJIoU%*Ss)Qa*x+p*s>277p$&|(1lenE7T)Wt?A4_G*eFQAy^ zDkGp3oz{cBO+%Hci{s%W5HCG04NKwLt{=OVEDWEX*~X2s>s)@PRpDw=Vw#L4$2Iyi zS=GD8arkm0L)?HHZ3i0jP0^;~D)w-GAvd@@94-^^z`&q5A_}U zc+wZMUp3XiOb6>YuRx*==N|;I`W8Mw1k>{@h3MWR$ZlSJw;}xJLdarv2x}l0 z&Zi1?{2BbHD!p712VXDO`EQTEzmR{18nF$bwFy zuArB_aTddigiR(&fmgMi-$!AX`Y=Jet*YD{Ee_KrW5?%+kk!F}EFyJiPSX@?{T6FK zCqG8?va|+0RH)Evv^ue2xkGo5h*VUqyAqK=<6t_ZUdmQFH3VBDGK>+6)t&auC2f~? zXQfEQ%qn4VNJg7xyZ!WKZc%hB;o8@wrQ6%Px^5h zZr%b4wu%f)f;rzW)%0wuX53^eS7tZ${&H{6Vd>P=AVy8@!tFh^`$K{sCrAA@@c-oR z4#{}Y4V4|P$=Gm<3O^(8i$(SF@N{wdSDF8#$^bz2+mYXFY7e{>C*3Eel9FpEG8c2B zCn?G-=)+|PB}&Pr-}a2SZ6p&8N9FPl45ayR<_F8!dCKiCUpkawiGoN2j8)EsO71^8 zXmT>c6tys%t;qt50-2m!g+Dbb($u8X*8&CJODn{OysVkPpzXjms_yow@Kh|Twk=^h zp)P2lAuS_HMNT5diz0~_>SjgAbD=z6D~UNR>s76&N}qL7i=P;p;5zTy38jK!HhtF6 znZ}E`KTA)9>8jpN{{({DLmCg(R?&3)5+abEihf|pw(#vt4F`LEXb^Jr&|9RG>eBY< z*JJbIVe}X@OvI(dQJi)LY%NbLEl;=eJQd%Hh9d9B-6XUe#JqOoAO~nvQGEpWVuGjS zn-n>#<5VoDIL{x|z~9_90wM=I!ujW;C_ne~k8l5QFy*d*zqZPM74Q*mgMVq9-v!=n z82*G#!fR@G+J|?+f9;X{gaQE67{7!6pN`30Id==^KP72k{`VpNRz|-o8;9ehM%l{$0S&1nw^MZs7V88c+5I^llh?SHfRox1V?bV4NHP_**1* z7yeh5`zzdl>KFK*4)`wmuV(I7H2wWw&=&tSdg{u^aP|1@SjIg-8{9U&ru*&J{{ekd B1I_>d literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Settings.xlsx b/gamesrv/slotspkg/external/excel/Settings.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3e6ee1da9acc14fca47d9a2289e011cbae876419 GIT binary patch literal 9192 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel2lua.bat b/gamesrv/slotspkg/external/excel2lua.bat new file mode 100644 index 0000000..65755ca --- /dev/null +++ b/gamesrv/slotspkg/external/excel2lua.bat @@ -0,0 +1,2 @@ +converter.exe lua ./excel ./Client_Config/Config .. +pause \ No newline at end of file diff --git a/gamesrv/slotspkg/internal/dao/dataset/a_debug.go b/gamesrv/slotspkg/internal/dao/dataset/a_debug.go new file mode 100644 index 0000000..d01e648 --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/dataset/a_debug.go @@ -0,0 +1,31 @@ +//go:build debug +// +build debug + +package dataset + +import ( + "encoding/json" + "os" + "path/filepath" + "qstar_server/internal/exported/excel2go/storage" + "qstar_server/internal/generic/global" +) + +func init() { + path := filepath.Join(global.LogDirectory, "go2json.data") + if _, err := os.Stat(path); err == nil { + data, err := os.ReadFile(path) + if err != nil { + panic(err) + } + + var dataMap = map[string]string{} + if err := json.Unmarshal(data, &dataMap); err != nil { + panic(err) + } + + storage.StoragesLoading(dataMap) + } else { + panic(err) + } +} diff --git a/gamesrv/slotspkg/internal/dao/dataset/dataset.go b/gamesrv/slotspkg/internal/dao/dataset/dataset.go new file mode 100644 index 0000000..305887d --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/dataset/dataset.go @@ -0,0 +1,220 @@ +package dataset + +import ( + "github.com/mohae/deepcopy" + "github.com/tomas-qstarrs/boost/cast" + "github.com/tomas-qstarrs/boost/stringx" + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/storage" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "strconv" + "strings" +) + +type SubStorage = map[string]map[string]interface{} +type Storage = map[string]SubStorage + +func init() { + Load(nil) +} + +func Load(configMap map[string]string) { + if configMap != nil { + storage.StoragesLoading(configMap) + } + storage.StoragesMapping() + storage.LinksMapping() + storage.CategoriesMapping() +} + +func Duplicate() Storage { + return deepcopy.Copy(storage.Storage).(Storage) +} + +func DuplicateOrigin() Storage { + return deepcopy.Copy(storage.OriginStorage).(Storage) +} + +type ( + // DataSet is the type of group data + DataSet struct { + Category string + SubStorage SubStorage + } +) + +// Base returns Base data for data that cannot be group by +func Base() *DataSet { + return NewDataset(key.Base, storage.Storage) +} + +// NewDataset returns data set by player platform & Group +func NewDataset(category string, storage Storage) *DataSet { + subStorage, ok := storage[category] + if !ok { + subStorage, ok = storage[key.Base] + if !ok { + panic(errors.ConfigCategoryNotFound.ErrorWith(category)) + } + } + ds := &DataSet{ + Category: category, + SubStorage: subStorage, + } + return ds +} + +// getSheet gets sheet config data by path & sheet +func (ds *DataSet) getSheet(path string, sheet string) (interface{}, error) { + excel, ok := ds.SubStorage[path] + if !ok { + return nil, errors.ConfigExcelNotFound.Origin() + } + v, ok := excel[sheet] + if !ok { + return nil, errors.ConfigSheetNotFound.Origin() + } + return v, nil +} + +func (ds *DataSet) ExistSheet(path string, sheet string) bool { + _, err := ds.getSheet(path, sheet) + return err == nil +} + +// GetSheet gets sheet config data by path & sheet +func (ds *DataSet) GetSheet(path string, sheet string) interface{} { + v, err := ds.getSheet(path, sheet) + if err != nil { + panic(errors.ConfigSheetNotFound.ErrorWith(path, sheet)) + } + return v +} + +// GetDefaultSheet gets default sheet config data by path & sheet +func (ds *DataSet) GetDefaultSheet(path string) interface{} { + v, err := ds.getSheet(path, key.Default) + if err != nil { + panic(errors.ConfigSheetNotFound.ErrorWith(path, key.Default)) + } + return v +} + +// GetKeySheet gets sheet config data by path & key sheet +func (ds *DataSet) GetKeySheet(path string, originSheet string, keyName interface{}) interface{} { + sheet := stringx.Merge(originSheet, "/", cast.ToString(keyName)) + v, err := ds.getSheet(path, sheet) + if err != nil { + panic(errors.ConfigSheetNotFound.ErrorWith(path, keyName)) + } + return v +} + +// GetDefaultKeySheet gets default sheet config data by path & key sheet +func (ds *DataSet) GetDefaultKeySheet(path string, keyName interface{}) interface{} { + sheet := stringx.Merge(key.Default, "/", cast.ToString(keyName)) + v, err := ds.getSheet(path, sheet) + if err != nil { + panic(errors.ConfigSheetNotFound.ErrorWith(path, keyName)) + } + return v +} + +func (ds *DataSet) ExistMachineSheet(dir string, excel string, originSheet string, class int64) bool { + path := stringx.Merge(dir, "/", excel) + sheet := stringx.Merge(originSheet, "/", strconv.FormatInt(class, 10)) + if _, err := ds.getSheet(path, sheet); err == nil { + return true + } + sheet = originSheet + if _, err := ds.getSheet(path, sheet); err == nil { + return true + } + return false +} + +// GetMachineSheet returns machine sheet config by class +func (ds *DataSet) GetMachineSheet(dir string, excel string, originSheet string, class int64) interface{} { + path := stringx.Merge(dir, "/", excel) + sheet := stringx.Merge(originSheet, "/", strconv.FormatInt(class, 10)) + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } + sheet = originSheet + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } else { + panic(errors.ConfigSheetNotFound.ErrorWith(dir, excel, class)) + } +} + +// GetMachineDefaultSheet returns machine sheet config by class +func (ds *DataSet) GetMachineDefaultSheet(dir string, excel string, class int64) interface{} { + path := stringx.Merge(dir, "/", excel) + sheet := stringx.Merge(key.Default, "/", strconv.FormatInt(class, 10)) + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } + sheet = key.Default + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } else { + panic(errors.ConfigSheetNotFound.ErrorWith(dir, excel, class)) + } +} + +// GetMachineKeySheet returns machine key sheet config by class +func (ds *DataSet) GetMachineKeySheet(dir string, excel string, originSheet string, class int64, keyName interface{}) interface{} { + path := stringx.Merge(dir, "/", excel) + sheet := stringx.Merge(originSheet, "/", strconv.FormatInt(class, 10), "/", cast.ToString(keyName)) + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } + sheet = stringx.Merge(originSheet, "/", cast.ToString(keyName)) + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } else { + panic(err) + } +} + +// GetMachineDefaultKeySheet returns machine key sheet config by class +func (ds *DataSet) GetMachineDefaultKeySheet(dir string, excel string, class int64, keyName interface{}) interface{} { + path := stringx.Merge(dir, "/", excel) + sheet := stringx.Merge(key.Default, "/", strconv.FormatInt(class, 10), "/", cast.ToString(keyName)) + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } + sheet = stringx.Merge(key.Default, "/", cast.ToString(keyName)) + if v, err := ds.getSheet(path, sheet); err == nil { + return v + } else { + panic(err) + } +} + +// GetMachineExcel returns machine excel config by class +func (ds *DataSet) GetMachineExcel(dir string, excel string, class int64) map[string]interface{} { + path := stringx.Merge(dir, "/", excel) + excelData, ok := ds.SubStorage[path] + if !ok { + panic(errors.ConfigExcelNotFound.ErrorWith(path)) + } + finalExcelList := make(map[string]interface{}) + for sheet, sheetData := range excelData { + parts := strings.Split(sheet, "/") + + if len(parts) == 1 { + if _, ok := finalExcelList[parts[0]]; !ok { + finalExcelList[parts[0]] = sheetData + } + } else if n, err := strconv.ParseInt(parts[1], 10, 64); err == nil { + if n == class { + finalExcelList[parts[0]] = sheetData + } + } else { + panic(errors.ConfigSheetNotFound.ErrorWith(path, sheet)) + } + } + return finalExcelList +} diff --git a/gamesrv/slotspkg/internal/dao/struct/struct.go b/gamesrv/slotspkg/internal/dao/struct/struct.go new file mode 100644 index 0000000..e284ef4 --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/struct/struct.go @@ -0,0 +1,38 @@ +package _struct + +type EnterReq struct { + TraceId string `form:"tid"` + ThirdName string `json:"tn"` + OperatorPlayerSession string `json:"ops"` + GameId int64 `json:"gid"` + Ts int64 `json:"ts"` + IsSimulator bool `json:"is,optional"` +} +type BetConfig struct { + BetChangeList []float64 `json:"bcl"` + BetSize []float64 `json:"bs"` //单注 + BetLevel []int64 `json:"bl"` //下注线数 + BetLines []int64 `json:"bi"` //可选线数 + BetType int `json:"bt"` //total计算方式 1.显示成Lines betSize*betLevel*lines (lines) + BetSizeIndex int64 `json:"bsi"` //选中的单注下标 + BetLevelIndex int64 `json:"bli"` //选中的等级下标 + BetLineIndex int64 `json:"bii"` //选中的线数下标 +} +type TableInfo struct { + Coin float64 `json:"c"` + BetConfig BetConfig `json:"bc"` +} +type EnterResp struct { + TableInfo TableInfo `json:"ti"` + Token string `json:"token"` +} +type SpinReq struct { + TraceId string `form:"tid"` + GameId int64 `json:"gid"` + BetSizeIndex int64 `json:"bsi"` //选中的单注下标 + BetLevelIndex int64 `json:"bli"` //选中的等级下标 + BetLineIndex int64 `json:"bii"` //选中的线数下标 + Platform string `json:"plf"` + BetMode int64 `json:"bm,optional"` //0.常规 1.必中 + Ts int64 `json:"ts"` +} diff --git a/gamesrv/slotspkg/internal/dao/thinkingdata/filter.go b/gamesrv/slotspkg/internal/dao/thinkingdata/filter.go new file mode 100644 index 0000000..9021f48 --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/thinkingdata/filter.go @@ -0,0 +1,69 @@ +package thinkingdata + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "reflect" + "strings" + + "github.com/tomas-qstarrs/boost/mathx" +) + +var playReasons = []string{ + key.ReasonSlotsBet, + key.ReasonSlotsWin, + key.ReasonAirplaneSettle, + key.ReasonAirplaneJump, + key.ReasonAirplaneBet, + key.ReasonMinesSettle, + key.ReasonLuckyWheelBet, + key.ReasonLuckyWheelWin, + key.ReasonPlinkoBet, + key.ReasonPlinkoWin, +} + +func filterEvent(ctx *shared.LogContext, typ string, body interface{}) bool { + if reflect.TypeOf(body).Kind() == reflect.Pointer { + body = reflect.ValueOf(body).Elem().Interface() + } + + switch body := body.(type) { + //case CoinChangeSettle, CoinChangeBet, MinesOpen: + // return true + // + //case SlotsPlay, LuckyWheelSettle, MinesBet, MinesSettle, PlinkoSettle: + // if (ctx.GetSrv().GetSessionBranch() == key.BranchBlaze.Val() || ctx.GetSrv().GetSessionBranch() == key.BranchBet365.Val()) && + // ctx.GetChar().RechargeTimes == 0 && + // ctx.GetBook().Coin < 2000000 { + // return true + // } + + case CoinChange: + if (ctx.GetSrv().GetSessionBranch() == key.BranchBlaze.Val() || ctx.GetSrv().GetSessionBranch() == key.BranchBet365.Val()) && + ctx.GetChar().RechargeTimes == 0 && + ctx.GetBook().Coin < 2000000 { + if mathx.In(body.Reason, playReasons) { + return true + } + return true + } + } + + return false +} + +func typeName(v any) string { + typ := reflect.TypeOf(v) + var name string + if typ.Kind() == reflect.Ptr { + name = typ.Elem().String() + } else { + name = typ.String() + } + parts := strings.Split(name, ".") + if len(parts) > 0 { + name = parts[len(parts)-1] + } + + return name +} diff --git a/gamesrv/slotspkg/internal/dao/thinkingdata/formatter.go b/gamesrv/slotspkg/internal/dao/thinkingdata/formatter.go new file mode 100644 index 0000000..2b56433 --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/thinkingdata/formatter.go @@ -0,0 +1,270 @@ +package thinkingdata + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "reflect" + + "github.com/tomas-qstarrs/boost/timex" + + "github.com/fatih/structs" + "github.com/gofrs/uuid" + "github.com/tomas-qstarrs/boost/cast" + "github.com/tomas-qstarrs/boost/stringx" +) + +var tagName = "json" + +func formatEvent(ctx *shared.LogContext, typ string, body interface{}) { + if global.Mock { + return + } + + if filterEvent(ctx, typ, body) { + return + } + + ctx = safeCtx(ctx) + + ctx.Identifier.SeqID = global.ProcessSeqID.Add(1) + ctx.Identifier.LogID = uuid.Must(uuid.NewV4()).String() + + //formatter := NewFormatter() + //properties := &Properties{ + // Header: formatter.FormatHeader(ctx, typ, body), + // Super: formatter.FormatSuper(ctx), + // Body: formatter.FormatBody(body), + //} + // + //global.TALogger.WithFields(properties.ToMapStructure()).Info("") +} + +func formatUser(ctx *shared.LogContext, typ string, body interface{}) { + if global.Mock { + return + } + ctx = safeCtx(ctx) + + //formatter := NewFormatter() + + //properties := &Properties{ + // Header: formatter.FormatHeader(ctx, typ, body), + // Super: nil, + // Body: formatter.FormatUserProperties(ctx, body), + //} + // + //global.TALogger.WithFields(properties.ToMapStructure()).Info("") +} + +type Properties struct { + Header *Header + Super *Super + Body interface{} +} + +func (p *Properties) ToMapStructure() map[string]interface{} { + fields := make(map[string]interface{}) + if p.Header != nil { + stHeader := structs.New(p.Header) + stHeader.TagName = tagName + for _, f := range stHeader.Fields() { + fields[f.Tag(tagName)] = f.Value() + } + } + + properties := make(map[string]interface{}) + + if p.Super != nil { + stSuper := structs.New(p.Super) + stSuper.TagName = tagName + for _, f := range stSuper.Fields() { + properties[f.Tag(tagName)] = f.Value() + } + } + + if p.Body != nil { + stBody := structs.New(p.Body) + stBody.TagName = tagName + for _, f := range stBody.Fields() { + properties[f.Tag(tagName)] = f.Value() + } + } + + for k := range fields { + if v, ok := properties[k]; ok { + fields[k] = v + delete(properties, k) + } + } + + fields["properties"] = properties + + return fields +} + +// Formatter formats logs into text with seps. +type Formatter struct { +} + +func NewFormatter() *Formatter { + return &Formatter{} +} + +func (f *Formatter) FormatHeader(ctx *shared.LogContext, typ string, body interface{}) *Header { + var eventName string + if reflect.TypeOf(body).Kind() == reflect.Ptr { + eventName = stringx.PickLast(reflect.TypeOf(body).Elem().String(), ".") + } else { + eventName = stringx.PickLast(reflect.TypeOf(body).String(), ".") + } + + var ( + accountID string + distinctID string + ) + if ctx.UID > 0 { + accountID = cast.ToString(ctx.UID) + } else if ctx.GetSessionContext().GetUID() > 0 { + accountID = cast.ToString(ctx.GetSessionContext().GetUID()) + } + + if accountID == "" || distinctID == "" { + accountID = "system" + distinctID = "|" + } + + header := &Header{ + AccountID: accountID, + DistinctID: distinctID, + Type: typ, + Time: timex.Now().Format("2006-01-02 15:04:05.000"), + EventName: eventName, + UUID: uuid.Must(uuid.NewV4()).String(), + } + return header +} + +func (f *Formatter) FormatSuper(ctx *shared.LogContext) *Super { + return &Super{ + // Common + ZoneOffset: timex.Zone() / 3600, + + // Log + ContextType: ctx.Identifier.GetContextType(), + LogType: ctx.Identifier.GetLogType(), + GroupID: ctx.Identifier.GetGroupID(), + BatchID: ctx.Identifier.GetBatchID(), + SeqID: ctx.Identifier.GetSeqID(), + LogID: ctx.Identifier.GetLogID(), + ProcessID: ctx.Identifier.GetProcessID(), + SessionID: ctx.Identifier.GetSessionID(), + + // Game + Contest: ctx.Game.GetContest(), + ContestType: ctx.Game.GetContestType(), + RoomID: uint64(ctx.Game.GetRoomID()), + RoomType: ctx.Game.GetRoomType(), + RoundID: ctx.Game.GetRoundID(), + Branch: ctx.Game.GetBranch(), + + // Srv + Runtime: ctx.Srv.GetRuntime(), + Version: ctx.Srv.GetVersion(), + SessionVersion: ctx.Srv.GetSessionVersion(), + SessionBranch: ctx.Srv.GetSessionBranch(), + Cluster: ctx.Srv.GetCluster(), + + // Cli + CliPlatform: ctx.Cli.GetThirdName(), + CliLanguage: ctx.Cli.GetLanguage(), + + // User + Nickname: ctx.User.GetNickname(), + Avatar: ctx.User.GetAvatar(), + CPF: ctx.User.GetCPF(), + PixType: ctx.User.GetPixType(), + PixAccount: ctx.User.GetPixAccount(), + Name: ctx.User.GetName(), + PhoneNumber: ctx.User.GetPhoneNumber(), + + // Char + Category: ctx.Char.GetCategory(), + Group: ctx.Char.GetGroup(), + GroupBatch: ctx.Char.GetGroupBatch(), + CreateTime: timex.FormatTime(timex.Time(ctx.Char.GetCreateTime())), + LoginTime: timex.FormatTime(timex.Time(ctx.Char.GetLoginTime())), + LastLoginTime: timex.FormatTime(timex.Time(ctx.Char.GetLastLoginTime())), + ProcessTime: timex.FormatTime(timex.Time(ctx.Char.GetProcessTime())), + LastProcessTime: timex.FormatTime(timex.Time(ctx.Char.GetLastProcessTime())), + Newbie: ctx.Char.GetNewbie(), + Novice: ctx.Char.GetNovice(), + NetworkPromotion: ctx.Char.GetNetworkPromotion(), + ActiveDays: ctx.Char.GetActiveDays(), + FirstRechargeTime: timex.FormatTime(timex.Time(ctx.Char.GetFirstRechargeTime())), + LatestRechargeTime: timex.FormatTime(timex.Time(ctx.Char.GetLatestRechargeTime())), + RechargeTimes: ctx.Char.GetRechargeTimes(), + RechargeCurrency: ctx.Char.GetRechargeCurrency(), + + // Book + Coin: ctx.Book.GetCoin(), + + // Agg + AggSlotsDailySpins: ctx.Agg.GetSlotsDailySpins(), + AggSlotsDailyWin: ctx.Agg.GetSlotsDailyWin(), + AggSlotsDailyBet: ctx.Agg.GetSlotsDailyBet(), + } +} + +func (f *Formatter) FormatBody(body interface{}) interface{} { + return body +} + +func (f *Formatter) FormatUserProperties(ctx *shared.LogContext, body interface{}) interface{} { + switch body.(type) { + case *UserBase: + //body = f.formatUserBase(ctx) + } + return body +} + +func (f *Formatter) formatUserBase(ctx *shared.LogContext) *UserBase { + return &UserBase{ + // Cli + CliPlatform: ctx.Cli.GetThirdName(), + CliLanguage: ctx.Cli.GetLanguage(), + + // User + Nickname: ctx.User.GetNickname(), + Avatar: ctx.User.GetAvatar(), + CPF: ctx.User.GetCPF(), + PixType: ctx.User.GetPixType(), + PixAccount: ctx.User.GetPixAccount(), + Name: ctx.User.GetName(), + PhoneNumber: ctx.User.GetPhoneNumber(), + + // Char + Category: ctx.Char.GetCategory(), + Group: ctx.Char.GetGroup(), + GroupBatch: ctx.Char.GetGroupBatch(), + CreateTime: timex.FormatTime(timex.Time(ctx.Char.GetCreateTime())), + LoginTime: timex.FormatTime(timex.Time(ctx.Char.GetLoginTime())), + LastLoginTime: timex.FormatTime(timex.Time(ctx.Char.GetLastLoginTime())), + ProcessTime: timex.FormatTime(timex.Time(ctx.Char.GetProcessTime())), + LastProcessTime: timex.FormatTime(timex.Time(ctx.Char.GetLastProcessTime())), + Newbie: ctx.Char.GetNewbie(), + Novice: ctx.Char.GetNovice(), + NetworkPromotion: ctx.Char.GetNetworkPromotion(), + ActiveDays: ctx.Char.GetActiveDays(), + FirstRechargeTime: timex.FormatTime(timex.Time(ctx.Char.GetFirstRechargeTime())), + LatestRechargeTime: timex.FormatTime(timex.Time(ctx.Char.GetLatestRechargeTime())), + RechargeTimes: ctx.Char.GetRechargeTimes(), + RechargeCurrency: ctx.Char.GetRechargeCurrency(), + + // Book + Coin: ctx.Book.GetCoin(), + + AggSlotsDailySpins: ctx.Agg.GetSlotsDailySpins(), + AggSlotsDailyWin: ctx.Agg.GetSlotsDailyWin(), + AggSlotsDailyBet: ctx.Agg.GetSlotsDailyBet(), + } +} diff --git a/gamesrv/slotspkg/internal/dao/thinkingdata/structs.go b/gamesrv/slotspkg/internal/dao/thinkingdata/structs.go new file mode 100644 index 0000000..9e31caa --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/thinkingdata/structs.go @@ -0,0 +1,377 @@ +package thinkingdata + +type ( + Header struct { + AccountID string `json:"#account_id"` + DistinctID string `json:"#distinct_id"` + Type string `json:"#type"` + Time string `json:"#time"` + EventName string `json:"#event_name"` + UUID string `json:"#uuid"` + EventID string `json:"#event_id"` + } + + Super struct { + // Common + ZoneOffset int64 `json:"#zone_offset"` + + // Log + ContextType string `json:"context_type"` + LogType string `json:"log_type"` + GroupID string `json:"group_id"` + BatchID string `json:"batch_id"` + SeqID int64 `json:"seq_id"` + LogID string `json:"log_id"` + ProcessID string `json:"process_id"` + SessionID int64 `json:"session_id"` + Contest string `json:"contest"` + ContestType string `json:"contest_type"` + RoomType string `json:"room_type"` + RoomID uint64 `json:"room_id"` + RoundID int64 `json:"round_id"` + Branch uint32 `json:"branch"` + + // Srv + Runtime string `json:"runtime"` + Version string `json:"version"` + SessionVersion string `json:"session_version"` + SessionBranch uint32 `json:"session_branch"` + Cluster string `json:"cluster"` + + // Cli + CliPackage string `json:"#bundle_id"` + CliVersion string `json:"#app_version"` + CliResVersion string `json:"cli_res_version"` + CliPlatform string `json:"cli_platform"` + CliOS string `json:"#os"` + CliDevice string `json:"#device_model"` + CliDeviceID string `json:"#device_id"` + CliZoneOffset string `json:"cli_zone_offset"` + CliIntranetIP string `json:"cli_intranet_ip"` + CliInternetIP string `json:"#ip"` + CliContinent string `json:"cli_continent"` + CliCountry string `json:"cli_country"` + CliASN string `json:"cli_asn"` + CliNetworkPromotion string `json:"cli_promote_network"` + CliIsNetworkPromotionRemote bool `json:"cli_is_promote_network_remote"` + CliBackground bool `json:"cli_background"` + CliSimulator bool `json:"cli_simulator"` + CliLanguage string `json:"cli_language"` + CliNetwork string `json:"cli_network"` + CliCarrier string `json:"cli_carrier"` + CliISP string `json:"cli_isp"` + CliVPN bool `json:"cli_vpn"` + CliProxy bool `json:"cli_proxy"` + CliChannel string `json:"cli_channel"` + + // Acc + AccPackage string `json:"acc_package"` + AccDevice string `json:"acc_device"` + AccFacebook string `json:"acc_facebook"` + AccGoogle string `json:"acc_google"` + + // User + Nickname string `json:"nickname"` + Avatar int64 `json:"avatar"` + CPF string `json:"cpf"` + PixType string `json:"pix_type"` + PixAccount string `json:"pix_account"` + Name string `json:"name"` + PhoneNumber string `json:"phone_number"` + + // Char + GroupBatch int64 `json:"group_batch"` + Group string `json:"group"` + Category string `json:"category"` + CreateTime string `json:"create_time"` + LoginTime string `json:"login_time"` + LastLoginTime string `json:"last_login_time"` + ProcessTime string `json:"process_time"` + LastProcessTime string `json:"last_process_time"` + Newbie bool `json:"newbie"` + Novice bool `json:"novice"` + NetworkPromotion string `json:"promote_network"` + ActiveDays int64 `json:"active_days"` + FirstRechargeTime string `json:"first_recharge_time"` + LatestRechargeTime string `json:"latest_recharge_time"` + RechargeTimes int64 `json:"recharge_times"` + RechargeCurrency int64 `json:"recharge_currency"` + + // Book + Coin int64 `json:"free_coin"` + + // Agg + AggSlotsDailySpins int64 `json:"agg_slots_daily_spins"` + AggSlotsDailyWin int64 `json:"agg_slots_daily_win"` + AggSlotsDailyBet int64 `json:"agg_slots_daily_bet"` + } + + UserBase struct { + // Cli + CliPackage string `json:"cli_package"` + CliVersion string `json:"cli_version"` + CliResVersion string `json:"cli_res_version"` + CliPlatform string `json:"cli_platform"` + CliOS string `json:"cli_os"` + CliDevice string `json:"cli_device_model"` + CliDeviceID string `json:"cli_device_id"` + CliZoneOffset string `json:"cli_zone_offset"` + CliIntranetIP string `json:"cli_intranet_ip"` + CliInternetIP string `json:"cli_ip"` + CliContinent string `json:"cli_continent"` + CliCountry string `json:"cli_country"` + CliASN string `json:"cli_asn"` + CliNetworkPromotion string `json:"cli_promote_network"` + CliIsNetworkPromotionRemote bool `json:"cli_is_promote_network_remote"` + CliBackground bool `json:"cli_background"` + CliSimulator bool `json:"cli_simulator"` + CliLanguage string `json:"cli_language"` + CliNetwork string `json:"cli_network"` + CliCarrier string `json:"cli_carrier"` + CliISP string `json:"cli_isp"` + CliVPN bool `json:"cli_vpn"` + CliProxy bool `json:"cli_proxy"` + CliChannel string `json:"cli_channel"` + + // Acc + AccPackage string `json:"acc_package"` + AccDevice string `json:"acc_device"` + AccFacebook string `json:"acc_facebook"` + AccGoogle string `json:"acc_google"` + + // User + Nickname string `json:"nickname"` + Avatar int64 `json:"avatar"` + CPF string `json:"cpf"` + PixType string `json:"pix_type"` + PixAccount string `json:"pix_account"` + Name string `json:"name"` + PhoneNumber string `json:"phone_number"` + + // Char + GroupBatch int64 `json:"group_batch"` + Group string `json:"group"` + Category string `json:"category"` + CreateTime string `json:"create_time"` + LoginTime string `json:"login_time"` + LastLoginTime string `json:"last_login_time"` + ProcessTime string `json:"process_time"` + LastProcessTime string `json:"last_process_time"` + Newbie bool `json:"newbie"` + Novice bool `json:"novice"` + NetworkPromotion string `json:"promote_network"` + ActiveDays int64 `json:"active_days"` + FirstRechargeTime string `json:"first_recharge_time"` + LatestRechargeTime string `json:"latest_recharge_time"` + RechargeTimes int64 `json:"recharge_times"` + RechargeCurrency int64 `json:"recharge_currency"` + + // Book + Coin int64 `json:"free_coin"` + FreeWinCoin int64 `json:"free_win_coin"` + RechargeCoin int64 `json:"recharge_coin"` + RechargeWinCoin int64 `json:"recharge_win_coin"` + + // Agg + AggSlotsDailySpins int64 `json:"agg_slots_daily_spins"` + AggSlotsDailyWin int64 `json:"agg_slots_daily_win"` + AggSlotsDailyBet int64 `json:"agg_slots_daily_bet"` + } + + UserAccount struct { + CurrentAccount string `json:"current_account"` + CurrentAccountType int64 `json:"current_account_type"` + DeviceAccount string `json:"device_account"` + DeviceEnable bool `json:"device_enable"` + FacebookAccount string `json:"facebook_account"` + FacebookEnable bool `json:"facebook_enable"` + AppleAccount string `json:"apple_account"` + AppleEnable bool `json:"apple_enable"` + } + + LoginRequestReceived struct { + AccessType string `json:"access_type"` + AccessPackage string `json:"access_package"` + AccessAccount string `json:"access_account"` + AccessDevice string `json:"access_device"` + IsGM bool `json:"is_gm"` + } + + LoginGuaranteeUniqueSent struct { + AccessType string `json:"access_type"` + AccessPackage string `json:"access_package"` + AccessAccount string `json:"access_account"` + AccessDevice string `json:"access_device"` + IsGM bool `json:"is_gm"` + } + + LoginGuaranteeUniqueReceived struct { + AccessType string `json:"access_type"` + AccessPackage string `json:"access_package"` + AccessAccount string `json:"access_account"` + AccessDevice string `json:"access_device"` + Result int64 `json:"result"` + } + + Login struct { + AccessType string `json:"access_type"` + AccessPackage string `json:"access_package"` + AccessAccount string `json:"access_account"` + AccessDevice string `json:"access_device"` + IsRepeated bool `json:"is_repeated"` + } + + Logout struct { + } + + Enter struct { + } + + Leave struct { + } + + CoinChange struct { + Reason string `json:"reason"` + Type string `json:"type"` + BeforeCoin int64 `json:"before_coin"` + IncCoin int64 `json:"inc_coin"` + DecCoin int64 `json:"dec_coin"` + AfterCoin int64 `json:"after_coin"` + } + + CoinChangeSettle struct { + Reason string `json:"reason"` + Type string `json:"type"` + BeforeCoin int64 `json:"before_coin"` + IncCoin int64 `json:"inc_coin"` + DecCoin int64 `json:"dec_coin"` + AfterCoin int64 `json:"after_coin"` + } + + CoinChangeBet struct { + Reason string `json:"reason"` + Type string `json:"type"` + BeforeCoin int64 `json:"before_coin"` + IncCoin int64 `json:"inc_coin"` + DecCoin int64 `json:"dec_coin"` + AfterCoin int64 `json:"after_coin"` + } + + SlotsPlay struct { + SlotsNodeType string `json:"slots_node_type"` + SlotsBetIndex int64 `json:"slots_bet_index"` + SlotsCoinValueIndex int64 `json:"slots_coin_value_index"` + SlotsChoice int64 `json:"slots_choice"` + SlotsStay bool `json:"slots_stay"` + SlotsVersion int64 `json:"slots_version"` + SlotsRatio float64 `json:"slots_ratio"` + SlotsBet int64 `json:"slots_bet"` + SlotsActBet int64 `json:"slots_act_bet"` + SlotsTotalBet int64 `json:"slots_total_bet"` + SlotsActualBet int64 `json:"slots_actual_bet"` + SlotsWin int64 `json:"slots_win"` + SlotsNodeTotalWin int64 `json:"slots_node_total_win"` + SlotsTotalWin int64 `json:"slots_total_win"` + SlotsAcutalWin int64 `json:"slots_actual_win"` + SlotsActualWinType int64 `json:"slots_actual_win_type"` + SlotsDisplaySymbols string `json:"slots_display_symbols"` + SlotsFinalSymbols string `json:"slots_final_symbols"` + SlotsFeatures string `json:"slots_features"` + + TotalBetCoin int64 `json:"total_bet_coin"` + TotalPayoutCoin int64 `json:"total_payout_coin"` + TotalPayoutRatio float64 `json:"total_payout_ratio"` + ReservePoolEnable bool `json:"reserve_pool_enable"` + ReservePoolChange int64 `json:"reserve_pool_change"` + ReservePoolType int64 `json:"reserve_pool_type"` + ReservePool int64 `json:"reserve_pool"` + PumpAmount int64 `json:"pump_amount"` + PumpRatio float64 `json:"pump_ratio"` + ReservePumpAmount int64 `json:"reserve_pump_amount"` + ReservePumpRatio float64 `json:"reserve_pump_ratio"` + Novice int64 `json:"novice"` + + NewPoolValue int64 `json:"new_pool_value"` + OldPoolValue int64 `json:"old_pool_value"` + ReservePump int64 `json:"reserve_pump"` + + Poor bool `json:"poor"` + Cycle int64 `json:"cycle"` + CycleOverload bool `json:"cycle_overload"` + Exception bool `json:"exception"` + ExceptionType int64 `json:"exception_type"` + Replay bool `json:"replay"` + + Vector string `json:"vector"` + VectorType int64 `json:"vector_type"` + VectorIndex int64 `json:"vector_index"` + VectorMinRatio float64 `json:"vector_min_ratio"` + VectorMaxRatio float64 `json:"vector_max_ratio"` + + ExpectedBetCoin int64 `json:"expected_bet_coin"` + ExpectedWinCoin int64 `json:"expected_win_coin"` + SkipWinCheck bool `json:"skip_win_check"` + + NoviceForceWin bool `json:"novice_force_win"` + SecondStageForceWin bool `json:"second_stage_force_win"` + PaidForceWin bool `json:"paid_force_win"` + BuyFreeSpinForceWin bool `json:"buy_free_spin_force_win"` + ContinousZeroForceWin bool `json:"continous_zero_force_win"` + } + + Watchdog struct { + GoroutineNum int64 `json:"goroutine_num"` // 协程数量 + SessionNum int64 `json:"session_num"` // session数量 + ActiveSessionNum int64 `json:"active_session_num"` // 活跃session数量 + ActiveRechargeSessionNum int64 `json:"active_recharge_session_num"` // 活跃充值session数量 + SessionSchedulerNum int64 `json:"session_scheduler_num"` // session调度器数量 + CPU int64 `json:"cpu"` // CPU占用 mCores + Memory int64 `json:"memory"` // 内存占用 MiB + SyscallCPU int64 `json:"syscall_cpu"` // Syscall CPU占用 mCores + SyscallMemory int64 `json:"syscall_memory"` // Syscall 内存占用 MiB + RedisMemory int64 `json:"redis_memory"` // redis 内存占用 MiB + } + + Assess struct { + IndicatorRegisterHours int64 `json:"indicator_register_hours"` // 注册时长 + IndicatorContinuousLoginDays int64 `json:"indicator_continuous_login_days"` // 连续登录天数 + IndicatorActiveDaysRatio int64 `json:"indicator_active_days_ratio"` // 活跃天数比例 + IndicatorAverageBetDaily int64 `json:"indicator_average_bet_daily"` // 日均投注额 + IndicatorAverageBet int64 `json:"indicator_average_bet"` // 平均投注额 + IndicatorBetTimesRatioDaily int64 `json:"indicator_bet_times_ratio_daily"` // 日均投注次数比例 + IndicatorMaxWinDaily int64 `json:"indicator_max_win_daily"` // 日最大盈利 + IndicatorMaxLoseDaily int64 `json:"indicator_max_lose_daily"` // 日最大亏损 + IndicatorWinDaysRatio int64 `json:"indicator_win_days_ratio"` // 盈利天数比例 + Score int64 `json:"score"` // 评分 + SubCategory string `json:"sub_category"` // 子类别 + } + + HandlePermit struct { + Tag string `json:"tag"` + Type string `json:"type"` + Value string `json:"value"` + Status bool `json:"status"` + Reason string `json:"reason"` + } + + RocksSyncLayer struct { + Layer string `json:"layer"` + Cost int64 `json:"cost"` + Interval int64 `json:"interval"` + RedisGetCost int64 `json:"redis_get_cost"` + RedisRemCost int64 `json:"redis_rem_cost"` + DDBSetCost int64 `json:"ddb_set_cost"` + } + + HandlePlayerState struct { + UID int64 `json:"uid"` + Type string `json:"type"` + // 原因 + Reason string `json:"reason"` + } + + Reorder struct { + UID int64 `json:"uid"` + InnerID string `json:"inner_id"` + } +) diff --git a/gamesrv/slotspkg/internal/dao/thinkingdata/thinkingdata.go b/gamesrv/slotspkg/internal/dao/thinkingdata/thinkingdata.go new file mode 100644 index 0000000..65e68ba --- /dev/null +++ b/gamesrv/slotspkg/internal/dao/thinkingdata/thinkingdata.go @@ -0,0 +1,81 @@ +package thinkingdata + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" +) + +const ( + TrackType = "track" + TrackUpdateType = "track_update" + TrackOverwriteType = "track_overwrite" + UserSetType = "user_set" + UserUnsetType = "user_unset" + UserSetOnceType = "user_setOnce" + UserAddType = "user_add" + UserAppendType = "user_append" + UserDelType = "user_del" +) + +func Track(ctx *shared.LogContext, v interface{}) { + if global.Mock { + return + } + formatEvent(ctx, TrackType, v) +} + +func TrackUpdate(ctx *shared.LogContext, v interface{}) { + formatEvent(ctx, TrackUpdateType, v) +} + +func TrackOverWrite(ctx *shared.LogContext, v interface{}) { + formatEvent(ctx, TrackOverwriteType, v) +} + +func UserSet(ctx *shared.LogContext, v interface{}) { + formatUser(ctx, UserSetType, v) +} + +func UserUnset(ctx *shared.LogContext, v interface{}) { + formatUser(ctx, UserUnsetType, v) +} + +func UserSetOnce(ctx *shared.LogContext, v interface{}) { + formatUser(ctx, UserSetOnceType, v) +} + +func UserAdd(ctx *shared.LogContext, v interface{}) { + formatUser(ctx, UserAddType, v) +} + +func UserAppend(ctx *shared.LogContext, v interface{}) { + formatUser(ctx, UserAppendType, v) +} + +func UserDel(ctx *shared.LogContext, v interface{}) { + formatUser(ctx, UserDelType, v) +} + +func safeCtx(ctx *shared.LogContext) *shared.LogContext { + if ctx == nil { + identifier := &shared.Identifier{ + ContextType: key.LogContextTypeNil, + LogType: key.LogTypeProcess, + GroupID: "", + BatchID: global.ProcessID, + ProcessID: global.ProcessID, + } + + srv := &shared.Srv{ + Runtime: global.Runtime, + Cluster: global.Cluster, + } + + return &shared.LogContext{ + Identifier: identifier, + Srv: srv, + } + } + return ctx +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/cash_mania.go b/gamesrv/slotspkg/internal/exported/excel2go/base/cash_mania.go new file mode 100644 index 0000000..6215492 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/cash_mania.go @@ -0,0 +1,777 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + CashManiaBetBetChangeList = map[int64]*structs.CashManiaBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.6, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.9, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 3, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 9, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 10, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 30, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 90, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + CashManiaBetBetLevel = map[int64]*structs.CashManiaBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + CashManiaBetBetLine = map[int64]*structs.CashManiaBetBetLine{ + 0: { + Index: 0, + BetLine: 10, + }, + } + + CashManiaBetBetSize = map[int64]*structs.CashManiaBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + CashManiaBetFirstBet = map[int64]*structs.CashManiaBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + } + + CashManiaFormation = []*structs.CashManiaFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line1Form5X5TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 2, + NodeType: "FreeSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line1Form5X5TypeA", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + CashManiaMapRTPMode = map[int64]*structs.CashManiaMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.CashManiaMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.CashManiaMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.CashManiaMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + CashManiaMidItemInfo = map[int64]*structs.CashManiaMidItemInfo{ + 6: { + Index: 6, + ItemID: 6, + Multi: 1, + FreeSpinCount: 5, + }, + 7: { + Index: 7, + ItemID: 7, + Multi: 1, + FreeSpinCount: 10, + }, + 8: { + Index: 8, + ItemID: 8, + Multi: 1, + FreeSpinCount: 20, + }, + 9: { + Index: 9, + ItemID: 9, + Multi: 1, + FreeSpinCount: 0, + }, + 10: { + Index: 10, + ItemID: 10, + Multi: 2, + FreeSpinCount: 0, + }, + 11: { + Index: 11, + ItemID: 11, + Multi: 3, + FreeSpinCount: 0, + }, + 12: { + Index: 12, + ItemID: 12, + Multi: 5, + FreeSpinCount: 0, + }, + 13: { + Index: 13, + ItemID: 13, + Multi: 10, + FreeSpinCount: 0, + }, + 14: { + Index: 14, + ItemID: 14, + Multi: 15, + FreeSpinCount: 0, + }, + 15: { + Index: 15, + ItemID: 15, + Multi: 20, + FreeSpinCount: 0, + }, + 16: { + Index: 16, + ItemID: 16, + Multi: 30, + FreeSpinCount: 0, + }, + 17: { + Index: 17, + ItemID: 17, + Multi: 40, + FreeSpinCount: 0, + }, + 18: { + Index: 18, + ItemID: 18, + Multi: 50, + FreeSpinCount: 0, + }, + 19: { + Index: 19, + ItemID: 19, + Multi: 100, + FreeSpinCount: 0, + }, + } + + CashManiaOthers = []*structs.CashManiaOthers{ + { + BaseWinPro: 0.15, + FreeWinPro: 0.15, + MaxWin: 2000, + WinNudgePro: 0.01, + WinRespinPro: 0.02, + NoWinNudgePro: 0.005, + NoWinRespinPro: 0.02, + }, + } + + CashManiaRandomItemWeight = []*structs.CashManiaRandomItemWeight{ + { + ID: 1, + ItemID: 1, + BaseWeight: 1, + FreeWeight: 1, + }, + { + ID: 2, + ItemID: 2, + BaseWeight: 1, + FreeWeight: 1, + }, + { + ID: 3, + ItemID: 3, + BaseWeight: 1, + FreeWeight: 1, + }, + { + ID: 4, + ItemID: 4, + BaseWeight: 1, + FreeWeight: 1, + }, + { + ID: 5, + ItemID: 5, + BaseWeight: 1, + FreeWeight: 1, + }, + } + + CashManiaRandomMidWeight = []*structs.CashManiaRandomMidWeight{ + { + ID: 1, + ItemID: 6, + BaseWeight: 12, + FreeWeight: 12, + }, + { + ID: 2, + ItemID: 7, + BaseWeight: 4, + FreeWeight: 4, + }, + { + ID: 3, + ItemID: 8, + BaseWeight: 1, + FreeWeight: 1, + }, + { + ID: 4, + ItemID: 9, + BaseWeight: 33, + FreeWeight: 33, + }, + { + ID: 5, + ItemID: 10, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 6, + ItemID: 11, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 7, + ItemID: 12, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 8, + ItemID: 13, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 9, + ItemID: 14, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 10, + ItemID: 15, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 11, + ItemID: 16, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 12, + ItemID: 17, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 13, + ItemID: 18, + BaseWeight: 50, + FreeWeight: 50, + }, + { + ID: 14, + ItemID: 19, + BaseWeight: 50, + FreeWeight: 50, + }, + } + + CashManiaReelBaseSpinRange = [][]int64{ + {5, 5, 5}, + } + + CashManiaReelBaseSpinReel = [][]int64{ + {200, 200, 200, 200, 200}, + {200, 200, 200, 200, 200}, + {200, 200, 200, 200, 200}, + } + + CashManiaReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1}, + } + + CashManiaSymbol = map[int64]*structs.CashManiaSymbol{ + 1: { + ID: 1, + Name: "100倍", + IsWild: false, + Group: []int64{1}, + PayRate: []int64{0, 0, 100}, + ClientOrder: 1, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "5倍", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 50}, + ClientOrder: 2, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "1倍", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 10}, + ClientOrder: 3, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "0.5倍", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 5}, + ClientOrder: 4, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "0.1倍", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 1}, + ClientOrder: 5, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "5FreeSpin", + IsWild: true, + Group: []int64{6}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "10FreeSpin", + IsWild: true, + Group: []int64{7}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "20FreeSpin", + IsWild: true, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 9: { + ID: 9, + Name: "wildx1", + IsWild: true, + Group: []int64{9}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 10: { + ID: 10, + Name: "wildx2", + IsWild: true, + Group: []int64{10}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 11: { + ID: 11, + Name: "wildx3", + IsWild: true, + Group: []int64{11}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 12: { + ID: 12, + Name: "wildx5", + IsWild: true, + Group: []int64{12}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 13: { + ID: 13, + Name: "wildx10", + IsWild: true, + Group: []int64{13}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 14: { + ID: 14, + Name: "wildx15", + IsWild: true, + Group: []int64{14}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 15: { + ID: 15, + Name: "wildx20", + IsWild: true, + Group: []int64{15}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 16: { + ID: 16, + Name: "wildx30", + IsWild: true, + Group: []int64{16}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 17: { + ID: 17, + Name: "wildx40", + IsWild: true, + Group: []int64{17}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 18: { + ID: 18, + Name: "wildx50", + IsWild: true, + Group: []int64{18}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 19: { + ID: 19, + Name: "wildx100", + IsWild: true, + Group: []int64{19}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 200: { + ID: 200, + Name: "empty", + IsWild: false, + Group: []int64{200}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + CashManiaSymbolBetRatio = []*structs.CashManiaSymbolBetRatio{ + { + BetRatio: 0.1, + }, + } + + CashManiaWinItemWeight = []*structs.CashManiaWinItemWeight{ + { + ID: 1, + ItemID: 1, + BaseWeight: 8, + FreeWeight: 18, + }, + { + ID: 2, + ItemID: 2, + BaseWeight: 18, + FreeWeight: 15, + }, + { + ID: 3, + ItemID: 3, + BaseWeight: 18, + FreeWeight: 36, + }, + { + ID: 4, + ItemID: 4, + BaseWeight: 28, + FreeWeight: 29, + }, + { + ID: 5, + ItemID: 5, + BaseWeight: 28, + FreeWeight: 27, + }, + } + + CashManiaWinMidWeight = []*structs.CashManiaWinMidWeight{ + { + ID: 1, + ItemID: 6, + BaseWeight: 48, + FreeWeight: 4, + }, + { + ID: 2, + ItemID: 7, + BaseWeight: 24, + FreeWeight: 0, + }, + { + ID: 3, + ItemID: 8, + BaseWeight: 6, + FreeWeight: 0, + }, + { + ID: 4, + ItemID: 9, + BaseWeight: 322, + FreeWeight: 56, + }, + { + ID: 5, + ItemID: 10, + BaseWeight: 800, + FreeWeight: 30, + }, + { + ID: 6, + ItemID: 11, + BaseWeight: 300, + FreeWeight: 15, + }, + { + ID: 7, + ItemID: 12, + BaseWeight: 200, + FreeWeight: 10, + }, + { + ID: 8, + ItemID: 13, + BaseWeight: 10, + FreeWeight: 1, + }, + { + ID: 9, + ItemID: 14, + BaseWeight: 10, + FreeWeight: 1, + }, + { + ID: 10, + ItemID: 15, + BaseWeight: 1, + FreeWeight: 5, + }, + { + ID: 11, + ItemID: 16, + BaseWeight: 1, + FreeWeight: 2, + }, + { + ID: 12, + ItemID: 17, + BaseWeight: 1, + FreeWeight: 2, + }, + { + ID: 13, + ItemID: 18, + BaseWeight: 0, + FreeWeight: 2, + }, + { + ID: 14, + ItemID: 19, + BaseWeight: 0, + FreeWeight: 2, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_dragon.go b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_dragon.go new file mode 100644 index 0000000..9b345be --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_dragon.go @@ -0,0 +1,506 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + FortuneDragonBaseMultiplier = []*structs.FortuneDragonBaseMultiplier{ + { + WinRateMin: 0, + WinRateMax: 0.01, + ItemIds: []int64{200, 8, 9, 10}, + MultiplierWeights: []int64{140, 10, 20, 10}, + }, + { + WinRateMin: 0.01, + WinRateMax: 1, + ItemIds: []int64{200, 8, 9, 10}, + MultiplierWeights: []int64{1689, 98, 176, 100}, + }, + { + WinRateMin: 1, + WinRateMax: 3, + ItemIds: []int64{200, 8, 9, 10}, + MultiplierWeights: []int64{60, 8, 10, 2}, + }, + { + WinRateMin: 3, + WinRateMax: 10, + ItemIds: []int64{200, 8, 9, 10}, + MultiplierWeights: []int64{2883, 100, 100, 250}, + }, + { + WinRateMin: 10, + WinRateMax: 20, + ItemIds: []int64{200, 8, 9, 10}, + MultiplierWeights: []int64{820, 1585, 100, 10}, + }, + { + WinRateMin: 20, + WinRateMax: 999999, + ItemIds: []int64{200, 8, 9, 10}, + MultiplierWeights: []int64{2884, 8, 10, 287}, + }, + } + + FortuneDragonBetBetChangeList = map[int64]*structs.FortuneDragonBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.15, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.45, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 0.5, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 0.75, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 2.5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 4.5, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 7.5, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 22.5, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + FortuneDragonBetBetLevel = map[int64]*structs.FortuneDragonBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + FortuneDragonBetBetLine = map[int64]*structs.FortuneDragonBetBetLine{ + 0: { + Index: 0, + BetLine: 5, + }, + } + + FortuneDragonBetBetSize = map[int64]*structs.FortuneDragonBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + FortuneDragonBetFirstBet = map[int64]*structs.FortuneDragonBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 1, + }, + } + + FortuneDragonFormation = []*structs.FortuneDragonFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 3, + NodeType: "FreeSpin", + ID: 1, + SeqID: 1, + Reel: "FreeSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 2, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "SureWinBaseSpin", + ID: 1, + SeqID: 1, + Reel: "SureWinBaseSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 3, + NodeType: "SureWinFreeSpin", + ID: 1, + SeqID: 1, + Reel: "SureWinFreeSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 2, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + FortuneDragonFreeMultiplier = []*structs.FortuneDragonFreeMultiplier{ + { + ItemID: 8, + Weight: 30, + }, + { + ItemID: 9, + Weight: 30, + }, + { + ItemID: 10, + Weight: 15, + }, + } + + FortuneDragonFreeMultiplierCount = []*structs.FortuneDragonFreeMultiplierCount{ + { + MultiplierCount: 2, + Weight: 3, + }, + { + MultiplierCount: 3, + Weight: 1, + }, + } + + FortuneDragonMapRTPMode = map[int64]*structs.FortuneDragonMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.FortuneDragonMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.FortuneDragonMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.FortuneDragonMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + FortuneDragonOthers = []*structs.FortuneDragonOthers{ + { + FreespinTriggerPro: 0.005, + FreeSpinCount: 8, + MaxWin: 2500, + SureWinFreespinTriggerPro: 0.0273, + SureWinBetMultiplier: 5, + }, + } + + FortuneDragonReelBaseSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneDragonReelBaseSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 2, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, + } + + FortuneDragonReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneDragonReelFreeSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneDragonReelFreeSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 3, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 2, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 6, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 3, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 3, 5, 3, 5, 6, 7, 2, 5, 6, 5, 3, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 4, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 3, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 1, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 2, 4, 6, 4, 6, 6, 6, 3, 4, 7, 3, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 3, 5, 4, 6, 5, 4, 1, 4, 3, 5, 7, 6, 4, 5, 7, 4, 5, 5, 5, 7, 2, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 1, 5, 4, 7, 3, 6, 7, 6, 3, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 3, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 3, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 3, 4, 7, 3, 6, 3, 4, 1, 7, 6, 5, 3, 7, 6, 5, 7, 6, 2, 5, 7, 4, 5, 7, 3, 5, 4, 1, 6, 5, 4, 6, 7, 5, 4, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 6, 3, 7, 6, 5, 4, 5, 4, 1, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 4, 6, 3, 7, 5, 4, 4, 7, 2}, + {7, 5, 5, 4, 7, 3, 7, 6, 4, 2, 4, 3, 5, 7, 6, 1, 7, 6, 4, 5, 3, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 1, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 3, 5, 5, 7, 2, 3, 4, 7, 6, 3, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 7, 3, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 4, 7, 1, 4, 5, 7, 7, 7, 4, 6, 7, 5, 6, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 5, 4, 3, 5, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 6, 7, 5, 6, 4, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 1, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 4, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 5, 4, 1, 5, 4, 3, 7, 3, 7, 1, 6, 5, 7, 2, 5, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 6, 1, 5, 7, 5, 5, 5, 6, 3, 5, 7, 4, 1, 7, 6, 5, 4, 2}, + } + + FortuneDragonReelFreeSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneDragonReelSureWinBaseSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneDragonReelSureWinBaseSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 2, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 1, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 3, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 2, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 2, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 2, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 3, 4, 5, 7, 7, 2, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 6, 6, 5, 7, 6, 4, 5, 4, 6, 1, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 3, 2, 6, 5, 2, 6, 6, 3, 4, 6, 4, 2, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 5, 3, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 2, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 2, 5, 5, 7, 2, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 2, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 2, 7, 7, 6, 2, 7, 3, 7, 5, 2, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 3, 6, 7, 7, 3, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 1, 3, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 2, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 1, 3, 3, 3, 6, 1, 7, 6, 3, 5, 4, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 2, 7, 3, 4, 5, 5, 5, 6, 3, 1, 7, 7, 2, 6, 5, 4, 6, 6, 3, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 4, 3, 2, 7, 5, 6, 6, 6, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 2, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 3, 7, 5, 2, 6, 6, 5, 2, 7, 4, 4, 4, 7, 2, 6, 6, 3, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 2, 7, 6, 5, 5, 5, 2, 2, 5, 7, 2, 7, 3, 4, 5, 3, 7, 7, 2, 5, 5, 5, 1, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 3, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 3, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 3, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, + } + + FortuneDragonReelSureWinBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneDragonReelSureWinFreeSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneDragonReelSureWinFreeSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 3, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 2, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 6, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 3, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 3, 5, 3, 5, 6, 7, 2, 5, 6, 5, 3, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 4, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 3, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 1, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 2, 4, 6, 4, 6, 6, 6, 3, 4, 7, 3, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 3, 5, 4, 6, 5, 4, 1, 4, 3, 5, 7, 6, 4, 5, 7, 4, 5, 5, 5, 7, 2, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 1, 5, 4, 7, 3, 6, 7, 6, 3, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 3, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 3, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 3, 4, 7, 3, 6, 3, 4, 1, 7, 6, 5, 3, 7, 6, 5, 7, 6, 2, 5, 7, 4, 5, 7, 3, 5, 4, 1, 6, 5, 4, 6, 7, 5, 4, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 6, 3, 7, 6, 5, 4, 5, 4, 1, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 4, 6, 3, 7, 5, 4, 4, 7, 2}, + {7, 5, 5, 4, 7, 3, 7, 6, 4, 2, 4, 3, 5, 7, 6, 1, 7, 6, 4, 5, 3, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 1, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 3, 5, 5, 7, 2, 3, 4, 7, 6, 3, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 7, 3, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 4, 7, 1, 4, 5, 7, 7, 7, 4, 6, 7, 5, 6, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 5, 4, 3, 5, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 6, 7, 5, 6, 4, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 1, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 4, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 5, 4, 1, 5, 4, 3, 7, 3, 7, 1, 6, 5, 7, 2, 5, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 6, 1, 5, 7, 5, 5, 5, 6, 3, 5, 7, 4, 1, 7, 6, 5, 4, 2}, + } + + FortuneDragonReelSureWinFreeSpinWeight = [][]float64{ + {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + } + + FortuneDragonSymbol = map[int64]*structs.FortuneDragonSymbol{ + 1: { + ID: 1, + Name: "Wild", + IsWild: true, + Group: []int64{1}, + PayRate: []int64{0, 0, 100}, + ClientOrder: 0, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "元宝", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 50}, + ClientOrder: 0, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "红包", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 25}, + ClientOrder: 0, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "灯笼", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 10}, + ClientOrder: 0, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "福炮", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 5}, + ClientOrder: 0, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "花结", + IsWild: false, + Group: []int64{6}, + PayRate: []int64{0, 0, 3}, + ClientOrder: 0, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "铜钱", + IsWild: false, + Group: []int64{7}, + PayRate: []int64{0, 0, 2}, + ClientOrder: 0, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "X2", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 9: { + ID: 9, + Name: "X5", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 10: { + ID: 10, + Name: "X10", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 200: { + ID: 200, + Name: "Empty", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + FortuneDragonSymbolBetRatio = []*structs.FortuneDragonSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_mouse.go b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_mouse.go new file mode 100644 index 0000000..e8930b9 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_mouse.go @@ -0,0 +1,392 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + FortuneMouseBetBetChangeList = map[int64]*structs.FortuneMouseBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.15, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.45, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 0.5, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 0.75, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 2.5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 4.5, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 7.5, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 22.5, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + FortuneMouseBetBetLevel = map[int64]*structs.FortuneMouseBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + FortuneMouseBetBetLine = map[int64]*structs.FortuneMouseBetBetLine{ + 0: { + Index: 0, + BetLine: 5, + }, + } + + FortuneMouseBetBetSize = map[int64]*structs.FortuneMouseBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + FortuneMouseBetFirstBet = map[int64]*structs.FortuneMouseBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 1, + }, + } + + FortuneMouseFormation = []*structs.FortuneMouseFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 3, + NodeType: "ReSpin", + ID: 1, + SeqID: 1, + Reel: "ReSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + FortuneMouseMapRTPMode = map[int64]*structs.FortuneMouseMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.FortuneMouseMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.FortuneMouseMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.FortuneMouseMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + FortuneMouseOthers = []*structs.FortuneMouseOthers{ + { + RespinTriggerPro: 0.0123, + MaxWin: 1000, + ExtraWin: 700, + }, + } + + FortuneMouseReelBaseSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneMouseReelBaseSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 5, 3, 4, 2, 7, 7, 7, 6, 5, 5, 5, 4, 6, 5, 5, 5, 4, 7, 7, 7, 4, 7, 6, 5, 3, 3, 3, 5, 7, 6, 5, 7, 6, 5, 7, 7, 7, 6, 5, 7, 4, 3, 6, 5, 7, 6, 3, 6, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 1, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 7, 6, 4, 5, 4, 6, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 5, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 7, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 4, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 6, 6, 2, 7, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 6, 6, 7, 4, 6, 6, 6, 5, 4, 7, 6, 4, 7, 3, 6, 7, 6, 7, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 1, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 6, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 2, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 6, 6, 6, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 7, 6, 5, 7, 3, 6, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 6, 5, 2, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 6, 6, 7, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 1, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 7, 4, 5, 7, 7, 7, 3, 6, 7, 5, 6, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 7, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 4, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, + } + + FortuneMouseReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneMouseReelReSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneMouseReelReSpinReel = [][]int64{ + {1, 1, 1, 2, 2, 2, 2, 7, 7, 7, 7, 8, 8, 8, 6, 6, 6, 6, 3, 3, 3, 3, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8}, + {1, 1, 1}, + {1, 1, 1, 2, 2, 2, 2, 7, 7, 7, 7, 8, 8, 8, 6, 6, 6, 6, 3, 3, 3, 3, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8}, + } + + FortuneMouseReelReSpinWeight = [][]float64{ + {0.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1}, + {0.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneMouseSuperStackWeight = []*structs.FortuneMouseSuperStackWeight{ + { + ID: 1, + ItemID: 1, + Weight: 0, + }, + { + ID: 2, + ItemID: 2, + Weight: 3, + }, + { + ID: 3, + ItemID: 3, + Weight: 5, + }, + { + ID: 4, + ItemID: 4, + Weight: 7, + }, + { + ID: 5, + ItemID: 5, + Weight: 8, + }, + { + ID: 6, + ItemID: 6, + Weight: 9, + }, + { + ID: 7, + ItemID: 7, + Weight: 10, + }, + } + + FortuneMouseSymbol = map[int64]*structs.FortuneMouseSymbol{ + 1: { + ID: 1, + Name: "wild", + IsWild: true, + Group: []int64{1}, + PayRate: []int64{0, 0, 300}, + ClientOrder: 1, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "倒福", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 100}, + ClientOrder: 2, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "红包", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 50}, + ClientOrder: 3, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "钱袋", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 30}, + ClientOrder: 4, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "爆竹", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 15}, + ClientOrder: 5, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "橘子", + IsWild: false, + Group: []int64{6}, + PayRate: []int64{0, 0, 5}, + ClientOrder: 6, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "花生", + IsWild: false, + Group: []int64{7}, + PayRate: []int64{0, 0, 3}, + ClientOrder: 7, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "SuperStack", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + FortuneMouseSymbolBetRatio = []*structs.FortuneMouseSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_ox.go b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_ox.go new file mode 100644 index 0000000..a50d12f --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_ox.go @@ -0,0 +1,439 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + FortuneOxBetBetChangeList = map[int64]*structs.FortuneOxBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.6, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.9, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 3, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 9, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 10, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 30, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 90, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + FortuneOxBetBetLevel = map[int64]*structs.FortuneOxBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + FortuneOxBetBetLine = map[int64]*structs.FortuneOxBetBetLine{ + 0: { + Index: 0, + BetLine: 10, + }, + } + + FortuneOxBetBetSize = map[int64]*structs.FortuneOxBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + FortuneOxBetFirstBet = map[int64]*structs.FortuneOxBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + } + + FortuneOxFormation = []*structs.FortuneOxFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line10Form343TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 3, + NodeType: "ReSpin", + ID: 1, + SeqID: 1, + Reel: "ReSpin", + Matrix: "Line10Form343TypeA", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + FortuneOxMapRTPMode = map[int64]*structs.FortuneOxMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.FortuneOxMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.FortuneOxMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.FortuneOxMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + FortuneOxOthers = []*structs.FortuneOxOthers{ + { + RespinTriggerPro: 0.0107, + Multiplier: 10, + MaxWin: 2000, + }, + } + + FortuneOxReelBaseSpinRange = [][]int64{ + {3, 4, 3}, + } + + FortuneOxReelBaseSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 5, 6, 7, 6, 6, 6, 2, 2, 2, 1, 1, 4, 4, 4, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 2, 6, 5, 7, 6, 6, 6, 2, 2, 2, 5, 6, 2, 2, 2, 5, 7, 6, 6, 4, 2, 7, 7, 7, 6, 5, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 6, 6, 6, 5, 7, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 7, 5, 2, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 2, 2, 2, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 7, 7, 5, 5, 5, 7, 6, 1, 2, 4, 6, 5, 7, 2, 2, 2, 7, 4, 7, 5, 6, 7, 7, 7, 5, 6, 7, 4, 6, 1, 5, 5, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 7, 7, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 6, 5, 7, 6, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 5, 5, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 7, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 5, 4, 6, 6, 6, 3, 4, 7, 2, 5, 6, 7, 2, 6, 6, 6, 6, 6, 7, 7, 7, 7, 5, 4, 7, 5, 7, 2, 6, 7, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 7, 7, 7, 7, 6, 2, 7, 5, 6, 4, 4, 4, 4, 3, 1, 2, 3, 4, 4, 7, 5, 5, 5, 5, 6, 6, 6, 6, 4, 7, 6, 1, 1, 7, 4, 5, 7, 6, 5, 4, 6, 7, 4, 7, 3, 5, 6, 7, 1, 5, 7, 3, 4, 6, 7, 2, 2, 2, 2, 7, 7, 6, 6, 3, 4, 6, 5, 1, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 6, 3, 6, 7, 2, 3, 7, 6, 5, 4, 7, 6, 4, 3, 3, 3, 3, 4, 7, 7, 5, 1, 6, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 7, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 5, 1, 7, 4, 6, 7, 4, 6, 7, 4, 6, 3, 7, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 7, 7, 7, 7, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 6, 7, 1, 6, 5, 7, 3, 5, 6, 7, 7, 3, 6, 7, 5, 5, 7, 7, 7, 7, 7, 6, 5, 5, 5, 5, 1, 1, 1, 1, 2, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 6, 6, 5, 1, 7, 7, 7, 7, 6, 3, 7, 5, 4, 4, 7, 6, 7, 7, 7, 7, 7}, + {5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 5, 5, 5, 6, 7, 5, 4, 3, 6, 7, 5, 4, 3, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 3, 7, 5, 3, 7, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 6, 6, 6, 7, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 7, 3, 6, 4, 7, 2, 2, 2, 6, 6, 6, 3, 7, 5, 6, 6, 6, 3, 7, 5, 3, 7, 6, 4, 3, 6, 7, 4, 6, 7, 3, 2, 7, 7, 7, 6, 3, 3, 3, 5, 7, 7, 7, 3, 6, 3, 1, 1, 7, 6, 3, 7, 5, 6, 6, 6, 7, 3, 5, 6, 7, 4, 6, 6, 6, 5, 3, 2, 7, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 3, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 7, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 6, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 3, 3, 3, 5, 7, 3, 5, 7, 6, 5, 7, 7, 7, 7, 6, 6, 3, 7, 4, 6, 2, 3, 5, 7, 2, 1, 5, 7, 6, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 7, 4, 2, 7, 7, 7, 6, 6, 6, 7, 7, 7}, + } + + FortuneOxReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneOxReelReSpinRange = [][]int64{ + {3, 4, 3}, + } + + FortuneOxReelReSpinReel = [][]int64{ + {8, 8, 8, 9, 9, 9, 1, 1, 1}, + {9, 9, 9, 1, 1, 1, 9, 9, 9, 2, 2, 2, 2, 7, 7, 7, 7, 1, 1, 1, 1, 6, 6, 6, 6, 3, 3, 3, 3, 9, 9, 9, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8}, + {8, 8, 8, 9, 9, 9, 1, 1, 1}, + } + + FortuneOxReelReSpinWeight = [][]float64{ + {34, 1, 1, 1, 1, 0.4, 0.2, 0.4, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 11, 1, 1, 1, 0, 1, 1, 1, 11, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 9, 1, 1, 1, 8, 1, 1, 1, 7, 1, 1}, + {34, 1, 1, 1, 1, 0.4, 0.2, 0.4, 1}, + } + + FortuneOxSuperStack1Weight = []*structs.FortuneOxSuperStack1Weight{ + { + ID: 1, + ItemID: 1, + Weight: 0, + }, + { + ID: 2, + ItemID: 2, + Weight: 1, + }, + { + ID: 3, + ItemID: 3, + Weight: 4, + }, + { + ID: 4, + ItemID: 4, + Weight: 10, + }, + { + ID: 5, + ItemID: 5, + Weight: 15, + }, + { + ID: 6, + ItemID: 6, + Weight: 30, + }, + { + ID: 7, + ItemID: 7, + Weight: 40, + }, + } + + FortuneOxSuperStack2Weight = []*structs.FortuneOxSuperStack2Weight{ + { + ID: 1, + ItemID: 1, + Weight: 0, + }, + { + ID: 2, + ItemID: 2, + Weight: 1, + }, + { + ID: 3, + ItemID: 3, + Weight: 2, + }, + { + ID: 4, + ItemID: 4, + Weight: 3, + }, + { + ID: 5, + ItemID: 5, + Weight: 4, + }, + { + ID: 6, + ItemID: 6, + Weight: 5, + }, + { + ID: 7, + ItemID: 7, + Weight: 6, + }, + } + + FortuneOxSymbol = map[int64]*structs.FortuneOxSymbol{ + 1: { + ID: 1, + Name: "wild", + IsWild: true, + Group: []int64{1}, + PayRate: []int64{0, 0, 200}, + ClientOrder: 1, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "元宝", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 100}, + ClientOrder: 2, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "金锦盒", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 50}, + ClientOrder: 3, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "钱袋", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 20}, + ClientOrder: 4, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "红包", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 10}, + ClientOrder: 5, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "橘子", + IsWild: false, + Group: []int64{6}, + PayRate: []int64{0, 0, 5}, + ClientOrder: 6, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "炮竹", + IsWild: false, + Group: []int64{7}, + PayRate: []int64{0, 0, 3}, + ClientOrder: 7, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "SuperStack1", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 9: { + ID: 9, + Name: "SuperStack2", + IsWild: false, + Group: []int64{9}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + FortuneOxSymbolBetRatio = []*structs.FortuneOxSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_rabbit.go b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_rabbit.go new file mode 100644 index 0000000..f5cdbd0 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_rabbit.go @@ -0,0 +1,480 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + FortuneRabbitBetBetChangeList = map[int64]*structs.FortuneRabbitBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.6, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.9, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 3, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 9, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 10, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 30, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 90, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + FortuneRabbitBetBetLevel = map[int64]*structs.FortuneRabbitBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + FortuneRabbitBetBetLine = map[int64]*structs.FortuneRabbitBetBetLine{ + 0: { + Index: 0, + BetLine: 10, + }, + } + + FortuneRabbitBetBetSize = map[int64]*structs.FortuneRabbitBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + FortuneRabbitBetFirstBet = map[int64]*structs.FortuneRabbitBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + } + + FortuneRabbitCashPrizeWeight = []*structs.FortuneRabbitCashPrizeWeight{ + { + ID: 1, + PrizeValue: 0.5, + Weight: 150, + NoWinWeight: 100, + }, + { + ID: 2, + PrizeValue: 1, + Weight: 25, + NoWinWeight: 25, + }, + { + ID: 3, + PrizeValue: 2, + Weight: 9, + NoWinWeight: 9, + }, + { + ID: 4, + PrizeValue: 5, + Weight: 55, + NoWinWeight: 55, + }, + { + ID: 5, + PrizeValue: 10, + Weight: 6, + NoWinWeight: 12, + }, + { + ID: 6, + PrizeValue: 20, + Weight: 3, + NoWinWeight: 9, + }, + { + ID: 7, + PrizeValue: 30, + Weight: 0.6, + NoWinWeight: 6, + }, + { + ID: 8, + PrizeValue: 50, + Weight: 1, + NoWinWeight: 3, + }, + { + ID: 9, + PrizeValue: 100, + Weight: 0.39, + NoWinWeight: 0.9, + }, + { + ID: 10, + PrizeValue: 500, + Weight: 0.01, + NoWinWeight: 0.1, + }, + } + + FortuneRabbitForceCashCountWeight = []*structs.FortuneRabbitForceCashCountWeight{ + { + ID: 1, + Count: 5, + Weight: 80, + }, + { + ID: 2, + Count: 6, + Weight: 15, + }, + { + ID: 3, + Count: 7, + Weight: 5, + }, + { + ID: 4, + Count: 8, + Weight: 0, + }, + { + ID: 5, + Count: 9, + Weight: 0, + }, + { + ID: 6, + Count: 10, + Weight: 0, + }, + { + ID: 7, + Count: 11, + Weight: 0, + }, + } + + FortuneRabbitFormation = []*structs.FortuneRabbitFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line10Form343TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 3, + NodeType: "FreeSpin", + ID: 1, + SeqID: 1, + Reel: "FreeSpin", + Matrix: "Line10Form343TypeA", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + FortuneRabbitMapRTPMode = map[int64]*structs.FortuneRabbitMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.FortuneRabbitMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.FortuneRabbitMapRTPModeTypeWeight{ + 2: { + ID: 2, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.FortuneRabbitMapRTPModeTypeWeight{ + 3: { + ID: 3, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + FortuneRabbitOthers = []*structs.FortuneRabbitOthers{ + { + FreespinTriggerPro: 0.0106, + FreeSpinCount: 8, + MaxWin: 5000, + }, + } + + FortuneRabbitOthersRTP120 = []*structs.FortuneRabbitOthersRTP120{ + { + FreespinTriggerPro: 0.01785, + FreeSpinCount: 8, + MaxWin: 5000, + }, + } + + FortuneRabbitOthersRTP80 = []*structs.FortuneRabbitOthersRTP80{ + { + FreespinTriggerPro: 0.00577, + FreeSpinCount: 8, + MaxWin: 5000, + }, + } + + FortuneRabbitReelBaseSpinRange = [][]int64{ + {3, 4, 3}, + } + + FortuneRabbitReelBaseSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 8, 8, 8, 6, 2, 4, 5, 6, 7, 6, 6, 6, 2, 2, 2, 1, 5, 4, 4, 4, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 5, 6, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 2, 6, 5, 7, 8, 8, 8, 2, 2, 2, 5, 6, 2, 2, 2, 5, 7, 6, 6, 4, 2, 7, 7, 7, 6, 5, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 6, 6, 6, 5, 7, 5, 6, 7, 2, 5, 6, 5, 3, 3, 3, 6, 2, 5, 7, 6, 8, 8, 8, 6, 7, 5, 2, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 2, 2, 2, 7, 8, 8, 8, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 7, 7, 5, 5, 5, 7, 6, 1, 2, 4, 6, 5, 7, 2, 2, 2, 7, 4, 7, 5, 6, 8, 8, 8, 5, 6, 7, 4, 6, 1, 5, 5, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 4, 4, 4, 7, 7, 7, 3, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 6, 5, 7, 6, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 5, 5, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 8, 8, 8, 2, 7, 7, 2, 2, 6, 5, 2, 6, 4, 7, 6, 3, 5, 4, 6, 6, 6, 3, 4, 7, 2, 5, 6, 7, 2, 4, 5, 6, 6, 6, 8, 8, 8, 7, 5, 4, 1, 5, 7, 2, 6, 7, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 6, 5, 7, 4, 6, 2, 7, 5, 6, 4, 4, 4, 4, 3, 5, 2, 3, 4, 4, 7, 5, 5, 5, 5, 8, 8, 8, 8, 4, 7, 6, 5, 1, 7, 4, 5, 7, 6, 5, 4, 8, 8, 8, 8, 3, 5, 6, 4, 1, 5, 7, 3, 4, 6, 7, 2, 2, 2, 2, 6, 7, 6, 7, 3, 4, 6, 5, 1, 7, 6, 6, 4, 5, 8, 8, 5, 7, 6, 4, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 5, 5, 5, 5, 3, 6, 7, 2, 3, 7, 6, 5, 4, 7, 6, 4, 3, 3, 3, 3, 4, 7, 7, 5, 1, 6, 5, 7, 4, 6, 3, 2, 5, 5, 4, 7, 7, 5, 3, 4, 8, 8, 5, 6, 4, 7, 5, 5, 5, 5, 8, 8, 7, 6, 3, 1, 1, 1, 5, 3, 4, 6, 7, 5, 3, 6, 4, 7, 6, 4, 1, 7, 5, 8, 8, 5, 5, 5, 1, 7, 4, 6, 7, 4, 6, 7, 4, 6, 3, 7, 5, 6, 3, 5, 6, 4, 7, 5, 6, 4, 5, 7, 7, 7, 7, 1, 2, 2, 3, 3, 7, 8, 8, 8, 8, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 6, 7, 1, 6, 5, 7, 3, 5, 6, 7, 7, 3, 6, 7, 5, 5, 8, 8, 8, 8, 7, 6, 5, 5, 5, 5, 1, 1, 1, 1, 2, 4, 6, 3, 5, 8, 8, 8, 8, 6, 5, 3, 4, 2, 6, 6, 6, 6, 5, 1, 7, 7, 7, 7, 6, 3, 7, 5, 4, 4, 7, 6, 5, 5, 5, 5, 7}, + {5, 5, 5, 6, 7, 3, 6, 4, 4, 4, 3, 3, 3, 4, 7, 1, 6, 5, 5, 5, 6, 7, 5, 4, 3, 6, 7, 5, 4, 3, 8, 8, 8, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 1, 1, 1, 3, 7, 5, 3, 7, 6, 4, 7, 6, 3, 4, 6, 5, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 6, 6, 6, 8, 8, 8, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 7, 3, 6, 4, 7, 2, 4, 3, 6, 6, 6, 3, 7, 5, 8, 8, 8, 3, 7, 5, 3, 7, 6, 4, 3, 6, 7, 4, 6, 7, 3, 2, 7, 7, 7, 6, 3, 3, 3, 5, 8, 8, 8, 3, 6, 3, 1, 1, 7, 6, 3, 7, 5, 2, 2, 2, 7, 3, 5, 6, 7, 4, 6, 6, 6, 5, 3, 2, 7, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 3, 7, 4, 4, 4, 7, 6, 6, 6, 8, 8, 8, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 8, 8, 8, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 8, 8, 8, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 4, 4, 4, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 3, 3, 3, 5, 7, 3, 5, 7, 6, 5, 7, 7, 7, 7, 6, 6, 3, 7, 4, 6, 2, 3, 5, 7, 2, 1, 5, 7, 6, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 7, 4, 2, 7, 7, 7, 6, 6, 6, 7, 7, 7}, + } + + FortuneRabbitReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneRabbitReelFreeSpinRange = [][]int64{ + {3, 4, 3}, + } + + FortuneRabbitReelFreeSpinReel = [][]int64{ + {200, 200, 200, 200, 8, 8, 8, 200, 200, 200, 200, 200}, + {200, 200, 200, 8, 8, 8, 8, 200, 200, 200, 200, 200}, + {200, 200, 200, 200, 8, 8, 8, 200, 200, 200, 200, 200}, + } + + FortuneRabbitReelFreeSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneRabbitSymbol = map[int64]*structs.FortuneRabbitSymbol{ + 1: { + ID: 1, + Name: "wild", + IsWild: true, + Group: []int64{1}, + PayRate: []int64{0, 0, 200}, + ClientOrder: 1, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "元宝", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 100}, + ClientOrder: 2, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "钱袋", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 50}, + ClientOrder: 3, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "红包", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 10}, + ClientOrder: 4, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "铜币", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 5}, + ClientOrder: 5, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "爆竹", + IsWild: false, + Group: []int64{6}, + PayRate: []int64{0, 0, 3}, + ClientOrder: 6, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "胡萝卜", + IsWild: false, + Group: []int64{7}, + PayRate: []int64{0, 0, 2}, + ClientOrder: 7, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "Cash", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 200: { + ID: 200, + Name: "Empty", + IsWild: false, + Group: []int64{200}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + FortuneRabbitSymbolBetRatio = []*structs.FortuneRabbitSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_tiger.go b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_tiger.go new file mode 100644 index 0000000..2b54df8 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/fortune_tiger.go @@ -0,0 +1,401 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + FortuneTigerBetBetChangeList = map[int64]*structs.FortuneTigerBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.15, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.45, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 0.5, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 0.75, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 2.5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 4.5, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 7.5, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 22.5, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + FortuneTigerBetBetLevel = map[int64]*structs.FortuneTigerBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + FortuneTigerBetBetLine = map[int64]*structs.FortuneTigerBetBetLine{ + 0: { + Index: 0, + BetLine: 5, + }, + } + + FortuneTigerBetBetSize = map[int64]*structs.FortuneTigerBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + FortuneTigerBetFirstBet = map[int64]*structs.FortuneTigerBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 1, + }, + } + + FortuneTigerFormation = []*structs.FortuneTigerFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 4, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 3, + NodeType: "ReSpin", + ID: 1, + SeqID: 1, + Reel: "ReSpin", + Matrix: "Line5Form3X3TypeB", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + FortuneTigerMapRTPMode = map[int64]*structs.FortuneTigerMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.FortuneTigerMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.FortuneTigerMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.FortuneTigerMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + FortuneTigerOthers = []*structs.FortuneTigerOthers{ + { + RespinTriggerPro: 0.0104, + Multiplier: 10, + MaxWin: 2500, + }, + } + + FortuneTigerReelBaseSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneTigerReelBaseSpinReel = [][]int64{ + {3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 6, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 1, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6}, + {5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 1, 1, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 1, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 1, 1, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2}, + {7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 1, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 1, 1, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2}, + } + + FortuneTigerReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + FortuneTigerReelReSpinRange = [][]int64{ + {3, 3, 3}, + } + + FortuneTigerReelReSpinReel = [][]int64{ + {8, 8, 1, 200, 200, 8, 8, 8, 200, 200, 1, 200, 200, 8, 8, 200, 200, 1, 1, 200, 200, 8, 200, 200, 1, 8, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200, 1, 200, 200, 8, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200}, + {8, 8, 1, 200, 200, 8, 8, 8, 200, 200, 1, 200, 200, 8, 8, 200, 200, 1, 1, 200, 200, 8, 200, 200, 1, 8, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200, 1, 200, 200, 8, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200}, + {8, 8, 1, 200, 200, 8, 8, 8, 200, 200, 1, 200, 200, 8, 8, 200, 200, 1, 1, 200, 200, 8, 200, 200, 1, 8, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200, 1, 200, 200, 8, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200, 8, 8, 8, 200, 200, 8, 200, 200}, + } + + FortuneTigerReelReSpinWeight = [][]float64{ + {0.5, 1, 0, 1, 1, 0.5, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 2, 1, 1, 1, 1, 0, 0.5, 1, 1, 1, 0.5, 0, 0, 1, 2, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 1, 0, 0, 1, 2, 2, 2, 1, 1}, + {0.5, 0, 1, 1, 1, 0.5, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 2, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 2, 1, 0, 0, 1, 1, 2, 2, 2, 1, 1}, + {0, 1, 1, 1, 1, 0.5, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 2, 1, 0, 1, 0.5, 1, 1, 1, 0, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1}, + } + + FortuneTigerSuperStackWeight = []*structs.FortuneTigerSuperStackWeight{ + { + ID: 1, + ItemID: 1, + Weight: 0, + }, + { + ID: 2, + ItemID: 2, + Weight: 0.66, + }, + { + ID: 3, + ItemID: 3, + Weight: 3.34, + }, + { + ID: 4, + ItemID: 4, + Weight: 11, + }, + { + ID: 5, + ItemID: 5, + Weight: 15, + }, + { + ID: 6, + ItemID: 6, + Weight: 20, + }, + { + ID: 7, + ItemID: 7, + Weight: 50, + }, + } + + FortuneTigerSymbol = map[int64]*structs.FortuneTigerSymbol{ + 1: { + ID: 1, + Name: "wild", + IsWild: true, + Group: []int64{1}, + PayRate: []int64{0, 0, 250}, + ClientOrder: 1, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "元宝", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 100}, + ClientOrder: 2, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "玉饰", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 25}, + ClientOrder: 3, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "福袋", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 10}, + ClientOrder: 4, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "红包", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 8}, + ClientOrder: 5, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "爆竹", + IsWild: false, + Group: []int64{6}, + PayRate: []int64{0, 0, 5}, + ClientOrder: 6, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "橘子", + IsWild: false, + Group: []int64{7}, + PayRate: []int64{0, 0, 3}, + ClientOrder: 7, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "SuperStack", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 200: { + ID: 200, + Name: "Empty", + IsWild: false, + Group: []int64{200}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + FortuneTigerSymbolBetRatio = []*structs.FortuneTigerSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/gateof_olympus.go b/gamesrv/slotspkg/internal/exported/excel2go/base/gateof_olympus.go new file mode 100644 index 0000000..dc15bf8 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/gateof_olympus.go @@ -0,0 +1,1098 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + GateofOlympusBetBetChangeList = map[int64]*structs.GateofOlympusBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.6, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 1.2, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 1.8, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 2, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 3, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 6, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 10, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 18, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 20, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 30, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 60, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 90, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 180, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + GateofOlympusBetBetLevel = map[int64]*structs.GateofOlympusBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + GateofOlympusBetBetLine = map[int64]*structs.GateofOlympusBetBetLine{ + 0: { + Index: 0, + BetLine: 20, + }, + } + + GateofOlympusBetBetSize = map[int64]*structs.GateofOlympusBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + GateofOlympusBetFirstBet = map[int64]*structs.GateofOlympusBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 1, + }, + } + + GateofOlympusFormation = []*structs.GateofOlympusFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "BaseSpin1", + ID: 1, + SeqID: 1, + Reel: "BaseSpin1", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "BaseSpin2", + ID: 1, + SeqID: 1, + Reel: "BaseSpin2", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "BaseSpin3", + ID: 1, + SeqID: 1, + Reel: "BaseSpin3", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "BaseSpin7", + ID: 1, + SeqID: 1, + Reel: "BaseSpin7", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "BaseSpin8", + ID: 1, + SeqID: 1, + Reel: "BaseSpin8", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 2, + NodeType: "FreeSpin", + ID: 2, + SeqID: 1, + Reel: "FreeSpin", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 2, + NodeType: "FreeSpin4", + ID: 2, + SeqID: 1, + Reel: "FreeSpin4", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 2, + NodeType: "FreeSpin5", + ID: 2, + SeqID: 1, + Reel: "FreeSpin5", + Matrix: "SameForm5X6TypeA", + Symbol: "Default", + FirstInitMethod: 3, + OtherInitMethod: 3, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "MoreScatterBaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "SameForm5X6TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "MoreScatterBaseSpin1", + ID: 1, + SeqID: 1, + Reel: "BaseSpin1", + Matrix: "SameForm5X6TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "MoreScatterBaseSpin2", + ID: 1, + SeqID: 1, + Reel: "BaseSpin2", + Matrix: "SameForm5X6TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "MoreScatterBaseSpin3", + ID: 1, + SeqID: 1, + Reel: "BaseSpin3", + Matrix: "SameForm5X6TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "MoreScatterBaseSpin7", + ID: 1, + SeqID: 1, + Reel: "BaseSpin7", + Matrix: "SameForm5X6TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + { + SpinType: 1, + NodeType: "MoreScatterBaseSpin8", + ID: 1, + SeqID: 1, + Reel: "BaseSpin8", + Matrix: "SameForm5X6TypeB", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + GateofOlympusMapRTPMode = map[int64]*structs.GateofOlympusMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.GateofOlympusMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.GateofOlympusMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.GateofOlympusMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + GateofOlympusMultiplier = []*structs.GateofOlympusMultiplier{ + { + Multiple: 2, + ID: 13, + Weights: []int64{3150, 3150, 3150}, + }, + { + Multiple: 3, + ID: 14, + Weights: []int64{2250, 2250, 2000}, + }, + { + Multiple: 4, + ID: 15, + Weights: []int64{1500, 1500, 1500}, + }, + { + Multiple: 5, + ID: 16, + Weights: []int64{1100, 1100, 1000}, + }, + { + Multiple: 6, + ID: 17, + Weights: []int64{300, 300, 600}, + }, + { + Multiple: 8, + ID: 18, + Weights: []int64{150, 150, 400}, + }, + { + Multiple: 10, + ID: 19, + Weights: []int64{80, 80, 200}, + }, + { + Multiple: 12, + ID: 20, + Weights: []int64{30, 30, 100}, + }, + { + Multiple: 15, + ID: 21, + Weights: []int64{10, 10, 50}, + }, + { + Multiple: 20, + ID: 22, + Weights: []int64{20, 20, 50}, + }, + { + Multiple: 25, + ID: 23, + Weights: []int64{10, 10, 50}, + }, + { + Multiple: 50, + ID: 24, + Weights: []int64{1, 1, 25}, + }, + { + Multiple: 100, + ID: 25, + Weights: []int64{1, 1, 25}, + }, + { + Multiple: 250, + ID: 26, + Weights: []int64{0, 0, 10}, + }, + { + Multiple: 500, + ID: 27, + Weights: []int64{0, 0, 10}, + }, + } + + GateofOlympusMultiplierKeyID = map[int64]*structs.GateofOlympusMultiplierKeyID{ + 13: { + Multiple: 2, + ID: 13, + Weights: []int64{3150, 3150, 3150}, + }, + 14: { + Multiple: 3, + ID: 14, + Weights: []int64{2250, 2250, 2000}, + }, + 15: { + Multiple: 4, + ID: 15, + Weights: []int64{1500, 1500, 1500}, + }, + 16: { + Multiple: 5, + ID: 16, + Weights: []int64{1100, 1100, 1000}, + }, + 17: { + Multiple: 6, + ID: 17, + Weights: []int64{300, 300, 600}, + }, + 18: { + Multiple: 8, + ID: 18, + Weights: []int64{150, 150, 400}, + }, + 19: { + Multiple: 10, + ID: 19, + Weights: []int64{80, 80, 200}, + }, + 20: { + Multiple: 12, + ID: 20, + Weights: []int64{30, 30, 100}, + }, + 21: { + Multiple: 15, + ID: 21, + Weights: []int64{10, 10, 50}, + }, + 22: { + Multiple: 20, + ID: 22, + Weights: []int64{20, 20, 50}, + }, + 23: { + Multiple: 25, + ID: 23, + Weights: []int64{10, 10, 50}, + }, + 24: { + Multiple: 50, + ID: 24, + Weights: []int64{1, 1, 25}, + }, + 25: { + Multiple: 100, + ID: 25, + Weights: []int64{1, 1, 25}, + }, + 26: { + Multiple: 250, + ID: 26, + Weights: []int64{0, 0, 10}, + }, + 27: { + Multiple: 500, + ID: 27, + Weights: []int64{0, 0, 10}, + }, + } + + GateofOlympusReelBaseSpinRange = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelBaseSpinReel = [][]int64{ + {1, 6, 6, 11, 11, 10, 10, 9, 9, 6, 6, 8, 8, 8, 10, 10, 10, 11, 11, 6, 6, 10, 10, 10, 8, 8, 11, 11, 4, 4, 9, 9, 8, 8, 11, 11, 10, 10, 5, 5, 8, 8, 11, 11, 11, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 11, 11, 11, 5, 5, 7, 7, 9}, + {1, 9, 9, 6, 6, 8, 8, 10, 11, 11, 9, 9, 10, 10, 10, 4, 4, 9, 9, 9, 11, 11, 8, 8, 10, 10, 5, 5, 8, 8, 3, 3, 6, 6, 10, 10, 10, 9, 9, 4, 4, 1, 3, 3, 11, 11, 5, 5, 10, 10, 7, 7, 9, 9, 6, 6, 10, 10, 8, 8, 11, 11, 11}, + {1, 5, 5, 5, 8, 8, 11, 11, 5, 5, 9, 9, 6, 6, 7, 7, 3, 3, 5, 5, 5, 7, 7, 8, 8, 11, 11, 4, 4, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 7, 7, 7, 4, 4, 9, 9, 10, 10, 8, 8, 11, 11, 8, 8, 8, 10, 10, 11, 11, 6, 6, 7, 7}, + {1, 4, 4, 11, 11, 5, 5, 7, 7, 9, 9, 11, 11, 10, 10, 4, 4, 9, 9, 11, 11, 5, 5, 8, 8, 10, 10, 11, 11, 5, 5, 3, 3, 9, 9, 6, 6, 10, 10, 4, 4, 7, 7, 7, 11, 11, 6, 6, 6, 9, 9, 10, 10, 10, 11, 11, 3, 3, 3, 7, 7, 10, 10}, + {1, 9, 10, 10, 11, 11, 6, 6, 8, 8, 5, 5, 11, 11, 6, 6, 8, 8, 10, 10, 11, 11, 6, 6, 10, 10, 4, 4, 9, 9, 7, 7, 4, 4, 4, 5, 5, 9, 9, 8, 8, 8, 11, 11, 7, 7, 9, 9, 9, 3, 3, 11, 11, 11, 10, 10, 9, 9, 5, 5, 7, 7, 7}, + {1, 6, 6, 6, 4, 4, 9, 9, 8, 8, 7, 7, 11, 11, 9, 9, 7, 7, 8, 8, 5, 5, 11, 11, 11, 9, 9, 8, 8, 10, 10, 5, 5, 7, 7, 11, 11, 10, 10, 3, 3, 6, 6, 6, 11, 11, 9, 9, 9, 10, 10, 10, 4, 4, 4, 3, 3, 9, 9, 5, 5, 8, 8}, + } + + GateofOlympusReelBaseSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelBaseSpin1Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelBaseSpin1Reel = [][]int64{ + {1, 6, 6, 11, 11, 10, 10, 9, 9, 6, 6, 8, 8, 8, 10, 10, 10, 11, 11, 6, 6, 10, 10, 10, 8, 8, 11, 11, 4, 4, 9, 9, 8, 8, 11, 11, 10, 10, 5, 5, 8, 8, 11, 11, 11, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 11, 11, 11, 5, 5, 7, 7, 9}, + {1, 9, 9, 6, 6, 8, 8, 10, 11, 11, 9, 9, 10, 10, 10, 4, 4, 9, 9, 9, 11, 11, 8, 8, 10, 10, 5, 5, 8, 8, 3, 3, 6, 6, 10, 10, 10, 9, 9, 4, 4, 1, 3, 3, 11, 11, 5, 5, 10, 10, 7, 7, 9, 9, 6, 6, 10, 10, 8, 8, 11, 11, 11}, + {1, 5, 5, 5, 8, 8, 11, 11, 5, 5, 9, 9, 6, 6, 7, 7, 3, 3, 5, 5, 5, 7, 7, 8, 8, 11, 11, 4, 4, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 7, 7, 7, 4, 4, 9, 9, 10, 10, 8, 8, 11, 11, 8, 8, 8, 10, 10, 11, 11, 6, 6, 7, 7}, + {1, 4, 4, 11, 11, 5, 5, 7, 7, 9, 9, 11, 11, 10, 10, 4, 4, 9, 9, 11, 11, 5, 5, 8, 8, 10, 10, 11, 11, 5, 5, 3, 3, 9, 9, 6, 6, 10, 10, 4, 4, 7, 7, 7, 11, 11, 6, 6, 6, 9, 9, 10, 10, 10, 11, 11, 3, 3, 3, 7, 7, 10, 10}, + {1, 9, 10, 10, 11, 11, 6, 6, 8, 8, 5, 5, 11, 11, 6, 6, 8, 8, 10, 10, 11, 11, 6, 6, 10, 10, 4, 4, 9, 9, 7, 7, 4, 4, 4, 5, 5, 9, 9, 8, 8, 8, 11, 11, 7, 7, 9, 9, 9, 3, 3, 11, 11, 11, 10, 10, 9, 9, 5, 5, 7, 7, 7}, + {1, 6, 6, 6, 4, 4, 9, 9, 8, 8, 7, 7, 11, 11, 9, 9, 7, 7, 8, 8, 5, 5, 11, 11, 11, 9, 9, 8, 8, 10, 10, 5, 5, 7, 7, 11, 11, 10, 10, 3, 3, 6, 6, 6, 11, 11, 9, 9, 9, 10, 10, 10, 4, 4, 4, 3, 3, 9, 9, 5, 5, 8, 8}, + } + + GateofOlympusReelBaseSpin1Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelBaseSpin2Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelBaseSpin2Reel = [][]int64{ + {1, 6, 6, 11, 8, 10, 11, 9, 7, 6, 6, 11, 8, 8, 9, 10, 7, 11, 11, 8, 6, 10, 9, 10, 8, 8, 3, 11, 11, 4, 4, 9, 11, 8, 7, 11, 11, 9, 10, 5, 5, 8, 10, 11, 6, 11, 10, 7, 11, 9, 10, 10, 4, 4, 3, 3, 7, 6, 11, 5, 5, 7, 10, 9}, + {1, 9, 9, 6, 6, 8, 8, 10, 4, 11, 9, 9, 10, 10, 11, 4, 10, 8, 9, 9, 7, 11, 8, 8, 10, 10, 5, 5, 7, 9, 10, 3, 6, 7, 8, 6, 11, 9, 7, 4, 4, 1, 3, 11, 11, 9, 5, 5, 10, 6, 7, 7, 10, 9, 6, 6, 11, 10, 8, 8, 11, 7, 11}, + {1, 5, 11, 5, 8, 8, 11, 7, 5, 10, 9, 7, 10, 6, 7, 1, 10, 3, 5, 10, 5, 7, 7, 8, 7, 9, 11, 11, 4, 4, 7, 10, 9, 11, 11, 10, 4, 4, 9, 3, 7, 10, 7, 4, 11, 9, 9, 10, 7, 8, 8, 11, 7, 8, 9, 8, 10, 7, 11, 11, 6, 6, 8, 7}, + {1, 4, 4, 11, 10, 5, 5, 11, 11, 9, 9, 6, 11, 10, 9, 4, 4, 9, 9, 4, 11, 10, 5, 8, 8, 8, 10, 10, 11, 11, 5, 5, 3, 11, 9, 9, 6, 8, 6, 10, 4, 4, 7, 9, 7, 11, 11, 6, 7, 6, 10, 9, 8, 7, 10, 3, 11, 3, 11, 3, 7, 7, 10, 10}, + {1, 9, 10, 10, 11, 7, 4, 6, 8, 8, 1, 5, 9, 11, 6, 6, 8, 8, 10, 10, 11, 6, 11, 6, 11, 10, 7, 4, 4, 11, 9, 7, 6, 8, 9, 4, 5, 5, 7, 9, 7, 8, 8, 9, 10, 7, 7, 11, 11, 9, 3, 3, 11, 11, 8, 10, 10, 9, 9, 5, 5, 10, 11, 7}, + {1, 6, 7, 6, 4, 11, 9, 9, 10, 8, 3, 7, 11, 6, 9, 9, 8, 7, 10, 8, 5, 6, 11, 10, 11, 9, 9, 8, 8, 7, 10, 5, 5, 7, 7, 11, 9, 10, 11, 3, 7, 6, 10, 6, 11, 11, 9, 9, 9, 10, 8, 10, 4, 11, 4, 3, 3, 9, 9, 5, 5, 9, 8}, + } + + GateofOlympusReelBaseSpin2Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelBaseSpin3Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelBaseSpin3Reel = [][]int64{ + {12, 6, 6, 11, 11, 10, 10, 9, 9, 6, 6, 8, 8, 8, 10, 10, 10, 11, 11, 6, 6, 10, 10, 10, 8, 8, 11, 11, 4, 4, 9, 9, 8, 8, 11, 11, 10, 10, 5, 5, 8, 8, 11, 11, 11, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 11, 11, 11, 5, 5, 7, 7, 9}, + {12, 9, 9, 6, 6, 8, 8, 10, 11, 11, 9, 9, 10, 10, 10, 4, 4, 9, 9, 9, 11, 11, 8, 8, 10, 10, 5, 5, 8, 8, 3, 3, 6, 6, 10, 10, 10, 9, 9, 4, 4, 12, 3, 3, 11, 11, 5, 5, 10, 10, 7, 7, 9, 9, 6, 6, 10, 10, 8, 8, 11, 11, 11}, + {12, 5, 5, 5, 8, 8, 11, 11, 5, 5, 9, 9, 6, 6, 7, 7, 3, 3, 5, 5, 5, 7, 7, 8, 8, 11, 11, 4, 4, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 7, 7, 7, 4, 4, 9, 9, 10, 10, 8, 8, 11, 11, 8, 8, 8, 10, 10, 11, 11, 6, 6, 7, 7}, + {12, 4, 4, 11, 11, 5, 5, 7, 7, 9, 9, 11, 11, 10, 10, 4, 4, 9, 9, 11, 11, 5, 5, 8, 8, 10, 10, 11, 11, 5, 5, 3, 3, 9, 9, 6, 6, 10, 10, 4, 4, 7, 7, 7, 11, 11, 6, 6, 6, 9, 9, 10, 10, 10, 11, 11, 3, 3, 3, 7, 7, 10, 10}, + {12, 9, 10, 10, 11, 11, 6, 6, 8, 8, 5, 5, 11, 11, 6, 6, 8, 8, 10, 10, 11, 11, 6, 6, 10, 10, 4, 4, 9, 9, 7, 7, 4, 4, 4, 5, 5, 9, 9, 8, 8, 8, 11, 11, 7, 7, 9, 9, 9, 3, 3, 11, 11, 11, 10, 10, 9, 9, 5, 5, 7, 7, 7}, + {12, 6, 6, 6, 4, 4, 9, 9, 8, 8, 7, 7, 11, 11, 9, 9, 7, 7, 8, 8, 5, 5, 11, 11, 11, 9, 9, 8, 8, 10, 10, 5, 5, 7, 7, 11, 11, 10, 10, 3, 3, 6, 6, 6, 11, 11, 9, 9, 9, 10, 10, 10, 4, 4, 4, 3, 3, 9, 9, 5, 5, 8, 8}, + } + + GateofOlympusReelBaseSpin3Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelBaseSpin7Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelBaseSpin7Reel = [][]int64{ + {11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6}, + {1, 9, 3, 8, 5, 1, 10, 7, 6, 11, 1, 3, 8, 5, 4, 1, 7, 6, 11, 9, 1, 8, 5, 4, 10, 1, 6, 11, 9, 3, 1, 5, 4, 10, 7, 1, 11, 9, 3, 8, 1, 4, 10, 7, 6}, + {1, 9, 3, 8, 5, 1, 10, 7, 6, 11, 1, 3, 8, 5, 4, 1, 7, 6, 11, 9, 1, 8, 5, 4, 10, 1, 6, 11, 9, 3, 1, 5, 4, 10, 7, 1, 11, 9, 3, 8, 1, 4, 10, 7, 6}, + {1, 9, 3, 8, 5, 1, 10, 7, 6, 11, 1, 3, 8, 5, 4, 1, 7, 6, 11, 9, 1, 8, 5, 4, 10, 1, 6, 11, 9, 3, 1, 5, 4, 10, 7, 1, 11, 9, 3, 8, 1, 4, 10, 7, 6}, + {1, 9, 3, 8, 5, 1, 10, 7, 6, 11, 1, 3, 8, 5, 4, 1, 7, 6, 11, 9, 1, 8, 5, 4, 10, 1, 6, 11, 9, 3, 1, 5, 4, 10, 7, 1, 11, 9, 3, 8, 1, 4, 10, 7, 6}, + {11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6, 11, 9, 3, 8, 5, 4, 10, 7, 6}, + } + + GateofOlympusReelBaseSpin7Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelBaseSpin8Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelBaseSpin8Reel = [][]int64{ + {1, 6, 6, 11, 8, 10, 11, 9, 7, 6, 6, 11, 8, 8, 9, 10, 7, 11, 11, 8, 6, 10, 9, 4, 11, 11, 4, 4, 9, 11, 8, 7, 11, 1, 9, 10, 5, 5, 8, 10, 11, 6, 11, 10, 7, 11, 9, 10, 10, 4, 4, 3, 3, 7, 6, 11, 5, 5, 7, 10, 9}, + {1, 9, 9, 6, 6, 8, 8, 10, 4, 11, 9, 9, 10, 10, 11, 4, 10, 8, 9, 9, 7, 11, 8, 7, 5, 5, 7, 9, 10, 3, 6, 7, 8, 6, 11, 9, 7, 4, 4, 1, 3, 11, 11, 9, 5, 5, 10, 6, 7, 7, 10, 9, 6, 6, 11, 10, 8, 8, 11, 7, 11}, + {1, 5, 11, 5, 8, 8, 11, 7, 5, 10, 9, 7, 10, 6, 7, 1, 10, 3, 5, 10, 5, 7, 11, 11, 11, 4, 4, 7, 10, 9, 11, 11, 10, 4, 4, 9, 3, 7, 10, 7, 4, 11, 9, 9, 10, 7, 8, 8, 11, 7, 8, 9, 8, 10, 7, 11, 11, 6, 6, 8, 7}, + {1, 4, 4, 11, 10, 5, 5, 11, 11, 9, 9, 6, 11, 10, 9, 4, 4, 9, 9, 4, 8, 8, 10, 10, 11, 11, 5, 5, 3, 11, 9, 9, 1, 8, 6, 10, 4, 4, 7, 9, 7, 11, 11, 6, 7, 6, 10, 9, 8, 7, 10, 3, 11, 3, 11, 3, 7, 7, 10, 10}, + {1, 9, 10, 10, 11, 7, 4, 6, 8, 8, 1, 5, 9, 11, 6, 6, 8, 8, 10, 10, 11, 10, 7, 4, 4, 11, 9, 7, 6, 8, 9, 4, 5, 5, 7, 9, 7, 8, 8, 9, 10, 7, 7, 11, 11, 9, 3, 3, 11, 11, 8, 10, 10, 9, 9, 5, 5, 10, 11, 7}, + {1, 6, 7, 6, 4, 11, 9, 9, 10, 8, 3, 7, 11, 6, 9, 9, 8, 7, 10, 8, 5, 6, 9, 9, 8, 8, 7, 10, 5, 5, 7, 7, 11, 9, 10, 11, 3, 7, 4, 10, 6, 11, 11, 9, 9, 9, 10, 8, 10, 4, 11, 4, 3, 3, 9, 9, 5, 5, 9, 8}, + } + + GateofOlympusReelBaseSpin8Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelChoose = []*structs.GateofOlympusReelChoose{ + { + ID: 1, + IsFreeSpin: false, + NodeType: "BaseSpin1", + Weights: []int64{40, 162, 0}, + }, + { + ID: 2, + IsFreeSpin: false, + NodeType: "BaseSpin2", + Weights: []int64{66, 0, 0}, + }, + { + ID: 3, + IsFreeSpin: false, + NodeType: "BaseSpin3", + Weights: []int64{20, 68, 0}, + }, + { + ID: 4, + IsFreeSpin: false, + NodeType: "BaseSpin7", + Weights: []int64{0, 0, 1}, + }, + { + ID: 5, + IsFreeSpin: false, + NodeType: "BaseSpin8", + Weights: []int64{1, 180, 0}, + }, + { + ID: 6, + IsFreeSpin: true, + NodeType: "FreeSpin4", + Weights: []int64{1, 1, 1}, + }, + { + ID: 7, + IsFreeSpin: true, + NodeType: "FreeSpin5", + Weights: []int64{2, 2, 2}, + }, + } + + GateofOlympusReelFreeSpinRange = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelFreeSpinReel = [][]int64{ + {12, 6, 6, 11, 11, 10, 10, 9, 9, 6, 6, 8, 8, 8, 10, 10, 10, 11, 11, 6, 6, 10, 10, 10, 8, 8, 1, 11, 11, 4, 4, 9, 9, 8, 8, 11, 11, 10, 10, 5, 5, 8, 8, 11, 11, 11, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 11, 11, 11, 5, 5, 7, 7, 9}, + {12, 9, 9, 6, 6, 8, 8, 10, 11, 11, 9, 9, 10, 10, 10, 4, 4, 9, 9, 9, 11, 11, 8, 8, 10, 10, 1, 5, 5, 8, 8, 3, 3, 6, 6, 10, 10, 10, 9, 9, 4, 4, 12, 3, 3, 11, 11, 5, 5, 10, 10, 7, 7, 9, 9, 6, 6, 10, 10, 8, 8, 11, 11, 11}, + {12, 5, 5, 5, 8, 8, 11, 11, 5, 5, 9, 9, 6, 6, 7, 7, 3, 3, 5, 5, 5, 7, 7, 8, 8, 1, 11, 11, 4, 4, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 7, 7, 7, 4, 4, 9, 9, 10, 10, 8, 8, 11, 11, 8, 8, 8, 10, 10, 11, 11, 6, 6, 7, 7}, + {12, 4, 4, 11, 11, 5, 5, 7, 7, 9, 9, 11, 11, 10, 10, 4, 4, 9, 9, 11, 11, 5, 5, 1, 8, 8, 10, 10, 11, 11, 5, 5, 3, 3, 9, 9, 6, 6, 10, 10, 4, 4, 7, 7, 7, 11, 11, 6, 6, 6, 9, 9, 10, 10, 10, 11, 11, 3, 3, 3, 7, 7, 10, 10}, + {12, 9, 10, 10, 11, 11, 6, 6, 8, 8, 5, 5, 11, 11, 6, 6, 8, 8, 10, 10, 11, 11, 6, 6, 1, 10, 10, 4, 4, 9, 9, 7, 7, 4, 4, 4, 5, 5, 9, 9, 8, 8, 8, 11, 11, 7, 7, 9, 9, 9, 3, 3, 11, 11, 11, 10, 10, 9, 9, 5, 5, 7, 7, 7}, + {12, 6, 6, 6, 4, 4, 9, 9, 8, 8, 7, 7, 11, 11, 9, 9, 7, 7, 8, 8, 5, 5, 11, 11, 11, 1, 9, 9, 8, 8, 10, 10, 5, 5, 7, 7, 11, 11, 10, 10, 3, 3, 6, 6, 6, 11, 11, 9, 9, 9, 10, 10, 10, 4, 4, 4, 3, 3, 9, 9, 5, 5, 8, 8}, + } + + GateofOlympusReelFreeSpinWeight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelFreeSpin4Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelFreeSpin4Reel = [][]int64{ + {12, 6, 6, 11, 11, 10, 10, 9, 9, 6, 6, 8, 8, 8, 10, 10, 10, 11, 11, 6, 6, 10, 10, 10, 8, 8, 1, 11, 11, 4, 4, 9, 9, 8, 8, 11, 11, 10, 10, 5, 5, 8, 8, 11, 11, 11, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 11, 11, 11, 5, 5, 7, 7, 9}, + {12, 9, 9, 6, 6, 8, 8, 10, 11, 11, 9, 9, 10, 10, 10, 4, 4, 9, 9, 9, 11, 11, 8, 8, 10, 10, 1, 5, 5, 8, 8, 3, 3, 6, 6, 10, 10, 10, 9, 9, 4, 4, 12, 3, 3, 11, 11, 5, 5, 10, 10, 7, 7, 9, 9, 6, 6, 10, 10, 8, 8, 11, 11, 11}, + {12, 5, 5, 5, 8, 8, 11, 11, 5, 5, 9, 9, 6, 6, 7, 7, 3, 3, 5, 5, 5, 7, 7, 8, 8, 1, 11, 11, 4, 4, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 7, 7, 7, 4, 4, 9, 9, 10, 10, 8, 8, 11, 11, 8, 8, 8, 10, 10, 11, 11, 6, 6, 7, 7}, + {12, 4, 4, 11, 11, 5, 5, 7, 7, 9, 9, 11, 11, 10, 10, 4, 4, 9, 9, 11, 11, 5, 5, 1, 8, 8, 10, 10, 11, 11, 5, 5, 3, 3, 9, 9, 6, 6, 10, 10, 4, 4, 7, 7, 7, 11, 11, 6, 6, 6, 9, 9, 10, 10, 10, 11, 11, 3, 3, 3, 7, 7, 10, 10}, + {12, 9, 10, 10, 11, 11, 6, 6, 8, 8, 5, 5, 11, 11, 6, 6, 8, 8, 10, 10, 11, 11, 6, 6, 1, 10, 10, 4, 4, 9, 9, 7, 7, 4, 4, 4, 5, 5, 9, 9, 8, 8, 8, 11, 11, 7, 7, 9, 9, 9, 3, 3, 11, 11, 11, 10, 10, 9, 9, 5, 5, 7, 7, 7}, + {12, 6, 6, 6, 4, 4, 9, 9, 8, 8, 7, 7, 11, 11, 9, 9, 7, 7, 8, 8, 5, 5, 11, 11, 11, 1, 9, 9, 8, 8, 10, 10, 5, 5, 7, 7, 11, 11, 10, 10, 3, 3, 6, 6, 6, 11, 11, 9, 9, 9, 10, 10, 10, 4, 4, 4, 3, 3, 9, 9, 5, 5, 8, 8}, + } + + GateofOlympusReelFreeSpin4Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusReelFreeSpin5Range = [][]int64{ + {5, 5, 5, 5, 5, 5}, + } + + GateofOlympusReelFreeSpin5Reel = [][]int64{ + {12, 6, 6, 11, 11, 10, 10, 9, 9, 6, 6, 8, 8, 8, 10, 10, 10, 11, 11, 6, 6, 10, 10, 10, 8, 8, 11, 11, 4, 4, 9, 9, 8, 8, 11, 11, 10, 10, 5, 5, 8, 8, 11, 11, 11, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 11, 11, 11, 5, 5, 7, 7, 9}, + {12, 9, 9, 6, 6, 8, 8, 10, 11, 11, 9, 9, 10, 10, 10, 4, 4, 9, 9, 9, 11, 11, 8, 8, 10, 10, 5, 5, 8, 8, 3, 3, 6, 6, 10, 10, 10, 9, 9, 4, 4, 12, 3, 3, 11, 11, 5, 5, 10, 10, 7, 7, 9, 9, 6, 6, 10, 10, 8, 8, 11, 11, 11}, + {12, 5, 5, 5, 8, 8, 11, 11, 5, 5, 9, 9, 6, 6, 7, 7, 3, 3, 5, 5, 5, 7, 7, 8, 8, 11, 11, 4, 4, 7, 7, 9, 9, 10, 10, 4, 4, 3, 3, 7, 7, 7, 4, 4, 9, 9, 10, 10, 8, 8, 11, 11, 8, 8, 8, 10, 10, 11, 11, 6, 6, 7, 7}, + {12, 4, 4, 11, 11, 5, 5, 7, 7, 9, 9, 11, 11, 10, 10, 4, 4, 9, 9, 11, 11, 5, 5, 8, 8, 10, 10, 11, 11, 5, 5, 3, 3, 9, 9, 6, 6, 10, 10, 4, 4, 7, 7, 7, 11, 11, 6, 6, 6, 9, 9, 10, 10, 10, 11, 11, 3, 3, 3, 7, 7, 10, 10}, + {12, 9, 10, 10, 11, 11, 6, 6, 8, 8, 5, 5, 11, 11, 6, 6, 8, 8, 10, 10, 11, 11, 6, 6, 10, 10, 4, 4, 9, 9, 7, 7, 4, 4, 4, 5, 5, 9, 9, 8, 8, 8, 11, 11, 7, 7, 9, 9, 9, 3, 3, 11, 11, 11, 10, 10, 9, 9, 5, 5, 7, 7, 7}, + {12, 6, 6, 6, 4, 4, 9, 9, 8, 8, 7, 7, 11, 11, 9, 9, 7, 7, 8, 8, 5, 5, 11, 11, 11, 9, 9, 8, 8, 10, 10, 5, 5, 7, 7, 11, 11, 10, 10, 3, 3, 6, 6, 6, 11, 11, 9, 9, 9, 10, 10, 10, 4, 4, 4, 3, 3, 9, 9, 5, 5, 8, 8}, + } + + GateofOlympusReelFreeSpin5Weight = [][]float64{ + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + } + + GateofOlympusScatter = map[int64]*structs.GateofOlympusScatter{ + 1: { + ScatterCount: 1, + FreeSpinBouts: 0, + FreeSpinExtraBouts: 0, + BasePayrate: 0, + FreePayrate: 0, + }, + 2: { + ScatterCount: 2, + FreeSpinBouts: 0, + FreeSpinExtraBouts: 0, + BasePayrate: 0, + FreePayrate: 0, + }, + 3: { + ScatterCount: 3, + FreeSpinBouts: 0, + FreeSpinExtraBouts: 5, + BasePayrate: 0, + FreePayrate: 0, + }, + 4: { + ScatterCount: 4, + FreeSpinBouts: 15, + FreeSpinExtraBouts: 5, + BasePayrate: 3, + FreePayrate: 3, + }, + 5: { + ScatterCount: 5, + FreeSpinBouts: 15, + FreeSpinExtraBouts: 5, + BasePayrate: 5, + FreePayrate: 5, + }, + 6: { + ScatterCount: 6, + FreeSpinBouts: 15, + FreeSpinExtraBouts: 5, + BasePayrate: 100, + FreePayrate: 100, + }, + } + + GateofOlympusSymbol = map[int64]*structs.GateofOlympusSymbol{ + 1: { + ID: 1, + Name: "Scatter", + IsWild: false, + Group: []int64{1}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 2: { + ID: 2, + Name: "无", + IsWild: false, + Group: []int64{2}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 3: { + ID: 3, + Name: "皇冠", + IsWild: false, + Group: []int64{3}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 200, 200, 500, 500, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000}, + ClientOrder: 1, + ClientDsc: "", + }, + 4: { + ID: 4, + Name: "沙漏", + IsWild: false, + Group: []int64{4}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 50, 50, 200, 200, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500}, + ClientOrder: 2, + ClientDsc: "", + }, + 5: { + ID: 5, + Name: "戒指", + IsWild: false, + Group: []int64{5}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 40, 40, 100, 100, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300}, + ClientOrder: 3, + ClientDsc: "", + }, + 6: { + ID: 6, + Name: "酒杯", + IsWild: false, + Group: []int64{6}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 30, 30, 40, 40, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240}, + ClientOrder: 4, + ClientDsc: "", + }, + 7: { + ID: 7, + Name: "红宝石", + IsWild: false, + Group: []int64{7}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 20, 20, 30, 30, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}, + ClientOrder: 5, + ClientDsc: "", + }, + 8: { + ID: 8, + Name: "紫宝石", + IsWild: false, + Group: []int64{8}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 16, 16, 24, 24, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160}, + ClientOrder: 6, + ClientDsc: "", + }, + 9: { + ID: 9, + Name: "黄宝石", + IsWild: false, + Group: []int64{9}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 10, 10, 20, 20, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}, + ClientOrder: 7, + ClientDsc: "", + }, + 10: { + ID: 10, + Name: "绿宝石", + IsWild: false, + Group: []int64{10}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 8, 8, 18, 18, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80}, + ClientOrder: 8, + ClientDsc: "", + }, + 11: { + ID: 11, + Name: "蓝宝石", + IsWild: false, + Group: []int64{11}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 5, 5, 15, 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + ClientOrder: 9, + ClientDsc: "", + }, + 12: { + ID: 12, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 13: { + ID: 13, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 14: { + ID: 14, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 15: { + ID: 15, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 16: { + ID: 16, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 17: { + ID: 17, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 18: { + ID: 18, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 19: { + ID: 19, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 20: { + ID: 20, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 21: { + ID: 21, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 22: { + ID: 22, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 23: { + ID: 23, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 24: { + ID: 24, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 25: { + ID: 25, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 26: { + ID: 26, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + 27: { + ID: 27, + Name: "倍乘", + IsWild: false, + Group: []int64{12}, + PayRate: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + ClientOrder: 0, + ClientDsc: "", + }, + } + + GateofOlympusSymbolBetRatio = []*structs.GateofOlympusSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/matrix.go b/gamesrv/slotspkg/internal/exported/excel2go/base/matrix.go new file mode 100644 index 0000000..7c5f3de --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/matrix.go @@ -0,0 +1,3965 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + MatrixFeaturesForm15X1TypeA = []*structs.MatrixFeaturesForm15X1TypeA{ + { + Type: "FeatureForm15X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm19X1TypeA = []*structs.MatrixFeaturesForm19X1TypeA{ + { + Type: "FeatureForm19X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm20X1TypeA = []*structs.MatrixFeaturesForm20X1TypeA{ + { + Type: "FeatureForm20X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm25X1TypeA = []*structs.MatrixFeaturesForm25X1TypeA{ + { + Type: "FeatureForm25X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm30X1TypeA = []*structs.MatrixFeaturesForm30X1TypeA{ + { + Type: "FeatureForm30X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm35X1TypeA = []*structs.MatrixFeaturesForm35X1TypeA{ + { + Type: "FeatureForm35X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm40X1 = []*structs.MatrixFeaturesForm40X1{ + { + Type: "FeatureForm40X1", + LinkType: 2, + Direction: 0, + LineCount: 0, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm40X1TypeA = []*structs.MatrixFeaturesForm40X1TypeA{ + { + Type: "FeatureForm40X1", + LinkType: 2, + Direction: 0, + LineCount: 0, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixFeaturesForm7X1TypeA = []*structs.MatrixFeaturesForm7X1TypeA{ + { + Type: "FeatureForm15X1TypeA", + LinkType: 2, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{1, 1, 1, 1, 1, 1, 1}, + }, + } + + MatrixLine100Form12X5TypeA = []*structs.MatrixLine100Form12X5TypeA{ + { + Type: "Line100Form12X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + {10, 10, 10, 10, 10}, + {9, 10, 9, 10, 9}, + {10, 9, 10, 9, 10}, + {8, 9, 10, 9, 8}, + {10, 9, 8, 9, 10}, + {9, 10, 10, 10, 9}, + {10, 9, 9, 9, 10}, + {9, 9, 10, 9, 9}, + {10, 10, 9, 10, 10}, + {8, 8, 9, 10, 10}, + {11, 11, 11, 11, 11}, + {10, 11, 10, 11, 10}, + {11, 10, 11, 10, 11}, + {9, 10, 11, 10, 9}, + {11, 10, 9, 10, 11}, + {10, 11, 11, 11, 10}, + {11, 10, 10, 10, 11}, + {10, 10, 11, 10, 10}, + {11, 11, 10, 11, 11}, + {9, 9, 10, 11, 11}, + {12, 12, 12, 12, 12}, + {11, 12, 11, 12, 11}, + {12, 11, 12, 11, 12}, + {10, 11, 12, 11, 10}, + {12, 11, 10, 11, 12}, + {11, 12, 12, 12, 11}, + {12, 11, 11, 11, 12}, + {11, 11, 12, 11, 11}, + {12, 12, 11, 12, 12}, + {10, 10, 11, 12, 12}, + }, + Form: []int64{12, 12, 12, 12, 12}, + }, + } + + MatrixLine100Form6X5TypeA = []*structs.MatrixLine100Form6X5TypeA{ + { + Type: "Line100Form6X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {1, 1, 2, 1, 1}, + {1, 2, 2, 2, 1}, + {1, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {1, 1, 1, 2, 1}, + {1, 2, 1, 1, 1}, + {1, 1, 2, 2, 1}, + {1, 2, 2, 1, 1}, + {1, 1, 3, 1, 1}, + {1, 1, 3, 2, 1}, + {1, 2, 3, 1, 1}, + {1, 3, 3, 3, 1}, + {1, 3, 1, 3, 1}, + {1, 3, 2, 3, 1}, + {1, 3, 4, 3, 1}, + {2, 2, 2, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {2, 3, 2, 2, 2}, + {2, 1, 2, 2, 2}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {2, 3, 4, 3, 2}, + {2, 2, 4, 2, 2}, + {2, 4, 4, 4, 2}, + {2, 4, 3, 4, 2}, + {3, 3, 3, 3, 3}, + {3, 3, 4, 3, 3}, + {3, 3, 2, 3, 3}, + {3, 4, 4, 4, 3}, + {3, 2, 2, 2, 3}, + {3, 4, 3, 4, 3}, + {3, 2, 3, 2, 3}, + {3, 3, 3, 4, 3}, + {3, 3, 3, 2, 3}, + {3, 4, 3, 3, 3}, + {3, 2, 3, 3, 3}, + {3, 4, 2, 4, 3}, + {3, 2, 4, 2, 3}, + {3, 4, 5, 4, 3}, + {3, 3, 5, 3, 3}, + {3, 2, 1, 2, 3}, + {3, 3, 1, 3, 3}, + {4, 4, 4, 4, 4}, + {4, 4, 5, 4, 4}, + {4, 4, 3, 4, 4}, + {4, 5, 5, 5, 4}, + {4, 3, 3, 3, 4}, + {4, 5, 4, 5, 4}, + {4, 3, 4, 3, 4}, + {4, 4, 4, 5, 4}, + {4, 4, 4, 3, 4}, + {4, 5, 4, 4, 4}, + {4, 3, 4, 4, 4}, + {4, 5, 3, 5, 4}, + {4, 3, 5, 3, 4}, + {4, 5, 6, 5, 4}, + {4, 4, 6, 4, 4}, + {4, 3, 2, 3, 4}, + {4, 4, 2, 4, 4}, + {5, 5, 5, 5, 5}, + {5, 5, 6, 5, 5}, + {5, 5, 4, 5, 5}, + {5, 6, 6, 6, 5}, + {5, 4, 4, 4, 5}, + {5, 6, 5, 6, 5}, + {5, 4, 5, 4, 5}, + {5, 5, 5, 6, 5}, + {5, 5, 5, 4, 5}, + {5, 6, 5, 5, 5}, + {5, 4, 5, 5, 5}, + {5, 6, 4, 6, 5}, + {5, 4, 6, 4, 5}, + {5, 4, 3, 4, 5}, + {5, 5, 3, 5, 5}, + {5, 3, 3, 3, 5}, + {5, 3, 4, 3, 5}, + {6, 6, 6, 6, 6}, + {6, 6, 5, 6, 6}, + {6, 5, 5, 5, 6}, + {6, 5, 4, 5, 6}, + {6, 5, 6, 5, 6}, + {6, 6, 6, 5, 6}, + {6, 5, 6, 6, 6}, + {6, 6, 5, 5, 6}, + {6, 5, 5, 6, 6}, + {6, 6, 5, 6, 6}, + {6, 6, 4, 5, 6}, + {6, 5, 4, 6, 6}, + {6, 4, 4, 4, 6}, + {6, 4, 6, 4, 6}, + {6, 4, 5, 4, 6}, + {6, 4, 3, 4, 6}, + }, + Form: []int64{6, 6, 6, 6, 6}, + }, + } + + MatrixLine10Form343TypeA = []*structs.MatrixLine10Form343TypeA{ + { + Type: "Line10Form343TypeA", + LinkType: 0, + Direction: 0, + LineCount: 10, + Lines: [][]int64{ + {1, 1, 1}, + {1, 2, 1}, + {1, 2, 2}, + {2, 2, 1}, + {2, 2, 2}, + {2, 3, 2}, + {2, 3, 3}, + {3, 3, 2}, + {3, 3, 3}, + {3, 4, 3}, + }, + Form: []int64{3, 4, 3}, + }, + } + + MatrixLine10Form3X5TypeA = []*structs.MatrixLine10Form3X5TypeA{ + { + Type: "Line10Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 10, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {3, 2, 2, 2, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine1Form3X3TypeA = []*structs.MatrixLine1Form3X3TypeA{ + { + Type: "Line1Form3X3TypeA", + LinkType: 0, + Direction: 0, + LineCount: 1, + Lines: [][]int64{ + {1, 1, 1}, + }, + Form: []int64{3, 3, 3}, + }, + } + + MatrixLine1Form3X3TypeB = []*structs.MatrixLine1Form3X3TypeB{ + { + Type: "Line1Form3X3TypeB", + LinkType: 0, + Direction: 0, + LineCount: 1, + Lines: [][]int64{ + {2, 2, 2}, + }, + Form: []int64{3, 3, 3}, + }, + } + + MatrixLine1Form5X5TypeA = []*structs.MatrixLine1Form5X5TypeA{ + { + Type: "Line1Form5X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 1, + Lines: [][]int64{ + {3, 3, 3}, + }, + Form: []int64{5, 5, 5}, + }, + } + + MatrixLine20Form3X5TypeA = []*structs.MatrixLine20Form3X5TypeA{ + { + Type: "Line20Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 20, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {2, 1, 3, 1, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine25Form36666TypeA = []*structs.MatrixLine25Form36666TypeA{ + { + Type: "Line25Form36666TypeA", + LinkType: 0, + Direction: 0, + LineCount: 25, + Lines: [][]int64{ + {2, 5, 5, 5, 5}, + {1, 4, 4, 4, 4}, + {3, 6, 6, 6, 6}, + {1, 5, 6, 5, 4}, + {3, 5, 4, 5, 6}, + {2, 4, 4, 4, 5}, + {2, 6, 6, 6, 5}, + {1, 4, 5, 6, 6}, + {3, 6, 5, 4, 4}, + {2, 4, 5, 4, 5}, + {2, 6, 5, 6, 5}, + {1, 5, 5, 5, 6}, + {3, 5, 5, 5, 4}, + {2, 5, 4, 5, 6}, + {2, 5, 6, 5, 4}, + {1, 5, 4, 5, 4}, + {3, 5, 6, 5, 6}, + {1, 4, 6, 4, 4}, + {3, 6, 4, 6, 6}, + {2, 4, 6, 4, 5}, + {2, 6, 4, 6, 5}, + {1, 6, 4, 6, 4}, + {3, 4, 6, 4, 6}, + {1, 6, 6, 6, 4}, + {3, 4, 4, 4, 6}, + }, + Form: []int64{3, 6, 6, 6, 6}, + }, + } + + MatrixLine25Form3X5TypeA = []*structs.MatrixLine25Form3X5TypeA{ + { + Type: "Line25Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 25, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine25Form3X5TypeB = []*structs.MatrixLine25Form3X5TypeB{ + { + Type: "Line25Form3X5TypeB", + LinkType: 0, + Direction: 2, + LineCount: 25, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine25Form3X5TypeC = []*structs.MatrixLine25Form3X5TypeC{ + { + Type: "Line25Form3X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 25, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine25Form3X5TypeD = []*structs.MatrixLine25Form3X5TypeD{ + { + Type: "Line25Form3X5TypeD", + LinkType: 0, + Direction: 0, + LineCount: 25, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine25Form3X5TypeE = []*structs.MatrixLine25Form3X5TypeE{ + { + Type: "Line25Form3X5TypeE", + LinkType: 0, + Direction: 0, + LineCount: 25, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {2, 2, 1, 2, 3}, + {2, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form3X5TypeA = []*structs.MatrixLine30Form3X5TypeA{ + { + Type: "Line30Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {2, 1, 3, 2, 3}, + {1, 3, 2, 3, 1}, + {3, 2, 1, 1, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form3X5TypeB = []*structs.MatrixLine30Form3X5TypeB{ + { + Type: "Line30Form3X5TypeB", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form3X5TypeC = []*structs.MatrixLine30Form3X5TypeC{ + { + Type: "Line30Form3X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 1, 1}, + {1, 1, 2, 3, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {1, 2, 3, 3, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form3X5TypeD = []*structs.MatrixLine30Form3X5TypeD{ + { + Type: "Line30Form3X5TypeD", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 1, 2, 3, 1}, + {1, 3, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {3, 2, 1, 1, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form3X5TypeE = []*structs.MatrixLine30Form3X5TypeE{ + { + Type: "Line30Form3X5TypeE", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 3, 3, 2, 3}, + {1, 1, 1, 2, 1}, + {2, 2, 2, 1, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form3X6TypeA = []*structs.MatrixLine30Form3X6TypeA{ + { + Type: "Line30Form3X6TypeA", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {3, 2, 1, 2, 3, 2}, + {1, 2, 3, 2, 1, 2}, + {1, 1, 2, 2, 1, 1}, + {3, 3, 2, 2, 3, 3}, + {1, 2, 2, 2, 2, 1}, + {3, 2, 2, 2, 2, 3}, + {1, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 3}, + {3, 2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2, 1}, + {2, 2, 1, 1, 2, 2}, + {2, 2, 3, 3, 2, 2}, + {1, 3, 1, 3, 1, 3}, + {3, 1, 3, 1, 3, 1}, + {1, 2, 3, 2, 3, 2}, + {3, 2, 1, 2, 1, 2}, + {1, 2, 1, 2, 3, 2}, + {1, 2, 3, 2, 3, 2}, + {1, 3, 1, 1, 3, 1}, + {3, 1, 3, 3, 1, 3}, + {3, 2, 1, 2, 3, 3}, + {1, 2, 3, 2, 1, 1}, + {1, 1, 2, 2, 1, 2}, + {3, 3, 2, 2, 3, 2}, + {1, 2, 2, 2, 2, 3}, + {3, 2, 2, 2, 2, 1}, + {3, 1, 3, 1, 3, 2}, + }, + Form: []int64{3, 3, 3, 3, 3, 3}, + }, + } + + MatrixLine30Form4X5TypeA = []*structs.MatrixLine30Form4X5TypeA{ + { + Type: "Line30Form4X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 1, 2, 3}, + {2, 3, 2, 3, 4}, + {4, 3, 4, 3, 2}, + {3, 2, 3, 2, 1}, + {1, 2, 3, 2, 3}, + {2, 3, 4, 3, 4}, + {3, 2, 1, 2, 1}, + {4, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine30Form4X5TypeB = []*structs.MatrixLine30Form4X5TypeB{ + { + Type: "Line30Form4X5TypeB", + LinkType: 0, + Direction: 0, + LineCount: 30, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine3Form3X3TypeA = []*structs.MatrixLine3Form3X3TypeA{ + { + Type: "Line3Form3X3TypeA", + LinkType: 0, + Direction: 0, + LineCount: 3, + Lines: [][]int64{ + {1, 1, 1}, + {2, 2, 2}, + {3, 3, 3}, + }, + Form: []int64{3, 3, 3}, + }, + } + + MatrixLine40Form34543TypeA = []*structs.MatrixLine40Form34543TypeA{ + { + Type: "Line40Form34543TypeA", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {1, 1, 4, 3, 2}, + {1, 2, 4, 2, 2}, + {1, 2, 3, 4, 3}, + {1, 3, 1, 1, 1}, + {1, 4, 5, 4, 3}, + {2, 1, 2, 1, 1}, + {2, 1, 3, 3, 2}, + {2, 2, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {2, 3, 2, 1, 1}, + {2, 3, 3, 4, 3}, + {2, 4, 5, 3, 3}, + {2, 4, 5, 4, 3}, + {3, 1, 1, 2, 2}, + {3, 2, 4, 2, 1}, + {3, 3, 3, 3, 2}, + {3, 3, 2, 2, 2}, + {3, 4, 4, 4, 3}, + {3, 4, 5, 3, 2}, + {3, 4, 5, 4, 3}, + {3, 4, 2, 2, 2}, + {3, 3, 2, 3, 2}, + {3, 3, 3, 1, 1}, + {3, 2, 5, 4, 3}, + {3, 1, 1, 1, 1}, + {2, 4, 4, 4, 3}, + {2, 4, 3, 2, 2}, + {2, 3, 5, 4, 3}, + {2, 3, 4, 3, 2}, + {2, 2, 4, 4, 3}, + {2, 2, 3, 1, 1}, + {2, 1, 1, 2, 1}, + {2, 1, 1, 1, 1}, + {1, 4, 5, 3, 2}, + {1, 3, 2, 3, 3}, + {1, 2, 3, 2, 2}, + {1, 2, 4, 3, 2}, + {1, 1, 2, 1, 1}, + {1, 1, 1, 2, 2}, + }, + Form: []int64{3, 4, 5, 4, 3}, + }, + } + + MatrixLine40Form3X5TypeA = []*structs.MatrixLine40Form3X5TypeA{ + { + Type: "Line40Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 2, 2, 3, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine40Form3X5TypeB = []*structs.MatrixLine40Form3X5TypeB{ + { + Type: "Line40Form3X5TypeB", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 1, 1, 2}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {3, 3, 3, 3, 2}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine40Form3X5TypeC = []*structs.MatrixLine40Form3X5TypeC{ + { + Type: "Line40Form3X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 2, 3, 1}, + {2, 3, 2, 1, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 2, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {3, 3, 2, 1, 2}, + {1, 1, 2, 3, 2}, + {3, 2, 3, 3, 3}, + {1, 2, 1, 1, 1}, + {1, 2, 3, 2, 2}, + {3, 2, 1, 2, 2}, + {2, 1, 2, 1, 1}, + {2, 3, 2, 3, 3}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {2, 2, 2, 2, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine40Form3X5TypeD = []*structs.MatrixLine40Form3X5TypeD{ + { + Type: "Line40Form3X5TypeD", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {2, 1, 3, 2, 3}, + {1, 3, 2, 3, 1}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 1, 1}, + {3, 1, 1, 2, 3}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 1, 2, 1}, + {3, 3, 1, 1, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine40Form4X5TypeA = []*structs.MatrixLine40Form4X5TypeA{ + { + Type: "Line40Form4X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 1, 3, 3}, + {4, 4, 2, 4, 4}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine40Form4X5TypeB = []*structs.MatrixLine40Form4X5TypeB{ + { + Type: "Line40Form4X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {1, 2, 3, 4, 4}, + {4, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {3, 4, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {2, 3, 2, 1, 2}, + {3, 2, 3, 4, 3}, + {1, 2, 2, 2, 1}, + {4, 3, 3, 3, 4}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {2, 2, 1, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 3, 3, 3, 4}, + {3, 2, 2, 2, 1}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {1, 2, 3, 3, 4}, + {4, 3, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {2, 1, 1, 2, 3}, + {3, 4, 4, 3, 2}, + {1, 2, 2, 3, 4}, + {4, 3, 3, 2, 1}, + {2, 1, 2, 3, 4}, + {3, 4, 3, 2, 1}, + {1, 2, 3, 4, 3}, + {4, 3, 2, 1, 2}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine40Form4X5TypeC = []*structs.MatrixLine40Form4X5TypeC{ + { + Type: "Line40Form4X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {4, 3, 2, 3, 4}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2}, + {3, 4, 3, 4, 3}, + {2, 3, 2, 3, 2}, + {3, 2, 3, 2, 3}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {2, 2, 3, 2, 2}, + {3, 3, 2, 3, 3}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 2, 2, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {4, 3, 3, 3, 4}, + {1, 2, 2, 2, 1}, + {3, 1, 1, 1, 3}, + {2, 4, 4, 4, 2}, + {4, 2, 2, 2, 4}, + {1, 3, 3, 3, 1}, + {3, 3, 1, 3, 3}, + {2, 2, 4, 2, 2}, + {4, 4, 2, 4, 4}, + {1, 1, 3, 1, 1}, + {4, 4, 1, 4, 4}, + {1, 1, 4, 1, 1}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 4}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine40Form4X6TypeA = []*structs.MatrixLine40Form4X6TypeA{ + { + Type: "Line40Form4X6TypeA", + LinkType: 0, + Direction: 0, + LineCount: 40, + Lines: [][]int64{ + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4, 4}, + {1, 1, 2, 2, 1, 1}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 4, 4, 3, 3}, + {2, 2, 1, 1, 2, 2}, + {3, 3, 2, 2, 3, 3}, + {4, 4, 3, 3, 4, 4}, + {1, 2, 3, 3, 2, 1}, + {2, 3, 4, 4, 3, 2}, + {3, 2, 1, 1, 2, 3}, + {4, 3, 2, 2, 3, 4}, + {1, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 3}, + {3, 4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3, 2}, + {4, 3, 4, 3, 4, 3}, + {1, 2, 2, 2, 2, 1}, + {2, 3, 3, 3, 3, 2}, + {3, 4, 4, 4, 4, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 2, 2, 2, 2, 3}, + {4, 3, 3, 3, 3, 4}, + {1, 2, 3, 4, 3, 2}, + {2, 3, 4, 3, 2, 1}, + {3, 2, 1, 2, 3, 4}, + {4, 3, 2, 1, 2, 3}, + {2, 1, 2, 3, 4, 3}, + {1, 2, 1, 2, 3, 4}, + {3, 4, 3, 2, 1, 2}, + {4, 3, 4, 3, 2, 1}, + {2, 1, 2, 2, 1, 2}, + {3, 2, 3, 3, 2, 3}, + {4, 3, 4, 4, 3, 4}, + {1, 2, 1, 1, 2, 1}, + {2, 3, 2, 2, 3, 2}, + {3, 4, 3, 3, 4, 3}, + }, + Form: []int64{4, 4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form3X5TypeA = []*structs.MatrixLine50Form3X5TypeA{ + { + Type: "Line50Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 2, 2, 2, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 2, 3, 2, 3}, + {3, 2, 1, 2, 1}, + {1, 1, 1, 1, 2}, + {3, 3, 3, 3, 2}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 1, 2, 3, 3}, + {2, 3, 2, 1, 1}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {1, 1, 2, 3, 2}, + {3, 3, 2, 1, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeB = []*structs.MatrixLine50Form3X5TypeB{ + { + Type: "Line50Form3X5TypeB", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 3, 2, 1, 3}, + {3, 1, 2, 3, 1}, + {2, 1, 3, 2, 3}, + {1, 3, 2, 3, 1}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 1, 1}, + {3, 1, 1, 2, 3}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 1, 2, 1}, + {3, 3, 1, 1, 1}, + {3, 3, 2, 3, 2}, + {1, 1, 3, 2, 1}, + {2, 2, 1, 2, 3}, + {2, 1, 1, 3, 2}, + {2, 3, 1, 1, 3}, + {3, 1, 1, 3, 1}, + {1, 2, 2, 3, 2}, + {1, 2, 3, 1, 3}, + {1, 3, 1, 2, 3}, + {2, 2, 3, 3, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeC = []*structs.MatrixLine50Form3X5TypeC{ + { + Type: "Line50Form3X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 2, 2, 1, 3}, + {2, 2, 2, 3, 1}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {3, 3, 2, 1, 2}, + {1, 1, 2, 3, 2}, + {3, 2, 3, 3, 3}, + {1, 2, 1, 1, 1}, + {1, 2, 3, 2, 2}, + {3, 2, 1, 2, 2}, + {2, 1, 2, 1, 1}, + {2, 3, 2, 3, 3}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 1}, + {3, 3, 3, 2, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 2, 2, 1}, + {3, 3, 2, 2, 3}, + {3, 2, 1, 2, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeD = []*structs.MatrixLine50Form3X5TypeD{ + { + Type: "Line50Form3X5TypeD", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 1, 2, 3, 1}, + {1, 3, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {1, 1, 3, 3, 3}, + {3, 3, 1, 1, 1}, + {2, 1, 3, 2, 3}, + {2, 3, 1, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 2, 2, 1}, + {3, 1, 1, 1, 1}, + {1, 3, 3, 3, 3}, + {3, 3, 3, 3, 1}, + {1, 1, 1, 1, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeE = []*structs.MatrixLine50Form3X5TypeE{ + { + Type: "Line50Form3X5TypeE", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 1, 1, 2}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {3, 3, 3, 3, 2}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {1, 1, 2, 2, 3}, + {3, 3, 2, 2, 1}, + {1, 1, 2, 3, 2}, + {3, 3, 2, 1, 2}, + {1, 2, 3, 2, 3}, + {3, 2, 1, 2, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {1, 3, 1, 3, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeF = []*structs.MatrixLine50Form3X5TypeF{ + { + Type: "Line50Form3X5TypeF", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 2, 3, 2}, + {2, 3, 2, 1, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 2, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {3, 3, 2, 1, 2}, + {1, 1, 2, 3, 2}, + {3, 2, 3, 3, 3}, + {1, 2, 1, 1, 1}, + {1, 2, 3, 2, 2}, + {3, 2, 1, 2, 2}, + {2, 1, 2, 1, 1}, + {2, 3, 2, 3, 3}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {2, 1, 1, 1, 1}, + {2, 3, 3, 3, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 3}, + {1, 1, 2, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 1, 2, 1}, + {3, 3, 3, 2, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 2, 2, 1}, + {3, 3, 2, 2, 3}, + {3, 2, 1, 2, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeG = []*structs.MatrixLine50Form3X5TypeG{ + { + Type: "Line50Form3X5TypeG", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {1, 1, 1, 1, 2}, + {3, 3, 3, 3, 2}, + {2, 2, 2, 2, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 1, 2, 2}, + {3, 3, 3, 2, 2}, + {2, 1, 1, 1, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form3X5TypeH = []*structs.MatrixLine50Form3X5TypeH{ + { + Type: "Line50Form3X5TypeH", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 1, 1, 2, 3}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {2, 1, 1, 2, 3}, + {2, 3, 3, 2, 1}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {1, 1, 1, 1, 2}, + {3, 3, 3, 3, 2}, + {2, 2, 2, 2, 3}, + {2, 2, 2, 2, 1}, + {2, 2, 1, 1, 1}, + {2, 2, 3, 3, 3}, + {1, 1, 1, 2, 2}, + {3, 3, 3, 2, 2}, + {2, 1, 1, 1, 1}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine50Form45454TypeA = []*structs.MatrixLine50Form45454TypeA{ + { + Type: "Line50Form45454TypeA", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {1, 1, 1, 2, 1}, + {1, 1, 1, 2, 2}, + {1, 2, 1, 1, 1}, + {1, 2, 1, 2, 1}, + {1, 2, 1, 2, 2}, + {1, 2, 2, 2, 1}, + {1, 2, 2, 2, 2}, + {1, 2, 2, 3, 2}, + {1, 2, 2, 3, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 1, 2, 1}, + {2, 2, 1, 2, 2}, + {2, 2, 2, 2, 1}, + {2, 2, 2, 2, 2}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 3, 3}, + {2, 2, 2, 2, 1}, + {2, 3, 2, 2, 2}, + {2, 3, 2, 3, 2}, + {2, 3, 2, 3, 3}, + {2, 3, 3, 3, 2}, + {2, 3, 3, 3, 3}, + {2, 3, 3, 4, 3}, + {2, 3, 3, 4, 4}, + {3, 3, 2, 2, 1}, + {3, 3, 2, 2, 2}, + {3, 3, 2, 3, 2}, + {3, 3, 2, 3, 3}, + {3, 3, 3, 3, 2}, + {3, 3, 3, 3, 3}, + {3, 3, 3, 4, 3}, + {3, 3, 3, 4, 4}, + {3, 4, 3, 3, 2}, + {3, 4, 3, 3, 3}, + {3, 4, 3, 4, 3}, + {3, 4, 3, 4, 4}, + {3, 4, 4, 4, 3}, + {3, 4, 4, 4, 4}, + {3, 4, 4, 5, 4}, + {4, 4, 3, 3, 2}, + {4, 4, 3, 3, 3}, + {4, 4, 3, 4, 3}, + {4, 4, 3, 4, 4}, + {4, 4, 4, 4, 3}, + {4, 4, 4, 4, 4}, + {4, 4, 4, 5, 4}, + {4, 5, 4, 4, 3}, + {4, 5, 4, 4, 4}, + {4, 5, 4, 5, 4}, + }, + Form: []int64{4, 5, 4, 5, 4}, + }, + } + + MatrixLine50Form4X5TypeA = []*structs.MatrixLine50Form4X5TypeA{ + { + Type: "Line50Form4X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 3, 3, 3, 4}, + {3, 2, 2, 2, 3}, + {2, 1, 1, 1, 2}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {4, 3, 2, 3, 4}, + {3, 2, 1, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 3, 4, 4}, + {3, 3, 2, 3, 3}, + {2, 2, 1, 2, 2}, + {1, 4, 1, 4, 1}, + {4, 1, 4, 1, 4}, + {4, 2, 4, 2, 4}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {2, 4, 2, 4, 2}, + {4, 3, 3, 2, 1}, + {1, 2, 2, 3, 4}, + {1, 2, 3, 3, 4}, + {4, 3, 2, 2, 1}, + {2, 1, 4, 3, 2}, + {3, 4, 1, 2, 3}, + {4, 4, 1, 4, 4}, + {1, 1, 4, 1, 1}, + {4, 1, 1, 1, 4}, + {1, 4, 4, 4, 1}, + {4, 2, 2, 2, 4}, + {1, 3, 3, 3, 1}, + {4, 2, 3, 2, 4}, + {1, 3, 2, 3, 1}, + {4, 1, 2, 1, 4}, + {1, 4, 2, 4, 1}, + {4, 4, 2, 4, 4}, + {1, 1, 3, 1, 1}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form4X5TypeB = []*structs.MatrixLine50Form4X5TypeB{ + { + Type: "Line50Form4X5TypeB", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 1, 3, 3}, + {4, 4, 2, 4, 4}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {1, 1, 1, 1, 2}, + {4, 4, 4, 4, 3}, + {1, 2, 3, 4, 3}, + {1, 2, 3, 4, 4}, + {4, 3, 2, 1, 1}, + {4, 3, 2, 1, 2}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form4X5TypeC = []*structs.MatrixLine50Form4X5TypeC{ + { + Type: "Line50Form4X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {4, 3, 2, 3, 4}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 3, 3, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 2, 1, 2}, + {3, 2, 3, 4, 3}, + {2, 1, 1, 2, 3}, + {3, 4, 4, 3, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {3, 3, 4, 3, 2}, + {2, 2, 1, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {2, 2, 3, 2, 2}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 3, 3}, + {4, 4, 3, 2, 2}, + {2, 3, 2, 3, 2}, + {3, 2, 3, 2, 3}, + {3, 4, 3, 2, 3}, + {2, 1, 2, 3, 2}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {1, 2, 3, 4, 3}, + {4, 3, 2, 1, 2}, + {2, 3, 4, 4, 4}, + {3, 2, 1, 1, 1}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {4, 3, 3, 2, 1}, + {1, 2, 2, 3, 4}, + {2, 3, 3, 4, 4}, + {3, 2, 2, 1, 1}, + {1, 2, 1, 2, 3}, + {4, 3, 4, 3, 2}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form4X5TypeD = []*structs.MatrixLine50Form4X5TypeD{ + { + Type: "Line50Form4X5TypeD", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 1, 3, 3}, + {4, 4, 2, 4, 4}, + {1, 1, 1, 2, 3}, + {4, 4, 4, 3, 2}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {1, 1, 1, 1, 2}, + {4, 4, 4, 4, 3}, + {1, 2, 3, 4, 3}, + {1, 2, 3, 4, 4}, + {4, 3, 2, 1, 1}, + {4, 3, 2, 1, 2}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form4X5TypeE = []*structs.MatrixLine50Form4X5TypeE{ + { + Type: "Line50Form4X5TypeE", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {1, 1, 2, 1, 1}, + {1, 2, 2, 2, 1}, + {1, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {1, 1, 1, 2, 1}, + {1, 2, 1, 1, 1}, + {1, 1, 2, 2, 1}, + {1, 2, 2, 1, 1}, + {1, 1, 3, 1, 1}, + {1, 1, 3, 2, 1}, + {1, 2, 3, 1, 1}, + {2, 2, 2, 2, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {2, 3, 3, 3, 2}, + {2, 1, 1, 1, 2}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 2, 3, 2}, + {2, 2, 2, 1, 2}, + {2, 3, 2, 2, 2}, + {2, 1, 2, 2, 2}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {3, 3, 3, 3, 3}, + {3, 3, 4, 3, 3}, + {3, 3, 2, 3, 3}, + {3, 4, 4, 4, 3}, + {3, 2, 2, 2, 3}, + {3, 4, 3, 4, 3}, + {3, 2, 3, 2, 3}, + {3, 3, 3, 4, 3}, + {3, 3, 3, 2, 3}, + {3, 4, 3, 3, 3}, + {3, 2, 3, 3, 3}, + {3, 4, 2, 4, 3}, + {3, 2, 4, 2, 3}, + {4, 4, 4, 4, 4}, + {4, 4, 3, 4, 4}, + {4, 3, 3, 3, 4}, + {4, 3, 2, 3, 4}, + {4, 3, 4, 3, 4}, + {4, 4, 4, 3, 4}, + {4, 3, 4, 4, 4}, + {4, 4, 3, 3, 4}, + {4, 3, 3, 4, 4}, + {4, 4, 2, 4, 4}, + {4, 4, 2, 3, 4}, + {4, 3, 2, 4, 4}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form4X5TypeF = []*structs.MatrixLine50Form4X5TypeF{ + { + Type: "Line50Form4X5TypeF", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4}, + {1, 2, 3, 4, 3}, + {4, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {3, 4, 3, 2, 3}, + {2, 3, 4, 4, 4}, + {3, 2, 1, 1, 1}, + {2, 3, 3, 4, 4}, + {3, 2, 2, 1, 1}, + {2, 2, 1, 2, 2}, + {3, 3, 4, 3, 3}, + {1, 2, 2, 2, 1}, + {4, 3, 3, 3, 4}, + {2, 1, 1, 1, 2}, + {3, 4, 4, 4, 3}, + {1, 1, 2, 1, 1}, + {4, 4, 3, 4, 4}, + {1, 1, 2, 3, 4}, + {4, 4, 3, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2}, + {3, 4, 3, 4, 3}, + {1, 1, 1, 2, 2}, + {4, 4, 4, 3, 3}, + {2, 2, 2, 3, 4}, + {3, 3, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {4, 3, 2, 3, 4}, + {2, 2, 3, 3, 4}, + {3, 3, 2, 2, 1}, + {2, 2, 1, 1, 2}, + {3, 3, 4, 4, 3}, + {1, 2, 1, 1, 2}, + {4, 3, 4, 4, 3}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {2, 1, 1, 2, 1}, + {3, 4, 4, 3, 4}, + {1, 2, 2, 1, 2}, + {4, 3, 3, 4, 3}, + {2, 3, 2, 1, 1}, + {3, 2, 3, 4, 4}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form4X6TypeA = []*structs.MatrixLine50Form4X6TypeA{ + { + Type: "Line50Form4X6TypeA", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1, 1}, + {4, 4, 4, 4, 4, 4}, + {1, 2, 3, 3, 2, 1}, + {4, 3, 2, 2, 3, 4}, + {2, 3, 4, 4, 3, 2}, + {3, 2, 1, 1, 2, 3}, + {1, 2, 1, 1, 2, 1}, + {4, 3, 4, 4, 3, 4}, + {2, 1, 2, 2, 1, 2}, + {3, 4, 3, 3, 4, 3}, + {2, 3, 2, 2, 3, 2}, + {3, 2, 3, 3, 2, 3}, + {1, 1, 2, 2, 1, 1}, + {4, 4, 3, 3, 4, 4}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 2, 2, 3, 3}, + {3, 3, 4, 4, 3, 3}, + {2, 2, 1, 1, 2, 2}, + {2, 3, 3, 3, 3, 2}, + {3, 2, 2, 2, 2, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 4, 4, 4, 4, 3}, + {4, 3, 3, 3, 3, 4}, + {1, 2, 2, 2, 2, 1}, + {3, 1, 1, 1, 1, 3}, + {2, 4, 4, 4, 4, 2}, + {4, 2, 2, 2, 2, 4}, + {1, 3, 3, 3, 3, 1}, + {3, 3, 1, 1, 3, 3}, + {2, 2, 4, 4, 2, 2}, + {1, 1, 3, 3, 1, 1}, + {4, 4, 2, 2, 4, 4}, + {4, 4, 1, 1, 4, 4}, + {1, 1, 4, 4, 1, 1}, + {4, 3, 2, 1, 1, 1}, + {1, 2, 3, 4, 4, 4}, + {1, 1, 1, 2, 3, 4}, + {4, 4, 4, 3, 2, 1}, + {3, 2, 1, 1, 1, 1}, + {2, 3, 4, 4, 4, 4}, + {1, 1, 1, 1, 2, 3}, + {4, 4, 4, 4, 3, 2}, + {4, 3, 2, 2, 2, 2}, + {1, 2, 3, 3, 3, 3}, + {2, 2, 2, 2, 3, 4}, + {3, 3, 3, 3, 2, 1}, + {2, 4, 1, 1, 4, 2}, + {3, 1, 4, 4, 1, 3}, + }, + Form: []int64{4, 4, 4, 4, 4, 4}, + }, + } + + MatrixLine50Form5X5TypeA = []*structs.MatrixLine50Form5X5TypeA{ + { + Type: "Line50Form5X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {2, 1, 2, 3, 2}, + {3, 2, 3, 4, 3}, + {4, 3, 4, 5, 4}, + {2, 3, 2, 1, 2}, + {3, 4, 3, 2, 3}, + {4, 5, 4, 3, 4}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {1, 1, 3, 1, 1}, + {2, 2, 4, 2, 2}, + {3, 3, 5, 3, 3}, + }, + Form: []int64{5, 5, 5, 5, 5}, + }, + } + + MatrixLine50Form5X5TypeB = []*structs.MatrixLine50Form5X5TypeB{ + { + Type: "Line50Form5X5TypeB", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {4, 4, 4, 4, 4}, + {3, 3, 3, 3, 3}, + {5, 5, 5, 5, 5}, + {3, 4, 5, 4, 3}, + {5, 4, 3, 4, 5}, + {4, 3, 3, 3, 4}, + {4, 5, 5, 5, 4}, + {3, 3, 4, 5, 5}, + {5, 5, 4, 3, 3}, + {4, 3, 4, 3, 4}, + {4, 5, 4, 5, 4}, + {3, 4, 4, 4, 5}, + {5, 4, 4, 4, 3}, + {4, 4, 3, 4, 5}, + {4, 4, 5, 4, 3}, + {3, 4, 3, 4, 3}, + {5, 4, 5, 4, 5}, + {3, 3, 5, 3, 3}, + {5, 5, 3, 5, 5}, + {4, 3, 5, 3, 4}, + {4, 5, 3, 5, 4}, + {3, 5, 3, 5, 3}, + {5, 3, 5, 3, 5}, + {3, 5, 5, 5, 3}, + {5, 3, 3, 3, 5}, + {3, 5, 4, 5, 3}, + {5, 3, 4, 3, 5}, + {4, 4, 5, 4, 4}, + {4, 4, 3, 4, 4}, + {3, 5, 3, 4, 4}, + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {2, 2, 1, 2, 3}, + {2, 2, 3, 2, 1}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {2, 1, 3, 1, 2}, + {2, 3, 1, 3, 2}, + }, + Form: []int64{5, 5, 5, 5, 5}, + }, + } + + MatrixLine50Form5X5TypeC = []*structs.MatrixLine50Form5X5TypeC{ + { + Type: "Line50Form5X5TypeC", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + Form: []int64{5, 5, 5, 5, 5}, + }, + } + + MatrixLine50Form6X5TypeA = []*structs.MatrixLine50Form6X5TypeA{ + { + Type: "Line50Form6X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 50, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + }, + Form: []int64{6, 6, 6, 6, 6}, + }, + } + + MatrixLine5Form3X3TypeA = []*structs.MatrixLine5Form3X3TypeA{ + { + Type: "Line5Form3X3TypeA", + LinkType: 0, + Direction: 0, + LineCount: 5, + Lines: [][]int64{ + {1, 1, 1}, + {2, 2, 2}, + {3, 3, 3}, + {1, 2, 3}, + {3, 2, 1}, + }, + Form: []int64{3, 3, 3}, + }, + } + + MatrixLine5Form3X3TypeB = []*structs.MatrixLine5Form3X3TypeB{ + { + Type: "Line5Form3X3TypeB", + LinkType: 0, + Direction: 0, + LineCount: 5, + Lines: [][]int64{ + {2, 2, 2}, + {1, 1, 1}, + {3, 3, 3}, + {1, 2, 3}, + {3, 2, 1}, + }, + Form: []int64{3, 3, 3}, + }, + } + + MatrixLine60Form33633TypeA = []*structs.MatrixLine60Form33633TypeA{ + { + Type: "Line60Form33633TypeA", + LinkType: 0, + Direction: 0, + LineCount: 60, + Lines: [][]int64{ + {2, 2, 3, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 5, 3, 3}, + {1, 2, 5, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 5, 3, 2}, + {1, 1, 3, 3, 3}, + {3, 3, 3, 1, 1}, + {2, 3, 3, 1, 2}, + {2, 1, 3, 3, 2}, + {1, 2, 3, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 5, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 5, 2, 2}, + {1, 1, 5, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 5, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 5, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 5, 1, 3}, + {3, 1, 3, 3, 1}, + {1, 3, 3, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 2, 1, 1, 2}, + {2, 2, 4, 2, 2}, + {1, 1, 2, 1, 1}, + {3, 3, 6, 3, 3}, + {1, 2, 6, 2, 1}, + {3, 2, 2, 2, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 6, 3, 2}, + {1, 1, 4, 3, 3}, + {3, 3, 4, 1, 1}, + {2, 3, 4, 1, 2}, + {2, 1, 4, 3, 2}, + {1, 2, 4, 2, 1}, + {3, 2, 4, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 6, 2, 3}, + {2, 2, 2, 2, 2}, + {2, 2, 6, 2, 2}, + {1, 1, 6, 1, 1}, + {3, 3, 2, 3, 3}, + {1, 3, 6, 3, 1}, + {3, 1, 2, 1, 3}, + {2, 3, 2, 3, 2}, + {2, 1, 6, 1, 2}, + {1, 3, 2, 3, 1}, + {3, 1, 6, 1, 3}, + {3, 1, 4, 3, 1}, + {1, 3, 4, 1, 3}, + {1, 3, 4, 3, 1}, + {3, 1, 4, 1, 3}, + {3, 2, 2, 1, 2}, + }, + Form: []int64{3, 3, 6, 3, 3}, + }, + } + + MatrixLine60Form8X5TypeA = []*structs.MatrixLine60Form8X5TypeA{ + { + Type: "Line60Form8X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 60, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + }, + Form: []int64{8, 8, 8, 8, 8}, + }, + } + + MatrixLine65Form6X5TypeA = []*structs.MatrixLine65Form6X5TypeA{ + { + Type: "Line65Form6X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 65, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {6, 6, 5, 4, 4}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {3, 3, 4, 5, 6}, + {6, 6, 5, 4, 3}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {3, 4, 5, 6, 6}, + {6, 5, 4, 3, 3}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + Form: []int64{6, 6, 6, 6, 6}, + }, + } + + MatrixLine70Form9X5TypeA = []*structs.MatrixLine70Form9X5TypeA{ + { + Type: "Line70Form9X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 70, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + }, + Form: []int64{9, 9, 9, 9, 9}, + }, + } + + MatrixLine75Form5X6TypeA = []*structs.MatrixLine75Form5X6TypeA{ + { + Type: "Line75Form5X6TypeA", + LinkType: 0, + Direction: 0, + LineCount: 75, + Lines: [][]int64{ + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5, 5}, + {1, 2, 3, 4, 5, 4}, + {5, 4, 3, 2, 1, 2}, + {1, 2, 3, 4, 5, 5}, + {5, 4, 3, 2, 1, 1}, + {1, 2, 3, 3, 2, 1}, + {2, 3, 4, 4, 3, 2}, + {3, 4, 5, 5, 4, 3}, + {3, 2, 1, 1, 2, 3}, + {4, 3, 2, 2, 3, 4}, + {5, 4, 3, 3, 4, 5}, + {1, 2, 3, 4, 4, 3}, + {2, 3, 4, 5, 5, 4}, + {5, 4, 3, 2, 2, 3}, + {4, 3, 2, 1, 1, 2}, + {1, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 3}, + {3, 4, 3, 4, 3, 4}, + {4, 5, 4, 5, 4, 5}, + {2, 1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3, 2}, + {4, 3, 4, 3, 4, 3}, + {5, 4, 5, 4, 5, 4}, + {1, 2, 3, 4, 3, 2}, + {2, 3, 4, 5, 4, 3}, + {5, 4, 3, 2, 3, 4}, + {4, 3, 2, 1, 2, 3}, + {2, 3, 4, 3, 2, 1}, + {3, 4, 5, 4, 3, 2}, + {4, 3, 2, 3, 4, 5}, + {3, 2, 1, 2, 3, 4}, + {1, 2, 3, 4, 4, 4}, + {2, 3, 4, 5, 5, 5}, + {5, 4, 3, 2, 2, 2}, + {4, 3, 2, 1, 1, 1}, + {1, 1, 2, 3, 4, 4}, + {2, 2, 3, 4, 5, 5}, + {5, 5, 4, 3, 2, 2}, + {4, 4, 3, 2, 1, 1}, + {1, 1, 1, 2, 3, 4}, + {2, 2, 2, 3, 4, 5}, + {5, 5, 5, 4, 3, 2}, + {4, 4, 4, 3, 2, 1}, + {1, 2, 3, 2, 3, 2}, + {2, 3, 4, 3, 4, 3}, + {3, 4, 5, 4, 5, 4}, + {5, 4, 3, 4, 3, 4}, + {4, 3, 2, 3, 2, 3}, + {3, 2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2, 1}, + {3, 4, 3, 4, 3, 2}, + {4, 5, 4, 5, 4, 3}, + {4, 3, 4, 3, 4, 5}, + {3, 2, 3, 2, 3, 4}, + {2, 1, 2, 1, 2, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 2, 2, 2, 2, 3}, + {4, 3, 3, 3, 3, 4}, + {5, 4, 4, 4, 4, 5}, + {1, 2, 2, 2, 2, 1}, + {2, 3, 3, 3, 3, 2}, + {3, 4, 4, 4, 4, 3}, + {4, 5, 5, 5, 5, 4}, + {1, 1, 2, 2, 1, 1}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 4, 4, 3, 3}, + {4, 4, 5, 5, 4, 4}, + {5, 5, 4, 4, 5, 5}, + {4, 4, 3, 3, 4, 4}, + {3, 3, 2, 2, 1, 1}, + {2, 2, 1, 1, 2, 2}, + }, + Form: []int64{5, 5, 5, 5, 5, 5}, + }, + } + + MatrixLine75Form6X5TypeA = []*structs.MatrixLine75Form6X5TypeA{ + { + Type: "Line75Form6X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 75, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {1, 1, 1, 1, 1}, + {3, 2, 1, 2, 3}, + {1, 2, 3, 2, 1}, + {3, 3, 2, 3, 3}, + {1, 1, 2, 1, 1}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {3, 2, 2, 2, 3}, + {1, 2, 2, 2, 1}, + {3, 2, 3, 2, 3}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {2, 1, 2, 1, 2}, + {2, 2, 3, 2, 2}, + {2, 2, 1, 2, 2}, + {3, 1, 3, 1, 3}, + {1, 3, 1, 3, 1}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {3, 3, 1, 3, 3}, + {1, 1, 3, 1, 1}, + {3, 1, 1, 1, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 3, 3, 2, 3}, + {1, 1, 1, 2, 1}, + {2, 2, 2, 1, 2}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {4, 4, 4, 4, 4}, + {6, 5, 4, 5, 6}, + {4, 5, 6, 5, 4}, + {6, 6, 5, 6, 6}, + {4, 4, 5, 4, 4}, + {5, 4, 4, 4, 5}, + {5, 6, 6, 6, 5}, + {6, 5, 5, 5, 6}, + {4, 5, 5, 5, 4}, + {6, 5, 6, 5, 6}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {5, 4, 5, 4, 5}, + {5, 5, 6, 5, 5}, + {5, 5, 4, 5, 5}, + {6, 4, 6, 4, 6}, + {4, 6, 4, 6, 4}, + {5, 6, 4, 6, 5}, + {5, 4, 6, 4, 5}, + {6, 6, 4, 6, 6}, + {4, 4, 6, 4, 4}, + {6, 4, 4, 4, 6}, + {4, 6, 6, 6, 4}, + {6, 4, 5, 4, 6}, + {4, 6, 5, 6, 4}, + {6, 6, 6, 5, 6}, + {4, 4, 4, 5, 4}, + {5, 5, 5, 4, 5}, + {4, 4, 3, 4, 4}, + {3, 3, 4, 3, 3}, + {4, 3, 3, 3, 4}, + {3, 4, 4, 4, 3}, + {4, 3, 4, 3, 4}, + {3, 4, 3, 4, 3}, + {4, 2, 3, 2, 4}, + {2, 4, 3, 4, 2}, + {4, 4, 4, 3, 4}, + {3, 3, 3, 4, 3}, + {3, 2, 4, 2, 3}, + {3, 4, 2, 4, 3}, + {4, 3, 2, 3, 4}, + {2, 3, 4, 3, 2}, + {2, 2, 4, 2, 2}, + }, + Form: []int64{6, 6, 6, 6, 6}, + }, + } + + MatrixLine80Form10X5TypeA = []*structs.MatrixLine80Form10X5TypeA{ + { + Type: "Line80Form10X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 80, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + {10, 10, 10, 10, 10}, + {9, 10, 9, 10, 9}, + {10, 9, 10, 9, 10}, + {8, 9, 10, 9, 8}, + {10, 9, 8, 9, 10}, + {9, 10, 10, 10, 9}, + {10, 9, 9, 9, 10}, + {9, 9, 10, 9, 9}, + {10, 10, 9, 10, 10}, + {8, 8, 9, 10, 10}, + }, + Form: []int64{10, 10, 10, 10, 10}, + }, + } + + MatrixLine80Form3X5TypeA = []*structs.MatrixLine80Form3X5TypeA{ + { + Type: "Line80Form3X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 80, + Lines: [][]int64{ + {2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1}, + {3, 3, 3, 3, 3}, + {1, 2, 3, 2, 1}, + {3, 2, 1, 2, 3}, + {2, 1, 1, 1, 2}, + {2, 3, 3, 3, 2}, + {1, 1, 2, 3, 3}, + {3, 3, 2, 1, 1}, + {2, 3, 2, 1, 2}, + {2, 1, 2, 3, 2}, + {1, 2, 2, 2, 1}, + {3, 2, 2, 2, 3}, + {1, 2, 1, 2, 1}, + {3, 2, 3, 2, 3}, + {2, 2, 1, 2, 2}, + {2, 2, 3, 2, 2}, + {1, 1, 3, 1, 1}, + {3, 3, 1, 3, 3}, + {1, 3, 3, 3, 1}, + {3, 1, 1, 1, 3}, + {2, 3, 1, 3, 2}, + {2, 1, 3, 1, 2}, + {1, 3, 1, 3, 1}, + {3, 1, 3, 1, 3}, + {3, 1, 2, 3, 1}, + {1, 3, 2, 1, 3}, + {1, 3, 2, 3, 1}, + {3, 1, 2, 1, 3}, + {3, 2, 1, 1, 2}, + {1, 2, 3, 3, 2}, + {1, 1, 3, 3, 3}, + {3, 3, 1, 1, 1}, + {2, 1, 3, 2, 3}, + {2, 3, 1, 2, 1}, + {1, 2, 1, 2, 3}, + {3, 2, 3, 2, 1}, + {2, 3, 3, 1, 1}, + {1, 1, 2, 2, 3}, + {3, 3, 2, 2, 1}, + {3, 1, 1, 1, 1}, + {1, 3, 3, 3, 3}, + {3, 3, 3, 3, 1}, + {1, 1, 1, 1, 3}, + {2, 1, 2, 1, 2}, + {2, 3, 2, 3, 2}, + {1, 2, 3, 3, 3}, + {3, 2, 1, 1, 1}, + {1, 2, 2, 2, 2}, + {3, 2, 2, 2, 2}, + {1, 1, 1, 1, 2}, + {1, 1, 1, 2, 2}, + {1, 1, 1, 2, 3}, + {1, 1, 2, 1, 1}, + {1, 1, 2, 2, 1}, + {1, 1, 2, 2, 2}, + {1, 1, 2, 3, 2}, + {1, 2, 1, 1, 1}, + {1, 2, 1, 2, 2}, + {3, 1, 2, 1, 2}, + {1, 3, 2, 3, 2}, + {1, 2, 1, 3, 1}, + {3, 2, 3, 1, 3}, + {1, 2, 2, 2, 3}, + {3, 2, 2, 2, 1}, + {1, 2, 2, 3, 3}, + {2, 1, 1, 1, 1}, + {2, 1, 1, 2, 2}, + {2, 1, 1, 2, 3}, + {1, 2, 2, 1, 2}, + {2, 1, 2, 2, 3}, + {2, 1, 2, 3, 3}, + {2, 2, 1, 1, 1}, + {2, 2, 1, 1, 2}, + {2, 2, 1, 2, 3}, + {1, 1, 3, 2, 1}, + {2, 2, 2, 1, 1}, + {2, 2, 3, 3, 3}, + {3, 3, 3, 3, 2}, + {2, 2, 2, 2, 3}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixLine80Form4X6TypeA = []*structs.MatrixLine80Form4X6TypeA{ + { + Type: "Line80Form4X6TypeA", + LinkType: 0, + Direction: 0, + LineCount: 80, + Lines: [][]int64{ + {1, 1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4, 4}, + {1, 2, 3, 3, 2, 1}, + {4, 3, 2, 2, 3, 4}, + {2, 3, 4, 4, 3, 2}, + {3, 2, 1, 1, 2, 3}, + {1, 2, 1, 1, 2, 1}, + {4, 3, 4, 4, 3, 4}, + {2, 1, 2, 2, 1, 2}, + {3, 4, 3, 3, 4, 3}, + {2, 3, 2, 2, 3, 2}, + {3, 2, 3, 3, 2, 3}, + {1, 1, 2, 2, 1, 1}, + {4, 4, 3, 3, 4, 4}, + {2, 2, 3, 3, 2, 2}, + {3, 3, 2, 2, 3, 3}, + {3, 3, 4, 4, 3, 3}, + {2, 2, 1, 1, 2, 2}, + {2, 3, 3, 3, 3, 2}, + {3, 2, 2, 2, 2, 3}, + {2, 1, 1, 1, 1, 2}, + {3, 4, 4, 4, 4, 3}, + {4, 3, 3, 3, 3, 4}, + {1, 2, 2, 2, 2, 1}, + {3, 1, 1, 1, 1, 3}, + {2, 4, 4, 4, 4, 2}, + {4, 2, 2, 2, 2, 4}, + {1, 3, 3, 3, 3, 1}, + {3, 3, 1, 1, 3, 3}, + {2, 2, 4, 4, 2, 2}, + {1, 1, 3, 3, 1, 1}, + {4, 4, 2, 2, 4, 4}, + {4, 4, 1, 1, 4, 4}, + {1, 1, 4, 4, 1, 1}, + {4, 3, 2, 1, 1, 1}, + {1, 2, 3, 4, 4, 4}, + {1, 1, 1, 2, 3, 4}, + {4, 4, 4, 3, 2, 1}, + {3, 2, 1, 1, 1, 1}, + {2, 3, 4, 4, 4, 4}, + {1, 1, 1, 1, 2, 3}, + {4, 4, 4, 4, 3, 2}, + {4, 3, 2, 2, 2, 2}, + {1, 2, 3, 3, 3, 3}, + {2, 2, 2, 2, 3, 4}, + {3, 3, 3, 3, 2, 1}, + {2, 4, 1, 1, 4, 2}, + {3, 1, 4, 4, 1, 3}, + {1, 4, 1, 1, 4, 1}, + {4, 1, 4, 4, 1, 4}, + {1, 2, 1, 2, 1, 2}, + {3, 4, 3, 4, 3, 4}, + {2, 3, 2, 3, 2, 3}, + {3, 2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3, 4}, + {2, 1, 2, 1, 2, 1}, + {1, 3, 1, 3, 1, 3}, + {4, 2, 4, 2, 4, 2}, + {2, 4, 2, 4, 2, 4}, + {3, 1, 3, 1, 3, 1}, + {1, 4, 1, 4, 1, 4}, + {4, 1, 4, 1, 4, 1}, + {1, 2, 3, 4, 3, 2}, + {4, 3, 2, 1, 2, 3}, + {2, 3, 4, 3, 2, 1}, + {3, 2, 1, 2, 3, 4}, + {1, 2, 1, 2, 3, 4}, + {4, 3, 4, 3, 2, 1}, + {2, 3, 2, 1, 2, 3}, + {3, 2, 3, 4, 3, 2}, + {1, 4, 4, 4, 4, 1}, + {4, 1, 1, 1, 1, 4}, + {2, 4, 1, 1, 4, 2}, + {3, 1, 4, 4, 1, 3}, + {1, 3, 4, 4, 3, 1}, + {4, 2, 1, 1, 2, 4}, + {2, 4, 1, 4, 1, 3}, + {3, 1, 4, 1, 4, 2}, + }, + Form: []int64{4, 4, 4, 4, 4, 4}, + }, + } + + MatrixLine80Form7X5TypeA = []*structs.MatrixLine80Form7X5TypeA{ + { + Type: "Line80Form7X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 80, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {5, 5, 6, 7, 7}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {6, 6, 5, 4, 4}, + {7, 7, 6, 5, 5}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {3, 3, 4, 5, 6}, + {4, 4, 5, 6, 7}, + {7, 7, 6, 5, 4}, + {6, 6, 5, 4, 3}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {3, 4, 5, 6, 6}, + {4, 5, 6, 7, 7}, + {7, 6, 5, 4, 4}, + {6, 5, 4, 3, 3}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + Form: []int64{7, 7, 7, 7, 7}, + }, + } + + MatrixLine90Form11X5TypeA = []*structs.MatrixLine90Form11X5TypeA{ + { + Type: "Line90Form11X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 90, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {9, 9, 9, 9, 9}, + {8, 9, 8, 9, 8}, + {9, 8, 9, 8, 9}, + {7, 8, 9, 8, 7}, + {9, 8, 7, 8, 9}, + {8, 9, 9, 9, 8}, + {9, 8, 8, 8, 9}, + {8, 8, 9, 8, 8}, + {9, 9, 8, 9, 9}, + {7, 7, 8, 9, 9}, + {10, 10, 10, 10, 10}, + {9, 10, 9, 10, 9}, + {10, 9, 10, 9, 10}, + {8, 9, 10, 9, 8}, + {10, 9, 8, 9, 10}, + {9, 10, 10, 10, 9}, + {10, 9, 9, 9, 10}, + {9, 9, 10, 9, 9}, + {10, 10, 9, 10, 10}, + {8, 8, 9, 10, 10}, + {11, 11, 11, 11, 11}, + {10, 11, 10, 11, 10}, + {11, 10, 11, 10, 11}, + {9, 10, 11, 10, 9}, + {11, 10, 9, 10, 11}, + {10, 11, 11, 11, 10}, + {11, 10, 10, 10, 11}, + {10, 10, 11, 10, 10}, + {11, 11, 10, 11, 11}, + {9, 9, 10, 11, 11}, + }, + Form: []int64{11, 11, 11, 11, 11}, + }, + } + + MatrixLine95Form8X5TypeA = []*structs.MatrixLine95Form8X5TypeA{ + { + Type: "Line95Form8X5TypeA", + LinkType: 0, + Direction: 0, + LineCount: 95, + Lines: [][]int64{ + {1, 1, 1, 1, 1}, + {2, 2, 2, 2, 2}, + {3, 3, 3, 3, 3}, + {4, 4, 4, 4, 4}, + {5, 5, 5, 5, 5}, + {6, 6, 6, 6, 6}, + {7, 7, 7, 7, 7}, + {8, 8, 8, 8, 8}, + {1, 2, 2, 2, 1}, + {2, 3, 3, 3, 2}, + {3, 4, 4, 4, 3}, + {4, 5, 5, 5, 4}, + {5, 6, 6, 6, 5}, + {6, 7, 7, 7, 6}, + {7, 8, 8, 8, 7}, + {2, 1, 1, 1, 2}, + {3, 2, 2, 2, 3}, + {4, 3, 3, 3, 4}, + {5, 4, 4, 4, 5}, + {6, 5, 5, 5, 6}, + {7, 6, 6, 6, 7}, + {8, 7, 7, 7, 8}, + {1, 1, 2, 1, 1}, + {2, 2, 3, 2, 2}, + {3, 3, 4, 3, 3}, + {4, 4, 5, 4, 4}, + {5, 5, 6, 5, 5}, + {6, 6, 7, 6, 6}, + {7, 7, 8, 7, 7}, + {2, 2, 1, 2, 2}, + {3, 3, 2, 3, 3}, + {4, 4, 3, 4, 4}, + {5, 5, 4, 5, 5}, + {6, 6, 5, 6, 6}, + {7, 7, 6, 7, 7}, + {8, 8, 7, 8, 8}, + {1, 2, 1, 2, 1}, + {2, 3, 2, 3, 2}, + {3, 4, 3, 4, 3}, + {4, 5, 4, 5, 4}, + {5, 6, 5, 6, 5}, + {6, 7, 6, 7, 6}, + {7, 8, 7, 8, 7}, + {2, 1, 2, 1, 2}, + {3, 2, 3, 2, 3}, + {4, 3, 4, 3, 4}, + {5, 4, 5, 4, 5}, + {6, 5, 6, 5, 6}, + {7, 6, 7, 6, 7}, + {8, 7, 8, 7, 8}, + {1, 2, 3, 2, 1}, + {2, 3, 4, 3, 2}, + {3, 4, 5, 4, 3}, + {4, 5, 6, 5, 4}, + {5, 6, 7, 6, 5}, + {6, 7, 8, 7, 6}, + {3, 2, 1, 2, 3}, + {4, 3, 2, 3, 4}, + {5, 4, 3, 4, 5}, + {6, 5, 4, 5, 6}, + {7, 6, 5, 6, 7}, + {8, 7, 6, 7, 8}, + {1, 1, 2, 3, 3}, + {2, 2, 3, 4, 4}, + {3, 3, 4, 5, 5}, + {4, 4, 5, 6, 6}, + {5, 5, 6, 7, 7}, + {6, 6, 7, 8, 8}, + {3, 3, 2, 1, 1}, + {4, 4, 3, 2, 2}, + {5, 5, 4, 3, 3}, + {6, 6, 5, 4, 4}, + {7, 7, 6, 5, 5}, + {8, 8, 7, 6, 6}, + {1, 1, 2, 3, 4}, + {2, 2, 3, 4, 5}, + {3, 3, 4, 5, 6}, + {4, 4, 5, 6, 7}, + {5, 5, 6, 7, 8}, + {8, 8, 7, 6, 5}, + {7, 7, 6, 5, 4}, + {6, 6, 5, 4, 3}, + {5, 5, 4, 3, 2}, + {4, 4, 3, 2, 1}, + {1, 2, 3, 4, 4}, + {2, 3, 4, 5, 5}, + {3, 4, 5, 6, 6}, + {4, 5, 6, 7, 7}, + {5, 6, 7, 8, 8}, + {8, 7, 6, 5, 5}, + {7, 6, 5, 4, 4}, + {6, 5, 4, 3, 3}, + {5, 4, 3, 2, 2}, + {4, 3, 2, 1, 1}, + {1, 2, 3, 4, 3}, + }, + Form: []int64{8, 8, 8, 8, 8}, + }, + } + + MatrixMatchForm7X7TypeA = []*structs.MatrixMatchForm7X7TypeA{ + { + Type: "MatchForm7X7", + LinkType: 4, + Direction: 0, + LineCount: 20, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{7, 7, 7, 7, 7, 7, 7}, + }, + } + + MatrixSameForm5X6TypeA = []*structs.MatrixSameForm5X6TypeA{ + { + Type: "SameForm5X6", + LinkType: 3, + Direction: 0, + LineCount: 20, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{5, 5, 5, 5, 5, 5}, + }, + } + + MatrixSameForm5X6TypeB = []*structs.MatrixSameForm5X6TypeB{ + { + Type: "SameForm5X6TypeB", + LinkType: 3, + Direction: 0, + LineCount: 25, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{5, 5, 5, 5, 5, 5}, + }, + } + + MatrixWaysForm333331 = []*structs.MatrixWaysForm333331{ + { + Type: "WaysForm333331", + LinkType: 1, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{3, 3, 3, 3, 3, 1}, + }, + } + + MatrixWaysForm33555 = []*structs.MatrixWaysForm33555{ + { + Type: "WaysForm33555", + LinkType: 1, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{3, 3, 5, 5, 5}, + }, + } + + MatrixWaysForm344444 = []*structs.MatrixWaysForm344444{ + { + Type: "WaysForm344444", + LinkType: 1, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{3, 4, 4, 4, 4, 4}, + }, + } + + MatrixWaysForm3X5TypeA = []*structs.MatrixWaysForm3X5TypeA{ + { + Type: "WaysForm3X5TypeA", + LinkType: 1, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{3, 3, 3, 3, 3}, + }, + } + + MatrixWaysForm44668 = []*structs.MatrixWaysForm44668{ + { + Type: "WaysForm44668", + LinkType: 1, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{4, 4, 6, 6, 8}, + }, + } + + MatrixWaysForm4X5TypeA = []*structs.MatrixWaysForm4X5TypeA{ + { + Type: "WaysForm4X5TypeA", + LinkType: 1, + Direction: 0, + LineCount: 100, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + + MatrixWaysForm4X5TypeB = []*structs.MatrixWaysForm4X5TypeB{ + { + Type: "WaysForm4X5TypeB", + LinkType: 1, + Direction: 0, + LineCount: 60, + Lines: [][]int64{ + {0, 0, 0}, + }, + Form: []int64{4, 4, 4, 4, 4}, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/opt_group.go b/gamesrv/slotspkg/internal/exported/excel2go/base/opt_group.go new file mode 100644 index 0000000..2fedcfe --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/opt_group.go @@ -0,0 +1,22 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + OptGroup = []*structs.OptGroup{ + { + ID: 1, + Batch: 1, + IsNewPlayer: true, + StartTime: "2023-4-26", + EndTime: "2050-11-27", + Affect: []int64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + Weight: []int64{1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/prize_model.go b/gamesrv/slotspkg/internal/exported/excel2go/base/prize_model.go new file mode 100644 index 0000000..b13f286 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/prize_model.go @@ -0,0 +1,58 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + PrizeModelPrizeModelTypeA = map[int64]*structs.PrizeModelPrizeModelTypeA{ + 1: { + ID: 1, + AniType: "big_win", + MinMultiple: 10, + MaxMultiple: 25, + }, + 2: { + ID: 2, + AniType: "mega_win", + MinMultiple: 25, + MaxMultiple: 50, + }, + 3: { + ID: 3, + AniType: "epic_win", + MinMultiple: 50, + MaxMultiple: -1, + }, + } + + PrizeModelPrizeModelTypeB = map[int64]*structs.PrizeModelPrizeModelTypeB{ + 1: { + ID: 1, + AniType: "big_win", + MinMultiple: 15, + MaxMultiple: 30, + }, + 2: { + ID: 2, + AniType: "mega_win", + MinMultiple: 30, + MaxMultiple: 45, + }, + 3: { + ID: 3, + AniType: "epic_win", + MinMultiple: 45, + MaxMultiple: 60, + }, + 4: { + ID: 4, + AniType: "epic_win", + MinMultiple: 60, + MaxMultiple: -1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/simulator.go b/gamesrv/slotspkg/internal/exported/excel2go/base/simulator.go new file mode 100644 index 0000000..49d75bc --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/simulator.go @@ -0,0 +1,171 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + SimulatorFSMultiLevel = []*structs.SimulatorFSMultiLevel{ + { + Level: 1, + Min: 0, + Max: 3, + }, + { + Level: 2, + Min: 3, + Max: 6, + }, + { + Level: 3, + Min: 6, + Max: 9, + }, + { + Level: 4, + Min: 9, + Max: 12, + }, + { + Level: 5, + Min: 12, + Max: 18, + }, + { + Level: 6, + Min: 18, + Max: 20, + }, + { + Level: 7, + Min: 20, + Max: 30, + }, + { + Level: 8, + Min: 30, + Max: 50, + }, + { + Level: 9, + Min: 50, + Max: 100, + }, + { + Level: 10, + Min: 100, + Max: 500, + }, + { + Level: 11, + Min: 500, + Max: 1000, + }, + { + Level: 12, + Min: 1000, + Max: -1, + }, + } + + SimulatorMultiLevel = []*structs.SimulatorMultiLevel{ + { + Level: 1, + Min: 0, + Max: 1, + }, + { + Level: 2, + Min: 1, + Max: 2, + }, + { + Level: 3, + Min: 2, + Max: 3, + }, + { + Level: 4, + Min: 3, + Max: 4, + }, + { + Level: 5, + Min: 4, + Max: 5, + }, + { + Level: 6, + Min: 5, + Max: 6, + }, + { + Level: 7, + Min: 6, + Max: 8, + }, + { + Level: 8, + Min: 8, + Max: 10, + }, + { + Level: 9, + Min: 10, + Max: 12, + }, + { + Level: 10, + Min: 12, + Max: 15, + }, + { + Level: 11, + Min: 15, + Max: 18, + }, + { + Level: 12, + Min: 18, + Max: 20, + }, + { + Level: 13, + Min: 20, + Max: 25, + }, + { + Level: 14, + Min: 25, + Max: 30, + }, + { + Level: 15, + Min: 30, + Max: 50, + }, + { + Level: 16, + Min: 50, + Max: 100, + }, + { + Level: 17, + Min: 100, + Max: 500, + }, + { + Level: 18, + Min: 500, + Max: 1000, + }, + { + Level: 19, + Min: 1000, + Max: -1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/test.go b/gamesrv/slotspkg/internal/exported/excel2go/base/test.go new file mode 100644 index 0000000..620b087 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/test.go @@ -0,0 +1,5262 @@ +//go:build !debug +// +build !debug + +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +func init() { + TestBetBetChangeList = map[int64]*structs.TestBetBetChangeList{ + 0: { + Index: 0, + BetChangeList: 0.3, + BetSizeIndex: 0, + BetLevelIndex: 0, + }, + 1: { + Index: 1, + BetChangeList: 0.6, + BetSizeIndex: 0, + BetLevelIndex: 1, + }, + 2: { + Index: 2, + BetChangeList: 0.9, + BetSizeIndex: 0, + BetLevelIndex: 2, + }, + 3: { + Index: 3, + BetChangeList: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + 4: { + Index: 4, + BetChangeList: 1.5, + BetSizeIndex: 0, + BetLevelIndex: 4, + }, + 5: { + Index: 5, + BetChangeList: 3, + BetSizeIndex: 0, + BetLevelIndex: 9, + }, + 6: { + Index: 6, + BetChangeList: 5, + BetSizeIndex: 1, + BetLevelIndex: 4, + }, + 7: { + Index: 7, + BetChangeList: 9, + BetSizeIndex: 3, + BetLevelIndex: 0, + }, + 8: { + Index: 8, + BetChangeList: 10, + BetSizeIndex: 1, + BetLevelIndex: 9, + }, + 9: { + Index: 9, + BetChangeList: 15, + BetSizeIndex: 2, + BetLevelIndex: 4, + }, + 10: { + Index: 10, + BetChangeList: 30, + BetSizeIndex: 2, + BetLevelIndex: 9, + }, + 11: { + Index: 11, + BetChangeList: 45, + BetSizeIndex: 3, + BetLevelIndex: 4, + }, + 12: { + Index: 12, + BetChangeList: 90, + BetSizeIndex: 3, + BetLevelIndex: 9, + }, + } + + TestBetBetLevel = map[int64]*structs.TestBetBetLevel{ + 0: { + Index: 0, + BetLevel: 1, + }, + 1: { + Index: 1, + BetLevel: 2, + }, + 2: { + Index: 2, + BetLevel: 3, + }, + 3: { + Index: 3, + BetLevel: 4, + }, + 4: { + Index: 4, + BetLevel: 5, + }, + 5: { + Index: 5, + BetLevel: 6, + }, + 6: { + Index: 6, + BetLevel: 7, + }, + 7: { + Index: 7, + BetLevel: 8, + }, + 8: { + Index: 8, + BetLevel: 9, + }, + 9: { + Index: 9, + BetLevel: 10, + }, + } + + TestBetBetLine = map[int64]*structs.TestBetBetLine{ + 0: { + Index: 0, + BetLine: 10, + }, + } + + TestBetBetSize = map[int64]*structs.TestBetBetSize{ + 0: { + Index: 0, + BetSize: 300, + }, + 1: { + Index: 1, + BetSize: 1000, + }, + 2: { + Index: 2, + BetSize: 3000, + }, + 3: { + Index: 3, + BetSize: 9000, + }, + } + + TestBetFirstBet = map[int64]*structs.TestBetFirstBet{ + 1: { + Index: 1, + BetSizeIndex: 1, + BetLevelIndex: 0, + }, + } + + TestFormation = []*structs.TestFormation{ + { + SpinType: 1, + NodeType: "BaseSpin", + ID: 1, + SeqID: 1, + Reel: "BaseSpin", + Matrix: "Line1Form3X3TypeA", + Symbol: "Default", + FirstInitMethod: 2, + OtherInitMethod: 4, + FirstInitSymbols: []int64{}, + OtherInitSymbols: []int64{}, + }, + } + + TestMapRTPMode = map[int64]*structs.TestMapRTPMode{ + 1: { + ID: 1, + TypeWeight: map[int64]*structs.TestMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "96", + Rtp: 0.96, + }, + 2: { + ID: 2, + TypeWeight: map[int64]*structs.TestMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "80", + Rtp: 0.8, + }, + 3: { + ID: 3, + TypeWeight: map[int64]*structs.TestMapRTPModeTypeWeight{ + 1: { + ID: 1, + Weight: 1, + }, + }, + Desc: "120", + Rtp: 1.2, + }, + } + + TestRandomWeight = []*structs.TestRandomWeight{ + { + ID: 1, + Time: 0, + Weight: 0.043017, + }, + { + ID: 2, + Time: 0.1, + Weight: 0.00795, + }, + { + ID: 3, + Time: 0.2, + Weight: 0.007884, + }, + { + ID: 4, + Time: 0.3, + Weight: 0.007819, + }, + { + ID: 5, + Time: 0.4, + Weight: 0.007754, + }, + { + ID: 6, + Time: 0.5, + Weight: 0.007689, + }, + { + ID: 7, + Time: 0.6, + Weight: 0.007625, + }, + { + ID: 8, + Time: 0.7, + Weight: 0.007562, + }, + { + ID: 9, + Time: 0.8, + Weight: 0.007499, + }, + { + ID: 10, + Time: 0.9, + Weight: 0.007437, + }, + { + ID: 11, + Time: 1, + Weight: 0.007375, + }, + { + ID: 12, + Time: 1.1, + Weight: 0.007314, + }, + { + ID: 13, + Time: 1.2, + Weight: 0.007253, + }, + { + ID: 14, + Time: 1.3, + Weight: 0.007193, + }, + { + ID: 15, + Time: 1.4, + Weight: 0.007133, + }, + { + ID: 16, + Time: 1.5, + Weight: 0.007074, + }, + { + ID: 17, + Time: 1.6, + Weight: 0.007015, + }, + { + ID: 18, + Time: 1.7, + Weight: 0.006957, + }, + { + ID: 19, + Time: 1.8, + Weight: 0.006899, + }, + { + ID: 20, + Time: 1.9, + Weight: 0.006842, + }, + { + ID: 21, + Time: 2, + Weight: 0.006785, + }, + { + ID: 22, + Time: 2.1, + Weight: 0.006728, + }, + { + ID: 23, + Time: 2.2, + Weight: 0.006673, + }, + { + ID: 24, + Time: 2.3, + Weight: 0.006617, + }, + { + ID: 25, + Time: 2.4, + Weight: 0.006562, + }, + { + ID: 26, + Time: 2.5, + Weight: 0.006508, + }, + { + ID: 27, + Time: 2.6, + Weight: 0.006454, + }, + { + ID: 28, + Time: 2.7, + Weight: 0.0064, + }, + { + ID: 29, + Time: 2.8, + Weight: 0.006347, + }, + { + ID: 30, + Time: 2.9, + Weight: 0.006294, + }, + { + ID: 31, + Time: 3, + Weight: 0.006242, + }, + { + ID: 32, + Time: 3.1, + Weight: 0.00619, + }, + { + ID: 33, + Time: 3.2, + Weight: 0.006138, + }, + { + ID: 34, + Time: 3.3, + Weight: 0.006087, + }, + { + ID: 35, + Time: 3.4, + Weight: 0.006037, + }, + { + ID: 36, + Time: 3.5, + Weight: 0.005987, + }, + { + ID: 37, + Time: 3.6, + Weight: 0.005937, + }, + { + ID: 38, + Time: 3.7, + Weight: 0.005888, + }, + { + ID: 39, + Time: 3.8, + Weight: 0.005839, + }, + { + ID: 40, + Time: 3.9, + Weight: 0.00579, + }, + { + ID: 41, + Time: 4, + Weight: 0.005742, + }, + { + ID: 42, + Time: 4.1, + Weight: 0.005694, + }, + { + ID: 43, + Time: 4.2, + Weight: 0.005647, + }, + { + ID: 44, + Time: 4.3, + Weight: 0.0056, + }, + { + ID: 45, + Time: 4.4, + Weight: 0.005554, + }, + { + ID: 46, + Time: 4.5, + Weight: 0.005508, + }, + { + ID: 47, + Time: 4.6, + Weight: 0.005462, + }, + { + ID: 48, + Time: 4.7, + Weight: 0.005416, + }, + { + ID: 49, + Time: 4.8, + Weight: 0.005371, + }, + { + ID: 50, + Time: 4.9, + Weight: 0.005327, + }, + { + ID: 51, + Time: 5, + Weight: 0.005283, + }, + { + ID: 52, + Time: 5.1, + Weight: 0.005239, + }, + { + ID: 53, + Time: 5.2, + Weight: 0.005195, + }, + { + ID: 54, + Time: 5.3, + Weight: 0.005152, + }, + { + ID: 55, + Time: 5.4, + Weight: 0.005109, + }, + { + ID: 56, + Time: 5.5, + Weight: 0.005067, + }, + { + ID: 57, + Time: 5.6, + Weight: 0.005025, + }, + { + ID: 58, + Time: 5.7, + Weight: 0.004983, + }, + { + ID: 59, + Time: 5.8, + Weight: 0.004942, + }, + { + ID: 60, + Time: 5.9, + Weight: 0.004901, + }, + { + ID: 61, + Time: 6, + Weight: 0.00486, + }, + { + ID: 62, + Time: 6.1, + Weight: 0.004819, + }, + { + ID: 63, + Time: 6.2, + Weight: 0.004779, + }, + { + ID: 64, + Time: 6.3, + Weight: 0.00474, + }, + { + ID: 65, + Time: 6.4, + Weight: 0.0047, + }, + { + ID: 66, + Time: 6.5, + Weight: 0.004661, + }, + { + ID: 67, + Time: 6.6, + Weight: 0.004623, + }, + { + ID: 68, + Time: 6.7, + Weight: 0.004584, + }, + { + ID: 69, + Time: 6.8, + Weight: 0.004546, + }, + { + ID: 70, + Time: 6.9, + Weight: 0.004508, + }, + { + ID: 71, + Time: 7, + Weight: 0.004471, + }, + { + ID: 72, + Time: 7.1, + Weight: 0.004434, + }, + { + ID: 73, + Time: 7.2, + Weight: 0.004397, + }, + { + ID: 74, + Time: 7.3, + Weight: 0.00436, + }, + { + ID: 75, + Time: 7.4, + Weight: 0.004324, + }, + { + ID: 76, + Time: 7.5, + Weight: 0.004288, + }, + { + ID: 77, + Time: 7.6, + Weight: 0.004253, + }, + { + ID: 78, + Time: 7.7, + Weight: 0.004217, + }, + { + ID: 79, + Time: 7.8, + Weight: 0.004182, + }, + { + ID: 80, + Time: 7.9, + Weight: 0.004147, + }, + { + ID: 81, + Time: 8, + Weight: 0.004113, + }, + { + ID: 82, + Time: 8.1, + Weight: 0.004079, + }, + { + ID: 83, + Time: 8.2, + Weight: 0.004045, + }, + { + ID: 84, + Time: 8.3, + Weight: 0.004011, + }, + { + ID: 85, + Time: 8.4, + Weight: 0.003978, + }, + { + ID: 86, + Time: 8.5, + Weight: 0.003945, + }, + { + ID: 87, + Time: 8.6, + Weight: 0.003912, + }, + { + ID: 88, + Time: 8.7, + Weight: 0.00388, + }, + { + ID: 89, + Time: 8.8, + Weight: 0.003847, + }, + { + ID: 90, + Time: 8.9, + Weight: 0.003816, + }, + { + ID: 91, + Time: 9, + Weight: 0.003784, + }, + { + ID: 92, + Time: 9.1, + Weight: 0.003752, + }, + { + ID: 93, + Time: 9.2, + Weight: 0.003721, + }, + { + ID: 94, + Time: 9.3, + Weight: 0.00369, + }, + { + ID: 95, + Time: 9.4, + Weight: 0.00366, + }, + { + ID: 96, + Time: 9.5, + Weight: 0.003629, + }, + { + ID: 97, + Time: 9.6, + Weight: 0.003599, + }, + { + ID: 98, + Time: 9.7, + Weight: 0.003569, + }, + { + ID: 99, + Time: 9.8, + Weight: 0.00354, + }, + { + ID: 100, + Time: 9.9, + Weight: 0.00351, + }, + { + ID: 101, + Time: 10, + Weight: 0.003481, + }, + { + ID: 102, + Time: 10.1, + Weight: 0.003452, + }, + { + ID: 103, + Time: 10.2, + Weight: 0.003423, + }, + { + ID: 104, + Time: 10.3, + Weight: 0.003395, + }, + { + ID: 105, + Time: 10.4, + Weight: 0.003367, + }, + { + ID: 106, + Time: 10.5, + Weight: 0.003339, + }, + { + ID: 107, + Time: 10.6, + Weight: 0.003311, + }, + { + ID: 108, + Time: 10.7, + Weight: 0.003284, + }, + { + ID: 109, + Time: 10.8, + Weight: 0.003256, + }, + { + ID: 110, + Time: 10.9, + Weight: 0.003229, + }, + { + ID: 111, + Time: 11, + Weight: 0.003202, + }, + { + ID: 112, + Time: 11.1, + Weight: 0.003176, + }, + { + ID: 113, + Time: 11.2, + Weight: 0.003149, + }, + { + ID: 114, + Time: 11.3, + Weight: 0.003123, + }, + { + ID: 115, + Time: 11.4, + Weight: 0.003097, + }, + { + ID: 116, + Time: 11.5, + Weight: 0.003072, + }, + { + ID: 117, + Time: 11.6, + Weight: 0.003046, + }, + { + ID: 118, + Time: 11.7, + Weight: 0.003021, + }, + { + ID: 119, + Time: 11.8, + Weight: 0.002996, + }, + { + ID: 120, + Time: 11.9, + Weight: 0.002971, + }, + { + ID: 121, + Time: 12, + Weight: 0.002946, + }, + { + ID: 122, + Time: 12.1, + Weight: 0.002922, + }, + { + ID: 123, + Time: 12.2, + Weight: 0.002897, + }, + { + ID: 124, + Time: 12.3, + Weight: 0.002873, + }, + { + ID: 125, + Time: 12.4, + Weight: 0.002849, + }, + { + ID: 126, + Time: 12.5, + Weight: 0.002826, + }, + { + ID: 127, + Time: 12.6, + Weight: 0.002802, + }, + { + ID: 128, + Time: 12.7, + Weight: 0.002779, + }, + { + ID: 129, + Time: 12.8, + Weight: 0.002756, + }, + { + ID: 130, + Time: 12.9, + Weight: 0.002733, + }, + { + ID: 131, + Time: 13, + Weight: 0.00271, + }, + { + ID: 132, + Time: 13.1, + Weight: 0.002688, + }, + { + ID: 133, + Time: 13.2, + Weight: 0.002665, + }, + { + ID: 134, + Time: 13.3, + Weight: 0.002643, + }, + { + ID: 135, + Time: 13.4, + Weight: 0.002621, + }, + { + ID: 136, + Time: 13.5, + Weight: 0.0026, + }, + { + ID: 137, + Time: 13.6, + Weight: 0.002578, + }, + { + ID: 138, + Time: 13.7, + Weight: 0.002557, + }, + { + ID: 139, + Time: 13.8, + Weight: 0.002535, + }, + { + ID: 140, + Time: 13.9, + Weight: 0.002514, + }, + { + ID: 141, + Time: 14, + Weight: 0.002493, + }, + { + ID: 142, + Time: 14.1, + Weight: 0.002473, + }, + { + ID: 143, + Time: 14.2, + Weight: 0.002452, + }, + { + ID: 144, + Time: 14.3, + Weight: 0.002432, + }, + { + ID: 145, + Time: 14.4, + Weight: 0.002412, + }, + { + ID: 146, + Time: 14.5, + Weight: 0.002391, + }, + { + ID: 147, + Time: 14.6, + Weight: 0.002372, + }, + { + ID: 148, + Time: 14.7, + Weight: 0.002352, + }, + { + ID: 149, + Time: 14.8, + Weight: 0.002332, + }, + { + ID: 150, + Time: 14.9, + Weight: 0.002313, + }, + { + ID: 151, + Time: 15, + Weight: 0.002294, + }, + { + ID: 152, + Time: 15.1, + Weight: 0.002275, + }, + { + ID: 153, + Time: 15.2, + Weight: 0.002256, + }, + { + ID: 154, + Time: 15.3, + Weight: 0.002237, + }, + { + ID: 155, + Time: 15.4, + Weight: 0.002219, + }, + { + ID: 156, + Time: 15.5, + Weight: 0.0022, + }, + { + ID: 157, + Time: 15.6, + Weight: 0.002182, + }, + { + ID: 158, + Time: 15.7, + Weight: 0.002164, + }, + { + ID: 159, + Time: 15.8, + Weight: 0.002146, + }, + { + ID: 160, + Time: 15.9, + Weight: 0.002128, + }, + { + ID: 161, + Time: 16, + Weight: 0.00211, + }, + { + ID: 162, + Time: 16.1, + Weight: 0.002093, + }, + { + ID: 163, + Time: 16.2, + Weight: 0.002075, + }, + { + ID: 164, + Time: 16.3, + Weight: 0.002058, + }, + { + ID: 165, + Time: 16.4, + Weight: 0.002041, + }, + { + ID: 166, + Time: 16.5, + Weight: 0.002024, + }, + { + ID: 167, + Time: 16.6, + Weight: 0.002007, + }, + { + ID: 168, + Time: 16.7, + Weight: 0.001991, + }, + { + ID: 169, + Time: 16.8, + Weight: 0.001974, + }, + { + ID: 170, + Time: 16.9, + Weight: 0.001958, + }, + { + ID: 171, + Time: 17, + Weight: 0.001941, + }, + { + ID: 172, + Time: 17.1, + Weight: 0.001925, + }, + { + ID: 173, + Time: 17.2, + Weight: 0.001909, + }, + { + ID: 174, + Time: 17.3, + Weight: 0.001893, + }, + { + ID: 175, + Time: 17.4, + Weight: 0.001878, + }, + { + ID: 176, + Time: 17.5, + Weight: 0.001862, + }, + { + ID: 177, + Time: 17.6, + Weight: 0.001847, + }, + { + ID: 178, + Time: 17.7, + Weight: 0.001831, + }, + { + ID: 179, + Time: 17.8, + Weight: 0.001816, + }, + { + ID: 180, + Time: 17.9, + Weight: 0.001801, + }, + { + ID: 181, + Time: 18, + Weight: 0.001786, + }, + { + ID: 182, + Time: 18.1, + Weight: 0.001771, + }, + { + ID: 183, + Time: 18.2, + Weight: 0.001756, + }, + { + ID: 184, + Time: 18.3, + Weight: 0.001742, + }, + { + ID: 185, + Time: 18.4, + Weight: 0.001727, + }, + { + ID: 186, + Time: 18.5, + Weight: 0.001713, + }, + { + ID: 187, + Time: 18.6, + Weight: 0.001699, + }, + { + ID: 188, + Time: 18.7, + Weight: 0.001685, + }, + { + ID: 189, + Time: 18.8, + Weight: 0.001671, + }, + { + ID: 190, + Time: 18.9, + Weight: 0.001657, + }, + { + ID: 191, + Time: 19, + Weight: 0.001643, + }, + { + ID: 192, + Time: 19.1, + Weight: 0.001629, + }, + { + ID: 193, + Time: 19.2, + Weight: 0.001616, + }, + { + ID: 194, + Time: 19.3, + Weight: 0.001602, + }, + { + ID: 195, + Time: 19.4, + Weight: 0.001589, + }, + { + ID: 196, + Time: 19.5, + Weight: 0.001576, + }, + { + ID: 197, + Time: 19.6, + Weight: 0.001563, + }, + { + ID: 198, + Time: 19.7, + Weight: 0.00155, + }, + { + ID: 199, + Time: 19.8, + Weight: 0.001537, + }, + { + ID: 200, + Time: 19.9, + Weight: 0.001524, + }, + { + ID: 201, + Time: 20, + Weight: 0.001511, + }, + { + ID: 202, + Time: 20.1, + Weight: 0.001499, + }, + { + ID: 203, + Time: 20.2, + Weight: 0.001486, + }, + { + ID: 204, + Time: 20.3, + Weight: 0.001474, + }, + { + ID: 205, + Time: 20.4, + Weight: 0.001462, + }, + { + ID: 206, + Time: 20.5, + Weight: 0.00145, + }, + { + ID: 207, + Time: 20.6, + Weight: 0.001438, + }, + { + ID: 208, + Time: 20.7, + Weight: 0.001426, + }, + { + ID: 209, + Time: 20.8, + Weight: 0.001414, + }, + { + ID: 210, + Time: 20.9, + Weight: 0.001402, + }, + { + ID: 211, + Time: 21, + Weight: 0.001391, + }, + { + ID: 212, + Time: 21.1, + Weight: 0.001379, + }, + { + ID: 213, + Time: 21.2, + Weight: 0.001368, + }, + { + ID: 214, + Time: 21.3, + Weight: 0.001356, + }, + { + ID: 215, + Time: 21.4, + Weight: 0.001345, + }, + { + ID: 216, + Time: 21.5, + Weight: 0.001334, + }, + { + ID: 217, + Time: 21.6, + Weight: 0.001323, + }, + { + ID: 218, + Time: 21.7, + Weight: 0.001312, + }, + { + ID: 219, + Time: 21.8, + Weight: 0.001301, + }, + { + ID: 220, + Time: 21.9, + Weight: 0.00129, + }, + { + ID: 221, + Time: 22, + Weight: 0.001279, + }, + { + ID: 222, + Time: 22.1, + Weight: 0.001269, + }, + { + ID: 223, + Time: 22.2, + Weight: 0.001258, + }, + { + ID: 224, + Time: 22.3, + Weight: 0.001248, + }, + { + ID: 225, + Time: 22.4, + Weight: 0.001237, + }, + { + ID: 226, + Time: 22.5, + Weight: 0.001227, + }, + { + ID: 227, + Time: 22.6, + Weight: 0.001217, + }, + { + ID: 228, + Time: 22.7, + Weight: 0.001207, + }, + { + ID: 229, + Time: 22.8, + Weight: 0.001197, + }, + { + ID: 230, + Time: 22.9, + Weight: 0.001187, + }, + { + ID: 231, + Time: 23, + Weight: 0.001177, + }, + { + ID: 232, + Time: 23.1, + Weight: 0.001167, + }, + { + ID: 233, + Time: 23.2, + Weight: 0.001157, + }, + { + ID: 234, + Time: 23.3, + Weight: 0.001148, + }, + { + ID: 235, + Time: 23.4, + Weight: 0.001138, + }, + { + ID: 236, + Time: 23.5, + Weight: 0.001129, + }, + { + ID: 237, + Time: 23.6, + Weight: 0.001119, + }, + { + ID: 238, + Time: 23.7, + Weight: 0.00111, + }, + { + ID: 239, + Time: 23.8, + Weight: 0.001101, + }, + { + ID: 240, + Time: 23.9, + Weight: 0.001092, + }, + { + ID: 241, + Time: 24, + Weight: 0.001083, + }, + { + ID: 242, + Time: 24.1, + Weight: 0.001074, + }, + { + ID: 243, + Time: 24.2, + Weight: 0.001065, + }, + { + ID: 244, + Time: 24.3, + Weight: 0.001056, + }, + { + ID: 245, + Time: 24.4, + Weight: 0.001047, + }, + { + ID: 246, + Time: 24.5, + Weight: 0.001038, + }, + { + ID: 247, + Time: 24.6, + Weight: 0.00103, + }, + { + ID: 248, + Time: 24.7, + Weight: 0.001021, + }, + { + ID: 249, + Time: 24.8, + Weight: 0.001013, + }, + { + ID: 250, + Time: 24.9, + Weight: 0.001004, + }, + { + ID: 251, + Time: 25, + Weight: 0.000996, + }, + { + ID: 252, + Time: 25.1, + Weight: 0.000988, + }, + { + ID: 253, + Time: 25.2, + Weight: 0.00098, + }, + { + ID: 254, + Time: 25.3, + Weight: 0.000971, + }, + { + ID: 255, + Time: 25.4, + Weight: 0.000963, + }, + { + ID: 256, + Time: 25.5, + Weight: 0.000955, + }, + { + ID: 257, + Time: 25.6, + Weight: 0.000947, + }, + { + ID: 258, + Time: 25.7, + Weight: 0.000939, + }, + { + ID: 259, + Time: 25.8, + Weight: 0.000932, + }, + { + ID: 260, + Time: 25.9, + Weight: 0.000924, + }, + { + ID: 261, + Time: 26, + Weight: 0.000916, + }, + { + ID: 262, + Time: 26.1, + Weight: 0.000909, + }, + { + ID: 263, + Time: 26.2, + Weight: 0.000901, + }, + { + ID: 264, + Time: 26.3, + Weight: 0.000894, + }, + { + ID: 265, + Time: 26.4, + Weight: 0.000886, + }, + { + ID: 266, + Time: 26.5, + Weight: 0.000879, + }, + { + ID: 267, + Time: 26.6, + Weight: 0.000872, + }, + { + ID: 268, + Time: 26.7, + Weight: 0.000864, + }, + { + ID: 269, + Time: 26.8, + Weight: 0.000857, + }, + { + ID: 270, + Time: 26.9, + Weight: 0.00085, + }, + { + ID: 271, + Time: 27, + Weight: 0.000843, + }, + { + ID: 272, + Time: 27.1, + Weight: 0.000836, + }, + { + ID: 273, + Time: 27.2, + Weight: 0.000829, + }, + { + ID: 274, + Time: 27.3, + Weight: 0.000822, + }, + { + ID: 275, + Time: 27.4, + Weight: 0.000815, + }, + { + ID: 276, + Time: 27.5, + Weight: 0.000809, + }, + { + ID: 277, + Time: 27.6, + Weight: 0.000802, + }, + { + ID: 278, + Time: 27.7, + Weight: 0.000795, + }, + { + ID: 279, + Time: 27.8, + Weight: 0.000789, + }, + { + ID: 280, + Time: 27.9, + Weight: 0.000782, + }, + { + ID: 281, + Time: 28, + Weight: 0.000775, + }, + { + ID: 282, + Time: 28.1, + Weight: 0.000769, + }, + { + ID: 283, + Time: 28.2, + Weight: 0.000763, + }, + { + ID: 284, + Time: 28.3, + Weight: 0.000756, + }, + { + ID: 285, + Time: 28.4, + Weight: 0.00075, + }, + { + ID: 286, + Time: 28.5, + Weight: 0.000744, + }, + { + ID: 287, + Time: 28.6, + Weight: 0.000738, + }, + { + ID: 288, + Time: 28.7, + Weight: 0.000731, + }, + { + ID: 289, + Time: 28.8, + Weight: 0.000725, + }, + { + ID: 290, + Time: 28.9, + Weight: 0.000719, + }, + { + ID: 291, + Time: 29, + Weight: 0.000713, + }, + { + ID: 292, + Time: 29.1, + Weight: 0.000707, + }, + { + ID: 293, + Time: 29.2, + Weight: 0.000702, + }, + { + ID: 294, + Time: 29.3, + Weight: 0.000696, + }, + { + ID: 295, + Time: 29.4, + Weight: 0.00069, + }, + { + ID: 296, + Time: 29.5, + Weight: 0.000684, + }, + { + ID: 297, + Time: 29.6, + Weight: 0.000679, + }, + { + ID: 298, + Time: 29.7, + Weight: 0.000673, + }, + { + ID: 299, + Time: 29.8, + Weight: 0.000667, + }, + { + ID: 300, + Time: 29.9, + Weight: 0.000662, + }, + { + ID: 301, + Time: 30, + Weight: 0.000656, + }, + { + ID: 302, + Time: 30.1, + Weight: 0.000651, + }, + { + ID: 303, + Time: 30.2, + Weight: 0.000645, + }, + { + ID: 304, + Time: 30.3, + Weight: 0.00064, + }, + { + ID: 305, + Time: 30.4, + Weight: 0.000635, + }, + { + ID: 306, + Time: 30.5, + Weight: 0.000629, + }, + { + ID: 307, + Time: 30.6, + Weight: 0.000624, + }, + { + ID: 308, + Time: 30.7, + Weight: 0.000619, + }, + { + ID: 309, + Time: 30.8, + Weight: 0.000614, + }, + { + ID: 310, + Time: 30.9, + Weight: 0.000609, + }, + { + ID: 311, + Time: 31, + Weight: 0.000604, + }, + { + ID: 312, + Time: 31.1, + Weight: 0.000599, + }, + { + ID: 313, + Time: 31.2, + Weight: 0.000594, + }, + { + ID: 314, + Time: 31.3, + Weight: 0.000589, + }, + { + ID: 315, + Time: 31.4, + Weight: 0.000584, + }, + { + ID: 316, + Time: 31.5, + Weight: 0.000579, + }, + { + ID: 317, + Time: 31.6, + Weight: 0.000574, + }, + { + ID: 318, + Time: 31.7, + Weight: 0.00057, + }, + { + ID: 319, + Time: 31.8, + Weight: 0.000565, + }, + { + ID: 320, + Time: 31.9, + Weight: 0.00056, + }, + { + ID: 321, + Time: 32, + Weight: 0.000555, + }, + { + ID: 322, + Time: 32.1, + Weight: 0.000551, + }, + { + ID: 323, + Time: 32.2, + Weight: 0.000546, + }, + { + ID: 324, + Time: 32.3, + Weight: 0.000542, + }, + { + ID: 325, + Time: 32.4, + Weight: 0.000537, + }, + { + ID: 326, + Time: 32.5, + Weight: 0.000533, + }, + { + ID: 327, + Time: 32.6, + Weight: 0.000528, + }, + { + ID: 328, + Time: 32.7, + Weight: 0.000524, + }, + { + ID: 329, + Time: 32.8, + Weight: 0.00052, + }, + { + ID: 330, + Time: 32.9, + Weight: 0.000515, + }, + { + ID: 331, + Time: 33, + Weight: 0.000511, + }, + { + ID: 332, + Time: 33.1, + Weight: 0.000507, + }, + { + ID: 333, + Time: 33.2, + Weight: 0.000503, + }, + { + ID: 334, + Time: 33.3, + Weight: 0.000498, + }, + { + ID: 335, + Time: 33.4, + Weight: 0.000494, + }, + { + ID: 336, + Time: 33.5, + Weight: 0.00049, + }, + { + ID: 337, + Time: 33.6, + Weight: 0.000486, + }, + { + ID: 338, + Time: 33.7, + Weight: 0.000482, + }, + { + ID: 339, + Time: 33.8, + Weight: 0.000478, + }, + { + ID: 340, + Time: 33.9, + Weight: 0.000474, + }, + { + ID: 341, + Time: 34, + Weight: 0.00047, + }, + { + ID: 342, + Time: 34.1, + Weight: 0.000466, + }, + { + ID: 343, + Time: 34.2, + Weight: 0.000462, + }, + { + ID: 344, + Time: 34.3, + Weight: 0.000458, + }, + { + ID: 345, + Time: 34.4, + Weight: 0.000455, + }, + { + ID: 346, + Time: 34.5, + Weight: 0.000451, + }, + { + ID: 347, + Time: 34.6, + Weight: 0.000447, + }, + { + ID: 348, + Time: 34.7, + Weight: 0.000443, + }, + { + ID: 349, + Time: 34.8, + Weight: 0.00044, + }, + { + ID: 350, + Time: 34.9, + Weight: 0.000436, + }, + { + ID: 351, + Time: 35, + Weight: 0.000432, + }, + { + ID: 352, + Time: 35.1, + Weight: 0.000429, + }, + { + ID: 353, + Time: 35.2, + Weight: 0.000425, + }, + { + ID: 354, + Time: 35.3, + Weight: 0.000422, + }, + { + ID: 355, + Time: 35.4, + Weight: 0.000418, + }, + { + ID: 356, + Time: 35.5, + Weight: 0.000415, + }, + { + ID: 357, + Time: 35.6, + Weight: 0.000411, + }, + { + ID: 358, + Time: 35.7, + Weight: 0.000408, + }, + { + ID: 359, + Time: 35.8, + Weight: 0.000405, + }, + { + ID: 360, + Time: 35.9, + Weight: 0.000401, + }, + { + ID: 361, + Time: 36, + Weight: 0.000398, + }, + { + ID: 362, + Time: 36.1, + Weight: 0.000395, + }, + { + ID: 363, + Time: 36.2, + Weight: 0.000391, + }, + { + ID: 364, + Time: 36.3, + Weight: 0.000388, + }, + { + ID: 365, + Time: 36.4, + Weight: 0.000385, + }, + { + ID: 366, + Time: 36.5, + Weight: 0.000382, + }, + { + ID: 367, + Time: 36.6, + Weight: 0.000378, + }, + { + ID: 368, + Time: 36.7, + Weight: 0.000375, + }, + { + ID: 369, + Time: 36.8, + Weight: 0.000372, + }, + { + ID: 370, + Time: 36.9, + Weight: 0.000369, + }, + { + ID: 371, + Time: 37, + Weight: 0.000366, + }, + { + ID: 372, + Time: 37.1, + Weight: 0.000363, + }, + { + ID: 373, + Time: 37.2, + Weight: 0.00036, + }, + { + ID: 374, + Time: 37.3, + Weight: 0.000357, + }, + { + ID: 375, + Time: 37.4, + Weight: 0.000354, + }, + { + ID: 376, + Time: 37.5, + Weight: 0.000351, + }, + { + ID: 377, + Time: 37.6, + Weight: 0.000348, + }, + { + ID: 378, + Time: 37.7, + Weight: 0.000345, + }, + { + ID: 379, + Time: 37.8, + Weight: 0.000342, + }, + { + ID: 380, + Time: 37.9, + Weight: 0.00034, + }, + { + ID: 381, + Time: 38, + Weight: 0.000337, + }, + { + ID: 382, + Time: 38.1, + Weight: 0.000334, + }, + { + ID: 383, + Time: 38.2, + Weight: 0.000331, + }, + { + ID: 384, + Time: 38.3, + Weight: 0.000328, + }, + { + ID: 385, + Time: 38.4, + Weight: 0.000326, + }, + { + ID: 386, + Time: 38.5, + Weight: 0.000323, + }, + { + ID: 387, + Time: 38.6, + Weight: 0.00032, + }, + { + ID: 388, + Time: 38.7, + Weight: 0.000318, + }, + { + ID: 389, + Time: 38.8, + Weight: 0.000315, + }, + { + ID: 390, + Time: 38.9, + Weight: 0.000312, + }, + { + ID: 391, + Time: 39, + Weight: 0.00031, + }, + { + ID: 392, + Time: 39.1, + Weight: 0.000307, + }, + { + ID: 393, + Time: 39.2, + Weight: 0.000305, + }, + { + ID: 394, + Time: 39.3, + Weight: 0.000302, + }, + { + ID: 395, + Time: 39.4, + Weight: 0.0003, + }, + { + ID: 396, + Time: 39.5, + Weight: 0.000297, + }, + { + ID: 397, + Time: 39.6, + Weight: 0.000295, + }, + { + ID: 398, + Time: 39.7, + Weight: 0.000292, + }, + { + ID: 399, + Time: 39.8, + Weight: 0.00029, + }, + { + ID: 400, + Time: 39.9, + Weight: 0.000287, + }, + { + ID: 401, + Time: 40, + Weight: 0.000285, + }, + { + ID: 402, + Time: 40.1, + Weight: 0.000283, + }, + { + ID: 403, + Time: 40.2, + Weight: 0.00028, + }, + { + ID: 404, + Time: 40.3, + Weight: 0.000278, + }, + { + ID: 405, + Time: 40.4, + Weight: 0.000276, + }, + { + ID: 406, + Time: 40.5, + Weight: 0.000273, + }, + { + ID: 407, + Time: 40.6, + Weight: 0.000271, + }, + { + ID: 408, + Time: 40.7, + Weight: 0.000269, + }, + { + ID: 409, + Time: 40.8, + Weight: 0.000267, + }, + { + ID: 410, + Time: 40.9, + Weight: 0.000264, + }, + { + ID: 411, + Time: 41, + Weight: 0.000262, + }, + { + ID: 412, + Time: 41.1, + Weight: 0.00026, + }, + { + ID: 413, + Time: 41.2, + Weight: 0.000258, + }, + { + ID: 414, + Time: 41.3, + Weight: 0.000256, + }, + { + ID: 415, + Time: 41.4, + Weight: 0.000254, + }, + { + ID: 416, + Time: 41.5, + Weight: 0.000251, + }, + { + ID: 417, + Time: 41.6, + Weight: 0.000249, + }, + { + ID: 418, + Time: 41.7, + Weight: 0.000247, + }, + { + ID: 419, + Time: 41.8, + Weight: 0.000245, + }, + { + ID: 420, + Time: 41.9, + Weight: 0.000243, + }, + { + ID: 421, + Time: 42, + Weight: 0.000241, + }, + { + ID: 422, + Time: 42.1, + Weight: 0.000239, + }, + { + ID: 423, + Time: 42.2, + Weight: 0.000237, + }, + { + ID: 424, + Time: 42.3, + Weight: 0.000235, + }, + { + ID: 425, + Time: 42.4, + Weight: 0.000233, + }, + { + ID: 426, + Time: 42.5, + Weight: 0.000231, + }, + { + ID: 427, + Time: 42.6, + Weight: 0.000229, + }, + { + ID: 428, + Time: 42.7, + Weight: 0.000228, + }, + { + ID: 429, + Time: 42.8, + Weight: 0.000226, + }, + { + ID: 430, + Time: 42.9, + Weight: 0.000224, + }, + { + ID: 431, + Time: 43, + Weight: 0.000222, + }, + { + ID: 432, + Time: 43.1, + Weight: 0.00022, + }, + { + ID: 433, + Time: 43.2, + Weight: 0.000218, + }, + { + ID: 434, + Time: 43.3, + Weight: 0.000216, + }, + { + ID: 435, + Time: 43.4, + Weight: 0.000215, + }, + { + ID: 436, + Time: 43.5, + Weight: 0.000213, + }, + { + ID: 437, + Time: 43.6, + Weight: 0.000211, + }, + { + ID: 438, + Time: 43.7, + Weight: 0.000209, + }, + { + ID: 439, + Time: 43.8, + Weight: 0.000208, + }, + { + ID: 440, + Time: 43.9, + Weight: 0.000206, + }, + { + ID: 441, + Time: 44, + Weight: 0.000204, + }, + { + ID: 442, + Time: 44.1, + Weight: 0.000202, + }, + { + ID: 443, + Time: 44.2, + Weight: 0.000201, + }, + { + ID: 444, + Time: 44.3, + Weight: 0.000199, + }, + { + ID: 445, + Time: 44.4, + Weight: 0.000197, + }, + { + ID: 446, + Time: 44.5, + Weight: 0.000196, + }, + { + ID: 447, + Time: 44.6, + Weight: 0.000194, + }, + { + ID: 448, + Time: 44.7, + Weight: 0.000193, + }, + { + ID: 449, + Time: 44.8, + Weight: 0.000191, + }, + { + ID: 450, + Time: 44.9, + Weight: 0.000189, + }, + { + ID: 451, + Time: 45, + Weight: 0.000188, + }, + { + ID: 452, + Time: 45.1, + Weight: 0.000186, + }, + { + ID: 453, + Time: 45.2, + Weight: 0.000185, + }, + { + ID: 454, + Time: 45.3, + Weight: 0.000183, + }, + { + ID: 455, + Time: 45.4, + Weight: 0.000182, + }, + { + ID: 456, + Time: 45.5, + Weight: 0.00018, + }, + { + ID: 457, + Time: 45.6, + Weight: 0.000179, + }, + { + ID: 458, + Time: 45.7, + Weight: 0.000177, + }, + { + ID: 459, + Time: 45.8, + Weight: 0.000176, + }, + { + ID: 460, + Time: 45.9, + Weight: 0.000174, + }, + { + ID: 461, + Time: 46, + Weight: 0.000173, + }, + { + ID: 462, + Time: 46.1, + Weight: 0.000171, + }, + { + ID: 463, + Time: 46.2, + Weight: 0.00017, + }, + { + ID: 464, + Time: 46.3, + Weight: 0.000168, + }, + { + ID: 465, + Time: 46.4, + Weight: 0.000167, + }, + { + ID: 466, + Time: 46.5, + Weight: 0.000166, + }, + { + ID: 467, + Time: 46.6, + Weight: 0.000164, + }, + { + ID: 468, + Time: 46.7, + Weight: 0.000163, + }, + { + ID: 469, + Time: 46.8, + Weight: 0.000162, + }, + { + ID: 470, + Time: 46.9, + Weight: 0.00016, + }, + { + ID: 471, + Time: 47, + Weight: 0.000159, + }, + { + ID: 472, + Time: 47.1, + Weight: 0.000158, + }, + { + ID: 473, + Time: 47.2, + Weight: 0.000156, + }, + { + ID: 474, + Time: 47.3, + Weight: 0.000155, + }, + { + ID: 475, + Time: 47.4, + Weight: 0.000154, + }, + { + ID: 476, + Time: 47.5, + Weight: 0.000152, + }, + { + ID: 477, + Time: 47.6, + Weight: 0.000151, + }, + { + ID: 478, + Time: 47.7, + Weight: 0.00015, + }, + { + ID: 479, + Time: 47.8, + Weight: 0.000149, + }, + { + ID: 480, + Time: 47.9, + Weight: 0.000147, + }, + { + ID: 481, + Time: 48, + Weight: 0.000146, + }, + { + ID: 482, + Time: 48.1, + Weight: 0.000145, + }, + { + ID: 483, + Time: 48.2, + Weight: 0.000144, + }, + { + ID: 484, + Time: 48.3, + Weight: 0.000143, + }, + { + ID: 485, + Time: 48.4, + Weight: 0.000141, + }, + { + ID: 486, + Time: 48.5, + Weight: 0.00014, + }, + { + ID: 487, + Time: 48.6, + Weight: 0.000139, + }, + { + ID: 488, + Time: 48.7, + Weight: 0.000138, + }, + { + ID: 489, + Time: 48.8, + Weight: 0.000137, + }, + { + ID: 490, + Time: 48.9, + Weight: 0.000136, + }, + { + ID: 491, + Time: 49, + Weight: 0.000135, + }, + { + ID: 492, + Time: 49.1, + Weight: 0.000133, + }, + { + ID: 493, + Time: 49.2, + Weight: 0.000132, + }, + { + ID: 494, + Time: 49.3, + Weight: 0.000131, + }, + { + ID: 495, + Time: 49.4, + Weight: 0.00013, + }, + { + ID: 496, + Time: 49.5, + Weight: 0.000129, + }, + { + ID: 497, + Time: 49.6, + Weight: 0.000128, + }, + { + ID: 498, + Time: 49.7, + Weight: 0.000127, + }, + { + ID: 499, + Time: 49.8, + Weight: 0.000126, + }, + { + ID: 500, + Time: 49.9, + Weight: 0.000125, + }, + { + ID: 501, + Time: 50, + Weight: 0.000124, + }, + { + ID: 502, + Time: 50.1, + Weight: 0.000123, + }, + { + ID: 503, + Time: 50.2, + Weight: 0.000122, + }, + { + ID: 504, + Time: 50.3, + Weight: 0.000121, + }, + { + ID: 505, + Time: 50.4, + Weight: 0.00012, + }, + { + ID: 506, + Time: 50.5, + Weight: 0.000119, + }, + { + ID: 507, + Time: 50.6, + Weight: 0.000118, + }, + { + ID: 508, + Time: 50.7, + Weight: 0.000117, + }, + { + ID: 509, + Time: 50.8, + Weight: 0.000116, + }, + { + ID: 510, + Time: 50.9, + Weight: 0.000115, + }, + { + ID: 511, + Time: 51, + Weight: 0.000114, + }, + { + ID: 512, + Time: 51.1, + Weight: 0.000113, + }, + { + ID: 513, + Time: 51.2, + Weight: 0.000112, + }, + { + ID: 514, + Time: 51.3, + Weight: 0.000111, + }, + { + ID: 515, + Time: 51.4, + Weight: 0.00011, + }, + { + ID: 516, + Time: 51.5, + Weight: 0.000109, + }, + { + ID: 517, + Time: 51.6, + Weight: 0.000108, + }, + { + ID: 518, + Time: 51.7, + Weight: 0.000107, + }, + { + ID: 519, + Time: 51.8, + Weight: 0.000106, + }, + { + ID: 520, + Time: 51.9, + Weight: 0.000106, + }, + { + ID: 521, + Time: 52, + Weight: 0.000105, + }, + { + ID: 522, + Time: 52.1, + Weight: 0.000104, + }, + { + ID: 523, + Time: 52.2, + Weight: 0.000103, + }, + { + ID: 524, + Time: 52.3, + Weight: 0.000102, + }, + { + ID: 525, + Time: 52.4, + Weight: 0.000101, + }, + { + ID: 526, + Time: 52.5, + Weight: 0.0001, + }, + { + ID: 527, + Time: 52.6, + Weight: 0.0001, + }, + { + ID: 528, + Time: 52.7, + Weight: 0.000099, + }, + { + ID: 529, + Time: 52.8, + Weight: 0.000098, + }, + { + ID: 530, + Time: 52.9, + Weight: 0.000097, + }, + { + ID: 531, + Time: 53, + Weight: 0.000096, + }, + { + ID: 532, + Time: 53.1, + Weight: 0.000096, + }, + { + ID: 533, + Time: 53.2, + Weight: 0.000095, + }, + { + ID: 534, + Time: 53.3, + Weight: 0.000094, + }, + { + ID: 535, + Time: 53.4, + Weight: 0.000093, + }, + { + ID: 536, + Time: 53.5, + Weight: 0.000092, + }, + { + ID: 537, + Time: 53.6, + Weight: 0.000092, + }, + { + ID: 538, + Time: 53.7, + Weight: 0.000091, + }, + { + ID: 539, + Time: 53.8, + Weight: 0.00009, + }, + { + ID: 540, + Time: 53.9, + Weight: 0.000089, + }, + { + ID: 541, + Time: 54, + Weight: 0.000089, + }, + { + ID: 542, + Time: 54.1, + Weight: 0.000088, + }, + { + ID: 543, + Time: 54.2, + Weight: 0.000087, + }, + { + ID: 544, + Time: 54.3, + Weight: 0.000086, + }, + { + ID: 545, + Time: 54.4, + Weight: 0.000086, + }, + { + ID: 546, + Time: 54.5, + Weight: 0.000085, + }, + { + ID: 547, + Time: 54.6, + Weight: 0.000084, + }, + { + ID: 548, + Time: 54.7, + Weight: 0.000084, + }, + { + ID: 549, + Time: 54.8, + Weight: 0.000083, + }, + { + ID: 550, + Time: 54.9, + Weight: 0.000082, + }, + { + ID: 551, + Time: 55, + Weight: 0.000082, + }, + { + ID: 552, + Time: 55.1, + Weight: 0.000081, + }, + { + ID: 553, + Time: 55.2, + Weight: 0.00008, + }, + { + ID: 554, + Time: 55.3, + Weight: 0.00008, + }, + { + ID: 555, + Time: 55.4, + Weight: 0.000079, + }, + { + ID: 556, + Time: 55.5, + Weight: 0.000078, + }, + { + ID: 557, + Time: 55.6, + Weight: 0.000078, + }, + { + ID: 558, + Time: 55.7, + Weight: 0.000077, + }, + { + ID: 559, + Time: 55.8, + Weight: 0.000076, + }, + { + ID: 560, + Time: 55.9, + Weight: 0.000076, + }, + { + ID: 561, + Time: 56, + Weight: 0.000075, + }, + { + ID: 562, + Time: 56.1, + Weight: 0.000074, + }, + { + ID: 563, + Time: 56.2, + Weight: 0.000074, + }, + { + ID: 564, + Time: 56.3, + Weight: 0.000073, + }, + { + ID: 565, + Time: 56.4, + Weight: 0.000073, + }, + { + ID: 566, + Time: 56.5, + Weight: 0.000072, + }, + { + ID: 567, + Time: 56.6, + Weight: 0.000071, + }, + { + ID: 568, + Time: 56.7, + Weight: 0.000071, + }, + { + ID: 569, + Time: 56.8, + Weight: 0.00007, + }, + { + ID: 570, + Time: 56.9, + Weight: 0.00007, + }, + { + ID: 571, + Time: 57, + Weight: 0.000069, + }, + { + ID: 572, + Time: 57.1, + Weight: 0.000068, + }, + { + ID: 573, + Time: 57.2, + Weight: 0.000068, + }, + { + ID: 574, + Time: 57.3, + Weight: 0.000067, + }, + { + ID: 575, + Time: 57.4, + Weight: 0.000067, + }, + { + ID: 576, + Time: 57.5, + Weight: 0.000066, + }, + { + ID: 577, + Time: 57.6, + Weight: 0.000066, + }, + { + ID: 578, + Time: 57.7, + Weight: 0.000065, + }, + { + ID: 579, + Time: 57.8, + Weight: 0.000065, + }, + { + ID: 580, + Time: 57.9, + Weight: 0.000064, + }, + { + ID: 581, + Time: 58, + Weight: 0.000063, + }, + { + ID: 582, + Time: 58.1, + Weight: 0.000063, + }, + { + ID: 583, + Time: 58.2, + Weight: 0.000062, + }, + { + ID: 584, + Time: 58.3, + Weight: 0.000062, + }, + { + ID: 585, + Time: 58.4, + Weight: 0.000061, + }, + { + ID: 586, + Time: 58.5, + Weight: 0.000061, + }, + { + ID: 587, + Time: 58.6, + Weight: 0.00006, + }, + { + ID: 588, + Time: 58.7, + Weight: 0.00006, + }, + { + ID: 589, + Time: 58.8, + Weight: 0.000059, + }, + { + ID: 590, + Time: 58.9, + Weight: 0.000059, + }, + { + ID: 591, + Time: 59, + Weight: 0.000058, + }, + { + ID: 592, + Time: 59.1, + Weight: 0.000058, + }, + { + ID: 593, + Time: 59.2, + Weight: 0.000057, + }, + { + ID: 594, + Time: 59.3, + Weight: 0.000057, + }, + { + ID: 595, + Time: 59.4, + Weight: 0.000056, + }, + { + ID: 596, + Time: 59.5, + Weight: 0.000056, + }, + { + ID: 597, + Time: 59.6, + Weight: 0.000056, + }, + { + ID: 598, + Time: 59.7, + Weight: 0.000055, + }, + { + ID: 599, + Time: 59.8, + Weight: 0.000055, + }, + { + ID: 600, + Time: 59.9, + Weight: 0.000054, + }, + { + ID: 601, + Time: 60, + Weight: 0.000054, + }, + { + ID: 602, + Time: 60.1, + Weight: 0.000053, + }, + { + ID: 603, + Time: 60.2, + Weight: 0.000053, + }, + { + ID: 604, + Time: 60.3, + Weight: 0.000052, + }, + { + ID: 605, + Time: 60.4, + Weight: 0.000052, + }, + { + ID: 606, + Time: 60.5, + Weight: 0.000052, + }, + { + ID: 607, + Time: 60.6, + Weight: 0.000051, + }, + { + ID: 608, + Time: 60.7, + Weight: 0.000051, + }, + { + ID: 609, + Time: 60.8, + Weight: 0.00005, + }, + { + ID: 610, + Time: 60.9, + Weight: 0.00005, + }, + { + ID: 611, + Time: 61, + Weight: 0.000049, + }, + { + ID: 612, + Time: 61.1, + Weight: 0.000049, + }, + { + ID: 613, + Time: 61.2, + Weight: 0.000049, + }, + { + ID: 614, + Time: 61.3, + Weight: 0.000048, + }, + { + ID: 615, + Time: 61.4, + Weight: 0.000048, + }, + { + ID: 616, + Time: 61.5, + Weight: 0.000047, + }, + { + ID: 617, + Time: 61.6, + Weight: 0.000047, + }, + { + ID: 618, + Time: 61.7, + Weight: 0.000047, + }, + { + ID: 619, + Time: 61.8, + Weight: 0.000046, + }, + { + ID: 620, + Time: 61.9, + Weight: 0.000046, + }, + { + ID: 621, + Time: 62, + Weight: 0.000045, + }, + { + ID: 622, + Time: 62.1, + Weight: 0.000045, + }, + { + ID: 623, + Time: 62.2, + Weight: 0.000045, + }, + { + ID: 624, + Time: 62.3, + Weight: 0.000044, + }, + { + ID: 625, + Time: 62.4, + Weight: 0.000044, + }, + { + ID: 626, + Time: 62.5, + Weight: 0.000044, + }, + { + ID: 627, + Time: 62.6, + Weight: 0.000043, + }, + { + ID: 628, + Time: 62.7, + Weight: 0.000043, + }, + { + ID: 629, + Time: 62.8, + Weight: 0.000043, + }, + { + ID: 630, + Time: 62.9, + Weight: 0.000042, + }, + { + ID: 631, + Time: 63, + Weight: 0.000042, + }, + { + ID: 632, + Time: 63.1, + Weight: 0.000041, + }, + { + ID: 633, + Time: 63.2, + Weight: 0.000041, + }, + { + ID: 634, + Time: 63.3, + Weight: 0.000041, + }, + { + ID: 635, + Time: 63.4, + Weight: 0.00004, + }, + { + ID: 636, + Time: 63.5, + Weight: 0.00004, + }, + { + ID: 637, + Time: 63.6, + Weight: 0.00004, + }, + { + ID: 638, + Time: 63.7, + Weight: 0.000039, + }, + { + ID: 639, + Time: 63.8, + Weight: 0.000039, + }, + { + ID: 640, + Time: 63.9, + Weight: 0.000039, + }, + { + ID: 641, + Time: 64, + Weight: 0.000038, + }, + { + ID: 642, + Time: 64.1, + Weight: 0.000038, + }, + { + ID: 643, + Time: 64.2, + Weight: 0.000038, + }, + { + ID: 644, + Time: 64.3, + Weight: 0.000038, + }, + { + ID: 645, + Time: 64.4, + Weight: 0.000037, + }, + { + ID: 646, + Time: 64.5, + Weight: 0.000037, + }, + { + ID: 647, + Time: 64.6, + Weight: 0.000037, + }, + { + ID: 648, + Time: 64.7, + Weight: 0.000036, + }, + { + ID: 649, + Time: 64.8, + Weight: 0.000036, + }, + { + ID: 650, + Time: 64.9, + Weight: 0.000036, + }, + { + ID: 651, + Time: 65, + Weight: 0.000035, + }, + { + ID: 652, + Time: 65.1, + Weight: 0.000035, + }, + { + ID: 653, + Time: 65.2, + Weight: 0.000035, + }, + { + ID: 654, + Time: 65.3, + Weight: 0.000035, + }, + { + ID: 655, + Time: 65.4, + Weight: 0.000034, + }, + { + ID: 656, + Time: 65.5, + Weight: 0.000034, + }, + { + ID: 657, + Time: 65.6, + Weight: 0.000034, + }, + { + ID: 658, + Time: 65.7, + Weight: 0.000033, + }, + { + ID: 659, + Time: 65.8, + Weight: 0.000033, + }, + { + ID: 660, + Time: 65.9, + Weight: 0.000033, + }, + { + ID: 661, + Time: 66, + Weight: 0.000033, + }, + { + ID: 662, + Time: 66.1, + Weight: 0.000032, + }, + { + ID: 663, + Time: 66.2, + Weight: 0.000032, + }, + { + ID: 664, + Time: 66.3, + Weight: 0.000032, + }, + { + ID: 665, + Time: 66.4, + Weight: 0.000032, + }, + { + ID: 666, + Time: 66.5, + Weight: 0.000031, + }, + { + ID: 667, + Time: 66.6, + Weight: 0.000031, + }, + { + ID: 668, + Time: 66.7, + Weight: 0.000031, + }, + { + ID: 669, + Time: 66.8, + Weight: 0.00003, + }, + { + ID: 670, + Time: 66.9, + Weight: 0.00003, + }, + { + ID: 671, + Time: 67, + Weight: 0.00003, + }, + { + ID: 672, + Time: 67.1, + Weight: 0.00003, + }, + { + ID: 673, + Time: 67.2, + Weight: 0.000029, + }, + { + ID: 674, + Time: 67.3, + Weight: 0.000029, + }, + { + ID: 675, + Time: 67.4, + Weight: 0.000029, + }, + { + ID: 676, + Time: 67.5, + Weight: 0.000029, + }, + { + ID: 677, + Time: 67.6, + Weight: 0.000029, + }, + { + ID: 678, + Time: 67.7, + Weight: 0.000028, + }, + { + ID: 679, + Time: 67.8, + Weight: 0.000028, + }, + { + ID: 680, + Time: 67.9, + Weight: 0.000028, + }, + { + ID: 681, + Time: 68, + Weight: 0.000028, + }, + { + ID: 682, + Time: 68.1, + Weight: 0.000027, + }, + { + ID: 683, + Time: 68.2, + Weight: 0.000027, + }, + { + ID: 684, + Time: 68.3, + Weight: 0.000027, + }, + { + ID: 685, + Time: 68.4, + Weight: 0.000027, + }, + { + ID: 686, + Time: 68.5, + Weight: 0.000026, + }, + { + ID: 687, + Time: 68.6, + Weight: 0.000026, + }, + { + ID: 688, + Time: 68.7, + Weight: 0.000026, + }, + { + ID: 689, + Time: 68.8, + Weight: 0.000026, + }, + { + ID: 690, + Time: 68.9, + Weight: 0.000026, + }, + { + ID: 691, + Time: 69, + Weight: 0.000025, + }, + { + ID: 692, + Time: 69.1, + Weight: 0.000025, + }, + { + ID: 693, + Time: 69.2, + Weight: 0.000025, + }, + { + ID: 694, + Time: 69.3, + Weight: 0.000025, + }, + { + ID: 695, + Time: 69.4, + Weight: 0.000025, + }, + { + ID: 696, + Time: 69.5, + Weight: 0.000024, + }, + { + ID: 697, + Time: 69.6, + Weight: 0.000024, + }, + { + ID: 698, + Time: 69.7, + Weight: 0.000024, + }, + { + ID: 699, + Time: 69.8, + Weight: 0.000024, + }, + { + ID: 700, + Time: 69.9, + Weight: 0.000024, + }, + { + ID: 701, + Time: 70, + Weight: 0.000023, + }, + { + ID: 702, + Time: 70.1, + Weight: 0.000023, + }, + { + ID: 703, + Time: 70.2, + Weight: 0.000023, + }, + { + ID: 704, + Time: 70.3, + Weight: 0.000023, + }, + { + ID: 705, + Time: 70.4, + Weight: 0.000023, + }, + { + ID: 706, + Time: 70.5, + Weight: 0.000022, + }, + { + ID: 707, + Time: 70.6, + Weight: 0.000022, + }, + { + ID: 708, + Time: 70.7, + Weight: 0.000022, + }, + { + ID: 709, + Time: 70.8, + Weight: 0.000022, + }, + { + ID: 710, + Time: 70.9, + Weight: 0.000022, + }, + { + ID: 711, + Time: 71, + Weight: 0.000021, + }, + { + ID: 712, + Time: 71.1, + Weight: 0.000021, + }, + { + ID: 713, + Time: 71.2, + Weight: 0.000021, + }, + { + ID: 714, + Time: 71.3, + Weight: 0.000021, + }, + { + ID: 715, + Time: 71.4, + Weight: 0.000021, + }, + { + ID: 716, + Time: 71.5, + Weight: 0.000021, + }, + { + ID: 717, + Time: 71.6, + Weight: 0.00002, + }, + { + ID: 718, + Time: 71.7, + Weight: 0.00002, + }, + { + ID: 719, + Time: 71.8, + Weight: 0.00002, + }, + { + ID: 720, + Time: 71.9, + Weight: 0.00002, + }, + { + ID: 721, + Time: 72, + Weight: 0.00002, + }, + { + ID: 722, + Time: 72.1, + Weight: 0.00002, + }, + { + ID: 723, + Time: 72.2, + Weight: 0.000019, + }, + { + ID: 724, + Time: 72.3, + Weight: 0.000019, + }, + { + ID: 725, + Time: 72.4, + Weight: 0.000019, + }, + { + ID: 726, + Time: 72.5, + Weight: 0.000019, + }, + { + ID: 727, + Time: 72.6, + Weight: 0.000019, + }, + { + ID: 728, + Time: 72.7, + Weight: 0.000019, + }, + { + ID: 729, + Time: 72.8, + Weight: 0.000018, + }, + { + ID: 730, + Time: 72.9, + Weight: 0.000018, + }, + { + ID: 731, + Time: 73, + Weight: 0.000018, + }, + { + ID: 732, + Time: 73.1, + Weight: 0.000018, + }, + { + ID: 733, + Time: 73.2, + Weight: 0.000018, + }, + { + ID: 734, + Time: 73.3, + Weight: 0.000018, + }, + { + ID: 735, + Time: 73.4, + Weight: 0.000018, + }, + { + ID: 736, + Time: 73.5, + Weight: 0.000017, + }, + { + ID: 737, + Time: 73.6, + Weight: 0.000017, + }, + { + ID: 738, + Time: 73.7, + Weight: 0.000017, + }, + { + ID: 739, + Time: 73.8, + Weight: 0.000017, + }, + { + ID: 740, + Time: 73.9, + Weight: 0.000017, + }, + { + ID: 741, + Time: 74, + Weight: 0.000017, + }, + { + ID: 742, + Time: 74.1, + Weight: 0.000017, + }, + { + ID: 743, + Time: 74.2, + Weight: 0.000016, + }, + { + ID: 744, + Time: 74.3, + Weight: 0.000016, + }, + { + ID: 745, + Time: 74.4, + Weight: 0.000016, + }, + { + ID: 746, + Time: 74.5, + Weight: 0.000016, + }, + { + ID: 747, + Time: 74.6, + Weight: 0.000016, + }, + { + ID: 748, + Time: 74.7, + Weight: 0.000016, + }, + { + ID: 749, + Time: 74.8, + Weight: 0.000016, + }, + { + ID: 750, + Time: 74.9, + Weight: 0.000016, + }, + { + ID: 751, + Time: 75, + Weight: 0.000015, + }, + { + ID: 752, + Time: 75.1, + Weight: 0.000015, + }, + { + ID: 753, + Time: 75.2, + Weight: 0.000015, + }, + { + ID: 754, + Time: 75.3, + Weight: 0.000015, + }, + { + ID: 755, + Time: 75.4, + Weight: 0.000015, + }, + { + ID: 756, + Time: 75.5, + Weight: 0.000015, + }, + { + ID: 757, + Time: 75.6, + Weight: 0.000015, + }, + { + ID: 758, + Time: 75.7, + Weight: 0.000015, + }, + { + ID: 759, + Time: 75.8, + Weight: 0.000014, + }, + { + ID: 760, + Time: 75.9, + Weight: 0.000014, + }, + { + ID: 761, + Time: 76, + Weight: 0.000014, + }, + { + ID: 762, + Time: 76.1, + Weight: 0.000014, + }, + { + ID: 763, + Time: 76.2, + Weight: 0.000014, + }, + { + ID: 764, + Time: 76.3, + Weight: 0.000014, + }, + { + ID: 765, + Time: 76.4, + Weight: 0.000014, + }, + { + ID: 766, + Time: 76.5, + Weight: 0.000014, + }, + { + ID: 767, + Time: 76.6, + Weight: 0.000013, + }, + { + ID: 768, + Time: 76.7, + Weight: 0.000013, + }, + { + ID: 769, + Time: 76.8, + Weight: 0.000013, + }, + { + ID: 770, + Time: 76.9, + Weight: 0.000013, + }, + { + ID: 771, + Time: 77, + Weight: 0.000013, + }, + { + ID: 772, + Time: 77.1, + Weight: 0.000013, + }, + { + ID: 773, + Time: 77.2, + Weight: 0.000013, + }, + { + ID: 774, + Time: 77.3, + Weight: 0.000013, + }, + { + ID: 775, + Time: 77.4, + Weight: 0.000013, + }, + { + ID: 776, + Time: 77.5, + Weight: 0.000012, + }, + { + ID: 777, + Time: 77.6, + Weight: 0.000012, + }, + { + ID: 778, + Time: 77.7, + Weight: 0.000012, + }, + { + ID: 779, + Time: 77.8, + Weight: 0.000012, + }, + { + ID: 780, + Time: 77.9, + Weight: 0.000012, + }, + { + ID: 781, + Time: 78, + Weight: 0.000012, + }, + { + ID: 782, + Time: 78.1, + Weight: 0.000012, + }, + { + ID: 783, + Time: 78.2, + Weight: 0.000012, + }, + { + ID: 784, + Time: 78.3, + Weight: 0.000012, + }, + { + ID: 785, + Time: 78.4, + Weight: 0.000012, + }, + { + ID: 786, + Time: 78.5, + Weight: 0.000011, + }, + { + ID: 787, + Time: 78.6, + Weight: 0.000011, + }, + { + ID: 788, + Time: 78.7, + Weight: 0.000011, + }, + { + ID: 789, + Time: 78.8, + Weight: 0.000011, + }, + { + ID: 790, + Time: 78.9, + Weight: 0.000011, + }, + { + ID: 791, + Time: 79, + Weight: 0.000011, + }, + { + ID: 792, + Time: 79.1, + Weight: 0.000011, + }, + { + ID: 793, + Time: 79.2, + Weight: 0.000011, + }, + { + ID: 794, + Time: 79.3, + Weight: 0.000011, + }, + { + ID: 795, + Time: 79.4, + Weight: 0.000011, + }, + { + ID: 796, + Time: 79.5, + Weight: 0.000011, + }, + { + ID: 797, + Time: 79.6, + Weight: 0.00001, + }, + { + ID: 798, + Time: 79.7, + Weight: 0.00001, + }, + { + ID: 799, + Time: 79.8, + Weight: 0.00001, + }, + { + ID: 800, + Time: 79.9, + Weight: 0.00001, + }, + { + ID: 801, + Time: 80, + Weight: 0.00001, + }, + { + ID: 802, + Time: 80.1, + Weight: 0.00001, + }, + { + ID: 803, + Time: 80.2, + Weight: 0.00001, + }, + { + ID: 804, + Time: 80.3, + Weight: 0.00001, + }, + { + ID: 805, + Time: 80.4, + Weight: 0.00001, + }, + { + ID: 806, + Time: 80.5, + Weight: 0.00001, + }, + { + ID: 807, + Time: 80.6, + Weight: 0.00001, + }, + { + ID: 808, + Time: 80.7, + Weight: 0.00001, + }, + { + ID: 809, + Time: 80.8, + Weight: 0.000009, + }, + { + ID: 810, + Time: 80.9, + Weight: 0.000009, + }, + { + ID: 811, + Time: 81, + Weight: 0.000009, + }, + { + ID: 812, + Time: 81.1, + Weight: 0.000009, + }, + { + ID: 813, + Time: 81.2, + Weight: 0.000009, + }, + { + ID: 814, + Time: 81.3, + Weight: 0.000009, + }, + { + ID: 815, + Time: 81.4, + Weight: 0.000009, + }, + { + ID: 816, + Time: 81.5, + Weight: 0.000009, + }, + { + ID: 817, + Time: 81.6, + Weight: 0.000009, + }, + { + ID: 818, + Time: 81.7, + Weight: 0.000009, + }, + { + ID: 819, + Time: 81.8, + Weight: 0.000009, + }, + { + ID: 820, + Time: 81.9, + Weight: 0.000009, + }, + { + ID: 821, + Time: 82, + Weight: 0.000009, + }, + { + ID: 822, + Time: 82.1, + Weight: 0.000009, + }, + { + ID: 823, + Time: 82.2, + Weight: 0.000008, + }, + { + ID: 824, + Time: 82.3, + Weight: 0.000008, + }, + { + ID: 825, + Time: 82.4, + Weight: 0.000008, + }, + { + ID: 826, + Time: 82.5, + Weight: 0.000008, + }, + { + ID: 827, + Time: 82.6, + Weight: 0.000008, + }, + { + ID: 828, + Time: 82.7, + Weight: 0.000008, + }, + { + ID: 829, + Time: 82.8, + Weight: 0.000008, + }, + { + ID: 830, + Time: 82.9, + Weight: 0.000008, + }, + { + ID: 831, + Time: 83, + Weight: 0.000008, + }, + { + ID: 832, + Time: 83.1, + Weight: 0.000008, + }, + { + ID: 833, + Time: 83.2, + Weight: 0.000008, + }, + { + ID: 834, + Time: 83.3, + Weight: 0.000008, + }, + { + ID: 835, + Time: 83.4, + Weight: 0.000008, + }, + { + ID: 836, + Time: 83.5, + Weight: 0.000008, + }, + { + ID: 837, + Time: 83.6, + Weight: 0.000008, + }, + { + ID: 838, + Time: 83.7, + Weight: 0.000007, + }, + { + ID: 839, + Time: 83.8, + Weight: 0.000007, + }, + { + ID: 840, + Time: 83.9, + Weight: 0.000007, + }, + { + ID: 841, + Time: 84, + Weight: 0.000007, + }, + { + ID: 842, + Time: 84.1, + Weight: 0.000007, + }, + { + ID: 843, + Time: 84.2, + Weight: 0.000007, + }, + { + ID: 844, + Time: 84.3, + Weight: 0.000007, + }, + { + ID: 845, + Time: 84.4, + Weight: 0.000007, + }, + { + ID: 846, + Time: 84.5, + Weight: 0.000007, + }, + { + ID: 847, + Time: 84.6, + Weight: 0.000007, + }, + { + ID: 848, + Time: 84.7, + Weight: 0.000007, + }, + { + ID: 849, + Time: 84.8, + Weight: 0.000007, + }, + { + ID: 850, + Time: 84.9, + Weight: 0.000007, + }, + { + ID: 851, + Time: 85, + Weight: 0.000007, + }, + { + ID: 852, + Time: 85.1, + Weight: 0.000007, + }, + { + ID: 853, + Time: 85.2, + Weight: 0.000007, + }, + { + ID: 854, + Time: 85.3, + Weight: 0.000007, + }, + { + ID: 855, + Time: 85.4, + Weight: 0.000006, + }, + { + ID: 856, + Time: 85.5, + Weight: 0.000006, + }, + { + ID: 857, + Time: 85.6, + Weight: 0.000006, + }, + { + ID: 858, + Time: 85.7, + Weight: 0.000006, + }, + { + ID: 859, + Time: 85.8, + Weight: 0.000006, + }, + { + ID: 860, + Time: 85.9, + Weight: 0.000006, + }, + { + ID: 861, + Time: 86, + Weight: 0.000006, + }, + { + ID: 862, + Time: 86.1, + Weight: 0.000006, + }, + { + ID: 863, + Time: 86.2, + Weight: 0.000006, + }, + { + ID: 864, + Time: 86.3, + Weight: 0.000006, + }, + { + ID: 865, + Time: 86.4, + Weight: 0.000006, + }, + { + ID: 866, + Time: 86.5, + Weight: 0.000006, + }, + { + ID: 867, + Time: 86.6, + Weight: 0.000006, + }, + { + ID: 868, + Time: 86.7, + Weight: 0.000006, + }, + { + ID: 869, + Time: 86.8, + Weight: 0.000006, + }, + { + ID: 870, + Time: 86.9, + Weight: 0.000006, + }, + { + ID: 871, + Time: 87, + Weight: 0.000006, + }, + { + ID: 872, + Time: 87.1, + Weight: 0.000006, + }, + { + ID: 873, + Time: 87.2, + Weight: 0.000006, + }, + { + ID: 874, + Time: 87.3, + Weight: 0.000006, + }, + { + ID: 875, + Time: 87.4, + Weight: 0.000005, + }, + { + ID: 876, + Time: 87.5, + Weight: 0.000005, + }, + { + ID: 877, + Time: 87.6, + Weight: 0.000005, + }, + { + ID: 878, + Time: 87.7, + Weight: 0.000005, + }, + { + ID: 879, + Time: 87.8, + Weight: 0.000005, + }, + { + ID: 880, + Time: 87.9, + Weight: 0.000005, + }, + { + ID: 881, + Time: 88, + Weight: 0.000005, + }, + { + ID: 882, + Time: 88.1, + Weight: 0.000005, + }, + { + ID: 883, + Time: 88.2, + Weight: 0.000005, + }, + { + ID: 884, + Time: 88.3, + Weight: 0.000005, + }, + { + ID: 885, + Time: 88.4, + Weight: 0.000005, + }, + { + ID: 886, + Time: 88.5, + Weight: 0.000005, + }, + { + ID: 887, + Time: 88.6, + Weight: 0.000005, + }, + { + ID: 888, + Time: 88.7, + Weight: 0.000005, + }, + { + ID: 889, + Time: 88.8, + Weight: 0.000005, + }, + { + ID: 890, + Time: 88.9, + Weight: 0.000005, + }, + { + ID: 891, + Time: 89, + Weight: 0.000005, + }, + { + ID: 892, + Time: 89.1, + Weight: 0.000005, + }, + { + ID: 893, + Time: 89.2, + Weight: 0.000005, + }, + { + ID: 894, + Time: 89.3, + Weight: 0.000005, + }, + { + ID: 895, + Time: 89.4, + Weight: 0.000005, + }, + { + ID: 896, + Time: 89.5, + Weight: 0.000005, + }, + { + ID: 897, + Time: 89.6, + Weight: 0.000005, + }, + { + ID: 898, + Time: 89.7, + Weight: 0.000005, + }, + { + ID: 899, + Time: 89.8, + Weight: 0.000004, + }, + { + ID: 900, + Time: 89.9, + Weight: 0.000004, + }, + { + ID: 901, + Time: 90, + Weight: 0.000004, + }, + { + ID: 902, + Time: 90.1, + Weight: 0.000004, + }, + { + ID: 903, + Time: 90.2, + Weight: 0.000004, + }, + { + ID: 904, + Time: 90.3, + Weight: 0.000004, + }, + { + ID: 905, + Time: 90.4, + Weight: 0.000004, + }, + { + ID: 906, + Time: 90.5, + Weight: 0.000004, + }, + { + ID: 907, + Time: 90.6, + Weight: 0.000004, + }, + { + ID: 908, + Time: 90.7, + Weight: 0.000004, + }, + { + ID: 909, + Time: 90.8, + Weight: 0.000004, + }, + { + ID: 910, + Time: 90.9, + Weight: 0.000004, + }, + { + ID: 911, + Time: 91, + Weight: 0.000004, + }, + { + ID: 912, + Time: 91.1, + Weight: 0.000004, + }, + { + ID: 913, + Time: 91.2, + Weight: 0.000004, + }, + { + ID: 914, + Time: 91.3, + Weight: 0.000004, + }, + { + ID: 915, + Time: 91.4, + Weight: 0.000004, + }, + { + ID: 916, + Time: 91.5, + Weight: 0.000004, + }, + { + ID: 917, + Time: 91.6, + Weight: 0.000004, + }, + { + ID: 918, + Time: 91.7, + Weight: 0.000004, + }, + { + ID: 919, + Time: 91.8, + Weight: 0.000004, + }, + { + ID: 920, + Time: 91.9, + Weight: 0.000004, + }, + { + ID: 921, + Time: 92, + Weight: 0.000004, + }, + { + ID: 922, + Time: 92.1, + Weight: 0.000004, + }, + { + ID: 923, + Time: 92.2, + Weight: 0.000004, + }, + { + ID: 924, + Time: 92.3, + Weight: 0.000004, + }, + { + ID: 925, + Time: 92.4, + Weight: 0.000004, + }, + { + ID: 926, + Time: 92.5, + Weight: 0.000004, + }, + { + ID: 927, + Time: 92.6, + Weight: 0.000004, + }, + { + ID: 928, + Time: 92.7, + Weight: 0.000004, + }, + { + ID: 929, + Time: 92.8, + Weight: 0.000003, + }, + { + ID: 930, + Time: 92.9, + Weight: 0.000003, + }, + { + ID: 931, + Time: 93, + Weight: 0.000003, + }, + { + ID: 932, + Time: 93.1, + Weight: 0.000003, + }, + { + ID: 933, + Time: 93.2, + Weight: 0.000003, + }, + { + ID: 934, + Time: 93.3, + Weight: 0.000003, + }, + { + ID: 935, + Time: 93.4, + Weight: 0.000003, + }, + { + ID: 936, + Time: 93.5, + Weight: 0.000003, + }, + { + ID: 937, + Time: 93.6, + Weight: 0.000003, + }, + { + ID: 938, + Time: 93.7, + Weight: 0.000003, + }, + { + ID: 939, + Time: 93.8, + Weight: 0.000003, + }, + { + ID: 940, + Time: 93.9, + Weight: 0.000003, + }, + { + ID: 941, + Time: 94, + Weight: 0.000003, + }, + { + ID: 942, + Time: 94.1, + Weight: 0.000003, + }, + { + ID: 943, + Time: 94.2, + Weight: 0.000003, + }, + { + ID: 944, + Time: 94.3, + Weight: 0.000003, + }, + { + ID: 945, + Time: 94.4, + Weight: 0.000003, + }, + { + ID: 946, + Time: 94.5, + Weight: 0.000003, + }, + { + ID: 947, + Time: 94.6, + Weight: 0.000003, + }, + { + ID: 948, + Time: 94.7, + Weight: 0.000003, + }, + { + ID: 949, + Time: 94.8, + Weight: 0.000003, + }, + { + ID: 950, + Time: 94.9, + Weight: 0.000003, + }, + { + ID: 951, + Time: 95, + Weight: 0.000003, + }, + { + ID: 952, + Time: 95.1, + Weight: 0.000003, + }, + { + ID: 953, + Time: 95.2, + Weight: 0.000003, + }, + { + ID: 954, + Time: 95.3, + Weight: 0.000003, + }, + { + ID: 955, + Time: 95.4, + Weight: 0.000003, + }, + { + ID: 956, + Time: 95.5, + Weight: 0.000003, + }, + { + ID: 957, + Time: 95.6, + Weight: 0.000003, + }, + { + ID: 958, + Time: 95.7, + Weight: 0.000003, + }, + { + ID: 959, + Time: 95.8, + Weight: 0.000003, + }, + { + ID: 960, + Time: 95.9, + Weight: 0.000003, + }, + { + ID: 961, + Time: 96, + Weight: 0.000003, + }, + { + ID: 962, + Time: 96.1, + Weight: 0.000003, + }, + { + ID: 963, + Time: 96.2, + Weight: 0.000003, + }, + { + ID: 964, + Time: 96.3, + Weight: 0.000003, + }, + { + ID: 965, + Time: 96.4, + Weight: 0.000003, + }, + { + ID: 966, + Time: 96.5, + Weight: 0.000003, + }, + { + ID: 967, + Time: 96.6, + Weight: 0.000003, + }, + { + ID: 968, + Time: 96.7, + Weight: 0.000003, + }, + { + ID: 969, + Time: 96.8, + Weight: 0.000002, + }, + { + ID: 970, + Time: 96.9, + Weight: 0.000002, + }, + { + ID: 971, + Time: 97, + Weight: 0.000002, + }, + { + ID: 972, + Time: 97.1, + Weight: 0.000002, + }, + { + ID: 973, + Time: 97.2, + Weight: 0.000002, + }, + { + ID: 974, + Time: 97.3, + Weight: 0.000002, + }, + { + ID: 975, + Time: 97.4, + Weight: 0.000002, + }, + { + ID: 976, + Time: 97.5, + Weight: 0.000002, + }, + { + ID: 977, + Time: 97.6, + Weight: 0.000002, + }, + { + ID: 978, + Time: 97.7, + Weight: 0.000002, + }, + { + ID: 979, + Time: 97.8, + Weight: 0.000002, + }, + { + ID: 980, + Time: 97.9, + Weight: 0.000002, + }, + { + ID: 981, + Time: 98, + Weight: 0.000002, + }, + { + ID: 982, + Time: 98.1, + Weight: 0.000002, + }, + { + ID: 983, + Time: 98.2, + Weight: 0.000002, + }, + { + ID: 984, + Time: 98.3, + Weight: 0.000002, + }, + { + ID: 985, + Time: 98.4, + Weight: 0.000002, + }, + { + ID: 986, + Time: 98.5, + Weight: 0.000002, + }, + { + ID: 987, + Time: 98.6, + Weight: 0.000002, + }, + { + ID: 988, + Time: 98.7, + Weight: 0.000002, + }, + { + ID: 989, + Time: 98.8, + Weight: 0.000002, + }, + { + ID: 990, + Time: 98.9, + Weight: 0.000002, + }, + { + ID: 991, + Time: 99, + Weight: 0.000002, + }, + { + ID: 992, + Time: 99.1, + Weight: 0.000002, + }, + { + ID: 993, + Time: 99.2, + Weight: 0.000002, + }, + { + ID: 994, + Time: 99.3, + Weight: 0.000002, + }, + { + ID: 995, + Time: 99.4, + Weight: 0.000002, + }, + { + ID: 996, + Time: 99.5, + Weight: 0.000002, + }, + { + ID: 997, + Time: 99.6, + Weight: 0.000002, + }, + { + ID: 998, + Time: 99.7, + Weight: 0.000002, + }, + { + ID: 999, + Time: 99.8, + Weight: 0.000002, + }, + { + ID: 1000, + Time: 99.9, + Weight: 0.000002, + }, + { + ID: 1001, + Time: 100, + Weight: 0.00023, + }, + } + + TestReelBaseSpinRange = [][]int64{ + {3, 3, 3}, + } + + TestReelBaseSpinReel = [][]int64{ + {1, 1, 1}, + {1, 1, 1}, + {1, 1, 1}, + } + + TestReelBaseSpinWeight = [][]float64{ + {1, 1, 1}, + {1, 1, 1}, + {1, 1, 1}, + } + + TestSymbol = map[int64]*structs.TestSymbol{ + 1: { + ID: 1, + Name: "xx", + IsWild: false, + Group: []int64{1}, + PayRate: []int64{0, 0, 0}, + ClientOrder: 1, + ClientDsc: "", + }, + } + + TestSymbolBetRatio = []*structs.TestSymbolBetRatio{ + { + BetRatio: 1, + }, + } + +} diff --git a/gamesrv/slotspkg/internal/exported/excel2go/base/var.go b/gamesrv/slotspkg/internal/exported/excel2go/base/var.go new file mode 100644 index 0000000..b4d8915 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/base/var.go @@ -0,0 +1,265 @@ +// +package base + +import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + +var ( + CashManiaBetBetChangeList = map[int64]*structs.CashManiaBetBetChangeList{} + CashManiaBetBetLevel = map[int64]*structs.CashManiaBetBetLevel{} + CashManiaBetBetLine = map[int64]*structs.CashManiaBetBetLine{} + CashManiaBetBetSize = map[int64]*structs.CashManiaBetBetSize{} + CashManiaBetFirstBet = map[int64]*structs.CashManiaBetFirstBet{} + CashManiaFormation = []*structs.CashManiaFormation{} + CashManiaMapRTPMode = map[int64]*structs.CashManiaMapRTPMode{} + CashManiaMidItemInfo = map[int64]*structs.CashManiaMidItemInfo{} + CashManiaOthers = []*structs.CashManiaOthers{} + CashManiaRandomItemWeight = []*structs.CashManiaRandomItemWeight{} + CashManiaRandomMidWeight = []*structs.CashManiaRandomMidWeight{} + CashManiaReelBaseSpinRange = [][]int64{} + CashManiaReelBaseSpinReel = [][]int64{} + CashManiaReelBaseSpinWeight = [][]float64{} + CashManiaSymbolBetRatio = []*structs.CashManiaSymbolBetRatio{} + CashManiaSymbol = map[int64]*structs.CashManiaSymbol{} + CashManiaWinItemWeight = []*structs.CashManiaWinItemWeight{} + CashManiaWinMidWeight = []*structs.CashManiaWinMidWeight{} + FortuneDragonBaseMultiplier = []*structs.FortuneDragonBaseMultiplier{} + FortuneDragonBetBetChangeList = map[int64]*structs.FortuneDragonBetBetChangeList{} + FortuneDragonBetBetLevel = map[int64]*structs.FortuneDragonBetBetLevel{} + FortuneDragonBetBetLine = map[int64]*structs.FortuneDragonBetBetLine{} + FortuneDragonBetBetSize = map[int64]*structs.FortuneDragonBetBetSize{} + FortuneDragonBetFirstBet = map[int64]*structs.FortuneDragonBetFirstBet{} + FortuneDragonFormation = []*structs.FortuneDragonFormation{} + FortuneDragonFreeMultiplier = []*structs.FortuneDragonFreeMultiplier{} + FortuneDragonFreeMultiplierCount = []*structs.FortuneDragonFreeMultiplierCount{} + FortuneDragonMapRTPMode = map[int64]*structs.FortuneDragonMapRTPMode{} + FortuneDragonOthers = []*structs.FortuneDragonOthers{} + FortuneDragonReelBaseSpinRange = [][]int64{} + FortuneDragonReelBaseSpinReel = [][]int64{} + FortuneDragonReelBaseSpinWeight = [][]float64{} + FortuneDragonReelFreeSpinRange = [][]int64{} + FortuneDragonReelFreeSpinReel = [][]int64{} + FortuneDragonReelFreeSpinWeight = [][]float64{} + FortuneDragonReelSureWinBaseSpinRange = [][]int64{} + FortuneDragonReelSureWinBaseSpinReel = [][]int64{} + FortuneDragonReelSureWinBaseSpinWeight = [][]float64{} + FortuneDragonReelSureWinFreeSpinRange = [][]int64{} + FortuneDragonReelSureWinFreeSpinReel = [][]int64{} + FortuneDragonReelSureWinFreeSpinWeight = [][]float64{} + FortuneDragonSymbolBetRatio = []*structs.FortuneDragonSymbolBetRatio{} + FortuneDragonSymbol = map[int64]*structs.FortuneDragonSymbol{} + FortuneMouseBetBetChangeList = map[int64]*structs.FortuneMouseBetBetChangeList{} + FortuneMouseBetBetLevel = map[int64]*structs.FortuneMouseBetBetLevel{} + FortuneMouseBetBetLine = map[int64]*structs.FortuneMouseBetBetLine{} + FortuneMouseBetBetSize = map[int64]*structs.FortuneMouseBetBetSize{} + FortuneMouseBetFirstBet = map[int64]*structs.FortuneMouseBetFirstBet{} + FortuneMouseFormation = []*structs.FortuneMouseFormation{} + FortuneMouseMapRTPMode = map[int64]*structs.FortuneMouseMapRTPMode{} + FortuneMouseOthers = []*structs.FortuneMouseOthers{} + FortuneMouseReelBaseSpinRange = [][]int64{} + FortuneMouseReelBaseSpinReel = [][]int64{} + FortuneMouseReelBaseSpinWeight = [][]float64{} + FortuneMouseReelReSpinRange = [][]int64{} + FortuneMouseReelReSpinReel = [][]int64{} + FortuneMouseReelReSpinWeight = [][]float64{} + FortuneMouseSuperStackWeight = []*structs.FortuneMouseSuperStackWeight{} + FortuneMouseSymbolBetRatio = []*structs.FortuneMouseSymbolBetRatio{} + FortuneMouseSymbol = map[int64]*structs.FortuneMouseSymbol{} + FortuneOxBetBetChangeList = map[int64]*structs.FortuneOxBetBetChangeList{} + FortuneOxBetBetLevel = map[int64]*structs.FortuneOxBetBetLevel{} + FortuneOxBetBetLine = map[int64]*structs.FortuneOxBetBetLine{} + FortuneOxBetBetSize = map[int64]*structs.FortuneOxBetBetSize{} + FortuneOxBetFirstBet = map[int64]*structs.FortuneOxBetFirstBet{} + FortuneOxFormation = []*structs.FortuneOxFormation{} + FortuneOxMapRTPMode = map[int64]*structs.FortuneOxMapRTPMode{} + FortuneOxOthers = []*structs.FortuneOxOthers{} + FortuneOxReelBaseSpinRange = [][]int64{} + FortuneOxReelBaseSpinReel = [][]int64{} + FortuneOxReelBaseSpinWeight = [][]float64{} + FortuneOxReelReSpinRange = [][]int64{} + FortuneOxReelReSpinReel = [][]int64{} + FortuneOxReelReSpinWeight = [][]float64{} + FortuneOxSuperStack1Weight = []*structs.FortuneOxSuperStack1Weight{} + FortuneOxSuperStack2Weight = []*structs.FortuneOxSuperStack2Weight{} + FortuneOxSymbolBetRatio = []*structs.FortuneOxSymbolBetRatio{} + FortuneOxSymbol = map[int64]*structs.FortuneOxSymbol{} + FortuneRabbitBetBetChangeList = map[int64]*structs.FortuneRabbitBetBetChangeList{} + FortuneRabbitBetBetLevel = map[int64]*structs.FortuneRabbitBetBetLevel{} + FortuneRabbitBetBetLine = map[int64]*structs.FortuneRabbitBetBetLine{} + FortuneRabbitBetBetSize = map[int64]*structs.FortuneRabbitBetBetSize{} + FortuneRabbitBetFirstBet = map[int64]*structs.FortuneRabbitBetFirstBet{} + FortuneRabbitCashPrizeWeight = []*structs.FortuneRabbitCashPrizeWeight{} + FortuneRabbitForceCashCountWeight = []*structs.FortuneRabbitForceCashCountWeight{} + FortuneRabbitFormation = []*structs.FortuneRabbitFormation{} + FortuneRabbitMapRTPMode = map[int64]*structs.FortuneRabbitMapRTPMode{} + FortuneRabbitOthers = []*structs.FortuneRabbitOthers{} + FortuneRabbitOthersRTP120 = []*structs.FortuneRabbitOthersRTP120{} + FortuneRabbitOthersRTP80 = []*structs.FortuneRabbitOthersRTP80{} + FortuneRabbitReelBaseSpinRange = [][]int64{} + FortuneRabbitReelBaseSpinReel = [][]int64{} + FortuneRabbitReelBaseSpinWeight = [][]float64{} + FortuneRabbitReelFreeSpinRange = [][]int64{} + FortuneRabbitReelFreeSpinReel = [][]int64{} + FortuneRabbitReelFreeSpinWeight = [][]float64{} + FortuneRabbitSymbolBetRatio = []*structs.FortuneRabbitSymbolBetRatio{} + FortuneRabbitSymbol = map[int64]*structs.FortuneRabbitSymbol{} + FortuneTigerBetBetChangeList = map[int64]*structs.FortuneTigerBetBetChangeList{} + FortuneTigerBetBetLevel = map[int64]*structs.FortuneTigerBetBetLevel{} + FortuneTigerBetBetLine = map[int64]*structs.FortuneTigerBetBetLine{} + FortuneTigerBetBetSize = map[int64]*structs.FortuneTigerBetBetSize{} + FortuneTigerBetFirstBet = map[int64]*structs.FortuneTigerBetFirstBet{} + FortuneTigerFormation = []*structs.FortuneTigerFormation{} + FortuneTigerMapRTPMode = map[int64]*structs.FortuneTigerMapRTPMode{} + FortuneTigerOthers = []*structs.FortuneTigerOthers{} + FortuneTigerReelBaseSpinRange = [][]int64{} + FortuneTigerReelBaseSpinReel = [][]int64{} + FortuneTigerReelBaseSpinWeight = [][]float64{} + FortuneTigerReelReSpinRange = [][]int64{} + FortuneTigerReelReSpinReel = [][]int64{} + FortuneTigerReelReSpinWeight = [][]float64{} + FortuneTigerSuperStackWeight = []*structs.FortuneTigerSuperStackWeight{} + FortuneTigerSymbolBetRatio = []*structs.FortuneTigerSymbolBetRatio{} + FortuneTigerSymbol = map[int64]*structs.FortuneTigerSymbol{} + GateofOlympusBetBetChangeList = map[int64]*structs.GateofOlympusBetBetChangeList{} + GateofOlympusBetBetLevel = map[int64]*structs.GateofOlympusBetBetLevel{} + GateofOlympusBetBetLine = map[int64]*structs.GateofOlympusBetBetLine{} + GateofOlympusBetBetSize = map[int64]*structs.GateofOlympusBetBetSize{} + GateofOlympusBetFirstBet = map[int64]*structs.GateofOlympusBetFirstBet{} + GateofOlympusFormation = []*structs.GateofOlympusFormation{} + GateofOlympusMapRTPMode = map[int64]*structs.GateofOlympusMapRTPMode{} + GateofOlympusMultiplier = []*structs.GateofOlympusMultiplier{} + GateofOlympusMultiplierKeyID = map[int64]*structs.GateofOlympusMultiplierKeyID{} + GateofOlympusReelBaseSpin1Range = [][]int64{} + GateofOlympusReelBaseSpin1Reel = [][]int64{} + GateofOlympusReelBaseSpin1Weight = [][]float64{} + GateofOlympusReelBaseSpin2Range = [][]int64{} + GateofOlympusReelBaseSpin2Reel = [][]int64{} + GateofOlympusReelBaseSpin2Weight = [][]float64{} + GateofOlympusReelBaseSpin3Range = [][]int64{} + GateofOlympusReelBaseSpin3Reel = [][]int64{} + GateofOlympusReelBaseSpin3Weight = [][]float64{} + GateofOlympusReelBaseSpin7Range = [][]int64{} + GateofOlympusReelBaseSpin7Reel = [][]int64{} + GateofOlympusReelBaseSpin7Weight = [][]float64{} + GateofOlympusReelBaseSpin8Range = [][]int64{} + GateofOlympusReelBaseSpin8Reel = [][]int64{} + GateofOlympusReelBaseSpin8Weight = [][]float64{} + GateofOlympusReelBaseSpinRange = [][]int64{} + GateofOlympusReelBaseSpinReel = [][]int64{} + GateofOlympusReelBaseSpinWeight = [][]float64{} + GateofOlympusReelChoose = []*structs.GateofOlympusReelChoose{} + GateofOlympusReelFreeSpin4Range = [][]int64{} + GateofOlympusReelFreeSpin4Reel = [][]int64{} + GateofOlympusReelFreeSpin4Weight = [][]float64{} + GateofOlympusReelFreeSpin5Range = [][]int64{} + GateofOlympusReelFreeSpin5Reel = [][]int64{} + GateofOlympusReelFreeSpin5Weight = [][]float64{} + GateofOlympusReelFreeSpinRange = [][]int64{} + GateofOlympusReelFreeSpinReel = [][]int64{} + GateofOlympusReelFreeSpinWeight = [][]float64{} + GateofOlympusScatter = map[int64]*structs.GateofOlympusScatter{} + GateofOlympusSymbolBetRatio = []*structs.GateofOlympusSymbolBetRatio{} + GateofOlympusSymbol = map[int64]*structs.GateofOlympusSymbol{} + MatrixFeaturesForm15X1TypeA = []*structs.MatrixFeaturesForm15X1TypeA{} + MatrixFeaturesForm19X1TypeA = []*structs.MatrixFeaturesForm19X1TypeA{} + MatrixFeaturesForm20X1TypeA = []*structs.MatrixFeaturesForm20X1TypeA{} + MatrixFeaturesForm25X1TypeA = []*structs.MatrixFeaturesForm25X1TypeA{} + MatrixFeaturesForm30X1TypeA = []*structs.MatrixFeaturesForm30X1TypeA{} + MatrixFeaturesForm35X1TypeA = []*structs.MatrixFeaturesForm35X1TypeA{} + MatrixFeaturesForm40X1 = []*structs.MatrixFeaturesForm40X1{} + MatrixFeaturesForm40X1TypeA = []*structs.MatrixFeaturesForm40X1TypeA{} + MatrixFeaturesForm7X1TypeA = []*structs.MatrixFeaturesForm7X1TypeA{} + MatrixLine100Form12X5TypeA = []*structs.MatrixLine100Form12X5TypeA{} + MatrixLine100Form6X5TypeA = []*structs.MatrixLine100Form6X5TypeA{} + MatrixLine10Form343TypeA = []*structs.MatrixLine10Form343TypeA{} + MatrixLine10Form3X5TypeA = []*structs.MatrixLine10Form3X5TypeA{} + MatrixLine1Form3X3TypeA = []*structs.MatrixLine1Form3X3TypeA{} + MatrixLine1Form3X3TypeB = []*structs.MatrixLine1Form3X3TypeB{} + MatrixLine1Form5X5TypeA = []*structs.MatrixLine1Form5X5TypeA{} + MatrixLine20Form3X5TypeA = []*structs.MatrixLine20Form3X5TypeA{} + MatrixLine25Form36666TypeA = []*structs.MatrixLine25Form36666TypeA{} + MatrixLine25Form3X5TypeA = []*structs.MatrixLine25Form3X5TypeA{} + MatrixLine25Form3X5TypeB = []*structs.MatrixLine25Form3X5TypeB{} + MatrixLine25Form3X5TypeC = []*structs.MatrixLine25Form3X5TypeC{} + MatrixLine25Form3X5TypeD = []*structs.MatrixLine25Form3X5TypeD{} + MatrixLine25Form3X5TypeE = []*structs.MatrixLine25Form3X5TypeE{} + MatrixLine30Form3X5TypeA = []*structs.MatrixLine30Form3X5TypeA{} + MatrixLine30Form3X5TypeB = []*structs.MatrixLine30Form3X5TypeB{} + MatrixLine30Form3X5TypeC = []*structs.MatrixLine30Form3X5TypeC{} + MatrixLine30Form3X5TypeD = []*structs.MatrixLine30Form3X5TypeD{} + MatrixLine30Form3X5TypeE = []*structs.MatrixLine30Form3X5TypeE{} + MatrixLine30Form3X6TypeA = []*structs.MatrixLine30Form3X6TypeA{} + MatrixLine30Form4X5TypeA = []*structs.MatrixLine30Form4X5TypeA{} + MatrixLine30Form4X5TypeB = []*structs.MatrixLine30Form4X5TypeB{} + MatrixLine3Form3X3TypeA = []*structs.MatrixLine3Form3X3TypeA{} + MatrixLine40Form34543TypeA = []*structs.MatrixLine40Form34543TypeA{} + MatrixLine40Form3X5TypeA = []*structs.MatrixLine40Form3X5TypeA{} + MatrixLine40Form3X5TypeB = []*structs.MatrixLine40Form3X5TypeB{} + MatrixLine40Form3X5TypeC = []*structs.MatrixLine40Form3X5TypeC{} + MatrixLine40Form3X5TypeD = []*structs.MatrixLine40Form3X5TypeD{} + MatrixLine40Form4X5TypeA = []*structs.MatrixLine40Form4X5TypeA{} + MatrixLine40Form4X5TypeB = []*structs.MatrixLine40Form4X5TypeB{} + MatrixLine40Form4X5TypeC = []*structs.MatrixLine40Form4X5TypeC{} + MatrixLine40Form4X6TypeA = []*structs.MatrixLine40Form4X6TypeA{} + MatrixLine50Form3X5TypeA = []*structs.MatrixLine50Form3X5TypeA{} + MatrixLine50Form3X5TypeB = []*structs.MatrixLine50Form3X5TypeB{} + MatrixLine50Form3X5TypeC = []*structs.MatrixLine50Form3X5TypeC{} + MatrixLine50Form3X5TypeD = []*structs.MatrixLine50Form3X5TypeD{} + MatrixLine50Form3X5TypeE = []*structs.MatrixLine50Form3X5TypeE{} + MatrixLine50Form3X5TypeF = []*structs.MatrixLine50Form3X5TypeF{} + MatrixLine50Form3X5TypeG = []*structs.MatrixLine50Form3X5TypeG{} + MatrixLine50Form3X5TypeH = []*structs.MatrixLine50Form3X5TypeH{} + MatrixLine50Form45454TypeA = []*structs.MatrixLine50Form45454TypeA{} + MatrixLine50Form4X5TypeA = []*structs.MatrixLine50Form4X5TypeA{} + MatrixLine50Form4X5TypeB = []*structs.MatrixLine50Form4X5TypeB{} + MatrixLine50Form4X5TypeC = []*structs.MatrixLine50Form4X5TypeC{} + MatrixLine50Form4X5TypeD = []*structs.MatrixLine50Form4X5TypeD{} + MatrixLine50Form4X5TypeE = []*structs.MatrixLine50Form4X5TypeE{} + MatrixLine50Form4X5TypeF = []*structs.MatrixLine50Form4X5TypeF{} + MatrixLine50Form4X6TypeA = []*structs.MatrixLine50Form4X6TypeA{} + MatrixLine50Form5X5TypeA = []*structs.MatrixLine50Form5X5TypeA{} + MatrixLine50Form5X5TypeB = []*structs.MatrixLine50Form5X5TypeB{} + MatrixLine50Form5X5TypeC = []*structs.MatrixLine50Form5X5TypeC{} + MatrixLine50Form6X5TypeA = []*structs.MatrixLine50Form6X5TypeA{} + MatrixLine5Form3X3TypeA = []*structs.MatrixLine5Form3X3TypeA{} + MatrixLine5Form3X3TypeB = []*structs.MatrixLine5Form3X3TypeB{} + MatrixLine60Form33633TypeA = []*structs.MatrixLine60Form33633TypeA{} + MatrixLine60Form8X5TypeA = []*structs.MatrixLine60Form8X5TypeA{} + MatrixLine65Form6X5TypeA = []*structs.MatrixLine65Form6X5TypeA{} + MatrixLine70Form9X5TypeA = []*structs.MatrixLine70Form9X5TypeA{} + MatrixLine75Form5X6TypeA = []*structs.MatrixLine75Form5X6TypeA{} + MatrixLine75Form6X5TypeA = []*structs.MatrixLine75Form6X5TypeA{} + MatrixLine80Form10X5TypeA = []*structs.MatrixLine80Form10X5TypeA{} + MatrixLine80Form3X5TypeA = []*structs.MatrixLine80Form3X5TypeA{} + MatrixLine80Form4X6TypeA = []*structs.MatrixLine80Form4X6TypeA{} + MatrixLine80Form7X5TypeA = []*structs.MatrixLine80Form7X5TypeA{} + MatrixLine90Form11X5TypeA = []*structs.MatrixLine90Form11X5TypeA{} + MatrixLine95Form8X5TypeA = []*structs.MatrixLine95Form8X5TypeA{} + MatrixMatchForm7X7TypeA = []*structs.MatrixMatchForm7X7TypeA{} + MatrixSameForm5X6TypeA = []*structs.MatrixSameForm5X6TypeA{} + MatrixSameForm5X6TypeB = []*structs.MatrixSameForm5X6TypeB{} + MatrixWaysForm333331 = []*structs.MatrixWaysForm333331{} + MatrixWaysForm33555 = []*structs.MatrixWaysForm33555{} + MatrixWaysForm344444 = []*structs.MatrixWaysForm344444{} + MatrixWaysForm3X5TypeA = []*structs.MatrixWaysForm3X5TypeA{} + MatrixWaysForm44668 = []*structs.MatrixWaysForm44668{} + MatrixWaysForm4X5TypeA = []*structs.MatrixWaysForm4X5TypeA{} + MatrixWaysForm4X5TypeB = []*structs.MatrixWaysForm4X5TypeB{} + OptGroup = []*structs.OptGroup{} + PrizeModelPrizeModelTypeA = map[int64]*structs.PrizeModelPrizeModelTypeA{} + PrizeModelPrizeModelTypeB = map[int64]*structs.PrizeModelPrizeModelTypeB{} + SimulatorFSMultiLevel = []*structs.SimulatorFSMultiLevel{} + SimulatorMultiLevel = []*structs.SimulatorMultiLevel{} + TestBetBetChangeList = map[int64]*structs.TestBetBetChangeList{} + TestBetBetLevel = map[int64]*structs.TestBetBetLevel{} + TestBetBetLine = map[int64]*structs.TestBetBetLine{} + TestBetBetSize = map[int64]*structs.TestBetBetSize{} + TestBetFirstBet = map[int64]*structs.TestBetFirstBet{} + TestFormation = []*structs.TestFormation{} + TestMapRTPMode = map[int64]*structs.TestMapRTPMode{} + TestRandomWeight = []*structs.TestRandomWeight{} + TestReelBaseSpinRange = [][]int64{} + TestReelBaseSpinReel = [][]int64{} + TestReelBaseSpinWeight = [][]float64{} + TestSymbolBetRatio = []*structs.TestSymbolBetRatio{} + TestSymbol = map[int64]*structs.TestSymbol{} +) diff --git a/gamesrv/slotspkg/internal/exported/excel2go/storage/storage.go b/gamesrv/slotspkg/internal/exported/excel2go/storage/storage.go new file mode 100644 index 0000000..f3b919a --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/storage/storage.go @@ -0,0 +1,723 @@ +// +package storage + +import ( + "encoding/json" + "qstar_server/internal/exported/excel2go/base" + "strings" +) + +var Storage = make(map[string]map[string]map[string]interface{}) +var OriginStorage = make(map[string]map[string]map[string]interface{}) + +var Categories = []string{ + "Base", + "Bet365", + "Bet365_A", + "Bet365_B", + "Bet365_C", + "Bet365_D", + "Bet365_E", + "Bet365_F", + "Bet365_G", + "Blaze", + "Blaze_A", + "Blaze_B", + "Blaze_C", + "Blaze_D", + "Blaze_E", + "Blaze_F", + "Blaze_G", + "Brabet", + "Brabet_A", + "Brabet_B", + "Brabet_C", + "Brabet_D", + "Brabet_E", + "Brabet_F", + "Brabet_G", + "Futemax", + "Futemax_A", + "Futemax_B", + "Futemax_C", + "Futemax_D", + "Futemax_E", + "Futemax_F", + "Futemax_G", + "Pixbet", + "Pixbet_A", + "Pixbet_B", + "Pixbet_C", + "Pixbet_D", + "Pixbet_E", + "Pixbet_F", + "Pixbet_G", + "Stake", + "Stake_A", + "Stake_B", + "Stake_C", + "Stake_D", + "Stake_E", + "Stake_F", + "Stake_G", +} + +func StoragesLoading(data map[string]string) { + Load(data, "Base.CashMania/Bet.BetChangeList", &base.CashManiaBetBetChangeList) + Load(data, "Base.CashMania/Bet.BetLevel", &base.CashManiaBetBetLevel) + Load(data, "Base.CashMania/Bet.BetLine", &base.CashManiaBetBetLine) + Load(data, "Base.CashMania/Bet.BetSize", &base.CashManiaBetBetSize) + Load(data, "Base.CashMania/Bet.FirstBet", &base.CashManiaBetFirstBet) + Load(data, "Base.CashMania/Formation.Default", &base.CashManiaFormation) + Load(data, "Base.CashMania/Map.RTPMode", &base.CashManiaMapRTPMode) + Load(data, "Base.CashMania/MidItemInfo.Default", &base.CashManiaMidItemInfo) + Load(data, "Base.CashMania/Others.Default", &base.CashManiaOthers) + Load(data, "Base.CashMania/RandomItem.Weight", &base.CashManiaRandomItemWeight) + Load(data, "Base.CashMania/RandomMid.Weight", &base.CashManiaRandomMidWeight) + Load(data, "Base.CashMania/ReelBaseSpin.Range", &base.CashManiaReelBaseSpinRange) + Load(data, "Base.CashMania/ReelBaseSpin.Reel", &base.CashManiaReelBaseSpinReel) + Load(data, "Base.CashMania/ReelBaseSpin.Weight", &base.CashManiaReelBaseSpinWeight) + Load(data, "Base.CashMania/Symbol.BetRatio", &base.CashManiaSymbolBetRatio) + Load(data, "Base.CashMania/Symbol.Default", &base.CashManiaSymbol) + Load(data, "Base.CashMania/WinItem.Weight", &base.CashManiaWinItemWeight) + Load(data, "Base.CashMania/WinMid.Weight", &base.CashManiaWinMidWeight) + Load(data, "Base.FortuneDragon/BaseMultiplier.Default", &base.FortuneDragonBaseMultiplier) + Load(data, "Base.FortuneDragon/Bet.BetChangeList", &base.FortuneDragonBetBetChangeList) + Load(data, "Base.FortuneDragon/Bet.BetLevel", &base.FortuneDragonBetBetLevel) + Load(data, "Base.FortuneDragon/Bet.BetLine", &base.FortuneDragonBetBetLine) + Load(data, "Base.FortuneDragon/Bet.BetSize", &base.FortuneDragonBetBetSize) + Load(data, "Base.FortuneDragon/Bet.FirstBet", &base.FortuneDragonBetFirstBet) + Load(data, "Base.FortuneDragon/Formation.Default", &base.FortuneDragonFormation) + Load(data, "Base.FortuneDragon/FreeMultiplier.Default", &base.FortuneDragonFreeMultiplier) + Load(data, "Base.FortuneDragon/FreeMultiplierCount.Default", &base.FortuneDragonFreeMultiplierCount) + Load(data, "Base.FortuneDragon/Map.RTPMode", &base.FortuneDragonMapRTPMode) + Load(data, "Base.FortuneDragon/Others.Default", &base.FortuneDragonOthers) + Load(data, "Base.FortuneDragon/ReelBaseSpin.Range", &base.FortuneDragonReelBaseSpinRange) + Load(data, "Base.FortuneDragon/ReelBaseSpin.Reel", &base.FortuneDragonReelBaseSpinReel) + Load(data, "Base.FortuneDragon/ReelBaseSpin.Weight", &base.FortuneDragonReelBaseSpinWeight) + Load(data, "Base.FortuneDragon/ReelFreeSpin.Range", &base.FortuneDragonReelFreeSpinRange) + Load(data, "Base.FortuneDragon/ReelFreeSpin.Reel", &base.FortuneDragonReelFreeSpinReel) + Load(data, "Base.FortuneDragon/ReelFreeSpin.Weight", &base.FortuneDragonReelFreeSpinWeight) + Load(data, "Base.FortuneDragon/ReelSureWinBaseSpin.Range", &base.FortuneDragonReelSureWinBaseSpinRange) + Load(data, "Base.FortuneDragon/ReelSureWinBaseSpin.Reel", &base.FortuneDragonReelSureWinBaseSpinReel) + Load(data, "Base.FortuneDragon/ReelSureWinBaseSpin.Weight", &base.FortuneDragonReelSureWinBaseSpinWeight) + Load(data, "Base.FortuneDragon/ReelSureWinFreeSpin.Range", &base.FortuneDragonReelSureWinFreeSpinRange) + Load(data, "Base.FortuneDragon/ReelSureWinFreeSpin.Reel", &base.FortuneDragonReelSureWinFreeSpinReel) + Load(data, "Base.FortuneDragon/ReelSureWinFreeSpin.Weight", &base.FortuneDragonReelSureWinFreeSpinWeight) + Load(data, "Base.FortuneDragon/Symbol.BetRatio", &base.FortuneDragonSymbolBetRatio) + Load(data, "Base.FortuneDragon/Symbol.Default", &base.FortuneDragonSymbol) + Load(data, "Base.FortuneMouse/Bet.BetChangeList", &base.FortuneMouseBetBetChangeList) + Load(data, "Base.FortuneMouse/Bet.BetLevel", &base.FortuneMouseBetBetLevel) + Load(data, "Base.FortuneMouse/Bet.BetLine", &base.FortuneMouseBetBetLine) + Load(data, "Base.FortuneMouse/Bet.BetSize", &base.FortuneMouseBetBetSize) + Load(data, "Base.FortuneMouse/Bet.FirstBet", &base.FortuneMouseBetFirstBet) + Load(data, "Base.FortuneMouse/Formation.Default", &base.FortuneMouseFormation) + Load(data, "Base.FortuneMouse/Map.RTPMode", &base.FortuneMouseMapRTPMode) + Load(data, "Base.FortuneMouse/Others.Default", &base.FortuneMouseOthers) + Load(data, "Base.FortuneMouse/ReelBaseSpin.Range", &base.FortuneMouseReelBaseSpinRange) + Load(data, "Base.FortuneMouse/ReelBaseSpin.Reel", &base.FortuneMouseReelBaseSpinReel) + Load(data, "Base.FortuneMouse/ReelBaseSpin.Weight", &base.FortuneMouseReelBaseSpinWeight) + Load(data, "Base.FortuneMouse/ReelReSpin.Range", &base.FortuneMouseReelReSpinRange) + Load(data, "Base.FortuneMouse/ReelReSpin.Reel", &base.FortuneMouseReelReSpinReel) + Load(data, "Base.FortuneMouse/ReelReSpin.Weight", &base.FortuneMouseReelReSpinWeight) + Load(data, "Base.FortuneMouse/SuperStack.Weight", &base.FortuneMouseSuperStackWeight) + Load(data, "Base.FortuneMouse/Symbol.BetRatio", &base.FortuneMouseSymbolBetRatio) + Load(data, "Base.FortuneMouse/Symbol.Default", &base.FortuneMouseSymbol) + Load(data, "Base.FortuneOx/Bet.BetChangeList", &base.FortuneOxBetBetChangeList) + Load(data, "Base.FortuneOx/Bet.BetLevel", &base.FortuneOxBetBetLevel) + Load(data, "Base.FortuneOx/Bet.BetLine", &base.FortuneOxBetBetLine) + Load(data, "Base.FortuneOx/Bet.BetSize", &base.FortuneOxBetBetSize) + Load(data, "Base.FortuneOx/Bet.FirstBet", &base.FortuneOxBetFirstBet) + Load(data, "Base.FortuneOx/Formation.Default", &base.FortuneOxFormation) + Load(data, "Base.FortuneOx/Map.RTPMode", &base.FortuneOxMapRTPMode) + Load(data, "Base.FortuneOx/Others.Default", &base.FortuneOxOthers) + Load(data, "Base.FortuneOx/ReelBaseSpin.Range", &base.FortuneOxReelBaseSpinRange) + Load(data, "Base.FortuneOx/ReelBaseSpin.Reel", &base.FortuneOxReelBaseSpinReel) + Load(data, "Base.FortuneOx/ReelBaseSpin.Weight", &base.FortuneOxReelBaseSpinWeight) + Load(data, "Base.FortuneOx/ReelReSpin.Range", &base.FortuneOxReelReSpinRange) + Load(data, "Base.FortuneOx/ReelReSpin.Reel", &base.FortuneOxReelReSpinReel) + Load(data, "Base.FortuneOx/ReelReSpin.Weight", &base.FortuneOxReelReSpinWeight) + Load(data, "Base.FortuneOx/SuperStack1.Weight", &base.FortuneOxSuperStack1Weight) + Load(data, "Base.FortuneOx/SuperStack2.Weight", &base.FortuneOxSuperStack2Weight) + Load(data, "Base.FortuneOx/Symbol.BetRatio", &base.FortuneOxSymbolBetRatio) + Load(data, "Base.FortuneOx/Symbol.Default", &base.FortuneOxSymbol) + Load(data, "Base.FortuneRabbit/Bet.BetChangeList", &base.FortuneRabbitBetBetChangeList) + Load(data, "Base.FortuneRabbit/Bet.BetLevel", &base.FortuneRabbitBetBetLevel) + Load(data, "Base.FortuneRabbit/Bet.BetLine", &base.FortuneRabbitBetBetLine) + Load(data, "Base.FortuneRabbit/Bet.BetSize", &base.FortuneRabbitBetBetSize) + Load(data, "Base.FortuneRabbit/Bet.FirstBet", &base.FortuneRabbitBetFirstBet) + Load(data, "Base.FortuneRabbit/CashPrizeWeight.Default", &base.FortuneRabbitCashPrizeWeight) + Load(data, "Base.FortuneRabbit/ForceCashCountWeight.Default", &base.FortuneRabbitForceCashCountWeight) + Load(data, "Base.FortuneRabbit/Formation.Default", &base.FortuneRabbitFormation) + Load(data, "Base.FortuneRabbit/Map.RTPMode", &base.FortuneRabbitMapRTPMode) + Load(data, "Base.FortuneRabbit/Others.Default", &base.FortuneRabbitOthers) + Load(data, "Base.FortuneRabbit/Others.RTP120", &base.FortuneRabbitOthersRTP120) + Load(data, "Base.FortuneRabbit/Others.RTP80", &base.FortuneRabbitOthersRTP80) + Load(data, "Base.FortuneRabbit/ReelBaseSpin.Range", &base.FortuneRabbitReelBaseSpinRange) + Load(data, "Base.FortuneRabbit/ReelBaseSpin.Reel", &base.FortuneRabbitReelBaseSpinReel) + Load(data, "Base.FortuneRabbit/ReelBaseSpin.Weight", &base.FortuneRabbitReelBaseSpinWeight) + Load(data, "Base.FortuneRabbit/ReelFreeSpin.Range", &base.FortuneRabbitReelFreeSpinRange) + Load(data, "Base.FortuneRabbit/ReelFreeSpin.Reel", &base.FortuneRabbitReelFreeSpinReel) + Load(data, "Base.FortuneRabbit/ReelFreeSpin.Weight", &base.FortuneRabbitReelFreeSpinWeight) + Load(data, "Base.FortuneRabbit/Symbol.BetRatio", &base.FortuneRabbitSymbolBetRatio) + Load(data, "Base.FortuneRabbit/Symbol.Default", &base.FortuneRabbitSymbol) + Load(data, "Base.FortuneTiger/Bet.BetChangeList", &base.FortuneTigerBetBetChangeList) + Load(data, "Base.FortuneTiger/Bet.BetLevel", &base.FortuneTigerBetBetLevel) + Load(data, "Base.FortuneTiger/Bet.BetLine", &base.FortuneTigerBetBetLine) + Load(data, "Base.FortuneTiger/Bet.BetSize", &base.FortuneTigerBetBetSize) + Load(data, "Base.FortuneTiger/Bet.FirstBet", &base.FortuneTigerBetFirstBet) + Load(data, "Base.FortuneTiger/Formation.Default", &base.FortuneTigerFormation) + Load(data, "Base.FortuneTiger/Map.RTPMode", &base.FortuneTigerMapRTPMode) + Load(data, "Base.FortuneTiger/Others.Default", &base.FortuneTigerOthers) + Load(data, "Base.FortuneTiger/ReelBaseSpin.Range", &base.FortuneTigerReelBaseSpinRange) + Load(data, "Base.FortuneTiger/ReelBaseSpin.Reel", &base.FortuneTigerReelBaseSpinReel) + Load(data, "Base.FortuneTiger/ReelBaseSpin.Weight", &base.FortuneTigerReelBaseSpinWeight) + Load(data, "Base.FortuneTiger/ReelReSpin.Range", &base.FortuneTigerReelReSpinRange) + Load(data, "Base.FortuneTiger/ReelReSpin.Reel", &base.FortuneTigerReelReSpinReel) + Load(data, "Base.FortuneTiger/ReelReSpin.Weight", &base.FortuneTigerReelReSpinWeight) + Load(data, "Base.FortuneTiger/SuperStack.Weight", &base.FortuneTigerSuperStackWeight) + Load(data, "Base.FortuneTiger/Symbol.BetRatio", &base.FortuneTigerSymbolBetRatio) + Load(data, "Base.FortuneTiger/Symbol.Default", &base.FortuneTigerSymbol) + Load(data, "Base.GateofOlympus/Bet.BetChangeList", &base.GateofOlympusBetBetChangeList) + Load(data, "Base.GateofOlympus/Bet.BetLevel", &base.GateofOlympusBetBetLevel) + Load(data, "Base.GateofOlympus/Bet.BetLine", &base.GateofOlympusBetBetLine) + Load(data, "Base.GateofOlympus/Bet.BetSize", &base.GateofOlympusBetBetSize) + Load(data, "Base.GateofOlympus/Bet.FirstBet", &base.GateofOlympusBetFirstBet) + Load(data, "Base.GateofOlympus/Formation.Default", &base.GateofOlympusFormation) + Load(data, "Base.GateofOlympus/Map.RTPMode", &base.GateofOlympusMapRTPMode) + Load(data, "Base.GateofOlympus/Multiplier.Default", &base.GateofOlympusMultiplier) + Load(data, "Base.GateofOlympus/Multiplier.Default/ID", &base.GateofOlympusMultiplierKeyID) + Load(data, "Base.GateofOlympus/ReelBaseSpin1.Range", &base.GateofOlympusReelBaseSpin1Range) + Load(data, "Base.GateofOlympus/ReelBaseSpin1.Reel", &base.GateofOlympusReelBaseSpin1Reel) + Load(data, "Base.GateofOlympus/ReelBaseSpin1.Weight", &base.GateofOlympusReelBaseSpin1Weight) + Load(data, "Base.GateofOlympus/ReelBaseSpin2.Range", &base.GateofOlympusReelBaseSpin2Range) + Load(data, "Base.GateofOlympus/ReelBaseSpin2.Reel", &base.GateofOlympusReelBaseSpin2Reel) + Load(data, "Base.GateofOlympus/ReelBaseSpin2.Weight", &base.GateofOlympusReelBaseSpin2Weight) + Load(data, "Base.GateofOlympus/ReelBaseSpin3.Range", &base.GateofOlympusReelBaseSpin3Range) + Load(data, "Base.GateofOlympus/ReelBaseSpin3.Reel", &base.GateofOlympusReelBaseSpin3Reel) + Load(data, "Base.GateofOlympus/ReelBaseSpin3.Weight", &base.GateofOlympusReelBaseSpin3Weight) + Load(data, "Base.GateofOlympus/ReelBaseSpin7.Range", &base.GateofOlympusReelBaseSpin7Range) + Load(data, "Base.GateofOlympus/ReelBaseSpin7.Reel", &base.GateofOlympusReelBaseSpin7Reel) + Load(data, "Base.GateofOlympus/ReelBaseSpin7.Weight", &base.GateofOlympusReelBaseSpin7Weight) + Load(data, "Base.GateofOlympus/ReelBaseSpin8.Range", &base.GateofOlympusReelBaseSpin8Range) + Load(data, "Base.GateofOlympus/ReelBaseSpin8.Reel", &base.GateofOlympusReelBaseSpin8Reel) + Load(data, "Base.GateofOlympus/ReelBaseSpin8.Weight", &base.GateofOlympusReelBaseSpin8Weight) + Load(data, "Base.GateofOlympus/ReelBaseSpin.Range", &base.GateofOlympusReelBaseSpinRange) + Load(data, "Base.GateofOlympus/ReelBaseSpin.Reel", &base.GateofOlympusReelBaseSpinReel) + Load(data, "Base.GateofOlympus/ReelBaseSpin.Weight", &base.GateofOlympusReelBaseSpinWeight) + Load(data, "Base.GateofOlympus/ReelChoose.Default", &base.GateofOlympusReelChoose) + Load(data, "Base.GateofOlympus/ReelFreeSpin4.Range", &base.GateofOlympusReelFreeSpin4Range) + Load(data, "Base.GateofOlympus/ReelFreeSpin4.Reel", &base.GateofOlympusReelFreeSpin4Reel) + Load(data, "Base.GateofOlympus/ReelFreeSpin4.Weight", &base.GateofOlympusReelFreeSpin4Weight) + Load(data, "Base.GateofOlympus/ReelFreeSpin5.Range", &base.GateofOlympusReelFreeSpin5Range) + Load(data, "Base.GateofOlympus/ReelFreeSpin5.Reel", &base.GateofOlympusReelFreeSpin5Reel) + Load(data, "Base.GateofOlympus/ReelFreeSpin5.Weight", &base.GateofOlympusReelFreeSpin5Weight) + Load(data, "Base.GateofOlympus/ReelFreeSpin.Range", &base.GateofOlympusReelFreeSpinRange) + Load(data, "Base.GateofOlympus/ReelFreeSpin.Reel", &base.GateofOlympusReelFreeSpinReel) + Load(data, "Base.GateofOlympus/ReelFreeSpin.Weight", &base.GateofOlympusReelFreeSpinWeight) + Load(data, "Base.GateofOlympus/Scatter.Default", &base.GateofOlympusScatter) + Load(data, "Base.GateofOlympus/Symbol.BetRatio", &base.GateofOlympusSymbolBetRatio) + Load(data, "Base.GateofOlympus/Symbol.Default", &base.GateofOlympusSymbol) + Load(data, "Base.Matrix/FeaturesForm15X1TypeA.Default", &base.MatrixFeaturesForm15X1TypeA) + Load(data, "Base.Matrix/FeaturesForm19X1TypeA.Default", &base.MatrixFeaturesForm19X1TypeA) + Load(data, "Base.Matrix/FeaturesForm20X1TypeA.Default", &base.MatrixFeaturesForm20X1TypeA) + Load(data, "Base.Matrix/FeaturesForm25X1TypeA.Default", &base.MatrixFeaturesForm25X1TypeA) + Load(data, "Base.Matrix/FeaturesForm30X1TypeA.Default", &base.MatrixFeaturesForm30X1TypeA) + Load(data, "Base.Matrix/FeaturesForm35X1TypeA.Default", &base.MatrixFeaturesForm35X1TypeA) + Load(data, "Base.Matrix/FeaturesForm40X1.Default", &base.MatrixFeaturesForm40X1) + Load(data, "Base.Matrix/FeaturesForm40X1TypeA.Default", &base.MatrixFeaturesForm40X1TypeA) + Load(data, "Base.Matrix/FeaturesForm7X1TypeA.Default", &base.MatrixFeaturesForm7X1TypeA) + Load(data, "Base.Matrix/Line100Form12X5TypeA.Default", &base.MatrixLine100Form12X5TypeA) + Load(data, "Base.Matrix/Line100Form6X5TypeA.Default", &base.MatrixLine100Form6X5TypeA) + Load(data, "Base.Matrix/Line10Form343TypeA.Default", &base.MatrixLine10Form343TypeA) + Load(data, "Base.Matrix/Line10Form3X5TypeA.Default", &base.MatrixLine10Form3X5TypeA) + Load(data, "Base.Matrix/Line1Form3X3TypeA.Default", &base.MatrixLine1Form3X3TypeA) + Load(data, "Base.Matrix/Line1Form3X3TypeB.Default", &base.MatrixLine1Form3X3TypeB) + Load(data, "Base.Matrix/Line1Form5X5TypeA.Default", &base.MatrixLine1Form5X5TypeA) + Load(data, "Base.Matrix/Line20Form3X5TypeA.Default", &base.MatrixLine20Form3X5TypeA) + Load(data, "Base.Matrix/Line25Form36666TypeA.Default", &base.MatrixLine25Form36666TypeA) + Load(data, "Base.Matrix/Line25Form3X5TypeA.Default", &base.MatrixLine25Form3X5TypeA) + Load(data, "Base.Matrix/Line25Form3X5TypeB.Default", &base.MatrixLine25Form3X5TypeB) + Load(data, "Base.Matrix/Line25Form3X5TypeC.Default", &base.MatrixLine25Form3X5TypeC) + Load(data, "Base.Matrix/Line25Form3X5TypeD.Default", &base.MatrixLine25Form3X5TypeD) + Load(data, "Base.Matrix/Line25Form3X5TypeE.Default", &base.MatrixLine25Form3X5TypeE) + Load(data, "Base.Matrix/Line30Form3X5TypeA.Default", &base.MatrixLine30Form3X5TypeA) + Load(data, "Base.Matrix/Line30Form3X5TypeB.Default", &base.MatrixLine30Form3X5TypeB) + Load(data, "Base.Matrix/Line30Form3X5TypeC.Default", &base.MatrixLine30Form3X5TypeC) + Load(data, "Base.Matrix/Line30Form3X5TypeD.Default", &base.MatrixLine30Form3X5TypeD) + Load(data, "Base.Matrix/Line30Form3X5TypeE.Default", &base.MatrixLine30Form3X5TypeE) + Load(data, "Base.Matrix/Line30Form3X6TypeA.Default", &base.MatrixLine30Form3X6TypeA) + Load(data, "Base.Matrix/Line30Form4X5TypeA.Default", &base.MatrixLine30Form4X5TypeA) + Load(data, "Base.Matrix/Line30Form4X5TypeB.Default", &base.MatrixLine30Form4X5TypeB) + Load(data, "Base.Matrix/Line3Form3X3TypeA.Default", &base.MatrixLine3Form3X3TypeA) + Load(data, "Base.Matrix/Line40Form34543TypeA.Default", &base.MatrixLine40Form34543TypeA) + Load(data, "Base.Matrix/Line40Form3X5TypeA.Default", &base.MatrixLine40Form3X5TypeA) + Load(data, "Base.Matrix/Line40Form3X5TypeB.Default", &base.MatrixLine40Form3X5TypeB) + Load(data, "Base.Matrix/Line40Form3X5TypeC.Default", &base.MatrixLine40Form3X5TypeC) + Load(data, "Base.Matrix/Line40Form3X5TypeD.Default", &base.MatrixLine40Form3X5TypeD) + Load(data, "Base.Matrix/Line40Form4X5TypeA.Default", &base.MatrixLine40Form4X5TypeA) + Load(data, "Base.Matrix/Line40Form4X5TypeB.Default", &base.MatrixLine40Form4X5TypeB) + Load(data, "Base.Matrix/Line40Form4X5TypeC.Default", &base.MatrixLine40Form4X5TypeC) + Load(data, "Base.Matrix/Line40Form4X6TypeA.Default", &base.MatrixLine40Form4X6TypeA) + Load(data, "Base.Matrix/Line50Form3X5TypeA.Default", &base.MatrixLine50Form3X5TypeA) + Load(data, "Base.Matrix/Line50Form3X5TypeB.Default", &base.MatrixLine50Form3X5TypeB) + Load(data, "Base.Matrix/Line50Form3X5TypeC.Default", &base.MatrixLine50Form3X5TypeC) + Load(data, "Base.Matrix/Line50Form3X5TypeD.Default", &base.MatrixLine50Form3X5TypeD) + Load(data, "Base.Matrix/Line50Form3X5TypeE.Default", &base.MatrixLine50Form3X5TypeE) + Load(data, "Base.Matrix/Line50Form3X5TypeF.Default", &base.MatrixLine50Form3X5TypeF) + Load(data, "Base.Matrix/Line50Form3X5TypeG.Default", &base.MatrixLine50Form3X5TypeG) + Load(data, "Base.Matrix/Line50Form3X5TypeH.Default", &base.MatrixLine50Form3X5TypeH) + Load(data, "Base.Matrix/Line50Form45454TypeA.Default", &base.MatrixLine50Form45454TypeA) + Load(data, "Base.Matrix/Line50Form4X5TypeA.Default", &base.MatrixLine50Form4X5TypeA) + Load(data, "Base.Matrix/Line50Form4X5TypeB.Default", &base.MatrixLine50Form4X5TypeB) + Load(data, "Base.Matrix/Line50Form4X5TypeC.Default", &base.MatrixLine50Form4X5TypeC) + Load(data, "Base.Matrix/Line50Form4X5TypeD.Default", &base.MatrixLine50Form4X5TypeD) + Load(data, "Base.Matrix/Line50Form4X5TypeE.Default", &base.MatrixLine50Form4X5TypeE) + Load(data, "Base.Matrix/Line50Form4X5TypeF.Default", &base.MatrixLine50Form4X5TypeF) + Load(data, "Base.Matrix/Line50Form4X6TypeA.Default", &base.MatrixLine50Form4X6TypeA) + Load(data, "Base.Matrix/Line50Form5X5TypeA.Default", &base.MatrixLine50Form5X5TypeA) + Load(data, "Base.Matrix/Line50Form5X5TypeB.Default", &base.MatrixLine50Form5X5TypeB) + Load(data, "Base.Matrix/Line50Form5X5TypeC.Default", &base.MatrixLine50Form5X5TypeC) + Load(data, "Base.Matrix/Line50Form6X5TypeA.Default", &base.MatrixLine50Form6X5TypeA) + Load(data, "Base.Matrix/Line5Form3X3TypeA.Default", &base.MatrixLine5Form3X3TypeA) + Load(data, "Base.Matrix/Line5Form3X3TypeB.Default", &base.MatrixLine5Form3X3TypeB) + Load(data, "Base.Matrix/Line60Form33633TypeA.Default", &base.MatrixLine60Form33633TypeA) + Load(data, "Base.Matrix/Line60Form8X5TypeA.Default", &base.MatrixLine60Form8X5TypeA) + Load(data, "Base.Matrix/Line65Form6X5TypeA.Default", &base.MatrixLine65Form6X5TypeA) + Load(data, "Base.Matrix/Line70Form9X5TypeA.Default", &base.MatrixLine70Form9X5TypeA) + Load(data, "Base.Matrix/Line75Form5X6TypeA.Default", &base.MatrixLine75Form5X6TypeA) + Load(data, "Base.Matrix/Line75Form6X5TypeA.Default", &base.MatrixLine75Form6X5TypeA) + Load(data, "Base.Matrix/Line80Form10X5TypeA.Default", &base.MatrixLine80Form10X5TypeA) + Load(data, "Base.Matrix/Line80Form3X5TypeA.Default", &base.MatrixLine80Form3X5TypeA) + Load(data, "Base.Matrix/Line80Form4X6TypeA.Default", &base.MatrixLine80Form4X6TypeA) + Load(data, "Base.Matrix/Line80Form7X5TypeA.Default", &base.MatrixLine80Form7X5TypeA) + Load(data, "Base.Matrix/Line90Form11X5TypeA.Default", &base.MatrixLine90Form11X5TypeA) + Load(data, "Base.Matrix/Line95Form8X5TypeA.Default", &base.MatrixLine95Form8X5TypeA) + Load(data, "Base.Matrix/MatchForm7X7TypeA.Default", &base.MatrixMatchForm7X7TypeA) + Load(data, "Base.Matrix/SameForm5X6TypeA.Default", &base.MatrixSameForm5X6TypeA) + Load(data, "Base.Matrix/SameForm5X6TypeB.Default", &base.MatrixSameForm5X6TypeB) + Load(data, "Base.Matrix/WaysForm333331.Default", &base.MatrixWaysForm333331) + Load(data, "Base.Matrix/WaysForm33555.Default", &base.MatrixWaysForm33555) + Load(data, "Base.Matrix/WaysForm344444.Default", &base.MatrixWaysForm344444) + Load(data, "Base.Matrix/WaysForm3X5TypeA.Default", &base.MatrixWaysForm3X5TypeA) + Load(data, "Base.Matrix/WaysForm44668.Default", &base.MatrixWaysForm44668) + Load(data, "Base.Matrix/WaysForm4X5TypeA.Default", &base.MatrixWaysForm4X5TypeA) + Load(data, "Base.Matrix/WaysForm4X5TypeB.Default", &base.MatrixWaysForm4X5TypeB) + Load(data, "Base.OptGroup.Default", &base.OptGroup) + Load(data, "Base.PrizeModel/PrizeModelTypeA.Default", &base.PrizeModelPrizeModelTypeA) + Load(data, "Base.PrizeModel/PrizeModelTypeB.Default", &base.PrizeModelPrizeModelTypeB) + Load(data, "Base.Simulator.FSMultiLevel", &base.SimulatorFSMultiLevel) + Load(data, "Base.Simulator.MultiLevel", &base.SimulatorMultiLevel) + Load(data, "Base.Test/Bet.BetChangeList", &base.TestBetBetChangeList) + Load(data, "Base.Test/Bet.BetLevel", &base.TestBetBetLevel) + Load(data, "Base.Test/Bet.BetLine", &base.TestBetBetLine) + Load(data, "Base.Test/Bet.BetSize", &base.TestBetBetSize) + Load(data, "Base.Test/Bet.FirstBet", &base.TestBetFirstBet) + Load(data, "Base.Test/Formation.Default", &base.TestFormation) + Load(data, "Base.Test/Map.RTPMode", &base.TestMapRTPMode) + Load(data, "Base.Test/Random.Weight", &base.TestRandomWeight) + Load(data, "Base.Test/ReelBaseSpin.Range", &base.TestReelBaseSpinRange) + Load(data, "Base.Test/ReelBaseSpin.Reel", &base.TestReelBaseSpinReel) + Load(data, "Base.Test/ReelBaseSpin.Weight", &base.TestReelBaseSpinWeight) + Load(data, "Base.Test/Symbol.BetRatio", &base.TestSymbolBetRatio) + Load(data, "Base.Test/Symbol.Default", &base.TestSymbol) +} + +func StoragesMapping() { + Set("Base", "CashMania/Bet", "BetChangeList", base.CashManiaBetBetChangeList) + Set("Base", "CashMania/Bet", "BetLevel", base.CashManiaBetBetLevel) + Set("Base", "CashMania/Bet", "BetLine", base.CashManiaBetBetLine) + Set("Base", "CashMania/Bet", "BetSize", base.CashManiaBetBetSize) + Set("Base", "CashMania/Bet", "FirstBet", base.CashManiaBetFirstBet) + Set("Base", "CashMania/Formation", "Default", base.CashManiaFormation) + Set("Base", "CashMania/Map", "RTPMode", base.CashManiaMapRTPMode) + Set("Base", "CashMania/MidItemInfo", "Default", base.CashManiaMidItemInfo) + Set("Base", "CashMania/Others", "Default", base.CashManiaOthers) + Set("Base", "CashMania/RandomItem", "Weight", base.CashManiaRandomItemWeight) + Set("Base", "CashMania/RandomMid", "Weight", base.CashManiaRandomMidWeight) + Set("Base", "CashMania/ReelBaseSpin", "Range", base.CashManiaReelBaseSpinRange) + Set("Base", "CashMania/ReelBaseSpin", "Reel", base.CashManiaReelBaseSpinReel) + Set("Base", "CashMania/ReelBaseSpin", "Weight", base.CashManiaReelBaseSpinWeight) + Set("Base", "CashMania/Symbol", "BetRatio", base.CashManiaSymbolBetRatio) + Set("Base", "CashMania/Symbol", "Default", base.CashManiaSymbol) + Set("Base", "CashMania/WinItem", "Weight", base.CashManiaWinItemWeight) + Set("Base", "CashMania/WinMid", "Weight", base.CashManiaWinMidWeight) + Set("Base", "FortuneDragon/BaseMultiplier", "Default", base.FortuneDragonBaseMultiplier) + Set("Base", "FortuneDragon/Bet", "BetChangeList", base.FortuneDragonBetBetChangeList) + Set("Base", "FortuneDragon/Bet", "BetLevel", base.FortuneDragonBetBetLevel) + Set("Base", "FortuneDragon/Bet", "BetLine", base.FortuneDragonBetBetLine) + Set("Base", "FortuneDragon/Bet", "BetSize", base.FortuneDragonBetBetSize) + Set("Base", "FortuneDragon/Bet", "FirstBet", base.FortuneDragonBetFirstBet) + Set("Base", "FortuneDragon/Formation", "Default", base.FortuneDragonFormation) + Set("Base", "FortuneDragon/FreeMultiplier", "Default", base.FortuneDragonFreeMultiplier) + Set("Base", "FortuneDragon/FreeMultiplierCount", "Default", base.FortuneDragonFreeMultiplierCount) + Set("Base", "FortuneDragon/Map", "RTPMode", base.FortuneDragonMapRTPMode) + Set("Base", "FortuneDragon/Others", "Default", base.FortuneDragonOthers) + Set("Base", "FortuneDragon/ReelBaseSpin", "Range", base.FortuneDragonReelBaseSpinRange) + Set("Base", "FortuneDragon/ReelBaseSpin", "Reel", base.FortuneDragonReelBaseSpinReel) + Set("Base", "FortuneDragon/ReelBaseSpin", "Weight", base.FortuneDragonReelBaseSpinWeight) + Set("Base", "FortuneDragon/ReelFreeSpin", "Range", base.FortuneDragonReelFreeSpinRange) + Set("Base", "FortuneDragon/ReelFreeSpin", "Reel", base.FortuneDragonReelFreeSpinReel) + Set("Base", "FortuneDragon/ReelFreeSpin", "Weight", base.FortuneDragonReelFreeSpinWeight) + Set("Base", "FortuneDragon/ReelSureWinBaseSpin", "Range", base.FortuneDragonReelSureWinBaseSpinRange) + Set("Base", "FortuneDragon/ReelSureWinBaseSpin", "Reel", base.FortuneDragonReelSureWinBaseSpinReel) + Set("Base", "FortuneDragon/ReelSureWinBaseSpin", "Weight", base.FortuneDragonReelSureWinBaseSpinWeight) + Set("Base", "FortuneDragon/ReelSureWinFreeSpin", "Range", base.FortuneDragonReelSureWinFreeSpinRange) + Set("Base", "FortuneDragon/ReelSureWinFreeSpin", "Reel", base.FortuneDragonReelSureWinFreeSpinReel) + Set("Base", "FortuneDragon/ReelSureWinFreeSpin", "Weight", base.FortuneDragonReelSureWinFreeSpinWeight) + Set("Base", "FortuneDragon/Symbol", "BetRatio", base.FortuneDragonSymbolBetRatio) + Set("Base", "FortuneDragon/Symbol", "Default", base.FortuneDragonSymbol) + Set("Base", "FortuneMouse/Bet", "BetChangeList", base.FortuneMouseBetBetChangeList) + Set("Base", "FortuneMouse/Bet", "BetLevel", base.FortuneMouseBetBetLevel) + Set("Base", "FortuneMouse/Bet", "BetLine", base.FortuneMouseBetBetLine) + Set("Base", "FortuneMouse/Bet", "BetSize", base.FortuneMouseBetBetSize) + Set("Base", "FortuneMouse/Bet", "FirstBet", base.FortuneMouseBetFirstBet) + Set("Base", "FortuneMouse/Formation", "Default", base.FortuneMouseFormation) + Set("Base", "FortuneMouse/Map", "RTPMode", base.FortuneMouseMapRTPMode) + Set("Base", "FortuneMouse/Others", "Default", base.FortuneMouseOthers) + Set("Base", "FortuneMouse/ReelBaseSpin", "Range", base.FortuneMouseReelBaseSpinRange) + Set("Base", "FortuneMouse/ReelBaseSpin", "Reel", base.FortuneMouseReelBaseSpinReel) + Set("Base", "FortuneMouse/ReelBaseSpin", "Weight", base.FortuneMouseReelBaseSpinWeight) + Set("Base", "FortuneMouse/ReelReSpin", "Range", base.FortuneMouseReelReSpinRange) + Set("Base", "FortuneMouse/ReelReSpin", "Reel", base.FortuneMouseReelReSpinReel) + Set("Base", "FortuneMouse/ReelReSpin", "Weight", base.FortuneMouseReelReSpinWeight) + Set("Base", "FortuneMouse/SuperStack", "Weight", base.FortuneMouseSuperStackWeight) + Set("Base", "FortuneMouse/Symbol", "BetRatio", base.FortuneMouseSymbolBetRatio) + Set("Base", "FortuneMouse/Symbol", "Default", base.FortuneMouseSymbol) + Set("Base", "FortuneOx/Bet", "BetChangeList", base.FortuneOxBetBetChangeList) + Set("Base", "FortuneOx/Bet", "BetLevel", base.FortuneOxBetBetLevel) + Set("Base", "FortuneOx/Bet", "BetLine", base.FortuneOxBetBetLine) + Set("Base", "FortuneOx/Bet", "BetSize", base.FortuneOxBetBetSize) + Set("Base", "FortuneOx/Bet", "FirstBet", base.FortuneOxBetFirstBet) + Set("Base", "FortuneOx/Formation", "Default", base.FortuneOxFormation) + Set("Base", "FortuneOx/Map", "RTPMode", base.FortuneOxMapRTPMode) + Set("Base", "FortuneOx/Others", "Default", base.FortuneOxOthers) + Set("Base", "FortuneOx/ReelBaseSpin", "Range", base.FortuneOxReelBaseSpinRange) + Set("Base", "FortuneOx/ReelBaseSpin", "Reel", base.FortuneOxReelBaseSpinReel) + Set("Base", "FortuneOx/ReelBaseSpin", "Weight", base.FortuneOxReelBaseSpinWeight) + Set("Base", "FortuneOx/ReelReSpin", "Range", base.FortuneOxReelReSpinRange) + Set("Base", "FortuneOx/ReelReSpin", "Reel", base.FortuneOxReelReSpinReel) + Set("Base", "FortuneOx/ReelReSpin", "Weight", base.FortuneOxReelReSpinWeight) + Set("Base", "FortuneOx/SuperStack1", "Weight", base.FortuneOxSuperStack1Weight) + Set("Base", "FortuneOx/SuperStack2", "Weight", base.FortuneOxSuperStack2Weight) + Set("Base", "FortuneOx/Symbol", "BetRatio", base.FortuneOxSymbolBetRatio) + Set("Base", "FortuneOx/Symbol", "Default", base.FortuneOxSymbol) + Set("Base", "FortuneRabbit/Bet", "BetChangeList", base.FortuneRabbitBetBetChangeList) + Set("Base", "FortuneRabbit/Bet", "BetLevel", base.FortuneRabbitBetBetLevel) + Set("Base", "FortuneRabbit/Bet", "BetLine", base.FortuneRabbitBetBetLine) + Set("Base", "FortuneRabbit/Bet", "BetSize", base.FortuneRabbitBetBetSize) + Set("Base", "FortuneRabbit/Bet", "FirstBet", base.FortuneRabbitBetFirstBet) + Set("Base", "FortuneRabbit/CashPrizeWeight", "Default", base.FortuneRabbitCashPrizeWeight) + Set("Base", "FortuneRabbit/ForceCashCountWeight", "Default", base.FortuneRabbitForceCashCountWeight) + Set("Base", "FortuneRabbit/Formation", "Default", base.FortuneRabbitFormation) + Set("Base", "FortuneRabbit/Map", "RTPMode", base.FortuneRabbitMapRTPMode) + Set("Base", "FortuneRabbit/Others", "Default", base.FortuneRabbitOthers) + Set("Base", "FortuneRabbit/Others", "RTP120", base.FortuneRabbitOthersRTP120) + Set("Base", "FortuneRabbit/Others", "RTP80", base.FortuneRabbitOthersRTP80) + Set("Base", "FortuneRabbit/ReelBaseSpin", "Range", base.FortuneRabbitReelBaseSpinRange) + Set("Base", "FortuneRabbit/ReelBaseSpin", "Reel", base.FortuneRabbitReelBaseSpinReel) + Set("Base", "FortuneRabbit/ReelBaseSpin", "Weight", base.FortuneRabbitReelBaseSpinWeight) + Set("Base", "FortuneRabbit/ReelFreeSpin", "Range", base.FortuneRabbitReelFreeSpinRange) + Set("Base", "FortuneRabbit/ReelFreeSpin", "Reel", base.FortuneRabbitReelFreeSpinReel) + Set("Base", "FortuneRabbit/ReelFreeSpin", "Weight", base.FortuneRabbitReelFreeSpinWeight) + Set("Base", "FortuneRabbit/Symbol", "BetRatio", base.FortuneRabbitSymbolBetRatio) + Set("Base", "FortuneRabbit/Symbol", "Default", base.FortuneRabbitSymbol) + Set("Base", "FortuneTiger/Bet", "BetChangeList", base.FortuneTigerBetBetChangeList) + Set("Base", "FortuneTiger/Bet", "BetLevel", base.FortuneTigerBetBetLevel) + Set("Base", "FortuneTiger/Bet", "BetLine", base.FortuneTigerBetBetLine) + Set("Base", "FortuneTiger/Bet", "BetSize", base.FortuneTigerBetBetSize) + Set("Base", "FortuneTiger/Bet", "FirstBet", base.FortuneTigerBetFirstBet) + Set("Base", "FortuneTiger/Formation", "Default", base.FortuneTigerFormation) + Set("Base", "FortuneTiger/Map", "RTPMode", base.FortuneTigerMapRTPMode) + Set("Base", "FortuneTiger/Others", "Default", base.FortuneTigerOthers) + Set("Base", "FortuneTiger/ReelBaseSpin", "Range", base.FortuneTigerReelBaseSpinRange) + Set("Base", "FortuneTiger/ReelBaseSpin", "Reel", base.FortuneTigerReelBaseSpinReel) + Set("Base", "FortuneTiger/ReelBaseSpin", "Weight", base.FortuneTigerReelBaseSpinWeight) + Set("Base", "FortuneTiger/ReelReSpin", "Range", base.FortuneTigerReelReSpinRange) + Set("Base", "FortuneTiger/ReelReSpin", "Reel", base.FortuneTigerReelReSpinReel) + Set("Base", "FortuneTiger/ReelReSpin", "Weight", base.FortuneTigerReelReSpinWeight) + Set("Base", "FortuneTiger/SuperStack", "Weight", base.FortuneTigerSuperStackWeight) + Set("Base", "FortuneTiger/Symbol", "BetRatio", base.FortuneTigerSymbolBetRatio) + Set("Base", "FortuneTiger/Symbol", "Default", base.FortuneTigerSymbol) + Set("Base", "GateofOlympus/Bet", "BetChangeList", base.GateofOlympusBetBetChangeList) + Set("Base", "GateofOlympus/Bet", "BetLevel", base.GateofOlympusBetBetLevel) + Set("Base", "GateofOlympus/Bet", "BetLine", base.GateofOlympusBetBetLine) + Set("Base", "GateofOlympus/Bet", "BetSize", base.GateofOlympusBetBetSize) + Set("Base", "GateofOlympus/Bet", "FirstBet", base.GateofOlympusBetFirstBet) + Set("Base", "GateofOlympus/Formation", "Default", base.GateofOlympusFormation) + Set("Base", "GateofOlympus/Map", "RTPMode", base.GateofOlympusMapRTPMode) + Set("Base", "GateofOlympus/Multiplier", "Default", base.GateofOlympusMultiplier) + Set("Base", "GateofOlympus/Multiplier", "Default/ID", base.GateofOlympusMultiplierKeyID) + Set("Base", "GateofOlympus/ReelBaseSpin1", "Range", base.GateofOlympusReelBaseSpin1Range) + Set("Base", "GateofOlympus/ReelBaseSpin1", "Reel", base.GateofOlympusReelBaseSpin1Reel) + Set("Base", "GateofOlympus/ReelBaseSpin1", "Weight", base.GateofOlympusReelBaseSpin1Weight) + Set("Base", "GateofOlympus/ReelBaseSpin2", "Range", base.GateofOlympusReelBaseSpin2Range) + Set("Base", "GateofOlympus/ReelBaseSpin2", "Reel", base.GateofOlympusReelBaseSpin2Reel) + Set("Base", "GateofOlympus/ReelBaseSpin2", "Weight", base.GateofOlympusReelBaseSpin2Weight) + Set("Base", "GateofOlympus/ReelBaseSpin3", "Range", base.GateofOlympusReelBaseSpin3Range) + Set("Base", "GateofOlympus/ReelBaseSpin3", "Reel", base.GateofOlympusReelBaseSpin3Reel) + Set("Base", "GateofOlympus/ReelBaseSpin3", "Weight", base.GateofOlympusReelBaseSpin3Weight) + Set("Base", "GateofOlympus/ReelBaseSpin7", "Range", base.GateofOlympusReelBaseSpin7Range) + Set("Base", "GateofOlympus/ReelBaseSpin7", "Reel", base.GateofOlympusReelBaseSpin7Reel) + Set("Base", "GateofOlympus/ReelBaseSpin7", "Weight", base.GateofOlympusReelBaseSpin7Weight) + Set("Base", "GateofOlympus/ReelBaseSpin8", "Range", base.GateofOlympusReelBaseSpin8Range) + Set("Base", "GateofOlympus/ReelBaseSpin8", "Reel", base.GateofOlympusReelBaseSpin8Reel) + Set("Base", "GateofOlympus/ReelBaseSpin8", "Weight", base.GateofOlympusReelBaseSpin8Weight) + Set("Base", "GateofOlympus/ReelBaseSpin", "Range", base.GateofOlympusReelBaseSpinRange) + Set("Base", "GateofOlympus/ReelBaseSpin", "Reel", base.GateofOlympusReelBaseSpinReel) + Set("Base", "GateofOlympus/ReelBaseSpin", "Weight", base.GateofOlympusReelBaseSpinWeight) + Set("Base", "GateofOlympus/ReelChoose", "Default", base.GateofOlympusReelChoose) + Set("Base", "GateofOlympus/ReelFreeSpin4", "Range", base.GateofOlympusReelFreeSpin4Range) + Set("Base", "GateofOlympus/ReelFreeSpin4", "Reel", base.GateofOlympusReelFreeSpin4Reel) + Set("Base", "GateofOlympus/ReelFreeSpin4", "Weight", base.GateofOlympusReelFreeSpin4Weight) + Set("Base", "GateofOlympus/ReelFreeSpin5", "Range", base.GateofOlympusReelFreeSpin5Range) + Set("Base", "GateofOlympus/ReelFreeSpin5", "Reel", base.GateofOlympusReelFreeSpin5Reel) + Set("Base", "GateofOlympus/ReelFreeSpin5", "Weight", base.GateofOlympusReelFreeSpin5Weight) + Set("Base", "GateofOlympus/ReelFreeSpin", "Range", base.GateofOlympusReelFreeSpinRange) + Set("Base", "GateofOlympus/ReelFreeSpin", "Reel", base.GateofOlympusReelFreeSpinReel) + Set("Base", "GateofOlympus/ReelFreeSpin", "Weight", base.GateofOlympusReelFreeSpinWeight) + Set("Base", "GateofOlympus/Scatter", "Default", base.GateofOlympusScatter) + Set("Base", "GateofOlympus/Symbol", "BetRatio", base.GateofOlympusSymbolBetRatio) + Set("Base", "GateofOlympus/Symbol", "Default", base.GateofOlympusSymbol) + Set("Base", "Matrix/FeaturesForm15X1TypeA", "Default", base.MatrixFeaturesForm15X1TypeA) + Set("Base", "Matrix/FeaturesForm19X1TypeA", "Default", base.MatrixFeaturesForm19X1TypeA) + Set("Base", "Matrix/FeaturesForm20X1TypeA", "Default", base.MatrixFeaturesForm20X1TypeA) + Set("Base", "Matrix/FeaturesForm25X1TypeA", "Default", base.MatrixFeaturesForm25X1TypeA) + Set("Base", "Matrix/FeaturesForm30X1TypeA", "Default", base.MatrixFeaturesForm30X1TypeA) + Set("Base", "Matrix/FeaturesForm35X1TypeA", "Default", base.MatrixFeaturesForm35X1TypeA) + Set("Base", "Matrix/FeaturesForm40X1", "Default", base.MatrixFeaturesForm40X1) + Set("Base", "Matrix/FeaturesForm40X1TypeA", "Default", base.MatrixFeaturesForm40X1TypeA) + Set("Base", "Matrix/FeaturesForm7X1TypeA", "Default", base.MatrixFeaturesForm7X1TypeA) + Set("Base", "Matrix/Line100Form12X5TypeA", "Default", base.MatrixLine100Form12X5TypeA) + Set("Base", "Matrix/Line100Form6X5TypeA", "Default", base.MatrixLine100Form6X5TypeA) + Set("Base", "Matrix/Line10Form343TypeA", "Default", base.MatrixLine10Form343TypeA) + Set("Base", "Matrix/Line10Form3X5TypeA", "Default", base.MatrixLine10Form3X5TypeA) + Set("Base", "Matrix/Line1Form3X3TypeA", "Default", base.MatrixLine1Form3X3TypeA) + Set("Base", "Matrix/Line1Form3X3TypeB", "Default", base.MatrixLine1Form3X3TypeB) + Set("Base", "Matrix/Line1Form5X5TypeA", "Default", base.MatrixLine1Form5X5TypeA) + Set("Base", "Matrix/Line20Form3X5TypeA", "Default", base.MatrixLine20Form3X5TypeA) + Set("Base", "Matrix/Line25Form36666TypeA", "Default", base.MatrixLine25Form36666TypeA) + Set("Base", "Matrix/Line25Form3X5TypeA", "Default", base.MatrixLine25Form3X5TypeA) + Set("Base", "Matrix/Line25Form3X5TypeB", "Default", base.MatrixLine25Form3X5TypeB) + Set("Base", "Matrix/Line25Form3X5TypeC", "Default", base.MatrixLine25Form3X5TypeC) + Set("Base", "Matrix/Line25Form3X5TypeD", "Default", base.MatrixLine25Form3X5TypeD) + Set("Base", "Matrix/Line25Form3X5TypeE", "Default", base.MatrixLine25Form3X5TypeE) + Set("Base", "Matrix/Line30Form3X5TypeA", "Default", base.MatrixLine30Form3X5TypeA) + Set("Base", "Matrix/Line30Form3X5TypeB", "Default", base.MatrixLine30Form3X5TypeB) + Set("Base", "Matrix/Line30Form3X5TypeC", "Default", base.MatrixLine30Form3X5TypeC) + Set("Base", "Matrix/Line30Form3X5TypeD", "Default", base.MatrixLine30Form3X5TypeD) + Set("Base", "Matrix/Line30Form3X5TypeE", "Default", base.MatrixLine30Form3X5TypeE) + Set("Base", "Matrix/Line30Form3X6TypeA", "Default", base.MatrixLine30Form3X6TypeA) + Set("Base", "Matrix/Line30Form4X5TypeA", "Default", base.MatrixLine30Form4X5TypeA) + Set("Base", "Matrix/Line30Form4X5TypeB", "Default", base.MatrixLine30Form4X5TypeB) + Set("Base", "Matrix/Line3Form3X3TypeA", "Default", base.MatrixLine3Form3X3TypeA) + Set("Base", "Matrix/Line40Form34543TypeA", "Default", base.MatrixLine40Form34543TypeA) + Set("Base", "Matrix/Line40Form3X5TypeA", "Default", base.MatrixLine40Form3X5TypeA) + Set("Base", "Matrix/Line40Form3X5TypeB", "Default", base.MatrixLine40Form3X5TypeB) + Set("Base", "Matrix/Line40Form3X5TypeC", "Default", base.MatrixLine40Form3X5TypeC) + Set("Base", "Matrix/Line40Form3X5TypeD", "Default", base.MatrixLine40Form3X5TypeD) + Set("Base", "Matrix/Line40Form4X5TypeA", "Default", base.MatrixLine40Form4X5TypeA) + Set("Base", "Matrix/Line40Form4X5TypeB", "Default", base.MatrixLine40Form4X5TypeB) + Set("Base", "Matrix/Line40Form4X5TypeC", "Default", base.MatrixLine40Form4X5TypeC) + Set("Base", "Matrix/Line40Form4X6TypeA", "Default", base.MatrixLine40Form4X6TypeA) + Set("Base", "Matrix/Line50Form3X5TypeA", "Default", base.MatrixLine50Form3X5TypeA) + Set("Base", "Matrix/Line50Form3X5TypeB", "Default", base.MatrixLine50Form3X5TypeB) + Set("Base", "Matrix/Line50Form3X5TypeC", "Default", base.MatrixLine50Form3X5TypeC) + Set("Base", "Matrix/Line50Form3X5TypeD", "Default", base.MatrixLine50Form3X5TypeD) + Set("Base", "Matrix/Line50Form3X5TypeE", "Default", base.MatrixLine50Form3X5TypeE) + Set("Base", "Matrix/Line50Form3X5TypeF", "Default", base.MatrixLine50Form3X5TypeF) + Set("Base", "Matrix/Line50Form3X5TypeG", "Default", base.MatrixLine50Form3X5TypeG) + Set("Base", "Matrix/Line50Form3X5TypeH", "Default", base.MatrixLine50Form3X5TypeH) + Set("Base", "Matrix/Line50Form45454TypeA", "Default", base.MatrixLine50Form45454TypeA) + Set("Base", "Matrix/Line50Form4X5TypeA", "Default", base.MatrixLine50Form4X5TypeA) + Set("Base", "Matrix/Line50Form4X5TypeB", "Default", base.MatrixLine50Form4X5TypeB) + Set("Base", "Matrix/Line50Form4X5TypeC", "Default", base.MatrixLine50Form4X5TypeC) + Set("Base", "Matrix/Line50Form4X5TypeD", "Default", base.MatrixLine50Form4X5TypeD) + Set("Base", "Matrix/Line50Form4X5TypeE", "Default", base.MatrixLine50Form4X5TypeE) + Set("Base", "Matrix/Line50Form4X5TypeF", "Default", base.MatrixLine50Form4X5TypeF) + Set("Base", "Matrix/Line50Form4X6TypeA", "Default", base.MatrixLine50Form4X6TypeA) + Set("Base", "Matrix/Line50Form5X5TypeA", "Default", base.MatrixLine50Form5X5TypeA) + Set("Base", "Matrix/Line50Form5X5TypeB", "Default", base.MatrixLine50Form5X5TypeB) + Set("Base", "Matrix/Line50Form5X5TypeC", "Default", base.MatrixLine50Form5X5TypeC) + Set("Base", "Matrix/Line50Form6X5TypeA", "Default", base.MatrixLine50Form6X5TypeA) + Set("Base", "Matrix/Line5Form3X3TypeA", "Default", base.MatrixLine5Form3X3TypeA) + Set("Base", "Matrix/Line5Form3X3TypeB", "Default", base.MatrixLine5Form3X3TypeB) + Set("Base", "Matrix/Line60Form33633TypeA", "Default", base.MatrixLine60Form33633TypeA) + Set("Base", "Matrix/Line60Form8X5TypeA", "Default", base.MatrixLine60Form8X5TypeA) + Set("Base", "Matrix/Line65Form6X5TypeA", "Default", base.MatrixLine65Form6X5TypeA) + Set("Base", "Matrix/Line70Form9X5TypeA", "Default", base.MatrixLine70Form9X5TypeA) + Set("Base", "Matrix/Line75Form5X6TypeA", "Default", base.MatrixLine75Form5X6TypeA) + Set("Base", "Matrix/Line75Form6X5TypeA", "Default", base.MatrixLine75Form6X5TypeA) + Set("Base", "Matrix/Line80Form10X5TypeA", "Default", base.MatrixLine80Form10X5TypeA) + Set("Base", "Matrix/Line80Form3X5TypeA", "Default", base.MatrixLine80Form3X5TypeA) + Set("Base", "Matrix/Line80Form4X6TypeA", "Default", base.MatrixLine80Form4X6TypeA) + Set("Base", "Matrix/Line80Form7X5TypeA", "Default", base.MatrixLine80Form7X5TypeA) + Set("Base", "Matrix/Line90Form11X5TypeA", "Default", base.MatrixLine90Form11X5TypeA) + Set("Base", "Matrix/Line95Form8X5TypeA", "Default", base.MatrixLine95Form8X5TypeA) + Set("Base", "Matrix/MatchForm7X7TypeA", "Default", base.MatrixMatchForm7X7TypeA) + Set("Base", "Matrix/SameForm5X6TypeA", "Default", base.MatrixSameForm5X6TypeA) + Set("Base", "Matrix/SameForm5X6TypeB", "Default", base.MatrixSameForm5X6TypeB) + Set("Base", "Matrix/WaysForm333331", "Default", base.MatrixWaysForm333331) + Set("Base", "Matrix/WaysForm33555", "Default", base.MatrixWaysForm33555) + Set("Base", "Matrix/WaysForm344444", "Default", base.MatrixWaysForm344444) + Set("Base", "Matrix/WaysForm3X5TypeA", "Default", base.MatrixWaysForm3X5TypeA) + Set("Base", "Matrix/WaysForm44668", "Default", base.MatrixWaysForm44668) + Set("Base", "Matrix/WaysForm4X5TypeA", "Default", base.MatrixWaysForm4X5TypeA) + Set("Base", "Matrix/WaysForm4X5TypeB", "Default", base.MatrixWaysForm4X5TypeB) + Set("Base", "OptGroup", "Default", base.OptGroup) + Set("Base", "PrizeModel/PrizeModelTypeA", "Default", base.PrizeModelPrizeModelTypeA) + Set("Base", "PrizeModel/PrizeModelTypeB", "Default", base.PrizeModelPrizeModelTypeB) + Set("Base", "Simulator", "FSMultiLevel", base.SimulatorFSMultiLevel) + Set("Base", "Simulator", "MultiLevel", base.SimulatorMultiLevel) + Set("Base", "Test/Bet", "BetChangeList", base.TestBetBetChangeList) + Set("Base", "Test/Bet", "BetLevel", base.TestBetBetLevel) + Set("Base", "Test/Bet", "BetLine", base.TestBetBetLine) + Set("Base", "Test/Bet", "BetSize", base.TestBetBetSize) + Set("Base", "Test/Bet", "FirstBet", base.TestBetFirstBet) + Set("Base", "Test/Formation", "Default", base.TestFormation) + Set("Base", "Test/Map", "RTPMode", base.TestMapRTPMode) + Set("Base", "Test/Random", "Weight", base.TestRandomWeight) + Set("Base", "Test/ReelBaseSpin", "Range", base.TestReelBaseSpinRange) + Set("Base", "Test/ReelBaseSpin", "Reel", base.TestReelBaseSpinReel) + Set("Base", "Test/ReelBaseSpin", "Weight", base.TestReelBaseSpinWeight) + Set("Base", "Test/Symbol", "BetRatio", base.TestSymbolBetRatio) + Set("Base", "Test/Symbol", "Default", base.TestSymbol) +} + +func LinksMapping() { + Link("CashMania/MatrixLine1Form5X5TypeA", "Default", "Matrix/Line1Form5X5TypeA", "Default") + Link("CashMania/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("CashMania/ReelBaseSpin", "Weight/1", "CashMania/ReelBaseSpin", "Weight") + Link("CashMania/ReelBaseSpin", "Weight/2", "CashMania/ReelBaseSpin", "Weight") + Link("CashMania/ReelBaseSpin", "Weight/3", "CashMania/ReelBaseSpin", "Weight") + Link("FortuneDragon/MatrixLine5Form3X3TypeB", "Default", "Matrix/Line5Form3X3TypeB", "Default") + Link("FortuneDragon/PrizeModel", "Default", "PrizeModel/PrizeModelTypeA", "Default") + Link("FortuneDragon/ReelBaseSpin", "Weight/1", "FortuneDragon/ReelBaseSpin", "Weight") + Link("FortuneDragon/ReelBaseSpin", "Weight/2", "FortuneDragon/ReelBaseSpin", "Weight") + Link("FortuneDragon/ReelBaseSpin", "Weight/3", "FortuneDragon/ReelBaseSpin", "Weight") + Link("FortuneMouse/MatrixLine5Form3X3TypeB", "Default", "Matrix/Line5Form3X3TypeB", "Default") + Link("FortuneMouse/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("FortuneMouse/ReelBaseSpin", "Weight/1", "FortuneMouse/ReelBaseSpin", "Weight") + Link("FortuneMouse/ReelBaseSpin", "Weight/2", "FortuneMouse/ReelBaseSpin", "Weight") + Link("FortuneMouse/ReelBaseSpin", "Weight/3", "FortuneMouse/ReelBaseSpin", "Weight") + Link("FortuneOx/MatrixLine10Form343TypeA", "Default", "Matrix/Line10Form343TypeA", "Default") + Link("FortuneOx/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("FortuneOx/ReelBaseSpin", "Weight/1", "FortuneOx/ReelBaseSpin", "Weight") + Link("FortuneOx/ReelBaseSpin", "Weight/2", "FortuneOx/ReelBaseSpin", "Weight") + Link("FortuneOx/ReelBaseSpin", "Weight/3", "FortuneOx/ReelBaseSpin", "Weight") + Link("FortuneRabbit/MatrixLine10Form343TypeA", "Default", "Matrix/Line10Form343TypeA", "Default") + Link("FortuneRabbit/Others", "Default/1", "FortuneRabbit/Others", "Default") + Link("FortuneRabbit/Others", "Default/2", "FortuneRabbit/Others", "RTP80") + Link("FortuneRabbit/Others", "Default/3", "FortuneRabbit/Others", "RTP120") + Link("FortuneRabbit/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("FortuneRabbit/ReelBaseSpin", "Weight/1", "FortuneRabbit/ReelBaseSpin", "Weight") + Link("FortuneRabbit/ReelBaseSpin", "Weight/2", "FortuneRabbit/ReelBaseSpin", "Weight") + Link("FortuneRabbit/ReelBaseSpin", "Weight/3", "FortuneRabbit/ReelBaseSpin", "Weight") + Link("FortuneTiger/MatrixLine5Form3X3TypeB", "Default", "Matrix/Line5Form3X3TypeB", "Default") + Link("FortuneTiger/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("FortuneTiger/ReelBaseSpin", "Weight/1", "FortuneTiger/ReelBaseSpin", "Weight") + Link("FortuneTiger/ReelBaseSpin", "Weight/2", "FortuneTiger/ReelBaseSpin", "Weight") + Link("FortuneTiger/ReelBaseSpin", "Weight/3", "FortuneTiger/ReelBaseSpin", "Weight") + Link("GatesOfOlympus/MatrixSameForm5X6TypeA", "Default", "Matrix/SameForm5X6TypeA", "Default") + Link("GatesOfOlympus/MatrixSameForm5X6TypeB", "Default", "Matrix/SameForm5X6TypeB", "Default") + Link("GatesOfOlympus/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("GatesOfOlympus/ReelBaseSpin1", "Weight/1", "GatesOfOlympus/ReelBaseSpin1", "Weight") + Link("GatesOfOlympus/ReelBaseSpin1", "Weight/2", "GatesOfOlympus/ReelBaseSpin1", "Weight") + Link("GatesOfOlympus/ReelBaseSpin1", "Weight/3", "GatesOfOlympus/ReelBaseSpin1", "Weight") + Link("Test/MatrixLine1Form3X3TypeA", "Default", "Matrix/Line1Form3X3TypeA", "Default") + Link("Test/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default") + Link("Test/ReelBaseSpin", "Weight/1", "Test/ReelBaseSpin", "Weight") + Link("Test/ReelBaseSpin", "Weight/2", "Test/ReelBaseSpin", "Weight") + Link("Test/ReelBaseSpin", "Weight/3", "Test/ReelBaseSpin", "Weight") +} + +func CategoriesMapping() { + for _, dstCategory := range Categories { + srcCategory := Parent(dstCategory) + if srcCategory == "" { + continue + } + if _, ok := Storage[dstCategory]; !ok { + Storage[dstCategory] = Storage[srcCategory] + } else { + for excelName, excel := range Storage[srcCategory] { + if _, ok := Storage[dstCategory][excelName]; !ok { + Storage[dstCategory][excelName] = excel + } else { + for sheetName, sheet := range Storage[srcCategory][excelName] { + if _, ok := Storage[dstCategory][excelName][sheetName]; !ok { + Storage[dstCategory][excelName][sheetName] = sheet + } + } + } + } + } + } +} + +func Set(packageName string, excelName string, sheetName string, v interface{}) { + if _, ok := Storage[packageName]; !ok { + Storage[packageName] = make(map[string]map[string]interface{}) + OriginStorage[packageName] = make(map[string]map[string]interface{}) + } + if _, ok := Storage[packageName][excelName]; !ok { + Storage[packageName][excelName] = make(map[string]interface{}) + OriginStorage[packageName][excelName] = make(map[string]interface{}) + } + Storage[packageName][excelName][sheetName] = v + OriginStorage[packageName][excelName][sheetName] = v +} + +func Parent(packageName string) string { + if packageName == "Base" { + return "" + } + strs := strings.Split(packageName, "_") + if len(strs) == 1 { + return "Base" + } else { + return strs[0] + } +} + +func Has(packageName string, excelName string, sheetName string) bool { + if _, ok := Storage[packageName]; !ok { + return false + } + if _, ok := Storage[packageName][excelName]; !ok { + return false + } + if _, ok := Storage[packageName][excelName][sheetName]; !ok { + return false + } + return true +} + +func Find(packageName string, excelName string, sheetName string) interface{} { + for { + if packageName == "" { + return nil + } + if !Has(packageName, excelName, sheetName) { + packageName = Parent(packageName) + continue + } + return Storage[packageName][excelName][sheetName] + } +} + +func Link(dstExcelName string, dstSheetName string, srcExcelName string, srcSheetName string) { + for _, category := range Categories { + Set(category, dstExcelName, dstSheetName, Find(category, srcExcelName, srcSheetName)) + } +} + +func Load(dataMap map[string]string, name string, v interface{}) { + if _, ok := dataMap[name]; !ok { + return + } + if err := json.Unmarshal([]byte(dataMap[name]), v); err != nil { + panic(err) + } +} + diff --git a/gamesrv/slotspkg/internal/exported/excel2go/structs/structs.go b/gamesrv/slotspkg/internal/exported/excel2go/structs/structs.go new file mode 100644 index 0000000..8ee1e34 --- /dev/null +++ b/gamesrv/slotspkg/internal/exported/excel2go/structs/structs.go @@ -0,0 +1,854 @@ +// Package structs +package structs + +import ( + "fmt" + "math/big" + "time" +) + +var timeLocation = time.FixedZone("SYS", 0) + +func NewTime(year, month, day, hour, minute, second int) *time.Time { + tm := time.Date(year, time.Month(month), day, hour, minute, second, 0, timeLocation) + return &tm +} + +func NewBigInt(s string) *big.Int { + i := new(big.Int) + _, ok := i.SetString(s, 10) + if !ok { + panic(fmt.Errorf("big int:%s error in excel", s)) + } + return i +} + +func NewBigFloat(s string) *big.Float { + f := new(big.Float) + _, ok := f.SetString(s) + if !ok { + panic(fmt.Errorf("big float:%s error in excel", s)) + } + return f +} + +func NewBigRat(s string) *big.Rat { + r := new(big.Rat) + _, ok := r.SetString(s) + if !ok { + panic(fmt.Errorf("big rat:%s error in excel", s)) + } + return r +} + +type ( + // BetChangeList comment + BetChangeList struct { + Index int64 + BetChangeList float64 + BetSizeIndex int64 + BetLevelIndex int64 + } + // BetLevel comment + BetLevel struct { + Index int64 + BetLevel int64 + } + // BetLine comment + BetLine struct { + Index int64 + BetLine int64 + } + // BetSize comment + BetSize struct { + Index int64 + BetSize int64 + } + // CashManiaMidItemInfo comment + CashManiaMidItemInfo struct { + Index int64 + ItemID int64 + Multi int64 + FreeSpinCount int64 + } + // CashManiaOthers comment + CashManiaOthers struct { + BaseWinPro float64 + FreeWinPro float64 + MaxWin int64 + WinNudgePro float64 + WinRespinPro float64 + NoWinNudgePro float64 + NoWinRespinPro float64 + } + // CashManiaRandomItemWeight comment + CashManiaRandomItemWeight struct { + ID int64 + ItemID int64 + BaseWeight float64 + FreeWeight float64 + } + // FirstBet comment + FirstBet struct { + Index int64 + BetSizeIndex int64 + BetLevelIndex int64 + } + // Formation comment + Formation struct { + SpinType int64 + NodeType string + ID int64 + SeqID int64 + Reel string + Matrix string + Symbol string + FirstInitMethod int64 + OtherInitMethod int64 + FirstInitSymbols []int64 + OtherInitSymbols []int64 + } + // FortuneDragonBaseMultiplier comment + FortuneDragonBaseMultiplier struct { + WinRateMin float64 + WinRateMax float64 + ItemIds []int64 + MultiplierWeights []int64 + } + // FortuneDragonFreeMultiplier comment + FortuneDragonFreeMultiplier struct { + ItemID int64 + Weight int64 + } + // FortuneDragonFreeMultiplierCount comment + FortuneDragonFreeMultiplierCount struct { + MultiplierCount int64 + Weight int64 + } + // FortuneDragonOthers comment + FortuneDragonOthers struct { + FreespinTriggerPro float64 + FreeSpinCount int64 + MaxWin int64 + SureWinFreespinTriggerPro float64 + SureWinBetMultiplier int64 + } + // FortuneMouseOthers comment + FortuneMouseOthers struct { + RespinTriggerPro float64 + MaxWin int64 + ExtraWin int64 + } + // FortuneOxOthers comment + FortuneOxOthers struct { + RespinTriggerPro float64 + Multiplier int64 + MaxWin int64 + } + // FortuneRabbitCashPrizeWeight comment + FortuneRabbitCashPrizeWeight struct { + ID int64 + PrizeValue float64 + Weight float64 + NoWinWeight float64 + } + // FortuneRabbitForceCashCountWeight comment + FortuneRabbitForceCashCountWeight struct { + ID int64 + Count int64 + Weight float64 + } + // FortuneRabbitOthers comment + FortuneRabbitOthers struct { + FreespinTriggerPro float64 + FreeSpinCount int64 + MaxWin int64 + } + // GateofOlympusMultiplier comment + GateofOlympusMultiplier struct { + Multiple int64 + ID int64 + Weights []int64 + } + // GateofOlympusReelChoose comment + GateofOlympusReelChoose struct { + ID int64 + IsFreeSpin bool + NodeType string + Weights []int64 + } + // JackpotPrize comment + JackpotPrize struct { + PrizeType int64 + PipeIn int64 + StartPoint int64 + IsRolling bool + RollingTime int64 + ReducePercent int64 + JackpotLimitByTotalBet int64 + } + // MapRTPMode comment + MapRTPMode struct { + ID int64 + TypeWeight map[int64]*MapRTPModeTypeWeight + Desc string + Rtp float64 + } + // MapRTPModeTypeWeight comment + MapRTPModeTypeWeight struct { + ID int64 + Weight int64 + } + // Matrix comment + Matrix struct { + Type string + LinkType int64 + Direction int64 + LineCount int64 + Lines [][]int64 + Form []int64 + } + // OptAuthenticate comment + OptAuthenticate struct { + Flag string + Order int64 + ValidValues []string + InvalidValues []string + } + // OptGroup comment + OptGroup struct { + ID int64 + Batch int64 + IsNewPlayer bool + StartTime string + EndTime string + Affect []int64 + Weight []int64 + } + // PrizeModel comment + PrizeModel struct { + ID int64 + AniType string + MinMultiple int64 + MaxMultiple int64 + } + // Scatter comment + Scatter struct { + ScatterCount int64 + FreeSpinBouts int64 + FreeSpinExtraBouts int64 + BasePayrate int64 + FreePayrate int64 + } + // ScatterFreeChoose comment + ScatterFreeChoose struct { + ID int64 + FreeSpinTimes int64 + TouchTimesMin int64 + TouchTimesMax int64 + } + // SimulatorFSMultiLevel comment + SimulatorFSMultiLevel struct { + Level int64 + Min int64 + Max int64 + } + // SuperStackWeight comment + SuperStackWeight struct { + ID int64 + ItemID int64 + Weight float64 + } + // Symbol comment + Symbol struct { + ID int64 + Name string + IsWild bool + Group []int64 + PayRate []int64 + ClientOrder int64 + ClientDsc string + } + // SymbolBetRatio comment + SymbolBetRatio struct { + BetRatio float64 + } + // TestRandomWeight comment + TestRandomWeight struct { + ID int64 + Time float64 + Weight float64 + } + // Text comment + Text struct { + Type string + Texts []*TextTexts + } + // TextTexts comment + TextTexts struct { + Lang string + Text string + } + // Vector comment + Vector struct { + Choice int64 + Ratio float64 + Vector []int64 + Procedure string + } + // VectorDemand comment + VectorDemand struct { + Choice int64 + MinRatio float64 + MaxRatio float64 + Procedure string + Count int64 + } + // VectorForceWin comment + VectorForceWin struct { + Choice int64 + MinRatio float64 + MaxRatio float64 + Weight float64 + } + // CashManiaBetBetChangeList comment + CashManiaBetBetChangeList = BetChangeList + + // CashManiaBetBetLevel comment + CashManiaBetBetLevel = BetLevel + + // CashManiaBetBetLine comment + CashManiaBetBetLine = BetLine + + // CashManiaBetBetSize comment + CashManiaBetBetSize = BetSize + + // CashManiaBetFirstBet comment + CashManiaBetFirstBet = FirstBet + + // CashManiaFormation comment + CashManiaFormation = Formation + + // CashManiaMapRTPMode comment + CashManiaMapRTPMode = MapRTPMode + + // CashManiaMapRTPModeTypeWeight comment + CashManiaMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // CashManiaRandomMidWeight comment + CashManiaRandomMidWeight = CashManiaRandomItemWeight + + // CashManiaSymbol comment + CashManiaSymbol = Symbol + + // CashManiaSymbolBetRatio comment + CashManiaSymbolBetRatio = SymbolBetRatio + + // CashManiaWinItemWeight comment + CashManiaWinItemWeight = CashManiaRandomItemWeight + + // CashManiaWinMidWeight comment + CashManiaWinMidWeight = CashManiaRandomItemWeight + + // FortuneDragonBetBetChangeList comment + FortuneDragonBetBetChangeList = BetChangeList + + // FortuneDragonBetBetLevel comment + FortuneDragonBetBetLevel = BetLevel + + // FortuneDragonBetBetLine comment + FortuneDragonBetBetLine = BetLine + + // FortuneDragonBetBetSize comment + FortuneDragonBetBetSize = BetSize + + // FortuneDragonBetFirstBet comment + FortuneDragonBetFirstBet = FirstBet + + // FortuneDragonFormation comment + FortuneDragonFormation = Formation + + // FortuneDragonMapRTPMode comment + FortuneDragonMapRTPMode = MapRTPMode + + // FortuneDragonMapRTPModeTypeWeight comment + FortuneDragonMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // FortuneDragonSymbol comment + FortuneDragonSymbol = Symbol + + // FortuneDragonSymbolBetRatio comment + FortuneDragonSymbolBetRatio = SymbolBetRatio + + // FortuneMouseBetBetChangeList comment + FortuneMouseBetBetChangeList = BetChangeList + + // FortuneMouseBetBetLevel comment + FortuneMouseBetBetLevel = BetLevel + + // FortuneMouseBetBetLine comment + FortuneMouseBetBetLine = BetLine + + // FortuneMouseBetBetSize comment + FortuneMouseBetBetSize = BetSize + + // FortuneMouseBetFirstBet comment + FortuneMouseBetFirstBet = FirstBet + + // FortuneMouseFormation comment + FortuneMouseFormation = Formation + + // FortuneMouseMapRTPMode comment + FortuneMouseMapRTPMode = MapRTPMode + + // FortuneMouseMapRTPModeTypeWeight comment + FortuneMouseMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // FortuneMouseSuperStackWeight comment + FortuneMouseSuperStackWeight = SuperStackWeight + + // FortuneMouseSymbol comment + FortuneMouseSymbol = Symbol + + // FortuneMouseSymbolBetRatio comment + FortuneMouseSymbolBetRatio = SymbolBetRatio + + // FortuneOxBetBetChangeList comment + FortuneOxBetBetChangeList = BetChangeList + + // FortuneOxBetBetLevel comment + FortuneOxBetBetLevel = BetLevel + + // FortuneOxBetBetLine comment + FortuneOxBetBetLine = BetLine + + // FortuneOxBetBetSize comment + FortuneOxBetBetSize = BetSize + + // FortuneOxBetFirstBet comment + FortuneOxBetFirstBet = FirstBet + + // FortuneOxFormation comment + FortuneOxFormation = Formation + + // FortuneOxMapRTPMode comment + FortuneOxMapRTPMode = MapRTPMode + + // FortuneOxMapRTPModeTypeWeight comment + FortuneOxMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // FortuneOxSuperStack1Weight comment + FortuneOxSuperStack1Weight = SuperStackWeight + + // FortuneOxSuperStack2Weight comment + FortuneOxSuperStack2Weight = SuperStackWeight + + // FortuneOxSymbol comment + FortuneOxSymbol = Symbol + + // FortuneOxSymbolBetRatio comment + FortuneOxSymbolBetRatio = SymbolBetRatio + + // FortuneRabbitBetBetChangeList comment + FortuneRabbitBetBetChangeList = BetChangeList + + // FortuneRabbitBetBetLevel comment + FortuneRabbitBetBetLevel = BetLevel + + // FortuneRabbitBetBetLine comment + FortuneRabbitBetBetLine = BetLine + + // FortuneRabbitBetBetSize comment + FortuneRabbitBetBetSize = BetSize + + // FortuneRabbitBetFirstBet comment + FortuneRabbitBetFirstBet = FirstBet + + // FortuneRabbitFormation comment + FortuneRabbitFormation = Formation + + // FortuneRabbitMapRTPMode comment + FortuneRabbitMapRTPMode = MapRTPMode + + // FortuneRabbitMapRTPModeTypeWeight comment + FortuneRabbitMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // FortuneRabbitOthersRTP120 comment + FortuneRabbitOthersRTP120 = FortuneRabbitOthers + + // FortuneRabbitOthersRTP80 comment + FortuneRabbitOthersRTP80 = FortuneRabbitOthers + + // FortuneRabbitSymbol comment + FortuneRabbitSymbol = Symbol + + // FortuneRabbitSymbolBetRatio comment + FortuneRabbitSymbolBetRatio = SymbolBetRatio + + // FortuneTigerBetBetChangeList comment + FortuneTigerBetBetChangeList = BetChangeList + + // FortuneTigerBetBetLevel comment + FortuneTigerBetBetLevel = BetLevel + + // FortuneTigerBetBetLine comment + FortuneTigerBetBetLine = BetLine + + // FortuneTigerBetBetSize comment + FortuneTigerBetBetSize = BetSize + + // FortuneTigerBetFirstBet comment + FortuneTigerBetFirstBet = FirstBet + + // FortuneTigerFormation comment + FortuneTigerFormation = Formation + + // FortuneTigerMapRTPMode comment + FortuneTigerMapRTPMode = MapRTPMode + + // FortuneTigerMapRTPModeTypeWeight comment + FortuneTigerMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // FortuneTigerOthers comment + FortuneTigerOthers = FortuneOxOthers + + // FortuneTigerSuperStackWeight comment + FortuneTigerSuperStackWeight = SuperStackWeight + + // FortuneTigerSymbol comment + FortuneTigerSymbol = Symbol + + // FortuneTigerSymbolBetRatio comment + FortuneTigerSymbolBetRatio = SymbolBetRatio + + // GateofOlympusBetBetChangeList comment + GateofOlympusBetBetChangeList = BetChangeList + + // GateofOlympusBetBetLevel comment + GateofOlympusBetBetLevel = BetLevel + + // GateofOlympusBetBetLine comment + GateofOlympusBetBetLine = BetLine + + // GateofOlympusBetBetSize comment + GateofOlympusBetBetSize = BetSize + + // GateofOlympusBetFirstBet comment + GateofOlympusBetFirstBet = FirstBet + + // GateofOlympusFormation comment + GateofOlympusFormation = Formation + + // GateofOlympusMapRTPMode comment + GateofOlympusMapRTPMode = MapRTPMode + + // GateofOlympusMapRTPModeTypeWeight comment + GateofOlympusMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // GateofOlympusMultiplierKeyID comment + GateofOlympusMultiplierKeyID = GateofOlympusMultiplier + + // GateofOlympusScatter comment + GateofOlympusScatter = Scatter + + // GateofOlympusSymbol comment + GateofOlympusSymbol = Symbol + + // GateofOlympusSymbolBetRatio comment + GateofOlympusSymbolBetRatio = SymbolBetRatio + + // MatrixFeaturesForm15X1TypeA comment + MatrixFeaturesForm15X1TypeA = Matrix + + // MatrixFeaturesForm19X1TypeA comment + MatrixFeaturesForm19X1TypeA = Matrix + + // MatrixFeaturesForm20X1TypeA comment + MatrixFeaturesForm20X1TypeA = Matrix + + // MatrixFeaturesForm25X1TypeA comment + MatrixFeaturesForm25X1TypeA = Matrix + + // MatrixFeaturesForm30X1TypeA comment + MatrixFeaturesForm30X1TypeA = Matrix + + // MatrixFeaturesForm35X1TypeA comment + MatrixFeaturesForm35X1TypeA = Matrix + + // MatrixFeaturesForm40X1 comment + MatrixFeaturesForm40X1 = Matrix + + // MatrixFeaturesForm40X1TypeA comment + MatrixFeaturesForm40X1TypeA = Matrix + + // MatrixFeaturesForm7X1TypeA comment + MatrixFeaturesForm7X1TypeA = Matrix + + // MatrixLine100Form12X5TypeA comment + MatrixLine100Form12X5TypeA = Matrix + + // MatrixLine100Form6X5TypeA comment + MatrixLine100Form6X5TypeA = Matrix + + // MatrixLine10Form343TypeA comment + MatrixLine10Form343TypeA = Matrix + + // MatrixLine10Form3X5TypeA comment + MatrixLine10Form3X5TypeA = Matrix + + // MatrixLine1Form3X3TypeA comment + MatrixLine1Form3X3TypeA = Matrix + + // MatrixLine1Form3X3TypeB comment + MatrixLine1Form3X3TypeB = Matrix + + // MatrixLine1Form5X5TypeA comment + MatrixLine1Form5X5TypeA = Matrix + + // MatrixLine20Form3X5TypeA comment + MatrixLine20Form3X5TypeA = Matrix + + // MatrixLine25Form36666TypeA comment + MatrixLine25Form36666TypeA = Matrix + + // MatrixLine25Form3X5TypeA comment + MatrixLine25Form3X5TypeA = Matrix + + // MatrixLine25Form3X5TypeB comment + MatrixLine25Form3X5TypeB = Matrix + + // MatrixLine25Form3X5TypeC comment + MatrixLine25Form3X5TypeC = Matrix + + // MatrixLine25Form3X5TypeD comment + MatrixLine25Form3X5TypeD = Matrix + + // MatrixLine25Form3X5TypeE comment + MatrixLine25Form3X5TypeE = Matrix + + // MatrixLine30Form3X5TypeA comment + MatrixLine30Form3X5TypeA = Matrix + + // MatrixLine30Form3X5TypeB comment + MatrixLine30Form3X5TypeB = Matrix + + // MatrixLine30Form3X5TypeC comment + MatrixLine30Form3X5TypeC = Matrix + + // MatrixLine30Form3X5TypeD comment + MatrixLine30Form3X5TypeD = Matrix + + // MatrixLine30Form3X5TypeE comment + MatrixLine30Form3X5TypeE = Matrix + + // MatrixLine30Form3X6TypeA comment + MatrixLine30Form3X6TypeA = Matrix + + // MatrixLine30Form4X5TypeA comment + MatrixLine30Form4X5TypeA = Matrix + + // MatrixLine30Form4X5TypeB comment + MatrixLine30Form4X5TypeB = Matrix + + // MatrixLine3Form3X3TypeA comment + MatrixLine3Form3X3TypeA = Matrix + + // MatrixLine40Form34543TypeA comment + MatrixLine40Form34543TypeA = Matrix + + // MatrixLine40Form3X5TypeA comment + MatrixLine40Form3X5TypeA = Matrix + + // MatrixLine40Form3X5TypeB comment + MatrixLine40Form3X5TypeB = Matrix + + // MatrixLine40Form3X5TypeC comment + MatrixLine40Form3X5TypeC = Matrix + + // MatrixLine40Form3X5TypeD comment + MatrixLine40Form3X5TypeD = Matrix + + // MatrixLine40Form4X5TypeA comment + MatrixLine40Form4X5TypeA = Matrix + + // MatrixLine40Form4X5TypeB comment + MatrixLine40Form4X5TypeB = Matrix + + // MatrixLine40Form4X5TypeC comment + MatrixLine40Form4X5TypeC = Matrix + + // MatrixLine40Form4X6TypeA comment + MatrixLine40Form4X6TypeA = Matrix + + // MatrixLine50Form3X5TypeA comment + MatrixLine50Form3X5TypeA = Matrix + + // MatrixLine50Form3X5TypeB comment + MatrixLine50Form3X5TypeB = Matrix + + // MatrixLine50Form3X5TypeC comment + MatrixLine50Form3X5TypeC = Matrix + + // MatrixLine50Form3X5TypeD comment + MatrixLine50Form3X5TypeD = Matrix + + // MatrixLine50Form3X5TypeE comment + MatrixLine50Form3X5TypeE = Matrix + + // MatrixLine50Form3X5TypeF comment + MatrixLine50Form3X5TypeF = Matrix + + // MatrixLine50Form3X5TypeG comment + MatrixLine50Form3X5TypeG = Matrix + + // MatrixLine50Form3X5TypeH comment + MatrixLine50Form3X5TypeH = Matrix + + // MatrixLine50Form45454TypeA comment + MatrixLine50Form45454TypeA = Matrix + + // MatrixLine50Form4X5TypeA comment + MatrixLine50Form4X5TypeA = Matrix + + // MatrixLine50Form4X5TypeB comment + MatrixLine50Form4X5TypeB = Matrix + + // MatrixLine50Form4X5TypeC comment + MatrixLine50Form4X5TypeC = Matrix + + // MatrixLine50Form4X5TypeD comment + MatrixLine50Form4X5TypeD = Matrix + + // MatrixLine50Form4X5TypeE comment + MatrixLine50Form4X5TypeE = Matrix + + // MatrixLine50Form4X5TypeF comment + MatrixLine50Form4X5TypeF = Matrix + + // MatrixLine50Form4X6TypeA comment + MatrixLine50Form4X6TypeA = Matrix + + // MatrixLine50Form5X5TypeA comment + MatrixLine50Form5X5TypeA = Matrix + + // MatrixLine50Form5X5TypeB comment + MatrixLine50Form5X5TypeB = Matrix + + // MatrixLine50Form5X5TypeC comment + MatrixLine50Form5X5TypeC = Matrix + + // MatrixLine50Form6X5TypeA comment + MatrixLine50Form6X5TypeA = Matrix + + // MatrixLine5Form3X3TypeA comment + MatrixLine5Form3X3TypeA = Matrix + + // MatrixLine5Form3X3TypeB comment + MatrixLine5Form3X3TypeB = Matrix + + // MatrixLine60Form33633TypeA comment + MatrixLine60Form33633TypeA = Matrix + + // MatrixLine60Form8X5TypeA comment + MatrixLine60Form8X5TypeA = Matrix + + // MatrixLine65Form6X5TypeA comment + MatrixLine65Form6X5TypeA = Matrix + + // MatrixLine70Form9X5TypeA comment + MatrixLine70Form9X5TypeA = Matrix + + // MatrixLine75Form5X6TypeA comment + MatrixLine75Form5X6TypeA = Matrix + + // MatrixLine75Form6X5TypeA comment + MatrixLine75Form6X5TypeA = Matrix + + // MatrixLine80Form10X5TypeA comment + MatrixLine80Form10X5TypeA = Matrix + + // MatrixLine80Form3X5TypeA comment + MatrixLine80Form3X5TypeA = Matrix + + // MatrixLine80Form4X6TypeA comment + MatrixLine80Form4X6TypeA = Matrix + + // MatrixLine80Form7X5TypeA comment + MatrixLine80Form7X5TypeA = Matrix + + // MatrixLine90Form11X5TypeA comment + MatrixLine90Form11X5TypeA = Matrix + + // MatrixLine95Form8X5TypeA comment + MatrixLine95Form8X5TypeA = Matrix + + // MatrixMatchForm7X7TypeA comment + MatrixMatchForm7X7TypeA = Matrix + + // MatrixSameForm5X6TypeA comment + MatrixSameForm5X6TypeA = Matrix + + // MatrixSameForm5X6TypeB comment + MatrixSameForm5X6TypeB = Matrix + + // MatrixWaysForm333331 comment + MatrixWaysForm333331 = Matrix + + // MatrixWaysForm33555 comment + MatrixWaysForm33555 = Matrix + + // MatrixWaysForm344444 comment + MatrixWaysForm344444 = Matrix + + // MatrixWaysForm3X5TypeA comment + MatrixWaysForm3X5TypeA = Matrix + + // MatrixWaysForm44668 comment + MatrixWaysForm44668 = Matrix + + // MatrixWaysForm4X5TypeA comment + MatrixWaysForm4X5TypeA = Matrix + + // MatrixWaysForm4X5TypeB comment + MatrixWaysForm4X5TypeB = Matrix + + // PrizeModelPrizeModelTypeA comment + PrizeModelPrizeModelTypeA = PrizeModel + + // PrizeModelPrizeModelTypeB comment + PrizeModelPrizeModelTypeB = PrizeModel + + // SimulatorMultiLevel comment + SimulatorMultiLevel = SimulatorFSMultiLevel + + // TestBetBetChangeList comment + TestBetBetChangeList = BetChangeList + + // TestBetBetLevel comment + TestBetBetLevel = BetLevel + + // TestBetBetLine comment + TestBetBetLine = BetLine + + // TestBetBetSize comment + TestBetBetSize = BetSize + + // TestBetFirstBet comment + TestBetFirstBet = FirstBet + + // TestFormation comment + TestFormation = Formation + + // TestMapRTPMode comment + TestMapRTPMode = MapRTPMode + + // TestMapRTPModeTypeWeight comment + TestMapRTPModeTypeWeight = MapRTPModeTypeWeight + + // TestSymbol comment + TestSymbol = Symbol + + // TestSymbolBetRatio comment + TestSymbolBetRatio = SymbolBetRatio + +) \ No newline at end of file diff --git a/gamesrv/slotspkg/internal/generic/ddb/config.go b/gamesrv/slotspkg/internal/generic/ddb/config.go new file mode 100644 index 0000000..6ecb47d --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/ddb/config.go @@ -0,0 +1,65 @@ +package ddb + +import "github.com/tomas-qstarrs/boost/config" + +type Table struct { + TableName string + IndexName string + PartitionKey string + SortKey string + SortKeyNum string +} + +type Provisioned struct { + ReadCapacityUnits int64 + WriteCapacityUnits int64 +} + +type Endpoint struct { + PartitionID string + URL string + SigningRegion string +} + +type Credentials struct { + AccessKeyID string + SecretAccessKey string + SessionToken string + Source string +} + +type Config struct { + Table Table + Provisioned Provisioned + Endpoint Endpoint + Credentials Credentials + TransactionSize int +} + +func NewConfig() *Config { + return &Config{ + Table: Table{ + TableName: config.GetString("ddb.table.tableName"), + IndexName: config.GetString("ddb.table.indexName"), + PartitionKey: config.GetString("ddb.table.partitionKey"), + SortKey: config.GetString("ddb.table.sortKey"), + SortKeyNum: config.GetString("ddb.table.sortKeyNum"), + }, + Provisioned: Provisioned{ + ReadCapacityUnits: config.GetInt64("ddb.provisioned.readCapacityUnits"), + WriteCapacityUnits: config.GetInt64("ddb.provisioned.writeCapacityUnits"), + }, + Endpoint: Endpoint{ + PartitionID: config.GetString("ddb.endpoint.partitionID"), + URL: config.GetString("ddb.endpoint.url"), + SigningRegion: config.GetString("ddb.endpoint.signingRegion"), + }, + Credentials: Credentials{ + AccessKeyID: config.GetString("ddb.credentials.accessKeyID"), + SecretAccessKey: config.GetString("ddb.credentials.secretAccessKey"), + SessionToken: config.GetString("ddb.credentials.sessionToken"), + Source: config.GetString("ddb.credentials.source"), + }, + TransactionSize: config.GetInt("ddb.transactionSize"), + } +} diff --git a/gamesrv/slotspkg/internal/generic/ddb/ddb.go b/gamesrv/slotspkg/internal/generic/ddb/ddb.go new file mode 100644 index 0000000..6382e35 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/ddb/ddb.go @@ -0,0 +1,113 @@ +package ddb + +import ( + "context" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/dynamodb" + "github.com/tomas-qstarrs/redimo" +) + +type DDB struct { + *Config + dynamodbClient *dynamodb.Client + redimoClient *redimo.Client +} + +func Init() { + ddb.init() +} + +var ddb = &DDB{} + +func (ddb *DDB) init() { + ddb.initConfig() + ddb.initClient() + ddb.initTable() +} + +func (ddb *DDB) initConfig() { + ddb.Config = NewConfig() +} + +func (ddb *DDB) initClient() { + var ( + sdkConfig aws.Config + err error + ) + var options []func(*config.LoadOptions) error + + if ddb.Endpoint.URL != "" || ddb.Endpoint.PartitionID != "" || + ddb.Endpoint.SigningRegion != "" { + options = append(options, config.WithEndpointResolverWithOptions( + aws.EndpointResolverWithOptionsFunc( + func(service, region string, _ ...interface{}) ( + aws.Endpoint, error) { + if service == dynamodb.ServiceID { + return aws.Endpoint{ + URL: ddb.Endpoint.URL, + PartitionID: ddb.Endpoint.PartitionID, + SigningRegion: ddb.Endpoint.SigningRegion, + }, nil + } + return aws.Endpoint{}, &aws.EndpointNotFoundError{} + }, + ), + )) + } + + if ddb.Credentials.AccessKeyID != "" || ddb.Credentials.SecretAccessKey != "" || + ddb.Credentials.SessionToken != "" || ddb.Credentials.Source != "" { + options = append(options, config.WithCredentialsProvider( + aws.CredentialsProviderFunc( + func(_ context.Context) (aws.Credentials, error) { + return aws.Credentials{ + AccessKeyID: ddb.Credentials.AccessKeyID, + SecretAccessKey: ddb.Credentials.SecretAccessKey, + SessionToken: ddb.Credentials.SessionToken, + Source: ddb.Credentials.Source, + }, nil + }, + ), + )) + } + sdkConfig, err = config.LoadDefaultConfig(context.Background(), options...) + if err != nil { + panic(err) + } + + ddb.dynamodbClient = dynamodb.NewFromConfig(sdkConfig) + + redimoClientStruct := redimo.NewClient( + ddb.dynamodbClient, + ).Table( + ddb.Table.TableName, + ).Index( + ddb.Table.IndexName, + ).Attributes( + ddb.Table.PartitionKey, + ddb.Table.SortKey, + ddb.Table.SortKeyNum, + ).TransactionActions( + ddb.TransactionSize, + ) + ddb.redimoClient = &redimoClientStruct +} + +func (ddb *DDB) initTable() { + if ok, err := ddb.redimoClient.ExistsTable(); err != nil { + panic(err) + } else if !ok { + if err := ddb.redimoClient.CreateTable(ddb.Provisioned.ReadCapacityUnits, ddb.Provisioned.WriteCapacityUnits); err != nil { + panic(err) + } + } +} + +func DynamoDBClient() *dynamodb.Client { + return ddb.dynamodbClient +} + +func RedimoClient() *redimo.Client { + return ddb.redimoClient +} diff --git a/gamesrv/slotspkg/internal/generic/errors/errors.go b/gamesrv/slotspkg/internal/generic/errors/errors.go new file mode 100644 index 0000000..1527b6b --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/errors/errors.go @@ -0,0 +1,332 @@ +package errors + +const ( + Nil Code = 0 + + ErrorBegin Code = 999 + iota + EnterErr + SpinErr + JwtErr + FreshCoinErr + ErrorTransactionFailed + + GMIsNotAvailable + UsernameAlreadyExists + UsernameNotExists + PasswordInvalid + InvalidAward + TurntableNotPayUser + TurntableNotEnoughCoin + ErrorDeregistered + ErrorNotImplemented + SettleFuncNotFound + CoinBagNotFound + CoinBagTypeError + CanceledLogin + AccessTypeInvalid + AccessArgsInvalid + AccessIsBanned + UIDRequired + GoogleVerifyFailed + GetGoogleAccessTokenFailed + ProductIDNotMatch + PackageNameInvalid + ReceiptDataInvalid + TransactionIDNotMatch + ConfigTypeError + ConfigRowNoMatch + ConfigKeyNotFound + ConfigInvalidZero + ConfigSheetNotFound + ConfigSheetEmpty + ConfigTimeFormatError + ConfigCategoryNotFound + ConfigExcelNotFound + UIDInvalid + ThemeNotFound + LeakTheme + LeakThemeData + LackOfCoins + NodeNotFound + NextNodeNotFound + FormationNotFound + FeatureNotFound + FeatureTypeNotFound + CustomNotFound + CustomNil + FeatureAlreadyExists + PlayerNotFound + FormationReelWeightNotMatch + FormationSeqIDNotFound + FormationSymbolNotFound + FormationLinkPayIsNotFound + FormationDirectionNotSupport + SymbolsLengthNotEqual + DataInvalidConversion + NewNodeZeroProgress + BetIsZero + InvalidBetIndex + InvalidCoinValueIndex + GameCheatInvalidKey + AirplaneHasRoom + AirplaneHasNoRoom + AirplaneHasNoBet + AirplaneStateInvalid + AirplaneBetCoinNotEnough + AirplaneCarryCoinNotEnough + AirplaneHasJumped + AirplaneCoinNotEnough + AirplaneRoomNotFound + AirplaneBetAmountInvalid + DiceHasRoom + DiceHasNoRoom + DiceStateInvalid + DiceBetCoinNotEnough + DiceBetAmountInvalid + DiceBetPositionInvalid + DiceCarryCoinNotEnough + DoubleHasRoom + DoubleHasNoRoom + DoubleStateInvalid + DoubleBetCoinNotEnough + DoubleBetAmountInvalid + DoubleCarryCoinNotEnough + MinesIsPlaying + MinesIsNotPlaying + MinesOpenDuplicate + MinesStepZero + MinesCoinNotEnough + MinesCarryCoinNotEnough + MinesBetAmountInvalid + MinesCountInvalid + MinesOpenIndexInvalid + BindDeviceAccessIsInvalid + PlayerAlreadyBoundToThirdPlatform + ThirdPlatformAlreadyBoundToPlayer + GoodsIDNotExist + CoinNotEnough + RemoteLogin + ParallelLogin + DataSetInvalid + AuthenticateLoginInvalid + LuckyWheelBetAmountInvalid + LuckyWheelCarryCoinNotEnough + LuckyWheelCoinNotEnough + NotNewbie + DirectInviterExist + InviterUIDCantSelf + InviterUIDInvalid + AirplaneAutoJumpInvalid + DoubleDisplayLimit + ClubHasRoom + ClubHasNoRoom + ClubStateInvalid + ClubBetCoinNotEnough + ClubBetAmountInvalid + ClubBetPositionInvalid + ClubCarryCoinNotEnough + BonusStateInvalid + WeeklyDealsFreeBonusFetched + WeeklyDealsFreeBonusInvalid + LoginRequired + PhoneNumberInvalid // 电话号码格式错误 + PhoneVerifyCodeError // 验证码输入错误 + PhoneVerifyCodeVerified // 验证码已被使用 + PhoneVerifyCodeExpired // 验证码已过期 + PlayerAlreadyBoundToPhoneNumber // 此账号已经绑定了手机号码 + PhoneNumberAlreadyBoundToPlayer // 此手机号码已经被绑定了其他账号 + PhoneVerifyCodeTotalLimit // 验证码使用次数超过总限制 + PhoneVerifyCodeDailyLimit // 验证码使用次数超过每日限制 + PhoneVerifyCodeLimitDuration // 验证码发送太频繁,请稍后再试 + VipCashbackInvalid + VipCashbackNotEnough + VipRewardInvalid + VipRewardFetched + InvalidPhoneMessageType + InnerIDInvalid + PurchaseAuthenticateFailed + PurchaseCloseFailed + BranchError + MemberCardInvalid + PlinkoBetAmountInvalid + PlinkoCarryCoinNotEnough + PlinkoCoinNotEnough + PassGetLevelRewardInvalid + PassNotActivated + SystemNotOpen + CoinNegative + LinearDiceBetAmountInvalid + LinearDiceValueInvalid + LinearDiceCarryCoinNotEnough + LinearDiceCoinNotEnough + VipRewardLocked + PackageNotFound + AbaCashbackInvalid + AccountDelete + + // Add new error above this line + ErrorEnd +) + +var Errors = map[Code]string{ + // Generic + Nil: "Nil", + EnterErr: "EnterErr", + SpinErr: "SpinErr", + JwtErr: "JwtErr", + FreshCoinErr: "FreshCoinErr", + ErrorTransactionFailed: "ErrorTransactionFailed", + GMIsNotAvailable: "GMIsNotAvailable", + UsernameAlreadyExists: "UsernameAlreadyExists", + UsernameNotExists: "UsernameNotExists", + PasswordInvalid: "PasswordInvalid", + InvalidAward: "InvalidAward", + TurntableNotPayUser: "TurntableNotPayUser", + TurntableNotEnoughCoin: "TurntableNotEnoughCoin", + ErrorDeregistered: "ErrorDeregistered", + ErrorNotImplemented: "ErrorNotImplemented", + SettleFuncNotFound: "SettleFuncNotFound", + CoinBagNotFound: "CoinBagNotFound", + CoinBagTypeError: "CoinBagTypeError", + RemoteLogin: "RemoteLogin", + CanceledLogin: "CanceledLogin", + AccessTypeInvalid: "AccessTypeInvalid", + AccessArgsInvalid: "AccessArgsInvalid", + AccessIsBanned: "AccessIsBanned", + UIDRequired: "UIDRequired", + GoogleVerifyFailed: "GoogleVerifyFailed", + GetGoogleAccessTokenFailed: "GetGoogleAccessTokenFailed", + ProductIDNotMatch: "ProductIDNotMatch", + PackageNameInvalid: "PackageNameInvalid", + ReceiptDataInvalid: "ReceiptDataInvalid", + TransactionIDNotMatch: "TransactionIDNotMatch", + ConfigTypeError: "ConfigTypeError", + ConfigRowNoMatch: "ConfigRowNoMatch", + ConfigKeyNotFound: "ConfigKeyNotFound", + ConfigInvalidZero: "ConfigInvalidZero", + ConfigSheetNotFound: "ConfigSheetNotFound", + ConfigSheetEmpty: "ConfigSheetEmpty", + ConfigTimeFormatError: "ConfigTimeFormatError", + ConfigCategoryNotFound: "ConfigCategoryNotFound", + ConfigExcelNotFound: "ConfigExcelNotFound", + UIDInvalid: "UIDInvalid", + ThemeNotFound: "ThemeNotFound", + LeakTheme: "LeakTheme", + LeakThemeData: "LeakThemeData", + LackOfCoins: "LackOfCoins", + NodeNotFound: "NodeNotFound", + NextNodeNotFound: "NextNodeNotFound", + FormationNotFound: "FormationNotFound", + FeatureNotFound: "FeatureNotFound", + FeatureTypeNotFound: "FeatureTypeNotFound", + CustomNotFound: "CustomNotFound", + CustomNil: "CustomNil", + FeatureAlreadyExists: "FeatureAlreadyExists", + PlayerNotFound: "PlayerNotFound", + FormationReelWeightNotMatch: "FormationReelWeightNotMatch", + FormationSeqIDNotFound: "FormationSeqIDNotFound", + FormationSymbolNotFound: "FormationSymbolNotFound", + FormationLinkPayIsNotFound: "FormationLinkPayIsNotFound", + FormationDirectionNotSupport: "FormationDirectionNotSupport", + SymbolsLengthNotEqual: "SymbolsLengthNotEqual", + DataInvalidConversion: "DataInvalidConversion", + NewNodeZeroProgress: "NewNodeZeroProgress", + BetIsZero: "BetIsZero", + InvalidBetIndex: "InvalidBetIndex", + InvalidCoinValueIndex: "InvalidCoinValueIndex", + GameCheatInvalidKey: "GameCheatInvalidKey", + AirplaneHasRoom: "AirplaneHasRoom", + AirplaneHasNoRoom: "AirplaneHasNoRoom", + AirplaneHasNoBet: "AirplaneHasNoBet", + AirplaneStateInvalid: "AirplaneStateInvalid", + AirplaneBetCoinNotEnough: "AirplaneBetCoinNotEnough", + AirplaneCarryCoinNotEnough: "AirplaneCarryCoinNotEnough", + AirplaneHasJumped: "AirplaneHasJumped", + AirplaneCoinNotEnough: "AirplaneCoinNotEnough", + AirplaneRoomNotFound: "AirplaneRoomNotFound", + AirplaneBetAmountInvalid: "AirplaneBetAmountInvalid", + DiceHasRoom: "DiceHasRoom", + DiceHasNoRoom: "DiceHasNoRoom", + DiceStateInvalid: "DiceStateInvalid", + DiceBetCoinNotEnough: "DiceBetCoinNotEnough", + DiceBetAmountInvalid: "DiceBetAmountInvalid", + DiceBetPositionInvalid: "DiceBetPositionInvalid", + DiceCarryCoinNotEnough: "DiceCarryCoinNotEnough", + DoubleHasRoom: "DoubleHasRoom", + DoubleHasNoRoom: "DoubleHasNoRoom", + DoubleStateInvalid: "DoubleStateInvalid", + DoubleBetCoinNotEnough: "DoubleBetCoinNotEnough", + DoubleBetAmountInvalid: "DoubleBetAmountInvalid", + DoubleCarryCoinNotEnough: "DoubleCarryCoinNotEnough", + MinesIsPlaying: "MinesIsPlaying", + MinesIsNotPlaying: "MinesIsNotPlaying", + MinesOpenDuplicate: "MinesOpenDuplicate", + MinesStepZero: "MinesStepZero", + MinesCoinNotEnough: "MinesCoinNotEnough", + MinesCarryCoinNotEnough: "MinesCarryCoinNotEnough", + MinesBetAmountInvalid: "MinesBetAmountInvalid", + MinesCountInvalid: "MinesCountInvalid", + MinesOpenIndexInvalid: "MinesOpenIndexInvalid", + BindDeviceAccessIsInvalid: "BindDeviceAccessIsInvalid", + PlayerAlreadyBoundToThirdPlatform: "PlayerAlreadyBoundToThirdPlatform", + ThirdPlatformAlreadyBoundToPlayer: "ThirdPlatformAlreadyBoundToPlayer", + GoodsIDNotExist: "GoodsIDNotExist", + CoinNotEnough: "CoinNotEnough", + ParallelLogin: "ParallelLogin", + DataSetInvalid: "DataSetInvalid", + AuthenticateLoginInvalid: "AuthenticateLoginInvalid", + LuckyWheelBetAmountInvalid: "LuckyWheelBetAmountInvalid", + LuckyWheelCarryCoinNotEnough: "LuckyWheelCarryCoinNotEnough", + LuckyWheelCoinNotEnough: "LuckyWheelCoinNotEnough", + NotNewbie: "NotNewbie", + DirectInviterExist: "DirectInviterExist", + InviterUIDCantSelf: "InviterUIDCantSelf", + InviterUIDInvalid: "InviterUIDInvalid", + AirplaneAutoJumpInvalid: "AirplaneAutoJumpInvalid", + DoubleDisplayLimit: "DoubleDisplayLimit", + ClubHasRoom: "ClubHasRoom", + ClubHasNoRoom: "ClubHasNoRoom", + ClubStateInvalid: "ClubStateInvalid", + ClubBetCoinNotEnough: "ClubBetCoinNotEnough", + ClubBetAmountInvalid: "ClubBetAmountInvalid", + ClubBetPositionInvalid: "ClubBetPositionInvalid", + ClubCarryCoinNotEnough: "ClubCarryCoinNotEnough", + BonusStateInvalid: "BonusStateInvalid", + WeeklyDealsFreeBonusFetched: "WeeklyDealsFreeBonusFetched", + WeeklyDealsFreeBonusInvalid: "WeeklyDealsFreeBonusInvalid", + LoginRequired: "LoginRequired", + PhoneNumberInvalid: "PhoneNumberInvalid", + PhoneVerifyCodeError: "PhoneVerifyCodeError", + PhoneVerifyCodeVerified: "PhoneVerifyCodeVerified", + PhoneVerifyCodeExpired: "PhoneVerifyCodeExpired", + PlayerAlreadyBoundToPhoneNumber: "PlayerAlreadyBoundToPhoneNumber", + PhoneNumberAlreadyBoundToPlayer: "PhoneNumberAlreadyBoundToPlayer", + PhoneVerifyCodeTotalLimit: "PhoneVerifyCodeTotalLimit", + PhoneVerifyCodeDailyLimit: "PhoneVerifyCodeDailyLimit", + PhoneVerifyCodeLimitDuration: "PhoneVerifyCodeLimitDuration", + VipCashbackInvalid: "VipCashbackInvalid", + VipCashbackNotEnough: "VipCashbackNotEnough", + VipRewardInvalid: "VipRewardInvalid", + VipRewardFetched: "VipRewardFetched", + InvalidPhoneMessageType: "InvalidPhoneMessageType", + InnerIDInvalid: "InnerIDInvalid", + PurchaseAuthenticateFailed: "PurchaseAuthenticateFailed", + PurchaseCloseFailed: "PurchaseCloseFailed", + BranchError: "BranchError", + MemberCardInvalid: "MemberCardInvalid", + PlinkoBetAmountInvalid: "PlinkoBetAmountInvalid", + PlinkoCarryCoinNotEnough: "PlinkoCarryCoinNotEnough", + PlinkoCoinNotEnough: "PlinkoCoinNotEnough", + PassGetLevelRewardInvalid: "PassGetLevelRewardInvalid", + PassNotActivated: "PassNotActivated", + SystemNotOpen: "SystemNotOpen", + CoinNegative: "CoinNegative", + LinearDiceBetAmountInvalid: "LinearDiceBetAmountInvalid", + LinearDiceValueInvalid: "LinearDiceValueInvalid", + LinearDiceCarryCoinNotEnough: "LinearDiceCarryCoinNotEnough", + LinearDiceCoinNotEnough: "LinearDiceCoinNotEnough", + VipRewardLocked: "VipRewardLocked", + PackageNotFound: "PackageNotFound", + AbaCashbackInvalid: "AbaCashbackInvalid", + AccountDelete: "AccountDelete", +} diff --git a/gamesrv/slotspkg/internal/generic/errors/errors_test.go b/gamesrv/slotspkg/internal/generic/errors/errors_test.go new file mode 100644 index 0000000..0be178e --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/errors/errors_test.go @@ -0,0 +1,20 @@ +package errors_test + +import ( + "testing" + + "qstar_server/internal/generic/errors" +) + +func TestEnum(t *testing.T) { + t.Log(errors.ConfigSheetNotFound.Error()) +} + +func TestReflect(t *testing.T) { + if errors.Reflect(nil) != errors.Nil { + t.Error("errors reflect failed") + } + if errors.Reflect(errors.ConfigSheetNotFound.Error()) != errors.ConfigSheetNotFound { + t.Error("errors reflect failed") + } +} diff --git a/gamesrv/slotspkg/internal/generic/errors/format.go b/gamesrv/slotspkg/internal/generic/errors/format.go new file mode 100644 index 0000000..f85bea4 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/errors/format.go @@ -0,0 +1,225 @@ +package errors + +import ( + "errors" + "fmt" + "runtime" + "strings" + + "github.com/tomas-qstarrs/boost/cast" +) + +// LastPart splits s with sep, and get last piece +func LastPart(s string, sep string) string { + lastIndex := strings.LastIndex(s, sep) + if lastIndex < 0 { + return s + } + return s[lastIndex+len(sep):] +} + +// Error is a wrapper for error +func Error(err error) error { + pc := make([]uintptr, 1) + runtime.Callers(2, pc) + funcName := runtime.FuncForPC(pc[0]).Name() + funcName = LastPart(funcName, "qstar_server/") + + _, file, line, ok := runtime.Caller(1) + if !ok { + panic(fmt.Errorf("get file & line failed")) + } + file = LastPart(file, "qstar_server/") + fileLine := fmt.Sprintf("%s:%d", file, line) + + newErr := fmt.Errorf("\n - line: %s\n - func: %s \n - error: %w", + fileLine, funcName, err) + + // Assert here: errors.Is(newErr, err) == true + return newErr +} + +// Errorf is a wrapper for fmt.Errorf +func Errorf(format string, a ...interface{}) error { + pc := make([]uintptr, 1) + runtime.Callers(2, pc) + funcName := runtime.FuncForPC(pc[0]).Name() + funcName = LastPart(funcName, "qstar_server/") + + _, file, line, ok := runtime.Caller(1) + if !ok { + panic(fmt.Errorf("get file & line failed")) + } + file = LastPart(file, "qstar_server/") + fileLine := fmt.Sprintf("%s:%d", file, line) + + err := fmt.Errorf(format, a...) + newErr := fmt.Errorf("\n - line: %s\n - func: %s \n - error: %w", + fileLine, funcName, err) + + // Assert here: errors.Is(newErr, err) == true + return newErr +} + +type ( + // Code is error's code + Code int64 +) + +func Reflect(err error) Code { + if err == nil { + return Nil + } + e := errors.Unwrap(err) + if e == nil { + return ErrorDeregistered + } + code, ok := Codes[e] + if !ok { + return ErrorDeregistered + } + return code +} + +// ErrorWith returns an error with tags created by errors.New() +func (e Code) ErrorWith(tags ...interface{}) error { + if e == Nil { + return nil + } + + pc := make([]uintptr, 1) + runtime.Callers(2, pc) + funcName := runtime.FuncForPC(pc[0]).Name() + funcName = LastPart(funcName, "qstar_server/") + + _, file, line, ok := runtime.Caller(1) + if !ok { + panic(fmt.Errorf("get file & line failed")) + } + file = LastPart(file, "qstar_server/") + fileLine := fmt.Sprintf("%s:%d", file, line) + + strTags := make([]string, 0) + for _, tag := range tags { + strTags = append(strTags, cast.ToString(tag)) + } + + newErr := fmt.Errorf("\n - line: %s\n - func: %s\n - error: %w\n - tags: %s", + fileLine, funcName, Errs[e], strings.Join(strTags, " & ")) + + // Assert here: errors.Is(newErr, err) == true + return newErr +} + +// ErrorWithCause returns an error with default tags created by errors.New() +func (e Code) Error() error { + if e == Nil { + return nil + } + + pc := make([]uintptr, 1) + runtime.Callers(2, pc) + funcName := runtime.FuncForPC(pc[0]).Name() + funcName = LastPart(funcName, "qstar_server/") + + _, file, line, ok := runtime.Caller(1) + if !ok { + panic(fmt.Errorf("get file & line failed")) + } + file = LastPart(file, "qstar_server/") + fileLine := fmt.Sprintf("%s:%d", file, line) + + newErr := fmt.Errorf("\n - line: %s\n - func: %s \n - error: %w", + fileLine, funcName, Errs[e]) + + // Assert here: errors.Is(newErr, err) == true + return newErr +} + +func (e Code) Is(err error) bool { + return errors.Is(err, Errs[e]) +} + +// Code returns the code of error +func (e Code) Code() int64 { + return int64(e) +} + +// Message returns the msg of error +func (e Code) String() string { + return Errs[e].Error() +} + +// Origin returns origin Error +func (e Code) Origin() error { + return Errs[e] +} + +// Tag stores tag info for create an error +type Tag struct { + Data []interface{} +} + +// With creates a Tag ojbect with tags data +func With(tags ...interface{}) *Tag { + tag := &Tag{} + tag.Data = tags + return tag +} + +// Error returns an error with tags created by errors.New() +func (t *Tag) Error(err error) error { + if t == nil { + return nil + } + + pc := make([]uintptr, 1) + runtime.Callers(2, pc) + funcName := runtime.FuncForPC(pc[0]).Name() + funcName = LastPart(funcName, "qstar_server/") + + _, file, line, ok := runtime.Caller(1) + if !ok { + panic(fmt.Errorf("get file & line failed")) + } + file = LastPart(file, "qstar_server/") + fileLine := fmt.Sprintf("%s:%d", file, line) + + strTags := make([]string, 0) + for _, tag := range t.Data { + strTags = append(strTags, cast.ToString(tag)) + } + + newErr := fmt.Errorf("\n - line: %s\n - func: %s\n - error: %w\n - tags: %s", + fileLine, funcName, err, strings.Join(strTags, " & ")) + + // Assert here: errors.Is(newErr, err) == true + return newErr +} + +// Errorf returns an error with tags created by fmt.Errorf() +func (t *Tag) Errorf(format string, a ...interface{}) error { + pc := make([]uintptr, 1) + runtime.Callers(2, pc) + funcName := runtime.FuncForPC(pc[0]).Name() + funcName = LastPart(funcName, "qstar_server/") + + _, file, line, ok := runtime.Caller(1) + if !ok { + panic(fmt.Errorf("get file & line failed")) + } + file = LastPart(file, "qstar_server/") + fileLine := fmt.Sprintf("%s:%d", file, line) + + strTags := make([]string, 0) + for _, tag := range t.Data { + strTags = append(strTags, cast.ToString(tag)) + } + + err := fmt.Errorf(format, a...) + newErr := fmt.Errorf("\n - line: %s\n - func: %s\n - error: %w\n - tags: %s", + fileLine, funcName, err, strings.Join(strTags, " & ")) + + // Assert here: errors.Is(newErr, err) == true + return newErr +} diff --git a/gamesrv/slotspkg/internal/generic/errors/init.go b/gamesrv/slotspkg/internal/generic/errors/init.go new file mode 100644 index 0000000..b34b914 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/errors/init.go @@ -0,0 +1,42 @@ +package errors + +import "github.com/idealeak/goserver/core/logger" + +var ( + begins = []Code{ErrorBegin} + ends = []Code{ErrorEnd} +) + +var ( + Errs = make(map[Code]error) + Codes = make(map[error]Code) + Keys = make(map[Code]string) +) + +func init() { + checkSection() + initErrs() +} + +func checkSection() { + for index := 0; index < len(begins); index++ { + var last string + for e := begins[index] + 1; e < ends[index]; e++ { + s, ok := Errors[e] + if !ok { + logger.Logger.Debugf("Error id %d is not ready for exporting lua, which should be written below %s.", e, last) + } else { + last = s + } + } + } +} + +func initErrs() { + for code, text := range Errors { + err := New(text) + Errs[code] = err + Codes[err] = code + Keys[code] = text + } +} diff --git a/gamesrv/slotspkg/internal/generic/errors/wrapper.go b/gamesrv/slotspkg/internal/generic/errors/wrapper.go new file mode 100644 index 0000000..3aa22ee --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/errors/wrapper.go @@ -0,0 +1,25 @@ +package errors + +import ( + "errors" +) + +// As is a wrapper for errors.As +func As(err error, target interface{}) bool { + return errors.As(err, target) +} + +// Is is a wrapper for errors.Is +func Is(err, target error) bool { + return errors.Is(err, target) +} + +// New is a wrapper for errors.New +func New(text string) error { + return errors.New(text) +} + +// Unwrap is a wrapper for error.Unwrap +func Unwrap(err error) error { + return errors.Unwrap(err) +} diff --git a/gamesrv/slotspkg/internal/generic/global/config.go b/gamesrv/slotspkg/internal/generic/global/config.go new file mode 100644 index 0000000..065521c --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/global/config.go @@ -0,0 +1,119 @@ +package global + +import ( + "encoding/json" +) + +var Config = Configuration{} + +type Configuration struct { + AppId string + SrvId string + IsDevMode bool +} + +func (this *Configuration) Name() string { + return "global" +} + +func (this *Configuration) Init() error { + return nil +} + +func (this *Configuration) Close() error { + return nil +} + +func init() { + //core.RegistePackage(&Config) + //core.RegistePackage(&CustomConfig) +} + +var CustomConfig = make(CustomConfiguration) + +type CustomConfiguration map[string]interface{} + +func (this *CustomConfiguration) Name() string { + return "costum" +} + +func (this *CustomConfiguration) Init() error { + return nil +} + +func (this *CustomConfiguration) Close() error { + return nil +} + +func (this *CustomConfiguration) GetString(key string) string { + if v, exist := (*this)[key]; exist { + if str, ok := v.(string); ok { + return str + } + } + return "" +} + +func (this *CustomConfiguration) GetStrings(key string) (strs []string) { + if v, exist := (*this)[key]; exist { + if vals, ok := v.([]interface{}); ok { + for _, s := range vals { + if str, ok := s.(string); ok { + strs = append(strs, str) + } + } + return + } + } + return +} + +func (this *CustomConfiguration) GetCustomCfgs(key string) (strs []*CustomConfiguration) { + if v, exist := (*this)[key]; exist { + if vals, ok := v.([]interface{}); ok { + for _, s := range vals { + if data, ok := s.(map[string]interface{}); ok { + var pkg *CustomConfiguration + modelBuff, _ := json.Marshal(data) + err := json.Unmarshal(modelBuff, &pkg) + if err == nil { + strs = append(strs, pkg) + } + } + } + return + } + } + return +} + +func (this *CustomConfiguration) GetInts(key string) (strs []int) { + if v, exist := (*this)[key]; exist { + if vals, ok := v.([]interface{}); ok { + for _, s := range vals { + if str, ok := s.(float64); ok { + strs = append(strs, int(str)) + } + } + return + } + } + return +} +func (this *CustomConfiguration) GetInt(key string) int { + if v, exist := (*this)[key]; exist { + if val, ok := v.(float64); ok { + return int(val) + } + } + return 0 +} + +func (this *CustomConfiguration) GetBool(key string) bool { + if v, exist := (*this)[key]; exist { + if val, ok := v.(bool); ok { + return val + } + } + return false +} diff --git a/gamesrv/slotspkg/internal/generic/global/configencryptor.go b/gamesrv/slotspkg/internal/generic/global/configencryptor.go new file mode 100644 index 0000000..8803608 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/global/configencryptor.go @@ -0,0 +1,119 @@ +package global + +const ( + aa uint = 0x7E + bb = 0x33 + cc = 0xA1 + ENCRYPT_KEY1 = 0xa61fce5e // A = 0x20, B = 0xFD, C = 0x07, first = 0x1F, key = a61fce5e + ENCRYPT_KEY2 = 0x443ffc04 // A = 0x7A, B = 0xCF, C = 0xE5, first = 0x3F, key = 443ffc04 + ENCRYPT_KEY3 = 0x12345678 +) + +var ConfigFE = &ConfigFileEncryptor{} + +type ConfigFileEncryptor struct { + m_nPos1 int + m_nPos2 int + m_nPos3 int + m_cGlobalEncrypt EncryptCode +} +type EncryptCode struct { + m_bufEncrypt1 [256]uint8 + m_bufEncrypt2 [256]uint8 + m_bufEncrypt3 [256]uint8 +} + +func (this *EncryptCode) init(key1, key2, key3 uint) { + var a1, b1, c1, fst1 uint + a1 = ((key1 >> 0) & 0xFF) ^ aa + b1 = ((key1 >> 8) & 0xFF) ^ bb + c1 = ((key1 >> 24) & 0xFF) ^ cc + fst1 = (key1 >> 16) & 0xFF + + var a2, b2, c2, fst2 uint + a2 = ((key2 >> 0) & 0xFF) ^ aa + b2 = ((key2 >> 8) & 0xFF) ^ bb + c2 = ((key2 >> 24) & 0xFF) ^ cc + fst2 = (key2 >> 16) & 0xFF + + i := 0 + nCode := uint8(fst1) + for i = 0; i < 256; i++ { + this.m_bufEncrypt1[i] = nCode + nCode = (uint8(a1)*nCode*nCode + uint8(b1)*nCode + uint8(c1)) & 0xFF + } + + nCode = uint8(fst2) + for i = 0; i < 256; i++ { + this.m_bufEncrypt2[i] = nCode + nCode = (uint8(a2)*nCode*nCode + uint8(b2)*nCode + uint8(c2)) & 0xFF + } + + for i = 0; i < 256; i++ { + this.m_bufEncrypt3[i] = uint8(((key3 >> uint(i%4)) ^ uint(i)) & 0xff) + } +} +func (this *ConfigFileEncryptor) init(key1, key2, key3 uint) { + this.m_cGlobalEncrypt.init(key1, key2, key3) +} +func (this *ConfigFileEncryptor) IsCipherText(buf []byte) bool { + size := len(buf) + if size < 4 { + return false + } + //0x1b454e43 + if buf[size-1] == 0x43 && buf[size-2] == 0x4e && buf[size-3] == 0x45 && buf[size-4] == 0x1b { + return true + } + return false +} +func (this *ConfigFileEncryptor) Encrypt(buf []byte) []byte { + size := len(buf) + oldPos1, oldPos2, oldPos3 := this.m_nPos1, this.m_nPos2, this.m_nPos3 + for i := 0; i < size; i++ { + buf[i] ^= this.m_cGlobalEncrypt.m_bufEncrypt1[this.m_nPos1] + buf[i] ^= this.m_cGlobalEncrypt.m_bufEncrypt2[this.m_nPos2] + buf[i] ^= this.m_cGlobalEncrypt.m_bufEncrypt3[this.m_nPos3] + this.m_nPos1++ + if this.m_nPos1 >= 256 { + this.m_nPos1 = 0 + this.m_nPos2++ + if this.m_nPos2 >= 256 { + this.m_nPos2 = 0 + } + } + this.m_nPos3++ + if this.m_nPos3 >= 256 { + this.m_nPos3 = 0 + } + } + this.m_nPos1, this.m_nPos2, this.m_nPos3 = oldPos1, oldPos2, oldPos3 + buf = append(buf, 0x1b, 0x45, 0x4e, 0x43) + return buf +} +func (this *ConfigFileEncryptor) Decrtypt(buf []byte) []byte { + size := len(buf) - 4 + oldPos1, oldPos2, oldPos3 := this.m_nPos1, this.m_nPos2, this.m_nPos3 + for i := 0; i < size; i++ { + buf[i] ^= this.m_cGlobalEncrypt.m_bufEncrypt1[this.m_nPos1] + buf[i] ^= this.m_cGlobalEncrypt.m_bufEncrypt2[this.m_nPos2] + buf[i] ^= this.m_cGlobalEncrypt.m_bufEncrypt3[this.m_nPos3] + this.m_nPos1++ + if this.m_nPos1 >= 256 { + this.m_nPos1 = 0 + this.m_nPos2++ + if this.m_nPos2 >= 256 { + this.m_nPos2 = 0 + } + } + this.m_nPos3++ + if this.m_nPos3 >= 256 { + this.m_nPos3 = 0 + } + } + this.m_nPos1, this.m_nPos2, this.m_nPos3 = oldPos1, oldPos2, oldPos3 + return buf[:size] +} +func init() { + ConfigFE.init(ENCRYPT_KEY1, ENCRYPT_KEY2, ENCRYPT_KEY3) +} diff --git a/gamesrv/slotspkg/internal/generic/global/ddb.go b/gamesrv/slotspkg/internal/generic/global/ddb.go new file mode 100644 index 0000000..4b0cc5d --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/global/ddb.go @@ -0,0 +1,136 @@ +package global + +import ( + "fmt" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" +) + +type Ddb struct{} + +var DDB Ddb + +func (Ddb) GameAccount(typ string, packageName string, account string) string { + return fmt.Sprintf(key.DdbGameAccount, typ, packageName, account) +} + +func (Ddb) GameAccountHistory(typ string, packageName string, account string) string { + return fmt.Sprintf(key.DdbGameAccountHistory, typ, packageName, account) +} + +func (Ddb) GameAccountResetCount(typ string, packageName string, account string) string { + return fmt.Sprintf(key.DdbGameAccountResetCount, typ, packageName, account) +} + +func (Ddb) GamePlayerSN() string { + return key.DdbGamePlayerSN +} + +func (Ddb) GamePlayer(uid uint64) string { + return fmt.Sprintf(key.DdbGamePlayer, uid) +} + +func (Ddb) GamePlayerLoginTime() string { + return key.DdbGamePlayerLoginTime +} + +func (Ddb) GameSettle(uid uint64) string { + return fmt.Sprintf(key.DdbGameSettle, uid) +} + +func (Ddb) GamePool() string { + if Cluster == "" { + return key.DdbGamePool + } + return fmt.Sprintf(key.DdbGameClusterPool, Cluster) +} + +func (Ddb) CheatSlots(uid int64) string { + return fmt.Sprintf(key.DdbCheatSlots, uid) +} + +func (Ddb) SystemMailSN() string { + return key.DdbSystemMailSN +} + +func (Ddb) SystemMail(uid int64) string { + return fmt.Sprintf(key.DdbSystemMail, uid) +} + +func (Ddb) SystemPaymentOrder() string { + return key.DdbSystemPaymentOrder +} + +func (Ddb) OptBanPlayer() string { + return key.DdbOptBanPlayer +} + +func (Ddb) OptConfig() string { + if Cluster == "" { + return key.DdbOptConfig + } + return fmt.Sprintf(key.DdbOptClusterConfig, Cluster) +} + +func (Ddb) OptPlayer(uid int64) string { + return fmt.Sprintf(key.DdbOptPlayer, uid) +} + +func (Ddb) SystemInviteReward() string { + return key.DdbSystemInviteReward +} + +func (Ddb) SystemInviteRank() string { + return key.DdbSystemInviteRank +} + +func (Ddb) SystemInviteCoin() string { + return key.DdbSystemInviteCoin +} + +func (Ddb) SystemBroadcast() string { + return key.DdbSystemBroadcast +} + +func (Ddb) SystemPaymentOrderDaily(day string) string { + return fmt.Sprintf(key.DdbSystemPaymentOrderDaily, day) +} + +func (Ddb) SystemCustomerServiceDaily(day string) string { + return fmt.Sprintf(key.DdbSystemCustomerServiceDaily, day) +} + +func (Ddb) SystemCustomerServiceTotal() string { + return fmt.Sprintf(key.DdbSystemCustomerServiceTotal) +} + +func (Ddb) OptDevice() string { + return key.DdbOptDevice +} + +func (Ddb) SystemStatisticsDaily(day string) string { + return fmt.Sprintf(key.DdbSystemStatisticsDaily, day) +} + +func (Ddb) OptPermitLogin() string { + return key.DdbOptPermitLogin +} + +func (Ddb) OptPermitUserTag() string { + return key.DdbOptPermitUserTag +} + +func (Ddb) SystemPix() string { + return key.DdbSystemPix +} + +func (Ddb) SystemCPF() string { + return key.DdbSystemCPF +} + +func (Ddb) SystemPhoneNumber() string { + return key.DdbSystemPhoneNumber +} + +func (Ddb) OptOperate() string { + return key.DdbOptOperate +} diff --git a/gamesrv/slotspkg/internal/generic/global/global.go b/gamesrv/slotspkg/internal/generic/global/global.go new file mode 100644 index 0000000..0fb5f6a --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/global/global.go @@ -0,0 +1,318 @@ +package global + +import ( + "fmt" + logger2 "github.com/breezedup/goserver/core/logger" + "github.com/go-redis/redis" + "github.com/gofrs/uuid" + "github.com/gogo/protobuf/codec" + "github.com/sirupsen/logrus" + "github.com/tomas-qstarrs/boost/config" + "github.com/tomas-qstarrs/boost/dogfish" + "github.com/tomas-qstarrs/boost/httpx" + "github.com/tomas-qstarrs/boost/logger" + "github.com/tomas-qstarrs/boost/regexp" + "github.com/tomas-qstarrs/boost/timex" + "os" + "os/exec" + "path/filepath" + "qstar_server/internal/exported/resource" + "qstar_server/internal/generic/ddb" + "sort" + "strings" + "sync/atomic" + "time" +) + +var ( + // Project is the name of project + Project string + + // Game is the name of game + Game string + + // Process is the name of type name of process + Process string + + // ProcessID is the id of process + ProcessID string + + // ProcessTime is the time of process + ProcessTime int64 + + // ProcessSeqID is the seq id of process + ProcessSeqID atomic.Int64 + + // Runtime is the value of Runtime + Runtime string + + // Cluster is the cluster of project + Cluster string + + // Instance is the instance of project + Instance string + + // ExecutableDirectory is the path of Executable + ExecutableDirectory string + + // WorkingDirectory is the path of CWD + WorkingDirectory string + + // ProjectDirectory is the path of project `qstar_server` + ProjectDirectory string + + // ConfigDirectory is the path of config + ConfigDirectory string + + // LogDirectory is the path of log + LogDirectory string + + // Config is the config of project + Configs *config.Config + + // Timex is the timex of project + Timex *timex.Timex + + // Logger is the logger of project + //Logger *logger.Logger + + // TALogger is the ta logger of project + TALogger *logger.Logger + + // Codec is the codec of project + Codec codec.Codec + + // PlainCodec is the plain codec + PlainCodec codec.Codec + + // Mock is the mock mode + Mock bool + + // HTTP is the http client + HTTPClient *httpx.Client + + // RedisClient is the redis client + RedisClient *redis.Client + + Regexp *regexp.Regexp +) + +func init() { + InitGeneric() + Project = getProject() + Game = getGame() + Process = getProcess() + ProcessID = getProcessID() + Runtime = getRuntime() + Cluster = getCluster() + Instance = getInstance() + ExecutableDirectory = getExecutableDirectory() + WorkingDirectory = getWorkingDirectory() + ProjectDirectory = getProjectDirectory() + ConfigDirectory = getConfigDirectory() + Configs = getConfig() + Timex = getTimex() + //Logger = getLogger() + ProcessTime = getProcessTime() + Mock = getMock() + HTTPClient = getHTTPClient() + RedisClient = getRedisClient() + ddb.Init() +} + +func getProject() string { + return "qstar_server" +} + +func getGame() string { + return "SLOTS" +} + +func getProcess() string { + args := os.Args + if len(args) < 2 { + return "" + } + return args[1] +} + +func getProcessID() string { + return uuid.Must(uuid.NewV4()).String() +} + +func getProcessTime() int64 { + return timex.Now().Unix() +} + +func getRuntime() string { + s := os.Getenv("QSTAR_SERVER_RUNTIME") + logger2.Logger.Infof("QSTAR_SERVER_RUNTIME--------- [%v]", s) + if s == "" { + logger2.Logger.Info("Please set environment variable QSTAR_SERVER_RUNTIME, " + + "now temporarily use QSTAR_SERVER_RUNTIME=Default.") + s = config.GetString("runtime") + } else { + logger2.Logger.Infof("Use QSTAR_SERVER_RUNTIME=%s", s) + } + return strings.ToLower(s) +} + +func getCluster() string { + return os.Getenv("qstar_server_CLUSTER") +} + +func getInstance() string { + return os.Getenv("qstar_server_INSTANCE") +} + +func getExecutableDirectory() string { + if _, err := os.Stat(os.Args[0]); err == nil { + return filepath.Dir(os.Args[0]) + } + path, err := exec.LookPath(os.Args[0]) + if err != nil { + panic(err) + } + return filepath.Dir(path) +} + +func getWorkingDirectory() string { + dir, err := os.Getwd() + if err != nil { + panic(err) + } + return dir +} + +func getProjectDirectory() string { + // MatchParentDir returns target's directory's full path, + // returning error if `dir`'s parent dir names don't match `target` + matchParentDir := func(dir string, target string) (string, error) { + var currentDir string + var file string + for { + currentDir = filepath.Dir(dir) + file = filepath.Base(dir) + + // Match target directory + if file == target { + return dir, nil + } + + // Reach the top of directory + if currentDir == dir { + return "", fmt.Errorf( + "diretory `%s` doesn't match `%s`", dir, target) + } + + dir = currentDir + } + } + + dir, err := matchParentDir(WorkingDirectory, Project) + if err != nil { + dir, err = os.Getwd() + if err != nil { + panic(err) + } + } + return dir +} + +func getConfigDirectory() string { + return filepath.Join(ProjectDirectory, "resource/config") +} +func InitGeneric() { + config.ReadBinary(func() []string { + var assetNames = make([]string, 0) + for _, assetName := range resource.AssetNames() { + if strings.HasPrefix(assetName, "resource/config/generic") { + assetNames = append(assetNames, assetName) + } + } + sort.Strings(assetNames) + return assetNames + }, resource.Asset) +} +func getConfig() *config.Config { + config.SetRuntimeEnv(Runtime).ReadBinary(func() []string { + var assetNames = make([]string, 0) + for _, assetName := range resource.AssetNames() { + /*if strings.HasPrefix(assetName, "resource/config/generic") { + assetNames = append(assetNames, assetName) + } else*/if strings.HasPrefix(assetName, "resource/config/runtime/"+Runtime) { + assetNames = append(assetNames, assetName) + } + } + sort.Strings(assetNames) + return assetNames + }, resource.Asset) + + config.Default().AutomaticEnv() + config.Default().SetEnvPrefix("qstar_server") + config.Default().SetEnvKeyReplacer(strings.NewReplacer(".", "_")) + config.Default().AutoParse(1) + + return config.Default() +} + +func getTimex() *timex.Timex { + tm := timex.Init(config.JSON("timex")) + dogfish.LocateAt(timex.TimeLocation()) + return tm +} +func getLogger() *logrus.Logger { + logger, err := logger.New(config.Parse(config.JSON("logger.default"))) + if err != nil { + panic(err) + } + //log.Use(logger) + return logger +} +func getMock() bool { + s := os.Getenv("qstar_server_MOCK") + logger2.Logger.Infof("qstar_server_MOCK--------- [%v]", s) + if s != "" { + if s == "true" { + return true + } else { + return false + } + } + return config.GetBool("mock") +} + +func getHTTPClient() *httpx.Client { + c := httpx.NewClient(httpx.ClientConfig{ + Retry: config.GetInt64("http.retry"), + Timeout: config.GetDuration("http.timeout") * time.Second, + Proxy: config.GetString("http.proxy"), + DialerTimeout: config.GetDuration("http.dialerTimeout") * time.Second, + DialerKeepAlive: config.GetDuration("http.dialerKeepAlive") * time.Second, + ForceAttemptHTTP2: config.GetBool("http.forceAttemptHTTP2"), + MaxIdleConns: config.GetInt("http.maxIdleConns"), + MaxIdleConnsPerHost: config.GetInt("http.maxIdleConnsPerHost"), + MaxConnsPerHost: config.GetInt("http.maxConnsPerHost"), + IdleConnTimeout: config.GetDuration("http.idleConnTimeout") * time.Second, + TLSHandshakeTimeout: config.GetDuration("http.tlsHandshakeTimeout") * time.Second, + ResponseHeaderTimeout: config.GetDuration("http.responseHeaderTimeout") * time.Second, + ExpectContinueTimeout: config.GetDuration("http.expectContinueTimeout") * time.Second, + }) + + return c +} + +func getRedisClient() *redis.Client { + c := redis.NewClient(&redis.Options{ + Addr: config.GetString("redis.player.addr"), + Password: config.GetString("redis.player.password"), + DB: config.GetInt("redis.player.db"), + PoolSize: config.GetInt("redis.player.poolSize"), + MinIdleConns: config.GetInt("redis.player.minIdleConns"), + MaxConnAge: config.GetDuration("redis.player.maxConnAge") * time.Second, + PoolTimeout: config.GetDuration("redis.player.poolTimeout") * time.Second, + IdleTimeout: config.GetDuration("redis.player.idleTimeout") * time.Second, + IdleCheckFrequency: config.GetDuration("redis.player.idleCheckFrequency") * time.Second, + }) + return c +} diff --git a/gamesrv/slotspkg/internal/generic/global/global_test.go b/gamesrv/slotspkg/internal/generic/global/global_test.go new file mode 100644 index 0000000..1b0a841 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/global/global_test.go @@ -0,0 +1,16 @@ +package global_test + +import ( + "qstar_server/internal/generic/global" + "testing" +) + +func TestVars(t *testing.T) { + t.Log(global.Runtime) + t.Log(global.ExecutableDirectory) + t.Log(global.WorkingDirectory) + t.Log(global.ProjectDirectory) + t.Log(global.ConfigDirectory) + t.Log(global.HTTPClient) + t.Log(global.Mock) +} diff --git a/gamesrv/slotspkg/internal/generic/global/globalmgr.go b/gamesrv/slotspkg/internal/generic/global/globalmgr.go new file mode 100644 index 0000000..4f99c00 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/global/globalmgr.go @@ -0,0 +1,87 @@ +package global + +import ( + "fmt" + "github.com/idealeak/goserver/core/logger" + "github.com/tomas-qstarrs/redimo" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/ddb" + "sync" + "time" +) + +var GlobalMgrSington = &GlobalMgr{ + globalUUID: make(map[string]uint64), +} +var rwMu sync.RWMutex + +const ( + GLOBAL_PLAYERUUID = "GLOBAL:PLAYERUUID" +) + +type GlobalMgr struct { + *redimo.Client + globalUUID map[string]uint64 + dirty bool +} + +func (r *GlobalMgr) ModuleName() string { + return "GlobalMgr" +} +func (r *GlobalMgr) getKey(key string) string { + return fmt.Sprintf("%s:%s:%s", Project, Game, key) +} +func (r *GlobalMgr) Init() { + r.Client = ddb.RedimoClient() + + key := r.getKey(GLOBAL_PLAYERUUID) + val, err := r.GET(key) + if err != nil { + logger.Logger.Warnf("GlobalMgr Init err: %v", err) + //这里表示表不存在,不影响后续执行 + //return + } + oldUid := val.Int() + if oldUid == 0 { + r.globalUUID[key] = 1000000000 + r.dirty = true + } else { + r.globalUUID[key] = uint64(oldUid) + } +} +func (r *GlobalMgr) GetUUID() uint64 { + rwMu.Lock() + defer rwMu.Unlock() + key := r.getKey(GLOBAL_PLAYERUUID) + r.globalUUID[key]++ + r.dirty = true + newUid := r.globalUUID[key] + _, err := r.SET(key, newUid) + if err != nil { + logger.Logger.Warnf("GlobalMgr GetUUID err: %v", err) + } + return newUid +} +func (r *GlobalMgr) saveUUID() { + if r.dirty { + r.dirty = false + key := r.getKey(GLOBAL_PLAYERUUID) + if oldUid, ok := r.globalUUID[key]; ok { + _, err := r.SET(key, oldUid) + if err != nil { + r.dirty = true + logger.Logger.Errorf("GlobalMgr SET redimoClient error: %v", err) + } + } + } +} +func (r *GlobalMgr) Update() { + //r.saveUUID() +} +func (r *GlobalMgr) Shutdown() { + //logger.Logger.Infof("===== saveData ======== [%v] Shutdown", r.ModuleName()) + //r.saveUUID() +} + +func init() { + module.RegisteModule(GlobalMgrSington, time.Hour, 0) +} diff --git a/gamesrv/slotspkg/internal/generic/key/access_type.go b/gamesrv/slotspkg/internal/generic/key/access_type.go new file mode 100644 index 0000000..8d804a6 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/access_type.go @@ -0,0 +1,8 @@ +package key + +const ( + AccessTypeNil = "Nil" + AccessTypeDevice = "Device" + AccessTypeFacebook = "Facebook" + AccessTypeGoogle = "Google" +) diff --git a/gamesrv/slotspkg/internal/generic/key/activity_type.go b/gamesrv/slotspkg/internal/generic/key/activity_type.go new file mode 100644 index 0000000..7f46b01 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/activity_type.go @@ -0,0 +1,5 @@ +package key + +const ( + ActivityTypePass = iota + int64(1) +) diff --git a/gamesrv/slotspkg/internal/generic/key/authenticate.go b/gamesrv/slotspkg/internal/generic/key/authenticate.go new file mode 100644 index 0000000..34267de --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/authenticate.go @@ -0,0 +1,17 @@ +package key + +const ( + AuthenticateTypeUserTag = "UserTag" + AuthenticateTypeLogin = "Login" + AuthenticateTypeSpin = "UserTagSpin" + AuthenticateTypeABTag = "ABTag" +) + +const ( + AuthenticateFlagValid = "valid" +) + +const ( + AuthenticateResultPass = "pass" + AuthenticateResultFail = "fail" +) diff --git a/gamesrv/slotspkg/internal/generic/key/branch.go b/gamesrv/slotspkg/internal/generic/key/branch.go new file mode 100644 index 0000000..caa92ac --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/branch.go @@ -0,0 +1,40 @@ +package key + +import "fmt" + +type Branch uint32 + +const ( + BranchBlaze Branch = iota + BranchStake + BranchBet365 + BranchFutemax + BranchBrabet +) + +var Branches = []Branch{ + BranchBlaze, + BranchStake, + BranchBet365, + BranchFutemax, + BranchBrabet, +} + +var branchNameMap = map[Branch]string{ + BranchBlaze: "Blaze", + BranchStake: "Stake", + BranchBet365: "Bet365", + BranchFutemax: "Futemax", + BranchBrabet: "Brabet", +} + +func (b Branch) Val() uint32 { + return uint32(b) +} + +func (b Branch) String() string { + if s, ok := branchNameMap[b]; ok { + return s + } + return fmt.Sprintf("branchName=%d?", b) +} diff --git a/gamesrv/slotspkg/internal/generic/key/broadcast_type.go b/gamesrv/slotspkg/internal/generic/key/broadcast_type.go new file mode 100644 index 0000000..e8bd4cb --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/broadcast_type.go @@ -0,0 +1,6 @@ +package key + +const ( + BroadcastTypeNone int64 = iota + BroadcastTypeWithdraw +) diff --git a/gamesrv/slotspkg/internal/generic/key/coin.go b/gamesrv/slotspkg/internal/generic/key/coin.go new file mode 100644 index 0000000..ddd9694 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/coin.go @@ -0,0 +1,14 @@ +package key + +const ( + CoinChangeBook = "Book" + CoinChangeBet = "Bet" + CoinChangeSettle = "Settle" +) + +const ( + FreeCoin int64 = iota + 1 + FreeWinCoin + RechargeCoin + RechargeWinCoin +) diff --git a/gamesrv/slotspkg/internal/generic/key/common.go b/gamesrv/slotspkg/internal/generic/key/common.go new file mode 100644 index 0000000..76e01e4 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/common.go @@ -0,0 +1,6 @@ +package key + +const ( + Base = "Base" + Default = "Default" +) diff --git a/gamesrv/slotspkg/internal/generic/key/ddb.go b/gamesrv/slotspkg/internal/generic/key/ddb.go new file mode 100644 index 0000000..5dba23c --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/ddb.go @@ -0,0 +1,43 @@ +package key + +const ( + // Game + DdbGameAccountResetCount = "Game.AccountResetCount[%v][%v][%v]" // String + DdbGameAccount = "Game.Account[%v][%v][%v]" // String + DdbGameAccountHistory = "Game.AccountHistory[%v][%v][%v]" // Hash + DdbGamePlayerSN = "Game.PlayerSN" // String + DdbGamePlayer = "Game.Player[%v]" // Hash + DdbGameSettle = "Game.Settle[%v]" // List + DdbGamePool = "Game.Pool" // Hash + DdbGameClusterPool = "Game.Pool[%v]" // Hash + DdbGamePlayerLoginTime = "Game.PlayerLoginTime" // Hash + + // Cheat + DdbCheatSlots = "Cheat.Slots[%v]" // Hash + + // System + DdbSystemMailSN = "System.MailSN" // String + DdbSystemMail = "System.Mail[%v]" // Hash + DdbSystemPaymentOrder = "System.PaymentOrder" // Hash + DdbSystemPaymentOrderDaily = "System.PaymentOrderDaily[%v]" // Hash 2006-01-02 + DdbSystemBroadcast = "System.Broadcast" // List + DdbSystemInviteReward = "System.InviteReward" // Hash + DdbSystemInviteRank = "System.InviteRank" // String + DdbSystemInviteCoin = "System.InviteCoin" // SortedSet + DdbSystemPix = "System.Pix" // Hash PIX账号使用次数记录 + DdbSystemCPF = "System.CPF" // Hash CPF账号使用次数记录 + DdbSystemPhoneNumber = "System.PhoneNumber" // Hash 手机号使用次数记录 + DdbSystemStatisticsDaily = "System.Statistics[%v]" // Hash 2006-01-02 + DdbSystemCustomerServiceDaily = "System.CustomerServiceDaily[%v]" // Hash 2006-01-02 + DdbSystemCustomerServiceTotal = "System.CustomerServiceTotal" // Hash + + // Opt + DdbOptOperate = "Opt.Operate" // Hash 记录一些标记 + DdbOptConfig = "Opt.Config" // Hash + DdbOptClusterConfig = "Opt.Config[%v]" // Hash + DdbOptPlayer = "Opt.Player[%v]" // Hash + DdbOptDevice = "Opt.Device" // Hash 设备管理 + DdbOptBanPlayer = "Opt.BanPlayer" // Hash 封禁管理 + DdbOptPermitLogin = "Opt.PermitLogin" // Hash Login表通行许可 + DdbOptPermitUserTag = "Opt.PermitUserTag" // Hash UserTag表通行许可 +) diff --git a/gamesrv/slotspkg/internal/generic/key/event.go b/gamesrv/slotspkg/internal/generic/key/event.go new file mode 100644 index 0000000..fdbdcd2 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/event.go @@ -0,0 +1,6 @@ +package key + +const ( + EventPaymentSuccess = "EventPaymentSuccess" + EventBetWin = "EventBetWin" +) diff --git a/gamesrv/slotspkg/internal/generic/key/group.go b/gamesrv/slotspkg/internal/generic/key/group.go new file mode 100644 index 0000000..fbc9259 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/group.go @@ -0,0 +1,14 @@ +package key + +const ( + GroupA = "A" + GroupB = "B" + GroupC = "C" + GroupD = "D" + GroupE = "E" + GroupF = "F" + GroupG = "G" + GroupH = "H" + GroupI = "I" + GroupJ = "J" +) diff --git a/gamesrv/slotspkg/internal/generic/key/invite_award_type.go b/gamesrv/slotspkg/internal/generic/key/invite_award_type.go new file mode 100644 index 0000000..d410416 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/invite_award_type.go @@ -0,0 +1,13 @@ +package key + +const ( + InviteAwardTypeRegister int64 = 1 + InviteAwardTypePayment int64 = 2 +) + +const ( + InviteAwardStatusIncomplete int64 = 0 // 未达到限制条件 + InviteAwardStatusClaimable int64 = 1 // 可以领取的 + InviteAwardStatusReceived int64 = 2 // 领取过的 + InviteAwardStatusExpired int64 = 3 // 已经过期的 +) diff --git a/gamesrv/slotspkg/internal/generic/key/log_type.go b/gamesrv/slotspkg/internal/generic/key/log_type.go new file mode 100644 index 0000000..d15f2da --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/log_type.go @@ -0,0 +1,15 @@ +package key + +const ( + LogTypeProcess = "Process" // 服务器进程Track日志,周期:进程启动关闭 + LogTypeServer = "Server" // 服务器用户Track日志,周期:Session生命周期 + LogTypeUser = "User" // 服务器用户UserSet日志,周期:Session生命周期 + LogTypeClient = "Client" // 客户端日志,周期:客户端启动关闭 +) + +const ( + LogContextTypeNil = "nil" + LogContextTypeSession = "session" + LogContextTypePlayer = "player" + LogContextTypeUID = "uid" +) diff --git a/gamesrv/slotspkg/internal/generic/key/machine_key.go b/gamesrv/slotspkg/internal/generic/key/machine_key.go new file mode 100644 index 0000000..c7b8e4d --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/machine_key.go @@ -0,0 +1,11 @@ +package key + +const ( + MachineAdjusted = "MachineAdjusted" // 看广告加FreeSpin等 + MachineClass = "MachineClass" // 改class + MachineFormationSeqsDesc = "MachineFormationSeqsDesc" // 改轴 + MachineNextNodeID = "MachineNextNodeID" // 改节点 + MachineRoundType = "MachineRoundType" // 改轮次类型 + MachineVector = "MachineVector" // 改随机数队列 + MachineSkipWinCheck = "MachineSkipWinCheck" // 标记跳过检查 +) diff --git a/gamesrv/slotspkg/internal/generic/key/machine_mode.go b/gamesrv/slotspkg/internal/generic/key/machine_mode.go new file mode 100644 index 0000000..3f3da39 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/machine_mode.go @@ -0,0 +1,7 @@ +package key + +const ( + MachineModeLive string = "live" + MachineModeRecorder string = "recorder" + MachineModePlayer string = "player" +) diff --git a/gamesrv/slotspkg/internal/generic/key/machine_ratio_type.go b/gamesrv/slotspkg/internal/generic/key/machine_ratio_type.go new file mode 100644 index 0000000..dd19b87 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/machine_ratio_type.go @@ -0,0 +1,8 @@ +package key + +const ( + MachineRatioTypeNil int64 = iota // 不开启Ratio + MachineRatioMoreCoinMoreBet // 花更多的钱,下更多的注 + MachineRatioMoreCoinSameBet // 花更多的钱,下同样的注 + MachineRatioSameCoinMoreBet // 花同样的钱,下更多的注 +) diff --git a/gamesrv/slotspkg/internal/generic/key/mail_type.go b/gamesrv/slotspkg/internal/generic/key/mail_type.go new file mode 100644 index 0000000..647aed1 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/mail_type.go @@ -0,0 +1,6 @@ +package key + +const ( + // 后台补单 + MailTypeOrderPay int64 = 1 +) diff --git a/gamesrv/slotspkg/internal/generic/key/pay_type.go b/gamesrv/slotspkg/internal/generic/key/pay_type.go new file mode 100644 index 0000000..2a6a65c --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/pay_type.go @@ -0,0 +1,6 @@ +package key + +const ( + PayTypeFree = "free" + PayTypePaid = "paid" +) diff --git a/gamesrv/slotspkg/internal/generic/key/payment.go b/gamesrv/slotspkg/internal/generic/key/payment.go new file mode 100644 index 0000000..8b9f437 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/payment.go @@ -0,0 +1,118 @@ +package key + +import "fmt" + +type PaymentType int64 + +const ( + PaymentTypeNone PaymentType = iota + PaymentTypeDirect + PaymentTypeApple + PaymentTypeGoogle + PaymentTypeHuawei + PaymentTypeAws + PaymentTypePix +) + +var paymentTypeNameMap = map[PaymentType]string{ + PaymentTypeDirect: "Direct", + PaymentTypeGoogle: "Google", + PaymentTypeApple: "Apple", + PaymentTypeAws: "Aws", + PaymentTypeHuawei: "Huawei", + PaymentTypePix: "Pix", +} + +var paymentTypeReasonMap = map[PaymentType]string{ + PaymentTypeDirect: ReasonDirectPay, + PaymentTypeApple: ReasonApplePay, + PaymentTypeGoogle: ReasonGooglePay, + PaymentTypeHuawei: ReasonHuaweiPay, + PaymentTypeAws: ReasonAwsPay, + PaymentTypePix: ReasonPixPay, +} + +func (p PaymentType) Val() int64 { + return int64(p) +} + +func (p PaymentType) Reason() string { + return paymentTypeReasonMap[p] +} + +func (p PaymentType) String() string { + if s, ok := paymentTypeNameMap[p]; ok { + return s + } + return fmt.Sprintf("paymentType=%d?", p) +} + +func (p *PaymentType) FromString(s string) PaymentType { + for k, v := range paymentTypeNameMap { + if v == s { + *p = k + return k + } + } + return PaymentTypeNone +} + +const ( + PaymentPlatformOnePay = "OnePay" + PaymentPlatformCashPay = "CashPay" + PaymentPlatformLambdaPay = "LambdaPay" +) + +const ( + PaymentCallbackStatusSuccess = "SUCCESS" + PaymentCallbackStatusFail = "FAIL" + PaymentCallbackStatusRefund = "REFUND" + PaymentCallbackStatusUnknown = "UNKNOWN" + PaymentCallbackStatusIgnore = "IGNORE" +) + +const TextPaymentOrderStateHeader = "TextPaymentOrderState" + +const ( + PaymentOrderStateCreated = "Created" // 支付订单状态:已创建 + PaymentOrderStateRemittanceInvokeFail = "RemittanceInvokeFail" // 支付订单状态:汇款下单失败 + PaymentOrderStateRemittanceInProgress = "RemittanceInProgress" // 支付订单状态:汇款进行中 + PaymentOrderStateRemittanceCallbackFail = "RemittanceCallbackFail" // 支付订单状态:汇款回调失败 + PaymentOrderStateRemittanceSuccess = "RemittanceSuccess" // 支付订单状态:汇款已验证 + PaymentOrderStateCompleted = "Completed" // 支付订单状态:用户到账 +) + +const ( + // Create order + StepPaymentServerCreateOrderStart = "ServerCreateOrderStart" // 服务器创建订单开始 + StepPaymentServerCreateOrderVerifyFail = "ServerCreateOrderVerifyFail" // 服务器创建订单参数错误 + StepPaymentServerCreateOrderVerifySuccess = "ServerCreateOrderVerifySuccess" // 服务器创建订单参数正确 + StepPaymentServerCreateOrderSuccess = "ServerCreateOrderSuccess" // 服务器创建订单成功 + + // Invoke + StepPaymentServerInvokeStart = "ServerInvokeStart" // 服务器发起第三方请求开始 + StepPaymentServerInvokeSuccess = "ServerInvokeSuccess" // 服务器发起第三方请求成功 + StepPaymentServerInvokeFail = "ServerInvokeFail" // 服务器发起第三方请求失败 + + // Callback + StepPaymentServerCallbackStart = "ServerCallbackStart" // 服务器收到第三方回调开始 + StepPaymentServerCallbackVerifyFail = "ServerCallbackVerifyFail" // 服务器收到第三方回调参数错误 + StepPaymentServerCallbackVerifySuccess = "ServerCallbackVerifySuccess" // 服务器收到第三方回调参数正确 + StepPaymentServerCallbackFail = "ServerCallbackFail" // 服务器收到第三方回调失败 + StepPaymentServerCallbackSuccess = "ServerCallbackSuccess" // 服务器收到第三方回调成功 + + // Settle + StepPaymentServerSettleSuccess = "ServerSettleSuccess" // 服务器结算成功 + + // Client + StepPaymentClientCreateOrder = "ClientCreateOrder" // 客户端创建订单 + StepPaymentClientCreateOrderSuccess = "ClientCreateOrderSuccess" // 客户端创建订单成功(展示二维码) + StepPaymentClientSettleSuccess = "ClientSettleSuccess" // 客户端结算成功 +) + +const ( + // Purchase + StepPaymentServerPurchaseStart = "ServerPurchaseStart" // 服务器发起购买开始 + StepPaymentServerPurchaseVerifyFail = "ServerPurchaseVerifyFail" // 服务器发起购买失败 + StepPaymentServerPurchaseSuccess = "ServerPurchaseSuccess" // 服务器发起购买成功 +) diff --git a/gamesrv/slotspkg/internal/generic/key/player_black.go b/gamesrv/slotspkg/internal/generic/key/player_black.go new file mode 100644 index 0000000..5254f5a --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/player_black.go @@ -0,0 +1,7 @@ +package key + +const ( + BlackMin int64 = 1 << iota + BlackG + BlackMax +) diff --git a/gamesrv/slotspkg/internal/generic/key/player_mode.go b/gamesrv/slotspkg/internal/generic/key/player_mode.go new file mode 100644 index 0000000..5fdd503 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/player_mode.go @@ -0,0 +1,7 @@ +package key + +const ( + PlayModeNormal = iota + PlayModeVector + PlayModeClass +) diff --git a/gamesrv/slotspkg/internal/generic/key/process_command.go b/gamesrv/slotspkg/internal/generic/key/process_command.go new file mode 100644 index 0000000..3388836 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/process_command.go @@ -0,0 +1,6 @@ +package key + +const ( + ProcessCmdSimulator = "simulator" + ProcessCmdDevelop = "develop" +) diff --git a/gamesrv/slotspkg/internal/generic/key/rate_mode.go b/gamesrv/slotspkg/internal/generic/key/rate_mode.go new file mode 100644 index 0000000..acabcef --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/rate_mode.go @@ -0,0 +1,7 @@ +package key + +const ( + RateModeBlaze = iota + int64(1) + RateModeStake + RateModeStake2 +) diff --git a/gamesrv/slotspkg/internal/generic/key/reasons.go b/gamesrv/slotspkg/internal/generic/key/reasons.go new file mode 100644 index 0000000..e3d9fa9 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/reasons.go @@ -0,0 +1,64 @@ +package key + +type Reason = string + +const ( + ReasonEnterInit = "ReasonEnterInit" + ReasonTurntableFree = "ReasonTurntableFree" + ReasonTurntablePay = "ReasonTurntablePay" + ReasonTurntableAd = "ReasonTurntableAd" + ReasonBindFaceBookAward = "ReasonBindFaceBookAward" + ReasonSignAward = "ReasonSignAward" + ReasonPraise = "ReasonPraise" + ReasonInitialAward = "ReasonInitialAward" + ReasonPixPay = "ReasonPixPay" + ReasonDirectPay = "ReasonDirectPay" + ReasonGooglePay = "ReasonGooglePay" + ReasonApplePay = "ReasonApplePay" + ReasonAwsPay = "ReasonAwsPay" + ReasonHuaweiPay = "ReasonHuaweiPay" + ReasonWithdrawApply = "ReasonWithdrawApply" + ReasonWithdrawRefund = "ReasonWithdrawRefund" + ReasonMailCollect = "ReasonMailCollect" + ReasonSlotsBet = "ReasonSlotsBet" + ReasonSlotsWin = "ReasonSlotsWin" + ReasonAirplaneSettle = "ReasonAirplaneSettle" + ReasonAirplaneJump = "ReasonAirplaneJump" + ReasonAirplaneBet = "ReasonAirplaneBet" + ReasonDiceBet = "ReasonDiceBet" + ReasonDiceSettle = "ReasonDiceSettle" + ReasonClubBet = "ReasonClubBet" + ReasonClubSettle = "ReasonClubSettle" + ReasonDoubleBet = "ReasonDoubleBet" + ReasonMinesBet = "ReasonMinesBet" + ReasonDoubleSettle = "ReasonDoubleSettle" + ReasonMinesSettle = "ReasonMinesSettle" + ReasonCheat = "ReasonCheat" + ReasonSimulatorDec = "ReasonSimulatorDec" + ReasonSimulatorInc = "ReasonSimulatorInc" + ReasonBetRefund = "ReasonBetRefund" + ReasonLuckyWheelBet = "ReasonLuckyWheelBet" + ReasonLuckyWheelWin = "ReasonLuckyWheelWin" + ReasonInvite = "ReasonInvite" + ReasonInviteRegister = "ReasonInviteRegister" + ReasonInviteCommission = "ReasonInviteCommission" + ReasonClearCoin = "ReasonClearCoin" + ReasonRechargeConvertFree = "ReasonRechargeConvertFree" + ReasonRechargeConvertPay = "ReasonRechargeConvertPay" + ReasonBonus = "ReasonBonus" + ReasonPlinkoBet = "ReasonPlinkoBet" + ReasonPlinkoWin = "ReasonPlinkoWin" + ReasonVipCashback = "ReasonVipCashback" + ReasonVipPromotion = "ReasonVipPromotion" + ReasonVipWeeklyReward = "ReasonVipWeeklyReward" + ReasonVipMonthlyReward = "ReasonVipMonthlyReward" + ReasonPhone = "ReasonPhone" + ReasonVipOver0 = "ReasonVipOver0" + ReasonMemberCardWeek = "ReasonMemberCardWeek" + ReasonMemberCardMonth = "ReasonMemberCardMonth" + ReasonMemberCardYear = "ReasonMemberCardYear" + ReasonPassLevelReward = "ReasonPassLevelReward" + ReasonLinearDiceBet = "ReasonLinearDiceBet" + ReasonLinearDiceWin = "ReasonLinearDiceWin" + ReasonLevelUp = "ReasonLevelUp" +) diff --git a/gamesrv/slotspkg/internal/generic/key/redimo_type.go b/gamesrv/slotspkg/internal/generic/key/redimo_type.go new file mode 100644 index 0000000..2618685 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/redimo_type.go @@ -0,0 +1,10 @@ +package key + +const ( + RedimoTypeString = "String" + RedimoTypeHash = "Hash" + RedimoTypeHashField = "HashField" + RedimoTypeList = "List" + RedimoTypeSet = "Set" + RedimoTypeZSet = "ZSet" +) diff --git a/gamesrv/slotspkg/internal/generic/key/room_type.go b/gamesrv/slotspkg/internal/generic/key/room_type.go new file mode 100644 index 0000000..5a4a50e --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/room_type.go @@ -0,0 +1,7 @@ +package key + +const ( + RoomTypeNone = "None" + RoomTypeFree = "Free" + RoomTypePaid = "Paid" +) diff --git a/gamesrv/slotspkg/internal/generic/key/second_stage_strategy.go b/gamesrv/slotspkg/internal/generic/key/second_stage_strategy.go new file mode 100644 index 0000000..8b39db8 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/second_stage_strategy.go @@ -0,0 +1,8 @@ +package key + +const ( + SecondStageStrategyNone = iota + SecondStageStrategyWithdraw + SecondStageStrategyBigWin + SecondStageStrategySpecialOffer +) diff --git a/gamesrv/slotspkg/internal/generic/key/service_name.go b/gamesrv/slotspkg/internal/generic/key/service_name.go new file mode 100644 index 0000000..5cd73d5 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/service_name.go @@ -0,0 +1,10 @@ +package key + +const ( + ServiceAirplane = "Airplane" + ServiceMines = "Mines" + ServiceSlots = "Slots" + ServiceLuckyWheel = "LuckyWheel" + ServicePlinko = "Plinko" + ServiceLinearDice = "LinearDice" +) diff --git a/gamesrv/slotspkg/internal/generic/key/session_callback_seq.go b/gamesrv/slotspkg/internal/generic/key/session_callback_seq.go new file mode 100644 index 0000000..550ed37 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/session_callback_seq.go @@ -0,0 +1,7 @@ +package key + +const ( + SessionOnClosedSeqScheduler = iota + SessionOnClosedSeqSessionCenter + SessionOnClosedSeqControlService +) diff --git a/gamesrv/slotspkg/internal/generic/key/session_key.go b/gamesrv/slotspkg/internal/generic/key/session_key.go new file mode 100644 index 0000000..687f9a8 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/session_key.go @@ -0,0 +1,9 @@ +package key + +const ( + SessionContext = "SessionContext" + SessionPlayer = "SessionPlayer" + SessionMachine = "SessionMachine" + SessionMachineSource = "SessionMachineLiveSource" + SessionReloadPlayer = "SessionReloadPlayer" +) diff --git a/gamesrv/slotspkg/internal/generic/key/spin_type.go b/gamesrv/slotspkg/internal/generic/key/spin_type.go new file mode 100644 index 0000000..23c0f74 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/spin_type.go @@ -0,0 +1,17 @@ +package key + +const ( + Root = "Root" + BaseSpin = "BaseSpin" + FreeSpin = "FreeSpin" + BonusGame = "BonusGame" + // Don't add other spin type here +) + +// respinstatus +const ( + RespinStatus = iota + RespinTrigger + RespinProcess + RespinFinish +) diff --git a/gamesrv/slotspkg/internal/generic/key/tag_hub.go b/gamesrv/slotspkg/internal/generic/key/tag_hub.go new file mode 100644 index 0000000..ec3122c --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/tag_hub.go @@ -0,0 +1,39 @@ +package key + +const ( + TagHubUser = "user" // 用户标签 + TagHubGuide = "guide" // 入口标签 + TagHubLog = "log" // 日志标签 + TagHubSecondStage = "second_stage" // 二阶段标签 +) + +const ( + NetworkPromotionOrganic = "organic" // 来自于自然量 +) + +const ( + UserTagUndefined = "" // 未定义 + UserTagReset = "0" // 重设用户 + UserTagTarget = "1" // 目标用户 + UserTagNature = "2" // 自然用户 + UserTagForceTarget = "-1" // 强制目标用户 + UserTagForceNature = "-2" // 强制自然用户 +) + +const ( + LogTagOpen = "1" // 打开 + LogTagClose = "0" // 关闭 +) + +const ( + GuideTagCrash = "crash" + GuideTagGatesOfOlympus = "gates_of_olympus" + GuideTagHall = "hall" +) + +const ( + SecondStageTagUndefined = "" + SecondStageTagWithdraw = "withdraw" + SecondStageTagBigWin = "big_win" + SecondStageTagSpecialOffer = "special_offer" +) diff --git a/gamesrv/slotspkg/internal/generic/key/theme.go b/gamesrv/slotspkg/internal/generic/key/theme.go new file mode 100644 index 0000000..7bcbc31 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/theme.go @@ -0,0 +1,42 @@ +package key + +const ( + FortuneTiger = "FortuneTiger" + FortuneDragon = "FortuneDragon" + FortuneRabbit = "FortuneRabbit" + FortuneOx = "FortuneOx" + FortuneMouse = "FortuneMouse" + CashMania = "CashMania" + Test = "Test" +) +const ( + GameId_Min uint = iota + GameId_Tiger + GameId_Dragon + GameId_Rabbit + GameId_OX + GameId_Mouse + GameId_Cash_Mania + + GameId_Max + GameId_Test = 999 +) + +var GameMap = map[uint]string{ + GameId_Tiger: FortuneTiger, + GameId_Dragon: FortuneDragon, + GameId_Rabbit: FortuneRabbit, + GameId_OX: FortuneOx, + GameId_Mouse: FortuneMouse, + GameId_Cash_Mania: CashMania, + GameId_Test: Test, +} +var GameMapTheme = map[string]uint{ + FortuneTiger: GameId_Tiger, + FortuneDragon: GameId_Dragon, + FortuneRabbit: GameId_Rabbit, + FortuneOx: GameId_OX, + FortuneMouse: GameId_Mouse, + CashMania: GameId_Cash_Mania, + Test: GameId_Test, +} diff --git a/gamesrv/slotspkg/internal/generic/key/unique.go b/gamesrv/slotspkg/internal/generic/key/unique.go new file mode 100644 index 0000000..5dd584b --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/unique.go @@ -0,0 +1,7 @@ +package key + +const ( + UniqueAdmit int64 = iota + UniqueKick + UniqueCanceled +) diff --git a/gamesrv/slotspkg/internal/generic/key/user_tag_system.go b/gamesrv/slotspkg/internal/generic/key/user_tag_system.go new file mode 100644 index 0000000..66e989a --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/user_tag_system.go @@ -0,0 +1,22 @@ +package key + +const ( + UserTagSystemPass = "Pass" + UserTagSystemPixShop = "PixShop" + UserTagSystemSpecialOffer = "SpecialOffer" + UserTagSystemMoneyToken = "MoneyToken" + UserTagSystemWithdraw = "Withdraw" + UserTagSystemFbIconSubscript = "FbIconSubscript" + UserTagSystemInvite = "Invite" + UserTagSystemBroadcast = "Broadcast" + UserTagSystemPraise = "Praise" + UserTagSystemGoogleShop = "GoogleShop" + UserTagSystemBonus = "Bonus" + UserTagSystemDailyDeals = "DailyDeals" + UserTagSystemWeeklyDeals = "WeeklyDeals" + UserTagSystemCashback = "Cashback" + UserTagSystemVip = "Vip" + UserTagSystemPhone = "Phone" + UserTagSystemWithdrawHistory = "WithdrawHistory" + UserTagSystemMemberCard = "MemberCard" +) diff --git a/gamesrv/slotspkg/internal/generic/key/win_type.go b/gamesrv/slotspkg/internal/generic/key/win_type.go new file mode 100644 index 0000000..e951cbb --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/key/win_type.go @@ -0,0 +1,27 @@ +package key + +const ( + WinTypeNil int64 = iota + WinTypeNormal + WinTypeBig + WinTypeMega + WinTypeEpic + WinTypeEnd +) + +const ( + WinMethodAll int64 = iota + WinMethodFormation + WinMethodFeature + WinMethodEnd +) + +const ( + SummaryGroupAll = "GroupAll" + SummaryGroupOthers = "GroupOthers" + SummaryGroupOthersBase = "GroupOthersBase" + SummaryGroupOthersFree = "GroupOthersFree" + SummaryAncestorNil = "AncestorNil" + SummaryAncestorBase = "AncestorBase" + SummaryAncestorFree = "AncestorFree" +) diff --git a/gamesrv/slotspkg/internal/generic/pkg/hashx/hash.go b/gamesrv/slotspkg/internal/generic/pkg/hashx/hash.go new file mode 100644 index 0000000..f9cf6a3 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/pkg/hashx/hash.go @@ -0,0 +1,111 @@ +package hashx + +import ( + "bytes" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "sort" + "strings" +) + +// GenerateSignature 生成 HMAC-SHA256 签名并进行 Base64 URL 编码 +func GenerateSignature(secret, timestamp string, entry map[string]interface{}) string { + content := computeSignature(entry, secret, timestamp) + sign := encrypt(secret, content) + return sign +} +func computeSignature(content map[string]interface{}, secret, timestamp string) []byte { + var ( + buf bytes.Buffer + entrySet = make([]string, 0, len(content)) + ) + + keys := make([]string, 0, len(content)) + for k, _ := range content { + keys = append(keys, k) + } + sort.Strings(keys) + + for _, k := range keys { + kv := fmt.Sprintf("%s=%v", k, content[k]) + entrySet = append(entrySet, kv) + } + buf.WriteString(strings.Join(entrySet, "&")) + buf.WriteString(":") + buf.Write([]byte(secret)) + buf.WriteString(timestamp) + + return buf.Bytes() +} + +func encrypt(secret string, message []byte) string { + hmacSha256 := hmac.New(sha256.New, []byte(secret)) + hmacSha256.Write(message) + + hash := hmacSha256.Sum(nil) + + // to hex + signature := make([]byte, hex.EncodedLen(len(hash))) + hex.Encode(signature, hash) + // to base64url + return base64.RawURLEncoding.EncodeToString(signature) +} + +// 计算数据的SHA-256哈希值并返回其十六进制表示 +func calculateHash(data string) string { + hasher := sha256.New() + hasher.Write([]byte(data)) + hashBytes := hasher.Sum(nil) + return hex.EncodeToString(hashBytes) +} + +// 验证数据的哈希值是否与预期的哈希值相匹配 +func VerifyHash(data string, expectedHash string) bool { + // 计算数据的哈希值 + dataHash := calculateHash(data) + // 比较计算得到的哈希值与预期的哈希值 + return dataHash == expectedHash +} + +// HMAC-SHA256增加了key +func Hs256(key string, body []byte) string { + h := hmac.New(sha256.New, []byte(key)) + io.WriteString(h, string(body)) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +// 验证数据的哈希值是否与预期的哈希值相匹配 +func VerifyHashKey(key string, data []byte, expectedHash string) bool { + // 计算数据的哈希值 + dataHash := Hs256(key, data) + // 比较计算得到的哈希值与预期的哈希值 + return dataHash == expectedHash +} +func SortJson(in []byte) []byte { + var data map[string]interface{} + json.Unmarshal(in, &data) + + // 对 map 中的键进行排序 + keys := make([]string, 0, len(data)) + for key := range data { + keys = append(keys, key) + } + sort.Strings(keys) + // 构建新的有序的 map + sortedData := make(map[string]interface{}) + for _, key := range keys { + sortedData[key] = data[key] + } + + // 编码为 JSON 字符串 + newJSONData, err := json.Marshal(sortedData) + if err != nil { + //fmt.Println("JSON 编码错误:", err) + } + return newJSONData +} diff --git a/gamesrv/slotspkg/internal/generic/pkg/jwts/jwt.go b/gamesrv/slotspkg/internal/generic/pkg/jwts/jwt.go new file mode 100644 index 0000000..de4444c --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/pkg/jwts/jwt.go @@ -0,0 +1,91 @@ +package jwts + +import ( + "context" + "encoding/json" + "github.com/golang-jwt/jwt/v4" + "github.com/zeromicro/go-zero/rest/httpx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "net/http" + "time" +) + +// JwtPayLoad jwt中payload数据 +type JwtPayLoad struct { + Uid uint64 `json:"uid"` + Expires int64 `json:"expires"` +} +type JwtManage struct { + AccessSecret string + AccessExpire int64 + ReplaceExpire int64 +} + +func NewJwtManage(secret string, exp, replaceExp int64) JwtManager { + return &JwtManage{secret, exp, replaceExp} +} +func (j *JwtManage) GetJwtUid(ctx context.Context) (uid int64, err error) { + uid, err = (ctx.Value("uid")).(json.Number).Int64() + if err != nil { + return + } + return +} + +func (j *JwtManage) CheckJwtExp(ctx context.Context) (newToken string, err error) { + exp, err := (ctx.Value("expires")).(json.Number).Int64() + if err != nil { + return + } + uid, _ := j.GetJwtUid(ctx) + if time.Now().Add(time.Duration(j.ReplaceExpire)*time.Minute).UnixMilli() > exp { + newToken, _ = j.GenToken(uint64(uid)) + } + return +} + +func (j *JwtManage) GenToken(uid uint64) (string, error) { + jpl := JwtPayLoad{Uid: uid} + exp := time.Now().Add(time.Minute * time.Duration(j.AccessExpire)) + jpl.Expires = exp.UnixMilli() + claim := CustomClaims{ + JwtPayLoad: jpl, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(exp), + }, + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) + return token.SignedString([]byte(j.AccessSecret)) +} + +type CustomClaims struct { + JwtPayLoad + jwt.RegisteredClaims +} + +// ParseToken 解析 token +func ParseToken(tokenStr string, accessSecret string, expires int64) (*CustomClaims, error) { + token, err := jwt.ParseWithClaims(tokenStr, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) { + return []byte(accessSecret), nil + }) + if err != nil { + return nil, err + } + if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid { + return claims, nil + } + return nil, errors.New("invalid token") +} +func JwtUnauthorizedResult(w http.ResponseWriter, r *http.Request, err error) { + //fmt.Println(err) // 具体的错误,没带token,token过期?伪造token? + type Error struct { + Code int `json:"code"` + Message string `json:"message"` + } + type Response struct { + Data interface{} `json:"data"` + Error *Error `json:"error"` + } + httpx.WriteJson(w, http.StatusOK, &Response{Error: &Error{int(errors.JwtErr), err.Error()}}) +} diff --git a/gamesrv/slotspkg/internal/generic/pkg/jwts/jwter.go b/gamesrv/slotspkg/internal/generic/pkg/jwts/jwter.go new file mode 100644 index 0000000..1feaddc --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/pkg/jwts/jwter.go @@ -0,0 +1,9 @@ +package jwts + +import "context" + +type JwtManager interface { + GetJwtUid(ctx context.Context) (uid int64, err error) + CheckJwtExp(ctx context.Context) (newToken string, err error) + GenToken(uid uint64) (string, error) +} diff --git a/gamesrv/slotspkg/internal/generic/pkg/slice.go b/gamesrv/slotspkg/internal/generic/pkg/slice.go new file mode 100644 index 0000000..54a8be5 --- /dev/null +++ b/gamesrv/slotspkg/internal/generic/pkg/slice.go @@ -0,0 +1,24 @@ +package pkg + +import ( + "reflect" + "strings" +) + +func StructToMap(obj interface{}) map[string]interface{} { + val := reflect.ValueOf(obj) + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + + result := make(map[string]interface{}) + typ := val.Type() + + for i := 0; i < val.NumField(); i++ { + field := val.Field(i) + fieldName := strings.ToLower(typ.Field(i).Name) + result[fieldName] = field.Interface() + } + + return result +} diff --git a/gamesrv/slotspkg/internal/module/player/bet.go b/gamesrv/slotspkg/internal/module/player/bet.go new file mode 100644 index 0000000..03febcb --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/bet.go @@ -0,0 +1,106 @@ +package player + +import ( + "fmt" + "qstar_server/internal/dao/thinkingdata" + "qstar_server/internal/generic/global" + "qstar_server/internal/generic/key" + "qstar_server/internal/module/shared" + "strings" + + "github.com/tomas-qstarrs/boost/cast" +) + +func (b *Bet) Clear() { + game := ParseGameID(b.GameID.Get()) + if game == nil { + return + } + + coinChange := &thinkingdata.CoinChangeBet{} + coinChange.Reason = game.Contest + coinChange.Type = key.CoinChangeBet + coinChange.BeforeCoin = b.Coin.Get() + coinChange.DecCoin = b.Coin.Get() + defer func() { + coinChange.AfterCoin = b.Coin.Get() + //thinkingdata.Track(Context(nil, game), coinChange) + }() + + b.ProcessID.Set("") + b.GameID.Set("") + b.Coin.Set(0) +} + +func (b *Bet) Bet(game *shared.Game, betCoin DecCoin) { + gameID := GetGameID(game) + + if b.GameID.Get() == gameID { + coinChange := &thinkingdata.CoinChangeBet{} + coinChange.Reason = game.Contest + coinChange.Type = key.CoinChangeBet + coinChange.BeforeCoin = b.Coin.Get() + + coinChange.IncCoin = betCoin.Coin + + defer func() { + coinChange.AfterCoin = b.Coin.Get() + + //thinkingdata.Track(Context(nil, game), coinChange) + }() + + b.ProcessID.Set(global.ProcessID) + + } else { + b.Clear() + + coinChange := &thinkingdata.CoinChangeBet{} + coinChange.Reason = game.Contest + coinChange.Type = key.CoinChangeBet + coinChange.BeforeCoin = b.Coin.Get() + coinChange.IncCoin = betCoin.Coin + + defer func() { + coinChange.AfterCoin = b.Coin.Get() + + //thinkingdata.Track(Context(nil, game), coinChange) + }() + + b.GameID.Set(gameID) + b.ProcessID.Set(global.ProcessID) + } +} + +func GetGameID(game *shared.Game) string { + if game == nil { + return "" + } + return fmt.Sprintf("%v.%v.%v.%v.%v", + game.Contest, + game.ContestType, + game.RoomID, + game.RoomType, + game.RoundID, + ) +} + +func ParseGameID(gameID string) *shared.Game { + if gameID == "" { + return nil + } + + strs := strings.Split(gameID, ".") + if len(strs) != 5 { + return nil + } + + game := &shared.Game{ + Contest: strs[0], + ContestType: strs[1], + RoomID: cast.ToInt64(strs[2]), + RoomType: strs[3], + RoundID: cast.ToInt64(strs[4]), + } + + return game +} diff --git a/gamesrv/slotspkg/internal/module/player/coin.go b/gamesrv/slotspkg/internal/module/player/coin.go new file mode 100644 index 0000000..4a749f0 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/coin.go @@ -0,0 +1,208 @@ +package player + +import ( + "github.com/tomas-qstarrs/boost/timex" + "mongo.games.com/game/gamesrv/slotspkg/internal/dao/thinkingdata" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "sync" +) + +type coinCenter struct { + imageMap sync.Map +} + +// CoinCenter 仅在Player协程使用 +var CoinCenter = &coinCenter{} + +// Range 遍历 +func (c *coinCenter) Range(f func(key, value any) bool) { + c.imageMap.Range(f) +} + +// Get 在线或者离线获取CoinBag +func (c *coinCenter) Get(v any) CoinCart { + return c.fetch(v) +} + +// Dec 下注 必须在线 +func (c *coinCenter) Dec(s *session.Session, game *shared.Game, reason key.Reason, decCoin DecCoin) { + p := Get(s) + if p.GM.LockCoin.Get() { + return + } + if decCoin.GetCoin() < 0 { + panic(errors.CoinNegative.ErrorWith(decCoin.GetCoin())) + } + + cc := c.fetch(s) + coinChange := &thinkingdata.CoinChange{} + coinChange.Reason = reason + coinChange.Type = key.CoinChangeBook + coinChange.BeforeCoin = cc.GetCoin() + coinChange.DecCoin = decCoin.GetCoin() + defer func() { + cc := c.fetch(s) + coinChange.AfterCoin = cc.GetCoin() + //thinkingdata.Track(Context(s, game), coinChange) + }() + + c.commit(s, c.fetch(s).dec(decCoin)) +} + +// Inc 结算 必须在线 +func (c *coinCenter) Inc(s *session.Session, game *shared.Game, reason key.Reason, incCoin IncCoin) { + p := Get(s) + if p.GM.LockCoin.Get() { + return + } + if incCoin.GetCoin() < 0 { + panic(errors.CoinNegative.ErrorWith(incCoin.GetCoin())) + } + + cc := c.fetch(s) + coinChange := &thinkingdata.CoinChange{} + coinChange.Reason = reason + coinChange.Type = key.CoinChangeBook + coinChange.BeforeCoin = cc.GetCoin() + coinChange.IncCoin = incCoin.GetCoin() + defer func() { + cc := c.fetch(s) + coinChange.AfterCoin = cc.GetCoin() + //thinkingdata.Track(Context(s, game), coinChange) + }() + + c.commit(s, c.fetch(s).inc(incCoin)) +} +func (c *coinCenter) Reset(s *session.Session, coinCart CoinCart) { + rp := Get(s) + rp.Book.Coin.Set(coinCart.Coin) + c.commit(s, c.fetch(s)) +} +func (c *coinCenter) Sync(s *session.Session) { + c.commit(s, c.fetch(s)) +} + +// fetch 获取CoinBag +func (c *coinCenter) fetch(v any) CoinCart { + switch v := v.(type) { + case int64: + uid := v + vv, ok := c.imageMap.Load(uid) + if !ok { + panic(errors.CoinBagNotFound.Error()) + } + return vv.(CoinCart) + case *session.Session: + s := v + rp := Get(s) + return CoinCart{ + Coin: rp.Book.Coin.Get(), + } + default: + panic(errors.CoinBagTypeError.ErrorWith(v)) + } +} + +func (c *coinCenter) commit(s *session.Session, cb CoinCart) { + rp := Get(s) + rp.Book.Coin.Set(cb.Coin) + + cb.UpdateTime = timex.Now().Unix() + c.imageMap.Store(s.UID(), cb) +} + +type CoinCart struct { + UpdateTime int64 // 更新时间 + Coin int64 +} + +func (cc CoinCart) GetCoin() int64 { + return cc.Coin +} + +func (cc CoinCart) IsCoinEnough(value int64) bool { + return cc.GetCoin() >= value +} + +// dec 下注 +func (cc CoinCart) dec(betCoin DecCoin) CoinCart { + cc.Coin -= betCoin.Coin + return cc +} + +// inc 增加 +func (cc CoinCart) inc(ic IncCoin) CoinCart { + cc.Coin += ic.Coin + return cc +} + +type IncCoin struct { + Coin int64 +} + +func (ic *IncCoin) GetCoin() int64 { + return ic.Coin +} + +func (ic IncCoin) Add(i IncCoin) IncCoin { + ic.Coin += i.Coin + return ic +} + +func (ic *IncCoin) Merge(i IncCoin) { + ic.Coin += i.Coin +} + +type DecCoin struct { + Coin int64 +} + +func NewDecCoin(cc CoinCart, value int64) DecCoin { + var fetch = func(value int64, coin int64) (int64, int64) { + if value > coin { + return coin, value - coin + } + return value, 0 + } + + bc := DecCoin{} + + if cc.GetCoin() < value { + return bc + } + + //coin + coinFetch, value := fetch(value, cc.Coin) + bc.Coin = coinFetch + + if value <= 0 { + return bc + } + return bc +} +func (bc DecCoin) GetCoin() int64 { + return bc.Coin +} + +func (bc DecCoin) Add(b DecCoin) DecCoin { + bc.Coin += b.Coin + return bc +} + +func (bc *DecCoin) Merge(b DecCoin) { + bc.Coin += b.Coin +} +func (bc DecCoin) Rate(isFree bool, rate float64) IncCoin { + win := int64(float64(bc.GetCoin())*rate + 0.5) + win -= win % 100 + if win <= 0 { + return IncCoin{} + } + var ic = IncCoin{ + Coin: win, + } + return ic +} diff --git a/gamesrv/slotspkg/internal/module/player/dataset.go b/gamesrv/slotspkg/internal/module/player/dataset.go new file mode 100644 index 0000000..1bd986d --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/dataset.go @@ -0,0 +1,26 @@ +package player + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shell" +) + +type dataSet struct { + *shell.Shell +} + +func DataSetName() string { + return "Player" +} + +func DataSet(s *session.Session) *dataSet { + return &dataSet{ + Shell: shell.Session(s, DataSetName(), CategoryName(s)), + } +} + +func ShellDataSet(sh *shell.Shell) *dataSet { + return &dataSet{ + Shell: sh, + } +} diff --git a/gamesrv/slotspkg/internal/module/player/db.go b/gamesrv/slotspkg/internal/module/player/db.go new file mode 100644 index 0000000..86584e6 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/db.go @@ -0,0 +1,217 @@ +package player + +import ( + "encoding/json" + "github.com/tomas-qstarrs/boost/cast" + "github.com/tomas-qstarrs/boost/mathx" + "github.com/tomas-qstarrs/boost/mjson" + "github.com/tomas-qstarrs/boost/timex" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/ddb" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" +) + +type DB struct { +} + +var db DB + +func (db DB) PushPlayer(uid uint64, data map[string]string) { + if len(data) == 0 { + return + } + + c := ddb.RedimoClient() + if err := c.HMSET(global.DDB.GamePlayer(uid), data); err != nil { + panic(err) + } +} + +func (db DB) PullPlayer(uid uint64) map[string]string { + c := ddb.RedimoClient() + var ( + err error + playerMap = make(map[string]string) + rocksMap = make(map[string]string) + gameMap = make(map[string]string) + ) + + // Get game map + gameValMap, err := c.HGETALL(global.DDB.GamePlayer(uid)) + if err != nil { + panic(err) + } + for k, v := range gameValMap { + gameMap[k] = v.String() + } + + // Merge + mergeFields := []string{ + "Char.TagHub", + } + mergeField := func(m map[string]string, k string, v string) { + if mathx.In(k, mergeFields) { + srcData := []byte(m[k]) + dstData := []byte(v) + if json.Valid(srcData) && json.Valid(dstData) { + srcData, err := mjson.Merge(srcData, dstData) + if err != nil { + panic(err) + } + m[k] = string(srcData) + return + } + } + m[k] = v + } + + // merge game map + for k, v := range gameMap { + mergeField(playerMap, k, v) + } + + // merge rocks map + for k, v := range rocksMap { + mergeField(playerMap, k, v) + } + + return playerMap +} + +// 按key存储 +func (db DB) SaveHashTarget(k, f, v string) { + value := make(map[string]interface{}) + value[f] = v + c := ddb.RedimoClient() + _, err := c.HSET(k, value) + if err != nil { + panic(err) + } +} + +// 按key获取 +func (db DB) GetHashTarget(k, f string) string { + c := ddb.RedimoClient() + val, err := c.HGET(k, f) + if err != nil { + panic(err) + } + return val.String() +} + +// 判断是否存在key +func (db DB) Exist(k string) bool { + c := ddb.RedimoClient() + val, err := c.EXISTS(k) + if err != nil { + panic(err) + } + return val +} + +func (db DB) QueryPermission(keyType string, keys ...any) bool { + var strs []string + for _, key := range keys { + str := cast.ToString(key) + if len(str) == 0 { + continue + } + + strs = append(strs, str) + } + c := ddb.RedimoClient() + valMap, err := c.HMGET(keyType, strs...) + if err != nil { + panic(err) + } + + for _, val := range valMap { + if val.Present() { + return true + } + } + + return false +} + +func (db DB) IncrCustomerServiceIDTimes(id int64) { + c := ddb.RedimoClient() + _, err := c.HINCRBY(global.DDB.SystemCustomerServiceTotal(), cast.ToString(id), 1) + if err != nil { + panic(err) + } + + _, err = c.HINCRBY(global.DDB.SystemCustomerServiceDaily(timex.Now().Format("2006-01-02")), cast.ToString(id), 1) + if err != nil { + panic(err) + } +} + +func (db DB) GetCustomerServiceIDTimes(id int64) (int64, int64) { + c := ddb.RedimoClient() + total, err := c.HGET(global.DDB.SystemCustomerServiceTotal(), cast.ToString(id)) + if err != nil { + panic(err) + } + + daily, err := c.HGET(global.DDB.SystemCustomerServiceDaily(timex.Now().Format("2006-01-02")), cast.ToString(id)) + if err != nil { + panic(err) + } + + return total.Int(), daily.Int() +} + +// incrMailID 获取全局自增id +func (db DB) IncrMailID() int64 { + c := ddb.RedimoClient() + res, err := c.INCR(global.DDB.SystemMailSN()) + if err != nil { + panic(err) + } + return res +} + +// 获取list长度 +func (db DB) LLen(k string) int64 { + c := ddb.RedimoClient() + l, err := c.LLEN(k) + if err != nil { + panic(err) + } + return l +} + +// 获取List全部数据 +func (db DB) LAll(k string) []string { + c := ddb.RedimoClient() + vs, err := c.LRANGE(k, 0, -1) + if err != nil { + panic(err) + } + var res []string + for _, v := range vs { + res = append(res, v.String()) + } + return res +} + +// 移除list 指定数量成员 +func (db DB) LPop(k string, n int64) { + c := ddb.RedimoClient() + for n > 0 { + _, err := c.LPOP(k) + if err != nil { + panic(err) + } + n-- + } +} + +// list 新增item +func (db DB) RPush(k string, v string) { + c := ddb.RedimoClient() + _, err := c.RPUSH(k, v) + if err != nil { + panic(err) + } +} diff --git a/gamesrv/slotspkg/internal/module/player/lastbetid.go b/gamesrv/slotspkg/internal/module/player/lastbetid.go new file mode 100644 index 0000000..770e189 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/lastbetid.go @@ -0,0 +1,16 @@ +package player + +func (p *Player) AddLastBetId(theme string, betId string) { + var oc = map[string]string{} + p.Cli.LastBetId.Get(&oc) + if oc == nil { + oc = map[string]string{} + } + oc[theme] = betId + p.Cli.LastBetId.Set(oc) +} +func (p *Player) GetLastBetId(theme string) string { + var oc = map[string]string{} + p.Cli.LastBetId.Get(&oc) + return oc[theme] +} diff --git a/gamesrv/slotspkg/internal/module/player/method.go b/gamesrv/slotspkg/internal/module/player/method.go new file mode 100644 index 0000000..25688d6 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/method.go @@ -0,0 +1,326 @@ +package player + +import ( + "fmt" + "github.com/tomas-qstarrs/boost/dogfish" + "github.com/tomas-qstarrs/boost/timex" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/goserver/core/logger" +) + +// Get gets player from session +func Get(s *session.Session) *Player { + if s == nil { + return nil + } + v := s.Value(key.SessionPlayer) + if v == nil { + return nil + } + return v.(*Player) +} + +func Set(s *session.Session, p *Player) { + s.Set(key.SessionPlayer, p) +} +func GetOldPlayer(s *session.Session) *Player { + p := Get(s) + if p == nil { + hash := db.PullPlayer(s.UID()) + if hash == nil { + return nil + } + } + return PullPlayer(s) +} +func PullPlayer(s *session.Session) *Player { + p := Get(s) + if p == nil { + hash := db.PullPlayer(s.UID()) + + // Create a new player from hash strings + p = &Player{} + err := p.Load(p, hash) + if err != nil { + panic(err) + } + + Set(s, p) + + return p + } + + if s.Bool(key.SessionReloadPlayer) { + s.Set(key.SessionReloadPlayer, false) + hash := db.PullPlayer(s.UID()) + + // Reload old player from hash strings + err := p.Load(p, hash) + if err != nil { + panic(err) + } + + return p + } + + return p +} + +func PushPlayer(s *session.Session) { + p := Get(s) + + hash, err := p.Dump() + if err != nil { + panic(err) + } + + db.PushPlayer(s.UID(), hash) +} + +func Init(s *session.Session) { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + + p.Init(s) +} + +func (p *Player) Init(s *session.Session) { + if p.UID.Get() == 0 { + p.handleCreate(s) + } + + p.handleLogin(s) + + CoinCenter.Sync(s) + +} + +func (p *Player) handleCreate(s *session.Session) { + uid := s.UID() + if uid == 0 { + panic(errors.UIDInvalid.Error()) + } + + p.UID.Set(int64(uid)) + p.Char.CreateTime.Set(timex.Now().Unix()) +} +func (p *Player) MarkBlack(flag int64) { + f := p.Cli.Black.Get() + f |= flag + p.Cli.Black.Set(f) +} +func (p *Player) UnmarkBlack(flag int64) { + f := p.Cli.Black.Get() + f &= ^flag + p.Cli.Black.Set(f) +} +func (p *Player) IsMarkBlack(flag int64) bool { + if (p.Cli.Black.Get() & flag) != 0 { + return true + } + return false +} +func (p *Player) CheckBlack() bool { + for i := key.BlackMin; i <= key.BlackMax; i <<= 1 { + if p.IsMarkBlack(i) { + return true + } + } + return false +} +func (p *Player) handleLogin(s *session.Session) { + p.updateCli(s) + p.updateChar(s) + p.updateOthers(s) +} +func UpdateToken(s *session.Session, token string) { + if token == "" { + return + } + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + logger.Logger.Infof("player UpdateToken %v-%v", s.UID(), token) + p.Cli.Token.Set(token) +} +func GetToken(s *session.Session) string { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + return p.Cli.Token.Get() +} +func GetOps(s *session.Session) string { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + return p.Cli.Ops.Get() +} +func GetIp(s *session.Session) string { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + return p.Cli.Ip.Get() +} +func (p *Player) updateCli(s *session.Session) { + sessionContext := s.Value(key.SessionContext).(*shared.SessionContext) + // Cli + p.Cli.ThirdName.Set(sessionContext.ThirdName) + p.Cli.Language.Set(sessionContext.Language) + p.Cli.Ops.Set(sessionContext.Ops) + p.Cli.IsSimulator.Set(sessionContext.IsSimulator) + p.Cli.IsSimulator.Set(sessionContext.IsSimulator) + p.Cli.Ip.Set(sessionContext.Ip) + + p.Cli.Currency.Set(sessionContext.Currency) + p.Cli.TokenThird.Set(sessionContext.TokenThird) + p.Cli.PlayerName.Set(sessionContext.PlayerName) + p.Cli.Lobby.Set(sessionContext.Lobby) + p.Cli.Game.Set(sessionContext.Game) +} + +func (p *Player) updateChar(s *session.Session) { + DataSet(s).Update() + + p.Char.LastLoginTime.Set(p.Char.LoginTime.Get()) + p.Char.LoginTime.Set(timex.Now().Unix()) + p.Char.LastProcessTime.Set(p.Char.ProcessTime.Get()) + p.Char.ProcessTime.Set(global.ProcessTime) + if !timex.IsSameDay(p.Char.LoginTime.Get(), p.Char.LastLoginTime.Get()) { + p.Char.ActiveDays.Set(p.Char.ActiveDays.Get() + 1) + } + + var category string + if p.Char.Group.Get() == "" { + category = p.Char.BranchName.Get() + } else { + category = fmt.Sprintf("%s_%s", p.Char.BranchName.Get(), p.Char.Group.Get()) + } + p.Char.Category.Set(category) + DataSet(s).Update() +} + +func (p *Player) updateOthers(s *session.Session) { + if !timex.IsSameDay(p.Char.LoginTime.Get(), p.Char.LastLoginTime.Get()) { + p.Agg.SlotsDailyBet.Set(0) + p.Agg.SlotsDailyWin.Set(0) + p.Agg.SlotsDailySpins.Set(0) + } +} + +func (p *Player) GetTheme(theme string) *dogfish.JSON { + return (*dogfish.JSON)(p.Field("Slots", theme)) +} + +func (p *Player) GetCli() *shared.Cli { + return &shared.Cli{ + ThirdName: p.Cli.ThirdName.Get(), + Language: p.Cli.Language.Get(), + } +} + +func GetChar(s *session.Session) *shared.Char { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + + return p.GetChar() +} + +func (p *Player) GetChar() *shared.Char { + return &shared.Char{ + Category: p.Char.Category.Get(), + Group: p.Char.Group.Get(), + GroupBatch: p.Char.GroupBatch.Get(), + CreateTime: p.Char.CreateTime.Get(), + LoginTime: p.Char.LoginTime.Get(), + LastLoginTime: p.Char.LastLoginTime.Get(), + ProcessTime: p.Char.ProcessTime.Get(), + LastProcessTime: p.Char.LastProcessTime.Get(), + ActiveDays: p.Char.ActiveDays.Get(), + Branch: p.Char.Branch.Get(), + BranchName: p.Char.BranchName.Get(), + } +} + +func GetBook(s *session.Session) *shared.Book { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + + return p.GetBook() +} + +func (p *Player) GetBook() *shared.Book { + return &shared.Book{ + Coin: p.Book.Coin.Get(), + } +} + +func (p *Player) GetAgg() *shared.Agg { + return &shared.Agg{ + SlotsDailySpins: p.Agg.SlotsDailySpins.Get(), + SlotsDailyWin: p.Agg.SlotsDailyWin.Get(), + SlotsDailyBet: p.Agg.SlotsDailyBet.Get(), + PersonalPool: p.Agg.PersonalPool.Get(), + } +} + +func (p *Player) Coin() int64 { + return p.Book.Coin.Get() +} + +func (p *Player) QueryPermission(keyType string, info ...any) bool { + return db.QueryPermission(keyType, info...) +} + +func CategoryName(s *session.Session) string { + p := Get(s) + if p == nil { + return key.Base + } + return p.CategoryName() +} + +func (p *Player) CategoryName() string { + return p.Char.Category.Get() +} + +func BetWin(s *session.Session, betCoin DecCoin, winCoin IncCoin) { + p := Get(s) + if p == nil { + panic(errors.UIDInvalid.Error()) + } + p.BetWin(s, betCoin, winCoin) +} + +func (p *Player) BetWin(s *session.Session, betCoin DecCoin, winCoin IncCoin) { + if betCoin.GetCoin() > 0 { + //总统计 + p.Agg.BetSum.Set(p.Agg.BetSum.Get() + betCoin.GetCoin()) + p.Agg.BetTimes.Set(p.Agg.BetTimes.Get() + 1) + //p.Agg.PersonalPool.Set(p.Agg.PersonalPool.Get() + int64(float64(betCoin.GetCoin())*0.96)) + + //每日 + p.Agg.BetTimesDaily.Set(p.Agg.BetTimesDaily.Get() + 1) + p.Agg.BetSumDaily.Set(p.Agg.BetSumDaily.Get() + betCoin.GetCoin()) + } + if winCoin.GetCoin() > 0 { + //总统计 + p.Agg.WinSum.Set(p.Agg.WinSum.Get() + winCoin.GetCoin()) + //p.Agg.PersonalPool.Set(p.Agg.PersonalPool.Get() - winCoin.GetCoin()) + //每日 + p.Agg.WinSumDaily.Set(p.Agg.WinSumDaily.Get() + winCoin.GetCoin()) + } +} diff --git a/gamesrv/slotspkg/internal/module/player/player.go b/gamesrv/slotspkg/internal/module/player/player.go new file mode 100644 index 0000000..059cb82 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/player.go @@ -0,0 +1,96 @@ +package player + +import ( + . "github.com/tomas-qstarrs/boost/dogfish" +) + +type ( + Player struct { + Root + UID Int64 + Cli struct { + ThirdName String + Language String + Ops String + IsSimulator Bool + Token String + Ip String + Currency String + TokenThird String + PlayerName String + Lobby String + Game String + Black Int64 + LastBetId JSON + } + Char struct { + GroupBatch Int64 // 批次(AB测试的批次) + Group String // 组(AB测试的组) + Category String // 类别(配置的分支) + Branch Uint32 // 分支(代码的分支) + BranchName String // 分支名称(代码的分支名称) + CreateTime Time // 创建时间 + LoginTime Time // 本次登录时间 + LastLoginTime Time // 上次登录时间 + ProcessTime Time // 上次进程时间 + LastProcessTime Time // 一次进程时间 + ActiveDays Int64 // 活跃天数 + } + Book struct { // 账本 (实时数据) + Coin Int64 + } + Agg struct { // 聚合 (累计数据) + ///////////////////////// Total //////////////////////// + //总 + BetSum Int64 // 累计下注金额 + BetTimes Int64 // 累计下注次数 + WinSum Int64 // 累计赢取金额 + //日 + BetSumDaily Int64 // 日下注金额 + WinSumDaily Int64 // 日累计赢取金额 + BetTimesDaily Int64 // 日下注次数 + ///////////////////////// Slots //////////////////////// + // Slots总统计 + SlotsBetCoin Int64 // 下注统计 + SlotsWinCoin Int64 // 赢取统计 + SlotsSpinTimes Int64 // 总下注次数 + + // Slots每日统计 + SlotsDailySpins Int64 // 每日Slots转动次数 + SlotsDailyWin Int64 // 每日Slots累计赢取 + SlotsDailyBet Int64 // 每日Slots累计下注 + //Slots其他 + SlotsContinuousZeroSpins Int64 // Slots连续转0次数 + ///////////////////////////////////////////////////////// + // Pool + PersonalPool Int64 // 个人奖池 + TotalForceWin Int64 // 必出赢的钱 + } + System struct { + Occupied struct { + CoinMap JSON + } + SpinUserTag struct { // spin usertag + GameSpinCount JSON + } + } + GM struct { + LockCoin Bool // (GM) 锁定金币 + } + Slots struct { + FortuneTiger JSON + FortuneOx JSON + FortuneRabbit JSON + FortuneDragon JSON + FortuneMouse JSON + CashMania JSON + Test JSON + } + } + + Bet struct { + ProcessID String // 用于退款Refund + GameID String // 用于清数据 Settle Bet + Coin Int64 + } +) diff --git a/gamesrv/slotspkg/internal/module/player/playermgr.go b/gamesrv/slotspkg/internal/module/player/playermgr.go new file mode 100644 index 0000000..fd763b1 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/player/playermgr.go @@ -0,0 +1,59 @@ +package player + +import ( + "fmt" + "github.com/go-redis/redis" + "github.com/tomas-qstarrs/redimo" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/ddb" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" + "time" +) + +var PlayerMgrSington = &PlayerMgr{ + Client: ddb.RedimoClient(), +} + +const ( + PLAYER_INFO = "PLAYERINFO[%v-%v]" +) + +type PlayerMgr struct { + *redimo.Client + Redis *redis.Client +} + +func (p *PlayerMgr) ModuleName() string { + return "PlayerMgr" +} +func (p *PlayerMgr) Init() { + p.Redis = global.RedisClient +} +func (p *PlayerMgr) getKey(tn string) string { + return fmt.Sprintf("%v.%v.Platform[%v]", global.Project, global.Game, tn) +} +func (p *PlayerMgr) GetPlayerUid(tn, ops string) uint64 { + val, err := p.HGET(p.getKey(tn), ops) + if err != nil { + logger.Logger.Errorf("get player info error: %v", err) + return 0 + } + return uint64(val.Int()) +} +func (p *PlayerMgr) SetPlayer(tn, ops string, uid uint64) bool { + _, err := p.HSETNX(p.getKey(tn), ops, redimo.IntValue{I: int64(uid)}) + if err != nil { + logger.Logger.Errorf("set player err:%v", err) + return false + } + return true +} +func (p *PlayerMgr) Update() { + +} + +func (p *PlayerMgr) Shutdown() { + +} +func init() { + module.RegisteModule(PlayerMgrSington, time.Hour, 0) +} diff --git a/gamesrv/slotspkg/internal/module/session/session.go b/gamesrv/slotspkg/internal/module/session/session.go new file mode 100644 index 0000000..4ba5972 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/session/session.go @@ -0,0 +1,87 @@ +package session + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "sync" + "sync/atomic" + "time" +) + +type Session struct { + sync.RWMutex + uid uint64 // binding user id + coin int64 + data map[string]interface{} // session data store + lastConnectTime time.Time + connectNum uint64 +} + +func NewSession(uid uint64, coin int64) *Session { + return &Session{ + uid: uid, + coin: coin, + data: make(map[string]interface{}), + } +} +func (s *Session) SetLastConnectTime() bool { + if time.Now().Sub(s.lastConnectTime) > time.Second { + s.connectNum = 1 + s.lastConnectTime = time.Now() + } else { + s.connectNum++ + if s.connectNum > 5 { + return false + } + } + return true +} +func (s *Session) GetLastConnectTime() time.Time { + return s.lastConnectTime +} +func (s *Session) UID() uint64 { + return atomic.LoadUint64(&s.uid) +} +func (s *Session) Coin() int64 { + return atomic.LoadInt64(&s.coin) +} +func (s *Session) SetSessionContext(sessionContext *shared.SessionContext) { + s.Set(key.SessionContext, sessionContext) +} +func (s *Session) Set(key string, value interface{}) { + s.Lock() + defer s.Unlock() + + if s.data == nil { + s.data = make(map[string]interface{}) + } + s.data[key] = value +} +func (s *Session) Remove(key string) { + s.Lock() + defer s.Unlock() + + delete(s.data, key) +} + +func (s *Session) Value(key string) interface{} { + s.RLock() + defer s.RUnlock() + + return s.data[key] +} +func (s *Session) Bool(key string) bool { + s.RLock() + defer s.RUnlock() + + v, ok := s.data[key] + if !ok { + return false + } + + value, ok := v.(bool) + if !ok { + return false + } + return value +} diff --git a/gamesrv/slotspkg/internal/module/shared/structs.go b/gamesrv/slotspkg/internal/module/shared/structs.go new file mode 100644 index 0000000..9790b43 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/shared/structs.go @@ -0,0 +1,2804 @@ +package shared + +type Game struct { + Contest string + ContestType string + RoomID int64 + RoomType string + RoundID int64 + Branch uint32 +} + +func (x *Game) GetContest() string { + if x != nil { + return x.Contest + } + return "" +} + +func (x *Game) GetContestType() string { + if x != nil { + return x.ContestType + } + return "" +} + +func (x *Game) GetRoomID() int64 { + if x != nil { + return x.RoomID + } + return 0 +} + +func (x *Game) GetRoomType() string { + if x != nil { + return x.RoomType + } + return "" +} + +func (x *Game) GetRoundID() int64 { + if x != nil { + return x.RoundID + } + return 0 +} + +func (x *Game) GetBranch() uint32 { + if x != nil { + return x.Branch + } + return 0 +} + +type Srv struct { + Runtime string + Version string + SessionVersion string + SessionBranch uint32 + Cluster string +} + +func (x *Srv) GetRuntime() string { + if x != nil { + return x.Runtime + } + return "" +} + +func (x *Srv) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Srv) GetSessionVersion() string { + if x != nil { + return x.SessionVersion + } + return "" +} + +func (x *Srv) GetSessionBranch() uint32 { + if x != nil { + return x.SessionBranch + } + return 0 +} + +func (x *Srv) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +type Proc struct { + PublicGate string + CommitID string + BuildTime string + BootTime string +} + +func (x *Proc) GetPublicGate() string { + if x != nil { + return x.PublicGate + } + return "" +} + +func (x *Proc) GetCommitID() string { + if x != nil { + return x.CommitID + } + return "" +} + +func (x *Proc) GetBuildTime() string { + if x != nil { + return x.BuildTime + } + return "" +} + +func (x *Proc) GetBootTime() string { + if x != nil { + return x.BootTime + } + return "" +} + +type Identifier struct { + ContextType string + LogType string + GroupID string + BatchID string + SeqID int64 + LogID string + ProcessID string + SessionID int64 +} + +func (x *Identifier) GetContextType() string { + if x != nil { + return x.ContextType + } + return "" +} + +func (x *Identifier) GetLogType() string { + if x != nil { + return x.LogType + } + return "" +} + +func (x *Identifier) GetGroupID() string { + if x != nil { + return x.GroupID + } + return "" +} + +func (x *Identifier) GetBatchID() string { + if x != nil { + return x.BatchID + } + return "" +} + +func (x *Identifier) GetSeqID() int64 { + if x != nil { + return x.SeqID + } + return 0 +} + +func (x *Identifier) GetLogID() string { + if x != nil { + return x.LogID + } + return "" +} + +func (x *Identifier) GetProcessID() string { + if x != nil { + return x.ProcessID + } + return "" +} + +func (x *Identifier) GetSessionID() int64 { + if x != nil { + return x.SessionID + } + return 0 +} + +type Cli struct { + ThirdName string + Language string + IsSimulator bool + Token string + Ip string + Currency string + TokenThird string + Ops string //player + PlayerName string + Lobby string + Game string +} + +func (x *Cli) GetThirdName() string { + if x != nil { + return x.ThirdName + } + return "" +} +func (x *Cli) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +type User struct { + Nickname string + Avatar int64 + CPF string + PixType string + PixAccount string + Name string + PhoneNumber string +} + +func (x *User) GetNickname() string { + if x != nil { + return x.Nickname + } + return "" +} + +func (x *User) GetAvatar() int64 { + if x != nil { + return x.Avatar + } + return 0 +} + +func (x *User) GetCPF() string { + if x != nil { + return x.CPF + } + return "" +} + +func (x *User) GetPixType() string { + if x != nil { + return x.PixType + } + return "" +} + +func (x *User) GetPixAccount() string { + if x != nil { + return x.PixAccount + } + return "" +} + +func (x *User) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *User) GetPhoneNumber() string { + if x != nil { + return x.PhoneNumber + } + return "" +} + +type Char struct { + Category string + Group string + GroupBatch int64 + CreateTime int64 + LoginTime int64 + LastLoginTime int64 + ProcessTime int64 + LastProcessTime int64 + Newbie bool + Novice bool + NetworkPromotion string + ActiveDays int64 + FirstRechargeTime int64 + LatestRechargeTime int64 + RechargeTimes int64 + RechargeCurrency int64 + PixRechargeCurrency int64 + Branch uint32 + BranchName string + Level int64 + Exp int64 +} + +func (x *Char) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *Char) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *Char) GetGroupBatch() int64 { + if x != nil { + return x.GroupBatch + } + return 0 +} + +func (x *Char) GetCreateTime() int64 { + if x != nil { + return x.CreateTime + } + return 0 +} + +func (x *Char) GetLoginTime() int64 { + if x != nil { + return x.LoginTime + } + return 0 +} + +func (x *Char) GetLastLoginTime() int64 { + if x != nil { + return x.LastLoginTime + } + return 0 +} + +func (x *Char) GetProcessTime() int64 { + if x != nil { + return x.ProcessTime + } + return 0 +} + +func (x *Char) GetLastProcessTime() int64 { + if x != nil { + return x.LastProcessTime + } + return 0 +} + +func (x *Char) GetNewbie() bool { + if x != nil { + return x.Newbie + } + return false +} + +func (x *Char) GetNovice() bool { + if x != nil { + return x.Novice + } + return false +} + +func (x *Char) GetNetworkPromotion() string { + if x != nil { + return x.NetworkPromotion + } + return "" +} + +func (x *Char) GetActiveDays() int64 { + if x != nil { + return x.ActiveDays + } + return 0 +} + +func (x *Char) GetFirstRechargeTime() int64 { + if x != nil { + return x.FirstRechargeTime + } + return 0 +} + +func (x *Char) GetLatestRechargeTime() int64 { + if x != nil { + return x.LatestRechargeTime + } + return 0 +} + +func (x *Char) GetRechargeTimes() int64 { + if x != nil { + return x.RechargeTimes + } + return 0 +} + +func (x *Char) GetRechargeCurrency() int64 { + if x != nil { + return x.RechargeCurrency + } + return 0 +} + +func (x *Char) GetPixRechargeCurrency() int64 { + if x != nil { + return x.PixRechargeCurrency + } + return 0 +} + +func (x *Char) GetBranch() uint32 { + if x != nil { + return x.Branch + } + return 0 +} + +func (x *Char) GetBranchName() string { + if x != nil { + return x.BranchName + } + return "" +} + +func (x *Char) GetLevel() int64 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *Char) GetExp() int64 { + if x != nil { + return x.Exp + } + return 0 +} + +type Book struct { + Coin int64 +} + +func (x *Book) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +type Agg struct { + SlotsDailySpins int64 + SlotsDailyWin int64 + SlotsDailyBet int64 + PersonalPool int64 +} + +func (x *Agg) GetSlotsDailySpins() int64 { + if x != nil { + return x.SlotsDailySpins + } + return 0 +} + +func (x *Agg) GetSlotsDailyWin() int64 { + if x != nil { + return x.SlotsDailyWin + } + return 0 +} + +func (x *Agg) GetSlotsDailyBet() int64 { + if x != nil { + return x.SlotsDailyBet + } + return 0 +} + +type GameSort struct { + Game string + Sort int64 + Type int64 + Flag int64 + Icon int64 + Size int64 + Jackpot bool + Switch bool + DisplayLimit int64 +} + +func (x *GameSort) GetGame() string { + if x != nil { + return x.Game + } + return "" +} + +func (x *GameSort) GetSort() int64 { + if x != nil { + return x.Sort + } + return 0 +} + +func (x *GameSort) GetType() int64 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *GameSort) GetFlag() int64 { + if x != nil { + return x.Flag + } + return 0 +} + +func (x *GameSort) GetIcon() int64 { + if x != nil { + return x.Icon + } + return 0 +} + +func (x *GameSort) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *GameSort) GetJackpot() bool { + if x != nil { + return x.Jackpot + } + return false +} + +func (x *GameSort) GetSwitch() bool { + if x != nil { + return x.Switch + } + return false +} + +func (x *GameSort) GetDisplayLimit() int64 { + if x != nil { + return x.DisplayLimit + } + return 0 +} + +type Settle struct { + Game string + WinCoin int64 + Coin int64 +} + +func (x *Settle) GetGame() string { + if x != nil { + return x.Game + } + return "" +} + +func (x *Settle) GetWinCoin() int64 { + if x != nil { + return x.WinCoin + } + return 0 +} + +func (x *Settle) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +// AwardStatus 奖励状态 +type AwardStatus struct { + Status int64 + Count int64 + AdCount int64 +} + +func (x *AwardStatus) GetStatus() int64 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *AwardStatus) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *AwardStatus) GetAdCount() int64 { + if x != nil { + return x.AdCount + } + return 0 +} + +// SigninAwardData 签到奖励状态 +type SigninAwardData struct { + DayStatus []*AwardStatus // 奖励状态 + NextAwardStartTime int64 // 下个奖励的开始时间 + ActivityEndTime int64 // 活动结束时间 +} + +func (x *SigninAwardData) GetDayStatus() []*AwardStatus { + if x != nil { + return x.DayStatus + } + return nil +} + +func (x *SigninAwardData) GetNextAwardStartTime() int64 { + if x != nil { + return x.NextAwardStartTime + } + return 0 +} + +func (x *SigninAwardData) GetActivityEndTime() int64 { + if x != nil { + return x.ActivityEndTime + } + return 0 +} + +type SimplifiedMail struct { + ID int64 // 邮件ID + Title string // 邮件标题 + Content string // 邮件内容 + EndTime int64 // 邮件最后有效时间戳 + Readed bool // 邮件是否已经查看过 + Coin int64 // 邮件奖励 +} + +func (x *SimplifiedMail) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *SimplifiedMail) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *SimplifiedMail) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *SimplifiedMail) GetEndTime() int64 { + if x != nil { + return x.EndTime + } + return 0 +} + +func (x *SimplifiedMail) GetReaded() bool { + if x != nil { + return x.Readed + } + return false +} + +func (x *SimplifiedMail) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +type Reconnect struct { + Interval int64 + Times int64 +} + +func (x *Reconnect) GetInterval() int64 { + if x != nil { + return x.Interval + } + return 0 +} + +func (x *Reconnect) GetTimes() int64 { + if x != nil { + return x.Times + } + return 0 +} + +// ShopItem 商城物品 +type ShopItem struct { + GoodsID string // 商品ID + PictureID int64 // 图片ID + ProductID string // 计费点 + PayType string // 支付方式 + Pay int64 // 支付金额(10000) + ReceiptPay int64 // 到账付费金币(10000) + Receipt int64 // 到账免费金币(10000) + Scene string // 付费场景 + TriggerAfterSeconds int64 + GiftRatio int64 +} + +func (x *ShopItem) GetGoodsID() string { + if x != nil { + return x.GoodsID + } + return "" +} + +func (x *ShopItem) GetPictureID() int64 { + if x != nil { + return x.PictureID + } + return 0 +} + +func (x *ShopItem) GetProductID() string { + if x != nil { + return x.ProductID + } + return "" +} + +func (x *ShopItem) GetPayType() string { + if x != nil { + return x.PayType + } + return "" +} + +func (x *ShopItem) GetPay() int64 { + if x != nil { + return x.Pay + } + return 0 +} + +func (x *ShopItem) GetReceiptPay() int64 { + if x != nil { + return x.ReceiptPay + } + return 0 +} + +func (x *ShopItem) GetReceipt() int64 { + if x != nil { + return x.Receipt + } + return 0 +} + +func (x *ShopItem) GetScene() string { + if x != nil { + return x.Scene + } + return "" +} + +func (x *ShopItem) GetTriggerAfterSeconds() int64 { + if x != nil { + return x.TriggerAfterSeconds + } + return 0 +} + +func (x *ShopItem) GetGiftRatio() int64 { + if x != nil { + return x.GiftRatio + } + return 0 +} + +// PayType 支付方式 +type PayType struct { + Type string // 付款平台 "Pix" "Google" + ItemList []*ShopItem // 商城物品 +} + +func (x *PayType) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PayType) GetItemList() []*ShopItem { + if x != nil { + return x.ItemList + } + return nil +} + +type InviteAwardItem struct { + AwardType int64 // 奖励类型 1:注册奖励 2:充值奖励 + AwardID string // 奖励ID + AwardTime int64 // 奖励时间 + Status int64 // 奖励状态 0:未达到限制条件 1:可领取 2:领取过 3:已过期 + GameID int64 // 被邀请玩家ID + PlayerName string // 被邀请玩家名称 + PlayerID int64 // 被邀请玩家ID + Bonus int64 // 奖励金额 + Recharge int64 // 充值金额 + Rebate int64 // 返利比例 + ID int64 // 该充值玩家的邀请人ID +} + +func (x *InviteAwardItem) GetAwardType() int64 { + if x != nil { + return x.AwardType + } + return 0 +} + +func (x *InviteAwardItem) GetAwardID() string { + if x != nil { + return x.AwardID + } + return "" +} + +func (x *InviteAwardItem) GetAwardTime() int64 { + if x != nil { + return x.AwardTime + } + return 0 +} + +func (x *InviteAwardItem) GetStatus() int64 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *InviteAwardItem) GetGameID() int64 { + if x != nil { + return x.GameID + } + return 0 +} + +func (x *InviteAwardItem) GetPlayerName() string { + if x != nil { + return x.PlayerName + } + return "" +} + +func (x *InviteAwardItem) GetPlayerID() int64 { + if x != nil { + return x.PlayerID + } + return 0 +} + +func (x *InviteAwardItem) GetBonus() int64 { + if x != nil { + return x.Bonus + } + return 0 +} + +func (x *InviteAwardItem) GetRecharge() int64 { + if x != nil { + return x.Recharge + } + return 0 +} + +func (x *InviteAwardItem) GetRebate() int64 { + if x != nil { + return x.Rebate + } + return 0 +} + +func (x *InviteAwardItem) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +type InviteRankingItem struct { + Rank int64 // 上榜排名 + Icon string // 头像 + Name string // 姓名 + Coin int64 // 上榜金额 +} + +func (x *InviteRankingItem) GetRank() int64 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *InviteRankingItem) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + +func (x *InviteRankingItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *InviteRankingItem) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +type LinkPositions struct { + + // Indexes for Items that are linked + Positions []int64 +} + +func (x *LinkPositions) GetPositions() []int64 { + if x != nil { + return x.Positions + } + return nil +} + +type Feature struct { + NodeID int64 + // Type is auto generated by reflect + Type string // Feature type + ID int64 // Feature ID + SpinType int64 + FormationID int64 + NodeType string + SeqID int64 + Custom string // Feature Custom Info + Win int64 // Feature win coins + EffectiveWin int64 + TotalWin int64 + Lifetime int64 + // feature is not visiable by client while Visiable is false + Visiable bool + // feature will be recover to next node in same formation ID while imageable + // is true + Imageable bool + Special any +} + +func (x *Feature) GetNodeID() int64 { + if x != nil { + return x.NodeID + } + return 0 +} + +func (x *Feature) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Feature) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *Feature) GetSpinType() int64 { + if x != nil { + return x.SpinType + } + return 0 +} + +func (x *Feature) GetFormationID() int64 { + if x != nil { + return x.FormationID + } + return 0 +} + +func (x *Feature) GetNodeType() string { + if x != nil { + return x.NodeType + } + return "" +} + +func (x *Feature) GetSeqID() int64 { + if x != nil { + return x.SeqID + } + return 0 +} + +func (x *Feature) GetCustom() string { + if x != nil { + return x.Custom + } + return "" +} + +func (x *Feature) GetWin() int64 { + if x != nil { + return x.Win + } + return 0 +} + +func (x *Feature) GetEffectiveWin() int64 { + if x != nil { + return x.EffectiveWin + } + return 0 +} + +func (x *Feature) GetTotalWin() int64 { + if x != nil { + return x.TotalWin + } + return 0 +} + +func (x *Feature) GetLifetime() int64 { + if x != nil { + return x.Lifetime + } + return 0 +} + +func (x *Feature) GetVisiable() bool { + if x != nil { + return x.Visiable + } + return false +} + +func (x *Feature) GetImageable() bool { + if x != nil { + return x.Imageable + } + return false +} + +type Formation struct { + NodeID int64 + SpinType int64 + ID int64 + NodeType string + SeqID int64 + InitSymbols []int64 + DisplaySymbols []int64 + FinalSymbols []int64 + LinkPositions []*LinkPositions + Win int64 + EffectiveWin int64 + TotalWin int64 + ReelForm []int64 + MatrixForm []int64 + RandPositions []int64 + RewardInfo []*RewardInfo + NewNodeType string +} + +func (x *Formation) GetNodeID() int64 { + if x != nil { + return x.NodeID + } + return 0 +} + +func (x *Formation) GetSpinType() int64 { + if x != nil { + return x.SpinType + } + return 0 +} + +func (x *Formation) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *Formation) GetNodeType() string { + if x != nil { + return x.NodeType + } + return "" +} + +func (x *Formation) GetSeqID() int64 { + if x != nil { + return x.SeqID + } + return 0 +} + +func (x *Formation) GetInitSymbols() []int64 { + if x != nil { + return x.InitSymbols + } + return nil +} + +func (x *Formation) GetDisplaySymbols() []int64 { + if x != nil { + return x.DisplaySymbols + } + return nil +} + +func (x *Formation) GetFinalSymbols() []int64 { + if x != nil { + return x.FinalSymbols + } + return nil +} + +func (x *Formation) GetLinkPositions() []*LinkPositions { + if x != nil { + return x.LinkPositions + } + return nil +} + +func (x *Formation) GetWin() int64 { + if x != nil { + return x.Win + } + return 0 +} + +func (x *Formation) GetEffectiveWin() int64 { + if x != nil { + return x.EffectiveWin + } + return 0 +} + +func (x *Formation) GetTotalWin() int64 { + if x != nil { + return x.TotalWin + } + return 0 +} + +func (x *Formation) GetReelForm() []int64 { + if x != nil { + return x.ReelForm + } + return nil +} + +func (x *Formation) GetMatrixForm() []int64 { + if x != nil { + return x.MatrixForm + } + return nil +} + +func (x *Formation) GetRandPositions() []int64 { + if x != nil { + return x.RandPositions + } + return nil +} + +type Node struct { + ID int64 + Parent int64 + Children []int64 + Type string // eg: RootNode BaseNode etc. + SpinType int64 + Formations []*Formation // for formations in array + Features []*Feature + Win int64 + EffectiveWin int64 + TotalWin int64 + ChildrenWin int64 + ChildrenTotalWin int64 + ProgressValue int64 + ProgressMax int64 + Bet int64 + SingleBet int64 + NeedPrepare bool + Prepared bool + Class int64 + ForceBet int64 + BaseBet int64 + NoBase bool +} + +func (x *Node) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *Node) GetParent() int64 { + if x != nil { + return x.Parent + } + return 0 +} + +func (x *Node) GetChildren() []int64 { + if x != nil { + return x.Children + } + return nil +} + +func (x *Node) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Node) GetSpinType() int64 { + if x != nil { + return x.SpinType + } + return 0 +} + +func (x *Node) GetFormations() []*Formation { + if x != nil { + return x.Formations + } + return nil +} + +func (x *Node) GetFeatures() []*Feature { + if x != nil { + return x.Features + } + return nil +} + +func (x *Node) GetWin() int64 { + if x != nil { + return x.Win + } + return 0 +} + +func (x *Node) GetEffectiveWin() int64 { + if x != nil { + return x.EffectiveWin + } + return 0 +} + +func (x *Node) GetTotalWin() int64 { + if x != nil { + return x.TotalWin + } + return 0 +} + +func (x *Node) GetChildrenWin() int64 { + if x != nil { + return x.ChildrenWin + } + return 0 +} + +func (x *Node) GetChildrenTotalWin() int64 { + if x != nil { + return x.ChildrenTotalWin + } + return 0 +} + +func (x *Node) GetProgressValue() int64 { + if x != nil { + return x.ProgressValue + } + return 0 +} + +func (x *Node) GetProgressMax() int64 { + if x != nil { + return x.ProgressMax + } + return 0 +} + +func (x *Node) GetBet() int64 { + if x != nil { + return x.Bet + } + return 0 +} + +func (x *Node) GetSingleBet() int64 { + if x != nil { + return x.SingleBet + } + return 0 +} + +func (x *Node) GetNeedPrepare() bool { + if x != nil { + return x.NeedPrepare + } + return false +} + +func (x *Node) GetPrepared() bool { + if x != nil { + return x.Prepared + } + return false +} + +func (x *Node) GetClass() int64 { + if x != nil { + return x.Class + } + return 0 +} + +func (x *Node) GetForceBet() int64 { + if x != nil { + return x.ForceBet + } + return 0 +} + +func (x *Node) GetBaseBet() int64 { + if x != nil { + return x.BaseBet + } + return 0 +} + +type UserData struct { + RecorderResult string + BuySpinForceWin bool + ForceChoice int64 +} + +func (x *UserData) GetRecorderResult() string { + if x != nil { + return x.RecorderResult + } + return "" +} + +func (x *UserData) GetBuySpinForceWin() bool { + if x != nil { + return x.BuySpinForceWin + } + return false +} + +func (x *UserData) GetForceChoice() int64 { + if x != nil { + return x.ForceChoice + } + return 0 +} + +type Act struct { + BetSizeIndex int64 + BetLevelIndex int64 + BetLineIndex int64 + Choice int64 + Stay bool + // Ratio Type + // 1 : 花更多的钱,下更多的注 + // 2 : 花更多的钱,下同样的注 + // 3 : 花同样的钱,下更多的注 + RatioType int64 + // Ratio: + // if r == 0; then r = 1 end + Ratio float64 + Mode string // inner + Vector []int64 // inner + ExpectedWinCoin int64 // inner + EnableRandxTracker bool // inner + RecorderRandxTracker *RandxTracker // inner + VectorIndex int64 // inner + VectorType int64 // inner + Version int64 + ClassId int64 + PlayMode int +} + +func (x *Act) GetBetIndex() int64 { + if x != nil { + return x.BetSizeIndex + } + return 0 +} + +func (x *Act) GetCoinValueIndex() int64 { + if x != nil { + return x.BetLevelIndex + } + return 0 +} + +func (x *Act) GetChoice() int64 { + if x != nil { + return x.Choice + } + return 0 +} + +func (x *Act) GetStay() bool { + if x != nil { + return x.Stay + } + return false +} + +func (x *Act) GetRatioType() int64 { + if x != nil { + return x.RatioType + } + return 0 +} + +func (x *Act) GetRatio() float64 { + if x != nil { + return x.Ratio + } + return 0 +} + +func (x *Act) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +func (x *Act) GetVector() []int64 { + if x != nil { + return x.Vector + } + return nil +} + +func (x *Act) GetExpectedWinCoin() int64 { + if x != nil { + return x.ExpectedWinCoin + } + return 0 +} + +func (x *Act) GetEnableRandxTracker() bool { + if x != nil { + return x.EnableRandxTracker + } + return false +} + +func (x *Act) GetRecorderRandxTracker() *RandxTracker { + if x != nil { + return x.RecorderRandxTracker + } + return nil +} + +func (x *Act) GetVectorIndex() int64 { + if x != nil { + return x.VectorIndex + } + return 0 +} + +func (x *Act) GetVectorType() int64 { + if x != nil { + return x.VectorType + } + return 0 +} + +func (x *Act) GetVersion() int64 { + if x != nil { + return x.Version + } + return 0 +} + +type Coin struct { + Coin int64 +} + +func (x *Coin) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +type RandVector struct { + VectorType int64 + Vector []int64 + VectorIndex int64 // Vector 表里面的第index条记录 + Index int64 // 本Vector序列的第几个 + ExpectedWinCoin int64 + EnableRandxTracker bool + RandxTracker *RandxTracker + RecorderRandxTracker *RandxTracker +} + +func (x *RandVector) GetVectorType() int64 { + if x != nil { + return x.VectorType + } + return 0 +} + +func (x *RandVector) GetVector() []int64 { + if x != nil { + return x.Vector + } + return nil +} + +func (x *RandVector) GetVectorIndex() int64 { + if x != nil { + return x.VectorIndex + } + return 0 +} + +func (x *RandVector) GetIndex() int64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *RandVector) GetExpectedWinCoin() int64 { + if x != nil { + return x.ExpectedWinCoin + } + return 0 +} + +func (x *RandVector) GetEnableRandxTracker() bool { + if x != nil { + return x.EnableRandxTracker + } + return false +} + +func (x *RandVector) GetRandxTracker() *RandxTracker { + if x != nil { + return x.RandxTracker + } + return nil +} + +func (x *RandVector) GetRecorderRandxTracker() *RandxTracker { + if x != nil { + return x.RecorderRandxTracker + } + return nil +} + +type NodeTree struct { + Act *Act + BetCoin *Coin + WinCoin *Coin + Mode string + RandVector *RandVector + UserData *UserData + Step int64 + Incr int64 + Cursor int64 + Next int64 + Root int64 + Closing []int64 + Nodes []*Node + ImageFormations []*Formation + ImageFeatures []*Feature + LastNodeSettled bool + Round int64 + RoundType int64 +} + +func (x *NodeTree) GetAct() *Act { + if x != nil { + return x.Act + } + return nil +} + +func (x *NodeTree) GetBetCoin() *Coin { + if x != nil { + return x.BetCoin + } + return nil +} + +func (x *NodeTree) GetWinCoin() *Coin { + if x != nil { + return x.WinCoin + } + return nil +} + +func (x *NodeTree) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +func (x *NodeTree) GetRandVector() *RandVector { + if x != nil { + return x.RandVector + } + return nil +} + +func (x *NodeTree) GetUserData() *UserData { + if x != nil { + return x.UserData + } + return nil +} + +func (x *NodeTree) GetStep() int64 { + if x != nil { + return x.Step + } + return 0 +} + +func (x *NodeTree) GetIncr() int64 { + if x != nil { + return x.Incr + } + return 0 +} + +func (x *NodeTree) GetCursor() int64 { + if x != nil { + return x.Cursor + } + return 0 +} + +func (x *NodeTree) GetNext() int64 { + if x != nil { + return x.Next + } + return 0 +} + +func (x *NodeTree) GetRoot() int64 { + if x != nil { + return x.Root + } + return 0 +} + +func (x *NodeTree) GetClosing() []int64 { + if x != nil { + return x.Closing + } + return nil +} + +func (x *NodeTree) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} + +func (x *NodeTree) GetImageFormations() []*Formation { + if x != nil { + return x.ImageFormations + } + return nil +} + +func (x *NodeTree) GetImageFeatures() []*Feature { + if x != nil { + return x.ImageFeatures + } + return nil +} + +func (x *NodeTree) GetLastNodeSettled() bool { + if x != nil { + return x.LastNodeSettled + } + return false +} + +func (x *NodeTree) GetRound() int64 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *NodeTree) GetRoundType() int64 { + if x != nil { + return x.RoundType + } + return 0 +} + +type LiteFeature struct { + NodeID int64 + FormationID int64 + Type string + Custom string + Win int64 +} + +func (x *LiteFeature) GetNodeID() int64 { + if x != nil { + return x.NodeID + } + return 0 +} + +func (x *LiteFeature) GetFormationID() int64 { + if x != nil { + return x.FormationID + } + return 0 +} + +func (x *LiteFeature) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *LiteFeature) GetCustom() string { + if x != nil { + return x.Custom + } + return "" +} + +func (x *LiteFeature) GetWin() int64 { + if x != nil { + return x.Win + } + return 0 +} + +type LiteFormation struct { + ID int64 + SpinType int64 + NodeType string + NodeID int64 + InitSymbols []int64 + DisplaySymbols []int64 + FinalSymbols []int64 + LinkPositions []*LinkPositions + Win int64 + RandPositions []int64 + MatrixForm []int64 + RewardInfo []*RewardInfo + NewNodeType string +} + +func (x *LiteFormation) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *LiteFormation) GetSpinType() int64 { + if x != nil { + return x.SpinType + } + return 0 +} + +func (x *LiteFormation) GetNodeID() int64 { + if x != nil { + return x.NodeID + } + return 0 +} + +func (x *LiteFormation) GetInitSymbols() []int64 { + if x != nil { + return x.InitSymbols + } + return nil +} + +func (x *LiteFormation) GetDisplaySymbols() []int64 { + if x != nil { + return x.DisplaySymbols + } + return nil +} + +func (x *LiteFormation) GetFinalSymbols() []int64 { + if x != nil { + return x.FinalSymbols + } + return nil +} + +func (x *LiteFormation) GetLinkPositions() []*LinkPositions { + if x != nil { + return x.LinkPositions + } + return nil +} + +func (x *LiteFormation) GetWin() int64 { + if x != nil { + return x.Win + } + return 0 +} + +func (x *LiteFormation) GetRandPositions() []int64 { + if x != nil { + return x.RandPositions + } + return nil +} + +type LiteNode struct { + ID int64 + Parent int64 + Children []int64 + Type string + SpinType int64 + Win int64 + TotalWin int64 + ChildrenTotalWin int64 + ProgressValue int64 + ProgressMax int64 + Bet int64 +} + +func (x *LiteNode) GetID() int64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *LiteNode) GetParent() int64 { + if x != nil { + return x.Parent + } + return 0 +} + +func (x *LiteNode) GetChildren() []int64 { + if x != nil { + return x.Children + } + return nil +} + +func (x *LiteNode) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *LiteNode) GetSpinType() int64 { + if x != nil { + return x.SpinType + } + return 0 +} + +func (x *LiteNode) GetWin() int64 { + if x != nil { + return x.Win + } + return 0 +} + +func (x *LiteNode) GetTotalWin() int64 { + if x != nil { + return x.TotalWin + } + return 0 +} + +func (x *LiteNode) GetChildrenTotalWin() int64 { + if x != nil { + return x.ChildrenTotalWin + } + return 0 +} + +func (x *LiteNode) GetProgressValue() int64 { + if x != nil { + return x.ProgressValue + } + return 0 +} + +func (x *LiteNode) GetProgressMax() int64 { + if x != nil { + return x.ProgressMax + } + return 0 +} + +func (x *LiteNode) GetBet() int64 { + if x != nil { + return x.Bet + } + return 0 +} + +type LiteNodeTree struct { + Step int64 + Cursor int64 + Next int64 + Closing []int64 + Theme string + Nodes []*LiteNode + Formations []*LiteFormation + Features []*LiteFeature + BetCoin *Coin +} + +func (x *LiteNodeTree) GetStep() int64 { + if x != nil { + return x.Step + } + return 0 +} + +func (x *LiteNodeTree) GetCursor() int64 { + if x != nil { + return x.Cursor + } + return 0 +} + +func (x *LiteNodeTree) GetNext() int64 { + if x != nil { + return x.Next + } + return 0 +} + +func (x *LiteNodeTree) GetClosing() []int64 { + if x != nil { + return x.Closing + } + return nil +} + +func (x *LiteNodeTree) GetNodes() []*LiteNode { + if x != nil { + return x.Nodes + } + return nil +} + +func (x *LiteNodeTree) GetFormations() []*LiteFormation { + if x != nil { + return x.Formations + } + return nil +} + +func (x *LiteNodeTree) GetFeatures() []*LiteFeature { + if x != nil { + return x.Features + } + return nil +} + +type SessionContext struct { + UID int64 + *Cli +} + +func (x *SessionContext) GetUID() int64 { + if x != nil { + return x.UID + } + return 0 +} + +type LogContext struct { + SessionContext *SessionContext + Identifier *Identifier + Game *Game + Srv *Srv + UID int64 + Cli *Cli + User *User + Char *Char + Book *Book + Agg *Agg +} + +func (x *LogContext) GetSessionContext() *SessionContext { + if x != nil { + return x.SessionContext + } + return nil +} + +func (x *LogContext) GetIdentifier() *Identifier { + if x != nil { + return x.Identifier + } + return nil +} + +func (x *LogContext) GetGame() *Game { + if x != nil { + return x.Game + } + return nil +} + +func (x *LogContext) GetSrv() *Srv { + if x != nil { + return x.Srv + } + return nil +} + +func (x *LogContext) GetUID() int64 { + if x != nil { + return x.UID + } + return 0 +} + +func (x *LogContext) GetCli() *Cli { + if x != nil { + return x.Cli + } + return nil +} + +func (x *LogContext) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +func (x *LogContext) GetChar() *Char { + if x != nil { + return x.Char + } + return nil +} + +func (x *LogContext) GetBook() *Book { + if x != nil { + return x.Book + } + return nil +} + +func (x *LogContext) GetAgg() *Agg { + if x != nil { + return x.Agg + } + return nil +} + +type Switch struct { + Name string + Switch int64 +} + +func (x *Switch) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Switch) GetSwitch() int64 { + if x != nil { + return x.Switch + } + return 0 +} + +type UserTagSwitch struct { + System string + UserTag1 bool + UserTag2 bool +} + +func (x *UserTagSwitch) GetSystem() string { + if x != nil { + return x.System + } + return "" +} + +func (x *UserTagSwitch) GetUserTag1() bool { + if x != nil { + return x.UserTag1 + } + return false +} + +func (x *UserTagSwitch) GetUserTag2() bool { + if x != nil { + return x.UserTag2 + } + return false +} + +type BonusConfig struct { + ID string + Bonus int64 + Countdown int64 + CompletionMultiple int64 +} + +func (x *BonusConfig) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *BonusConfig) GetBonus() int64 { + if x != nil { + return x.Bonus + } + return 0 +} + +func (x *BonusConfig) GetCountdown() int64 { + if x != nil { + return x.Countdown + } + return 0 +} + +func (x *BonusConfig) GetCompletionMultiple() int64 { + if x != nil { + return x.CompletionMultiple + } + return 0 +} + +type OnlineDailyDealsConfig struct { + Duration int64 + ResetTime int64 +} + +func (x *OnlineDailyDealsConfig) GetDuration() int64 { + if x != nil { + return x.Duration + } + return 0 +} + +func (x *OnlineDailyDealsConfig) GetResetTime() int64 { + if x != nil { + return x.ResetTime + } + return 0 +} + +type OnlineWeeklyDealsConfig struct { + Duration int64 + ResetTime int64 +} + +func (x *OnlineWeeklyDealsConfig) GetDuration() int64 { + if x != nil { + return x.Duration + } + return 0 +} + +func (x *OnlineWeeklyDealsConfig) GetResetTime() int64 { + if x != nil { + return x.ResetTime + } + return 0 +} + +type OnlineVipConfigRow struct { + Grade int64 + RechargeAmount int64 + PromotionReward int64 + PromotionCoinType int64 + WeeklyReward int64 + WeeklyCoinType int64 + MonthReward int64 + MonthCoinType int64 + CashbackProportion int64 + CashbackDailyLimit int64 + CashbackCoinType int64 + ExclusiveCustomerService int64 +} + +func (x *OnlineVipConfigRow) GetGrade() int64 { + if x != nil { + return x.Grade + } + return 0 +} + +func (x *OnlineVipConfigRow) GetRechargeAmount() int64 { + if x != nil { + return x.RechargeAmount + } + return 0 +} + +func (x *OnlineVipConfigRow) GetPromotionReward() int64 { + if x != nil { + return x.PromotionReward + } + return 0 +} + +func (x *OnlineVipConfigRow) GetPromotionCoinType() int64 { + if x != nil { + return x.PromotionCoinType + } + return 0 +} + +func (x *OnlineVipConfigRow) GetWeeklyReward() int64 { + if x != nil { + return x.WeeklyReward + } + return 0 +} + +func (x *OnlineVipConfigRow) GetWeeklyCoinType() int64 { + if x != nil { + return x.WeeklyCoinType + } + return 0 +} + +func (x *OnlineVipConfigRow) GetMonthReward() int64 { + if x != nil { + return x.MonthReward + } + return 0 +} + +func (x *OnlineVipConfigRow) GetMonthCoinType() int64 { + if x != nil { + return x.MonthCoinType + } + return 0 +} + +func (x *OnlineVipConfigRow) GetCashbackProportion() int64 { + if x != nil { + return x.CashbackProportion + } + return 0 +} + +func (x *OnlineVipConfigRow) GetCashbackDailyLimit() int64 { + if x != nil { + return x.CashbackDailyLimit + } + return 0 +} + +func (x *OnlineVipConfigRow) GetCashbackCoinType() int64 { + if x != nil { + return x.CashbackCoinType + } + return 0 +} + +func (x *OnlineVipConfigRow) GetExclusiveCustomerService() int64 { + if x != nil { + return x.ExclusiveCustomerService + } + return 0 +} + +type OnlineVip3ConfigRow struct { + Grade int64 + RechargeAmount int64 + Bet int64 + PromotionReward int64 + PromotionCoinType int64 + WeeklyReward int64 + WeeklyCoinType int64 + MonthReward int64 + MonthCoinType int64 + CashbackProportion int64 + CashbackDailyLimit int64 + CashbackCoinType int64 + ExclusiveCustomerService int64 + LockLimit int64 +} + +func (x *OnlineVip3ConfigRow) GetGrade() int64 { + if x != nil { + return x.Grade + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetRechargeAmount() int64 { + if x != nil { + return x.RechargeAmount + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetBet() int64 { + if x != nil { + return x.Bet + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetPromotionReward() int64 { + if x != nil { + return x.PromotionReward + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetPromotionCoinType() int64 { + if x != nil { + return x.PromotionCoinType + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetWeeklyReward() int64 { + if x != nil { + return x.WeeklyReward + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetWeeklyCoinType() int64 { + if x != nil { + return x.WeeklyCoinType + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetMonthReward() int64 { + if x != nil { + return x.MonthReward + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetMonthCoinType() int64 { + if x != nil { + return x.MonthCoinType + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetCashbackProportion() int64 { + if x != nil { + return x.CashbackProportion + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetCashbackDailyLimit() int64 { + if x != nil { + return x.CashbackDailyLimit + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetCashbackCoinType() int64 { + if x != nil { + return x.CashbackCoinType + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetExclusiveCustomerService() int64 { + if x != nil { + return x.ExclusiveCustomerService + } + return 0 +} + +func (x *OnlineVip3ConfigRow) GetLockLimit() int64 { + if x != nil { + return x.LockLimit + } + return 0 +} + +type Heartbeat struct { + Interval int64 + Timeout int64 +} + +func (x *Heartbeat) GetInterval() int64 { + if x != nil { + return x.Interval + } + return 0 +} + +func (x *Heartbeat) GetTimeout() int64 { + if x != nil { + return x.Timeout + } + return 0 +} + +type RandxTrackerItem struct { + Tag string + Index int64 +} + +func (x *RandxTrackerItem) GetTag() string { + if x != nil { + return x.Tag + } + return "" +} + +func (x *RandxTrackerItem) GetIndex() int64 { + if x != nil { + return x.Index + } + return 0 +} + +type RandxTracker struct { + Items []*RandxTrackerItem +} + +func (x *RandxTracker) GetItems() []*RandxTrackerItem { + if x != nil { + return x.Items + } + return nil +} + +type GameConfigItem struct { + Game string + EnterRechargeLimit int64 + EnterCarryLimit int64 + BetRechargeLimit int64 + BetCarryLimit int64 + WinAtMost int64 +} + +func (x *GameConfigItem) GetGame() string { + if x != nil { + return x.Game + } + return "" +} + +func (x *GameConfigItem) GetEnterRechargeLimit() int64 { + if x != nil { + return x.EnterRechargeLimit + } + return 0 +} + +func (x *GameConfigItem) GetEnterCarryLimit() int64 { + if x != nil { + return x.EnterCarryLimit + } + return 0 +} + +func (x *GameConfigItem) GetBetRechargeLimit() int64 { + if x != nil { + return x.BetRechargeLimit + } + return 0 +} + +func (x *GameConfigItem) GetBetCarryLimit() int64 { + if x != nil { + return x.BetCarryLimit + } + return 0 +} + +func (x *GameConfigItem) GetWinAtMost() int64 { + if x != nil { + return x.WinAtMost + } + return 0 +} + +type RecorderResult struct { + NewPoolValue int64 + OldPoolValue int64 + ReservePump int64 + Poor bool + Cycle int64 + CycleOverload bool + Exception bool + ExceptionType int64 + Replay bool + Vector []int64 + VectorType int64 + VectorIndex int64 + VectorMinRatio float64 + VectorMaxRatio float64 + ExpectedBetCoin int64 + ExpectedWinCoin int64 + SkipWinCheck bool + NoviceForceWin bool + SecondStageForceWin bool + PaidForceWin bool + BuySpinForceWin bool + ContinousZeroForceWin bool + PlayMode int +} + +func (x *RecorderResult) GetNewPoolValue() int64 { + if x != nil { + return x.NewPoolValue + } + return 0 +} + +func (x *RecorderResult) GetOldPoolValue() int64 { + if x != nil { + return x.OldPoolValue + } + return 0 +} + +func (x *RecorderResult) GetReservePump() int64 { + if x != nil { + return x.ReservePump + } + return 0 +} + +func (x *RecorderResult) GetPoor() bool { + if x != nil { + return x.Poor + } + return false +} + +func (x *RecorderResult) GetCycle() int64 { + if x != nil { + return x.Cycle + } + return 0 +} + +func (x *RecorderResult) GetCycleOverload() bool { + if x != nil { + return x.CycleOverload + } + return false +} + +func (x *RecorderResult) GetException() bool { + if x != nil { + return x.Exception + } + return false +} + +func (x *RecorderResult) GetExceptionType() int64 { + if x != nil { + return x.ExceptionType + } + return 0 +} + +func (x *RecorderResult) GetReplay() bool { + if x != nil { + return x.Replay + } + return false +} + +func (x *RecorderResult) GetVector() []int64 { + if x != nil { + return x.Vector + } + return nil +} + +func (x *RecorderResult) GetVectorType() int64 { + if x != nil { + return x.VectorType + } + return 0 +} + +func (x *RecorderResult) GetVectorIndex() int64 { + if x != nil { + return x.VectorIndex + } + return 0 +} + +func (x *RecorderResult) GetVectorMinRatio() float64 { + if x != nil { + return x.VectorMinRatio + } + return 0 +} + +func (x *RecorderResult) GetVectorMaxRatio() float64 { + if x != nil { + return x.VectorMaxRatio + } + return 0 +} + +func (x *RecorderResult) GetExpectedBetCoin() int64 { + if x != nil { + return x.ExpectedBetCoin + } + return 0 +} + +func (x *RecorderResult) GetExpectedWinCoin() int64 { + if x != nil { + return x.ExpectedWinCoin + } + return 0 +} + +func (x *RecorderResult) GetSkipWinCheck() bool { + if x != nil { + return x.SkipWinCheck + } + return false +} + +func (x *RecorderResult) GetNoviceForceWin() bool { + if x != nil { + return x.NoviceForceWin + } + return false +} + +func (x *RecorderResult) GetSecondStageForceWin() bool { + if x != nil { + return x.SecondStageForceWin + } + return false +} + +func (x *RecorderResult) GetPaidForceWin() bool { + if x != nil { + return x.PaidForceWin + } + return false +} + +func (x *RecorderResult) GetBuySpinForceWin() bool { + if x != nil { + return x.BuySpinForceWin + } + return false +} + +func (x *RecorderResult) GetContinousZeroForceWin() bool { + if x != nil { + return x.ContinousZeroForceWin + } + return false +} + +type NoticeUpdate struct { + AppVersion string +} + +func (x *NoticeUpdate) GetAppVersion() string { + if x != nil { + return x.AppVersion + } + return "" +} + +type Broadcast struct { + Type int64 + Param []string +} + +func (x *Broadcast) GetType() int64 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *Broadcast) GetParam() []string { + if x != nil { + return x.Param + } + return nil +} + +type Activity struct { + ActivityType int64 + StartTime int64 + EndTime int64 + Round int64 // 当前多少轮 +} + +func (x *Activity) GetActivityType() int64 { + if x != nil { + return x.ActivityType + } + return 0 +} + +func (x *Activity) GetStartTime() int64 { + if x != nil { + return x.StartTime + } + return 0 +} + +func (x *Activity) GetEndTime() int64 { + if x != nil { + return x.EndTime + } + return 0 +} + +func (x *Activity) GetRound() int64 { + if x != nil { + return x.Round + } + return 0 +} diff --git a/gamesrv/slotspkg/internal/module/shared/types.go b/gamesrv/slotspkg/internal/module/shared/types.go new file mode 100644 index 0000000..134e6fc --- /dev/null +++ b/gamesrv/slotspkg/internal/module/shared/types.go @@ -0,0 +1,76 @@ +package shared + +type TableInfoDto struct { + ArrSpin *ArrSpins `json:"arrSpin"` + Coin int64 `json:"coin"` + BetConfig *BetConfig `json:"betConfig"` +} +type BetConfig struct { + BetChangeList []float64 `json:"betChangeList"` + BetSize []float64 `json:"betSize"` //单注 + BetLevel []int `json:"betLevel"` //下注线数 + BetLines []int `json:"betLines"` //可选线数 + BetType int `json:"betType"` //total计算方式 1.显示成Lines betSize*betLevel*lines (lines) + BetSizeIndex int64 `json:"betSizeIndex"` //选中的单注下标 + BetLevelIndex int64 `json:"betLevelIndex"` //选中的等级下标 + LinesIndex int64 `json:"linesIndex"` //选中的线数下标 +} +type RewardInfo struct { + Type int `json:"type"` //0.指定线的数量 1.全线 + Index int `json:"index"` //线的id + Item int64 `json:"item"` //图标id + Reward float64 `json:"reward"` //单线奖励 + Pos [][]int `json:"pos"` //位置 +} +type ArrSpins struct { + GearID string `json:"gearID"` //"base","respin","freespin + Items [][]int64 `json:"items"` //当前元素 + FinalSymbols [][]int64 `json:"finalSymbols"` //最终元素 + Index []int64 `json:"index"` //reel索引 + Reward float64 `json:"reward"` //总奖(包含线的总奖) + LineReward float64 `json:"lineReward"` //线的总奖 + RewardInfo []*RewardInfo `json:"rewardInfo"` + Special interface{} `json:"special"` //null +} + +type Result struct { + ArrSpins []*ArrSpins `json:"arrSpins"` + WinStatus int `json:"winStatus"` //0.无特效 1.bigWin(5) 2.megaWin(10) 3.superWin(20) 4.epicWin(1000000000) + FreeStatus int `json:"freeStatus"` //0.正常 1.激活 2.再次激活 3.结束 + FreeNum int64 `json:"freeNum"` //剩余free数量 + FreeNumMax int64 `json:"freeNumMax"` //最大的free数量 + FreeNumTrigger int64 `json:"freeNumTrigger"` //新增的free数量 + TotalReward float64 `json:"totalReward"` //总奖 + TotalRewardBase float64 `json:"totalRewardBase"` //基础奖 只有连线 + BetMode int64 `json:"bm"` //0.常规 1.必中 +} +type GameEndDto struct { + Results []*Result `json:"results"` + RoundReward int64 `json:"roundReward"` //总奖 + BetSizeIndex int64 `json:"betSizeIndex"` //选中的单注下标 + BetLevelIndex int64 `json:"betLevelIndex"` //选中的等级下标 + LinesIndex int64 `json:"linesIndex"` //选中的线数下标 + TotalBet int64 `json:"totalBet"` //下注 + BetBeforeCoin int64 `json:"betBeforeCoin"` //下注前 + BetAfterCoin int64 `json:"betAfterCoin"` //下注后 + FinalCoin int64 `json:"finalCoin"` //结束 + ActualBet int64 `json:"actualBet"` + ActualWin int64 `json:"actualWin"` +} + +// Special +type SpinLock struct { + //tigerSpecial + ReSpinStatus int `json:"rs,omitempty"` //0.默认 1.第一次触发 2.进行中 3.结束 + ReSpinSymbol int64 `json:"rsy,omitempty"` //图标(respin) + Lock [][]int `json:"l,omitempty"` //原来锁定的位置 + AddLock [][]int `json:"al,omitempty"` //新增锁定的位置 + X10 int64 `json:"x10,omitempty"` //100.不同图标 88.wild 其他类型.按当前单一中奖图标类型 + WinLines map[int][][]int `json:"wls,omitempty"` + //FortuneDragon + MultipleAxis []int64 `json:"ma,omitempty"` //倍乘轴 + //FortuneRabbit + Prize [][]float64 `json:"pe,omitempty"` + //OXSpecial + NewSuperStack []int64 `json:"nss,omitempty"` +} diff --git a/gamesrv/slotspkg/internal/module/shell/mono.go b/gamesrv/slotspkg/internal/module/shell/mono.go new file mode 100644 index 0000000..5bc58d0 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/shell/mono.go @@ -0,0 +1,20 @@ +package shell + +import "sync" + +type MonoShell struct { + sync.Map +} + +var monoShell = &MonoShell{} + +func Mono(name string) *Shell { + v, ok := monoShell.Load(name) + if ok { + return v.(*Shell) + } + + shell := Base() + monoShell.Store(name, shell) + return shell +} diff --git a/gamesrv/slotspkg/internal/module/shell/session.go b/gamesrv/slotspkg/internal/module/shell/session.go new file mode 100644 index 0000000..d0f1c40 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/shell/session.go @@ -0,0 +1,29 @@ +package shell + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "sync" +) + +func Session(s *session.Session, key string, category string) *Shell { + var m *sync.Map + v := s.Value(key) + if v == nil { + m = &sync.Map{} + s.Set(key, m) + } else { + m = v.(*sync.Map) + } + + var shell *Shell + v, ok := m.Load(key) + if !ok { + shell = NewShell(category) + m.Store(key, shell) + } else { + shell = v.(*Shell) + shell.UpdateCategory(category) + } + + return shell +} diff --git a/gamesrv/slotspkg/internal/module/shell/shell.go b/gamesrv/slotspkg/internal/module/shell/shell.go new file mode 100644 index 0000000..1222dcc --- /dev/null +++ b/gamesrv/slotspkg/internal/module/shell/shell.go @@ -0,0 +1,60 @@ +package shell + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/dao/dataset" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" +) + +type Shell struct { + Category string + *dataset.DataSet +} + +func NewShell(category string) *Shell { + return &Shell{ + Category: category, + DataSet: shellStorage.DataSet(category), + } +} + +func Category(category string) *Shell { + return NewShell(category) +} + +func Base() *Shell { + return NewShell(key.Base) +} + +func (s *Shell) Update() { + s.DataSet = shellStorage.DataSet(s.Category) +} +func (s *Shell) Clone() *Shell { + return NewShell(s.Category) +} +func (s *Shell) UpdateCategory(category string) { + s.Category = category +} + +type OriginShell struct { + Category string + *dataset.DataSet +} + +func NewOriginShell(category string) *OriginShell { + return &OriginShell{ + Category: category, + DataSet: shellStorage.OriginDataSet(category), + } +} + +func OriginBase() *OriginShell { + return NewOriginShell(key.Base) +} + +func (s *OriginShell) Update() { + s.DataSet = shellStorage.OriginDataSet(s.Category) +} + +func (s *OriginShell) UpdateCategory(category string) { + s.Category = category +} diff --git a/gamesrv/slotspkg/internal/module/shell/storage.go b/gamesrv/slotspkg/internal/module/shell/storage.go new file mode 100644 index 0000000..c005234 --- /dev/null +++ b/gamesrv/slotspkg/internal/module/shell/storage.go @@ -0,0 +1,40 @@ +package shell + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/dao/dataset" + "sync" +) + +type ShellStorage struct { + sync.RWMutex + storage dataset.Storage + originStorage dataset.Storage + configMap map[string]string +} + +var shellStorage = &ShellStorage{} + +func init() { + shellStorage.Update() +} +func (ds *ShellStorage) Update() { + ds.Lock() + defer ds.Unlock() + + dataset.Load(nil) + ds.storage = dataset.Duplicate() + ds.originStorage = dataset.DuplicateOrigin() +} +func (ds *ShellStorage) DataSet(category string) *dataset.DataSet { + ds.RLock() + defer ds.RUnlock() + + return dataset.NewDataset(category, ds.storage) +} + +func (ds *ShellStorage) OriginDataSet(category string) *dataset.DataSet { + ds.RLock() + defer ds.RUnlock() + + return dataset.NewDataset(category, ds.originStorage) +} diff --git a/gamesrv/slotspkg/slots/dataset.go b/gamesrv/slotspkg/slots/dataset.go new file mode 100644 index 0000000..174fda2 --- /dev/null +++ b/gamesrv/slotspkg/slots/dataset.go @@ -0,0 +1,17 @@ +package slots + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shell" +) + +type dataSet struct { + *shell.Shell +} + +func DataSet(s *session.Session) *dataSet { + return &dataSet{ + Shell: shell.Session(s, ServiceName(), player.CategoryName(s)), + } +} diff --git a/gamesrv/slotspkg/slots/desc/formation_desc.go b/gamesrv/slotspkg/slots/desc/formation_desc.go new file mode 100644 index 0000000..116132f --- /dev/null +++ b/gamesrv/slotspkg/slots/desc/formation_desc.go @@ -0,0 +1,219 @@ +package desc + +import ( + "github.com/tomas-qstarrs/boost/stringx" + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" +) + +type ( + // FormationDesc describes Formation related configs + FormationDesc struct { + NodeDesc *NodeDesc + FormationSeqDesc *FormationSeqDesc + SeqID int64 + ReelsDesc ReelsDesc + MatrixDesc MatrixDesc + SymbolsDesc SymbolsDesc + Empty bool + } + + // ReelsDesc describes all reels' weight and range's config + ReelsDesc = []*ReelDesc + + // ReelDesc describes one reel's weight and range's config + ReelDesc struct { + Reel []int64 + Weights []float64 + Range int64 + } + + // MatrixDesc describes links config + MatrixDesc *structs.Matrix + + // SymbolsDesc describes all symbols' config + SymbolsDesc = map[int64]*SymbolDesc + + // SymbolDesc describes one symbol's config + SymbolDesc struct { + ID int64 + Name string + IsWild bool + Group []int64 + PayRate []int64 + BetRatio [2]float64 + } +) + +// NewFormationDesc gets formation related config +func NewFormationDesc(n *NodeDesc, seqID int64) (*FormationDesc, error) { + var err error + + if seqID > int64(len(n.FormationSeqsDesc)) { + return nil, errors.FormationSeqIDNotFound.ErrorWith( + n.Theme, n.NodeType) + } + formationSeqDesc := n.FormationSeqsDesc[seqID-1] + f := &FormationDesc{ + NodeDesc: n, + SeqID: seqID, + FormationSeqDesc: formationSeqDesc, + } + + f.Empty = f.IsEmptyFormationDesc() + + if !f.Empty { + if f.ReelsDesc, err = f.GetReelsDesc(); err != nil { + return nil, err + } + if f.MatrixDesc, err = f.GetMatrixDesc(); err != nil { + return nil, err + } + if f.SymbolsDesc, err = f.GetSymbolDesc(); err != nil { + return nil, err + } + } + + return f, nil +} + +// IsEmptyFormationDesc checks if it's an empty formation +func (f *FormationDesc) IsEmptyFormationDesc() bool { + return f.FormationSeqDesc.Reel == "" && + f.FormationSeqDesc.Matrix == "" && + f.FormationSeqDesc.Symbol == "" +} + +// GetReelsDesc gets reels weight config +func (f *FormationDesc) GetReelsDesc() (ReelsDesc, error) { + var name string + if f.FormationSeqDesc.Reel != "Default" { + name = f.FormationSeqDesc.Reel + } + excelData := f.NodeDesc.Excel(stringx.Merge("Reel", name)) + + // get ranges + v, ok := excelData["Range"] + if !ok { + return nil, errors.ConfigSheetNotFound.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Range") + } + ranges, ok := v.([][]int64) + if !ok { + return nil, errors.ConfigTypeError.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Range") + } + if len(ranges) == 0 { + return nil, errors.ConfigSheetEmpty.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Range") + } + + // get weights + v, ok = excelData["Reel"] + if !ok { + return nil, errors.ConfigSheetNotFound.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Reel") + } + reels, ok := v.([][]int64) + if !ok { + return nil, errors.ConfigTypeError.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Reel") + } + v, ok = excelData["Weight"] + if !ok { + return nil, errors.ConfigSheetNotFound.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Weight") + } + weights, ok := v.([][]float64) + if !ok { + return nil, errors.ConfigTypeError.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Weight") + } + if len(reels) != len(weights) { + return nil, errors.FormationReelWeightNotMatch.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Weight") + } + for idx, reel := range reels { + if len(reel) != len(weights[idx]) { + return nil, errors.FormationReelWeightNotMatch.ErrorWith(f.NodeDesc.Theme, f.NodeDesc.NodeType, "Reel.Weight") + } + } + + reelsDesc := make(ReelsDesc, 0, len(reels)) + for reelIdx, reel := range reels { + reelsDesc = append(reelsDesc, &ReelDesc{ + Reel: reel, + Weights: weights[reelIdx], + Range: ranges[0][reelIdx], + }) + } + + return reelsDesc, nil +} + +// GetMatrixDesc gets matrix config +func (f *FormationDesc) GetMatrixDesc() (MatrixDesc, error) { + var name string + if f.FormationSeqDesc.Matrix == "Default" { + name = "" + } else { + name = f.FormationSeqDesc.Matrix + } + v := f.NodeDesc.DefaultSheet("Matrix" + name) + + matrixes, ok := v.([]*structs.Matrix) + if !ok { + return nil, errors.ConfigTypeError.ErrorWith( + f.NodeDesc.Theme, f.NodeDesc.NodeType, stringx.Merge("Matrix", name)) + } + + if len(matrixes) == 0 { + return nil, errors.ConfigSheetEmpty.ErrorWith( + f.NodeDesc.Theme, f.NodeDesc.NodeType, stringx.Merge("Matrix", name)) + } + + matrixDesc := MatrixDesc(matrixes[0]) + return matrixDesc, nil +} + +// GetSymbolDesc gets symbol related config +func (f *FormationDesc) GetSymbolDesc() (SymbolsDesc, error) { + var name string + if f.FormationSeqDesc.Symbol == "Default" { + name = "" + } else { + name = f.FormationSeqDesc.Symbol + } + v := f.NodeDesc.DefaultSheet("Symbol" + name) + symbolsMap, ok := v.(map[int64]*structs.Symbol) + if !ok { + return nil, errors.ConfigTypeError.ErrorWith( + f.NodeDesc.Theme, f.NodeDesc.NodeType, stringx.Merge("Symbol", name)) + } + + var betRatio [2]float64 + if f.NodeDesc.ExistSheet("Symbol", "BetRatio") { + v = f.NodeDesc.Sheet("Symbol", "BetRatio") + betRatioMap := v.([]*structs.SymbolBetRatio) + if len(betRatioMap) == 1 { + betRatio = [2]float64{betRatioMap[0].BetRatio, 1} + } else if len(betRatioMap) == 2 { + betRatio = [2]float64{betRatioMap[0].BetRatio, betRatioMap[1].BetRatio} + } + } + if betRatio[0] == 0 { + betRatio[0] = 1 + } + if betRatio[1] == 0 { + betRatio[1] = 1 + } + + symbolsDesc := make(SymbolsDesc) + for k, symbolDesc := range symbolsMap { + symbolsDesc[k] = &SymbolDesc{ + ID: symbolDesc.ID, + Name: symbolDesc.Name, + IsWild: symbolDesc.IsWild, + Group: symbolDesc.Group, + PayRate: symbolDesc.PayRate, + BetRatio: betRatio, + } + } + return symbolsDesc, nil +} + +func (s *SymbolDesc) Ratio(rate int64) float64 { + return float64(rate) * s.BetRatio[0] / s.BetRatio[1] +} diff --git a/gamesrv/slotspkg/slots/desc/machine_desc.go b/gamesrv/slotspkg/slots/desc/machine_desc.go new file mode 100644 index 0000000..5dc4e00 --- /dev/null +++ b/gamesrv/slotspkg/slots/desc/machine_desc.go @@ -0,0 +1,176 @@ +package desc + +import ( + "github.com/tomas-qstarrs/boost/config" + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shell" +) + +type ( + MachineDesc struct { + Theme string + Category string + DataSet *shell.Shell + } +) + +func NewMachineDesc(theme, category string, shell *shell.Shell) *MachineDesc { + return &MachineDesc{ + Theme: theme, + Category: category, + DataSet: shell, + } +} + +// DefaultSheet gets default machine config by excel name +func (n *MachineDesc) DefaultSheet(excel string) interface{} { + return n.DataSet.GetMachineDefaultSheet(n.Theme, excel, 0) +} + +// Sheet gets machine config by excel name & sheet name +func (n *MachineDesc) Sheet(excel string, sheet string) interface{} { + return n.DataSet.GetMachineSheet(n.Theme, excel, sheet, 0) +} + +func (n *MachineDesc) GetLineBet(betSizeIndex int64, betLevelIndex int64) int64 { + betSizeRows, ok := n.Sheet("Bet", "BetSize").(map[int64]*structs.BetSize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetSize")) + } + + betSizeRow, ok := betSizeRows[betSizeIndex] + if !ok { + panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetSize", betSizeIndex)) + } + + betLevelRows, ok := n.Sheet("Bet", "BetLevel").(map[int64]*structs.BetLevel) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetLevel")) + } + + betLevelRow, ok := betLevelRows[betLevelIndex] + if !ok { + panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLevel", betLevelIndex)) + } + + return betSizeRow.BetSize * betLevelRow.BetLevel +} +func (n *MachineDesc) BetSizes() []int64 { + betSizeRows, ok := n.Sheet("Bet", "BetSize").(map[int64]*structs.BetSize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetSize")) + } + var lists []int64 + for _, list := range betSizeRows { + lists = append(lists, list.BetSize) + } + return lists +} +func (n *MachineDesc) BetLevels() []int64 { + betChangeListRows, ok := n.Sheet("Bet", "BetLevel").(map[int64]*structs.BetLevel) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetLevel")) + } + var lists []int64 + for _, list := range betChangeListRows { + lists = append(lists, list.BetLevel) + } + return lists +} +func (n *MachineDesc) BetLines() []int64 { + betChangeListRows, ok := n.Sheet("Bet", "BetLine").(map[int64]*structs.BetLine) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetLine")) + } + var lists []int64 + for _, list := range betChangeListRows { + lists = append(lists, list.BetLine) + } + return lists +} +func (n *MachineDesc) BetChangeList() []float64 { + betChangeListRows, ok := n.Sheet("Bet", "BetChangeList").(map[int64]*structs.BetChangeList) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetChangeList")) + } + var lists []float64 + for _, list := range betChangeListRows { + lists = append(lists, list.BetChangeList) + } + return lists +} +func (n *MachineDesc) GetVector(choice int64, minRatio, maxRatio float64, isForceWin bool) (int64, []int64) { + if vectorIndex := config.GetInt64("slots.vectorIndex"); vectorIndex > 0 { + rows := n.DefaultSheet("Vector").([]*structs.Vector) + return vectorIndex, rows[vectorIndex].Vector + } + + if minRatio < 0 { + minRatio = 0 + } + + if maxRatio < 1 { + maxRatio = 1 + } + + if isForceWin { + rows := n.Sheet("Vector", "ForceWin").([]*structs.VectorForceWin) + var indexWeightMap = make(map[int]float64) + for index, row := range rows { + if choice == row.Choice && minRatio <= row.MinRatio && row.MaxRatio <= maxRatio { + indexWeightMap[index] = row.Weight + } + } + if len(indexWeightMap) == 0 { + return n.GetVector(choice, 0, maxRatio, false) + } + + index := randx.WeightMap(indexWeightMap) + return n.GetVector(choice, rows[index].MinRatio, rows[index].MaxRatio, false) + } else { + rows := n.DefaultSheet("Vector").([]*structs.Vector) + var indexes = make([]int, 0, len(rows)) + for index, row := range rows { + if choice == row.Choice && minRatio <= row.Ratio && row.Ratio <= maxRatio { + indexes = append(indexes, index) + } + } + + if len(indexes) == 0 { + if minRatio == 0 { + return n.GetVector(0, 0, maxRatio, false) + } + return n.GetVector(choice, 0, maxRatio, false) + } + + index := indexes[randx.Intn(len(indexes))] + return int64(index), rows[index].Vector + } +} + +// GetSpinType gets spin type by node type +func (n *MachineDesc) GetSpinType(typ string) int64 { + v := n.DefaultSheet("Formation") + formations, ok := v.([]*structs.Formation) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Formation")) + } + for _, formation := range formations { + if formation.NodeType == typ { + return formation.SpinType + } + } + panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "Formation", typ)) +} + +func (n *MachineDesc) GetPrizeModel() map[int64]*structs.PrizeModel { + v := n.DefaultSheet("PrizeModel") + rows, ok := v.(map[int64]*structs.PrizeModel) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "PrizeModel")) + } + + return rows +} diff --git a/gamesrv/slotspkg/slots/desc/node_desc.go b/gamesrv/slotspkg/slots/desc/node_desc.go new file mode 100644 index 0000000..00cf62d --- /dev/null +++ b/gamesrv/slotspkg/slots/desc/node_desc.go @@ -0,0 +1,93 @@ +package desc + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shell" + "sort" +) + +type ( + // FormationSeqDesc describes a formation of node type + FormationSeqDesc = structs.Formation + + // FormationSeqsDesc describes all formation of node type + FormationSeqsDesc = []*structs.Formation + + // NodeDesc describes all machine related config + NodeDesc struct { + Theme string + Category string + NodeType string + DataSet *shell.Shell + Class int64 // set when `ResetClass` called + FormationSeqsDesc FormationSeqsDesc + } +) + +// NewNodeDesc gets config upgrade by player +func NewNodeDesc(theme, category, nodeType string, class int64, shell *shell.Shell) *NodeDesc { + return &NodeDesc{ + Theme: theme, + Category: category, + NodeType: nodeType, + DataSet: shell, + Class: class, + } +} + +func (n *NodeDesc) ExistSheet(excel string, sheet string) bool { + return n.DataSet.ExistMachineSheet(n.Theme, excel, sheet, n.Class) +} + +// DefaultSheet gets default machine config by excel name +func (n *NodeDesc) DefaultSheet(excel string) interface{} { + return n.DataSet.GetMachineDefaultSheet(n.Theme, excel, n.Class) +} + +// Sheet gets machine config by excel name & sheet name +func (n *NodeDesc) Sheet(excel string, sheet string) interface{} { + return n.DataSet.GetMachineSheet(n.Theme, excel, sheet, n.Class) +} + +// Sheet gets machine config by excel name & sheet name +func (n *NodeDesc) KeySheet(excel string, sheet string, keyName string) interface{} { + return n.DataSet.GetMachineKeySheet(n.Theme, excel, sheet, n.Class, keyName) +} + +// Excel gets machine excel config by excel name +func (n *NodeDesc) Excel(excel string) map[string]interface{} { + return n.DataSet.GetMachineExcel(n.Theme, excel, n.Class) +} + +// GetFormationSeqDescs gets nodeType related all formations +func (n *NodeDesc) GetFormationSeqDescs(typ string) FormationSeqsDesc { + formationSeqsDesc := make(FormationSeqsDesc, 0) + v := n.DefaultSheet("Formation") + formations, ok := v.([]*structs.Formation) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Formation")) + } + seqIndexes := make(map[int]int) + var seqs []int + for idx, formation := range formations { + if formation.NodeType == typ && formation.SeqID > 0 { + seqIndexes[int(formation.SeqID)] = idx + seqs = append(seqs, int(formation.SeqID)) + } + } + sort.Ints(seqs) + for _, seq := range seqs { + idx := seqIndexes[seq] + formationSeqsDesc = append(formationSeqsDesc, formations[idx]) + } + return formationSeqsDesc +} +func (n *NodeDesc) GetThemeRTPModes() map[int64]*structs.MapRTPMode { + v := n.Sheet("Map", "RTPMode") + rtpModeRows, ok := v.(map[int64]*structs.MapRTPMode) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Map", "RTPMode")) + } + return rtpModeRows +} diff --git a/gamesrv/slotspkg/slots/entity/cheat.go b/gamesrv/slotspkg/slots/entity/cheat.go new file mode 100644 index 0000000..c2bb83b --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/cheat.go @@ -0,0 +1,60 @@ +package entity + +import ( + "encoding/json" +) + +// CheatFormations replaces formation's symbols when its length is valid +func (e *Entity) CheatFormations() { + for _, originFormation := range e.OriginFormations { + + minLen := 0 + if len(originFormation.Symbols) > len(originFormation.CheatSymbols) { + minLen = len(originFormation.CheatSymbols) + } else { + minLen = len(originFormation.Symbols) + } + + for symbolIdx := int64(0); symbolIdx < int64(minLen); symbolIdx++ { + originFormation.Symbols[symbolIdx] = originFormation.CheatSymbols[symbolIdx] + } + } +} + +// PrepareCheatFormations gets all cheat formations from data +func (e *Entity) PrepareCheatFormations() { + v, ok := e.Data[e.NodeDesc.NodeType] + if !ok { + return + } + result := v.(string) + if result == "" { + return + } + + cheatSeqSymbols := make([][]int64, 0) + err := json.Unmarshal([]byte(result), &cheatSeqSymbols) + if err != nil { + cheatSeqSymbols = make([][]int64, 0) + symbols := make([]int64, 0) + err = json.Unmarshal([]byte(result), &symbols) + if err != nil { + panic(errors.Error(err)) + } + cheatSeqSymbols = append(cheatSeqSymbols, symbols) + } + + minLen := 0 + if len(cheatSeqSymbols) > len(e.OriginFormations) { + minLen = len(e.OriginFormations) + } else { + minLen = len(cheatSeqSymbols) + } + + for formationIdx := int64(0); formationIdx < int64(minLen); formationIdx++ { + cheatSymbols := cheatSeqSymbols[formationIdx] + originFormation := e.OriginFormations[formationIdx] + originFormation.CheatSymbols = make([]int64, len(cheatSymbols)) + copy(originFormation.CheatSymbols, cheatSymbols) + } +} diff --git a/gamesrv/slotspkg/slots/entity/custom.go b/gamesrv/slotspkg/slots/entity/custom.go new file mode 100644 index 0000000..07692da --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/custom.go @@ -0,0 +1,35 @@ +package entity + +import ( + "github.com/mohae/deepcopy" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "reflect" +) + +// GetCustom gets feature interface by feature ID +func (e *Entity) GetCustom(featureID int64) interface{} { + v, ok := e.Customs[featureID] + if !ok { + panic(errors.FeatureNotFound.Error()) + } + return v +} + +// AddFeatureCustom adds custom on feature +func (e *Entity) AddFeatureCustom(featureID int64, v interface{}) *shared.Feature { + v = deepcopy.Copy(v) + feature := e.GetFeature(featureID) + feature.Type = reflect.TypeOf(v).Elem().String() + _, ok := e.Customs[featureID] + if ok { + panic(errors.FeatureAlreadyExists.Error()) + } + e.Customs[featureID] = v + return feature +} + +// DeleteCustom deletes custom by feature id +func (e *Entity) DeleteCustom(featureID int64) { + delete(e.Customs, featureID) +} diff --git a/gamesrv/slotspkg/slots/entity/db.go b/gamesrv/slotspkg/slots/entity/db.go new file mode 100644 index 0000000..5dff427 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/db.go @@ -0,0 +1,34 @@ +package entity + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/ddb" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" + "strings" +) + +type DB struct{} + +var db DB + +func (DB) GetCheatData(uid int64, theme string) map[string]interface{} { + c := ddb.RedimoClient() + + result, err := c.HGETALL(global.DDB.CheatSlots(uid)) + if err != nil { + panic(err) + } + + data := make(map[string]interface{}) + for key, value := range result { + index := strings.Index(key, theme) + if index != 0 { + continue + } + dataKey := key[len(theme)+1:] + if value.Present() { + data[dataKey] = value.Interface() + } + } + + return data +} diff --git a/gamesrv/slotspkg/slots/entity/entity.go b/gamesrv/slotspkg/slots/entity/entity.go new file mode 100644 index 0000000..350f2a8 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/entity.go @@ -0,0 +1,62 @@ +package entity + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shell" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" + "mongo.games.com/game/gamesrv/slotspkg/slots/formation" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +// Entity holds a machine for player +type Entity struct { + Theme string + Shell *shell.Shell + MachineDesc *desc.MachineDesc + NodeDesc *desc.NodeDesc + NextNodeDesc *desc.NodeDesc + NodeTree *shared.NodeTree + OriginFormations []*formation.Formation // for storing origin formation.Formation + Session *session.Session + Player *player.Player + Customs map[int64]interface{} + Callback intf.Callback + Data map[string]interface{} // machine data store + RandState *RandState + IsFree bool +} + +// NewEntity creates a new entity +func NewEntity(s *session.Session, theme string, callback intf.Callback, shell *shell.Shell, isFree bool) *Entity { + return &Entity{ + Theme: theme, + Shell: shell, + MachineDesc: desc.NewMachineDesc(theme, key.Base, shell), + NodeDesc: nil, + NextNodeDesc: nil, + NodeTree: NewNodeTree(), + OriginFormations: make([]*formation.Formation, 0), + Session: s, + Player: player.Get(s), + Customs: make(map[int64]interface{}), + Callback: callback, + Data: make(map[string]interface{}), + RandState: NewRandState(), + IsFree: isFree, + } +} + +func NewNodeTree() *shared.NodeTree { + return &shared.NodeTree{ + RandVector: &shared.RandVector{}, + UserData: &shared.UserData{}, + Nodes: make([]*shared.Node, 0), + Closing: make([]int64, 0), + Act: &shared.Act{}, + BetCoin: &shared.Coin{}, + WinCoin: &shared.Coin{}, + } +} diff --git a/gamesrv/slotspkg/slots/entity/feature.go b/gamesrv/slotspkg/slots/entity/feature.go new file mode 100644 index 0000000..a6d2d00 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/feature.go @@ -0,0 +1,286 @@ +package entity + +import ( + "github.com/mohae/deepcopy" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +// GetFeature finds feature by walking all nodes in node tree +func (e *Entity) GetFeature(featureID int64) *shared.Feature { + var f *shared.Feature + e.Walk(func(node *shared.Node) bool { + for _, feature := range node.Features { + if feature.ID == featureID { + f = feature + return true + } + } + return false + }) + + if f != nil { + return f + } + + for _, feature := range e.NodeTree.ImageFeatures { + if feature.ID == featureID { + return feature + } + } + + return nil +} + +// GetTypeFeatures finds features by walking all nodes in node tree +func (e *Entity) GetTypeFeatures(node *shared.Node, typ string) []*shared.Feature { + features := make([]*shared.Feature, 0) + for _, feature := range node.Features { + if feature.Type == typ { + features = append(features, feature) + } + } + return features +} + +// AddFeature adds feature to node features +func (e *Entity) AddFeature(node *shared.Node) int64 { + e.NodeTree.Incr++ + featureID := e.NodeTree.Incr + + node.Features = append(node.Features, &shared.Feature{ + NodeID: node.ID, + ID: featureID, + SpinType: node.SpinType, + NodeType: node.Type, + Lifetime: -1, + Visiable: true, + }) + + return featureID +} + +// PruneNodeFeatures prune features that has no lifetime +func (e *Entity) PruneNodeFeatures(node *shared.Node) { + for index := 0; index < len(node.Features); index++ { + feature := node.Features[index] + if feature.Lifetime == 0 { + node.Features = append(node.Features[:index], + node.Features[index+1:]...) + e.DeleteCustom(feature.ID) + index-- + } + } +} + +// FeaturesPassTime decreases features' lifetime on specific node +func (e *Entity) FeaturesPassTime(node *shared.Node, n int64) { + features := node.Features + for _, feature := range features { + if feature.Lifetime > 0 { + if feature.Lifetime > n { + feature.Lifetime -= n + } else { + feature.Lifetime = 0 + } + } + } +} + +// UpdateImageFeatures saves image info from features to image features +func (e *Entity) UpdateImageFeatures() { + e.updateImageFeaturesByNode() + e.updateImageFeaturesByFormation() +} + +func (e *Entity) updateImageFeaturesByNode() { + var features []*shared.Feature + for _, feature := range e.CursorNode().Features { + if feature.Imageable && feature.SeqID == 0 { + features = append(features, feature) + } + } + + nodeType := e.CursorNode().Type + for index := 0; index < len(e.NodeTree.ImageFeatures); index++ { + imageFeature := e.NodeTree.ImageFeatures[index] + if imageFeature.SeqID == 0 && imageFeature.NodeType == nodeType { + e.NodeTree.ImageFeatures = append( + e.NodeTree.ImageFeatures[:index], + e.NodeTree.ImageFeatures[index+1:]...) + e.DeleteCustom(imageFeature.ID) + index-- + } + } + + for _, feature := range features { + e.copyFeatureToImage(feature) + } +} + +func (e *Entity) updateImageFeaturesByFormation() { + var features []*shared.Feature + for _, feature := range e.CursorNode().Features { + if feature.Imageable && feature.SeqID > 0 { + features = append(features, feature) + } + } + + for _, feature := range features { + formationID := feature.FormationID + for index := 0; index < len(e.NodeTree.ImageFeatures); index++ { + imageFeature := e.NodeTree.ImageFeatures[index] + if imageFeature.SeqID > 0 && imageFeature.FormationID == formationID { + e.NodeTree.ImageFeatures = append( + e.NodeTree.ImageFeatures[:index], + e.NodeTree.ImageFeatures[index+1:]...) + e.DeleteCustom(imageFeature.ID) + index-- + } + } + } + + for _, feature := range features { + e.copyFeatureToImage(feature) + } +} + +func (e *Entity) copyFeatureToImage(feature *shared.Feature) { + custom := e.GetCustom(feature.ID) + + e.NodeTree.Incr++ + featureID := e.NodeTree.Incr + + // deep copy feature + newFeature := deepcopy.Copy(feature).(*shared.Feature) + newFeature.ID = featureID + + e.NodeTree.ImageFeatures = append(e.NodeTree.ImageFeatures, newFeature) + + e.AddFeatureCustom(featureID, deepcopy.Copy(custom)) +} + +func (e *Entity) copyFeatureToNode(node *shared.Node, feature *shared.Feature) { + custom := e.GetCustom(feature.ID) + + e.NodeTree.Incr++ + featureID := e.NodeTree.Incr + + // deep copy feature + newFeature := deepcopy.Copy(feature).(*shared.Feature) + newFeature.ID = featureID + newFeature.Imageable = false + newFeature.Lifetime = 0 + + node.Features = append(node.Features, newFeature) + + e.AddFeatureCustom(featureID, deepcopy.Copy(custom)) +} + +// AttachFeatureToFormation attaches feature to formation by seq ID +func (e *Entity) AttachFeatureToFormation(feature *shared.Feature, seqID int64) { + formation := e.GetFormation(feature.NodeID, seqID) + feature.SeqID = seqID + feature.FormationID = formation.ID +} + +// InitNextFeatures inits init symbols features for next node +func (e *Entity) InitNextFeatures() { + e.initNextFeaturesByNode() + e.initNextFeaturesByFormations() +} + +func (e *Entity) initNextFeaturesByNode() { + nextNodeType := e.NextNode().Type + cursorNodeType := e.CursorNode().Type + if nextNodeType == cursorNodeType { + return + } + for _, imageFeature := range e.NodeTree.ImageFeatures { + if imageFeature.SeqID == 0 && imageFeature.NodeType == nextNodeType { + e.copyFeatureToNode(e.NextNode(), imageFeature) + } + } +} + +func (e *Entity) initNextFeaturesByFormations() { + for _, nextFormation := range e.NextNode().Formations { + e.genFormationFeatures(nextFormation) + } +} + +func (e *Entity) genFormationFeatures(nextFormation *shared.Formation) { + var initFeatures []*shared.Feature + defer func() { + for _, initFeature := range initFeatures { + e.copyFeatureToNode(e.NextNode(), initFeature) + } + }() + + desc := e.getNextFormationDesc(nextFormation) + if desc == nil { // No formation in next node + return + } + + // Check same formation id form cursor node, no need to copy feature + for _, cursorFormation := range e.CursorNode().Formations { + if nextFormation.ID == cursorFormation.ID { + return + } + } + + // Next node is progressed, just read history + if e.NextNode().ProgressValue > 0 { + initFeatures = e.getImageFeatures(e.NextNode(), desc) + return + } + + method := e.getNexFormationMethod(e.NextNode(), desc) + + // Switch method to get all kinds of init symbols source + switch method { + case initSymbolsMethodNone: + // do nothing + case initSymbolsMethodConst: + // do nothing + case initSymbolsMethodRandom: + // do nothing + case initSymbolsMethodCopy: + initFeatures = e.getCopyFeatures(e.NextNode(), desc) + case initSymbolsMethodImage: + initFeatures = e.getImageFeatures(e.NextNode(), desc) + default: + panic(errors.With(method).Errorf("unsupported init symbols method")) + } +} + +func (e *Entity) getCopyFeatures(node *shared.Node, desc *desc.FormationSeqDesc) []*shared.Feature { + for { + node = e.GetNode(node.Parent) + if node.ID == e.NodeTree.Root { + return nil + } + if desc.SeqID > int64(len(node.Formations)) { + continue + } + var features []*shared.Feature + for _, feature := range node.Features { // Use seq ID + if feature.SeqID == node.Formations[desc.SeqID-1].SeqID { + features = append(features, feature) + } + } + return features + } +} + +func (e *Entity) getImageFeatures(node *shared.Node, desc *desc.FormationSeqDesc) []*shared.Feature { + var features []*shared.Feature + formation := node.Formations[desc.SeqID-1] + for _, imageFeature := range e.NodeTree.ImageFeatures { // Use formation ID + if imageFeature.SeqID > 0 && imageFeature.FormationID == formation.ID { + features = append(features, imageFeature) + } + } + return features +} diff --git a/gamesrv/slotspkg/slots/entity/formation.go b/gamesrv/slotspkg/slots/entity/formation.go new file mode 100644 index 0000000..d231402 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/formation.go @@ -0,0 +1,335 @@ +package entity + +import ( + "github.com/tomas-qstarrs/boost/randx" + "github.com/tomas-qstarrs/boost/timex" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" + "mongo.games.com/game/gamesrv/slotspkg/slots/formation" +) + +const ( + initSymbolsMethodNone int64 = iota + initSymbolsMethodConst + initSymbolsMethodRandom + initSymbolsMethodCopy + initSymbolsMethodImage +) + +// GetFormation gets specific formation by node id & seq id +// panic if no formation +func (e *Entity) GetFormation(nodeID int64, seqID int64) *shared.Formation { + node := e.GetNode(nodeID) + if seqID > int64(len(node.Formations)) { + panic(errors.FormationNotFound.ErrorWith(seqID)) + } + return node.Formations[seqID-1] +} + +// GetFormations gets all formations by node id +func (e *Entity) GetFormations(nodeID int64) []*shared.Formation { + node := e.GetNode(nodeID) + return node.Formations +} + +// ConvertFormations sets formations into node formations +func (e *Entity) ConvertFormations() { + for idx, originFormation := range e.OriginFormations { + linkPositions := make([]*shared.LinkPositions, 0, len(originFormation.LinkPositions)) + for _, positions := range originFormation.LinkPositions { + linkPositions = append(linkPositions, &shared.LinkPositions{ + Positions: positions, + }) + } + + finalSymbols := make([]int64, len(originFormation.Symbols)) + copy(finalSymbols, originFormation.Symbols) + + cliFormation := e.CursorNode().Formations[idx] + cliFormation.SeqID = originFormation.SeqID + cliFormation.DisplaySymbols = originFormation.DisplaySymbols + cliFormation.FinalSymbols = finalSymbols + cliFormation.LinkPositions = linkPositions + cliFormation.Win = int64(originFormation.Pay * float64(e.CursorNode().SingleBet)) + cliFormation.ReelForm = originFormation.ReelForm + cliFormation.MatrixForm = originFormation.MatrixForm + cliFormation.RandPositions = originFormation.RandPositions + cliFormation.RewardInfo = originFormation.RewardInfo + for _, info := range cliFormation.RewardInfo { + info.Reward *= float64(e.CursorNode().SingleBet) + } + } +} + +// PrepareOriginFormations prepares origin Formations for current node +func (e *Entity) PrepareOriginFormations() { + e.OriginFormations = make([]*formation.Formation, 0) + for _, desc := range e.NodeDesc.FormationSeqsDesc { + formation, err := formation.NewFormation(e.NodeDesc, desc.SeqID) + if err != nil { + panic(err) + } + e.OriginFormations = append(e.OriginFormations, formation) + } +} + +// PrepareOriginFormations prepares origin Formations for next node +func (e *Entity) PrepareNextOriginFormations() { + e.OriginFormations = make([]*formation.Formation, 0) + for _, desc := range e.NextNodeDesc.FormationSeqsDesc { + formation, err := formation.NewFormation(e.NextNodeDesc, desc.SeqID) + if err != nil { + panic(err) + } + e.OriginFormations = append(e.OriginFormations, formation) + } +} + +// Rand rands for all origin formations +func (e *Entity) Rand() { + for _, formation := range e.OriginFormations { + if formation.Empty() { + continue + } + formation.Rand(e.RandState.randx) + } +} + +// Display sets formation for display +func (e *Entity) Display() { + for _, formation := range e.OriginFormations { + if formation.Empty() { + continue + } + formation.Display() + } +} + +// Link links for all origin formations +func (e *Entity) Link() { + for _, formation := range e.OriginFormations { + if formation.Empty() { + continue + } + formation.Link() + } +} + +// UpdateImageFormations saves image info from formations to image formations +func (e *Entity) UpdateImageFormations() { + for _, formation := range e.CursorNode().Formations { + for idx, imageFormation := range e.NodeTree.ImageFormations { + if imageFormation.ID == formation.ID { + e.NodeTree.ImageFormations[idx] = formation + return + } + } + e.NodeTree.ImageFormations = append(e.NodeTree.ImageFormations, formation) + } +} + +// InitNextFormations inits init symbols for next node +func (e *Entity) InitNextFormations() { + for _, nextFormation := range e.NextNode().Formations { + e.genInitSymbols(nextFormation) + } +} + +func (e *Entity) genInitSymbols(nextFormation *shared.Formation) { + var initSymbols []int64 + defer func() { + nextFormation.InitSymbols = make([]int64, len(initSymbols)) + copy(nextFormation.InitSymbols, initSymbols) + }() + + desc := e.getNextFormationDesc(nextFormation) + if desc == nil { // No formation in next node + return + } + + // Try to copy symbols from cursor node + for _, cursorFormation := range e.CursorNode().Formations { + if nextFormation.ID == cursorFormation.ID { + initSymbols = cursorFormation.FinalSymbols + return + } + } + + // Next node is progressed, just read history + if e.NextNode().ProgressValue > 0 { + initSymbols = e.getImageSymbols(e.NextNode(), desc) + return + } + + method := e.getNexFormationMethod(e.NextNode(), desc) + + // Switch method to get all kinds of init symbols source + switch method { + case initSymbolsMethodNone: + // do nothing + case initSymbolsMethodConst: + initSymbols = e.getConstSymbols(e.NextNode(), desc) + case initSymbolsMethodRandom: + initSymbols = e.getRandomSymbols(e.NextNode(), desc) + case initSymbolsMethodCopy: + initSymbols = e.getCopySymbols(e.NextNode(), desc) + case initSymbolsMethodImage: + initSymbols = e.getImageSymbols(e.NextNode(), desc) + default: + panic(errors.With(method).Errorf("unsupported init symbols method")) + } +} + +func (e *Entity) getNextFormationDesc(formation *shared.Formation) *desc.FormationSeqDesc { + for _, desc := range e.NextNodeDesc.FormationSeqsDesc { + if desc.NodeType == formation.NodeType && + desc.SeqID == formation.SeqID { + return desc + } + } + return nil +} + +func (e *Entity) getNexFormationMethod(node *shared.Node, desc *desc.FormationSeqDesc) int64 { + formation := node.Formations[desc.SeqID-1] + for _, imageFormation := range e.NodeTree.ImageFormations { + if imageFormation.ID == formation.ID { + return desc.OtherInitMethod + } + } + return desc.FirstInitMethod +} + +func (e *Entity) getConstSymbols(node *shared.Node, desc *desc.FormationSeqDesc) []int64 { + formation := node.Formations[desc.SeqID-1] + for _, imageFormation := range e.NodeTree.ImageFormations { + if imageFormation.ID == formation.ID { + return desc.OtherInitSymbols + } + } + return desc.FirstInitSymbols +} + +func (e *Entity) getRandomSymbols(_ *shared.Node, desc *desc.FormationSeqDesc) []int64 { + originFormation, err := formation.NewFormation(e.NextNodeDesc, desc.SeqID) + if err != nil { + panic(err) + } + originFormation.Rand(randx.New(timex.Now().UnixNano())) + return originFormation.Symbols +} + +func (e *Entity) getCopySymbols(node *shared.Node, desc *desc.FormationSeqDesc) []int64 { + for { + node = e.GetNode(node.Parent) + if node.ID == e.NodeTree.Root { + return nil + } + if desc.SeqID > int64(len(node.Formations)) { + continue + } + return node.Formations[desc.SeqID-1].FinalSymbols + } +} + +func (e *Entity) getImageSymbols(node *shared.Node, desc *desc.FormationSeqDesc) []int64 { + formation := node.Formations[desc.SeqID-1] + for _, imageFormation := range e.NodeTree.ImageFormations { + if imageFormation.ID == formation.ID { + return imageFormation.FinalSymbols + } + } + return nil +} + +func (e *Entity) getLineCount() int64 { + lineCount := int64(0) + for _, originFormation := range e.OriginFormations { + lineCount += originFormation.FormationDesc.MatrixDesc.LineCount + } + return lineCount +} + +func (e *Entity) GetLineCountByType(nodeType string) int64 { + nodeDesc := e.NewNodeDescWithNodeType(nodeType) + e.SelectFormationSeqsDesc(nodeDesc) + formationSeqsDesc := nodeDesc.GetFormationSeqDescs(key.BaseSpin) + var lineCount int64 = 0 + for _, desc := range formationSeqsDesc { + formation, err := formation.NewFormation(nodeDesc, desc.SeqID) + if err != nil { + panic(err) + } + + lineCount += formation.FormationDesc.MatrixDesc.LineCount + } + return lineCount +} + +// IsWinInBeforeDisplay must in BeforeDisplay +func (e *Entity) IsWinInBeforeDisplay() bool { + if e.OriginFormations != nil { + //newOriginFormations := deepcopy.Copy(e.OriginFormations).([]*formation.Formation) + //newOriginFormations := e.OriginFormations + for i := 1; i <= 100; i++ { + for _, formation := range e.OriginFormations { + if formation.Empty() { + continue + } + formation.Display() + formation.LinkOnWin() + //logx.Error("formation.Symbols----------- ", formation.Symbols) + if formation.Pay > 0 { + //logx.Error("formation.Symbols---22-------- ", formation.Symbols) + //e.OriginFormations[k].Symbols = make([]int64, len(formation.Symbols)) + //copy(e.OriginFormations[k].Symbols, formation.Symbols) + //if e.OriginFormations[k].Symbols[0] == 0 { + // fmt.Println() + //} + return true + } + formation.ResetRandSymbolsByIndex(e.Randx()) + } + } + } + return true +} + +// IsWinInBeforeDisplayBySymbols must in BeforeDisplay +func (e *Entity) IsWinInBeforeDisplayBySymbols(symbols [][]int64) int { + if e.OriginFormations != nil { + for _, f := range e.OriginFormations { + if f.Empty() { + continue + } + symbolsCopy := make([]int64, len(f.Symbols)) + copy(symbolsCopy, f.Symbols) + f.Symbols = formation.DeformatSymbols(symbols) + //f.Display() + f.LinkOnWin() + + f.Symbols = symbolsCopy + if f.Pay > 0 { + return 1 + } + } + //newOriginFormations := deepcopy.Copy(e.OriginFormations).([]*formation.Formation) + //for _, newOriginFormation := range newOriginFormations { + // if newOriginFormation.Empty() { + // continue + // } + // newOriginFormation.Symbols = formation.DeformatSymbols(symbols) + // + // newOriginFormation.DisplaySymbols = make([]int64, len(newOriginFormation.Symbols)) + // copy(newOriginFormation.DisplaySymbols, newOriginFormation.Symbols) + // + // newOriginFormation.Link() + // if newOriginFormation.Pay > 0 { + // return len(newOriginFormation.RewardInfo) + // } + //} + } + return 0 +} diff --git a/gamesrv/slotspkg/slots/entity/node.go b/gamesrv/slotspkg/slots/entity/node.go new file mode 100644 index 0000000..46336f3 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/node.go @@ -0,0 +1,460 @@ +package entity + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/goserver/core/logger" + "strconv" +) + +const ( + // WalkRootFirst walks root first, recurses from root + WalkRootFirst int64 = 1 + // WalkRootLast walks root last, recurses from farest leaf + WalkRootLast int64 = 2 +) + +// GetNode finds node by nodeID +func (e *Entity) GetNode(nodeID int64) *shared.Node { + for _, node := range e.NodeTree.Nodes { + if node.ID == nodeID { + return node + } + } + panic(errors.NodeNotFound.ErrorWith(strconv.FormatInt(nodeID, 10))) +} + +// IsEmpty returns if the NodeTree is empty +func (e *Entity) IsEmpty() bool { + return len(e.NodeTree.Nodes) == 0 +} + +// IsClosing returns if node is in `NodeTree.Closing` slice +func (e *Entity) IsClosing(node *shared.Node) bool { + for _, closed := range e.NodeTree.Closing { + if node.ID == closed { + return true + } + } + return false +} + +// CursorNode returns the `Cursor` node in `NodeTree` +func (e *Entity) CursorNode() *shared.Node { + return e.GetNode(e.NodeTree.Cursor) +} + +// NextNode returns the `Next` node in `NodeTree` +func (e *Entity) NextNode() *shared.Node { + return e.GetNode(e.NodeTree.Next) +} + +// RootNode returns the `Root` node in `NodeTree` +func (e *Entity) RootNode() *shared.Node { + return e.GetNode(e.NodeTree.Root) +} + +// ParentNode returns the `Parent` node of `Cursor` node in `NodeTree` +func (e *Entity) ParentNode() *shared.Node { + return e.GetNode(e.GetNode(e.NodeTree.Cursor).Parent) +} + +// AncestorNode returns the `Ancestor` Node of `Cursor` Node in `NodeTree` +func (e *Entity) AncestorNode() *shared.Node { + switch e.CursorNode().Type { + case key.BaseSpin, key.FreeSpin, key.Root: + return e.RootNode() + default: + return e.recursiveGetAncestor(e.CursorNode()) + } +} + +func (e *Entity) recursiveGetAncestor(node *shared.Node) *shared.Node { + node = e.GetNode(node.GetParent()) + nodeType := node.GetType() + switch nodeType { + case key.BaseSpin, key.FreeSpin, key.Root: + return node + default: + return e.recursiveGetAncestor(node) + } +} + +// ClosingNodes returns the `Closing` node in `NodeTree` +func (e *Entity) ClosingNodes() []*shared.Node { + closingNodes := make([]*shared.Node, len(e.NodeTree.Closing)) + for i, closing := range e.NodeTree.Closing { + closingNodes[i] = e.GetNode(closing) + } + return closingNodes +} + +// InitRootNode add root node to node tree +func (e *Entity) InitRootNode() int64 { + ID := e.NodeTree.Incr + e.NodeTree.Cursor = ID + e.NodeTree.Next = ID + e.NodeTree.Root = ID + e.NodeTree.Nodes = append(e.NodeTree.Nodes, &shared.Node{ + ID: ID, + Parent: ID, + Children: make([]int64, 0), + Type: key.Root, + Formations: make([]*shared.Formation, 0), + Features: make([]*shared.Feature, 0), + }) + + return ID +} +func (e *Entity) InitAct() { + e.NodeTree.Act = &shared.Act{ + BetSizeIndex: 0, + BetLevelIndex: 0, + BetLineIndex: 0, + Ratio: 1, + } + FirstBet := e.Shell.DataSet.GetMachineSheet(e.Theme, "Bet", "FirstBet", 0) + if FirstBet != nil { + FirstBetMap := FirstBet.(map[int64]*structs.FirstBet) + e.NodeTree.Act.BetSizeIndex = FirstBetMap[1].BetSizeIndex + e.NodeTree.Act.BetLevelIndex = FirstBetMap[1].BetLevelIndex + } +} + +func (e *Entity) UpdateAct(act *shared.Act) { + e.NodeTree.Act = act +} + +func (e *Entity) addChildNodeBySide(parent int64, typ string, + progress int64, rightSide bool) *shared.Node { + if progress == 0 { + panic(errors.NewNodeZeroProgress.Error()) + } + e.NodeTree.Incr++ + nodeID := e.NodeTree.Incr + parentNode := e.GetNode(parent) + if rightSide { + parentNode.Children = append(parentNode.Children, nodeID) + } else { + parentNode.Children = append([]int64{nodeID}, parentNode.Children...) + } + formations := make([]*shared.Formation, 0) + + spinType := e.MachineDesc.GetSpinType(typ) + + formationSeqDescs := e.NodeDesc.GetFormationSeqDescs(typ) + + for _, desc := range formationSeqDescs { + formation := &shared.Formation{ + SpinType: desc.SpinType, + ID: desc.ID, + NodeType: desc.NodeType, + SeqID: desc.SeqID, + NodeID: nodeID, + } + formations = append(formations, formation) + } + + node := &shared.Node{ + ID: nodeID, + Parent: parent, + Children: make([]int64, 0), + Type: typ, + SpinType: spinType, + Formations: formations, + Features: make([]*shared.Feature, 0), + Bet: parentNode.Bet, + ProgressMax: progress, + NeedPrepare: false, + Prepared: false, + } + + e.NodeTree.Nodes = append(e.NodeTree.Nodes, node) + + return node +} + +// AddChildNode add new node to node tree +func (e *Entity) AddChildNode(parent int64, typ string, + progress int64) *shared.Node { + return e.addChildNodeBySide(parent, typ, progress, true) +} + +// AddChildNode add new node to node tree +func (e *Entity) AddChildNodeAtLeft(parent int64, typ string, + progress int64) *shared.Node { + return e.addChildNodeBySide(parent, typ, progress, false) +} + +// UpdateNode2NewType update cursor to new node +func (e *Entity) UpdateNode2NewType(nodeId int64, typ string, progress int64) *shared.Node { + node := e.GetNode(nodeId) + if node == nil { + logger.Logger.Errorf("UpdateNode2NewType err: node == nil nodeid=(%v)", nodeId) + return nil + } + node.Type = typ + node.SpinType = e.MachineDesc.GetSpinType(typ) + node.ProgressMax = progress + node.NoBase = true + + e.NextNodeDesc = e.GetNodeDesc(node) + + e.PrepareNextOriginFormations() + + formations := make([]*shared.Formation, 0) + formationSeqDescs := e.NodeDesc.GetFormationSeqDescs(typ) + for _, desc := range formationSeqDescs { + formation := &shared.Formation{ + SpinType: desc.SpinType, + ID: desc.ID, + NodeType: desc.NodeType, + SeqID: desc.SeqID, + NodeID: node.ID, + } + formations = append(formations, formation) + } + node.Formations = formations + + return node +} + +// PruneNode prunes a node from tree +func (e *Entity) PruneNode(node *shared.Node) { + for _, child := range node.Children { + childNode := e.GetNode(child) + e.PruneNode(childNode) + } + parentNode := e.GetNode(node.Parent) + for index, child := range parentNode.Children { + if child == node.ID { + parentNode.Children = append(parentNode.Children[:index], + parentNode.Children[index+1:]...) + break + } + } + for index, n := range e.NodeTree.Nodes { + if n.ID == node.ID { + e.NodeTree.Nodes = append(e.NodeTree.Nodes[:index], + e.NodeTree.Nodes[index+1:]...) + break + } + } +} + +// Walk walks all nodes in node tree +// return true means stopping right now; false means continuing +func (e *Entity) Walk(f func(node *shared.Node) bool) bool { + for _, node := range e.NodeTree.Nodes { + if f(node) { + return true + } + } + return false +} + +// WalkTree walks nodes from root node +func (e *Entity) WalkTree(direction int64, f func(node *shared.Node) bool) bool { + return e.WalkTreeNode(e.RootNode(), direction, f) +} + +// WalkTreeNode walks nodes from parent node +// return true means stopping right now; false means continuing +func (e *Entity) WalkTreeNode( + node *shared.Node, + direction int64, + f func(node *shared.Node) bool, +) bool { + switch direction { + case WalkRootFirst: + if f(node) { + return true + } + for _, child := range node.Children { + childNode := e.GetNode(child) + if e.WalkTreeNode(childNode, direction, f) { + return true + } + } + case WalkRootLast: + for _, child := range node.Children { + childNode := e.GetNode(child) + if e.WalkTreeNode(childNode, direction, f) { + return true + } + } + if f(node) { + return true + } + } + + return false +} + +// GetChildrenNodes gets children nodes of one nodes +func (e *Entity) GetChildrenNodes(node *shared.Node) []*shared.Node { + nodes := make([]*shared.Node, 0) + for _, childNodeID := range node.Children { + nodes = append(nodes, e.GetNode(childNodeID)) + } + return nodes +} + +// MustNext must return a node +// add a new node if all nodes is accomplished +func (e *Entity) MustNext() { + if next := e.Next(); next != nil { + if !e.CheatNextNodeOnMustNext() { + e.NodeTree.Next = next.ID + } + return + } + + e.AddChildNode(e.NodeTree.Root, key.BaseSpin, 1) + + if next := e.Next(); next != nil { + e.NodeTree.Next = next.ID + return + } + + panic(errors.NextNodeNotFound.Error()) +} + +// Next finds Next node in `NodeTree` +func (e *Entity) Next() *shared.Node { + node := e.CursorNode() + e.NodeTree.Closing = make([]int64, 0) + + if next := e.nextChildren(node); next != nil { + return next + } + if next := e.nextSelf(node); next != nil { + return next + } + if next := e.nextParent(node); next != nil { + return next + } + + return nil +} + +// nextChildren finds node in children that is not accomplished +func (e *Entity) nextChildren(node *shared.Node) (next *shared.Node) { + for _, child := range node.Children { + childNode := e.GetNode(child) + if e.IsClosing(childNode) { // Forbid repeated `next`. + continue + } + if next := e.nextChildren(childNode); next != nil { + return next + } + if next := e.nextSelf(childNode); next != nil { + return next + } + } + return nil +} + +// nextSelf finds node in self node that is not accomplished +func (e *Entity) nextSelf(node *shared.Node) (next *shared.Node) { + if e.IsClosing(node) { // Forbid repeated `next`. + return nil + } + if e.IsFinished(node) { + e.NodeTree.Closing = append(e.NodeTree.Closing, node.ID) + return nil + } + return node +} + +// nextParent recursively next every node below this node, +// including all descendents. +func (e *Entity) nextParent(node *shared.Node) (next *shared.Node) { + if node.ID == 0 || node.Type == key.Root { + return nil + } + nodeParent := e.GetNode(node.Parent) + if nodeParent == nil { + panic(errors.NodeNotFound.Error()) + } + if next := e.nextChildren(nodeParent); next != nil { + return next + } + if next := e.nextSelf(nodeParent); next != nil { + return next + } + if next := e.nextParent(nodeParent); next != nil { + return next + } + return nil +} + +// MoveNext move `Cursor` to `Next` when receive a request +func (e *Entity) MoveNext() { + e.PruneNodeFeatures(e.CursorNode()) + if !e.CheatNextNodeOnMoveNext() { + e.NodeTree.Cursor = e.NodeTree.Next + } + e.PruneNodeFeatures(e.CursorNode()) + for _, closingNode := range e.ClosingNodes() { + e.PruneNode(closingNode) + } +} + +func (e *Entity) RecheckClosing() { + closing := make([]int64, len(e.NodeTree.Closing)) + copy(closing, e.NodeTree.Closing) + e.NodeTree.Closing = make([]int64, 0) + for _, nodeID := range closing { + node := e.GetNode(nodeID) + if next := e.nextChildren(node); next != nil { + continue + } + if next := e.nextSelf(node); next != nil { + continue + } + } +} + +func (e *Entity) CheatNextNodeOnMoveNext() bool { + v, ok := e.Data[key.MachineNextNodeID] + if !ok { + return false + } + + nodeID := v.(int64) + if nodeID == 0 { + return false + } + + e.NodeTree.Cursor = nodeID + e.NodeTree.Next = nodeID + + e.RecheckClosing() + + delete(e.Data, key.MachineNextNodeID) + return true +} + +func (e *Entity) CheatNextNodeOnMustNext() bool { + v, ok := e.Data[key.MachineNextNodeID] + if !ok { + return false + } + + nodeID := v.(int64) + if nodeID == 0 { + return false + } + + e.NodeTree.Next = nodeID + + delete(e.Data, key.MachineNextNodeID) + return true +} + +func (e *Entity) PrepareStep() { + e.NodeTree.Step = e.NodeTree.Step + 1 +} diff --git a/gamesrv/slotspkg/slots/entity/node_desc.go b/gamesrv/slotspkg/slots/entity/node_desc.go new file mode 100644 index 0000000..fe374d8 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/node_desc.go @@ -0,0 +1,74 @@ +package entity + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +// PrepareNodeDesc prepares node desc for current node +func (e *Entity) PrepareNodeDesc() { + e.NodeDesc = e.GetCursorNodeDesc() +} + +// PrepareNextNodeDesc prepares node desc for current node +func (e *Entity) PrepareNextNodeDesc() { + e.NextNodeDesc = e.GetNodeDesc(e.NextNode()) +} + +func (e *Entity) Desc() *desc.NodeDesc { + return e.NodeDesc +} + +// NewNodeDesc creates new NodeDesc +func (e *Entity) NewNodeDesc(node *shared.Node) *desc.NodeDesc { + theme := e.Theme + category := key.Base + nodeType := node.GetType() + class := node.GetClass() + return desc.NewNodeDesc(theme, category, nodeType, class, e.Shell) +} + +func (e *Entity) NewNodeDescWithNodeType(nodeType string) *desc.NodeDesc { + node := e.CursorNode() + theme := e.Theme + category := key.Base + class := node.GetClass() + return desc.NewNodeDesc(theme, category, nodeType, class, e.Shell) +} + +// GetCursorNodeDesc gets node desc for specific node with cheating +func (e *Entity) GetCursorNodeDesc() *desc.NodeDesc { + n := e.NewNodeDesc(e.CursorNode()) + + if !e.CheatFormationSeqsDesc(n) { + e.SelectFormationSeqsDesc(n) + } + + return n +} + +// GetNodeDesc gets node desc for specific node +func (e *Entity) GetNodeDesc(node *shared.Node) *desc.NodeDesc { + n := e.NewNodeDesc(node) + e.SelectFormationSeqsDesc(n) + return n +} + +func (e *Entity) CheatFormationSeqsDesc(n *desc.NodeDesc) bool { + v, ok := e.Data[key.MachineFormationSeqsDesc] + if !ok { + return false + } + nodeType := v.(string) + if nodeType == "" { + return false + } + n.FormationSeqsDesc = n.GetFormationSeqDescs(nodeType) + delete(e.Data, key.MachineFormationSeqsDesc) + return true +} + +func (e *Entity) SelectFormationSeqsDesc(n *desc.NodeDesc) { + n.FormationSeqsDesc = n.GetFormationSeqDescs(n.NodeType) +} diff --git a/gamesrv/slotspkg/slots/entity/progress.go b/gamesrv/slotspkg/slots/entity/progress.go new file mode 100644 index 0000000..5dc4c62 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/progress.go @@ -0,0 +1,195 @@ +package entity + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/formation" +) + +// IsFinished returns if node progress is finished +func (e *Entity) IsFinished(node *shared.Node) bool { + return node.ProgressMax == node.ProgressValue +} + +// Progress add 1 progress to `Cursor` Node and updates features' lifetime +func (e *Entity) Progress() { + node := e.CursorNode() + if node.NeedPrepare && !node.Prepared { + node.Prepared = true + } else if node.ProgressValue < node.ProgressMax { + node.ProgressValue++ + e.FeaturesPassTime(e.CursorNode(), 1) + } +} + +func (e *Entity) SkipBaseSpin(nodeID int64) { + skipNode := e.GetNode(nodeID) + if skipNode.GetType() != key.BaseSpin { + return + } + + e.RootNode().ChildrenTotalWin = 0 + e.RootNode().ChildrenWin = 0 + + node := e.CursorNode() + for node.GetType() != key.BaseSpin { + node = e.GetNode(node.GetParent()) + } + + skipNode.SingleBet = node.SingleBet + skipNode.Bet = node.Bet + skipNode.BaseBet = node.BaseBet + skipNode.ProgressValue = node.ProgressValue + skipNode.ProgressMax = node.ProgressMax +} + +func (e *Entity) SkipBaseSpinWithBet(nodeID int64) { + skipNode := e.GetNode(nodeID) + if skipNode.GetType() != key.BaseSpin { + return + } + + e.RootNode().ChildrenTotalWin = 0 + e.RootNode().ChildrenWin = 0 + + node := e.CursorNode() + + bet := e.ActBet() + + if node.GetType() == key.Root { + var lineCount int64 + for _, desc := range e.NextNodeDesc.FormationSeqsDesc { + formation, err := formation.NewFormation(e.NextNodeDesc, desc.SeqID) + if err != nil { + panic(err) + } + lineCount += formation.FormationDesc.MatrixDesc.LineCount + } + + skipNode.SingleBet = bet / lineCount + skipNode.Bet = bet + skipNode.BaseBet = bet + skipNode.ProgressValue = 1 + skipNode.ProgressMax = 1 + + return + } + + for node.GetType() != key.BaseSpin { + node = e.GetNode(node.GetParent()) + } + + lineCount := node.Bet / node.SingleBet + + skipNode.SingleBet = bet / lineCount + skipNode.Bet = bet + skipNode.BaseBet = bet + skipNode.ProgressValue = node.ProgressValue + skipNode.ProgressMax = node.ProgressMax +} + +// Accomplish instantly finishes a node and updates features' lifetime +func (e *Entity) Accomplish() { + node := e.CursorNode() + node.ProgressValue = node.ProgressMax + + e.FeaturesPassTime(e.CursorNode(), node.ProgressMax) +} + +// AccomplishNext instantly finishes next node and updates features' lifetime +func (e *Entity) AccomplishNext() { + node := e.NextNode() + node.ProgressValue = node.ProgressMax + + e.FeaturesPassTime(e.NextNode(), node.ProgressMax) +} + +// AccomplishParent instantly finishes parent node and updates features' lifetime +func (e *Entity) AccomplishParent() { + node := e.ParentNode() + node.ProgressValue = node.ProgressMax + + e.FeaturesPassTime(e.ParentNode(), node.ProgressMax) +} + +// AddProgress adds progress max to a node +func (e *Entity) AddProgress(n int64) { + node := e.CursorNode() + node.ProgressMax += n +} + +// AddNextProgress adds progress max to next node +func (e *Entity) AddNextProgress(n int64) { + node := e.NextNode() + node.ProgressMax += n +} + +// AddParentProgress adds progress max to parent node +func (e *Entity) AddParentProgress(n int64) { + node := e.ParentNode() + node.ProgressMax += n +} + +// ProgressLeft gets left progress +func (e *Entity) ProgressLeft() int64 { + node := e.CursorNode() + return node.ProgressMax - node.ProgressValue +} + +// NextProgressLeft gets left progress of next node +func (e *Entity) NextProgressLeft() int64 { + node := e.NextNode() + return node.ProgressMax - node.ProgressValue +} + +// ParentProgressLeft gets left progress of parent node +func (e *Entity) ParentProgressLeft() int64 { + node := e.ParentNode() + return node.ProgressMax - node.ProgressValue +} + +// SetProgressLeft set left progress as specific value +func (e *Entity) SetProgressLeft(left int64) { + node := e.CursorNode() + if left > node.ProgressMax { + panic(errors.With(left, node.ProgressMax).Errorf( + "left progress can't be more than progress max")) + } + node.ProgressValue = node.ProgressMax - left +} + +// SetNextProgressLeft set left progress of next node as specific value +func (e *Entity) SetNextProgressLeft(left int64) { + node := e.NextNode() + if left > node.ProgressMax { + panic(errors.With(left, node.ProgressMax).Errorf( + "left progress can't be more than progress max")) + } + node.ProgressValue = node.ProgressMax - left +} + +// SetParentProgressLeft set left progress of parent node as specific value +func (e *Entity) SetParentProgressLeft(left int64) { + node := e.ParentNode() + if left > node.ProgressMax { + panic(errors.With(left, node.ProgressMax).Errorf( + "left progress can't be more than progress max")) + } + node.ProgressValue = node.ProgressMax - left +} + +// GetProgressValue gets progress value for cursor node +func (e *Entity) GetProgressValue() int64 { + return e.CursorNode().ProgressValue +} + +// GetNextProgressValue gets progress value for next node +func (e *Entity) GetNextProgressValue() int64 { + return e.NextNode().ProgressValue +} + +// GetParentProgressValue gets progress value for parent node +func (e *Entity) GetParentProgressValue() int64 { + return e.ParentNode().ProgressValue +} diff --git a/gamesrv/slotspkg/slots/entity/rand.go b/gamesrv/slotspkg/slots/entity/rand.go new file mode 100644 index 0000000..c047e91 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/rand.go @@ -0,0 +1,169 @@ +package entity + +import ( + "github.com/tomas-qstarrs/boost/randx" + "math" + "math/rand" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" +) + +type RandState struct { + randx *randx.Randx + source rand.Source + tracker *shared.RandxTracker + enableTracker bool +} + +func NewRandState() *RandState { + return &RandState{ + tracker: &shared.RandxTracker{}, + } +} + +func (e *Entity) Randx() *randx.Randx { + return e.RandState.randx +} + +func (e *Entity) PrepareRand() { + var mode string + switch { + case e.NextNode().Type != key.BaseSpin: + mode = e.NodeTree.Mode // 不是BaseSpin 延续上一次的随机情况 + case e.NodeTree.Act.Stay: + mode = key.MachineModeLive + case e.NodeTree.Act.Mode == "": + mode = key.MachineModeLive + default: + mode = e.NodeTree.Act.Mode + } + + e.NodeTree.Mode = mode + + var source rand.Source + switch mode { + case key.MachineModeLive: + source = e.source() + case key.MachineModeRecorder: + if e.NextNode().Type == key.BaseSpin { + // 录制开始 + if e.NodeTree.Act.Vector != nil { + e.NodeTree.RandVector.Vector = e.NodeTree.Act.Vector + e.NodeTree.RandVector.VectorIndex = e.NodeTree.Act.VectorIndex + e.NodeTree.RandVector.VectorType = e.NodeTree.Act.VectorType + } else { + e.NodeTree.RandVector.Vector = []int64{e.source().Int63()} + } + e.NodeTree.Act.Vector = nil + e.NodeTree.Act.VectorIndex = 0 + e.NodeTree.Act.VectorType = 0 + e.NodeTree.RandVector.Index = 0 + } + source = randx.NewLcgVectorPlayer(e.NodeTree.RandVector.Vector, int(e.NodeTree.RandVector.Index)) + case key.MachineModePlayer: + if e.NextNode().Type == key.BaseSpin { + // 播放开始 + e.NodeTree.RandVector.Index = 0 + e.NodeTree.RandVector.Vector = e.NodeTree.Act.Vector + e.NodeTree.RandVector.VectorIndex = e.NodeTree.Act.VectorIndex + e.NodeTree.RandVector.VectorType = e.NodeTree.Act.VectorType + e.NodeTree.RandVector.ExpectedWinCoin = e.NodeTree.Act.ExpectedWinCoin + + e.NodeTree.Act.Vector = nil + e.NodeTree.Act.VectorIndex = 0 + e.NodeTree.Act.VectorType = 0 + e.NodeTree.Act.ExpectedWinCoin = 0 + } + source = randx.NewLcgVectorPlayer(e.NodeTree.RandVector.Vector, int(e.NodeTree.RandVector.Index)) + default: + logger.Logger.Errorf("slots unknown mode: %s", mode) + } + + e.RandState.source = source + e.RandState.randx = randx.New(source) + + switch mode { + case key.MachineModeLive: + e.NodeTree.RandVector.EnableRandxTracker = false + e.NodeTree.RandVector.RandxTracker = &shared.RandxTracker{} + e.NodeTree.RandVector.RecorderRandxTracker = &shared.RandxTracker{} + case key.MachineModeRecorder: + if e.NextNode().Type == key.BaseSpin { + e.NodeTree.RandVector.EnableRandxTracker = e.NodeTree.Act.EnableRandxTracker + e.NodeTree.Act.EnableRandxTracker = false + e.NodeTree.RandVector.RandxTracker = &shared.RandxTracker{} + e.NodeTree.RandVector.RecorderRandxTracker = &shared.RandxTracker{} + } + case key.MachineModePlayer: + if e.NextNode().Type == key.BaseSpin { + e.NodeTree.RandVector.EnableRandxTracker = e.NodeTree.Act.EnableRandxTracker + e.NodeTree.Act.EnableRandxTracker = false + e.NodeTree.RandVector.RandxTracker = &shared.RandxTracker{} + e.NodeTree.RandVector.RecorderRandxTracker = e.NodeTree.Act.RecorderRandxTracker + e.NodeTree.Act.RecorderRandxTracker = &shared.RandxTracker{} + } + default: + logger.Logger.Errorf("slots unknown mode: %s", mode) + } + + e.RandState.enableTracker = e.NodeTree.RandVector.EnableRandxTracker + e.RandState.tracker = e.NodeTree.RandVector.RandxTracker +} + +func (e *Entity) source() rand.Source { + var source rand.Source + if v := e.Session.Value(key.SessionMachineSource); v == nil { + seed := randx.Int63n(math.MaxInt64) + source = rand.NewSource(seed) + e.Session.Set(key.SessionMachineSource, source) + } else { + source = v.(rand.Source) + } + return source +} +func (e *Entity) RandxTracker() *shared.RandxTracker { + return e.RandState.tracker +} +func (e *Entity) CompareRandx() (bool, string, string) { + if !e.RandState.enableTracker { + return false, "", "" + } + playerTracker := e.RandState.tracker + recorderTracker := e.NodeTree.RandVector.RecorderRandxTracker + if len(recorderTracker.Items) < len(playerTracker.Items) { + for i, item := range recorderTracker.Items { + if item.Index != playerTracker.Items[i].Index { + return true, recorderTracker.Items[i-1].Tag, item.Tag + } + } + return true, playerTracker.Items[len(recorderTracker.Items)-1].Tag, playerTracker.Items[len(recorderTracker.Items)].Tag + } else if len(recorderTracker.Items) > len(playerTracker.Items) { + for i, item := range playerTracker.Items { + if item.Index != recorderTracker.Items[i].Index { + return true, playerTracker.Items[i-1].Tag, item.Tag + } + } + return true, recorderTracker.Items[len(playerTracker.Items)-1].Tag, recorderTracker.Items[len(playerTracker.Items)].Tag + } else { + for i, item := range recorderTracker.Items { + if item.Index != playerTracker.Items[i].Index { + return true, recorderTracker.Items[i-1].Tag, item.Tag + } + } + } + return false, "", "" +} + +func (e *Entity) SyncRand() { + switch e.NodeTree.Mode { + case key.MachineModeRecorder, key.MachineModePlayer: + e.NodeTree.RandVector.Vector = e.RandState.source.(*randx.LcgVectorPlayer).Vector + e.NodeTree.RandVector.Index = int64(e.RandState.source.(*randx.LcgVectorPlayer).Index) + e.NodeTree.RandVector.RandxTracker = e.RandState.tracker + e.NodeTree.RandVector.EnableRandxTracker = e.RandState.enableTracker + case key.MachineModeLive: + // Do nothing + default: + logger.Logger.Errorf("slots unknown mode: %s", e.NodeTree.Mode) + } +} diff --git a/gamesrv/slotspkg/slots/entity/reset.go b/gamesrv/slotspkg/slots/entity/reset.go new file mode 100644 index 0000000..a3dfa8c --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/reset.go @@ -0,0 +1,196 @@ +package entity + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" +) + +func (e *Entity) ResetFormations() { + for index, formationSeqDesc := range e.NodeDesc.FormationSeqsDesc { + e.CursorNode().Formations[index].ID = formationSeqDesc.ID + e.CursorNode().Formations[index].SeqID = formationSeqDesc.SeqID + } +} + +func (e *Entity) ResetBaseBet() { + if !e.CursorNode().NoBase { + if e.CursorNode().GetType() == key.BaseSpin { + e.CursorNode().BaseBet = e.ActBet() + } else { + e.CursorNode().BaseBet = e.ParentNode().BaseBet + } + } else { + if e.CursorNode().GetType() == key.FreeSpin && e.CursorNode().GetProgressValue() == 0 { + e.CursorNode().BaseBet = e.ActBet() + } + } +} + +func (e *Entity) ResetNextBaseBet() { + if !e.NextNode().NoBase { + if e.NextNode().GetType() == key.BaseSpin { + e.NextNode().BaseBet = e.ActBet() + } else { + e.NextNode().BaseBet = e.GetNode(e.NextNode().Parent).BaseBet + } + } else { + if e.NextNode().GetType() == key.FreeSpin && e.NextNode().GetProgressValue() == 0 { + e.NextNode().BaseBet = e.ActBet() + } + } +} + +// SelectNextClass gets map class for machine +func (e *Entity) SelectNextClass() { + //s := e.Session + //p := e.Player + + id := e.NodeTree.Act.ClassId + //logx.Error("================= SelectClass ==============", id) + + /////////////// + + rtpModes := e.NodeDesc.GetThemeRTPModes() + if r, ok := rtpModes[id]; ok { + var weight []int64 + var ids []int64 + for _, typeWeight := range r.TypeWeight { + ids = append(ids, typeWeight.ID) + weight = append(weight, typeWeight.Weight) + } + id3 := randx.RandWeight(e.Randx(), weight) + class := ids[id3] + e.NextNode().Class = class + } else if len(rtpModes) > 0 { + var weight []int64 + for _, typeWeight := range rtpModes[0].TypeWeight { + weight = append(weight, typeWeight.Weight) + } + e.NextNode().Class = rtpModes[0].TypeWeight[int64(randx.RandWeight(e.Randx(), weight))].ID + } else { + e.NextNode().Class = 0 + } +} + +// SelectClass gets map class for machine +func (e *Entity) SelectClass() { + //s := e.Session + //p := e.Player + + //todo + id := e.Randx().Int63n(3) + 1 + id = 2 + //logx.Error("================= SelectClass ==============", id) + + /////////////// + + rtpModes := e.NodeDesc.GetThemeRTPModes() + if r, ok := rtpModes[id]; ok { + var weight []int64 + var ids []int64 + for _, typeWeight := range r.TypeWeight { + ids = append(ids, typeWeight.ID) + weight = append(weight, typeWeight.Weight) + } + id3 := randx.RandWeight(e.Randx(), weight) + class := ids[id3] + e.CursorNode().Class = class + } else if len(rtpModes) > 0 { + var weight []int64 + for _, typeWeight := range rtpModes[0].TypeWeight { + weight = append(weight, typeWeight.Weight) + } + e.CursorNode().Class = rtpModes[0].TypeWeight[int64(randx.RandWeight(e.Randx(), weight))].ID + } else { + e.CursorNode().Class = 0 + } +} + +// ResetNextClass must be before origin formations +func (e *Entity) ResetNextClass() { + if e.NextNode().GetType() == key.BaseSpin && e.NodeTree.Act.PlayMode == key.PlayModeClass { + if !e.CheatNextClass() { + e.SelectNextClass() + } + } else { + e.NextNode().Class = e.ParentNode().Class + } + + e.NodeDesc.Class = e.NextNode().Class +} + +// ResetClass must be before origin formations +func (e *Entity) ResetClass() { + if e.CursorNode().GetType() == key.BaseSpin && e.NodeTree.Act.PlayMode == key.PlayModeClass { + if !e.CheatClass() { + e.SelectClass() + } + } else { + e.CursorNode().Class = e.ParentNode().Class + } + + e.NodeDesc.Class = e.CursorNode().Class +} + +func (e *Entity) ResetSingleBet() { + if !e.CursorNode().NoBase { + if e.CursorNode().ForceBet > 0 { + e.CursorNode().SingleBet = e.ParentNode().SingleBet * e.CursorNode().ForceBet / e.CursorNode().BaseBet + } else if e.CursorNode().Type == key.BaseSpin { + e.CursorNode().SingleBet = e.CursorNode().BaseBet / e.getLineCount() + } else { + e.CursorNode().SingleBet = e.ParentNode().SingleBet + } + } else { + if e.CursorNode().GetType() == key.FreeSpin && e.CursorNode().GetProgressValue() == 0 { + e.CursorNode().SingleBet = e.CursorNode().BaseBet / e.getLineCount() + } + } +} + +// ResetBet using in client display & big win +func (e *Entity) ResetBet() { + if e.CursorNode().Bet > 0 { + return + } + if !e.CursorNode().NoBase { + if e.CursorNode().ForceBet > 0 { + e.CursorNode().Bet = e.CursorNode().ForceBet + } else if e.CursorNode().Type == key.BaseSpin { + e.CursorNode().Bet = e.CursorNode().BaseBet + } else { + e.CursorNode().Bet = e.ParentNode().Bet + } + } else { + if e.CursorNode().GetType() == key.FreeSpin && e.CursorNode().GetProgressValue() == 0 { + e.CursorNode().Bet = e.CursorNode().BaseBet + } + } +} + +func (e *Entity) CheatClass() bool { + v, ok := e.Data[key.MachineClass] + if !ok { + return false + } + class := v.(int64) + if class == 0 { + return false + } + e.CursorNode().Class = class + delete(e.Data, key.MachineClass) + return true +} +func (e *Entity) CheatNextClass() bool { + v, ok := e.Data[key.MachineClass] + if !ok { + return false + } + class := v.(int64) + if class == 0 { + return false + } + e.NextNode().Class = class + delete(e.Data, key.MachineClass) + return true +} diff --git a/gamesrv/slotspkg/slots/entity/round.go b/gamesrv/slotspkg/slots/entity/round.go new file mode 100644 index 0000000..9b7c171 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/round.go @@ -0,0 +1,18 @@ +package entity + +import ( + "github.com/spf13/cast" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" +) + +func (e *Entity) UpdateRound() { + if e.CursorNode().Type == key.BaseSpin { + e.NodeTree.Round++ + roundType := int64(0) + v, ok := e.Data[key.MachineRoundType] + if !ok { + roundType = cast.ToInt64(v) + } + e.NodeTree.RoundType = roundType + } +} diff --git a/gamesrv/slotspkg/slots/entity/serializer.go b/gamesrv/slotspkg/slots/entity/serializer.go new file mode 100644 index 0000000..d452879 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/serializer.go @@ -0,0 +1,83 @@ +package entity + +import ( + "encoding/json" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/reg" + "reflect" +) + +// Deserialize deserializes `Data` into `NodeTree` +func (e *Entity) Deserialize() { + data := e.Player.GetTheme(e.Theme) + if data == nil { + panic(errors.LeakThemeData.ErrorWith(e.Theme)) + } + data.Get(e.NodeTree) + e.Customs = make(map[int64]interface{}) + for _, node := range e.NodeTree.Nodes { + for _, feature := range node.Features { + if v := e.deserializeCustom(feature); v != nil { + e.Customs[feature.ID] = v + } + } + } + for _, feature := range e.NodeTree.ImageFeatures { + if v := e.deserializeCustom(feature); v != nil { + e.Customs[feature.ID] = v + } + } +} + +// Serialize serializes `NodeTree` into `Data` +func (e *Entity) Serialize() { + for _, node := range e.NodeTree.Nodes { + for _, feature := range node.Features { + feature.Custom = e.serializeCustom(feature) + } + } + + for _, feature := range e.NodeTree.ImageFeatures { + feature.Custom = e.serializeCustom(feature) + } + + data := e.Player.GetTheme(e.Theme) + if data == nil { + panic(errors.LeakThemeData.ErrorWith(e.Theme)) + } + data.Set(e.NodeTree) +} + +func (e *Entity) deserializeCustom(feature *shared.Feature) interface{} { + if feature.Type == "" { + return nil + } + + t, ok := reg.Customs[feature.Type] + if !ok { + panic(errors.FeatureTypeNotFound.ErrorWith(feature.Type)) + } + v := reflect.New(t.Elem()).Interface() + + err := json.Unmarshal([]byte(feature.Custom), v) + if err != nil { + panic(err) + } + return v +} + +func (e *Entity) serializeCustom(feature *shared.Feature) string { + custom, ok := e.Customs[feature.ID] + if !ok { + panic(errors.CustomNotFound.ErrorWith(feature.ID)) + } + if custom == nil { + panic(errors.CustomNil.ErrorWith(feature.ID)) + } + data, err := json.Marshal(custom) + if err != nil { + panic(err) + } + return string(data) +} diff --git a/gamesrv/slotspkg/slots/entity/spin.go b/gamesrv/slotspkg/slots/entity/spin.go new file mode 100644 index 0000000..456b194 --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/spin.go @@ -0,0 +1,129 @@ +package entity + +// Init inits entity +func (e *Entity) Init() { + e.Deserialize() + + // In case of Revert, check empty every time when doing `Deserialize` + if e.IsEmpty() { + e.InitAct() + + e.InitRootNode() + + e.PrepareNodeDesc() + + e.MustNext() + + e.PrepareRand() + + e.PrepareNextNodeDesc() + + e.PrepareNextOriginFormations() + + e.InitNextFormations() + + e.InitNextFeatures() + + e.Callback.OnInit() + } +} + +// Step moves a step on node tree +func (e *Entity) Step() { + e.StepInitialize() + + e.MoveNext() + + e.PreProcessing() + + e.Spin() + + e.PostProcessing() + + e.MustNext() + + e.StepFinalize() +} + +// StepInitialize processes node tree before `MoveNext` +func (e *Entity) StepInitialize() { + e.PrepareStep() + e.PrepareRand() + e.PrepareNodeDesc() + e.ResetNextClass() + e.Callback.OnStepBegin() +} + +// PreProcessing prepocesses before `Spin` +func (e *Entity) PreProcessing() { + e.ResetNextBaseBet() + + e.ConsumeCoins() + + e.PrepareNodeDesc() + + e.ResetFormations() + + e.ResetBaseBet() + + //e.ResetClass() + + e.PrepareOriginFormations() + + e.PrepareCheatFormations() + + e.ResetSingleBet() + + e.ResetBet() + + e.ResetWin() + + e.Callback.BeforeSpin() +} + +// Spin reads configs and spins current node +func (e *Entity) Spin() { + e.UpdateRound() + + e.Rand() + + e.CheatFormations() + + e.Callback.BeforeDisplay() + + e.Display() + + e.Callback.AfterDisplay() + + e.Link() + + e.ConvertFormations() +} + +// PostProcessing post-processes after `Spin` +func (e *Entity) PostProcessing() { + e.Callback.AfterSpin() + + e.UpdateImageFormations() + + e.UpdateImageFeatures() + + e.UpdateWin() + + e.Progress() +} + +// StepFinalize processes node tree after `MustNext` +func (e *Entity) StepFinalize() { + e.PrepareNextNodeDesc() + + e.InitNextFormations() + + e.InitNextFeatures() + + e.Callback.OnStepEnd() + + e.ObtainCoins() + + e.SyncRand() +} diff --git a/gamesrv/slotspkg/slots/entity/win.go b/gamesrv/slotspkg/slots/entity/win.go new file mode 100644 index 0000000..5254acc --- /dev/null +++ b/gamesrv/slotspkg/slots/entity/win.go @@ -0,0 +1,326 @@ +package entity + +import ( + "github.com/tomas-qstarrs/boost/mathx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" +) + +// ActBet calcs bet of act value +func (e *Entity) ActBet() int64 { + lineBet := e.GetLineBetByType(key.BaseSpin) + lineCount := e.GetLineCountByType(key.BaseSpin) + ratioType := e.NodeTree.Act.RatioType + ratio := e.NodeTree.Act.Ratio + if ratio == 0 { + ratio = 1 + } + switch ratioType { + case key.MachineRatioTypeNil: + return lineBet * lineCount + case key.MachineRatioMoreCoinMoreBet: + return int64(float64(lineBet*lineCount) * ratio) + case key.MachineRatioMoreCoinSameBet: + return lineBet * lineCount + case key.MachineRatioSameCoinMoreBet: + return int64(float64(lineBet*lineCount) * ratio) + default: + panic(errors.Errorf("unknown ratio type: %v", ratioType)) + } +} + +func (e *Entity) MinBet() int64 { + return e.GetMinLineBet(key.BaseSpin) * e.GetLineCountByType(key.BaseSpin) +} + +// ConsumeCoins consume coins when cursor node is base spin +func (e *Entity) ConsumeCoins() { + if e.CursorNode().GetType() != key.BaseSpin { + if !e.CursorNode().NoBase { + return + } + if e.CursorNode().GetType() == key.FreeSpin && e.CursorNode().GetProgressValue() != 0 { + return + } + } + cc := player.CoinCenter.Get(e.Session) + + lineBet := e.GetLineBetByType(key.BaseSpin) + lineCount := e.GetLineCountByType(key.BaseSpin) + + ratioType := e.NodeTree.Act.RatioType + ratio := e.NodeTree.Act.Ratio + if ratio == 0 { + ratio = 1 + } + var coin int64 + switch ratioType { + case key.MachineRatioTypeNil: + coin = lineBet * lineCount + case key.MachineRatioMoreCoinMoreBet: + coin = int64(float64(lineBet*lineCount) * ratio) + case key.MachineRatioMoreCoinSameBet: + coin = int64(float64(lineBet*lineCount) * ratio) + case key.MachineRatioSameCoinMoreBet: + coin = lineBet * lineCount + default: + panic(errors.Errorf("unknown ratio type: %v", ratioType)) + } + + betCoin := player.NewDecCoin(cc, coin) + e.SetBetCoin(betCoin) + + winCoin := betCoin.Rate(e.IsFree, 0) + e.SetWinCoin(winCoin) + + // Recorder 模式 + if e.NodeTree.Mode != key.MachineModeRecorder { + var roomType string + if e.IsFree { + roomType = key.RoomTypeFree + } else { + roomType = key.RoomTypePaid + } + game := &shared.Game{ + Contest: "Slots", + ContestType: e.Theme, + RoomID: int64(e.Session.UID()), + RoomType: roomType, + RoundID: e.NextNode().GetID(), + } + player.CoinCenter.Dec(e.Session, game, key.ReasonSlotsBet, betCoin) + + player.BetWin(e.Session, betCoin, player.IncCoin{}) + + e.Player.Agg.SlotsSpinTimes.Set(e.Player.Agg.SlotsSpinTimes.Get() + 1) + e.Player.Agg.SlotsBetCoin.Set(e.Player.Agg.SlotsBetCoin.Get() + betCoin.GetCoin()) + + e.Player.Agg.SlotsDailySpins.Set(e.Player.Agg.SlotsDailySpins.Get() + 1) + e.Player.Agg.SlotsDailyBet.Set(e.Player.Agg.SlotsDailyBet.Get() + betCoin.GetCoin()) + } +} + +// ObtainCoins obtains coins after next node is chosen +func (e *Entity) ObtainCoins() { + var closingBaseSpin = false + for _, closingNode := range e.ClosingNodes() { + if closingNode.Type == key.BaseSpin { + closingBaseSpin = true + break + } + } + if e.NextNode().GetType() != key.BaseSpin && !closingBaseSpin { + e.NodeTree.LastNodeSettled = false + } else { + rate := float64(e.TotalWin()) / float64(e.TotalBet()) + winCoin := e.GetBetCoin().Rate(e.IsFree, rate) + e.SetWinCoin(winCoin) + + // 非Recorder 模式 + if e.NodeTree.Mode != key.MachineModeRecorder { + var roomType string + if e.IsFree { + roomType = key.RoomTypeFree + } else { + roomType = key.RoomTypePaid + } + game := &shared.Game{ + Contest: "Slots", + ContestType: e.Theme, + RoomID: int64(e.Session.UID()), + RoomType: roomType, + RoundID: e.CursorNode().GetID(), + } + + player.CoinCenter.Inc(e.Session, game, key.ReasonSlotsWin, winCoin) + + player.BetWin(e.Session, player.DecCoin{}, winCoin) + + e.Player.Agg.SlotsWinCoin.Set(e.Player.Agg.SlotsWinCoin.Get() + winCoin.GetCoin()) + e.Player.Agg.SlotsDailyWin.Set(e.Player.Agg.SlotsDailyWin.Get() + winCoin.GetCoin()) + + if winCoin.GetCoin() == 0 { + e.Player.Agg.SlotsContinuousZeroSpins.Set(e.Player.Agg.SlotsContinuousZeroSpins.Get() + 1) + } else { + e.Player.Agg.SlotsContinuousZeroSpins.Set(0) + } + } + + e.NodeTree.LastNodeSettled = true + } +} + +// ResetWin resets win fields before each spin +func (e *Entity) ResetWin() { + for _, node := range e.NodeTree.Nodes { + for _, formation := range node.Formations { + formation.Win = 0 + } + for _, feature := range node.Features { + feature.Win = 0 + } + node.Win = 0 + node.ChildrenWin = 0 + } + if e.NodeTree.LastNodeSettled { + e.RootNode().ChildrenTotalWin = 0 + e.RootNode().TotalWin = 0 + } +} + +// UpdateWin updates all win info +// Win is win amount for this spin win +// EffectiveWin is win amount for lastest effective spin win +// TotalWin is the sum of current node win +// ChildrenWin is the sum of children node wins +func (e *Entity) UpdateWin() { + e.WalkTree(WalkRootLast, func(node *shared.Node) bool { + e.updateFormationWin(node) + e.updateFeatureWin(node) + e.updateNodeWin(node) + e.updateChildrenWin(node) + return false + }) +} + +func (e *Entity) updateFormationWin(node *shared.Node) { + for _, formation := range node.Formations { + if formation.Win > 0 { + formation.EffectiveWin = formation.Win + } + formation.TotalWin += formation.Win + } +} + +func (e *Entity) updateFeatureWin(node *shared.Node) { + for _, feature := range node.Features { + if feature.Win > 0 { + feature.EffectiveWin = feature.Win + } + feature.TotalWin += feature.Win + } +} + +func (e *Entity) updateNodeWin(node *shared.Node) { + for _, formation := range node.Formations { + node.Win += formation.Win + } + + for _, feature := range node.Features { + node.Win += feature.Win + } + + if node.Win > 0 { + node.EffectiveWin = node.Win + } + node.TotalWin += node.Win +} + +func (e *Entity) updateChildrenWin(node *shared.Node) { + for _, child := range node.Children { + childNode := e.GetNode(child) + node.ChildrenWin += (childNode.Win + childNode.ChildrenWin) + node.ChildrenTotalWin += (childNode.Win + childNode.ChildrenWin) + } +} + +func (e *Entity) Win() int64 { + return e.RootNode().Win + e.RootNode().ChildrenWin +} + +func (e *Entity) NodeTotalWin() int64 { + return e.CursorNode().TotalWin +} + +// TotalWin returns total win of this spin +func (e *Entity) TotalWin() int64 { + return e.RootNode().ChildrenTotalWin + e.RootNode().TotalWin +} + +func (e *Entity) ActualWin() int64 { + if e.NextNode().Type != key.BaseSpin { + return 0 + } + return e.TotalWin() +} + +func (e *Entity) ActualWinType() int64 { + if e.NextNode().Type != key.BaseSpin { + return key.WinTypeNil + } + + actualWin := e.TotalWin() + + multi := mathx.SafeDiv(actualWin, e.CursorNode().Bet) + + return e.CalcWinType(multi) +} + +func (e *Entity) CalcWinType(multi float64) int64 { + prizeModels := e.MachineDesc.GetPrizeModel() + + for winType, prizeModel := range prizeModels { + if (prizeModel.MinMultiple < 0 || multi >= float64(prizeModel.MinMultiple)) && + (prizeModel.MaxMultiple < 0 || multi < float64(prizeModel.MaxMultiple)) { + switch winType { + case 1: + return key.WinTypeBig + case 2: + return key.WinTypeMega + case 3: + return key.WinTypeEpic + } + } + } + if multi > 0 { + return key.WinTypeNormal + } + return key.WinTypeNil +} + +func (e *Entity) GetLineBetByType(nodeType string) int64 { + return e.MachineDesc.GetLineBet(e.NodeTree.Act.BetSizeIndex, e.NodeTree.Act.BetLevelIndex) +} + +func (e *Entity) GetMinLineBet(nodeType string) int64 { + return e.MachineDesc.GetLineBet(1, 1) +} + +func (e *Entity) SetBetCoin(betCoin player.DecCoin) { + e.NodeTree.BetCoin.Coin = betCoin.Coin +} + +func (e *Entity) GetBetCoin() player.DecCoin { + return player.DecCoin{ + Coin: e.NodeTree.BetCoin.Coin, + } +} + +func (e *Entity) SetWinCoin(winCoin player.IncCoin) { + e.NodeTree.WinCoin.Coin = winCoin.Coin +} + +func (e *Entity) GetWinCoin() player.IncCoin { + return player.IncCoin{ + Coin: e.NodeTree.WinCoin.Coin, + } +} + +func (e *Entity) TotalBet() int64 { + betCoin := e.NodeTree.BetCoin + return betCoin.Coin +} + +func (e *Entity) ActualBet() int64 { + if e.CursorNode().GetType() != key.BaseSpin { + if !e.CursorNode().NoBase { + return 0 + } + if e.CursorNode().GetType() == key.FreeSpin && e.CursorNode().GetProgressValue() != 1 { + return 0 + } + } + return e.TotalBet() +} diff --git a/gamesrv/slotspkg/slots/formation/coords.go b/gamesrv/slotspkg/slots/formation/coords.go new file mode 100644 index 0000000..40d5d71 --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/coords.go @@ -0,0 +1,31 @@ +package formation + +// Coords is the coordinates version of pos +// Row & Col are from 0 +type Coords struct { + Row int64 // start from 0 + Col int64 // start from 0 +} + +// ToPos convert coordinates to int64 pos +func (c Coords) ToPos(form []int64) int64 { + var pos int64 = 0 + for i := int64(0); i < c.Col; i++ { + pos += form[i] + } + pos += c.Row + return pos +} + +// FromPos convert int64 pos to coordinates +func (c *Coords) FromPos(form []int64, pos int64) { + for i, l := range form { + if pos < l { + c.Col = int64(i) + c.Row = pos + break + } else { + pos -= l + } + } +} diff --git a/gamesrv/slotspkg/slots/formation/formation.go b/gamesrv/slotspkg/slots/formation/formation.go new file mode 100644 index 0000000..627732c --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/formation.go @@ -0,0 +1,187 @@ +package formation + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +// Formation contains symbols, col count, row count, formation type +type Formation struct { + SeqID int64 + NodeType string + FormationDesc *desc.FormationDesc + Symbols []int64 + RandPositions []int64 + CheatSymbols []int64 + DisplaySymbols []int64 + LinkPositions [][]int64 + LineSymbols [][]int64 + LinePays []float64 + SymbolLinkPay map[int64]map[int64]float64 + Pay float64 + ReelForm []int64 + MatrixForm []int64 + RewardInfo []*shared.RewardInfo +} + +const ( + // LinesPay pays use lines config + LinesPay int64 = iota + // WaysPay pays use all possible ways + WaysPay + // FeaturePay pays use feature pay + FeaturePay + // SamePay pays use same pay + SamePay + // + MatchPay +) + +const ( + // LeftToRight links from left to right + LeftToRight = iota + // RightToLeft links from right to left + RightToLeft + // BothDirection gets max link of LeftToRight & RightToLeft + BothDirection +) + +// NewFormation creates new formation without generate symbols +func NewFormation(n *desc.NodeDesc, seqID int64) (*Formation, error) { + formationDesc, err := desc.NewFormationDesc(n, seqID) + if err != nil { + return nil, err + } + + reelForm := make([]int64, 0) + if formationDesc.ReelsDesc != nil { + for _, reelDesc := range formationDesc.ReelsDesc { + reelForm = append(reelForm, reelDesc.Range) + } + } + + matrixForm := make([]int64, 0) + if formationDesc.MatrixDesc != nil { + matrixForm = append(matrixForm, formationDesc.MatrixDesc.Form...) + } + + return &Formation{ + SeqID: seqID, + NodeType: n.NodeType, + FormationDesc: formationDesc, + Symbols: nil, + RandPositions: nil, + CheatSymbols: nil, + DisplaySymbols: nil, + LinkPositions: nil, + LineSymbols: nil, + LinePays: nil, + SymbolLinkPay: make(map[int64]map[int64]float64), + Pay: 0, + ReelForm: reelForm, + MatrixForm: matrixForm, + }, nil +} + +// Rand generates symbols by weight +func (f *Formation) Rand(r *randx.Randx) { + for _, reelDesc := range f.FormationDesc.ReelsDesc { + // 经测试:缓存权重 和 二分查找 对权重随机性能的提升微乎其微,没必要优化 + startIdx := int64(randx.RandWeight(r, reelDesc.Weights)) + f.RandPositions = append(f.RandPositions, startIdx) + length := int64(len(reelDesc.Reel)) + for symbolIdx := startIdx; symbolIdx < startIdx+reelDesc.Range; symbolIdx++ { + symbol := reelDesc.Reel[symbolIdx%length] + f.Symbols = append(f.Symbols, symbol) + } + } +} + +func (f *Formation) ResetRandSymbols(r *randx.Randx) { + f.RandPositions = nil + f.Symbols = nil + for _, reelDesc := range f.FormationDesc.ReelsDesc { + // 经测试:缓存权重 和 二分查找 对权重随机性能的提升微乎其微,没必要优化 + startIdx := int64(randx.RandWeight(r, reelDesc.Weights)) + f.RandPositions = append(f.RandPositions, startIdx) + length := int64(len(reelDesc.Reel)) + for symbolIdx := startIdx; symbolIdx < startIdx+reelDesc.Range; symbolIdx++ { + symbol := reelDesc.Reel[symbolIdx%length] + f.Symbols = append(f.Symbols, symbol) + } + } +} +func (f *Formation) ResetRandSymbolsByIndex(r *randx.Randx) { + f.RandPositions = nil + f.Symbols = nil + for _, reelDesc := range f.FormationDesc.ReelsDesc { + // 经测试:缓存权重 和 二分查找 对权重随机性能的提升微乎其微,没必要优化 + startIdx := int64(r.Intn(len(reelDesc.Weights))) + f.RandPositions = append(f.RandPositions, startIdx) + length := int64(len(reelDesc.Reel)) + for symbolIdx := startIdx; symbolIdx < startIdx+reelDesc.Range; symbolIdx++ { + symbol := reelDesc.Reel[symbolIdx%length] + f.Symbols = append(f.Symbols, symbol) + } + } +} + +// Display sets symbols for display +func (f *Formation) Display() { + f.DisplaySymbols = make([]int64, len(f.Symbols)) + copy(f.DisplaySymbols, f.Symbols) +} + +// Link links symbols with specific regular +func (f *Formation) Link() { + switch f.FormationDesc.MatrixDesc.LinkType { + case LinesPay: + f.GenerateSymbolLines() + case WaysPay: + f.GenerateSymbolWays() + case FeaturePay: + // do nothing + case SamePay: + f.GenerateSymbolSame() + case MatchPay: + f.GenerateSymbolMatch() + default: + panic(errors.Errorf("formation link type %d is not integrated yet", + f.FormationDesc.MatrixDesc.LinkType)) + } +} + +// Link links symbols with specific regular +func (f *Formation) LinkOnWin() { + switch f.FormationDesc.MatrixDesc.LinkType { + case LinesPay: + f.GenerateSymbolLinesOnWin() + case WaysPay: + f.GenerateSymbolWays() + case FeaturePay: + // do nothing + case SamePay: + f.GenerateSymbolSame() + case MatchPay: + f.GenerateSymbolMatch() + default: + panic(errors.Errorf("formation link type %d is not integrated yet", + f.FormationDesc.MatrixDesc.LinkType)) + } +} + +// Empty returns if the formation is empty +func (f *Formation) Empty() bool { + return f.FormationDesc.Empty +} + +func (f *Formation) addSymbolPay(symbol int64, link int64, pay float64) { + linkPay, ok := f.SymbolLinkPay[symbol] + if !ok { + linkPay = make(map[int64]float64) + f.SymbolLinkPay[symbol] = linkPay + } + linkPay[link] += pay / float64(f.FormationDesc.MatrixDesc.LineCount) +} diff --git a/gamesrv/slotspkg/slots/formation/helper.go b/gamesrv/slotspkg/slots/formation/helper.go new file mode 100644 index 0000000..172a5f3 --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/helper.go @@ -0,0 +1,35 @@ +package formation + +// Cell returns one cell by row col index +// row is from 1, col is from 1 +// If idx is over range, auto fix with symbols of 0 +// compatible with reel's range is not equals to matrix's form +func Cell(row, col int64, symbols []int64, form []int64) int64 { + pos := Coords{row - 1, col - 1}.ToPos(form) + if pos >= int64(len(symbols)) { + return 0 + } + return symbols[pos] +} + +// FormatSymbols distribute symbols into form +func FormatSymbols(symbols []int64, form []int64) [][]int64 { + formattedSymbols := make([][]int64, 0) + for col, sz := range form { + colSymbols := make([]int64, 0) + for row := 0; row < int(sz); row++ { + colSymbols = append(colSymbols, Cell(int64(row)+1, int64(col)+1, symbols, form)) + } + formattedSymbols = append(formattedSymbols, colSymbols) + } + return formattedSymbols +} + +// DeformatSymbols puts symbols together +func DeformatSymbols(symbols [][]int64) []int64 { + deformattedSymbols := make([]int64, 0) + for _, colSymbols := range symbols { + deformattedSymbols = append(deformattedSymbols, colSymbols...) + } + return deformattedSymbols +} diff --git a/gamesrv/slotspkg/slots/formation/symbol_line.go b/gamesrv/slotspkg/slots/formation/symbol_line.go new file mode 100644 index 0000000..cc7cf58 --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/symbol_line.go @@ -0,0 +1,441 @@ +package formation + +import ( + "github.com/tomas-qstarrs/boost/mathx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" + "mongo.games.com/game/gamesrv/slotspkg/slots/types/cli" +) + +// Link is the link status for every line & every symbol +type Link struct { + Symbol int64 // Symbol that links + LinkStart int64 // Start from 0 + LinkCount int64 // Max link count + LinkEnd int64 // Start form 0 + Pay float64 // Pay of this link +} + +// SymbolLine is the symbols in one line +type SymbolLine struct { + LineId int + Line []int64 // A specific Line + Symbols []int64 // The symbols in line + SymbolsDesc desc.SymbolsDesc // Reference of SymbolsDesc + MatrixDesc desc.MatrixDesc // Reference of MatrixDesc + Link *Link // Max link result on current line + LinkPositions []int64 // The positions of max link result + LinkDirection int64 // Link direction for this symbols line + GroupSymbolsDesc map[int64][]*desc.SymbolDesc // Group Symbols desc +} + +// GenerateSymbolLines generates all symbol lines and sum pays and links +func (f *Formation) GenerateSymbolLines() { + f.LinkPositions = make([][]int64, 0, len(f.FormationDesc.MatrixDesc.Lines)) + f.LineSymbols = make([][]int64, 0, len(f.FormationDesc.MatrixDesc.Lines)) + f.LinePays = make([]float64, 0, len(f.FormationDesc.MatrixDesc.Lines)) + f.Pay = 0 + f.RewardInfo = nil + groupSymbolsDesc := f.calculateGroupSymbolsDesc() + for lineId, line := range f.FormationDesc.MatrixDesc.Lines { + symbols := make([]int64, 0, len(line)) + for index, row := range line { + symbols = append(symbols, Cell(row, int64(index)+1, f.Symbols, + f.FormationDesc.MatrixDesc.Form)) + } + linkDirections := f.generateLinkDirections(f.FormationDesc.MatrixDesc.Direction) + for _, linkDirection := range linkDirections { + symbolLine := NewSymbolLine( + lineId, + line, + symbols, + f.FormationDesc.SymbolsDesc, + f.FormationDesc.MatrixDesc, + groupSymbolsDesc, + linkDirection, + ) + symbolLine.SelectLink() + if symbolLine.Win() { + f.LinkPositions = append(f.LinkPositions, symbolLine.LinkPositions) + f.Pay += symbolLine.Link.Pay + f.LineSymbols = append(f.LineSymbols, symbolLine.Symbols) + f.LinePays = append(f.LinePays, symbolLine.Link.Pay) + f.addSymbolPay(symbolLine.Link.Symbol, symbolLine.Link.LinkCount, + symbolLine.Link.Pay) + //2024-5-21 add + f.RewardInfo = append(f.RewardInfo, &shared.RewardInfo{ + Type: 1, + Index: lineId, + Item: symbolLine.Link.Symbol, + Reward: symbolLine.Link.Pay, + Pos: cli.ToPoss(f.MatrixForm, symbolLine.LinkPositions), + }) + } + } + } +} + +// GenerateSymbolLines generates all symbol lines and sum pays and links +func (f *Formation) GenerateSymbolLinesOnWin() { + f.LinkPositions = make([][]int64, 0, len(f.FormationDesc.MatrixDesc.Lines)) + f.LineSymbols = make([][]int64, 0, len(f.FormationDesc.MatrixDesc.Lines)) + f.LinePays = make([]float64, 0, len(f.FormationDesc.MatrixDesc.Lines)) + f.RewardInfo = nil + groupSymbolsDesc := f.calculateGroupSymbolsDesc() + for lineId, line := range f.FormationDesc.MatrixDesc.Lines { + symbols := make([]int64, 0, len(line)) + for index, row := range line { + symbols = append(symbols, Cell(row, int64(index)+1, f.Symbols, + f.FormationDesc.MatrixDesc.Form)) + } + linkDirections := f.generateLinkDirections(f.FormationDesc.MatrixDesc.Direction) + for _, linkDirection := range linkDirections { + symbolLine := NewSymbolLine( + lineId, + line, + symbols, + f.FormationDesc.SymbolsDesc, + f.FormationDesc.MatrixDesc, + groupSymbolsDesc, + linkDirection, + ) + symbolLine.SelectLink() + if symbolLine.Win() { + f.LinkPositions = append(f.LinkPositions, symbolLine.LinkPositions) + f.Pay += symbolLine.Link.Pay + f.LineSymbols = append(f.LineSymbols, symbolLine.Symbols) + f.LinePays = append(f.LinePays, symbolLine.Link.Pay) + f.addSymbolPay(symbolLine.Link.Symbol, symbolLine.Link.LinkCount, + symbolLine.Link.Pay) + //2024-5-21 add + f.RewardInfo = append(f.RewardInfo, &shared.RewardInfo{ + Type: 1, + Index: lineId + 1, + Item: symbolLine.Link.Symbol, + Reward: symbolLine.Link.Pay, + Pos: cli.ToPoss(f.MatrixForm, symbolLine.LinkPositions), + }) + return + } + } + } +} + +// generateLinkDirections handle directions: LeftToRight, RightToLeft, BothDirection +func (f *Formation) generateLinkDirections(matrixDirection int64) []int64 { + var linkDirections []int64 + switch matrixDirection { + case LeftToRight: + linkDirections = []int64{LeftToRight} + case RightToLeft: + linkDirections = []int64{RightToLeft} + case BothDirection: + linkDirections = []int64{LeftToRight, RightToLeft} + default: + panic(errors.FormationDirectionNotSupport.ErrorWith(matrixDirection)) + } + return linkDirections +} + +func (f *Formation) calculateGroupSymbolsDesc() map[int64][]*desc.SymbolDesc { + var groupSymbolsDesc = make(map[int64][]*desc.SymbolDesc) + for _, desc := range f.FormationDesc.SymbolsDesc { + if len(desc.Group) <= 1 { + continue + } + for _, groupSymbol := range desc.Group { + groupSymbolsDesc[groupSymbol] = append(groupSymbolsDesc[groupSymbol], desc) + } + } + return groupSymbolsDesc +} + +// NewSymbolLine creates a new SymbolLine +func NewSymbolLine( + lineId int, + line []int64, + symbols []int64, + symbolsDesc desc.SymbolsDesc, + matrixDesc desc.MatrixDesc, + groupSymbolsDesc map[int64][]*desc.SymbolDesc, + direction int64, +) *SymbolLine { + return &SymbolLine{ + LineId: lineId, + Line: line, + Symbols: symbols, + SymbolsDesc: symbolsDesc, + MatrixDesc: matrixDesc, + Link: nil, + LinkPositions: nil, + GroupSymbolsDesc: groupSymbolsDesc, + LinkDirection: direction, + } +} + +// SelectLink calculates link result in link type. +func (s *SymbolLine) SelectLink() { + s.selectMaxLink(s.calculateLinks()) +} + +// Win returns if the symbol line wins +func (s *SymbolLine) Win() bool { + return s.Link != nil && s.Link.Pay > 0 +} + +func (s *SymbolLine) selectMaxLink(links []*Link) { + var maxPay float64 + var maxPayLinkCount int64 + for _, link := range links { + if maxPay < link.Pay { + maxPay = link.Pay + maxPayLinkCount = link.LinkCount + s.Link = link + } else if maxPay == link.Pay { + if maxPayLinkCount < link.LinkCount { + s.Link = link + } + } + } + if maxPay > 0 { + if s.Link.LinkEnd > s.Link.LinkStart { + s.LinkPositions = make([]int64, 0, s.Link.LinkEnd-s.Link.LinkStart+1) + for idx := s.Link.LinkStart; idx <= s.Link.LinkEnd; idx++ { + position := Coords{ + Row: s.Line[idx] - 1, + Col: idx, + }.ToPos(s.MatrixDesc.Form) + s.LinkPositions = append(s.LinkPositions, position) + } + } else { + s.LinkPositions = make([]int64, 0, s.Link.LinkStart-s.Link.LinkEnd+1) + for idx := s.Link.LinkStart; idx >= s.Link.LinkEnd; idx-- { + position := Coords{ + Row: s.Line[idx] - 1, + Col: idx, + }.ToPos(s.MatrixDesc.Form) + s.LinkPositions = append(s.LinkPositions, position) + } + } + } +} + +func (s *SymbolLine) pay(symbol, linkCount int64) float64 { + if linkCount == 0 { + return 0 + } + symbolDesc, ok := s.SymbolsDesc[symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + if linkCount > int64(len(symbolDesc.PayRate)) { + panic(errors.FormationLinkPayIsNotFound.ErrorWith(linkCount)) + } + + return symbolDesc.Ratio(symbolDesc.PayRate[linkCount-1]) +} + +func (s *SymbolLine) getSymbolDesc(symbol int64) *desc.SymbolDesc { + symbolDesc, ok := s.SymbolsDesc[symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + return symbolDesc +} + +func (s *SymbolLine) getGroupSymbolDesc(symbol int64) []*desc.SymbolDesc { + symbolDescs, ok := s.GroupSymbolsDesc[symbol] + if !ok { + return nil + } + return symbolDescs +} + +func (s *SymbolLine) calculateLinks() []*Link { + switch s.LinkDirection { + case LeftToRight: + return s.linkFromLeftToRight(s.replaceFromLeftToRight()) + case RightToLeft: + return s.linkFromRightToLeft(s.replaceFromRightToLeft()) + default: + panic(errors.FormationDirectionNotSupport.ErrorWith(s.LinkDirection)) + } +} + +func (s *SymbolLine) linkFromLeftToRight(symbolsList [][]int64) []*Link { + links := make([]*Link, 0, len(symbolsList)) + + for _, symbols := range symbolsList { + linkSymbol := symbols[0] + var linkCount int64 + for index := 0; index < len(symbols); index++ { + if linkSymbol == symbols[index] { + linkCount++ + } else { + break + } + } + + links = append(links, &Link{ + Symbol: linkSymbol, + LinkStart: 0, + LinkCount: linkCount, + LinkEnd: linkCount - 1, + Pay: s.pay(linkSymbol, linkCount), + }) + } + + return links +} + +func (s *SymbolLine) linkFromRightToLeft(symbolsList [][]int64) []*Link { + links := make([]*Link, 0, len(symbolsList)) + + for _, symbols := range symbolsList { + linkSymbol := symbols[len(symbols)-1] + var linkCount int64 + for index := len(symbols) - 1; index >= 0; index-- { + if linkSymbol == symbols[index] { + linkCount++ + } else { + break + } + } + + links = append(links, &Link{ + Symbol: linkSymbol, + LinkStart: int64(len(symbols)) - linkCount, + LinkCount: linkCount, + LinkEnd: int64(len(symbols)) - 1, + Pay: s.pay(linkSymbol, linkCount), + }) + } + + return links +} + +func (s *SymbolLine) replaceFromLeftToRight() [][]int64 { + symbolsList := make([][]int64, 0, 2) + + // Find link symbol + var linkSymbol int64 + for index := 0; index < len(s.Symbols); index++ { + symbol := s.Symbols[index] + symbolDesc := s.getSymbolDesc(symbol) + if !symbolDesc.IsWild { + linkSymbol = symbolDesc.Group[0] + break + } + } + if linkSymbol == 0 { + linkSymbol = s.Symbols[0] + } + if linkSymbol == 0 { + panic(errors.FormationSymbolNotFound.ErrorWith(linkSymbol)) + } + + // Replace wild as link symbol + symbols := make([]int64, len(s.Symbols)) + copy(symbols, s.Symbols) + for index := 0; index < len(symbols); index++ { + symbol := symbols[index] + symbolDesc := s.getSymbolDesc(symbol) + if symbolDesc.IsWild { + symbolDesc = s.getSymbolDesc(linkSymbol) + } + symbols[index] = symbolDesc.Group[0] + } + symbolsList = append(symbolsList, symbols) + + // If line can link as group + groupSymbolDescs := s.getGroupSymbolDesc(linkSymbol) + for _, groupSymbolDesc := range groupSymbolDescs { + groupSymbols := make([]int64, len(symbols)) + copy(groupSymbols, symbols) + for index := 0; index < len(groupSymbols); index++ { + symbol := symbols[index] + symbolDesc := s.getSymbolDesc(symbol) + if s.groupEqual(symbolDesc, groupSymbolDesc) { + groupSymbols[index] = groupSymbolDesc.ID + } + } + symbolsList = append(symbolsList, groupSymbols) + } + + // If line starts from wild, try linking as wild + firstSymbol := s.Symbols[0] + firstSymbolDesc := s.getSymbolDesc(firstSymbol) + if firstSymbolDesc.IsWild { + wildSymbols := make([]int64, len(s.Symbols)) + copy(wildSymbols, s.Symbols) + for index := 0; index < len(wildSymbols); index++ { + symbol := wildSymbols[index] + symbolDesc := s.getSymbolDesc(symbol) + wildSymbols[index] = symbolDesc.Group[0] + } + symbolsList = append(symbolsList, wildSymbols) + } + + return symbolsList +} + +func (s *SymbolLine) replaceFromRightToLeft() [][]int64 { + symbolsList := make([][]int64, 0) + + // Find link symbol + var linkSymbol int64 + for index := len(s.Symbols) - 1; index >= 0; index-- { + symbol := s.Symbols[index] + symbolDesc := s.getSymbolDesc(symbol) + if !symbolDesc.IsWild { + linkSymbol = symbolDesc.Group[0] + break + } + } + if linkSymbol == 0 { + linkSymbol = s.Symbols[len(s.Symbols)-1] + } + if linkSymbol == 0 { + panic(errors.FormationSymbolNotFound.ErrorWith(linkSymbol)) + } + + // Replace wild as link symbol + symbols := make([]int64, len(s.Symbols)) + copy(symbols, s.Symbols) + for index := len(s.Symbols) - 1; index >= 0; index-- { + symbol := symbols[index] + symbolDesc := s.getSymbolDesc(symbol) + if symbolDesc.IsWild { + symbolDesc = s.getSymbolDesc(linkSymbol) + } + symbols[index] = symbolDesc.Group[0] + } + symbolsList = append(symbolsList, symbols) + + // If line starts from wild, try linking as wild + firstSymbol := s.Symbols[len(s.Symbols)-1] + firstSymbolDesc := s.getSymbolDesc(firstSymbol) + if firstSymbolDesc.IsWild { + symbols := make([]int64, len(s.Symbols)) + copy(symbols, s.Symbols) + for index := len(s.Symbols) - 1; index >= 0; index-- { + symbol := symbols[index] + symbolDesc := s.getSymbolDesc(symbol) + symbols[index] = symbolDesc.Group[0] + } + symbolsList = append(symbolsList, symbols) + } + + return symbolsList +} + +func (s *SymbolLine) groupEqual(hostDesc *desc.SymbolDesc, + guestDesc *desc.SymbolDesc) bool { + for _, hostSymbol := range hostDesc.Group { + if mathx.In(hostSymbol, guestDesc.Group) { + return true + } + } + return false +} diff --git a/gamesrv/slotspkg/slots/formation/symbol_match.go b/gamesrv/slotspkg/slots/formation/symbol_match.go new file mode 100644 index 0000000..1ecd303 --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/symbol_match.go @@ -0,0 +1,215 @@ +package formation + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +type SymbolMatch struct { + Symbol int64 + Symbols []int64 + SymbolsDesc desc.SymbolsDesc + MatrixDesc desc.MatrixDesc + LinkCount int64 + Pay int64 + LinkPositions []int64 +} + +func (f *Formation) GetReelFormattedSymbols() [][]int64 { + return FormatSymbols(f.Symbols, f.ReelForm) +} + +func (f *Formation) searchSymbols(i int64, j int64, itemID int64, symbols [][]int64, rowSize int64, colSize int64) { + if i < 0 || i >= colSize || j < 0 || j >= rowSize { + return + } + + if symbols[i][j] == 0 || symbols[i][j] == 100 || symbols[i][j] == 101 || symbols[i][j] >= 1000 { + return + } + + if symbols[i][j] != itemID { + if f.IsWild(symbols[i][j]) { + + } else { + return + } + } + + if f.IsWild(symbols[i][j]) { + symbols[i][j] = 101 + } else { + symbols[i][j] = 100 + } + + f.searchSymbols(i-1, j, itemID, symbols, rowSize, colSize) + f.searchSymbols(i+1, j, itemID, symbols, rowSize, colSize) + f.searchSymbols(i, j-1, itemID, symbols, rowSize, colSize) + f.searchSymbols(i, j+1, itemID, symbols, rowSize, colSize) +} + +func getSymbolMatch(symbols [][]int64, rowSize int64, colSize int64) int64 { + n := int64(0) + for i := int64(0); i < colSize; i++ { + for j := int64(0); j < rowSize; j++ { + if symbols[i][j] == 100 || symbols[i][j] == 101 { + n++ + } + } + } + return n +} + +func symbolRevert(itemID int64, symbols [][]int64, rowSize int64, colSize int64, rawSymbols [][]int64) { + for i := int64(0); i < colSize; i++ { + for j := int64(0); j < rowSize; j++ { + if symbols[i][j] == 100 { + symbols[i][j] = itemID + } + if symbols[i][j] == 101 { + symbols[i][j] = rawSymbols[i][j] + } + } + } +} + +func symbolUpgrade(itemID int64, symbols [][]int64, rowSize int64, colSize int64, rawSymbols [][]int64) { + for i := int64(0); i < colSize; i++ { + for j := int64(0); j < rowSize; j++ { + if symbols[i][j] == 100 { + symbols[i][j] = 1000 + itemID + } + } + } +} + +func calcWin(f *Formation, itemID int64, symbols [][]int64, records [][]int64, rowSize int64, colSize int64, count int64) { + positions := make([]int64, 0) + + for i := int64(0); i < colSize; i++ { + for j := int64(0); j < rowSize; j++ { + if symbols[i][j] == 1000+itemID && records[i][j] == 0 { + positions = append(positions, i*rowSize+j) + records[i][j] = 1 + } + if symbols[i][j] == 101 { + positions = append(positions, i*rowSize+j) + } + } + } + + winPay := float64(f.FormationDesc.SymbolsDesc[itemID].PayRate[count-1]) + + f.LinkPositions = append(f.LinkPositions, positions) + f.Pay += winPay + f.LinePays = append(f.LinePays, winPay) + link := int64(len(positions)) + f.addSymbolPay(itemID, link, winPay) +} + +func (f *Formation) IsWild(itemID int64) bool { + linkSymbolDesc := f.getSymbolDesc(itemID) + return linkSymbolDesc.IsWild +} + +func (f *Formation) IsZeroPay(itemID int64) bool { + linkSymbolDesc := f.getSymbolDesc(itemID) + pay := int64(0) + for _, p := range linkSymbolDesc.PayRate { + pay += p + } + return pay == 0 +} + +func (f *Formation) getSymbolDesc(symbol int64) *desc.SymbolDesc { + s := f.FormationDesc + symbolDesc, ok := s.SymbolsDesc[symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + return symbolDesc +} + +func (f *Formation) GenerateSymbolMatch() { + // 仅支持矩形formation + rowSize := int64(f.ReelForm[0]) + colSize := int64(len(f.ReelForm)) + symbols := f.GetReelFormattedSymbols() + rawSymbols := f.GetReelFormattedSymbols() + records := make([][]int64, 0) + for i := int64(0); i < colSize; i++ { + records = append(records, make([]int64, rowSize)) + } + + for i := int64(0); i < colSize; i++ { + for j := int64(0); j < rowSize; j++ { + if symbols[i][j] == 0 { + continue + } + + itemID := symbols[i][j] + if itemID > 1000 || f.IsWild(itemID) || f.IsZeroPay(itemID) { + continue + } + + // 从位置 ij 开始搜索标记相邻的相同元素 + f.searchSymbols(i, j, itemID, symbols, rowSize, colSize) + count := getSymbolMatch(symbols, rowSize, colSize) + + if count >= 5 { + // 存在5个相同元素 + symbolUpgrade(itemID, symbols, rowSize, colSize, rawSymbols) + calcWin(f, itemID, symbols, records, rowSize, colSize, count) + symbolRevert(itemID, symbols, rowSize, colSize, rawSymbols) + f.Symbols = DeformatSymbols(symbols) + } else { + // 不存在5个相同元素,恢复原始轴 + symbolRevert(itemID, symbols, rowSize, colSize, rawSymbols) + } + } + } +} + +func NewSymbolMatch(symbol int64, + symbols []int64, + symbolsDesc desc.SymbolsDesc, + matrixDesc desc.MatrixDesc, +) *SymbolMatch { + return &SymbolMatch{ + Symbol: symbol, + Symbols: symbols, + SymbolsDesc: symbolsDesc, + MatrixDesc: matrixDesc, + LinkCount: 0, + Pay: 0, + LinkPositions: make([]int64, 0), + } +} + +func (s *SymbolMatch) Win() bool { + return s.Pay > 0 +} + +func (s *SymbolMatch) pay() int64 { + linkCount := s.LinkCount + symbol := s.Symbol + if linkCount == 0 { + return 0 + } + symbolDesc, ok := s.SymbolsDesc[s.Symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + if linkCount > int64(len(symbolDesc.PayRate)) { + panic(errors.FormationLinkPayIsNotFound.ErrorWith(linkCount)) + } + return symbolDesc.PayRate[linkCount-1] +} + +func (s *SymbolMatch) getSymbolDesc(symbol int64) *desc.SymbolDesc { + symbolDesc, ok := s.SymbolsDesc[symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + return symbolDesc +} diff --git a/gamesrv/slotspkg/slots/formation/symbol_same.go b/gamesrv/slotspkg/slots/formation/symbol_same.go new file mode 100644 index 0000000..dad5320 --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/symbol_same.go @@ -0,0 +1,146 @@ +package formation + +import ( + "github.com/tomas-qstarrs/boost/mathx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +type SymbolSame struct { + Symbol int64 + Symbols []int64 + SymbolsDesc desc.SymbolsDesc + MatrixDesc desc.MatrixDesc + LinkCount int64 + Pay float64 + LinkPositions []int64 +} + +func (f *Formation) GenerateSymbolSame() { + for _, symbolDesc := range f.FormationDesc.SymbolsDesc { + symbolSame := NewSymbolSame( + symbolDesc.ID, + f.Symbols, + f.FormationDesc.SymbolsDesc, + f.FormationDesc.MatrixDesc, + ) + symbolSame.SelectLink() + if symbolSame.Win() { + f.LinkPositions = append(f.LinkPositions, symbolSame.LinkPositions) + f.Pay += float64(symbolSame.Pay) + f.LinePays = append(f.LinePays, float64(symbolSame.Pay)) + f.addSymbolPay(symbolSame.Symbol, symbolSame.LinkCount, float64(symbolSame.Pay)) + } + } +} + +func NewSymbolSame(symbol int64, + symbols []int64, + symbolsDesc desc.SymbolsDesc, + matrixDesc desc.MatrixDesc, +) *SymbolSame { + return &SymbolSame{ + Symbol: symbol, + Symbols: symbols, + SymbolsDesc: symbolsDesc, + MatrixDesc: matrixDesc, + LinkCount: 0, + Pay: 0, + LinkPositions: make([]int64, 0), + } +} + +func (s *SymbolSame) SelectLink() { + s.calculateLinks() +} + +func (s *SymbolSame) Win() bool { + return s.Pay > 0 +} + +func (s *SymbolSame) pay() float64 { + linkCount := s.LinkCount + symbol := s.Symbol + if linkCount == 0 { + return 0 + } + symbolDesc, ok := s.SymbolsDesc[s.Symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + if linkCount > int64(len(symbolDesc.PayRate)) { + panic(errors.FormationLinkPayIsNotFound.ErrorWith(linkCount)) + } + return symbolDesc.Ratio(symbolDesc.PayRate[linkCount-1]) +} + +func (s *SymbolSame) getSymbolDesc(symbol int64) *desc.SymbolDesc { + symbolDesc, ok := s.SymbolsDesc[symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + return symbolDesc +} + +func (s *SymbolSame) calculateLinks() { + s.calculatePay(s.selectPositions()) +} + +func (s *SymbolSame) calculatePay(positions []int64, allPositions []int64) { + if len(positions) == 0 { + s.LinkPositions = nil + s.LinkCount = 0 + s.Pay = 0 + return + } + s.LinkPositions = allPositions + s.LinkCount = int64(len(allPositions)) + s.Pay = s.pay() +} + +func (s *SymbolSame) selectPositions() ([]int64, []int64) { + linkSymbol := s.Symbol + linkSymbolDesc := s.getSymbolDesc(linkSymbol) + if linkSymbolDesc.IsWild { + return s.selectWildPositions() + } + + return s.selectNormalPositions() +} + +func (s *SymbolSame) selectNormalPositions() ([]int64, []int64) { + linkSymbolDesc := s.getSymbolDesc(s.Symbol) + positions := make([]int64, 0, len(s.Symbols)) + allPositions := make([]int64, 0, len(s.Symbols)) + for index, symbol := range s.Symbols { + symbolDesc := s.getSymbolDesc(symbol) + if symbolDesc.IsWild { + allPositions = append(allPositions, int64(index)) + } else if s.groupEqual(linkSymbolDesc, symbolDesc) { + positions = append(positions, int64(index)) + allPositions = append(allPositions, int64(index)) + } + } + return positions, allPositions +} + +func (s *SymbolSame) selectWildPositions() ([]int64, []int64) { + positions := make([]int64, 0, len(s.Symbols)) + for index, symbol := range s.Symbols { + symbolDesc := s.getSymbolDesc(symbol) + if symbolDesc.IsWild { + positions = append(positions, int64(index)) + } + } + return positions, positions +} + +func (s *SymbolSame) groupEqual(hostDesc *desc.SymbolDesc, + guestDesc *desc.SymbolDesc) bool { + for _, hostSymbol := range hostDesc.Group { + if mathx.In(hostSymbol, guestDesc.Group) { + return true + } + } + return false +} diff --git a/gamesrv/slotspkg/slots/formation/symbol_way.go b/gamesrv/slotspkg/slots/formation/symbol_way.go new file mode 100644 index 0000000..f9b43c0 --- /dev/null +++ b/gamesrv/slotspkg/slots/formation/symbol_way.go @@ -0,0 +1,250 @@ +package formation + +import ( + "github.com/tomas-qstarrs/boost/mathx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +// SymbolWay is the symbols of same symbol id +type SymbolWay struct { + Symbol int64 // The symbol to be matched + Symbols []int64 // The result symbols of rand + SymbolsDesc desc.SymbolsDesc // Reference of SymbolsDesc + MatrixDesc desc.MatrixDesc // Reference of MatrixDesc + LinkCount int64 // Link count of same symbol + Pay float64 // Pay of this symbol way + LinkPositions []int64 // Link result + LinkDirection int64 // Link direction for this Symbol way +} + +// GenerateSymbolWays genertates all symbols ways and sum pays and links +func (f *Formation) GenerateSymbolWays() { + for _, symbolDesc := range f.FormationDesc.SymbolsDesc { + linkDirections := f.generateLinkDirections(f.FormationDesc.MatrixDesc.Direction) + for _, linkDirection := range linkDirections { + symbolway := NewSymbolWay( + symbolDesc.ID, + f.Symbols, + f.FormationDesc.SymbolsDesc, + f.FormationDesc.MatrixDesc, + linkDirection, + ) + symbolway.SelectLink() + if symbolway.Win() { + f.LinkPositions = append(f.LinkPositions, symbolway.LinkPositions) + f.Pay += float64(symbolway.Pay) + f.LinePays = append(f.LinePays, float64(symbolway.Pay)) + f.addSymbolPay(symbolway.Symbol, symbolway.LinkCount, float64(symbolway.Pay)) + } + } + } +} + +// NewSymbolWay creates a new SymbolLine +func NewSymbolWay(symbol int64, + symbols []int64, + symbolsDesc desc.SymbolsDesc, + matrixDesc desc.MatrixDesc, + linkDirection int64, +) *SymbolWay { + return &SymbolWay{ + Symbol: symbol, + Symbols: symbols, + SymbolsDesc: symbolsDesc, + MatrixDesc: matrixDesc, + LinkCount: 0, + Pay: 0, + LinkPositions: make([]int64, 0), + LinkDirection: linkDirection, + } +} + +// SelectLink calculates the smallest symbols with the most links +func (s *SymbolWay) SelectLink() { + s.calculateLinks() +} + +// Win returns if the symbol way wins +func (s *SymbolWay) Win() bool { + return s.Pay > 0 +} + +func (s *SymbolWay) pay(colCounts []int64) (float64, int64) { + if colCounts[0] == 0 { + return 0, 0 + } + symbolDesc, ok := s.SymbolsDesc[s.Symbol] + if !ok { + panic(errors.Errorf("Symbol %d not found", s.Symbol)) + } + var linkCount int64 = 0 + var times int64 = 1 + for _, count := range colCounts { + if count == 0 { + break + } + times *= count + linkCount++ + } + if linkCount > int64(len(symbolDesc.PayRate)) { + panic(errors.Errorf("link %d pay is not found", linkCount)) + } + return symbolDesc.Ratio(times * symbolDesc.PayRate[linkCount-1]), linkCount +} + +func (s *SymbolWay) getSymbolDesc(symbol int64) *desc.SymbolDesc { + symbolDesc, ok := s.SymbolsDesc[symbol] + if !ok { + panic(errors.FormationSymbolNotFound.ErrorWith(symbol)) + } + return symbolDesc +} + +func (s *SymbolWay) calculateLinks() { + switch s.LinkDirection { + case LeftToRight: + s.calculatePayFromLeftToRight(s.selectPositions()) + case RightToLeft: + s.calculatePayFromRightToLeft(s.selectPositions()) + default: + panic(errors.FormationDirectionNotSupport.ErrorWith(s.LinkDirection)) + } +} + +func (s *SymbolWay) selectPositions() ([]int64, []int64) { + linkSymbol := s.Symbol + linkSymbolDesc := s.getSymbolDesc(linkSymbol) + if linkSymbolDesc.IsWild { + return s.selectWildPositions() + } + + return s.selectNormalPositions() +} + +func (s *SymbolWay) selectNormalPositions() ([]int64, []int64) { + linkSymbolDesc := s.getSymbolDesc(s.Symbol) + positions := make([]int64, 0, len(s.Symbols)) + allPositions := make([]int64, 0, len(s.Symbols)) + for index, symbol := range s.Symbols { + symbolDesc := s.getSymbolDesc(symbol) + if symbolDesc.IsWild { + allPositions = append(allPositions, int64(index)) + } else if s.groupEqual(linkSymbolDesc, symbolDesc) { + positions = append(positions, int64(index)) + allPositions = append(allPositions, int64(index)) + } + } + return positions, allPositions +} + +func (s *SymbolWay) selectWildPositions() ([]int64, []int64) { + positions := make([]int64, 0, len(s.Symbols)) + for index, symbol := range s.Symbols { + symbolDesc := s.getSymbolDesc(symbol) + if symbolDesc.IsWild { + positions = append(positions, int64(index)) + } + } + return positions, positions +} + +func (s *SymbolWay) calculatePayFromLeftToRight(positions []int64, allPositions []int64) { + colCounts := make([]int64, len(s.MatrixDesc.Form)) + end := int64(0) + for index := 0; index < len(allPositions); index++ { + position := allPositions[index] + coords := &Coords{} + coords.FromPos(s.MatrixDesc.Form, position) + switch { + case coords.Col == end: + colCounts[coords.Col]++ + s.LinkPositions = append(s.LinkPositions, position) + end++ + case coords.Col < end: + colCounts[coords.Col]++ + s.LinkPositions = append(s.LinkPositions, position) + case coords.Col > end: + break + } + } + + s.Pay, s.LinkCount = s.pay(colCounts) + + var hasSymbol bool + for index := 0; index < len(positions); index++ { + position := positions[index] + coords := &Coords{} + coords.FromPos(s.MatrixDesc.Form, position) + if coords.Col < s.LinkCount { + hasSymbol = true + break + } + } + + if !hasSymbol { + s.LinkPositions = nil + s.Pay = 0 + s.LinkCount = 0 + } +} + +func (s *SymbolWay) calculatePayFromRightToLeft(positions []int64, allPositions []int64) { + colCounts := make([]int64, len(s.MatrixDesc.Form)) + var end = int64(len(allPositions) - 1) + for index := len(allPositions) - 1; index >= 0; index-- { + position := allPositions[index] + coords := &Coords{} + coords.FromPos(s.MatrixDesc.Form, position) + switch { + case coords.Col == end: + colCounts[coords.Col]++ + s.LinkPositions = append(s.LinkPositions, position) + end-- + case coords.Col < end: + colCounts[coords.Col]++ + s.LinkPositions = append(s.LinkPositions, position) + case coords.Col > end: + break + } + } + + s.Pay, s.LinkCount = s.pay(colCounts) + + colCounts = make([]int64, len(s.MatrixDesc.Form)) + end = int64(len(positions) - 1) + for index := len(positions) - 1; index >= 0; index-- { + position := positions[index] + coords := &Coords{} + coords.FromPos(s.MatrixDesc.Form, position) + switch { + case coords.Col == end: + colCounts[coords.Col]++ + end-- + case coords.Col < end: + colCounts[coords.Col]++ + case coords.Col > end: + break + } + } + + sumColCount := int64(0) + for index := 0; index < int(s.LinkCount); index++ { + sumColCount += colCounts[index] + } + if sumColCount == 0 { + s.LinkPositions = nil + s.Pay = 0 + s.LinkCount = 0 + } +} + +func (s *SymbolWay) groupEqual(hostDesc *desc.SymbolDesc, + guestDesc *desc.SymbolDesc) bool { + for _, hostSymbol := range hostDesc.Group { + if mathx.In(hostSymbol, guestDesc.Group) { + return true + } + } + return false +} diff --git a/gamesrv/slotspkg/slots/handler.go b/gamesrv/slotspkg/slots/handler.go new file mode 100644 index 0000000..2c24ee9 --- /dev/null +++ b/gamesrv/slotspkg/slots/handler.go @@ -0,0 +1,129 @@ +package slots + +import ( + "github.com/idealeak/goserver/core/logger" + _struct "mongo.games.com/game/gamesrv/slotspkg/internal/dao/struct" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/global" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/machine" + "mongo.games.com/game/gamesrv/slotspkg/slots/types/cli" +) + +func (sm *SlotsMgr) Enter(s *session.Session, gameId int64) (*cli.SlotsEnterResponse, error) { + theme := key.GameMap[uint(gameId)] + + m := machine.NewMachine(s, theme, DataSet(s).Shell, false) + if m == nil { + logger.Logger.Error("[slotsMgr.enter] module is nil") + return nil, errors.New("module is nil") + } + defer func() { + if m.Next().GetType() == key.BaseSpin { + DataSet(s).Update() + } + }() + Response := &cli.SlotsEnterResponse{ + Code: errors.Nil.Code(), + NodeTree: m.PlayLiteClose(), + Coin: player.CoinCenter.Get(s).GetCoin(), + BetSizeIndex: m.BetSizeIndex(), + BetLevelIndex: m.BetLevelIndex(), + BetLineIndex: m.BetLineIndex(), + BetSizes: m.BetSizes(), + BetLevels: m.BetLevels(), + BetLines: m.BetLines(), + BetChangeList: m.BetChangeList(), + } + return Response, nil +} + +func (sm *SlotsMgr) Play(uid uint64, req *_struct.SpinReq) (*cli.SlotsPlayResponse, error) { + s := sm.GetSession(uid) + if s == nil { + logger.Logger.Error("[slotsMgr.play] session is nil") + return nil, errors.New("session is nil") + } + + if req.BetSizeIndex < 0 { + logger.Logger.Error("[slotsMgr.play] msg.BetSizeIndex < 0") + return nil, errors.New("msg.BetSizeIndex < 0") + } + + if req.BetLevelIndex < 0 { + logger.Logger.Error("[slotsMgr.play] msg.BetLevelIndex < 0") + return nil, errors.New("msg.BetLevelIndex < 0") + } + theme := key.GameMap[uint(req.GameId)] + m := machine.NewMachine(s, theme, DataSet(s).Shell, false) + if m == nil { + logger.Logger.Error("[slotsMgr.play] module is nil") + return nil, errors.New("module is nil") + } + + defer func() { + if m.Next().GetType() == key.BaseSpin { + DataSet(s).Update() + } + }() + + var recorderResult = &shared.RecorderResult{} + if m.Next().GetType() == key.BaseSpin { + recorderResult = NewPlayAsRecorder(s) + m.Play(&shared.Act{ + BetSizeIndex: req.BetSizeIndex, + BetLevelIndex: req.BetLevelIndex, + BetLineIndex: req.BetLineIndex, + Ratio: 1, + Mode: key.MachineModePlayer, + Vector: recorderResult.Vector, + //ExpectedWinCoin: recorderResult.ExpectedWinCoin, + Choice: req.BetMode, + PlayMode: recorderResult.PlayMode, + }) + } else { + m.Play(&shared.Act{ + BetSizeIndex: req.BetSizeIndex, + BetLevelIndex: req.BetLevelIndex, + BetLineIndex: req.BetLineIndex, + Ratio: 1, + Mode: key.MachineModePlayer, + Choice: req.BetMode, + }) + } + res := &cli.SlotsPlayResponse{ + Code: errors.Nil.Code(), + NodeTree: m.PlayLiteClose(), + ActualBet: m.ActualBet(), + ActualWin: m.ActualWin(), + Coin: player.CoinCenter.Get(s).GetCoin(), + IsEnd: m.Next().GetType() == key.BaseSpin, + } + //if !global.Mock { + // defer player.PushPlayer(s) + //} + return res, nil +} +func (*SlotsMgr) Leave(s *session.Session) (*cli.SlotsLeaveResponse, error) { + + m := machine.NewMachine(s, "s.Theme", DataSet(s).Shell, false) + + defer func() { + if m.Next().GetType() == key.BaseSpin { + DataSet(s).Update() + } + }() + + m.QuitLiteClose() + Response := &cli.SlotsLeaveResponse{ + Code: errors.Nil.Code(), + Coin: player.CoinCenter.Get(s).GetCoin(), + } + if !global.Mock { + defer player.PushPlayer(s) + } + return Response, nil +} diff --git a/gamesrv/slotspkg/slots/intf/callback.go b/gamesrv/slotspkg/slots/intf/callback.go new file mode 100644 index 0000000..b249f62 --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/callback.go @@ -0,0 +1,13 @@ +package intf + +// Callback is the interface to insert procedure to entity +type Callback interface { + OnInit() + OnStepBegin() + BeforeSpin() + BeforeDisplay() + AfterDisplay() + AfterSpin() + OnStepEnd() + OnStay() +} diff --git a/gamesrv/slotspkg/slots/intf/feature.go b/gamesrv/slotspkg/slots/intf/feature.go new file mode 100644 index 0000000..8df2ae5 --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/feature.go @@ -0,0 +1,16 @@ +package intf + +// Feature is the interface for operating shared.Feature +type Feature interface { + GetID() int64 + GetWin() int64 + SetWin(win int64) Feature + GetSeqID() int64 + SetSeqID(seqID int64) Feature + GetLifetime() int64 + SetLifetime(lifetime int64) Feature + GetVisiable() bool + SetVisiable(visiable bool) Feature + GetImageable() bool + SetImageable(imageable bool) Feature +} diff --git a/gamesrv/slotspkg/slots/intf/formation.go b/gamesrv/slotspkg/slots/intf/formation.go new file mode 100644 index 0000000..7c0ee73 --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/formation.go @@ -0,0 +1,68 @@ +package intf + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" +) + +// Formation is the interface for operating shared.Formation +type Formation interface { + GetWin() int64 + SetWin(win int64) Formation + + GetInitSymbols() []int64 + SetInitSymbols(symbols []int64) Formation + GetInitMatrixFormattedSymbols() [][]int64 + SetInitFormattedSymbols(symbols [][]int64) Formation + + GetSymbols() []int64 + SetSymbols(symbols []int64) Formation + GetReelFormattedSymbols() [][]int64 + GetMatrixFormattedSymbols() [][]int64 + SetFormattedSymbols(symbols [][]int64) Formation + + GetCheatSymbols() []int64 + SetCheatSymbols(symbols []int64) Formation + GetReelFormattedCheatSymbols() [][]int64 + SetFormattedCheatSymbols(symbols [][]int64) Formation + + GetDisplaySymbols() []int64 + SetDisplaySymbols(symbols []int64) Formation + GetReelFormattedDisplaySymbols() [][]int64 + SetFormattedDisplaySymbols(symbols [][]int64) Formation + + GetOriginDisplaySymbols() []int64 + SetOriginDisplaySymbols(symbols []int64) Formation + GetReelFormattedOriginDisplaySymbols() [][]int64 + SetFormattedOriginDisplaySymbols(symbols [][]int64) Formation + + GetFinalSymbols() []int64 + SetFinalSymbols(symbols []int64) Formation + GetMatrixFormattedFinalSymbols() [][]int64 + SetFormattedFinalSymbols(symbols [][]int64) Formation + + GetLinkPositions() []*shared.LinkPositions + SetLinkPositions(linkPositions []*shared.LinkPositions) Formation + + CoordsToPosition(row int64, col int64) int64 + PositionToCoords(position int64) (int64, int64) + + GetLineSymbols() [][]int64 + GetLinePays() []float64 + GetLineCount() int64 + GetLineLines() [][]int64 + + GetRandPositions() []int64 + GetReelSymbols(reelIndex int64, startIdx int64, size int64) []int64 + + GetMatrixForm() []int64 + + ResetRandSymbols(r *randx.Randx) + ResetRandSymbolsByIndex(r *randx.Randx) + + GetRewardInfo() []*shared.RewardInfo + SetRewardInfo(ri []*shared.RewardInfo) + + SetNewNodeType(nodeType string) + GetNewNodeType() string +} diff --git a/gamesrv/slotspkg/slots/intf/master.go b/gamesrv/slotspkg/slots/intf/master.go new file mode 100644 index 0000000..c128382 --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/master.go @@ -0,0 +1,140 @@ +package intf + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +// Master is the interface for mastering machine +type Master interface { + Randx() *randx.Randx + UID() int64 + SetRatio(int64, float64) + SetSummary(s string) + TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions, [][]int64, []float64) // 返回linkPositions, LineSymbols, LinePays + TryLinkMatrixSymbols(seqID int64, matSymbols [][]int64) ([]*shared.LinkPositions, [][]int64, []float64) // 返回linkPositions, LineSymbols, LinePays + TryRand(nodeType string, seqID int64) []int64 + SkipBaseSpin(nodeID int64) + SkipBaseSpinWithBet(nodeID int64) + Desc() *desc.NodeDesc + UserData() *shared.UserData + MustNext() + RandVector() *shared.RandVector + RandxTracker() *shared.RandxTracker + CompareRandx() (bool, string, string) + + BetSizeIndex() int64 + BetLevelIndex() int64 + BetLineIndex() int64 + Choice() int64 + Stay() bool + Version() int64 + Ratio() float64 + Mode() string + GetBetCoin() player.DecCoin + GetWinCoin() player.IncCoin + + Bet() int64 // 当前Node参与计算的下注值(拷贝自Base,可临时被更改) + ActBet() int64 // 通过Base节点信息和Act信息实时计算的最新Bet值 + TotalBet() int64 // 一轮Base节点实际付款金币 + ActualBet() int64 // 当前Spin实际付款金币 + Win() int64 // 当前Spin中奖金额 + NodeTotalWin() int64 // 当前Node中奖金额 + TotalWin() int64 // 一轮Base总中奖金额 + ActualWin() int64 // 当前Spin实际获奖金额 + ActualWinType() int64 // 当前Spin实际获奖类型 + + Accomplish() + AccomplishNext() + AccomplishParent() + AddProgress(n int64) + AddNextProgress(n int64) + AddParentProgress(n int64) + ProgressLeft() int64 + NextProgressLeft() int64 + ParentProgressLeft() int64 + SetProgressLeft(left int64) + SetNextProgressLeft(left int64) + SetParentProgressLeft(left int64) + GetProgressValue() int64 + GetNextProgressValue() int64 + GetParentProgressValue() int64 + + Node(nodeID int64) Node + Cursor() Node + Root() Node + Next() Node + AddNode(nodeID int64, nodeType string, progress int64) Node + AddNodeOnCursor(nodeType string, progress int64) Node + AddNodeOnRoot(nodeType string, progress int64) Node + AddNodeAtLeft(nodeID int64, nodeType string, progress int64) Node + AddNodeOnCursorAtLeft(nodeType string, progress int64) Node + AddNodeOnRootAtLeft(nodeType string, progress int64) Node + + //////////////////////////////////////////////////////// + UpdateCursor2NewType(nodeType string, progress int64) Node + + IsWinInBeforeDisplay() bool + + IsWinInBeforeDisplayBySymbols(symbols [][]int64) int + //////////////////////////////////////////////////////// + + CursorFormation() Formation + CursorFormations() []Formation + CursorSeqFormation(seqID int64) Formation + NodeFormation(nodeID int64) Formation + NodeFormations(nodeID int64) []Formation + NodeSeqFormation(nodeID int64, seqID int64) Formation + + Feature(featureID int64) Feature + CursorFeature(v interface{}) Feature + CursorFeatures(v interface{}) []Feature + CursorFormationFeature(seqID int64, v interface{}) Feature + CursorFormationFeatures(seqID int64, v interface{}) []Feature + RootFeature(v interface{}) Feature + RootFeatures(v interface{}) []Feature + NodeFeature(nodeID int64, v interface{}) Feature + NodeFeatures(nodeID int64, v interface{}) []Feature + NodeFormationFeature(nodeID int64, seqID int64, v interface{}) Feature + NodeFormationFeatures(nodeID int64, seqID int64, v interface{}) []Feature + AddCursorFeature(v interface{}) Feature + AddRootFeature(v interface{}) Feature + AddNodeFeature(nodeID int64, v interface{}) Feature + + Custom(featureID int64) interface{} + CursorCustom(v interface{}) interface{} + CursorCustoms(v interface{}) []interface{} + CursorFormationCustom(seqID int64, v interface{}) interface{} + CursorFormationCustoms(seqID int64, v interface{}) []interface{} + RootCustom(v interface{}) interface{} + RootCustoms(v interface{}) []interface{} + NodeCustom(nodeID int64, v interface{}) interface{} + NodeCustoms(nodeID int64, v interface{}) []interface{} + NodeFormationCustom(nodeID int64, seqID int64, v interface{}) interface{} + NodeFormationCustoms(nodeID int64, seqID int64, v interface{}) []interface{} + + Remove(key interface{}) + Set(key interface{}, value interface{}) + Exists(key interface{}) bool + Int(key interface{}) int + Int8(key interface{}) int8 + Int16(key interface{}) int16 + Int32(key interface{}) int32 + Int64(key interface{}) int64 + Uint(key interface{}) uint + Uint8(key interface{}) uint8 + Uint16(key interface{}) uint16 + Uint32(key interface{}) uint32 + Uint64(key interface{}) uint64 + Incr(Key interface{}) + Float32(key interface{}) float32 + Float64(key interface{}) float64 + String(key interface{}) string + Bool(key interface{}) bool + Value(key interface{}) interface{} + State() map[string]interface{} + Restore(data map[string]interface{}) + Clear() +} diff --git a/gamesrv/slotspkg/slots/intf/node.go b/gamesrv/slotspkg/slots/intf/node.go new file mode 100644 index 0000000..70fae8f --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/node.go @@ -0,0 +1,22 @@ +package intf + +import "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + +// Node is the interface for operating shared.Node +type Node interface { + GetID() int64 + GetParent() int64 + GetType() string + GetBet() int64 + SetBet(bet int64) Node + AddPrepare() Node + GetFormationWin() int64 // 节点矩阵中奖金额 + GetFeatureWin() int64 // 节点Feature中奖金额 + GetWin() int64 + GetTotalWin() int64 + GetProgressValue() int64 + GetProgressMax() int64 + GetFormations() []*shared.Formation + GetSingleBet() int64 + GetNoBase() bool +} diff --git a/gamesrv/slotspkg/slots/intf/plugin.go b/gamesrv/slotspkg/slots/intf/plugin.go new file mode 100644 index 0000000..c8f2ceb --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/plugin.go @@ -0,0 +1,18 @@ +package intf + +// Plugin is the interface that represents a feature plugin +type Plugin interface { + Theme() string + Customs() []interface{} + OnInit(Master) + OnStepBegin(Master) + OnEnterNode(Master) + BeforeSpin(Master) + BeforeDisplay(Master) + AfterDisplay(Master) + AfterSpin(Master) + OnLeaveNode(Master) + OnStepEnd(Master) + OnSummary(Master) + OnStay(Master) +} diff --git a/gamesrv/slotspkg/slots/intf/spinner.go b/gamesrv/slotspkg/slots/intf/spinner.go new file mode 100644 index 0000000..f3da082 --- /dev/null +++ b/gamesrv/slotspkg/slots/intf/spinner.go @@ -0,0 +1,72 @@ +package intf + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" +) + +// Spinner is the interface for dispatching entity +type Spinner interface { + Close() *shared.NodeTree + PlayClose() *shared.NodeTree + SyncLiteClose() *shared.LiteNodeTree + PlayLiteClose() *shared.LiteNodeTree + QuitLiteClose() *shared.LiteNodeTree + GetNodeTree() *shared.NodeTree + Play(*shared.Act) + + Summary() string + GetSymbolLinkPays() []map[int64]map[int64]float64 + CalcWinType(multi float64) int64 + Cursor() Node + Next() Node + Parent() Node + Ancestor() Node + Node(nodeID int64) Node + CursorType() string + NextType() string + ParentType() string + AncestorType() string + UserData() *shared.UserData + Desc() *desc.NodeDesc + Value(key interface{}) interface{} + RandVector() *shared.RandVector + CompareRandx() (bool, string, string) + RandxTracker() *shared.RandxTracker + MinBet() int64 + + BetSizeIndex() int64 + BetLevelIndex() int64 + BetLineIndex() int64 + BetSizes() []int64 + BetLevels() []int64 + BetLines() []int64 + BetChangeList() []float64 + + Choice() int64 + Stay() bool + Version() int64 + Ratio() float64 + Mode() string + Vector() []int64 + GetBetCoin() player.DecCoin + GetWinCoin() player.IncCoin + Round() int64 + + Bet() int64 // 当前Node参与计算的下注值(拷贝自Base,可临时被更改) + ActBet() int64 // 通过Base节点信息和Act信息实时计算的最新Bet值 + TotalBet() int64 // 一轮Base节点实际付款金币 + ActualBet() int64 // 当前Spin实际付款金币 + Win() int64 // 当前Spin中奖金额 + NodeTotalWin() int64 // 当前Node中奖金额 + TotalWin() int64 // 一轮Base总中奖金额 + ActualWin() int64 // 当前Spin实际获奖金额 + ActualWinType() int64 // 当前Spin实际获奖类型 + + GetVector(float64, float64, bool) (int64, []int64) + + GetDisplaySymbolsListString() string + GetFinalSymbolsListString() string + GetFeaturesString() string +} diff --git a/gamesrv/slotspkg/slots/machine/feature.go b/gamesrv/slotspkg/slots/machine/feature.go new file mode 100644 index 0000000..e43c8d2 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/feature.go @@ -0,0 +1,49 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +// Feature implements intf.Feature +type Feature struct { + *shared.Feature + Machine *Machine +} + +func asFeatureIntf(m *Machine, f *shared.Feature) intf.Feature { + return &Feature{ + Feature: f, + Machine: m, + } +} + +// SetSeqID implements intf.Feature.SetSeqID +func (f *Feature) SetSeqID(seqID int64) intf.Feature { + f.Machine.AttachFeatureToFormation(f.Feature, seqID) + return f +} + +// SetWin implements intf.Feature.SetWin +func (f *Feature) SetWin(win int64) intf.Feature { + f.Feature.Win = win + return f +} + +// SetLifetime implements intf.Feature.SetLifetime +func (f *Feature) SetLifetime(lifetime int64) intf.Feature { + f.Feature.Lifetime = lifetime + return f +} + +// SetVisiable implements intf.Feature.SetVisiable +func (f *Feature) SetVisiable(visiable bool) intf.Feature { + f.Feature.Visiable = visiable + return f +} + +// SetImageable implements intf.Feature.SetImageable +func (f *Feature) SetImageable(imageable bool) intf.Feature { + f.Feature.Imageable = imageable + return f +} diff --git a/gamesrv/slotspkg/slots/machine/formation.go b/gamesrv/slotspkg/slots/machine/formation.go new file mode 100644 index 0000000..b5ef770 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/formation.go @@ -0,0 +1,289 @@ +package machine + +import ( + "github.com/mohae/deepcopy" + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/formation" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +// Formation implements intf.Formation +type Formation struct { + *shared.Formation + OriginFormation *formation.Formation + Machine *Machine +} + +func asFormationIntf(m *Machine, f *shared.Formation, o *formation.Formation) intf.Formation { + formation := &Formation{ + Formation: f, + OriginFormation: o, + Machine: m, + } + return formation +} + +// GetWin gets formation win in after spin +func (f *Formation) GetWin() int64 { + return f.Win +} + +// SetWin sets formation win in after spin +func (f *Formation) SetWin(win int64) intf.Formation { + f.Win = win + return f +} + +// GetInitSymbols gets origin symbols +func (f *Formation) GetInitSymbols() []int64 { + initSymbols := make([]int64, len(f.InitSymbols)) + copy(initSymbols, f.InitSymbols) + return initSymbols +} + +func (f *Formation) GetInitMatrixFormattedSymbols() [][]int64 { + return formation.FormatSymbols(f.InitSymbols, + f.OriginFormation.MatrixForm) +} + +// SetInitSymbols sets origin symbols +func (f *Formation) SetInitSymbols(symbols []int64) intf.Formation { + f.InitSymbols = symbols + return f +} + +func (f *Formation) SetInitFormattedSymbols(symbols [][]int64) intf.Formation { + f.InitSymbols = formation.DeformatSymbols(symbols) + return f +} + +// GetSymbols gets origin symbols +func (f *Formation) GetSymbols() []int64 { + symbols := make([]int64, len(f.OriginFormation.Symbols)) + copy(symbols, f.OriginFormation.Symbols) + return symbols +} + +// SetSymbols sets origin symbols +func (f *Formation) SetSymbols(symbols []int64) intf.Formation { + f.OriginFormation.Symbols = symbols + return f +} + +// GetReelFormattedSymbols gets origin symbols and places them into specific form +func (f *Formation) GetReelFormattedSymbols() [][]int64 { + return formation.FormatSymbols(f.OriginFormation.Symbols, + f.OriginFormation.ReelForm) +} + +// GetMatrixFormattedSymbols gets origin symbols and places them into specific form +func (f *Formation) GetMatrixFormattedSymbols() [][]int64 { + return formation.FormatSymbols(f.OriginFormation.Symbols, + f.OriginFormation.MatrixForm) +} + +// SetFormattedSymbols sets formed origin symbols +func (f *Formation) SetFormattedSymbols(symbols [][]int64) intf.Formation { + f.OriginFormation.Symbols = formation.DeformatSymbols(symbols) + return f +} + +// GetCheatSymbols gets cheat symbols +func (f *Formation) GetCheatSymbols() []int64 { + cheatSymbols := make([]int64, len(f.OriginFormation.CheatSymbols)) + copy(cheatSymbols, f.OriginFormation.CheatSymbols) + return cheatSymbols +} + +// SetCheatSymbols sets cheat symbols +func (f *Formation) SetCheatSymbols(symbols []int64) intf.Formation { + f.OriginFormation.CheatSymbols = symbols + return f +} + +// GetReelFormattedCheatSymbols gets cheat symbols and places them into specific form +func (f *Formation) GetReelFormattedCheatSymbols() [][]int64 { + return formation.FormatSymbols(f.OriginFormation.CheatSymbols, + f.OriginFormation.ReelForm) +} + +// SetFormattedCheatSymbols sets formed cheat symbols +func (f *Formation) SetFormattedCheatSymbols(symbols [][]int64) intf.Formation { + f.OriginFormation.CheatSymbols = formation.DeformatSymbols(symbols) + return f +} + +// GetDisplaySymbols gets display symbols +func (f *Formation) GetDisplaySymbols() []int64 { + displaySymbols := make([]int64, len(f.Formation.DisplaySymbols)) + copy(displaySymbols, f.Formation.DisplaySymbols) + return displaySymbols +} + +// SetDisplaySymbols sets display symbols +func (f *Formation) SetDisplaySymbols(symbols []int64) intf.Formation { + f.Formation.DisplaySymbols = symbols + return f +} + +// GetReelFormattedDisplaySymbols gets display symbols and places them into specific form +func (f *Formation) GetReelFormattedDisplaySymbols() [][]int64 { + return formation.FormatSymbols(f.Formation.DisplaySymbols, + f.OriginFormation.ReelForm) +} + +// SetFormattedDisplaySymbols sets formed origin symbols +func (f *Formation) SetFormattedDisplaySymbols(symbols [][]int64) intf.Formation { + f.Formation.DisplaySymbols = formation.DeformatSymbols(symbols) + return f +} + +// GetOriginDisplaySymbols gets display symbols +func (f *Formation) GetOriginDisplaySymbols() []int64 { + displaySymbols := make([]int64, len(f.OriginFormation.DisplaySymbols)) + copy(displaySymbols, f.OriginFormation.DisplaySymbols) + return displaySymbols +} + +// SetOriginDisplaySymbols sets display symbols +func (f *Formation) SetOriginDisplaySymbols(symbols []int64) intf.Formation { + f.OriginFormation.DisplaySymbols = symbols + return f +} + +// GetReelFormattedOriginDisplaySymbols gets display symbols and places them into specific form +func (f *Formation) GetReelFormattedOriginDisplaySymbols() [][]int64 { + return formation.FormatSymbols(f.OriginFormation.DisplaySymbols, + f.OriginFormation.ReelForm) +} + +// SetFormattedOriginDisplaySymbols sets formed origin symbols +func (f *Formation) SetFormattedOriginDisplaySymbols(symbols [][]int64) intf.Formation { + f.OriginFormation.DisplaySymbols = formation.DeformatSymbols(symbols) + return f +} + +// GetFinalSymbols gets origin symbols +func (f *Formation) GetFinalSymbols() []int64 { + finalSymbols := make([]int64, len(f.Formation.FinalSymbols)) + copy(finalSymbols, f.Formation.FinalSymbols) + return finalSymbols +} + +// SetFinalSymbols sets final symbols +func (f *Formation) SetFinalSymbols(symbols []int64) intf.Formation { + f.Formation.FinalSymbols = symbols + return f +} + +// GetMatrixFormattedFinalSymbols gets final symbols and places them into specific form +func (f *Formation) GetMatrixFormattedFinalSymbols() [][]int64 { + return formation.FormatSymbols(f.FinalSymbols, + f.OriginFormation.MatrixForm) +} + +// SetFormattedFinalSymbols sets formed final symbols +func (f *Formation) SetFormattedFinalSymbols(symbols [][]int64) intf.Formation { + f.Formation.FinalSymbols = formation.DeformatSymbols(symbols) + return f +} + +// GetLinkPositions gets link positions +func (f *Formation) GetLinkPositions() []*shared.LinkPositions { + return deepcopy.Copy(f.Formation.LinkPositions).([]*shared.LinkPositions) +} + +// SetLinkPositions sets link positions +func (f *Formation) SetLinkPositions(linkPositions []*shared.LinkPositions) intf.Formation { + f.Formation.LinkPositions = linkPositions + return f +} + +// CoordsToPosition converts row & col to pos +func (f *Formation) CoordsToPosition(row int64, col int64) int64 { + coords := formation.Coords{ + Row: row, + Col: col, + } + form := f.OriginFormation.FormationDesc.MatrixDesc.Form + return coords.ToPos(form) +} + +// PositionToCoords converts pos to row & col +func (f *Formation) PositionToCoords(position int64) (int64, int64) { + form := f.OriginFormation.FormationDesc.MatrixDesc.Form + coords := &formation.Coords{} + coords.FromPos(form, position) + + return coords.Row, coords.Col +} + +// GetLineSymbols gets line symbols +func (f *Formation) GetLineSymbols() [][]int64 { + return f.OriginFormation.LineSymbols +} + +// GetLinePays gets line pays +func (f *Formation) GetLinePays() []float64 { + return f.OriginFormation.LinePays +} + +// GetLineCount gets line count +func (f *Formation) GetLineCount() int64 { + return f.OriginFormation.FormationDesc.MatrixDesc.LineCount +} + +// GetLineCount gets all Lines +func (f *Formation) GetLineLines() [][]int64 { + return f.OriginFormation.FormationDesc.MatrixDesc.Lines +} + +// GetRandPositions gets RandPositions +func (f *Formation) GetRandPositions() []int64 { + return f.OriginFormation.RandPositions +} + +// GetReelSymbols gets ReelSymbols +func (f *Formation) GetReelSymbols(reelIndex int64, startIdx int64, size int64) []int64 { + if size == 0 { + return []int64{} + } + + reelDesc := f.OriginFormation.FormationDesc.ReelsDesc[int(reelIndex)] + length := int64(len(reelDesc.Reel)) + for startIdx < 0 { + startIdx += length + } + var symbols = make([]int64, 0) + for symbolIdx := startIdx; symbolIdx < startIdx+size; symbolIdx++ { + symbol := reelDesc.Reel[symbolIdx%length] + symbols = append(symbols, symbol) + } + return symbols +} +func (f *Formation) GetMatrixForm() []int64 { + return f.OriginFormation.MatrixForm +} +func (f *Formation) ResetRandSymbols(r *randx.Randx) { + f.OriginFormation.ResetRandSymbols(r) +} + +func (f *Formation) ResetRandSymbolsByIndex(r *randx.Randx) { + f.OriginFormation.ResetRandSymbolsByIndex(r) +} + +func (f *Formation) GetRewardInfo() []*shared.RewardInfo { + RewardInfo := make([]*shared.RewardInfo, len(f.Formation.RewardInfo)) + copy(RewardInfo, f.Formation.RewardInfo) + return RewardInfo +} +func (f *Formation) SetRewardInfo(ri []*shared.RewardInfo) { + f.Formation.RewardInfo = ri +} +func (f *Formation) GetNewNodeType() string { + return f.NewNodeType +} +func (f *Formation) SetNewNodeType(nodeType string) { + f.NewNodeType = nodeType +} diff --git a/gamesrv/slotspkg/slots/machine/machine.go b/gamesrv/slotspkg/slots/machine/machine.go new file mode 100644 index 0000000..7fef7d6 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine.go @@ -0,0 +1,58 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/player" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shell" + "mongo.games.com/game/gamesrv/slotspkg/slots/entity" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +// Machine is wrapper for entity +type Machine struct { + *entity.Entity +} + +// NewMachine creates a new machine with Spinner interface +func NewMachine(s *session.Session, theme string, shell *shell.Shell, isFree bool) intf.Spinner { + p := player.Get(s) + if theme == "" { + panic(errors.LeakTheme.ErrorWith(p.UID.Get())) + } + m := &Machine{} + m.Entity = entity.NewEntity(s, theme, m, shell, isFree) + m.Init() + m.Session.Set(key.SessionMachine, m) + return m +} + +// Node gets specific node +func (m *Machine) Node(nodeID int64) intf.Node { + return asNodeIntf(m, m.GetNode(nodeID)) +} + +// Cursor gets cursor node +func (m *Machine) Cursor() intf.Node { + return asNodeIntf(m, m.CursorNode()) +} + +// Root gets root node +func (m *Machine) Root() intf.Node { + return asNodeIntf(m, m.RootNode()) +} + +// Root gets root node +func (m *Machine) Next() intf.Node { + return asNodeIntf(m, m.NextNode()) +} + +// GetParentNode gets cursor node +func (m *Machine) Parent() intf.Node { + return asNodeIntf(m, m.ParentNode()) +} + +func (m *Machine) Ancestor() intf.Node { + return asNodeIntf(m, m.AncestorNode()) +} diff --git a/gamesrv/slotspkg/slots/machine/machine_callback.go b/gamesrv/slotspkg/slots/machine/machine_callback.go new file mode 100644 index 0000000..09286af --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_callback.go @@ -0,0 +1,107 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/reg" + "reflect" +) + +// OnInit is called after Init +func (m *Machine) OnInit() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnInit(m) + } +} + +// OnStepBegin is called on step initializing +func (m *Machine) OnStepBegin() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnStepBegin(m) + } +} + +// BeforeSpin is called before Spin +func (m *Machine) BeforeSpin() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + if m.CursorNode().ProgressValue == 0 && !m.CursorNode().Prepared { + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnEnterNode(m) + } + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).BeforeSpin(m) + } +} + +// BeforeDisplay is call before display +func (m *Machine) BeforeDisplay() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).BeforeDisplay(m) + } +} + +// AfterDisplay is call after display +func (m *Machine) AfterDisplay() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).AfterDisplay(m) + } +} + +// AfterSpin is called before Spin +func (m *Machine) AfterSpin() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).AfterSpin(m) + } + + if m.CursorNode().ProgressValue+1 >= m.CursorNode().ProgressMax { + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnLeaveNode(m) + } + } +} + +// OnStepEnd is called on step finalizing +func (m *Machine) OnStepEnd() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnStepEnd(m) + } +} + +// OnStay is called to do something out of normal step +func (m *Machine) OnStay() { + if _, ok := reg.Plugins[m.Theme]; !ok { + return + } + + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnStay(m) + } +} diff --git a/gamesrv/slotspkg/slots/machine/machine_master_custom.go b/gamesrv/slotspkg/slots/machine/machine_master_custom.go new file mode 100644 index 0000000..653ff31 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_master_custom.go @@ -0,0 +1,118 @@ +package machine + +import "reflect" + +// Custom gets specific feature's custom +func (m *Machine) Custom(id int64) interface{} { + return m.GetCustom(id) +} + +// CursorCustom gets the first feature's custom in specific type +// on current node +func (m *Machine) CursorCustom(v interface{}) interface{} { + featureID := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String())[0].ID + return m.GetCustom(featureID) +} + +// CursorCustoms gets all features' customs in specific type +// on cursor node +func (m *Machine) CursorCustoms(v interface{}) []interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + r = append(r, m.GetCustom(feature.ID)) + } + return r +} + +// CursorFormationCustom gets the first features' custom in specific type +// in specific formation on cursor node +func (m *Machine) CursorFormationCustom(seqID int64, v interface{}, +) interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, m.GetCustom(feature.ID)) + } + } + return r[0] +} + +// CursorFormationCustoms gets all features' customs in specific type +// in specific formation on cursor node +func (m *Machine) CursorFormationCustoms(seqID int64, v interface{}, +) []interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, m.GetCustom(feature.ID)) + } + } + return r +} + +// RootCustom gets the first feature's custom in specific type +// on root node +func (m *Machine) RootCustom(v interface{}) interface{} { + featureID := m.GetTypeFeatures(m.RootNode(), reflect.TypeOf(v).Elem().String())[0].ID + return m.GetCustom(featureID) +} + +// RootCustoms gets all features' customs in specific type +// on root node +func (m *Machine) RootCustoms(v interface{}) []interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.RootNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + r = append(r, m.GetCustom(feature.ID)) + } + return r +} + +// NodeCustom gets the first feature's custom in specific type +// on specific node +func (m *Machine) NodeCustom(nodeID int64, v interface{}) interface{} { + featureID := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String())[0].ID + return m.GetCustom(featureID) +} + +// NodeCustoms gets all features' customs in specific type +// on specific node +func (m *Machine) NodeCustoms(nodeID int64, v interface{}) []interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + r = append(r, m.GetCustom(feature.ID)) + } + return r +} + +// NodeFormationCustom gets the first feature's custom in specific type +// in specific formation on specific node +func (m *Machine) NodeFormationCustom(nodeID int64, seqID int64, v interface{}, +) interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, m.GetCustom(feature.ID)) + } + } + return r[0] +} + +// NodeFormationCustoms gets all features' customs in specific type +// in specific formation on specific node +func (m *Machine) NodeFormationCustoms(nodeID int64, seqID int64, v interface{}, +) []interface{} { + r := make([]interface{}, 0) + features := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, m.GetCustom(feature.ID)) + } + } + return r +} diff --git a/gamesrv/slotspkg/slots/machine/machine_master_data.go b/gamesrv/slotspkg/slots/machine/machine_master_data.go new file mode 100644 index 0000000..39c25b8 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_master_data.go @@ -0,0 +1,218 @@ +package machine + +import ( + "github.com/tomas-qstarrs/boost/cast" +) + +// Remove delete data associated with the key from machine storage +func (m *Machine) Remove(k any) { + delete(m.Data, cast.ToString(k)) +} + +// Set associates v with the key in machine storage +func (m *Machine) Set(k any, v any) { + m.Data[cast.ToString(k)] = v +} + +// Exists decides whether a key has associated v +func (m *Machine) Exists(k any) bool { + _, exists := m.Data[cast.ToString(k)] + return exists +} + +// Int returns the v associated with the key as a int. +func (m *Machine) Int(k any) int { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToInt(v) +} + +// Int8 returns the v associated with the key as a int8. +func (m *Machine) Int8(k any) int8 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToInt8(v) +} + +// Int16 returns the v associated with the key as a int16. +func (m *Machine) Int16(k any) int16 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToInt16(v) +} + +// Int32 returns the v associated with the key as a int32. +func (m *Machine) Int32(k any) int32 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToInt32(v) +} + +// Int64 returns the v associated with the key as a int64. +func (m *Machine) Int64(k any) int64 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToInt64(v) +} + +// Uint returns the v associated with the key as a uint. +func (m *Machine) Uint(k any) uint { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToUint(v) +} + +// Uint8 returns the v associated with the key as a uint8. +func (m *Machine) Uint8(k any) uint8 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToUint8(v) +} + +// Uint16 returns the v associated with the key as a uint16. +func (m *Machine) Uint16(k any) uint16 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToUint16(v) +} + +// Uint32 returns the v associated with the key as a uint32. +func (m *Machine) Uint32(k any) uint32 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToUint32(v) +} + +// Uint64 returns the v associated with the key as a uint64. +func (m *Machine) Uint64(k any) uint64 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToUint64(v) +} + +// Float32 returns the v associated with the key as a float32. +func (m *Machine) Float32(k any) float32 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToFloat32(v) +} + +// Float64 returns the v associated with the key as a int64. +func (m *Machine) Float64(k any) float64 { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return 0 + } + return cast.ToFloat64(v) +} + +// String returns the v associated with the key as a string. +func (m *Machine) String(k any) string { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return "" + } + return cast.ToString(v) +} + +// Bool returns the v associated with the key as a bool. +func (m *Machine) Bool(k any) bool { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return false + } + return cast.ToBool(v) +} + +// Value returns the v associated with the key as a any. +func (m *Machine) Value(k any) any { + v, ok := m.Data[cast.ToString(k)] + if !ok { + return nil + } + return v +} + +// State returns all machine state +func (m *Machine) State() map[string]any { + return m.Data +} + +// Restore machine state after reconnect +func (m *Machine) Restore(data map[string]any) { + m.Data = data +} + +// Clear releases all data related to current machine +func (m *Machine) Clear() { + m.Data = map[string]any{} +} + +// Incr increases v by 1 +func (m *Machine) Incr(k any) { + s := cast.ToString(k) + v, ok := m.Data[s] + if !ok { + m.Data[s] = 1 + return + } + + switch n := v.(type) { + case int: + n++ + m.Data[s] = n + case int8: + n++ + m.Data[s] = n + case int16: + n++ + m.Data[s] = n + case int32: + n++ + m.Data[s] = n + case int64: + n++ + m.Data[s] = n + case uint: + n++ + m.Data[s] = n + case uint8: + n++ + m.Data[s] = n + case uint16: + n++ + m.Data[s] = n + case uint32: + n++ + m.Data[s] = n + case uint64: + n++ + m.Data[s] = n + default: + m.Data[s] = 1 + } + + return +} diff --git a/gamesrv/slotspkg/slots/machine/machine_master_feature.go b/gamesrv/slotspkg/slots/machine/machine_master_feature.go new file mode 100644 index 0000000..a4701a1 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_master_feature.go @@ -0,0 +1,126 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "reflect" +) + +// Feature gets specific feature +func (m *Machine) Feature(featureID int64) intf.Feature { + return asFeatureIntf(m, m.GetFeature(featureID)) +} + +// CursorFeature gets the first feature in specific type on cursor node +func (m *Machine) CursorFeature(v interface{}) intf.Feature { + return asFeatureIntf(m, m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String())[0]) +} + +// CursorFeatures gets all features in specific type on cursor node +func (m *Machine) CursorFeatures(v interface{}) []intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + r = append(r, asFeatureIntf(m, feature)) + } + return r +} + +// CursorFormationFeature gets the first feature in specific type +// in specific formation on cursor node +func (m *Machine) CursorFormationFeature(seqID int64, v interface{}, +) intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, asFeatureIntf(m, feature)) + } + } + return r[0] +} + +// CursorFormationFeatures gets all features in specific type +// in specific formation on cursor node +func (m *Machine) CursorFormationFeatures(seqID int64, v interface{}) []intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.CursorNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, asFeatureIntf(m, feature)) + } + } + return r +} + +// RootFeature gets the first feature in specific type on root node +func (m *Machine) RootFeature(v interface{}) intf.Feature { + return asFeatureIntf(m, m.GetTypeFeatures(m.RootNode(), reflect.TypeOf(v).Elem().String())[0]) +} + +// RootFeatures gets all features in specific type on root node +func (m *Machine) RootFeatures(v interface{}) []intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.RootNode(), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + r = append(r, asFeatureIntf(m, feature)) + } + return r +} + +// NodeFeature gets the first feature in specific type on specific node +func (m *Machine) NodeFeature(nodeID int64, v interface{}) intf.Feature { + return asFeatureIntf(m, m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String())[0]) +} + +// NodeFeatures gets all features in specific type on specific node +func (m *Machine) NodeFeatures(nodeID int64, v interface{}) []intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + r = append(r, asFeatureIntf(m, feature)) + } + return r +} + +// NodeFormationFeature gets the first feature in specific type +// in specific formation on specific node +func (m *Machine) NodeFormationFeature(nodeID int64, seqID int64, v interface{}, +) intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, asFeatureIntf(m, feature)) + } + } + return r[0] +} + +// NodeFormationFeatures gets all feature in specific type +// in specific formation on specific node +func (m *Machine) NodeFormationFeatures(nodeID int64, seqID int64, v interface{}, +) []intf.Feature { + r := make([]intf.Feature, 0) + features := m.GetTypeFeatures(m.GetNode(nodeID), reflect.TypeOf(v).Elem().String()) + for _, feature := range features { + if feature.SeqID == seqID { + r = append(r, asFeatureIntf(m, feature)) + } + } + return r +} + +// AddCursorFeature adds new feature to cursor node +func (m *Machine) AddCursorFeature(v interface{}) intf.Feature { + return asFeatureIntf(m, m.AddFeatureCustom(m.AddFeature(m.CursorNode()), v)) +} + +// AddRootFeature adds new feature to root node +func (m *Machine) AddRootFeature(v interface{}) intf.Feature { + return asFeatureIntf(m, m.AddFeatureCustom(m.AddFeature(m.RootNode()), v)) +} + +// AddNodeFeature adds new feature to specific node +func (m *Machine) AddNodeFeature(nodeID int64, v interface{}) intf.Feature { + return asFeatureIntf(m, m.AddFeatureCustom(m.AddFeature(m.GetNode(nodeID)), v)) +} diff --git a/gamesrv/slotspkg/slots/machine/machine_master_formation.go b/gamesrv/slotspkg/slots/machine/machine_master_formation.go new file mode 100644 index 0000000..e717ea0 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_master_formation.go @@ -0,0 +1,79 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/slots/formation" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +// CursorFormation gets the first formation on cursor node +func (m *Machine) CursorFormation() intf.Formation { + return asFormationIntf(m, m.GetFormation(m.NodeTree.Cursor, 1), + m.OriginFormations[0]) +} + +// CursorFormations gets all formations on cursor node +func (m *Machine) CursorFormations() []intf.Formation { + formations := make([]intf.Formation, 0) + for _, cliFormation := range m.GetFormations(m.NodeTree.Cursor) { + formations = append(formations, asFormationIntf(m, cliFormation, + m.OriginFormations[cliFormation.SeqID-1])) + } + return formations +} + +// CursorSeqFormation gets specific formation on cursor node +func (m *Machine) CursorSeqFormation(seqID int64) intf.Formation { + return asFormationIntf(m, m.GetFormation(m.NodeTree.Cursor, seqID), + m.OriginFormations[seqID-1]) +} + +// NodeFormation gets the first formation on specific node +func (m *Machine) NodeFormation(nodeID int64) intf.Formation { + if nodeID == m.NodeTree.Cursor { + return asFormationIntf(m, m.GetFormation(nodeID, 1), m.OriginFormations[0]) + } + nodeDesc := m.GetNodeDesc(m.GetNode(nodeID)) + originFormation, err := formation.NewFormation(nodeDesc, 1) + if err != nil { + panic(err) + } + return asFormationIntf(m, m.GetFormation(nodeID, 1), originFormation) +} + +// NodeFormations gets all formations on all nodes +func (m *Machine) NodeFormations(nodeID int64) []intf.Formation { + if nodeID == m.NodeTree.Cursor { + formations := make([]intf.Formation, 0) + for _, cliFormation := range m.GetFormations(nodeID) { + formations = append(formations, asFormationIntf(m, cliFormation, + m.OriginFormations[cliFormation.SeqID-1])) + } + return formations + } + nodeDesc := m.GetNodeDesc(m.GetNode(nodeID)) + formations := make([]intf.Formation, 0) + for _, cliFormation := range m.GetFormations(nodeID) { + originFormation, err := formation.NewFormation(nodeDesc, cliFormation.SeqID) + if err != nil { + panic(err) + } + formations = append(formations, asFormationIntf(m, cliFormation, + originFormation)) + } + return formations +} + +// NodeSeqFormation gets specific formation on specific node +func (m *Machine) NodeSeqFormation(nodeID int64, seqID int64) intf.Formation { + if nodeID == m.NodeTree.Cursor { + return asFormationIntf(m, m.GetFormation(nodeID, seqID), + m.OriginFormations[seqID-1]) + } + nodeDesc := m.GetNodeDesc(m.GetNode(nodeID)) + originFormation, err := formation.NewFormation(nodeDesc, seqID) + if err != nil { + panic(err) + } + return asFormationIntf(m, m.GetFormation(nodeID, seqID), + originFormation) +} diff --git a/gamesrv/slotspkg/slots/machine/machine_master_misc.go b/gamesrv/slotspkg/slots/machine/machine_master_misc.go new file mode 100644 index 0000000..49be731 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_master_misc.go @@ -0,0 +1,126 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/formation" +) + +// Bet gets bet of lastest play +func (m *Machine) Bet() int64 { + bet := m.CursorNode().Bet + if bet == 0 { + panic(errors.BetIsZero.ErrorWith(m.Theme, m.CursorNode().Type)) + } + return bet +} + +func (m *Machine) SetRatio(ratioType int64, ratio float64) { + m.NodeTree.Act.RatioType = ratioType + m.NodeTree.Act.Ratio = ratio +} + +func (m *Machine) BetSizeIndex() int64 { + return m.NodeTree.Act.BetSizeIndex +} + +func (m *Machine) BetLevelIndex() int64 { + return m.NodeTree.Act.BetLevelIndex +} +func (m *Machine) BetLineIndex() int64 { + return m.NodeTree.Act.BetLineIndex +} +func (m *Machine) BetSizes() []int64 { + return m.MachineDesc.BetSizes() +} +func (m *Machine) BetLevels() []int64 { + return m.MachineDesc.BetLevels() +} +func (m *Machine) BetLines() []int64 { + return m.MachineDesc.BetLines() +} +func (m *Machine) BetChangeList() []float64 { + return m.MachineDesc.BetChangeList() +} +func (m *Machine) Choice() int64 { + if m.UserData().ForceChoice > 0 { + return m.UserData().ForceChoice + } + return m.NodeTree.Act.Choice +} + +func (m *Machine) Stay() bool { + return m.NodeTree.Act.Stay +} + +func (m *Machine) Version() int64 { + return m.NodeTree.Act.Version +} + +func (m *Machine) Ratio() float64 { + return m.NodeTree.Act.Ratio +} + +func (m *Machine) Mode() string { + return m.NodeTree.Act.Mode +} + +func (m *Machine) Vector() []int64 { + return m.NodeTree.Act.Vector +} + +func (m *Machine) RandVector() *shared.RandVector { + return m.NodeTree.RandVector +} + +// Class gets class of cursor node +func (m *Machine) Class() int64 { + return m.NodeDesc.Class +} + +// SetSummary sets feature summary to simulator +func (m *Machine) SetSummary(s string) { + m.Set("Summary", s) +} + +func (m *Machine) TryLinkMatrixSymbols(seqID int64, matSymbols [][]int64) ([]*shared.LinkPositions, [][]int64, []float64) { + symbols := formation.DeformatSymbols(matSymbols) + return m.TryLink(seqID, symbols) +} + +func (m *Machine) TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions, [][]int64, []float64) { + f, err := formation.NewFormation(m.NodeDesc, seqID) + if err != nil { + panic(err) + } + f.Symbols = symbols + f.Link() + + linkPositions := make([]*shared.LinkPositions, 0) + for _, positions := range f.LinkPositions { + linkPositions = append(linkPositions, &shared.LinkPositions{ + Positions: positions, + }) + } + + return linkPositions, f.LineSymbols, f.LinePays +} + +func (m *Machine) TryRand(nodeType string, seqID int64) []int64 { + nodeDesc := m.NewNodeDescWithNodeType(nodeType) + nodeDesc.FormationSeqsDesc = nodeDesc.GetFormationSeqDescs(nodeType) + f, err := formation.NewFormation(nodeDesc, seqID) + if err != nil { + panic(err) + } + f.Rand(m.Randx()) + return f.Symbols +} + +func (m *Machine) UID() int64 { + return m.Player.UID.Get() +} + +func (m *Machine) Round() int64 { + return m.NodeTree.Round +} diff --git a/gamesrv/slotspkg/slots/machine/machine_master_node.go b/gamesrv/slotspkg/slots/machine/machine_master_node.go new file mode 100644 index 0000000..397ccdb --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_master_node.go @@ -0,0 +1,38 @@ +package machine + +import "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + +// AddNode adds node to specific node +func (m *Machine) AddNode(nodeID int64, nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.AddChildNode(nodeID, nodeType, progress)) +} + +// AddNodeOnCursor adds node to cursor node +func (m *Machine) AddNodeOnCursor(nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.AddChildNode(m.CursorNode().ID, nodeType, progress)) +} + +// AddNodeOnRoot adds node to root node +func (m *Machine) AddNodeOnRoot(nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.AddChildNode(m.RootNode().ID, nodeType, progress)) +} + +// AddNode adds node to specific node +func (m *Machine) AddNodeAtLeft(nodeID int64, nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.AddChildNodeAtLeft(nodeID, nodeType, progress)) +} + +// AddNodeOnCursor adds node to cursor node +func (m *Machine) AddNodeOnCursorAtLeft(nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.AddChildNodeAtLeft(m.CursorNode().ID, nodeType, progress)) +} + +// AddNodeOnRoot adds node to root node +func (m *Machine) AddNodeOnRootAtLeft(nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.AddChildNodeAtLeft(m.RootNode().ID, nodeType, progress)) +} + +// UpdateCursor2NewType update cursor node to new node must in OnStepBegin +func (m *Machine) UpdateCursor2NewType(nodeType string, progress int64) intf.Node { + return asNodeIntf(m, m.UpdateNode2NewType(m.Next().GetID(), nodeType, progress)) +} diff --git a/gamesrv/slotspkg/slots/machine/machine_spinner.go b/gamesrv/slotspkg/slots/machine/machine_spinner.go new file mode 100644 index 0000000..87897a9 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/machine_spinner.go @@ -0,0 +1,426 @@ +package machine + +import ( + "encoding/json" + "github.com/tomas-qstarrs/boost/mathx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/entity" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/reg" + "reflect" +) + +// Close serialize the machine +func (m *Machine) Close() *shared.NodeTree { + m.Serialize() + m.Session.Remove(key.SessionMachine) + return m.NodeTree +} + +// Close serialize the machine +func (m *Machine) PlayClose() *shared.NodeTree { + m.Serialize() + m.Session.Remove(key.SessionMachine) + return m.NodeTree +} + +// SyncLiteClose serialize the machine and transform into lite node tree for sync +func (m *Machine) SyncLiteClose() *shared.LiteNodeTree { + m.Serialize() + m.Session.Remove(key.SessionMachine) + + liteNodeTree := &shared.LiteNodeTree{ + Step: m.NodeTree.Step, + Cursor: m.NodeTree.Cursor, + Next: m.NodeTree.Next, + Closing: m.NodeTree.Closing, + Theme: m.Theme, + } + + liteNodeTree.Features = make([]*shared.LiteFeature, 0) + m.WalkTree(entity.WalkRootFirst, func(node *shared.Node) bool { + for _, feature := range node.Features { + switch node.ID { + case m.NodeTree.Cursor, m.NodeTree.Next, m.NodeTree.Root: + liteNodeTree.Features = append(liteNodeTree.Features, + &shared.LiteFeature{ + NodeID: feature.NodeID, + FormationID: feature.FormationID, + Type: feature.Type, + Custom: feature.Custom, + Win: feature.Win, + }) + } + } + + // Continue collecting. + return false + }) + + formationIDs := make([]int64, 0) + liteNodeTree.Formations = make([]*shared.LiteFormation, 0) + for _, formation := range m.NextNode().Formations { + formationIDs = append(formationIDs, formation.ID) + liteNodeTree.Formations = append(liteNodeTree.Formations, + &shared.LiteFormation{ + ID: formation.ID, + SpinType: formation.SpinType, + NodeType: formation.NodeType, + NodeID: formation.NodeID, + InitSymbols: formation.InitSymbols, + LinkPositions: formation.LinkPositions, + FinalSymbols: formation.FinalSymbols, + Win: formation.Win, + RandPositions: formation.RandPositions, + MatrixForm: formation.MatrixForm, + NewNodeType: formation.NewNodeType, + }) + } + for _, formation := range m.NodeTree.ImageFormations { + if mathx.In(formation.ID, formationIDs) { + continue + } + liteNodeTree.Formations = append(liteNodeTree.Formations, + &shared.LiteFormation{ + ID: formation.ID, + SpinType: formation.SpinType, + NodeType: formation.NodeType, + NodeID: formation.NodeID, + FinalSymbols: formation.FinalSymbols, + LinkPositions: formation.LinkPositions, + Win: formation.Win, + RandPositions: formation.RandPositions, + MatrixForm: formation.MatrixForm, + NewNodeType: formation.NewNodeType, + }) + } + + liteNodeTree.Nodes = make([]*shared.LiteNode, 0) + for _, node := range m.NodeTree.Nodes { + liteNodeTree.Nodes = append(liteNodeTree.Nodes, + &shared.LiteNode{ + ID: node.ID, + Parent: node.Parent, + Children: node.Children, + Type: node.Type, + SpinType: node.SpinType, + Win: node.Win, + TotalWin: node.TotalWin, + ChildrenTotalWin: node.ChildrenTotalWin, + ProgressValue: node.ProgressValue, + ProgressMax: node.ProgressMax, + Bet: node.Bet, + }) + } + + return liteNodeTree +} + +// PlayLiteClose serialize the machine and transform into lite node tree for play +func (m *Machine) PlayLiteClose() *shared.LiteNodeTree { + m.Serialize() + m.Session.Remove(key.SessionMachine) + + liteNodeTree := &shared.LiteNodeTree{ + Step: m.NodeTree.Step, + Cursor: m.NodeTree.Cursor, + Next: m.NodeTree.Next, + Closing: m.NodeTree.Closing, + BetCoin: m.NodeTree.BetCoin, + Theme: m.Theme, + } + + liteNodeTree.Features = make([]*shared.LiteFeature, 0) + m.WalkTree(entity.WalkRootFirst, func(node *shared.Node) bool { + for _, feature := range node.Features { + if !feature.Visiable { + // Prune invisiable feature. + continue + } + switch node.ID { + case m.NodeTree.Cursor, m.NodeTree.Next, m.NodeTree.Root: + liteNodeTree.Features = append(liteNodeTree.Features, + &shared.LiteFeature{ + NodeID: feature.NodeID, + FormationID: feature.FormationID, + Type: feature.Type, + Custom: feature.Custom, + Win: feature.Win, + }) + } + } + + // Continue collecting. + return false + }) + + formationIDs := make([]int64, 0) + liteNodeTree.Formations = make([]*shared.LiteFormation, 0) + for _, formation := range m.CursorNode().Formations { + formationIDs = append(formationIDs, formation.ID) + liteNodeTree.Formations = append(liteNodeTree.Formations, + &shared.LiteFormation{ + ID: formation.ID, + SpinType: formation.SpinType, + NodeType: formation.NodeType, + NodeID: formation.NodeID, + DisplaySymbols: formation.DisplaySymbols, + FinalSymbols: formation.FinalSymbols, + LinkPositions: formation.LinkPositions, + Win: formation.Win, + RandPositions: formation.RandPositions, + MatrixForm: formation.MatrixForm, + RewardInfo: formation.RewardInfo, + NewNodeType: formation.NewNodeType, + }) + } + for _, formation := range m.NextNode().Formations { + if mathx.In(formation.ID, formationIDs) { + continue + } + liteNodeTree.Formations = append(liteNodeTree.Formations, + &shared.LiteFormation{ + ID: formation.ID, + SpinType: formation.SpinType, + NodeType: formation.NodeType, + NodeID: formation.NodeID, + InitSymbols: formation.InitSymbols, + LinkPositions: formation.LinkPositions, + FinalSymbols: formation.FinalSymbols, + Win: formation.Win, + RandPositions: formation.RandPositions, + MatrixForm: formation.MatrixForm, + RewardInfo: formation.RewardInfo, + NewNodeType: formation.NewNodeType, + }) + } + + liteNodeTree.Nodes = make([]*shared.LiteNode, 0) + for _, node := range m.NodeTree.Nodes { + liteNodeTree.Nodes = append(liteNodeTree.Nodes, + &shared.LiteNode{ + ID: node.ID, + Parent: node.Parent, + Children: node.Children, + Type: node.Type, + SpinType: node.SpinType, + Win: node.Win, + TotalWin: node.TotalWin, + ChildrenTotalWin: node.ChildrenTotalWin, + ProgressValue: node.ProgressValue, + ProgressMax: node.ProgressMax, + Bet: node.Bet, + }) + } + + return liteNodeTree +} + +// QuitLiteClose serialize the machine +func (m *Machine) QuitLiteClose() *shared.LiteNodeTree { + m.Serialize() + m.Session.Remove(key.SessionMachine) + + liteNodeTree := &shared.LiteNodeTree{ + Step: m.NodeTree.Step, + Cursor: m.NodeTree.Cursor, + Next: m.NodeTree.Next, + Closing: m.NodeTree.Closing, + Theme: m.Theme, + } + + liteNodeTree.Features = make([]*shared.LiteFeature, 0) + m.WalkTree(entity.WalkRootFirst, func(node *shared.Node) bool { + for _, feature := range node.Features { + if !feature.Visiable { + // Prune invisiable feature. + continue + } + switch node.ID { + case m.NodeTree.Cursor, m.NodeTree.Next, m.NodeTree.Root: + liteNodeTree.Features = append(liteNodeTree.Features, + &shared.LiteFeature{ + NodeID: feature.NodeID, + FormationID: feature.FormationID, + Type: feature.Type, + Custom: feature.Custom, + Win: feature.Win, + }) + } + } + + // Continue collecting. + return false + }) + + formationIDs := make([]int64, 0) + liteNodeTree.Formations = make([]*shared.LiteFormation, 0) + for _, formation := range m.NextNode().Formations { + formationIDs = append(formationIDs, formation.ID) + liteNodeTree.Formations = append(liteNodeTree.Formations, + &shared.LiteFormation{ + ID: formation.ID, + SpinType: formation.SpinType, + NodeType: formation.NodeType, + NodeID: formation.NodeID, + InitSymbols: formation.InitSymbols, + LinkPositions: formation.LinkPositions, + FinalSymbols: formation.FinalSymbols, + Win: formation.Win, + RandPositions: formation.RandPositions, + NewNodeType: formation.NewNodeType, + }) + } + for _, formation := range m.NodeTree.ImageFormations { + if mathx.In(formation.ID, formationIDs) { + continue + } + liteNodeTree.Formations = append(liteNodeTree.Formations, + &shared.LiteFormation{ + ID: formation.ID, + SpinType: formation.SpinType, + NodeType: formation.NodeType, + NodeID: formation.NodeID, + FinalSymbols: formation.FinalSymbols, + LinkPositions: formation.LinkPositions, + Win: formation.Win, + RandPositions: formation.RandPositions, + NewNodeType: formation.NewNodeType, + }) + } + + liteNodeTree.Nodes = make([]*shared.LiteNode, 0) + for _, node := range m.NodeTree.Nodes { + liteNodeTree.Nodes = append(liteNodeTree.Nodes, + &shared.LiteNode{ + ID: node.ID, + Parent: node.Parent, + Children: node.Children, + Type: node.Type, + SpinType: node.SpinType, + Win: node.Win, + TotalWin: node.TotalWin, + ChildrenTotalWin: node.ChildrenTotalWin, + ProgressValue: node.ProgressValue, + ProgressMax: node.ProgressMax, + Bet: node.Bet, + }) + } + + return liteNodeTree +} + +// GetNodeTree returns raw node tree +func (m *Machine) GetNodeTree() *shared.NodeTree { + return m.NodeTree +} + +// Play plays once +func (m *Machine) Play(act *shared.Act) { + m.UpdateAct(act) + + if m.NodeTree.Act.Stay { + m.Stay() + } else { + m.Step() + } +} + +// Summary is called on simulator summary +func (m *Machine) Summary() string { + if _, ok := reg.Plugins[m.Theme]; !ok { + return "" + } + for _, t := range reg.Plugins[m.Theme] { + reflect.New(t.Elem()).Interface().(intf.Plugin).OnSummary(m) + } + return m.String("Summary") +} + +// GetSymbolLinkPays passes formation symbol link pay info to simulator +func (m *Machine) GetSymbolLinkPays() []map[int64]map[int64]float64 { + symbolLinkPays := make([]map[int64]map[int64]float64, 0) + for _, originFormation := range m.OriginFormations { + symbolLinkPays = append(symbolLinkPays, originFormation.SymbolLinkPay) + } + return symbolLinkPays +} + +// CursorType gets cursor node type +func (m *Machine) CursorType() string { + return m.CursorNode().Type +} + +// NextType gets next node type +func (m *Machine) NextType() string { + return m.NextNode().Type +} + +// ParentType gets parent node type +func (m *Machine) ParentType() string { + return m.ParentNode().Type +} + +// AncestorType gets ancestor node type +func (m *Machine) AncestorType() string { + return m.AncestorNode().Type +} + +func (m *Machine) UserData() *shared.UserData { + return m.NodeTree.UserData +} + +func (m *Machine) GetVector(minRatio, maxRatio float64, isForceWin bool) (int64, []int64) { + return m.MachineDesc.GetVector(m.Choice(), minRatio, maxRatio, isForceWin) +} + +func (m *Machine) GetDisplaySymbolsListString() string { + var dispaySymbolsList [][]int64 + for _, formation := range m.CursorNode().Formations { + dispaySymbolsList = append(dispaySymbolsList, formation.DisplaySymbols) + } + dispaySymbolsListBytes, err := json.Marshal(dispaySymbolsList) + if err != nil { + panic(err) + } + return string(dispaySymbolsListBytes) +} + +func (m *Machine) GetFinalSymbolsListString() string { + var finalSymbolsList [][]int64 + for _, formation := range m.CursorNode().Formations { + finalSymbolsList = append(finalSymbolsList, formation.FinalSymbols) + } + finalSymbolsListBytes, err := json.Marshal(finalSymbolsList) + if err != nil { + panic(err) + } + return string(finalSymbolsListBytes) +} + +func (m *Machine) GetFeaturesString() string { + var features []string + m.WalkTree(entity.WalkRootFirst, func(node *shared.Node) bool { + for _, feature := range node.Features { + if !feature.Visiable { + continue + } + + if mathx.In(feature.Type, features) { + continue + } + + features = append(features, feature.Type) + } + + return false + }) + + featuresBytes, err := json.Marshal(features) + if err != nil { + panic(err) + } + + return string(featuresBytes) +} diff --git a/gamesrv/slotspkg/slots/machine/node.go b/gamesrv/slotspkg/slots/machine/node.go new file mode 100644 index 0000000..9d9aa72 --- /dev/null +++ b/gamesrv/slotspkg/slots/machine/node.go @@ -0,0 +1,56 @@ +package machine + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/goserver/core/logger" +) + +// Node implements intf.Node +type Node struct { + *shared.Node + Machine *Machine +} + +func asNodeIntf(m *Machine, n *shared.Node) *Node { + return &Node{ + Node: n, + Machine: m, + } +} + +// SetBet implements intf.Node.SetBet +func (n *Node) SetBet(bet int64) intf.Node { + if n.GetID() == n.Machine.Cursor().GetID() { + logger.Logger.Warnf("It's too late to set bet in theme:%s, node type:%s", + n.Machine.Theme, n.Machine.Cursor().GetType()) + } + n.ForceBet = bet + n.Bet = bet + return n +} + +// AddPrepare implements intf.Node.AddPrepare +func (n *Node) AddPrepare() intf.Node { + n.NeedPrepare = true + return n +} + +func (n *Node) GetFormationWin() int64 { + var win int64 + for _, formation := range n.Formations { + win += formation.Win + } + return win +} + +func (n *Node) GetFeatureWin() int64 { + var featureWin int64 + for _, feature := range n.Features { + featureWin += feature.Win + } + return featureWin +} +func (n *Node) GetNoBase() bool { + return n.NoBase +} diff --git a/gamesrv/slotspkg/slots/playasrecorder.go b/gamesrv/slotspkg/slots/playasrecorder.go new file mode 100644 index 0000000..aaaa620 --- /dev/null +++ b/gamesrv/slotspkg/slots/playasrecorder.go @@ -0,0 +1,91 @@ +package slots + +import ( + "github.com/tomas-qstarrs/boost/cast" + "github.com/tomas-qstarrs/boost/randx" + "math" + "math/rand" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/machine" +) + +func PlayAsRecorder(s *session.Session, betSizeIndex, betLevelIndex, betLineIndex int64) (r *shared.RecorderResult) { + r = &shared.RecorderResult{} + + var m intf.Spinner + genMachine := func() { + m = machine.NewMachine(s, "s.Theme", DataSet(s).Shell, false) + } + play := func() bool { + var vectorIndex int64 + var vector []int64 + act := &shared.Act{ + BetSizeIndex: betSizeIndex, + BetLevelIndex: betLevelIndex, + BetLineIndex: betLineIndex, + Vector: vector, + Mode: key.MachineModeRecorder, + VectorIndex: vectorIndex, + } + + genMachine() + + m.Play(act) + + for m.Next().GetType() != key.BaseSpin { + m.Play(act) + } + + //if m.TotalBet() == 0 { + // r.Poor = true + // return false + //} + return true + } + update := func() { + r.VectorType = m.RandVector().VectorType + r.VectorIndex = m.RandVector().VectorIndex + r.Vector = m.RandVector().Vector + r.ExpectedWinCoin = m.TotalWin() + r.ExpectedBetCoin = m.TotalBet() + r.SkipWinCheck = cast.ToBool(m.Value(key.MachineSkipWinCheck)) + + //p := player.Get(s) + //if isFree { + // //r.NewPoolValue = pool.Service(ServiceName(), s.Branch()).Get() + // //r.OldPoolValue = r.NewPoolValue + //} else { + // //betCoin := m.GetBetCoin() + // //win := m.TotalWin() + // //r.ReservePump = int64(float64(betCoin.GetRechargeCoin()) * DataSet(s).GetReservePumpRatio()) + // //delta := betCoin.GetRechargeCoin() - win - r.ReservePump + // //pool.Service(ServiceName(), s.Branch()).Inc(delta) + // + // //p.AddPersonalPool(s, betCoin, win) + // + // //r.NewPoolValue = pool.Service(ServiceName(), s.Branch()).Get() // 非精确值 TODO + // //r.OldPoolValue = r.NewPoolValue - delta + //} + } + if !play() { + return + } + update() + return +} +func NewPlayAsRecorder(s *session.Session) (r *shared.RecorderResult) { + r = &shared.RecorderResult{} + r.VectorIndex = 0 + r.Vector = []int64{rand.NewSource(randx.Int63n(math.MaxInt64)).Int63()} + //num := randx.Intn(100) + //if num < 20 { + // r.PlayMode = key.PlayModeVector + //} else if num < 60 { + // r.PlayMode = key.PlayModeClass + //} + //r.PlayMode = key.PlayModeClass + return +} diff --git a/gamesrv/slotspkg/slots/plugin/cashmania/base.go b/gamesrv/slotspkg/slots/plugin/cashmania/base.go new file mode 100644 index 0000000..ee73b7e --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/cashmania/base.go @@ -0,0 +1,279 @@ +package cashmania + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +type PluginBase struct { + generic.PluginBase +} + +// 特性数据 +type CustomMidInfo struct { + // 本次的symbol + ItemId int64 + // FreeSpin次数 + FreeSpinCount int64 + // 倍乘多少倍 + Multi int64 +} + +type CustomNudge struct { + // 本次的symbol + ItemId int64 +} + +type CustomRespin struct { + // 本次的symbol + ItemId int64 +} +type CustomFortune struct { + ForceRound int64 `json:"fr"` //第n次 +} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { + return key.CashMania +} + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &CustomMidInfo{}, + &CustomNudge{}, + &CustomRespin{}, + &Special{}, + &CustomFortune{}) +} + +// OnStepBegin is called on initializing a step +func (p *PluginBase) OnStepBegin(m intf.Master) { + +} + +func (p *PluginBase) BeforeDisplay(m intf.Master) { + switch m.Cursor().GetType() { + case key.BaseSpin: + p.changeItem(m, false) + case key.FreeSpin: + p.changeItem(m, true) + } + +} + +func (p *PluginBase) AfterDisplay(m intf.Master) { + isFreeSpin := m.Cursor().GetType() == key.FreeSpin + cursorFormation := m.CursorFormation() + symbols := cursorFormation.GetSymbols() + if m.Bool("Nudge") { + //todo 如果当前是nudge + if m.Bool("NudgeDown") { + symbols[9] = symbols[8] + symbols[8] = symbols[7] + symbols[7] = symbols[6] + symbols[6] = symbols[5] + symbols[5] = Descx(m).RandomMidItems(isFreeSpin, 1)[0] + m.Remove("NudgeDown") + } else if m.Bool("NudgeUp") { + symbols[5] = symbols[6] + symbols[6] = symbols[7] + symbols[7] = symbols[8] + symbols[8] = symbols[9] + symbols[9] = Descx(m).RandomMidItems(isFreeSpin, 1)[0] + m.Remove("NudgeUp") + } + m.Remove("Nudge") + } else if m.Bool("Respin") { + //todo 如果当前是respin + if m.Int64("respinsymbols") > 0 { + symbols[2] = m.Int64("respinsymbols") + symbols[12] = m.Int64("respinsymbols") + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + m.Remove("respinsymbols") + } else if m.Bool("respinnohit") { + //生成左右不相同 中间有图标的不中奖结果 + p.Set2And12(m, isFreeSpin, symbols) + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + m.Remove("respinnohit") + } + m.Remove("Respin") + } + cursorFormation.SetSymbols(symbols) +} + +func (p *PluginBase) AfterSpin(m intf.Master) { + switch m.Cursor().GetType() { + case key.BaseSpin: + p.checkMid(m, false) + case key.FreeSpin: + p.checkMid(m, true) + } +} + +func (p *PluginBase) Nudge(m intf.Master, symbols []int64) { + m.Set("Nudge", true) + if m.Randx().PR(0.5) { + //向下 + symbols[5] = symbols[6] + symbols[6] = symbols[7] + symbols[7] = symbols[8] + symbols[8] = symbols[9] + symbols[9] = 200 + m.Set("NudgeDown", true) + } else { + //向上 + symbols[9] = symbols[8] + symbols[8] = symbols[7] + symbols[7] = symbols[6] + symbols[6] = symbols[5] + symbols[5] = 200 + m.Set("NudgeUp", true) + } +} + +// 获取特性数据 +func (p *PluginBase) getCustomFortune(m intf.Master) *CustomFortune { + customFortune := new(CustomFortune) + if len(m.CursorCustoms(customFortune)) == 0 { + m.AddCursorFeature(customFortune) + } + return m.CursorCustom(customFortune).(*CustomFortune) +} +func (p *PluginBase) changeItem(m intf.Master, isFreeSpin bool) { + curFormation := m.CursorFormation() + symbols := curFormation.GetSymbols() + isWin := Descx(m).CheckWin(isFreeSpin) + + if isFreeSpin { + Fortune := p.getCustomFortune(m) + if Fortune.ForceRound == m.GetProgressValue() { + isWin = true + } + } + isNudge, isReSpin := Descx(m).GetNudgeAndReSpin(isWin) + if isWin { + itemId := Descx(m).GetWinItem(isFreeSpin) + symbols[2] = itemId + symbols[12] = itemId + + midItemId := Descx(m).GetWinMidItem(isFreeSpin) + symbols[7] = midItemId + + p.RandomItemsByMid(m, isFreeSpin, symbols, 5, 9) + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + //base 触发nudge 中奖 + if isNudge { + p.Nudge(m, symbols) + } else if isReSpin { + //respin 触发respin 中奖 + m.Set("Respin", true) + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + p.Set2And12(m, isFreeSpin, symbols) + m.Set("respinsymbols", itemId) + } + } else { + //base 触发nudge not hit + if isNudge { + leftRightItemId := Descx(m).RandomItems(isFreeSpin, 1)[0] + symbols[2] = leftRightItemId + symbols[12] = leftRightItemId + + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + p.RandomItemsByMid(m, isFreeSpin, symbols, 6, 8) + } else if isReSpin { + m.Set("Respin", true) + //生成左右不相同 中间有图标的不中奖结果 + p.RandomItemsByMid(m, isFreeSpin, symbols, 5, 7, 9) + p.Set2And12(m, isFreeSpin, symbols) + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + m.Set("respinnohit", true) + } else { + //随机0-2列中间有图标 + hit := m.Randx().Int63n(3) + switch hit { + case 0: + //中间没有图标 + p.RandomItemsByOther(m, isFreeSpin, symbols, 1, 3, 11, 13) + p.RandomItemsByMid(m, isFreeSpin, symbols, 6, 8) + case 1: + //中间一个图标 然后随机列的位置 + idx := m.Randx().Int63n(3) + 1 + if idx == 1 { + //第一列中间出 + //0,2,4,6,8,11,13 + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 2, 4, 11, 13) + p.RandomItemsByMid(m, isFreeSpin, symbols, 6, 8) + } else if idx == 2 { + //第二列中间出 + //1,3,5,7,9,11,13 + p.RandomItemsByOther(m, isFreeSpin, symbols, 1, 3, 11, 13) + p.RandomItemsByMid(m, isFreeSpin, symbols, 5, 7, 9) + } else if idx == 3 { + //第三列中间出 + //1,3,6,8,10,12,14 + p.RandomItemsByOther(m, isFreeSpin, symbols, 1, 3, 10, 12, 14) + p.RandomItemsByMid(m, isFreeSpin, symbols, 6, 8) + } + case 2: + //两列出图标 随机一列不出 + notidx := m.Randx().Int63n(3) + 1 + if notidx == 1 { + //第一列中间不出 + //1,3,5,7,9,10,12,14 + p.RandomItemsByOther(m, isFreeSpin, symbols, 1, 3, 10, 12, 14) + p.RandomItemsByMid(m, isFreeSpin, symbols, 5, 7, 9) + } else if notidx == 2 { + //第二列中间不出 + //0,2,4,6,8,10,12,14 + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 4, 10, 14) + p.Set2And12(m, isFreeSpin, symbols) + p.RandomItemsByMid(m, isFreeSpin, symbols, 6, 8) + } else if notidx == 3 { + //第三列中间不出 + //0,2,4,5,7,9,11,13 + p.RandomItemsByOther(m, isFreeSpin, symbols, 0, 2, 4, 11, 13) + p.RandomItemsByMid(m, isFreeSpin, symbols, 5, 7, 9) + } + } + } + } + curFormation.SetSymbols(symbols) +} +func (p *PluginBase) Set2And12(m intf.Master, isFreeSpin bool, symbols []int64) { + items := Descx(m).RandomTwoDifItem(isFreeSpin) + symbols[2] = items[0] + symbols[12] = items[1] +} + +func (p *PluginBase) checkMid(m intf.Master, isFreeSpin bool) { + curFormation := m.CursorFormation() + win := curFormation.GetWin() + if win <= 0 { + return + } + + symbols := curFormation.GetSymbols() + multi, freeSpinCount := Descx(m).GetMidItemInfo(symbols[7]) + + //if multi > 1 { + // curFormation.SetWin(win * multi) + //} + + m.AddCursorFeature(&CustomMidInfo{ + ItemId: symbols[7], + Multi: multi, + FreeSpinCount: freeSpinCount, + }).SetWin(win * (multi - 1)) + + if freeSpinCount > 0 { + if isFreeSpin { + m.AddProgress(freeSpinCount) + m.AddCursorFeature(&generic.CustomExtraFreeSpin{ExtraTimes: freeSpinCount}).SetLifetime(1) + } else { + ForceRound := m.Randx().Int63n(freeSpinCount) + m.AddNodeFeature(m.AddNodeOnCursor(key.FreeSpin, freeSpinCount).GetID(), &CustomFortune{ForceRound: ForceRound}) + } + } +} diff --git a/gamesrv/slotspkg/slots/plugin/cashmania/common.go b/gamesrv/slotspkg/slots/plugin/cashmania/common.go new file mode 100644 index 0000000..d9bbe15 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/cashmania/common.go @@ -0,0 +1,16 @@ +package cashmania + +import "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + +func (p *PluginBase) RandomItemsByMid(m intf.Master, isFreeSpin bool, symbols []int64, poss ...int) { + items := Descx(m).RandomMidItems(isFreeSpin, len(poss)) + for i, pos := range poss { + symbols[pos] = items[i] + } +} +func (p *PluginBase) RandomItemsByOther(m intf.Master, isFreeSpin bool, symbols []int64, poss ...int) { + items := Descx(m).RandomItems(isFreeSpin, len(poss)) + for i, pos := range poss { + symbols[pos] = items[i] + } +} diff --git a/gamesrv/slotspkg/slots/plugin/cashmania/descx.go b/gamesrv/slotspkg/slots/plugin/cashmania/descx.go new file mode 100644 index 0000000..bc71eac --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/cashmania/descx.go @@ -0,0 +1,197 @@ +package cashmania + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} + +// 判断是否触发respin +func (n descx) CheckWin(isFreeSpin bool) bool { + // 读取配置 + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "Others")) + } + + if isFreeSpin { + return randx.RandPR(n.Randx, rows[0].FreeWinPro) + } else { + return randx.RandPR(n.Randx, rows[0].BaseWinPro) + } +} + +// 获取中奖图标id +func (n descx) GetWinItem(isFreeSpin bool) int64 { + // 读取配置 + sheet := n.Sheet("WinItem", "Weight") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaWinItemWeight) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "WinItem")) + } + + weights := make([]float64, 0) + for _, v := range rows { + var weight float64 + if isFreeSpin { + weight = v.FreeWeight + } else { + weight = v.BaseWeight + } + weights = append(weights, weight) + } + index := randx.RandWeight(n.Randx, weights) + + return rows[index].ItemID +} + +func (n descx) RandomItems(isFreeSpin bool, num int) []int64 { + // 读取配置 + sheet := n.Sheet("RandomItem", "Weight") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaRandomItemWeight) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "RandomItem")) + } + + weights := make([]float64, 0) + for _, v := range rows { + var weight float64 + if isFreeSpin { + weight = v.FreeWeight + } else { + weight = v.BaseWeight + } + weights = append(weights, weight) + } + var items []int64 + for i := 0; i < num; i++ { + index := randx.RandWeight(n.Randx, weights) + items = append(items, rows[index].ItemID) + } + return items +} + +// 随机图标id +func (n descx) RandomTwoDifItem(isFreeSpin bool) []int64 { + // 读取配置 + sheet := n.Sheet("RandomItem", "Weight") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaRandomItemWeight) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "RandomItem")) + } + + weights := make([]float64, 0) + for _, v := range rows { + var weight float64 + if isFreeSpin { + weight = v.FreeWeight + } else { + weight = v.BaseWeight + } + weights = append(weights, weight) + } + indices := randx.RandShuffleWeights(n.Randx, 2, weights) + var vals = make([]int64, len(indices)) + for i, v := range indices { + vals[i] = rows[v].ItemID + } + return vals +} +func (n descx) GetWinMidItem(isFreeSpin bool) int64 { + // 读取配置 + sheet := n.Sheet("WinMid", "Weight") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaWinMidWeight) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "WinMid")) + } + + weights := make([]float64, 0) + for _, v := range rows { + var weight float64 + if isFreeSpin { + weight = v.FreeWeight + } else { + weight = v.BaseWeight + } + weights = append(weights, weight) + } + index := randx.RandWeight(n.Randx, weights) + + return rows[index].ItemID +} +func (n descx) RandomMidItems(isFreeSpin bool, num int) []int64 { + // 读取配置 + sheet := n.Sheet("RandomMid", "Weight") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaRandomMidWeight) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "RandomMid")) + } + + weights := make([]float64, 0) + for _, v := range rows { + var weight float64 + if isFreeSpin { + weight = v.FreeWeight + } else { + weight = v.BaseWeight + } + weights = append(weights, weight) + } + var items []int64 + for i := 0; i < num; i++ { + index := randx.RandWeight(n.Randx, weights) + items = append(items, rows[index].ItemID) + } + return items +} +func (n descx) GetMidItemInfo(itemId int64) (int64, int64) { + // 读取配置 + sheet := n.DefaultSheet("MidItemInfo") + // 转化数据 + rows, ok := sheet.(map[int64]*structs.CashManiaMidItemInfo) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "MidItemInfo")) + } + + row, ok := rows[itemId] + if !ok { + panic(errors.ConfigKeyNotFound.ErrorWith(n.Theme, "CashMania", itemId)) + } + + return row.Multi, row.FreeSpinCount +} +func (n descx) GetNudgeAndReSpin(isWin bool) (bool, bool) { + // 读取配置 + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.CashManiaOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "Others")) + } + if isWin { + return randx.RandPR(n.Randx, rows[0].WinNudgePro), randx.RandPR(n.Randx, rows[0].WinRespinPro) + } else { + return randx.RandPR(n.Randx, rows[0].NoWinNudgePro), randx.RandPR(n.Randx, rows[0].NoWinRespinPro) + } +} diff --git a/gamesrv/slotspkg/slots/plugin/cashmania/init.go b/gamesrv/slotspkg/slots/plugin/cashmania/init.go new file mode 100644 index 0000000..6ff10cc --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/cashmania/init.go @@ -0,0 +1,9 @@ +package cashmania + +var Plugins = []interface{}{ + &PluginBase{}, +} + +var SimulatorPlugins = []interface{}{ + &PluginSimulator{}, +} diff --git a/gamesrv/slotspkg/slots/plugin/cashmania/simulator.go b/gamesrv/slotspkg/slots/plugin/cashmania/simulator.go new file mode 100644 index 0000000..b44ad1c --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/cashmania/simulator.go @@ -0,0 +1,65 @@ +package cashmania + +import ( + "bytes" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +// PluginSimulator is derived from generic.PluginBase +type PluginSimulator struct { + generic.PluginBase +} + +// SimulatorSummary is to store simulator info +type SimulatorSummary struct { + TotalBet int64 +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSimulator) Theme() string { + return key.CashMania +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginSimulator) Customs() []interface{} { + return []interface{}{ + &SimulatorSummary{}, + } +} +func (p *PluginSimulator) getSummary(m intf.Master) *SimulatorSummary { + if len(m.RootFeatures(&SimulatorSummary{})) == 0 { + m.AddRootFeature(&SimulatorSummary{}).SetVisiable(false) + } + return m.RootCustom(&SimulatorSummary{}).(*SimulatorSummary) +} + +func (p *PluginSimulator) expireSummary(m intf.Master) { + features := m.RootFeatures(&SimulatorSummary{}) + for _, feature := range features { + feature.SetLifetime(0) + } +} + +func (p *PluginSimulator) OnStepEnd(m intf.Master) { + summary := p.getSummary(m) + curType := m.Cursor().GetType() + + if curType == key.BaseSpin { + summary.TotalBet += m.Bet() + } + +} + +// OnSummary implements generic.PluginBase.OnSummary +func (p *PluginSimulator) OnSummary(m intf.Master) { + //summary := p.getSummary(m) + defer p.expireSummary(m) + + var b bytes.Buffer + + b.WriteString("----------------------------------- \n") + + m.SetSummary(b.String()) +} diff --git a/gamesrv/slotspkg/slots/plugin/cashmania/tospecial.go b/gamesrv/slotspkg/slots/plugin/cashmania/tospecial.go new file mode 100644 index 0000000..6f6a33f --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/cashmania/tospecial.go @@ -0,0 +1,32 @@ +package cashmania + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +type PluginSpecial struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSpecial) Theme() string { + return key.CashMania +} + +// Special +type Special struct { +} + +// 获取特性数据 +func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special { + customSpecial := new(Special) + if len(m.CursorCustoms(customSpecial)) == 0 { + m.AddCursorFeature(customSpecial) + } + return m.CursorCustom(customSpecial).(*Special) +} +func (p *PluginSpecial) AfterSpin(m intf.Master) { + +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/base.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/base.go new file mode 100644 index 0000000..9e78828 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/base.go @@ -0,0 +1,142 @@ +package fortunedragon + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +type PluginBase struct { + generic.PluginBase +} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { + return key.FortuneDragon +} + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &CustomFortune{}, + &Special{}) +} + +func (p *PluginBase) OnStepBegin(m intf.Master) { + if m.Next().GetType() == key.BaseSpin { + isFreeSpin, addTimes := Descx(m).TiggerFreeSpin(m.Choice()) + if isFreeSpin { + m.Set(key.MachineFormationSeqsDesc, key.FreeSpin) + m.Set(TriggerFreespin, true) + node := m.UpdateCursor2NewType(key.FreeSpin, addTimes) + Fortune := &CustomFortune{} + Fortune.FreeNumMax = addTimes + Fortune.FreeNumTrigger = addTimes + Fortune.FreeSpinNum = addTimes + Fortune.ForceRound = m.Randx().Int63n(addTimes-1) + 1 + m.AddNodeFeature(node.GetID(), Fortune).SetLifetime(addTimes) + } + } else { + Fortune := getCustomFortune(m) + if m.GetProgressValue() == Fortune.ForceRound { + m.Set(key.MachineFormationSeqsDesc, SureWinFreeSpin) + } + } +} + +func (p *PluginBase) BeforeDisplay(m intf.Master) { + p.getMustHitLine(m) +} +func (p *PluginBase) getMustHitLine(m intf.Master) { + if m.Cursor().GetType() == key.BaseSpin && m.Choice() == RoundTypeMustHitMoreCost { + if !m.IsWinInBeforeDisplay() { + m.CursorFormation().SetSymbols([]int64{3, 7, 2, 5, 7, 5, 5, 7, 7}) + } + } +} + +func (p *PluginBase) AfterSpin(m intf.Master) { + switch m.Cursor().GetType() { + case key.BaseSpin: + p.getBaseSpinMultiplier(m) + case key.FreeSpin: + p.getFreeSpinMultiplier(m) + } + Fortune := getCustomFortune(m) + Fortune.FreeSpinNum-- + if !m.Bool(TriggerFreespin) { + Fortune.FreeNumTrigger = 0 + } else { + m.Set(TriggerFreespin, false) + } +} +func (p *PluginBase) getBaseSpinMultiplier(m intf.Master) { + FortuneDragonBaseMultiplier := m.Desc().DefaultSheet("BaseMultiplier").([]*structs.FortuneDragonBaseMultiplier) + hit := float64(m.CursorFormation().GetWin()) / float64(m.Bet()) + var hitEle = SymbolEmpty + for _, multiplier := range FortuneDragonBaseMultiplier { + if hit >= multiplier.WinRateMin && hit < multiplier.WinRateMax { + eleIdx := randx.RandWeight(m.Randx(), multiplier.MultiplierWeights) + hitEle = multiplier.ItemIds[eleIdx] + break + } + } + var MultipleAxis []int64 + switch hitEle { + case SymbolX2, SymbolX5, SymbolX10: + MultipleAxis = []int64{SymbolEmpty, hitEle, SymbolEmpty} + case SymbolEmpty: + MultipleAxis = []int64{m.Randx().Int63n(3) + SymbolX2, hitEle, m.Randx().Int63n(3) + SymbolX2} + } + + var totalMultiple int64 = 1 + if len(MultipleAxis) == 3 { + if multi, ok := SymbolMap[MultipleAxis[1]]; ok { + if multi != 0 { + totalMultiple = multi + } + } + } + win := m.CursorFormation().GetWin() + sp := getCustomFortune(m) + sp.MultipleAxis = MultipleAxis + m.CursorFeature(sp).SetWin(win * (totalMultiple - 1)) +} +func (p *PluginBase) getFreeSpinMultiplier(m intf.Master) { + FreeMultiplierCount := m.Desc().DefaultSheet("FreeMultiplierCount").([]*structs.FortuneDragonFreeMultiplierCount) + var FreeMultiplierWeight []int64 + for _, i2 := range FreeMultiplierCount { + FreeMultiplierWeight = append(FreeMultiplierWeight, i2.Weight) + } + FreeMultiplierIdx := randx.RandWeight(m.Randx(), FreeMultiplierWeight) + UseFreeMultiplier := FreeMultiplierCount[FreeMultiplierIdx] + FortuneDragonFreeMultiplier := m.Desc().DefaultSheet("FreeMultiplier").([]*structs.FortuneDragonFreeMultiplier) + var FortuneDragonFreeMultiplierWeight []int64 + for _, multiplier := range FortuneDragonFreeMultiplier { + FortuneDragonFreeMultiplierWeight = append(FortuneDragonFreeMultiplierWeight, multiplier.Weight) + } + count := int(UseFreeMultiplier.MultiplierCount) + var MultiplierArr = []int64{SymbolEmpty, SymbolEmpty, SymbolEmpty, SymbolEmpty, SymbolEmpty} + for i := 0; i < count; i++ { + idx := randx.RandWeight(m.Randx(), FortuneDragonFreeMultiplierWeight) + if count == 2 { + MultiplierArr[i*2+1] = FortuneDragonFreeMultiplier[idx].ItemID + } else { + MultiplierArr[i*2] = FortuneDragonFreeMultiplier[idx].ItemID + } + } + var totalMultiple int64 + if len(MultiplierArr) == 5 { + for _, axi := range MultiplierArr { + if multi, ok := SymbolMap[axi]; ok { + totalMultiple += multi + } + } + } + win := m.CursorFormation().GetWin() + sp := getCustomFortune(m) + sp.MultipleAxis = MultiplierArr + m.CursorFeature(sp).SetWin(win * (totalMultiple - 1)) +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/choose_wheel.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/choose_wheel.go new file mode 100644 index 0000000..1846355 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/choose_wheel.go @@ -0,0 +1,28 @@ +package fortunedragon + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +type PluginChooseWheel struct { + generic.PluginBase +} + +func (p *PluginChooseWheel) Theme() string { + return key.FortuneDragon +} + +func (p *PluginChooseWheel) OnStepBegin(m intf.Master) { + if m.Choice() != RoundTypeMustHitMoreCost { + return + } + if !m.Next().GetNoBase() || m.Next().GetProgressValue() == 0 { + m.SetRatio(key.MachineRatioMoreCoinSameBet, float64(Descx(m).GetSureWinBetMultiplier())) + } + if m.Next().GetType() == key.BaseSpin { + m.Set(key.MachineFormationSeqsDesc, "SureWinBaseSpin") + } + +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/common.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/common.go new file mode 100644 index 0000000..8fe5f33 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/common.go @@ -0,0 +1,33 @@ +package fortunedragon + +const ( + SymbolWild int64 = 1 + SymbolX2 int64 = 8 + SymbolX5 int64 = 9 + SymbolX10 int64 = 10 + SymbolEmpty int64 = 200 +) + +var SymbolMap = map[int64]int64{ + SymbolX2: 2, + SymbolX5: 5, + SymbolX10: 10, + SymbolEmpty: 0, +} + +const ( + TriggerFreespin string = "TriggerFreespin" + SureWinFreeSpin string = "SureWinFreeSpin" +) +const ( + RoundTypeBaseSpin = iota + RoundTypeMustHitMoreCost // 100% 必中模式 花费更多 +) + +type CustomFortune struct { + FreeSpinNum int64 `json:"fsn"` //剩余freespin + FreeNumMax int64 `json:"fnm"` //总次数 + FreeNumTrigger int64 `json:"fnt"` //新增freespin + ForceRound int64 `json:"fr"` //第n次 + MultipleAxis []int64 `json:"ma,omitempty"` //倍乘轴 +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/descx.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/descx.go new file mode 100644 index 0000000..9653717 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/descx.go @@ -0,0 +1,55 @@ +package fortunedragon + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" + "mongo.games.com/game/gamesrv/slotspkg/slots/desc" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} + +// 判断是否触发FreeSpin +func (n descx) TiggerFreeSpin(choice int64) (bool, int64) { + // 读取配置 + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.FortuneDragonOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneDragon", "Others")) + } + if choice == RoundTypeMustHitMoreCost { + return randx.RandPR(n.Randx, rows[0].SureWinFreespinTriggerPro), rows[0].FreeSpinCount + } else { + return randx.RandPR(n.Randx, rows[0].FreespinTriggerPro), rows[0].FreeSpinCount + } +} +func (n descx) GetSureWinBetMultiplier() int64 { + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.FortuneDragonOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneDragon", "Others")) + } + return rows[0].SureWinBetMultiplier +} + +// 获取特性数据 +func getCustomFortune(m intf.Master) *CustomFortune { + customFortune := new(CustomFortune) + if len(m.CursorCustoms(customFortune)) == 0 { + m.AddCursorFeature(customFortune) + } + return m.CursorCustom(customFortune).(*CustomFortune) +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/init.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/init.go new file mode 100644 index 0000000..2e61e98 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/init.go @@ -0,0 +1,10 @@ +package fortunedragon + +var Plugins = []interface{}{ + &PluginBase{}, + &PluginChooseWheel{}, + &PluginSpecial{}, +} +var SimulatorPlugins = []interface{}{ + &PluginSimulator{}, +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/simulator.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/simulator.go new file mode 100644 index 0000000..56f5a49 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/simulator.go @@ -0,0 +1,69 @@ +package fortunedragon + +import ( + "bytes" + "fmt" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +// PluginSimulator is derived from generic.PluginBase +type PluginSimulator struct { + generic.PluginBase +} + +// SimulatorSummary is to store simulator info +type SimulatorSummary struct { + FreeZeroCount int +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSimulator) Theme() string { + return key.FortuneDragon +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginSimulator) Customs() []interface{} { + return []interface{}{ + &SimulatorSummary{}, + } +} +func (p *PluginSimulator) getSummary(m intf.Master) *SimulatorSummary { + if len(m.RootFeatures(&SimulatorSummary{})) == 0 { + m.AddRootFeature(&SimulatorSummary{}).SetVisiable(false) + } + return m.RootCustom(&SimulatorSummary{}).(*SimulatorSummary) +} + +func (p *PluginSimulator) expireSummary(m intf.Master) { + features := m.RootFeatures(&SimulatorSummary{}) + for _, feature := range features { + feature.SetLifetime(0) + } +} + +func (p *PluginSimulator) OnStepEnd(m intf.Master) { + summary := p.getSummary(m) + Fortune := getCustomFortune(m) + if Fortune.FreeSpinNum == 0 && m.Cursor().GetType() == key.FreeSpin { + win := m.Cursor().GetTotalWin() + if win == 0 { + summary.FreeZeroCount++ + } + } +} + +// OnSummary implements generic.PluginBase.OnSummary +func (p *PluginSimulator) OnSummary(m intf.Master) { + summary := p.getSummary(m) + defer p.expireSummary(m) + + var b bytes.Buffer + + b.WriteString("----------------------------------- \n") + + b.WriteString(fmt.Sprintf("FreeZeroCount: %v \n", summary.FreeZeroCount)) + + m.SetSummary(b.String()) +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunedragon/tospecial.go b/gamesrv/slotspkg/slots/plugin/fortunedragon/tospecial.go new file mode 100644 index 0000000..3b830c8 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunedragon/tospecial.go @@ -0,0 +1,43 @@ +package fortunedragon + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +type PluginSpecial struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSpecial) Theme() string { + return key.FortuneDragon +} + +// Special +type Special struct { + FreeSpinNum int64 `json:"fsn,omitempty"` //剩余freespin + FreeNumMax int64 `json:"fnm,omitempty"` //总次数 + FreeNumTrigger int64 `json:"fnt,omitempty"` //新增freespin + MultipleAxis []int64 `json:"ma,omitempty"` //倍乘轴 +} + +// 获取特性数据 +func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special { + customSpecial := new(Special) + if len(m.CursorCustoms(customSpecial)) == 0 { + m.AddCursorFeature(customSpecial) + } + return m.CursorCustom(customSpecial).(*Special) +} +func (p *PluginSpecial) AfterSpin(m intf.Master) { + Fortune := getCustomFortune(m) + sp := p.getCustomSpecial(m) + sp.MultipleAxis = Fortune.MultipleAxis + if Fortune.FreeNumMax > 0 { + sp.FreeSpinNum = Fortune.FreeSpinNum + sp.FreeNumMax = Fortune.FreeNumMax + sp.FreeNumTrigger = Fortune.FreeNumTrigger + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunemouse/base.go b/gamesrv/slotspkg/slots/plugin/fortunemouse/base.go new file mode 100644 index 0000000..f0dd523 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunemouse/base.go @@ -0,0 +1,125 @@ +package fortunemouse + +import ( + "github.com/tomas-qstarrs/boost/randx" + "mongo.games.com/game/gamesrv/slotspkg/internal/generic/key" + "mongo.games.com/game/gamesrv/slotspkg/slots/intf" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin/generic" +) + +type PluginBase struct { + generic.PluginBase +} + +type CustomMultiple struct { +} + +type CustomRespin struct { + // 是否触发Respin + IsTrigger bool +} + +func (p *PluginBase) getCustomRespin(m intf.Master) *CustomRespin { + customRespin := new(CustomRespin) + if len(m.CursorCustoms(customRespin)) == 0 { + m.AddCursorFeature(customRespin) + } + return m.CursorCustom(customRespin).(*CustomRespin) +} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { + return key.FortuneMouse +} + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &CustomRespin{}, + &CustomMultiple{}, + &CustomSuperStack{}, + &Special{}) +} + +// OnStepBegin is called on initializing a step +func (p *PluginBase) OnStepBegin(m intf.Master) { + m.Set(IsTriggerRespin, false) + switch m.Next().GetType() { + case key.BaseSpin: + if Descx(m).TriggerRespin() { + m.Set(key.MachineFormationSeqsDesc, ReSpin) + m.Set(IsTriggerRespin, true) + } + } +} + +// BeforeDisplay is called before display +func (p *PluginBase) BeforeDisplay(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + typ := m.Cursor().GetType() + if !(trigger || typ == ReSpin) { + return + } + // 保证Respin一三轴图标完全相同 + formation := m.CursorFormation() + symbols := formation.GetSymbols() + if trigger || m.Randx().PR(0.3) { + var randints = []int64{2, 3, 4, 5, 6, 7} + randints = randx.RandShuffle(m.Randx(), randints) + idx1, idx2 := randints[0], randints[1] + symbols[0], symbols[1], symbols[2] = idx1, idx1, idx1 + symbols[6], symbols[7], symbols[8] = idx2, idx2, idx2 + } + formation.SetSymbols(symbols) +} + +// AfterSpin is called after spin +func (p *PluginBase) AfterSpin(m intf.Master) { + p.checkKeepRespin(m) + p.checkMultipleWin(m) +} + +// 中奖则结束Respin +func (p *PluginBase) checkKeepRespin(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + curType := m.Cursor().GetType() + if !(trigger || curType == ReSpin) { + return + } + + feature := p.getCustomRespin(m) + feature.IsTrigger = trigger + + // 中奖了就结束 + formation := m.CursorFormation() + win := formation.GetWin() + if win > 0 { + return + } + // 没中奖则添加Respin节点 + switch curType { + case key.BaseSpin: + m.AddNodeOnCursor(ReSpin, 1) + case ReSpin: + m.AddProgress(1) + } +} + +// 全屏wild +func (p *PluginBase) checkMultipleWin(m intf.Master) { + formation := m.CursorFormation() + win := formation.GetWin() + if win <= 0 { + return + } + symbols := m.CursorFormation().GetSymbols() + count := 0 + for _, i2 := range symbols { + if i2 == SymbolWild { + count++ + } + } + if count == len(symbols) { + m.AddCursorFeature(&CustomMultiple{}).SetWin(Descx(m).GetExtraWin() * m.GetBetCoin().Coin) + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunemouse/common.go b/gamesrv/slotspkg/slots/plugin/fortunemouse/common.go new file mode 100644 index 0000000..a53a66d --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunemouse/common.go @@ -0,0 +1,15 @@ +package fortunemouse + +const ( + SymbolWild int64 = 1 + SymbolSuperStack1 int64 = 8 +) + +const ( + ReSpin string = "ReSpin" +) + +const ( + IsTriggerRespin string = "IsTriggerRespin" + CheatTriggerRespin string = "CheatTriggerRespin" +) diff --git a/gamesrv/slotspkg/slots/plugin/fortunemouse/descx.go b/gamesrv/slotspkg/slots/plugin/fortunemouse/descx.go new file mode 100644 index 0000000..75bf5b4 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunemouse/descx.go @@ -0,0 +1,39 @@ +package fortunemouse + +import ( + "github.com/tomas-qstarrs/boost/randx" + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" + "qstar_server/service/slots/desc" + "qstar_server/service/slots/intf" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} + +// 是否触发Respin +func (n descx) TriggerRespin() bool { + sheet := n.DefaultSheet("Others") + rows, ok := sheet.([]*structs.FortuneMouseOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneMouse", "Others")) + } + return randx.RandPR(n.Randx, rows[0].RespinTriggerPro) +} +func (n descx) GetExtraWin() int64 { + sheet := n.DefaultSheet("Others") + rows, ok := sheet.([]*structs.FortuneMouseOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneMouse", "Others")) + } + return rows[0].ExtraWin +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunemouse/init.go b/gamesrv/slotspkg/slots/plugin/fortunemouse/init.go new file mode 100644 index 0000000..95fea77 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunemouse/init.go @@ -0,0 +1,7 @@ +package fortunemouse + +var Plugins = []interface{}{ + &PluginBase{}, + &PluginSuperStack{}, + &PluginSpecial{}, +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunemouse/super_stack.go b/gamesrv/slotspkg/slots/plugin/fortunemouse/super_stack.go new file mode 100644 index 0000000..6e5b2a0 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunemouse/super_stack.go @@ -0,0 +1,68 @@ +package fortunemouse + +import ( + "github.com/tomas-qstarrs/boost/mathx" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type CustomSuperStack struct { + SrcSymbol1 int64 + FinalSymbol1 int64 +} + +type PluginSuperStack struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSuperStack) Theme() string { + return key.FortuneMouse +} + +// OnInit implements generic.PluginBase.OnInit +func (p *PluginSuperStack) OnInit(m intf.Master) { + p.initStack(m) +} + +// BeforeDisplay is called before display +func (p *PluginSuperStack) BeforeDisplay(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + typ := p.GetCurStatus(m) + if !(trigger || typ == ReSpin) { + return + } + // 生成本轮需要替换的图标 + p.initStack(m) + superStack := m.RootCustom(&CustomSuperStack{}).(*CustomSuperStack) + p.TranslateFormation(m, superStack) +} + +// TranslateFormation translate formation +func (p *PluginSuperStack) TranslateFormation(m intf.Master, stacks *CustomSuperStack) { + formations := m.CursorFormations() + for _, f := range formations { + symbols := f.GetSymbols() + symbols = mathx.Replace(symbols, stacks.SrcSymbol1, stacks.FinalSymbol1) + f.SetSymbols(symbols) + } +} + +// 生成SuperStack(注意:不能和Party一样在onStepEnd里生成) +func (p *PluginSuperStack) initStack(m intf.Master) { + if len(m.RootFeatures(&CustomSuperStack{})) == 0 { + m.AddRootFeature(&CustomSuperStack{}) + } + feature := m.RootCustom(&CustomSuperStack{}).(*CustomSuperStack) + feature.SrcSymbol1 = SymbolSuperStack1 + feature.FinalSymbol1 = generic.Descx(m).SuperStackSymbol("") +} + +func (p *PluginSuperStack) GetCurStatus(m intf.Master) string { + t := m.Cursor().GetType() + if t == "Root" { + return key.BaseSpin + } + return t +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunemouse/tospecial.go b/gamesrv/slotspkg/slots/plugin/fortunemouse/tospecial.go new file mode 100644 index 0000000..affb7d9 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunemouse/tospecial.go @@ -0,0 +1,57 @@ +package fortunemouse + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type PluginSpecial struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSpecial) Theme() string { + return key.FortuneMouse +} + +// Special +type Special struct { + ReSpinStatus int `json:"rs,omitempty"` //0.默认 1.第一次触发 2.进行中 3.结束 + NewSuperStack []int64 `json:"nss,omitempty"` +} + +// 获取特性数据 +func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special { + customSpecial := new(Special) + if len(m.CursorCustoms(customSpecial)) == 0 { + m.AddCursorFeature(customSpecial) + } + return m.CursorCustom(customSpecial).(*Special) +} + +func (p *PluginSpecial) BeforeDisplay(m intf.Master) { + if !(m.Bool(IsTriggerRespin) || m.Cursor().GetType() == ReSpin) { + return + } + superStack := m.RootCustom(&CustomSuperStack{}).(*CustomSuperStack) + sp := p.getCustomSpecial(m) + sp.NewSuperStack = nil + sp.NewSuperStack = []int64{superStack.FinalSymbol1} +} +func (p *PluginSpecial) AfterSpin(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + curType := m.Cursor().GetType() + if m.Bool(IsTriggerRespin) || curType == ReSpin { + sp := p.getCustomSpecial(m) + if m.CursorFormation().GetWin() > 0 { + sp.ReSpinStatus = key.RespinFinish + return + } + if trigger { + sp.ReSpinStatus = key.RespinTrigger + } else { + sp.ReSpinStatus = key.RespinProcess + } + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/base.go b/gamesrv/slotspkg/slots/plugin/fortuneox/base.go new file mode 100644 index 0000000..f74d3d0 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/base.go @@ -0,0 +1,143 @@ +package fortuneox + +import ( + "github.com/tomas-qstarrs/boost/randx" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type PluginBase struct { + generic.PluginBase +} + +type CustomMultiple struct { + // 是否全线倍乘 + Multi int64 +} + +type CustomRespin struct { + // 是否触发Respin + IsTrigger bool +} + +func (p *PluginBase) getCustomRespin(m intf.Master) *CustomRespin { + customRespin := new(CustomRespin) + if len(m.CursorCustoms(customRespin)) == 0 { + m.AddCursorFeature(customRespin) + } + return m.CursorCustom(customRespin).(*CustomRespin) +} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { + return key.FortuneOx +} + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &CustomRespin{}, + &CustomMultiple{}, + &CustomSuperStack{}, + &Special{}) +} + +// OnStepBegin is called on initializing a step +func (p *PluginBase) OnStepBegin(m intf.Master) { + m.Set(IsTriggerRespin, false) + switch m.Next().GetType() { + case key.BaseSpin: + if m.Bool(CheatTriggerRespin) || Descx(m).TriggerRespin() { + m.Set(key.MachineFormationSeqsDesc, ReSpin) + m.Set(IsTriggerRespin, true) + } + } +} + +// BeforeDisplay is called before display +func (p *PluginBase) BeforeDisplay(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + typ := m.Cursor().GetType() + if !(trigger || typ == ReSpin) { + return + } + // 保证Respin一三轴图标完全相同 + formation := m.CursorFormation() + symbols := formation.GetSymbols() + if trigger { + var randints = []int64{2, 3, 4, 5, 6, 7} + randints = randx.RandShuffle(m.Randx(), randints) + idx1, idx2 := randints[0], randints[1] + symbols[0], symbols[1], symbols[2] = idx1, idx1, idx1 + symbols[3], symbols[4], symbols[5], symbols[6] = idx2, idx2, idx2, idx2 + } + for i := 0; i < 3; i++ { + symbols[7+i] = symbols[i] + } + formation.SetSymbols(symbols) +} + +// AfterSpin is called after spin +func (p *PluginBase) AfterSpin(m intf.Master) { + p.checkKeepRespin(m) + p.checkMultipleWin(m) +} + +// 中奖则结束Respin +func (p *PluginBase) checkKeepRespin(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + curType := m.Cursor().GetType() + if !(trigger || curType == ReSpin) { + return + } + + feature := p.getCustomRespin(m) + feature.IsTrigger = trigger + + // 中奖了就结束 + formation := m.CursorFormation() + win := formation.GetWin() + if win > 0 { + return + } + // 没中奖则添加Respin节点 + switch curType { + case key.BaseSpin: + m.AddNodeOnCursor(ReSpin, 1) + case ReSpin: + m.AddProgress(1) + } +} + +// 全图标相同则触发x10特性 +func (p *PluginBase) checkMultipleWin(m intf.Master) { + formation := m.CursorFormation() + win := formation.GetWin() + if win <= 0 { + return + } + + mx10 := true + onlySymbol := SymbolWild + symbols := formation.GetSymbols() + for _, s := range symbols { + if s != SymbolWild { + if onlySymbol == SymbolWild { + onlySymbol = s + } + if onlySymbol != s { + mx10 = false + break + } + } + } + + if mx10 { + multi := Descx(m).FullMulti() + //formation.SetWin(win * multi) + m.AddCursorFeature(&CustomMultiple{ + Multi: multi, + }).SetWin(win * (multi - 1)) + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/common.go b/gamesrv/slotspkg/slots/plugin/fortuneox/common.go new file mode 100644 index 0000000..cc2217a --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/common.go @@ -0,0 +1,16 @@ +package fortuneox + +const ( + SymbolWild int64 = 1 + SymbolSuperStack1 int64 = 8 + SymbolSuperStack2 int64 = 9 +) + +const ( + ReSpin string = "ReSpin" +) + +const ( + IsTriggerRespin string = "IsTriggerRespin" + CheatTriggerRespin string = "CheatTriggerRespin" +) diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/descx.go b/gamesrv/slotspkg/slots/plugin/fortuneox/descx.go new file mode 100644 index 0000000..671338b --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/descx.go @@ -0,0 +1,41 @@ +package fortuneox + +import ( + "github.com/tomas-qstarrs/boost/randx" + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" + "qstar_server/service/slots/desc" + "qstar_server/service/slots/intf" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} + +// 是否触发Respin +func (n descx) TriggerRespin() bool { + sheet := n.DefaultSheet("Others") + rows, ok := sheet.([]*structs.FortuneOxOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneOx", "Others")) + } + return randx.RandPR(n.Randx, rows[0].RespinTriggerPro) +} + +// 全屏倍乘倍数 +func (n descx) FullMulti() int64 { + sheet := n.DefaultSheet("Others") + rows, ok := sheet.([]*structs.FortuneOxOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneOx", "Others")) + } + return rows[0].Multiplier +} diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/init.go b/gamesrv/slotspkg/slots/plugin/fortuneox/init.go new file mode 100644 index 0000000..6fc555e --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/init.go @@ -0,0 +1,11 @@ +package fortuneox + +var Plugins = []interface{}{ + &PluginBase{}, + &PluginSuperStack{}, + &PluginSpecial{}, +} + +var SimulatorPlugins = []interface{}{ + &PluginSimulator{}, +} diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/simulator.go b/gamesrv/slotspkg/slots/plugin/fortuneox/simulator.go new file mode 100644 index 0000000..f84b932 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/simulator.go @@ -0,0 +1,78 @@ +package fortuneox + +import ( + "bytes" + "fmt" + "github.com/tomas-qstarrs/boost/mathx" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +// PluginSimulator is derived from generic.PluginBase +type PluginSimulator struct { + generic.PluginBase +} + +// SimulatorSummary is to store simulator info +type SimulatorSummary struct { + TotalBet int64 + RespinWin int64 + BaseWin int64 +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSimulator) Theme() string { + return key.FortuneOx +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginSimulator) Customs() []interface{} { + return []interface{}{ + &SimulatorSummary{}, + } +} +func (p *PluginSimulator) getSummary(m intf.Master) *SimulatorSummary { + if len(m.RootFeatures(&SimulatorSummary{})) == 0 { + m.AddRootFeature(&SimulatorSummary{}).SetVisiable(false) + } + return m.RootCustom(&SimulatorSummary{}).(*SimulatorSummary) +} + +func (p *PluginSimulator) expireSummary(m intf.Master) { + features := m.RootFeatures(&SimulatorSummary{}) + for _, feature := range features { + feature.SetLifetime(0) + } +} + +func (p *PluginSimulator) OnStepEnd(m intf.Master) { + summary := p.getSummary(m) + curType := m.Cursor().GetType() + trigger := m.Bool(IsTriggerRespin) + + if curType == key.BaseSpin { + summary.TotalBet += m.Bet() + } + + if trigger || curType == ReSpin { + summary.RespinWin += m.Win() + } else { + summary.BaseWin += m.Win() + } +} + +// OnSummary implements generic.PluginBase.OnSummary +func (p *PluginSimulator) OnSummary(m intf.Master) { + summary := p.getSummary(m) + defer p.expireSummary(m) + + var b bytes.Buffer + + b.WriteString("----------------------------------- \n") + + b.WriteString(fmt.Sprintf("纯Base返奖率: %v \n", mathx.SafeDiv(summary.BaseWin, summary.TotalBet))) + b.WriteString(fmt.Sprintf("Respin返奖率: %v \n", mathx.SafeDiv(summary.RespinWin, summary.TotalBet))) + + m.SetSummary(b.String()) +} diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/super_stack.go b/gamesrv/slotspkg/slots/plugin/fortuneox/super_stack.go new file mode 100644 index 0000000..f2bc641 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/super_stack.go @@ -0,0 +1,73 @@ +package fortuneox + +import ( + "github.com/tomas-qstarrs/boost/mathx" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type CustomSuperStack struct { + SrcSymbol1 int64 + FinalSymbol1 int64 + SrcSymbol2 int64 + FinalSymbol2 int64 +} + +type PluginSuperStack struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSuperStack) Theme() string { + return key.FortuneOx +} + +// OnInit implements generic.PluginBase.OnInit +func (p *PluginSuperStack) OnInit(m intf.Master) { + p.initStack(m) +} + +// BeforeDisplay is called before display +func (p *PluginSuperStack) BeforeDisplay(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + typ := p.GetCurStatus(m) + if !(trigger || typ == ReSpin) { + return + } + // 生成本轮需要替换的图标 + p.initStack(m) + superStack := m.RootCustom(&CustomSuperStack{}).(*CustomSuperStack) + p.TranslateFormation(m, superStack) +} + +// TranslateFormation translate formation +func (p *PluginSuperStack) TranslateFormation(m intf.Master, stacks *CustomSuperStack) { + formations := m.CursorFormations() + for _, f := range formations { + symbols := f.GetSymbols() + symbols = mathx.Replace(symbols, stacks.SrcSymbol1, stacks.FinalSymbol1) + symbols = mathx.Replace(symbols, stacks.SrcSymbol2, stacks.FinalSymbol2) + f.SetSymbols(symbols) + } +} + +// 生成SuperStack(注意:不能和Party一样在onStepEnd里生成) +func (p *PluginSuperStack) initStack(m intf.Master) { + if len(m.RootFeatures(&CustomSuperStack{})) == 0 { + m.AddRootFeature(&CustomSuperStack{}) + } + feature := m.RootCustom(&CustomSuperStack{}).(*CustomSuperStack) + feature.SrcSymbol1 = SymbolSuperStack1 + feature.SrcSymbol2 = SymbolSuperStack2 + feature.FinalSymbol1 = generic.Descx(m).SuperStackSymbol("1") + feature.FinalSymbol2 = generic.Descx(m).SuperStackSymbol("2") +} + +func (p *PluginSuperStack) GetCurStatus(m intf.Master) string { + t := m.Cursor().GetType() + if t == "Root" { + return key.BaseSpin + } + return t +} diff --git a/gamesrv/slotspkg/slots/plugin/fortuneox/tospecial.go b/gamesrv/slotspkg/slots/plugin/fortuneox/tospecial.go new file mode 100644 index 0000000..d38b214 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortuneox/tospecial.go @@ -0,0 +1,57 @@ +package fortuneox + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type PluginSpecial struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSpecial) Theme() string { + return key.FortuneOx +} + +// Special +type Special struct { + ReSpinStatus int `json:"rs,omitempty"` //0.默认 1.第一次触发 2.进行中 3.结束 + NewSuperStack []int64 `json:"nss,omitempty"` +} + +// 获取特性数据 +func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special { + customSpecial := new(Special) + if len(m.CursorCustoms(customSpecial)) == 0 { + m.AddCursorFeature(customSpecial) + } + return m.CursorCustom(customSpecial).(*Special) +} + +func (p *PluginSpecial) BeforeDisplay(m intf.Master) { + if !(m.Bool(IsTriggerRespin) || m.Cursor().GetType() == ReSpin) { + return + } + superStack := m.RootCustom(&CustomSuperStack{}).(*CustomSuperStack) + sp := p.getCustomSpecial(m) + sp.NewSuperStack = nil + sp.NewSuperStack = []int64{superStack.FinalSymbol1, superStack.FinalSymbol2} +} +func (p *PluginSpecial) AfterSpin(m intf.Master) { + trigger := m.Bool(IsTriggerRespin) + curType := m.Cursor().GetType() + if m.Bool(IsTriggerRespin) || curType == ReSpin { + sp := p.getCustomSpecial(m) + if m.CursorFormation().GetWin() > 0 { + sp.ReSpinStatus = key.RespinFinish + return + } + if trigger { + sp.ReSpinStatus = key.RespinTrigger + } else { + sp.ReSpinStatus = key.RespinProcess + } + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunerabbit/base.go b/gamesrv/slotspkg/slots/plugin/fortunerabbit/base.go new file mode 100644 index 0000000..c07a1e4 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunerabbit/base.go @@ -0,0 +1,166 @@ +package fortunerabbit + +import ( + "github.com/tomas-qstarrs/boost/randx" + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" + "qstar_server/service/slots/types/cli" +) + +type PluginBase struct { + generic.PluginBase +} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { + return key.FortuneRabbit +} + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &CustomFortune{}, + &Special{}) +} + +// 获取特性数据 +func getCustomFortune(m intf.Master) *CustomFortune { + customFortune := new(CustomFortune) + if len(m.CursorCustoms(customFortune)) == 0 { + m.AddCursorFeature(customFortune) + } + return m.CursorCustom(customFortune).(*CustomFortune) +} + +func (p *PluginBase) OnStepBegin(m intf.Master) { + if m.Next().GetType() == key.BaseSpin { + isFreeSpin, addTimes := Descx(m).TiggerFreeSpin() + if isFreeSpin { + //logx.Error("OnStepBegin.isFreeSpin") + m.Set(key.MachineFormationSeqsDesc, key.FreeSpin) + m.Set(TriggerFreespin, true) + node := m.UpdateCursor2NewType(key.FreeSpin, addTimes) + Fortune := &CustomFortune{} + Fortune.FreeNumMax = addTimes + Fortune.FreeNumTrigger = addTimes + Fortune.ForceRound = m.Randx().Int63n(addTimes) + Fortune.FreeSpinNum = addTimes + m.AddNodeFeature(node.GetID(), Fortune).SetLifetime(addTimes) + } + } +} + +func (p *PluginBase) BeforeDisplay(m intf.Master) { + p.forceRound(m) + p.randCash(m) +} + +func (p *PluginBase) forceRound(m intf.Master) { + if m.Next().GetType() == key.FreeSpin { + Fortune := getCustomFortune(m) + //logx.Errorf("%v ----- %v ", m.GetProgressValue(), Fortune.ForceRound) + if m.GetProgressValue() == Fortune.ForceRound { + ForceCashCountWeight := m.Desc().DefaultSheet("ForceCashCountWeight").([]*structs.FortuneRabbitForceCashCountWeight) + var weight []float64 + for _, fcc := range ForceCashCountWeight { + weight = append(weight, fcc.Weight) + } + idx := randx.RandWeight(m.Randx(), weight) + useConf := ForceCashCountWeight[idx] + var reelRand = [3]int64{m.Randx().RangeInt63n(0, 1), m.Randx().RangeInt63n(0, 1), m.Randx().RangeInt63n(0, 1)} + var reelCount = [3]int64{} + var slots_result = [][]int64{ + {SymbolEmpty, SymbolEmpty, SymbolEmpty}, + {SymbolEmpty, SymbolEmpty, SymbolEmpty, SymbolEmpty}, + {SymbolEmpty, SymbolEmpty, SymbolEmpty}} + MatrixForm := m.CursorFormation().GetMatrixForm() + for i := 0; i < int(useConf.Count); i++ { + random_idx := m.Randx().Int63n(3) + //logx.Error("========forceRound=====77=====", random_idx) + //logx.Errorf("========forceRound=====77=%v===%v=", reelCount[random_idx], MatrixForm[random_idx]) + if reelCount[random_idx] == MatrixForm[random_idx] { + i-- + } else { + fromIdx := MatrixForm[random_idx] + if reelRand[random_idx] == 0 { + slots_result[random_idx][fromIdx-1-reelCount[random_idx]] = SymbolCash + } else { + slots_result[random_idx][reelCount[random_idx]] = SymbolCash + } + reelCount[random_idx]++ + } + } + var items []int64 + for _, int64s := range slots_result { + for _, i3 := range int64s { + items = append(items, i3) + } + } + m.CursorFormation().SetSymbols(items) + } + } +} +func (p *PluginBase) randCash(m intf.Master) { + symbols := m.CursorFormation().GetSymbols() + var prize = make([]float64, len(symbols)) + var count int + for i, symbol := range symbols { + if symbol == SymbolCash { + count++ + prize[i] = 1 + } + } + CashPrizeWeight := m.Desc().DefaultSheet("CashPrizeWeight").([]*structs.FortuneRabbitCashPrizeWeight) + var Weight, NoWinWeight, PrizeValue []float64 + for _, prizeWeight := range CashPrizeWeight { + Weight = append(Weight, prizeWeight.Weight) + NoWinWeight = append(NoWinWeight, prizeWeight.NoWinWeight) + PrizeValue = append(PrizeValue, prizeWeight.PrizeValue) + } + for i, i2 := range prize { + if i2 == 1 { + var idx int + if count >= 5 { + idx = randx.RandWeight(m.Randx(), Weight) + } else { + idx = randx.RandWeight(m.Randx(), NoWinWeight) + } + prize[i] = PrizeValue[idx] + } + } + Fortune := getCustomFortune(m) + Fortune.Prize = cli.ToItemsFloat64(m.CursorFormation().GetMatrixForm(), prize) +} +func (p *PluginBase) AfterSpin(m intf.Master) { + Fortune := getCustomFortune(m) + if m.Cursor().GetType() == key.FreeSpin { + //logx.Error("FreeSpinNum --- ", Fortune.FreeSpinNum) + Fortune.FreeSpinNum-- + if !m.Bool(TriggerFreespin) { + Fortune.FreeNumTrigger = 0 + } + } + var cash_item_total_prize float64 + var count int + for _, float64s := range Fortune.Prize { + for _, f := range float64s { + if f > 0 { + cash_item_total_prize += f + count++ + } + } + } + if count < 5 { + cash_item_total_prize = 0 + } + if cash_item_total_prize > 0 { + Reward := int64(cash_item_total_prize * float64(m.GetBetCoin().GetCoin())) + if m.Cursor().GetType() == key.FreeSpin { + m.CursorFeature(&CustomFortune{}).SetWin(Reward) + } else { + m.AddCursorFeature(&CustomFortune{}).SetWin(Reward) + } + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunerabbit/common.go b/gamesrv/slotspkg/slots/plugin/fortunerabbit/common.go new file mode 100644 index 0000000..4f162f7 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunerabbit/common.go @@ -0,0 +1,17 @@ +package fortunerabbit + +const ( + TriggerFreespin string = "TriggerFreespin" +) +const ( + SymbolCash int64 = 8 + SymbolEmpty int64 = 200 +) + +type CustomFortune struct { + FreeSpinNum int64 `json:"fsn"` //剩余freespin + FreeNumMax int64 `json:"fnm"` //总次数 + FreeNumTrigger int64 `json:"fnt"` //新增freespin + ForceRound int64 `json:"fr"` //第n次 + Prize [][]float64 `json:"pe,omitempty"` +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunerabbit/descx.go b/gamesrv/slotspkg/slots/plugin/fortunerabbit/descx.go new file mode 100644 index 0000000..b39fb79 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunerabbit/descx.go @@ -0,0 +1,34 @@ +package fortunerabbit + +import ( + "github.com/tomas-qstarrs/boost/randx" + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" + "qstar_server/service/slots/desc" + "qstar_server/service/slots/intf" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} + +// 判断是否触发FreeSpin +func (n descx) TiggerFreeSpin() (bool, int64) { + // 读取配置 + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.FortuneRabbitOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneRabbit", "Others")) + } + //logx.Error("TiggerFreeSpin FreespinTriggerPro: ", rows[0].FreespinTriggerPro) + return randx.RandPR(n.Randx, rows[0].FreespinTriggerPro), rows[0].FreeSpinCount +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunerabbit/init.go b/gamesrv/slotspkg/slots/plugin/fortunerabbit/init.go new file mode 100644 index 0000000..24e4f67 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunerabbit/init.go @@ -0,0 +1,8 @@ +package fortunerabbit + +var Plugins = []interface{}{ + &PluginBase{}, + &PluginSpecial{}, +} + +var SimulatorPlugins = []interface{}{} diff --git a/gamesrv/slotspkg/slots/plugin/fortunerabbit/tospecial.go b/gamesrv/slotspkg/slots/plugin/fortunerabbit/tospecial.go new file mode 100644 index 0000000..874e790 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunerabbit/tospecial.go @@ -0,0 +1,54 @@ +package fortunerabbit + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type PluginSpecial struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSpecial) Theme() string { + return key.FortuneRabbit +} + +// Special +type Special struct { + FreeSpinNum int64 `json:"fsn,omitempty"` //剩余freespin + FreeNumMax int64 `json:"fnm,omitempty"` //总次数 + FreeNumTrigger int64 `json:"fnt,omitempty"` //新增freespin + Prize [][]float64 `json:"pe,omitempty"` +} + +// 获取特性数据 +func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special { + customSpecial := new(Special) + if len(m.CursorCustoms(customSpecial)) == 0 { + m.AddCursorFeature(customSpecial) + } + return m.CursorCustom(customSpecial).(*Special) +} +func (p *PluginSpecial) BeforeDisplay(m intf.Master) { + Fortune := getCustomFortune(m) + for _, float64s := range Fortune.Prize { + for _, f := range float64s { + if f > 0 { + sp := p.getCustomSpecial(m) + sp.Prize = Fortune.Prize + return + } + } + } +} +func (p *PluginSpecial) AfterSpin(m intf.Master) { + Fortune := getCustomFortune(m) + if Fortune.FreeNumMax > 0 { + sp := p.getCustomSpecial(m) + sp.FreeSpinNum = Fortune.FreeSpinNum + sp.FreeNumMax = Fortune.FreeNumMax + sp.FreeNumTrigger = Fortune.FreeNumTrigger + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/base.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/base.go new file mode 100644 index 0000000..f440678 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/base.go @@ -0,0 +1,273 @@ +package fortunetiger + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" + "qstar_server/service/slots/types/cli" +) + +type PluginBase struct { + generic.PluginBase +} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { + return key.FortuneTiger +} + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &CustomFortune{}, + &Special{}) +} + +// OnStepBegin is called on initializing a step +func (p *PluginBase) OnStepBegin(m intf.Master) { + m.Remove(NewCollect) + typ := m.Next().GetType() + if typ == key.BaseSpin && (m.Bool(TriggerRespin) || Descx(m).TiggerRespin()) { + m.Set(key.MachineFormationSeqsDesc, ReSpin) + m.Set(TriggerRespin, true) + } else { + m.Set(TriggerRespin, false) + } +} + +func (p *PluginBase) BeforeDisplay(m intf.Master) { + typ := m.Cursor().GetType() + if typ == key.BaseSpin { + //todo base + p.InitRespinData(m) + } else if typ == ReSpin { + //todo respin + p.isRespinEnd(m) + p.SuperStack(m) + p.IsCollect(m) + } + +} + +func (p *PluginBase) AfterDisplay(m intf.Master) { + typ := m.Cursor().GetType() + tr := m.Bool(TriggerRespin) + + if typ == key.BaseSpin { + + } else if typ == ReSpin { + if m.Bool(IsRespinEnd) { + p.IsCollect(m) + } + p.UpdateCollect(m) + p.UpdateSymbols(m) + } + + if tr || typ == ReSpin { + p.UpdateRespinStatus(m) + } + +} + +func (p *PluginBase) AfterSpin(m intf.Master) { + p.CheckMulti(m) +} + +func (p *PluginBase) isRespinEnd(m intf.Master) { + if m.Bool(IsRespinEnd) { + m.CursorFormation().SetSymbols([]int64{ + SymbolEmpty, SymbolEmpty, SymbolEmpty, + SymbolEmpty, SymbolEmpty, SymbolEmpty, + SymbolEmpty, SymbolEmpty, SymbolEmpty}) + m.Remove(IsRespinEnd) + } +} + +func (p *PluginBase) InitRespinData(m intf.Master) { + // basespin触发respin初始化数据 + if m.Bool(TriggerRespin) { + fortune := getCustomFortune(m) + curFormation := m.CursorFormation() + fortune.Symbol = generic.Descx(m).SuperStackSymbol("") + fortune.Status = m.Bool(TriggerRespin) + fortune.Collects = make([]int64, 9) + p.SuperStack(m) + //触发时锁的图标 + symbols := curFormation.GetSymbols() + for i := 0; i < len(symbols); i++ { + if fortune.Collects[i] == 0 { + if symbols[i] == fortune.Symbol { + fortune.Collects[i] = fortune.Symbol + } + if symbols[i] == SymbolWild { + fortune.Collects[i] = SymbolWild + } + } + } + nowSymbols := m.CursorFormation().GetMatrixFormattedSymbols() + fortune.LastSymbols = nowSymbols + for i, symbol := range nowSymbols { + for i2, i3 := range symbol { + if i3 != SymbolEmpty { + fortune.AddLock = append(fortune.AddLock, []int{i, i2}) + } + } + } + } +} + +func (p *PluginBase) SuperStack(m intf.Master) { + fortune := getCustomFortune(m) + // basespin初始化数据 + curFormation := m.CursorFormation() + symbols := curFormation.GetSymbols() + for i := 0; i < len(symbols); i++ { + if symbols[i] == SymbolSuperStck { + symbols[i] = fortune.Symbol + } + } + curFormation.SetSymbols(symbols) +} + +func (p *PluginBase) IsCollect(m intf.Master) { + fortune := getCustomFortune(m) + // basespin初始化数据 + curFormation := m.CursorFormation() + // 收集 + newCollect := false + symbols := curFormation.GetSymbols() + var needSet bool + for i := 0; i < len(symbols); i++ { + if fortune.Collects[i] == 0 { + if (symbols[i] == fortune.Symbol || symbols[i] == SymbolWild) && !newCollect { + newCollect = true + } + } else if fortune.Collects[i] == fortune.Symbol && symbols[i] == SymbolWild { + symbols[i] = fortune.Symbol + needSet = true + } + } + if needSet { + curFormation.SetSymbols(symbols) + } + m.Set(NewCollect, newCollect) +} + +func (p *PluginBase) UpdateCollect(m intf.Master) { + // basespin初始化数据 + // 收集 + if m.Bool(NewCollect) { + fortune := getCustomFortune(m) + curFormation := m.CursorFormation() + symbols := curFormation.GetSymbols() + fortune.Lock = append(fortune.Lock, fortune.AddLock...) + var addLock []int64 + for i := 0; i < len(symbols); i++ { + if fortune.Collects[i] == 0 { + if symbols[i] == fortune.Symbol { + fortune.Collects[i] = fortune.Symbol + addLock = append(addLock, int64(i)) + } + if symbols[i] == SymbolWild { + fortune.Collects[i] = SymbolWild + addLock = append(addLock, int64(i)) + } + } + } + fortune.AddLock = cli.ToPoss(m.CursorFormation().GetMatrixForm(), addLock) + } + +} + +func (p *PluginBase) UpdateRespinStatus(m intf.Master) { + fortune := getCustomFortune(m) + curType := m.Cursor().GetType() + // 判断是否收满 + if !fortune.IsFull() { + if curType == key.BaseSpin && fortune.Status { + fortune.ReSpinStatus = key.RespinTrigger + m.AddNodeFeature(m.AddNodeOnCursor(ReSpin, 1).GetID(), &CustomFortune{ + Symbol: fortune.Symbol, + Collects: fortune.Collects, + LastSymbols: fortune.LastSymbols, + AddLock: fortune.AddLock, + }) + } + if curType == ReSpin { + if m.Bool(NewCollect) { + m.AddProgress(1) + fortune.ReSpinStatus = key.RespinProcess + } else { + fortune.ReSpinStatus = key.RespinFinish + } + } + } else { + // 如果收满了 就不触发了 + fortune.Status = false + fortune.ReSpinStatus = key.RespinFinish + } +} + +func (p *PluginBase) UpdateSymbols(m intf.Master) { + fortune := getCustomFortune(m) + curFormation := m.CursorFormation() + symbols := curFormation.GetSymbols() + // 替换最终图标 + for i := 0; i < len(symbols); i++ { + if fortune.Collects[i] > 0 { + symbols[i] = fortune.Collects[i] + } + } + curFormation.SetSymbols(symbols) + + fortune.LastSymbols = m.CursorFormation().GetMatrixFormattedSymbols() +} + +func (p *PluginBase) CheckMulti(m intf.Master) { + //判定是否全屏图标都一样 + fortune := getCustomFortune(m) + curFormation := m.CursorFormation() + fortune.LinePays = curFormation.GetLinePays() + fortune.Multi = 1 + win := curFormation.GetWin() + if win <= 0 { + return + } + if m.ProgressLeft() == 1 && !fortune.Status { + // 如果所有图标都在连线上 + payPos := make([]bool, 9) + payLines := curFormation.GetLinkPositions() + for _, line := range payLines { + for _, pos := range line.Positions { + payPos[pos] = true + } + } + mx10 := true + for _, val := range payPos { + if !val { + mx10 = false + break + } + } + if mx10 { + var X10 = SymbolWild + for _, val := range curFormation.GetSymbols() { + if X10 == SymbolWild && X10 != val { + X10 = val + } else if X10 != val && val != SymbolWild { + X10 = 100 + break + } + } + if X10 == SymbolWild { + X10 = 88 + } + fortune.Multi = Descx(m).FullMulti() + fortune.SpX10 = X10 + } + //curFormation.SetWin(win * fortune.Multi) + m.CursorFeature(fortune).SetWin(win * (fortune.Multi - 1)) + } else { + curFormation.SetWin(0) + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/common.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/common.go new file mode 100644 index 0000000..ecca6fe --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/common.go @@ -0,0 +1,62 @@ +package fortunetiger + +import "qstar_server/service/slots/intf" + +// 图标 +const ( + SymbolWild int64 = 1 + SymbolSuperStck int64 = 8 + SymbolEmpty int64 = 200 +) + +// spin Type +const ReSpin string = "ReSpin" + +const TriggerRespin string = "TriggerRespin" +const NewCollect string = "NewCollect" + +const IsRespinEnd string = "IsRespinEnd" + +// 特性数据 +type CustomFortune struct { + // 本次的symbol + Symbol int64 `json:"symbol,omitempty"` + // 是否Respin + Status bool `json:"status,omitempty"` + // 是否5线全满倍乘 + Multi int64 `json:"multi,omitempty"` + // 已收集的图标 + Collects []int64 `json:"collects,omitempty"` + // 每线赔率 + LinePays []float64 `json:"linePays,omitempty"` + + ReSpinStatus int `json:"rss,omitempty"` + + SpX10 int64 `json:"sp_x10,omitempty"` + + LastSymbols [][]int64 `json:"last_symbols,omitempty"` + + Lock [][]int `json:"lock,omitempty"` + AddLock [][]int `json:"add_lock,omitempty"` +} + +// ReSpint特性判定是否全部满了 +func (fortune *CustomFortune) IsFull() bool { + isFull := true + for _, symbol := range fortune.Collects { + if symbol <= 0 { + isFull = false + break + } + } + return isFull +} + +// 获取特性数据 +func getCustomFortune(m intf.Master) *CustomFortune { + customFortune := new(CustomFortune) + if len(m.CursorCustoms(customFortune)) == 0 { + m.AddCursorFeature(customFortune) + } + return m.CursorCustom(customFortune).(*CustomFortune) +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/descx.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/descx.go new file mode 100644 index 0000000..ce2104b --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/descx.go @@ -0,0 +1,45 @@ +package fortunetiger + +import ( + "github.com/tomas-qstarrs/boost/randx" + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" + "qstar_server/service/slots/desc" + "qstar_server/service/slots/intf" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} + +// 判断是否触发respin +func (n descx) TiggerRespin() bool { + // 读取配置 + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.FortuneTigerOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneTiger", "Others")) + } + return randx.RandPR(n.Randx, rows[0].RespinTriggerPro) +} + +// 获取全屏倍乘 +func (n descx) FullMulti() int64 { + // 读取配置 + sheet := n.DefaultSheet("Others") + // 转化数据 + rows, ok := sheet.([]*structs.FortuneTigerOthers) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "FortuneTiger", "Others")) + } + return rows[0].Multiplier +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/init.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/init.go new file mode 100644 index 0000000..cca8600 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/init.go @@ -0,0 +1,11 @@ +package fortunetiger + +var Plugins = []interface{}{ + &PluginBase{}, + &PluginSpecialRespin{}, + &PluginSpecial{}, +} + +var SimulatorPlugins = []interface{}{ + &PluginSimulator{}, +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/simulator.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/simulator.go new file mode 100644 index 0000000..935f24b --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/simulator.go @@ -0,0 +1,90 @@ +package fortunetiger + +import ( + "bytes" + "fmt" + "github.com/tomas-qstarrs/boost/mathx" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +// PluginSimulator is derived from generic.PluginBase +type PluginSimulator struct { + generic.PluginBase +} + +// SimulatorSummary is to store simulator info +type SimulatorSummary struct { + TotalBet int64 + RespinWin int64 + BaseWin int64 + RespinTriggerCount int64 + RespinWinCount int64 +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSimulator) Theme() string { + return key.FortuneTiger +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginSimulator) Customs() []interface{} { + return []interface{}{ + &SimulatorSummary{}, + } +} +func (p *PluginSimulator) getSummary(m intf.Master) *SimulatorSummary { + if len(m.RootFeatures(&SimulatorSummary{})) == 0 { + m.AddRootFeature(&SimulatorSummary{}).SetVisiable(false) + } + return m.RootCustom(&SimulatorSummary{}).(*SimulatorSummary) +} + +func (p *PluginSimulator) expireSummary(m intf.Master) { + features := m.RootFeatures(&SimulatorSummary{}) + for _, feature := range features { + feature.SetLifetime(0) + } +} + +func (p *PluginSimulator) OnStepEnd(m intf.Master) { + summary := p.getSummary(m) + curType := m.Cursor().GetType() + trigger := m.Bool(TriggerRespin) + + if curType == key.BaseSpin { + summary.TotalBet += m.Bet() + } + + if trigger || curType == ReSpin { + summary.RespinWin += m.Win() + if m.Win() > 0 { + summary.RespinWinCount++ + } + } else { + summary.BaseWin += m.Win() + } + + if trigger { + summary.RespinTriggerCount++ + } +} + +// OnSummary implements generic.PluginBase.OnSummary +func (p *PluginSimulator) OnSummary(m intf.Master) { + summary := p.getSummary(m) + defer p.expireSummary(m) + + var b bytes.Buffer + + b.WriteString("----------------------------------- \n") + + b.WriteString(fmt.Sprintf("纯Base返奖率: %v \n", mathx.SafeDiv(summary.BaseWin, summary.TotalBet))) + b.WriteString(fmt.Sprintf("Respin返奖率: %v \n", mathx.SafeDiv(summary.RespinWin, summary.TotalBet))) + b.WriteString(fmt.Sprintf("respin触发次数: %v \n", summary.RespinTriggerCount)) + b.WriteString(fmt.Sprintf("respin中奖次数: %v \n", summary.RespinWinCount)) + b.WriteString(fmt.Sprintf("respin不中奖概率: %v \n", 1-mathx.SafeDiv(summary.RespinWinCount, summary.RespinTriggerCount))) + + m.SetSummary(b.String()) +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/specialrespin.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/specialrespin.go new file mode 100644 index 0000000..bd5fc1f --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/specialrespin.go @@ -0,0 +1,67 @@ +package fortunetiger + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" + "qstar_server/service/slots/types/cli" +) + +type PluginSpecialRespin struct { + generic.PluginBase +} + +// Theme is called to get feature theme +func (p *PluginSpecialRespin) Theme() string { + return key.FortuneTiger +} +func (p *PluginSpecialRespin) GetNowSymbols(m intf.Master) [][]int64 { + fortune := getCustomFortune(m) + symbols := m.CursorFormation().GetSymbols() + for i := 0; i < len(symbols); i++ { + if fortune.Collects[i] > 0 { + symbols[i] = fortune.Collects[i] + } + } + return cli.ToItems(m.CursorFormation().GetMatrixForm(), symbols) +} +func (p *PluginSpecialRespin) BeforeDisplay(m intf.Master) { + if m.Cursor().GetType() == ReSpin && !m.Bool(NewCollect) { + symbolsarr := p.GetNowSymbols(m) + fortune := getCustomFortune(m) + win := m.IsWinInBeforeDisplayBySymbols(symbolsarr) + if win == 0 { + var lines = []int{0, 1, 2, 3, 4} + idx := m.Randx().Intn(len(lines)) + lineId := lines[idx] + + val200 := make(map[int][][]int) + allLines := m.CursorFormation().GetLineLines() + for id, line := range allLines { + if id == lineId { + for i2, i3 := range line { + if symbolsarr[i2][i3-1] == SymbolEmpty { + val200[id] = append(val200[id], []int{i2, int(i3) - 1}) + } + } + break + } + } + + newItem := [][]int64{{SymbolEmpty, SymbolEmpty, SymbolEmpty}, {SymbolEmpty, SymbolEmpty, SymbolEmpty}, + {SymbolEmpty, SymbolEmpty, SymbolEmpty}} + + for _, ints := range val200[lineId] { + newItem[ints[0]][ints[1]] = fortune.Symbol + } + + newSymbols := make([]int64, 0) + for _, colSymbols := range newItem { + newSymbols = append(newSymbols, colSymbols...) + } + fortune.ReSpinStatus = key.RespinProcess + m.CursorFormation().SetSymbols(newSymbols) + m.Set(IsRespinEnd, true) + } + } +} diff --git a/gamesrv/slotspkg/slots/plugin/fortunetiger/tospecial.go b/gamesrv/slotspkg/slots/plugin/fortunetiger/tospecial.go new file mode 100644 index 0000000..1a1212d --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/fortunetiger/tospecial.go @@ -0,0 +1,85 @@ +package fortunetiger + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +type PluginSpecial struct { + generic.PluginBase +} + +// Theme implements generic.PluginBase.Theme +func (p *PluginSpecial) Theme() string { + return key.FortuneTiger +} + +// Special +type Special struct { + ReSpinStatus int `json:"rs,omitempty"` //0.默认 1.第一次触发 2.进行中 3.结束 + ReSpinSymbol int64 `json:"rsy,omitempty"` //图标(respin) + Lock [][]int `json:"l,omitempty"` //原来锁定的位置 + AddLock [][]int `json:"al,omitempty"` //新增锁定的位置 + X10 int64 `json:"x10,omitempty"` //100.不同图标 88.wild 其他类型.按当前单一中奖图标类型 + WinLines map[int][][]int `json:"wls,omitempty"` +} + +// 获取特性数据 +func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special { + customSpecial := new(Special) + if len(m.CursorCustoms(customSpecial)) == 0 { + m.AddCursorFeature(customSpecial) + } + return m.CursorCustom(customSpecial).(*Special) +} +func (p *PluginSpecial) AfterSpin(m intf.Master) { + if m.Bool(TriggerRespin) || m.Cursor().GetType() == ReSpin { + fortune := getCustomFortune(m) + sp := p.getCustomSpecial(m) + sp.ReSpinStatus = fortune.ReSpinStatus + sp.ReSpinSymbol = fortune.Symbol + sp.Lock = fortune.Lock + sp.AddLock = fortune.AddLock + sp.X10 = fortune.SpX10 + rewardInfo := m.CursorFormation().GetRewardInfo() + if rewardInfo != nil { + sp.WinLines = make(map[int][][]int) + for _, info := range rewardInfo { + sp.WinLines[info.Index] = info.Pos + } + } + + if sp.ReSpinStatus != key.RespinFinish { + m.CursorFormation().SetRewardInfo(nil) + } + + if m.Bool(TriggerRespin) { + m.CursorFormation().SetNewNodeType(ReSpin) + } + + //logx.Error("ReSpinStatus", sp.ReSpinStatus) + //logx.Error("LastSymbols", fortune.LastSymbols) + //logx.Error("Lock", sp.Lock) + //logx.Error("AddLock", sp.AddLock) + } else { + fortune := getCustomFortune(m) + sp := p.getCustomSpecial(m) + sp.X10 = fortune.SpX10 + } + displaySymbols := m.CursorFormation().GetDisplaySymbols() + for i, symbol := range displaySymbols { + if symbol == SymbolWild { + displaySymbols[i] = 0 + } + } + m.CursorFormation().SetDisplaySymbols(displaySymbols) + + finalSymbols := m.CursorFormation().GetFinalSymbols() + for i, symbol := range finalSymbols { + if symbol == SymbolWild { + finalSymbols[i] = 0 + } + } + m.CursorFormation().SetFinalSymbols(finalSymbols) +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/base.go b/gamesrv/slotspkg/slots/plugin/generic/base.go new file mode 100644 index 0000000..27c2e02 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/base.go @@ -0,0 +1,48 @@ +package generic + +import ( + "qstar_server/service/slots/intf" +) + +// PluginBase implements a default plugin for Plugin. +type PluginBase struct{} + +// Theme is called to get feature theme +func (p *PluginBase) Theme() string { return "" } + +// Customs is called to get feature customs +func (p *PluginBase) Customs() []interface{} { return []interface{}{} } + +// OnInit is called on initializing a theme +func (p *PluginBase) OnInit(intf.Master) {} + +// OnStepBegin is called on initializing a step +func (p *PluginBase) OnStepBegin(m intf.Master) {} + +// OnEnterNode is called after entering a node +func (p *PluginBase) OnEnterNode(intf.Master) {} + +// BeforeSpin is called before spin +func (p *PluginBase) BeforeSpin(intf.Master) {} + +// BeforeDisplay is called before display +func (p *PluginBase) BeforeDisplay(intf.Master) {} + +// AfterDisplay is called after display +func (p *PluginBase) AfterDisplay(intf.Master) {} + +// AfterSpin is called after spin +func (p *PluginBase) AfterSpin(intf.Master) {} + +// OnLeaveNode is called before leaving a node +func (p *PluginBase) OnLeaveNode(intf.Master) {} + +// OnStepEnd is called on finalizing a step +func (p *PluginBase) OnStepEnd(intf.Master) {} + +// OnSummary is called on simulator summary +func (p *PluginBase) OnSummary(intf.Master) {} + +// OnStay is called to do something out of normal step +func (p *PluginBase) OnStay(m intf.Master) { +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/descx.go b/gamesrv/slotspkg/slots/plugin/generic/descx.go new file mode 100644 index 0000000..1882f0a --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/descx.go @@ -0,0 +1,20 @@ +package generic + +import ( + "qstar_server/service/slots/desc" + "qstar_server/service/slots/intf" + + "github.com/tomas-qstarrs/boost/randx" +) + +type descx struct { + *randx.Randx + *desc.NodeDesc +} + +func Descx(m intf.Master) *descx { + return &descx{ + Randx: m.Randx(), + NodeDesc: m.Desc(), + } +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/descx_jackpot.go b/gamesrv/slotspkg/slots/plugin/generic/descx_jackpot.go new file mode 100644 index 0000000..80424fe --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/descx_jackpot.go @@ -0,0 +1,83 @@ +package generic + +import ( + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" +) + +func (n descx) JackpotBaseWin(typ int64, bet int64) int64 { + v := n.Sheet("Jackpot", "Prize") + rows, ok := v.([]*structs.JackpotPrize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Jackpot", "Prize")) + } + for _, row := range rows { + if row.PrizeType == typ { + return row.StartPoint * bet + } + } + + return 0 +} + +func (n descx) JackpotStartPoints() map[int64]int64 { + v := n.Sheet("Jackpot", "Prize") + prizes, ok := v.([]*structs.JackpotPrize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Jackpot", "Prize")) + } + startPoints := make(map[int64]int64) + for _, prize := range prizes { + startPoints[prize.PrizeType] = prize.StartPoint + } + return startPoints +} + +func (n descx) JackpotHasPipeIn(typ int64, bet int64) bool { + v := n.Sheet("Jackpot", "Prize") + prizes, ok := v.([]*structs.JackpotPrize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Jackpot", "Prize")) + } + + for _, prize := range prizes { + if prize.PrizeType == typ { + return true + } + } + return false +} + +func (n descx) JackpotPipeIn(typ int64, bet int64) int64 { + v := n.Sheet("Jackpot", "Prize") + prizes, ok := v.([]*structs.JackpotPrize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Jackpot", "Prize")) + } + + for _, prize := range prizes { + if prize.PrizeType == typ { + return prize.PipeIn * bet / 10000 + } + } + return 0 +} + +// GenericJackpotPrizeTypes returns all prize types +func (n descx) JackpotPrizeTypes() []int64 { + if !n.ExistSheet("Jackpot", "Prize") { + return nil + } + + v := n.Sheet("Jackpot", "Prize") + prizes, ok := v.([]*structs.JackpotPrize) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Jackpot", "Prize")) + } + types := make([]int64, 0, len(prizes)) + for _, prize := range prizes { + types = append(types, prize.PrizeType) + } + + return types +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/descx_scatter.go b/gamesrv/slotspkg/slots/plugin/generic/descx_scatter.go new file mode 100644 index 0000000..463dddf --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/descx_scatter.go @@ -0,0 +1,97 @@ +package generic + +import ( + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" +) + +const ( + // ScatterName freespin scatterName + ScatterName string = "Scatter" +) + +// GenericFreeSpin gets freespin bouts +func (n descx) FreeSpin(isFreeSpin bool, + count int64) int64 { + v := n.DefaultSheet("Scatter") + rows, ok := v.(map[int64]*structs.Scatter) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Scatter")) + } + + var index int64 = 0 + + for i, s := range rows { + if count >= s.ScatterCount { + if i > index { + index = i + } + } + } + + row, ok := rows[index] + if !ok { + panic(errors.ConfigKeyNotFound.ErrorWith(n.Theme, "Scatter", count)) + } + + var bout int64 + if isFreeSpin { + bout = row.FreeSpinExtraBouts + } else { + bout = row.FreeSpinBouts + } + + return bout +} + +// GenericScatterSymbol get scaatterSymbol +func (n descx) ScatterSymbol() []int64 { + sheet := n.DefaultSheet("Symbol") + content, ok := sheet.(map[int64]*structs.Symbol) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Symbol")) + } + scatterSymbols := make([]int64, 0) + for _, v := range content { + if v.Name == ScatterName { + scatterSymbols = append(scatterSymbols, v.ID) + } + } + if len(scatterSymbols) == 0 { + panic(errors.ConfigSheetNotFound.ErrorWith(n.Theme, "Symbol")) + } + return scatterSymbols +} + +// GenericScatterPayRate gets scatter pay rate +func (n descx) ScatterPayRate(isFreeSpin bool, count int64) int64 { + v := n.DefaultSheet("Scatter") + rows, ok := v.(map[int64]*structs.Scatter) + if !ok { + panic(errors.ConfigTypeError.ErrorWith(n.Theme, "Scatter")) + } + + var index int64 = 0 + + for i, s := range rows { + if count >= s.ScatterCount { + if i > index { + index = i + } + } + } + + row, ok := rows[index] + if !ok { + panic(errors.ConfigKeyNotFound.ErrorWith(n.Theme, "Scatter", count)) + } + + var payRate int64 + if isFreeSpin { + payRate = row.FreePayrate + } else { + payRate = row.BasePayrate + } + + return payRate +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/descx_super_stack.go b/gamesrv/slotspkg/slots/plugin/generic/descx_super_stack.go new file mode 100644 index 0000000..2349bcf --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/descx_super_stack.go @@ -0,0 +1,40 @@ +package generic + +import ( + "fmt" + + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/errors" + + "github.com/tomas-qstarrs/boost/randx" +) + +func (n descx) SuperStackSymbol(status string) int64 { + path := fmt.Sprintf("%s%s", "SuperStack", status) + v := n.Sheet(path, "Weight") + content, ok := v.([]*structs.SuperStackWeight) + if !ok { + panic(errors.ConfigTypeError.Error()) + } + var weights = make([]float64, 0, len(content)) + for _, v := range content { + weights = append(weights, v.Weight) + } + index := randx.RandWeight(n.Randx, weights) + return content[index].ItemID +} + +func (n descx) SuperStackStarSymbol(status string) int64 { + path := fmt.Sprintf("%s%s", "SuperStackStar", status) + v := n.Sheet(path, "Weight") + content, ok := v.([]*structs.SuperStackWeight) + if !ok { + panic(errors.ConfigTypeError.Error()) + } + var weights = make([]float64, 0, len(content)) + for _, v := range content { + weights = append(weights, v.Weight) + } + index := randx.RandWeight(n.Randx, weights) + return content[index].ItemID +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/jackpot.go b/gamesrv/slotspkg/slots/plugin/generic/jackpot.go new file mode 100644 index 0000000..d99fba5 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/jackpot.go @@ -0,0 +1,156 @@ +package generic + +import ( + "qstar_server/service/slots/intf" +) + +// PluginJackpot is derived from generic.PluginBase +type PluginJackpot struct { + PluginBase +} + +// CustomJackpotPools stores jackpot pools +type CustomJackpotPools struct { + Pools map[int64]int64 + StartPoints map[int64]int64 +} + +// CustomJackpotWin stores jackpot win results +type CustomJackpotWin struct { + Type int64 +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginJackpot) Customs() []interface{} { + return []interface{}{ + &CustomJackpotPools{}, + &CustomJackpotWin{}, + } +} + +// OnInit implements generic.PluginBase.OnInit +func (p *PluginJackpot) OnInit(m intf.Master) { + if !p.Inited(m) { + p.InitPools(m) + } + custom := m.RootCustom(&CustomJackpotPools{}).(*CustomJackpotPools) + if custom.Pools == nil { + custom.Pools = map[int64]int64{} + } + p.setStartPoints(m) +} + +// BeforeSpin implements generic.PluginBase.BeforeSpin +func (p *PluginJackpot) BeforeSpin(m intf.Master) { + if !p.Inited(m) { + p.InitPools(m) + } +} + +// Inited returns if jackpot is inited +func (p *PluginJackpot) Inited(m intf.Master) bool { + return len(m.RootFeatures(&CustomJackpotPools{})) > 0 +} + +// InitPools inits all pools before spin +func (p *PluginJackpot) InitPools(m intf.Master) { + pools := make(map[int64]int64) + + types := Descx(m).JackpotPrizeTypes() + for _, typ := range types { + pools[typ] = 0 + } + + m.AddRootFeature(&CustomJackpotPools{ + Pools: pools, + }) +} + +func (p *PluginJackpot) OnStepEnd(m intf.Master) { +} + +// PipeInPools add some value to pool after bet +func (p *PluginJackpot) PipeInPools(m intf.Master) { + types := Descx(m).JackpotPrizeTypes() + for _, typ := range types { + if Descx(m).JackpotHasPipeIn(typ, m.Bet()) { + pipeIn := p.GetPipeIn(m, typ) + p.AppendPool(m, typ, pipeIn) + } + } +} + +// WinPool wins a specific type pool +func (p *PluginJackpot) WinPool(m intf.Master, typ int64) int64 { + return p.kernelWinPool(m, typ, 1, true, true, m.Bet()) +} + +func (p *PluginJackpot) WinPoolWithMulti(m intf.Master, typ int64, multi int64) int64 { + return p.kernelWinPool(m, typ, multi, true, true, m.Bet()) +} + +func (p *PluginJackpot) PureWinPool(m intf.Master, typ int64) int64 { + return p.kernelWinPool(m, typ, 1, false, true, m.Bet()) +} + +func (p *PluginJackpot) CalcWinPool(m intf.Master, typ int64) int64 { + return p.kernelWinPool(m, typ, 1, false, false, m.Bet()) +} + +func (p *PluginJackpot) CalcWinPoolWithBet(m intf.Master, typ int64, bet int64) int64 { + return p.kernelWinPool(m, typ, 1, false, false, bet) +} + +// kernelWinPool +// typ: 赢取挡位 +// multi: 额外倍数 +// withFeature: 是否添加Feature,也就是是否内置赢钱 +// withClear: 是否清空池子 + +func (p *PluginJackpot) kernelWinPool(m intf.Master, typ int64, multi int64, withFeature bool, withClear bool, bet int64) int64 { + hasPipeIn := Descx(m).JackpotHasPipeIn(typ, bet) + + basePrize := Descx(m).JackpotBaseWin(typ, bet) * multi + poolPrize := int64(0) + if hasPipeIn { + poolPrize = p.GetPool(m, typ) * multi + if withClear { + p.ClearPool(m, typ) + } + } + + prize := basePrize + poolPrize + + if withFeature { + m.AddCursorFeature(&CustomJackpotWin{Type: typ}).SetWin(prize).SetLifetime(1) + } + + return prize +} + +// GetPool gets a specific type pool's value +func (p *PluginJackpot) GetPool(m intf.Master, typ int64) int64 { + pools := m.RootCustom(&CustomJackpotPools{}).(*CustomJackpotPools).Pools + return pools[typ] +} + +// ClearPool sets a specific type pool's value +func (p *PluginJackpot) ClearPool(m intf.Master, typ int64) { + pools := m.RootCustom(&CustomJackpotPools{}).(*CustomJackpotPools).Pools + pools[typ] = 0 +} + +func (p *PluginJackpot) AppendPool(m intf.Master, typ int64, n int64) { + pools := m.RootCustom(&CustomJackpotPools{}).(*CustomJackpotPools).Pools + pools[typ] += n +} + +func (p *PluginJackpot) GetPipeIn(m intf.Master, typ int64) int64 { + return Descx(m).JackpotPipeIn(typ, m.Bet()) +} + +// setStartPoints sets start points into CustomJackpotPools +func (p *PluginJackpot) setStartPoints(m intf.Master) { + startPoints := Descx(m).JackpotStartPoints() + m.RootCustom(&CustomJackpotPools{}).(*CustomJackpotPools).StartPoints = startPoints +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/scatter.go b/gamesrv/slotspkg/slots/plugin/generic/scatter.go new file mode 100644 index 0000000..b12258f --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/scatter.go @@ -0,0 +1,91 @@ +package generic + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + + "github.com/tomas-qstarrs/boost/mathx" +) + +// PluginScatter is derived from generic.PluginBase +type PluginScatter struct { + PluginBase +} + +// CustomExtraFreeSpin stores extra freespin +type CustomExtraFreeSpin struct { + ExtraTimes int64 +} + +// CustomScatterWin stores scatter win +type CustomScatterWin struct { +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginScatter) Customs() []interface{} { + return []interface{}{ + &CustomExtraFreeSpin{}, + &CustomScatterWin{}, + } +} + +// AfterBaseSpin is called after base spin +func (p *PluginScatter) AfterBaseSpin(m intf.Master) { + addTimes, win := p.GetScatterInfo(m, false) + if addTimes > 0 { + m.AddNodeOnCursor(key.FreeSpin, addTimes) + } + if win > 0 { + m.AddCursorFeature(&CustomScatterWin{}).SetWin(win) + } +} + +// AfterSpin implements generic.PluginBase.AfterSpin +func (p *PluginScatter) AfterSpin(m intf.Master) { + switch m.Cursor().GetType() { + case key.BaseSpin: + p.AfterBaseSpin(m) + case key.FreeSpin: + p.AfterFreeSpin(m) + } +} + +// AfterFreeSpin is called after free spin +func (p *PluginScatter) AfterFreeSpin(m intf.Master) { + addTimes, win := p.GetScatterInfo(m, true) + if addTimes > 0 { + m.AddProgress(addTimes) + m.AddCursorFeature(&CustomExtraFreeSpin{ExtraTimes: addTimes}).SetLifetime(1) + } + if win > 0 { + m.AddCursorFeature(&CustomScatterWin{}).SetWin(win) + } +} + +// GetScatterInfo gets add free spin times & pay rate +func (p *PluginScatter) GetScatterInfo(m intf.Master, inFreeSpin bool) (int64, int64) { + var scatterCount int64 + symbols := m.CursorFormation().GetSymbols() + scatterSymbols := p.Scatters(m) + for _, scatterSymbol := range scatterSymbols { + scatterCount += int64(mathx.Count(scatterSymbol, symbols)) + } + + if scatterCount == 0 { + return 0, 0 + } + + freeSpinCount := Descx(m).FreeSpin(inFreeSpin, scatterCount) + + payRate := Descx(m).ScatterPayRate(inFreeSpin, scatterCount) + + win := m.Bet() * payRate + + return freeSpinCount, win +} + +// sscatters sets specific scatter symbols +// Default is find symbols named Scatter +func (p *PluginScatter) Scatters(m intf.Master) []int64 { + return Descx(m).ScatterSymbol() +} diff --git a/gamesrv/slotspkg/slots/plugin/generic/super_stack.go b/gamesrv/slotspkg/slots/plugin/generic/super_stack.go new file mode 100644 index 0000000..3272efd --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/generic/super_stack.go @@ -0,0 +1,79 @@ +package generic + +import ( + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + + "github.com/tomas-qstarrs/boost/mathx" +) + +const ( + // SuperStackOne2One means 1 replace 1 + SuperStackOne2One int64 = iota + // SuperStackOne2Col means 1 replace 1 col + SuperStackOne2Col +) + +// PluginSuperStack is derived from generic.PluginBase +type PluginSuperStack struct { + PluginBase +} + +// CustomSuperStack superstack feature +type CustomSuperStack struct { + SuperStack []*CustomSuperStackSymbol +} + +// CustomSuperStackSymbol spuerstack symbol +type CustomSuperStackSymbol struct { + SrcSymbol int64 + ReelRule int64 + FinalSymbols []int64 + FinalSymbol int64 +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginSuperStack) Customs() []interface{} { + return []interface{}{ + &CustomSuperStack{}, + &CustomSuperStackSymbol{}, + } +} + +// TranslateFormation translate formation +func (p *PluginSuperStack) TranslateFormation(m intf.Master, stacks *CustomSuperStackSymbol) { + if stacks.ReelRule == SuperStackOne2One { + formations := m.CursorFormations() + for _, f := range formations { + symbols := f.GetSymbols() + symbols = mathx.Replace(symbols, stacks.SrcSymbol, stacks.FinalSymbol) + f.SetSymbols(symbols) + } + } else if stacks.ReelRule == SuperStackOne2Col { + formations := m.CursorFormations() + for _, f := range formations { + symbols := f.GetReelFormattedSymbols() + col := len(symbols) + for i := 0; i < col; i++ { + symbols[i] = mathx.Replace(symbols[i], stacks.SrcSymbol, stacks.FinalSymbols[i]) + } + f.SetFormattedSymbols(symbols) + } + } +} + +func (p *PluginSuperStack) GetNextStatus(m intf.Master) string { + t := m.Next().GetType() + if t == "Root" { + return key.BaseSpin + } + return t +} + +func (p *PluginSuperStack) GetCurStatus(m intf.Master) string { + t := m.Cursor().GetType() + if t == "Root" { + return key.BaseSpin + } + return t +} diff --git a/gamesrv/slotspkg/slots/plugin/init.go b/gamesrv/slotspkg/slots/plugin/init.go new file mode 100644 index 0000000..ab7fa8e --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/init.go @@ -0,0 +1,49 @@ +package plugin + +import ( + "qstar_server/internal/generic/global" + "qstar_server/service/slots/plugin/cashmania" + "qstar_server/service/slots/plugin/fortunedragon" + "qstar_server/service/slots/plugin/fortunemouse" + "qstar_server/service/slots/plugin/fortuneox" + "qstar_server/service/slots/plugin/fortunerabbit" + "qstar_server/service/slots/plugin/fortunetiger" + "qstar_server/service/slots/plugin/test" + "qstar_server/service/slots/reg" +) + +// Init registers all theme plugins to machine +func Init() { + reg.Register(fortuneox.Plugins...) + reg.Register(fortunetiger.Plugins...) + reg.Register(fortunerabbit.Plugins...) + reg.Register(fortunedragon.Plugins...) + reg.Register(fortunemouse.Plugins...) + reg.Register(cashmania.Plugins...) + reg.Register(test.Plugins...) + + if global.Mock { + reg.Register(fortuneox.SimulatorPlugins...) + reg.Register(fortunetiger.SimulatorPlugins...) + reg.Register(fortunerabbit.SimulatorPlugins...) + reg.Register(fortunedragon.SimulatorPlugins...) + reg.Register(cashmania.SimulatorPlugins...) + } +} + +// Close unregisters all theme plugins from machine +func Close() { + reg.Deregister(fortuneox.Plugins...) + reg.Deregister(fortunetiger.Plugins...) + reg.Deregister(fortunerabbit.Plugins...) + reg.Deregister(fortunedragon.Plugins...) + reg.Deregister(fortunemouse.Plugins...) + reg.Deregister(cashmania.Plugins...) + if global.Mock { + reg.Deregister(fortuneox.SimulatorPlugins...) + reg.Deregister(fortunetiger.SimulatorPlugins...) + reg.Deregister(fortunerabbit.SimulatorPlugins...) + reg.Deregister(fortunedragon.SimulatorPlugins...) + reg.Deregister(cashmania.SimulatorPlugins...) + } +} diff --git a/gamesrv/slotspkg/slots/plugin/test/base.go b/gamesrv/slotspkg/slots/plugin/test/base.go new file mode 100644 index 0000000..65cca57 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/test/base.go @@ -0,0 +1,69 @@ +package test + +import ( + "github.com/tomas-qstarrs/boost/randx" + "math" + "qstar_server/internal/exported/excel2go/structs" + "qstar_server/internal/generic/key" + "qstar_server/service/slots/intf" + "qstar_server/service/slots/plugin/generic" +) + +// PluginBase is derived from generic.PluginBase +type PluginBase struct { + generic.PluginBase +} + +const ( + PrizeTypeNormal = 1 + PrizeTypeJackpot = 2 +) + +// Theme implements generic.PluginBase.Theme +func (p *PluginBase) Theme() string { + return key.Test +} + +// Customs implements generic.PluginBase.Customs +func (p *PluginBase) Customs() []interface{} { + return append(p.PluginBase.Customs(), + &Test{}) +} + +// OnInit implements generic.PluginBase.OnInit +func (p *PluginBase) OnInit(m intf.Master) { +} + +// BeforeSpin implements generic.PluginBase.BeforeSpin +func (p *PluginBase) BeforeSpin(m intf.Master) { +} + +func (p *PluginBase) BeforeDisplay(m intf.Master) { +} + +func (p *PluginBase) AfterDisplay(m intf.Master) { + +} + +// AfterSpin implements generic.PluginBase.AfterSpin +func (p *PluginBase) AfterSpin(m intf.Master) { + var M float64 = 1.087 + var win float64 = 0 + TestRandomWeight := m.Desc().Sheet("Random", "Weight").([]*structs.TestRandomWeight) + var weight []float64 + for _, randomWeight := range TestRandomWeight { + weight = append(weight, randomWeight.Weight) + } + idx := randx.RandWeight(m.Randx(), weight) + var tx float64 = float64(m.Randx().Intn(500)+1) / 10 + if tx <= TestRandomWeight[idx].Time { + win = math.Pow(M, tx) * float64(m.Cursor().GetBet()) + } + m.AddCursorFeature(&Test{}).SetWin(int64(win)) +} + +type Test struct { +} + +func (p *PluginBase) OnStepEnd(m intf.Master) { +} diff --git a/gamesrv/slotspkg/slots/plugin/test/common.go b/gamesrv/slotspkg/slots/plugin/test/common.go new file mode 100644 index 0000000..4e28d43 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/test/common.go @@ -0,0 +1,5 @@ +package test + +const ( + TypeWild = 2 +) diff --git a/gamesrv/slotspkg/slots/plugin/test/init.go b/gamesrv/slotspkg/slots/plugin/test/init.go new file mode 100644 index 0000000..cd3fb69 --- /dev/null +++ b/gamesrv/slotspkg/slots/plugin/test/init.go @@ -0,0 +1,7 @@ +package test + +var Plugins = []interface{}{ + &PluginBase{}, +} + +var SimulatorPlugins = []interface{}{} diff --git a/gamesrv/slotspkg/slots/reg/customs.go b/gamesrv/slotspkg/slots/reg/customs.go new file mode 100644 index 0000000..2d2ec01 --- /dev/null +++ b/gamesrv/slotspkg/slots/reg/customs.go @@ -0,0 +1,20 @@ +package reg + +import ( + "reflect" +) + +// Customs stores customs type name +var Customs = make(map[string]reflect.Type) + +// RegisterCustom registers custom in machine +func RegisterCustom(v interface{}) { + eleTypeName := reflect.TypeOf(v).Elem().String() + Customs[eleTypeName] = reflect.TypeOf(v) +} + +// DeregisterCustom deregisters custom in machine +func DeregisterCustom(v interface{}) { + eleTypeName := reflect.TypeOf(v).Elem().String() + delete(Customs, eleTypeName) +} diff --git a/gamesrv/slotspkg/slots/reg/plugins.go b/gamesrv/slotspkg/slots/reg/plugins.go new file mode 100644 index 0000000..ee3a671 --- /dev/null +++ b/gamesrv/slotspkg/slots/reg/plugins.go @@ -0,0 +1,34 @@ +package reg + +import ( + "reflect" + + "qstar_server/service/slots/intf" +) + +// Plugins stores plugins mapped by theme name +var Plugins = make(map[string][]reflect.Type) + +// RegisterPlugin registers plugins in machine +func RegisterPlugin(plugin intf.Plugin) { + theme := plugin.Theme() + if _, ok := Plugins[theme]; !ok { + Plugins[theme] = make([]reflect.Type, 0) + } + Plugins[theme] = append(Plugins[theme], reflect.TypeOf(plugin)) +} + +// DeregisterPlugin deregisters plugins in machine +func DeregisterPlugin(plugin intf.Plugin) { + theme := plugin.Theme() + if _, ok := Plugins[theme]; !ok { + return + } + for index := 0; index < len(Plugins[theme]); index++ { + if Plugins[theme][index] == reflect.TypeOf(plugin) { + Plugins[theme] = append(Plugins[theme][:index], + Plugins[theme][index+1:]...) + index-- + } + } +} diff --git a/gamesrv/slotspkg/slots/reg/register.go b/gamesrv/slotspkg/slots/reg/register.go new file mode 100644 index 0000000..5c74fbd --- /dev/null +++ b/gamesrv/slotspkg/slots/reg/register.go @@ -0,0 +1,71 @@ +package reg + +import ( + "reflect" + + "qstar_server/internal/generic/errors" + "qstar_server/service/slots/intf" +) + +// Register register multiple plugins to global map +func Register(s ...interface{}) { + for _, v := range s { + plugin := getValidPlugin(v) + RegisterPlugin(plugin) + + for _, custom := range plugin.Customs() { + RegisterCustom(custom) + } + } +} + +// RegisterCustoms register customs to global map +func RegisterCustoms(s ...interface{}) { + for _, v := range s { + plugin := getValidPlugin(v) + for _, custom := range plugin.Customs() { + RegisterCustom(custom) + } + } +} + +// Deregister deregisters multiple plugins from global map +func Deregister(s ...interface{}) { + for _, v := range s { + plugin := getValidPlugin(v) + DeregisterPlugin(plugin) + for _, custom := range plugin.Customs() { + DeregisterCustom(custom) + } + } +} + +// DeregisterCustoms deregisters customs to global map +func DeregisterCustoms(s ...interface{}) { + for _, v := range s { + plugin := getValidPlugin(v) + for _, custom := range plugin.Customs() { + DeregisterCustom(custom) + } + } +} + +// getValidPlugin gets valid plugin or panic an error +func getValidPlugin(v interface{}) intf.Plugin { + plugin, ok := v.(intf.Plugin) + if !ok { + panic(errors.Errorf("plugin is not derived from Plugin: %s", reflect.TypeOf(v))) + } + + theme := plugin.Theme() + if theme == "" { + panic(errors.Errorf("theme can't be empty when register theme: %s", reflect.TypeOf(v))) + } + + customs := plugin.Customs() + if customs == nil { + panic(errors.Errorf("customs can't be nil")) + } + + return plugin +} diff --git a/gamesrv/slotspkg/slots/slotsmgr.go b/gamesrv/slotspkg/slots/slotsmgr.go new file mode 100644 index 0000000..57eb6af --- /dev/null +++ b/gamesrv/slotspkg/slots/slotsmgr.go @@ -0,0 +1,41 @@ +package slots + +import ( + "mongo.games.com/game/gamesrv/slotspkg/internal/module/session" + "mongo.games.com/game/gamesrv/slotspkg/slots/plugin" + "time" +) + +var SlotsMgrSington = &SlotsMgr{} + +type SlotsMgr struct { +} + +func (sm *SlotsMgr) ModuleName() string { + return "slots" +} +func ServiceName() string { + return "slots" +} +func (sm *SlotsMgr) Init() { + plugin.Init() +} + +func (sm *SlotsMgr) GetSession(uid uint64) *session.Session { + s := managermgr.SessionMgrSington.GetSession(uid) + return s +} +func (sm *SlotsMgr) GetSessionSimulator(uid uint64) *session.Session { + s := managermgr.SessionMgrSington.GetSessionSimulator(uid) + return s +} +func (sm *SlotsMgr) Update() { + +} + +func (sm *SlotsMgr) Shutdown() { + plugin.Close() +} +func init() { + module.RegisteModule(SlotsMgrSington, time.Hour, 0) +} diff --git a/gamesrv/slotspkg/slots/types/cli/1to2array.go b/gamesrv/slotspkg/slots/types/cli/1to2array.go new file mode 100644 index 0000000..ba4ef91 --- /dev/null +++ b/gamesrv/slotspkg/slots/types/cli/1to2array.go @@ -0,0 +1,55 @@ +package cli + +// ToPoss 一维数组根据矩阵转二维坐标 +func ToPoss(style []int64, pos []int64) [][]int { + var poss [][]int + var index int64 + for rowIdx, length := range style { + row := make([]int64, length) + for colIdx := range row { + for _, val := range pos { + if val == index { + poss = append(poss, []int{rowIdx, colIdx}) + } + } + index++ + } + } + return poss +} + +// ToItems transforms style and item slices into a 2D array +func ToItems(style []int64, item []int64) [][]int64 { + var items [][]int64 + var itemIndex int + for _, length := range style { + row := make([]int64, length) + for colIdx := range row { + if itemIndex < len(item) { + row[colIdx] = item[itemIndex] + itemIndex++ + } else { + break + } + } + items = append(items, row) + } + return items +} +func ToItemsFloat64(style []int64, item []float64) [][]float64 { + var items [][]float64 + var itemIndex int + for _, length := range style { + row := make([]float64, length) + for colIdx := range row { + if itemIndex < len(item) { + row[colIdx] = item[itemIndex] + itemIndex++ + } else { + break + } + } + items = append(items, row) + } + return items +} diff --git a/gamesrv/slotspkg/slots/types/cli/cli.go b/gamesrv/slotspkg/slots/types/cli/cli.go new file mode 100644 index 0000000..e07cf18 --- /dev/null +++ b/gamesrv/slotspkg/slots/types/cli/cli.go @@ -0,0 +1,48 @@ +package cli + +import ( + "qstar_server/internal/module/shared" +) + +type SlotsEnterRequest struct { + Theme string +} +type SlotsEnterResponse struct { + Code int64 + NodeTree *shared.LiteNodeTree + Coin int64 + BetSizeIndex int64 + BetLevelIndex int64 + BetLineIndex int64 + BetChangeList []float64 + BetSizes []int64 + BetLevels []int64 + BetLines []int64 +} +type SlotsPlayRequest struct { + Theme string + BetLevelIndex int64 + BetSizeIndex int64 + BetLineIndex int64 + Choice int64 + Stay bool + Version int64 +} +type SlotsPlayResponse struct { + NodeTree *shared.LiteNodeTree + Code int64 + ActualBet int64 + ActualWin int64 + Coin int64 + DebugInfo string + IsEnd bool +} + +type SlotsLeaveRequest struct { + Theme string +} + +type SlotsLeaveResponse struct { + Code int64 + Coin int64 +} diff --git a/gamesrv/slotspkg/slots/types/cli/simulator.go b/gamesrv/slotspkg/slots/types/cli/simulator.go new file mode 100644 index 0000000..8196391 --- /dev/null +++ b/gamesrv/slotspkg/slots/types/cli/simulator.go @@ -0,0 +1,930 @@ +package cli + +// base options +type SimulatorBaseOption struct { + LineID int64 + Name string + Comment string + MaxRunTime int64 +} + +func (x *SimulatorBaseOption) GetLineID() int64 { + if x != nil { + return x.LineID + } + return 0 +} + +func (x *SimulatorBaseOption) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SimulatorBaseOption) GetComment() string { + if x != nil { + return x.Comment + } + return "" +} + +func (x *SimulatorBaseOption) GetMaxRunTime() int64 { + if x != nil { + return x.MaxRunTime + } + return 0 +} + +// request Options +type SimulatorRequestOption struct { + Theme string + + BetIndex int64 + + CoinValueIndex int64 + + Choice int64 + + Stay bool + + Version int64 + + ClassId int64 + + CycleTimes int64 + + BetStrategy int64 + + Cycles int64 + + RecorderStrategy int64 +} + +func (x *SimulatorRequestOption) GetTheme() string { + if x != nil { + return x.Theme + } + return "" +} + +func (x *SimulatorRequestOption) GetBetIndex() int64 { + if x != nil { + return x.BetIndex + } + return 0 +} + +func (x *SimulatorRequestOption) GetCoinValueIndex() int64 { + if x != nil { + return x.CoinValueIndex + } + return 0 +} + +func (x *SimulatorRequestOption) GetChoice() int64 { + if x != nil { + return x.Choice + } + return 0 +} + +func (x *SimulatorRequestOption) GetStay() bool { + if x != nil { + return x.Stay + } + return false +} + +func (x *SimulatorRequestOption) GetVersion() int64 { + if x != nil { + return x.Version + } + return 0 +} + +func (x *SimulatorRequestOption) GetCycleTimes() int64 { + if x != nil { + return x.CycleTimes + } + return 0 +} + +func (x *SimulatorRequestOption) GetBetStrategy() int64 { + if x != nil { + return x.BetStrategy + } + return 0 +} + +func (x *SimulatorRequestOption) GetCycles() int64 { + if x != nil { + return x.Cycles + } + return 0 +} + +func (x *SimulatorRequestOption) GetRecorderStrategy() int64 { + if x != nil { + return x.RecorderStrategy + } + return 0 +} + +type SimulatorPlayerOption struct { + Coins int64 +} + +func (x *SimulatorPlayerOption) GetCoins() int64 { + if x != nil { + return x.Coins + } + return 0 +} + +type SimulatorGMOption struct { + LockCoin bool +} + +func (x *SimulatorGMOption) GetLockCoin() bool { + if x != nil { + return x.LockCoin + } + return false +} + +type SimulatorStatsOption struct { + Machine bool + + Summary bool + + Custom bool + + History bool + + Chart bool +} + +func (x *SimulatorStatsOption) GetMachine() bool { + if x != nil { + return x.Machine + } + return false +} + +func (x *SimulatorStatsOption) GetSummary() bool { + if x != nil { + return x.Summary + } + return false +} + +func (x *SimulatorStatsOption) GetCustom() bool { + if x != nil { + return x.Custom + } + return false +} + +func (x *SimulatorStatsOption) GetHistory() bool { + if x != nil { + return x.History + } + return false +} + +func (x *SimulatorStatsOption) GetChart() bool { + if x != nil { + return x.Chart + } + return false +} + +type SimulatorLine struct { + Base *SimulatorBaseOption + + Request *SimulatorRequestOption + + Player *SimulatorPlayerOption + + GM *SimulatorGMOption + + Stats *SimulatorStatsOption +} + +func (x *SimulatorLine) GetBase() *SimulatorBaseOption { + if x != nil { + return x.Base + } + return nil +} + +func (x *SimulatorLine) GetRequest() *SimulatorRequestOption { + if x != nil { + return x.Request + } + return nil +} + +func (x *SimulatorLine) GetPlayer() *SimulatorPlayerOption { + if x != nil { + return x.Player + } + return nil +} + +func (x *SimulatorLine) GetGM() *SimulatorGMOption { + if x != nil { + return x.GM + } + return nil +} + +func (x *SimulatorLine) GetStats() *SimulatorStatsOption { + if x != nil { + return x.Stats + } + return nil +} + +type SimulatorStatus struct { + PlayID int64 + + CreateTime string + + FinishTime string + + Progress int64 + + ProgressTime string + + State int64 +} + +func (x *SimulatorStatus) GetPlayID() int64 { + if x != nil { + return x.PlayID + } + return 0 +} + +func (x *SimulatorStatus) GetCreateTime() string { + if x != nil { + return x.CreateTime + } + return "" +} + +func (x *SimulatorStatus) GetFinishTime() string { + if x != nil { + return x.FinishTime + } + return "" +} + +func (x *SimulatorStatus) GetProgress() int64 { + if x != nil { + return x.Progress + } + return 0 +} + +func (x *SimulatorStatus) GetProgressTime() string { + if x != nil { + return x.ProgressTime + } + return "" +} + +func (x *SimulatorStatus) GetState() int64 { + if x != nil { + return x.State + } + return 0 +} + +// Storing stats id +type SimulatorStats struct { + Machine int64 + + Summary int64 + + Custom int64 + + History int64 + + Chart int64 +} + +func (x *SimulatorStats) GetMachine() int64 { + if x != nil { + return x.Machine + } + return 0 +} + +func (x *SimulatorStats) GetSummary() int64 { + if x != nil { + return x.Summary + } + return 0 +} + +func (x *SimulatorStats) GetCustom() int64 { + if x != nil { + return x.Custom + } + return 0 +} + +func (x *SimulatorStats) GetHistory() int64 { + if x != nil { + return x.History + } + return 0 +} + +func (x *SimulatorStats) GetChart() int64 { + if x != nil { + return x.Chart + } + return 0 +} + +type SimulatorPlay struct { + Line *SimulatorLine + + Status *SimulatorStatus + + Stats *SimulatorStats +} + +func (x *SimulatorPlay) GetLine() *SimulatorLine { + if x != nil { + return x.Line + } + return nil +} + +func (x *SimulatorPlay) GetStatus() *SimulatorStatus { + if x != nil { + return x.Status + } + return nil +} + +func (x *SimulatorPlay) GetStats() *SimulatorStats { + if x != nil { + return x.Stats + } + return nil +} + +type SimulatorPlayerStatus struct { + Time int64 + Coins int64 +} + +func (x *SimulatorPlayerStatus) GetTime() int64 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *SimulatorPlayerStatus) GetCoins() int64 { + if x != nil { + return x.Coins + } + return 0 +} + +type SimulatorSetPlayerRequest struct { + Line *SimulatorLine + Uid uint64 +} + +func (x *SimulatorSetPlayerRequest) GetLine() *SimulatorLine { + if x != nil { + return x.Line + } + return nil +} + +type SimulatorSetPlayerResponse struct { + Code int64 +} + +func (x *SimulatorSetPlayerResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorPlayRequest struct { + Play *SimulatorPlay + Uid uint64 +} + +func (x *SimulatorPlayRequest) GetPlay() *SimulatorPlay { + if x != nil { + return x.Play + } + return nil +} + +type SimulatorPlayResponse struct { + Code int64 +} + +func (x *SimulatorPlayResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorRegisterRequest struct { + Username string + Password string +} + +func (x *SimulatorRegisterRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorRegisterRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type SimulatorRegisterResponse struct { + Code int64 +} + +func (x *SimulatorRegisterResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorLoginRequest struct { + Username string + Password string +} + +func (x *SimulatorLoginRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorLoginRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type SimulatorLoginResponse struct { + Code int64 +} + +func (x *SimulatorLoginResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorInsertLineRequest struct { + Username string + Theme string + Name string +} + +func (x *SimulatorInsertLineRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorInsertLineRequest) GetTheme() string { + if x != nil { + return x.Theme + } + return "" +} + +func (x *SimulatorInsertLineRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type SimulatorInsertLineResponse struct { + Code int64 + Line *SimulatorLine +} + +func (x *SimulatorInsertLineResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorInsertLineResponse) GetLine() *SimulatorLine { + if x != nil { + return x.Line + } + return nil +} + +type SimulatorReviseLineRequest struct { + Username string + Line *SimulatorLine +} + +func (x *SimulatorReviseLineRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorReviseLineRequest) GetLine() *SimulatorLine { + if x != nil { + return x.Line + } + return nil +} + +type SimulatorReviseLineResponse struct { + Code int64 +} + +func (x *SimulatorReviseLineResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorDeleteLinesRequest struct { + Username string + LineIDs []int64 +} + +func (x *SimulatorDeleteLinesRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorDeleteLinesRequest) GetLineIDs() []int64 { + if x != nil { + return x.LineIDs + } + return nil +} + +type SimulatorDeleteLinesResponse struct { + Code int64 +} + +func (x *SimulatorDeleteLinesResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorQueryLinesRequest struct { + Username string +} + +func (x *SimulatorQueryLinesRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +type SimulatorQueryLinesResponse struct { + Code int64 + Lines []*SimulatorLine +} + +func (x *SimulatorQueryLinesResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorQueryLinesResponse) GetLines() []*SimulatorLine { + if x != nil { + return x.Lines + } + return nil +} + +type SimulatorStartPlayRequest struct { + Username string + LineID int64 +} + +func (x *SimulatorStartPlayRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorStartPlayRequest) GetLineID() int64 { + if x != nil { + return x.LineID + } + return 0 +} + +type SimulatorStartPlayResponse struct { + Code int64 + PlayID int64 +} + +func (x *SimulatorStartPlayResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorStartPlayResponse) GetPlayID() int64 { + if x != nil { + return x.PlayID + } + return 0 +} + +type SimulatorQueryPlaysRequest struct { + Username string + States []int64 + LineID int64 + PageSize int64 + PageNum int64 +} + +func (x *SimulatorQueryPlaysRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorQueryPlaysRequest) GetStates() []int64 { + if x != nil { + return x.States + } + return nil +} + +func (x *SimulatorQueryPlaysRequest) GetLineID() int64 { + if x != nil { + return x.LineID + } + return 0 +} + +func (x *SimulatorQueryPlaysRequest) GetPageSize() int64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *SimulatorQueryPlaysRequest) GetPageNum() int64 { + if x != nil { + return x.PageNum + } + return 0 +} + +type SimulatorQueryPlaysResponse struct { + Code int64 + Plays []*SimulatorPlay + Count int64 +} + +func (x *SimulatorQueryPlaysResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorQueryPlaysResponse) GetPlays() []*SimulatorPlay { + if x != nil { + return x.Plays + } + return nil +} + +func (x *SimulatorQueryPlaysResponse) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +type SimulatorDeletePlaysRequest struct { + Username string + PlayIDs []int64 +} + +func (x *SimulatorDeletePlaysRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorDeletePlaysRequest) GetPlayIDs() []int64 { + if x != nil { + return x.PlayIDs + } + return nil +} + +type SimulatorDeletePlaysResponse struct { + Code int64 +} + +func (x *SimulatorDeletePlaysResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorInsertThemeRequest struct { + Username string + Theme string +} + +func (x *SimulatorInsertThemeRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorInsertThemeRequest) GetTheme() string { + if x != nil { + return x.Theme + } + return "" +} + +type SimulatorInsertThemeResponse struct { + Code int64 +} + +func (x *SimulatorInsertThemeResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorDeleteThemesRequest struct { + Username string + Themes []string +} + +func (x *SimulatorDeleteThemesRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *SimulatorDeleteThemesRequest) GetThemes() []string { + if x != nil { + return x.Themes + } + return nil +} + +type SimulatorDeleteThemesResponse struct { + Code int64 +} + +func (x *SimulatorDeleteThemesResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +type SimulatorQueryThemesRequest struct { + Username string +} + +func (x *SimulatorQueryThemesRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +type SimulatorQueryThemesResponse struct { + Code int64 + Themes []string +} + +func (x *SimulatorQueryThemesResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorQueryThemesResponse) GetThemes() []string { + if x != nil { + return x.Themes + } + return nil +} + +type SimulatorQueryStatsRequest struct { + StatsIDs []int64 +} + +func (x *SimulatorQueryStatsRequest) GetStatsIDs() []int64 { + if x != nil { + return x.StatsIDs + } + return nil +} + +type SimulatorQueryStatsResponse struct { + Code int64 + StatsList []string +} + +func (x *SimulatorQueryStatsResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorQueryStatsResponse) GetStatsList() []string { + if x != nil { + return x.StatsList + } + return nil +} + +type SimulatorQueryPlayProgressRequest struct { + PlayIDs []int64 +} + +func (x *SimulatorQueryPlayProgressRequest) GetPlayIDs() []int64 { + if x != nil { + return x.PlayIDs + } + return nil +} + +type SimulatorQueryPlayProgressResponse struct { + Code int64 + Plays []*SimulatorPlay +} + +func (x *SimulatorQueryPlayProgressResponse) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *SimulatorQueryPlayProgressResponse) GetPlays() []*SimulatorPlay { + if x != nil { + return x.Plays + } + return nil +} diff --git a/gamesrv/slotspkg/slots/types/rpc/simulator.pb.go b/gamesrv/slotspkg/slots/types/rpc/simulator.pb.go new file mode 100644 index 0000000..a8f4eeb --- /dev/null +++ b/gamesrv/slotspkg/slots/types/rpc/simulator.pb.go @@ -0,0 +1,310 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.12.1 +// source: external/proto/rpc/simulator.proto + +package rpc + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +type OnSimulatorProgressRPC struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PlayID int64 `protobuf:"varint,1,opt,name=PlayID,proto3" json:"PlayID,omitempty"` + Progress int64 `protobuf:"varint,2,opt,name=Progress,proto3" json:"Progress,omitempty"` +} + +func (x *OnSimulatorProgressRPC) Reset() { + *x = OnSimulatorProgressRPC{} + if protoimpl.UnsafeEnabled { + mi := &file_external_proto_rpc_simulator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnSimulatorProgressRPC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnSimulatorProgressRPC) ProtoMessage() {} + +func (x *OnSimulatorProgressRPC) ProtoReflect() protoreflect.Message { + mi := &file_external_proto_rpc_simulator_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnSimulatorProgressRPC.ProtoReflect.Descriptor instead. +func (*OnSimulatorProgressRPC) Descriptor() ([]byte, []int) { + return file_external_proto_rpc_simulator_proto_rawDescGZIP(), []int{0} +} + +func (x *OnSimulatorProgressRPC) GetPlayID() int64 { + if x != nil { + return x.PlayID + } + return 0 +} + +func (x *OnSimulatorProgressRPC) GetProgress() int64 { + if x != nil { + return x.Progress + } + return 0 +} + +type OnSimluatorStatsRPC struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PlayID int64 `protobuf:"varint,1,opt,name=PlayID,proto3" json:"PlayID,omitempty"` + StatsType string `protobuf:"bytes,2,opt,name=StatsType,proto3" json:"StatsType,omitempty"` + StatsData string `protobuf:"bytes,3,opt,name=StatsData,proto3" json:"StatsData,omitempty"` +} + +func (x *OnSimluatorStatsRPC) Reset() { + *x = OnSimluatorStatsRPC{} + if protoimpl.UnsafeEnabled { + mi := &file_external_proto_rpc_simulator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnSimluatorStatsRPC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnSimluatorStatsRPC) ProtoMessage() {} + +func (x *OnSimluatorStatsRPC) ProtoReflect() protoreflect.Message { + mi := &file_external_proto_rpc_simulator_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnSimluatorStatsRPC.ProtoReflect.Descriptor instead. +func (*OnSimluatorStatsRPC) Descriptor() ([]byte, []int) { + return file_external_proto_rpc_simulator_proto_rawDescGZIP(), []int{1} +} + +func (x *OnSimluatorStatsRPC) GetPlayID() int64 { + if x != nil { + return x.PlayID + } + return 0 +} + +func (x *OnSimluatorStatsRPC) GetStatsType() string { + if x != nil { + return x.StatsType + } + return "" +} + +func (x *OnSimluatorStatsRPC) GetStatsData() string { + if x != nil { + return x.StatsData + } + return "" +} + +type OnSimulatorPlayRPC struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=Code,proto3" json:"Code,omitempty"` + PlayID int64 `protobuf:"varint,2,opt,name=PlayID,proto3" json:"PlayID,omitempty"` +} + +func (x *OnSimulatorPlayRPC) Reset() { + *x = OnSimulatorPlayRPC{} + if protoimpl.UnsafeEnabled { + mi := &file_external_proto_rpc_simulator_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnSimulatorPlayRPC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnSimulatorPlayRPC) ProtoMessage() {} + +func (x *OnSimulatorPlayRPC) ProtoReflect() protoreflect.Message { + mi := &file_external_proto_rpc_simulator_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnSimulatorPlayRPC.ProtoReflect.Descriptor instead. +func (*OnSimulatorPlayRPC) Descriptor() ([]byte, []int) { + return file_external_proto_rpc_simulator_proto_rawDescGZIP(), []int{2} +} + +func (x *OnSimulatorPlayRPC) GetCode() int64 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *OnSimulatorPlayRPC) GetPlayID() int64 { + if x != nil { + return x.PlayID + } + return 0 +} + +var File_external_proto_rpc_simulator_proto protoreflect.FileDescriptor + +var file_external_proto_rpc_simulator_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x72, 0x70, 0x63, 0x22, 0x4c, 0x0a, 0x16, 0x4f, 0x6e, 0x53, + 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x50, 0x43, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x69, 0x0a, 0x13, 0x4f, 0x6e, 0x53, 0x69, 0x6d, + 0x6c, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x50, 0x43, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x50, 0x6c, 0x61, 0x79, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x73, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x74, 0x61, 0x74, 0x73, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x40, 0x0a, 0x12, 0x4f, 0x6e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, + 0x72, 0x50, 0x6c, 0x61, 0x79, 0x52, 0x50, 0x43, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x6c, 0x61, 0x79, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x50, 0x6c, + 0x61, 0x79, 0x49, 0x44, 0x42, 0x26, 0x5a, 0x24, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2d, 0x6e, + 0x61, 0x6e, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2f, 0x70, 0x62, 0x2f, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_external_proto_rpc_simulator_proto_rawDescOnce sync.Once + file_external_proto_rpc_simulator_proto_rawDescData = file_external_proto_rpc_simulator_proto_rawDesc +) + +func file_external_proto_rpc_simulator_proto_rawDescGZIP() []byte { + file_external_proto_rpc_simulator_proto_rawDescOnce.Do(func() { + file_external_proto_rpc_simulator_proto_rawDescData = protoimpl.X.CompressGZIP(file_external_proto_rpc_simulator_proto_rawDescData) + }) + return file_external_proto_rpc_simulator_proto_rawDescData +} + +var file_external_proto_rpc_simulator_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_external_proto_rpc_simulator_proto_goTypes = []interface{}{ + (*OnSimulatorProgressRPC)(nil), // 0: rpc.OnSimulatorProgressRPC + (*OnSimluatorStatsRPC)(nil), // 1: rpc.OnSimluatorStatsRPC + (*OnSimulatorPlayRPC)(nil), // 2: rpc.OnSimulatorPlayRPC +} +var file_external_proto_rpc_simulator_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_external_proto_rpc_simulator_proto_init() } +func file_external_proto_rpc_simulator_proto_init() { + if File_external_proto_rpc_simulator_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_external_proto_rpc_simulator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnSimulatorProgressRPC); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_external_proto_rpc_simulator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnSimluatorStatsRPC); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_external_proto_rpc_simulator_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnSimulatorPlayRPC); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_external_proto_rpc_simulator_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_external_proto_rpc_simulator_proto_goTypes, + DependencyIndexes: file_external_proto_rpc_simulator_proto_depIdxs, + MessageInfos: file_external_proto_rpc_simulator_proto_msgTypes, + }.Build() + File_external_proto_rpc_simulator_proto = out.File + file_external_proto_rpc_simulator_proto_rawDesc = nil + file_external_proto_rpc_simulator_proto_goTypes = nil + file_external_proto_rpc_simulator_proto_depIdxs = nil +} diff --git a/gamesrv/slotspkg/tools/converter/converter.go b/gamesrv/slotspkg/tools/converter/converter.go new file mode 100644 index 0000000..20408ac --- /dev/null +++ b/gamesrv/slotspkg/tools/converter/converter.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "log" + "os" + "time" + + cvt "github.com/tomas-qstarrs/excel-converter/converter" +) + +func main() { + args := os.Args[1:] + DoConvert(args) +} + +func DoConvert(args []string) { + if len(args) < 4 { + log.Println("Requires at least 4 argument") + } + fmt.Println("Start...") + beginTm := time.Now() + + defer func() { + endTm := time.Now() + fmt.Printf("Done in %v seconds\n", float64(endTm.UnixNano()-beginTm.UnixNano())/10e8) + }() + + c := cvt.Config{ + Type: args[0], + ImportPath: args[1], + ExportPath: args[2], + ProjectPath: args[3], + } + + cvt.FlagSettings = "Settings" + cvt.FlagTemplate = "Template" + cvt.FlagDefault = "Default" + cvt.FlagBase = "Base" + cvt.FlagCategory = "Category" + cvt.FlagVarian = "Lucky" + cvt.FlagLink = "Link" + + // cvt.SetMode(cvt.DebugMode) + + cvt.Run(c) +} diff --git a/protocol/doc.md b/protocol/doc.md index 6d8f4f4..e33b793 100644 --- a/protocol/doc.md +++ b/protocol/doc.md @@ -161,5 +161,8 @@ ### smallrocket.protp - 5581~5599 +### fortunedragon.prot +- 5600~5609 + ### game.proto(玩家离开) - 8000~8099 \ No newline at end of file diff --git a/protocol/fortunedragon/fortunedragon.pb.go b/protocol/fortunedragon/fortunedragon.pb.go new file mode 100644 index 0000000..29ae44e --- /dev/null +++ b/protocol/fortunedragon/fortunedragon.pb.go @@ -0,0 +1,792 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1-devel +// protoc v3.19.4 +// source: fortunedragon.proto + +package fortunedragon + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +//fortunedragon +//龙 +type FortuneDragonPID int32 + +const ( + FortuneDragonPID_PACKET_FORTUNEDRAGON_ZERO FortuneDragonPID = 0 // 弃用消息号 + FortuneDragonPID_PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO FortuneDragonPID = 5600 //房间信息 + FortuneDragonPID_PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP FortuneDragonPID = 5601 + FortuneDragonPID_PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONOP FortuneDragonPID = 5602 + FortuneDragonPID_PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMSTATE FortuneDragonPID = 5603 + FortuneDragonPID_PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONBILLED FortuneDragonPID = 5604 +) + +// Enum value maps for FortuneDragonPID. +var ( + FortuneDragonPID_name = map[int32]string{ + 0: "PACKET_FORTUNEDRAGON_ZERO", + 5600: "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO", + 5601: "PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP", + 5602: "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONOP", + 5603: "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMSTATE", + 5604: "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONBILLED", + } + FortuneDragonPID_value = map[string]int32{ + "PACKET_FORTUNEDRAGON_ZERO": 0, + "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO": 5600, + "PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP": 5601, + "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONOP": 5602, + "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMSTATE": 5603, + "PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONBILLED": 5604, + } +) + +func (x FortuneDragonPID) Enum() *FortuneDragonPID { + p := new(FortuneDragonPID) + *p = x + return p +} + +func (x FortuneDragonPID) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FortuneDragonPID) Descriptor() protoreflect.EnumDescriptor { + return file_fortunedragon_proto_enumTypes[0].Descriptor() +} + +func (FortuneDragonPID) Type() protoreflect.EnumType { + return &file_fortunedragon_proto_enumTypes[0] +} + +func (x FortuneDragonPID) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FortuneDragonPID.Descriptor instead. +func (FortuneDragonPID) EnumDescriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{0} +} + +type FortuneDragonPlayerData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` //名字 + SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` //账号 + Head int32 `protobuf:"varint,3,opt,name=Head,proto3" json:"Head,omitempty"` //头像 + Sex int32 `protobuf:"varint,4,opt,name=Sex,proto3" json:"Sex,omitempty"` //性别 + Coin int64 `protobuf:"varint,5,opt,name=Coin,proto3" json:"Coin,omitempty"` //金币 + Pos int32 `protobuf:"varint,6,opt,name=Pos,proto3" json:"Pos,omitempty"` //座位位置 + Flag int32 `protobuf:"varint,7,opt,name=Flag,proto3" json:"Flag,omitempty"` //二进制标记 + Params []string `protobuf:"bytes,8,rep,name=Params,proto3" json:"Params,omitempty"` //其他数据 如:ip 等 + City string `protobuf:"bytes,9,opt,name=City,proto3" json:"City,omitempty"` //城市 + HeadOutLine int32 `protobuf:"varint,10,opt,name=HeadOutLine,proto3" json:"HeadOutLine,omitempty"` //头像框 + VIP int32 `protobuf:"varint,11,opt,name=VIP,proto3" json:"VIP,omitempty"` +} + +func (x *FortuneDragonPlayerData) Reset() { + *x = FortuneDragonPlayerData{} + if protoimpl.UnsafeEnabled { + mi := &file_fortunedragon_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FortuneDragonPlayerData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FortuneDragonPlayerData) ProtoMessage() {} + +func (x *FortuneDragonPlayerData) ProtoReflect() protoreflect.Message { + mi := &file_fortunedragon_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FortuneDragonPlayerData.ProtoReflect.Descriptor instead. +func (*FortuneDragonPlayerData) Descriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{0} +} + +func (x *FortuneDragonPlayerData) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FortuneDragonPlayerData) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetHead() int32 { + if x != nil { + return x.Head + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetPos() int32 { + if x != nil { + return x.Pos + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetFlag() int32 { + if x != nil { + return x.Flag + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetParams() []string { + if x != nil { + return x.Params + } + return nil +} + +func (x *FortuneDragonPlayerData) GetCity() string { + if x != nil { + return x.City + } + return "" +} + +func (x *FortuneDragonPlayerData) GetHeadOutLine() int32 { + if x != nil { + return x.HeadOutLine + } + return 0 +} + +func (x *FortuneDragonPlayerData) GetVIP() int32 { + if x != nil { + return x.VIP + } + return 0 +} + +//房间信息 +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO +type SCFortuneDragonRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间id + GameFreeId int32 `protobuf:"varint,2,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` + GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id + RoomMode int32 `protobuf:"varint,4,opt,name=RoomMode,proto3" json:"RoomMode,omitempty"` //游戏模式 + Params []int32 `protobuf:"varint,5,rep,packed,name=Params,proto3" json:"Params,omitempty"` //规则参数 + NumOfGames int32 `protobuf:"varint,6,opt,name=NumOfGames,proto3" json:"NumOfGames,omitempty"` //当前第几局 + State int32 `protobuf:"varint,7,opt,name=State,proto3" json:"State,omitempty"` //房间当前状态 + ParamsEx []int64 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` //其他参数 + SceneType int32 `protobuf:"varint,9,opt,name=SceneType,proto3" json:"SceneType,omitempty"` //房间模式 + Player *FortuneDragonPlayerData `protobuf:"bytes,10,opt,name=Player,proto3" json:"Player,omitempty"` //房间内的玩家信息 + PlayerInfo string `protobuf:"bytes,11,opt,name=PlayerInfo,proto3" json:"PlayerInfo,omitempty"` +} + +func (x *SCFortuneDragonRoomInfo) Reset() { + *x = SCFortuneDragonRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_fortunedragon_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCFortuneDragonRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCFortuneDragonRoomInfo) ProtoMessage() {} + +func (x *SCFortuneDragonRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_fortunedragon_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCFortuneDragonRoomInfo.ProtoReflect.Descriptor instead. +func (*SCFortuneDragonRoomInfo) Descriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{1} +} + +func (x *SCFortuneDragonRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetGameFreeId() int32 { + if x != nil { + return x.GameFreeId + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetRoomMode() int32 { + if x != nil { + return x.RoomMode + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +func (x *SCFortuneDragonRoomInfo) GetNumOfGames() int32 { + if x != nil { + return x.NumOfGames + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetState() int32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetParamsEx() []int64 { + if x != nil { + return x.ParamsEx + } + return nil +} + +func (x *SCFortuneDragonRoomInfo) GetSceneType() int32 { + if x != nil { + return x.SceneType + } + return 0 +} + +func (x *SCFortuneDragonRoomInfo) GetPlayer() *FortuneDragonPlayerData { + if x != nil { + return x.Player + } + return nil +} + +func (x *SCFortuneDragonRoomInfo) GetPlayerInfo() string { + if x != nil { + return x.PlayerInfo + } + return "" +} + +//玩家操作 +//PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP +type CSFortuneDragonOp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpCode int32 `protobuf:"varint,1,opt,name=OpCode,proto3" json:"OpCode,omitempty"` //操作码 0.spin + Params []int64 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` //操作参数 下注索引编号 +} + +func (x *CSFortuneDragonOp) Reset() { + *x = CSFortuneDragonOp{} + if protoimpl.UnsafeEnabled { + mi := &file_fortunedragon_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSFortuneDragonOp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSFortuneDragonOp) ProtoMessage() {} + +func (x *CSFortuneDragonOp) ProtoReflect() protoreflect.Message { + mi := &file_fortunedragon_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CSFortuneDragonOp.ProtoReflect.Descriptor instead. +func (*CSFortuneDragonOp) Descriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{2} +} + +func (x *CSFortuneDragonOp) GetOpCode() int32 { + if x != nil { + return x.OpCode + } + return 0 +} + +func (x *CSFortuneDragonOp) GetParams() []int64 { + if x != nil { + return x.Params + } + return nil +} + +//玩家操作返回 +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONOP +type SCFortuneDragonOp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpCode int32 `protobuf:"varint,1,opt,name=OpCode,proto3" json:"OpCode,omitempty"` //操作码 + OpRetCode int32 `protobuf:"varint,2,opt,name=OpRetCode,proto3" json:"OpRetCode,omitempty"` //操作结果 1.金币不足 2.低于该值不能押注 + Params []int64 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //操作参数 +} + +func (x *SCFortuneDragonOp) Reset() { + *x = SCFortuneDragonOp{} + if protoimpl.UnsafeEnabled { + mi := &file_fortunedragon_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCFortuneDragonOp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCFortuneDragonOp) ProtoMessage() {} + +func (x *SCFortuneDragonOp) ProtoReflect() protoreflect.Message { + mi := &file_fortunedragon_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCFortuneDragonOp.ProtoReflect.Descriptor instead. +func (*SCFortuneDragonOp) Descriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{3} +} + +func (x *SCFortuneDragonOp) GetOpCode() int32 { + if x != nil { + return x.OpCode + } + return 0 +} + +func (x *SCFortuneDragonOp) GetOpRetCode() int32 { + if x != nil { + return x.OpRetCode + } + return 0 +} + +func (x *SCFortuneDragonOp) GetParams() []int64 { + if x != nil { + return x.Params + } + return nil +} + +//房间状态 +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMSTATE +type SCFortuneDragonRoomState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + State int32 `protobuf:"varint,1,opt,name=State,proto3" json:"State,omitempty"` //房间当前状态 + SubState int32 `protobuf:"varint,2,opt,name=SubState,proto3" json:"SubState,omitempty"` //房间当前子状态 + Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //状态参数 +} + +func (x *SCFortuneDragonRoomState) Reset() { + *x = SCFortuneDragonRoomState{} + if protoimpl.UnsafeEnabled { + mi := &file_fortunedragon_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCFortuneDragonRoomState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCFortuneDragonRoomState) ProtoMessage() {} + +func (x *SCFortuneDragonRoomState) ProtoReflect() protoreflect.Message { + mi := &file_fortunedragon_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCFortuneDragonRoomState.ProtoReflect.Descriptor instead. +func (*SCFortuneDragonRoomState) Descriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{4} +} + +func (x *SCFortuneDragonRoomState) GetState() int32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *SCFortuneDragonRoomState) GetSubState() int32 { + if x != nil { + return x.SubState + } + return 0 +} + +func (x *SCFortuneDragonRoomState) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONBILLED +type SCFortuneDragonBilled struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameEndStr string `protobuf:"bytes,1,opt,name=GameEndStr,proto3" json:"GameEndStr,omitempty"` +} + +func (x *SCFortuneDragonBilled) Reset() { + *x = SCFortuneDragonBilled{} + if protoimpl.UnsafeEnabled { + mi := &file_fortunedragon_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCFortuneDragonBilled) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCFortuneDragonBilled) ProtoMessage() {} + +func (x *SCFortuneDragonBilled) ProtoReflect() protoreflect.Message { + mi := &file_fortunedragon_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCFortuneDragonBilled.ProtoReflect.Descriptor instead. +func (*SCFortuneDragonBilled) Descriptor() ([]byte, []int) { + return file_fortunedragon_proto_rawDescGZIP(), []int{5} +} + +func (x *SCFortuneDragonBilled) GetGameEndStr() string { + if x != nil { + return x.GameEndStr + } + return "" +} + +var File_fortunedragon_proto protoreflect.FileDescriptor + +var file_fortunedragon_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x66, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x66, 0x72, 0x75, 0x69, 0x74, 0x73, 0x22, 0x81, 0x02, + 0x0a, 0x17, 0x46, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, + 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x20, 0x0a, + 0x0b, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x56, 0x49, 0x50, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x49, + 0x50, 0x22, 0xe6, 0x02, 0x0a, 0x17, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, + 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x45, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x37, 0x0a, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x72, 0x75, 0x69, 0x74, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x74, 0x75, + 0x6e, 0x65, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x43, 0x0a, 0x11, 0x43, 0x53, + 0x46, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x4f, 0x70, 0x12, + 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0x61, 0x0a, 0x11, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, 0x72, 0x61, 0x67, + 0x6f, 0x6e, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0x64, 0x0a, 0x18, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, + 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x75, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x37, 0x0a, 0x15, 0x53, 0x43, 0x46, 0x6f, + 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x42, 0x69, 0x6c, 0x6c, 0x65, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x53, 0x74, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x53, 0x74, + 0x72, 0x2a, 0xa3, 0x02, 0x0a, 0x10, 0x46, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, 0x44, 0x72, 0x61, + 0x67, 0x6f, 0x6e, 0x50, 0x49, 0x44, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x5f, 0x5a, + 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x31, 0x0a, 0x2c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x5f, 0x53, 0x43, + 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x52, 0x4f, 0x4f, + 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe0, 0x2b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, + 0x5f, 0x43, 0x53, 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, + 0x4f, 0x50, 0x10, 0xe1, 0x2b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x5f, 0x53, 0x43, + 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x4f, 0x50, 0x10, + 0xe2, 0x2b, 0x12, 0x32, 0x0a, 0x2d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x46, 0x4f, 0x52, + 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x46, 0x4f, 0x52, + 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x10, 0xe3, 0x2b, 0x12, 0x2f, 0x0a, 0x2a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x5f, 0x53, + 0x43, 0x46, 0x4f, 0x52, 0x54, 0x55, 0x4e, 0x45, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x42, 0x49, + 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe4, 0x2b, 0x42, 0x2d, 0x5a, 0x2b, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, + 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x66, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x65, + 0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_fortunedragon_proto_rawDescOnce sync.Once + file_fortunedragon_proto_rawDescData = file_fortunedragon_proto_rawDesc +) + +func file_fortunedragon_proto_rawDescGZIP() []byte { + file_fortunedragon_proto_rawDescOnce.Do(func() { + file_fortunedragon_proto_rawDescData = protoimpl.X.CompressGZIP(file_fortunedragon_proto_rawDescData) + }) + return file_fortunedragon_proto_rawDescData +} + +var file_fortunedragon_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_fortunedragon_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_fortunedragon_proto_goTypes = []interface{}{ + (FortuneDragonPID)(0), // 0: fruits.FortuneDragonPID + (*FortuneDragonPlayerData)(nil), // 1: fruits.FortuneDragonPlayerData + (*SCFortuneDragonRoomInfo)(nil), // 2: fruits.SCFortuneDragonRoomInfo + (*CSFortuneDragonOp)(nil), // 3: fruits.CSFortuneDragonOp + (*SCFortuneDragonOp)(nil), // 4: fruits.SCFortuneDragonOp + (*SCFortuneDragonRoomState)(nil), // 5: fruits.SCFortuneDragonRoomState + (*SCFortuneDragonBilled)(nil), // 6: fruits.SCFortuneDragonBilled +} +var file_fortunedragon_proto_depIdxs = []int32{ + 1, // 0: fruits.SCFortuneDragonRoomInfo.Player:type_name -> fruits.FortuneDragonPlayerData + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_fortunedragon_proto_init() } +func file_fortunedragon_proto_init() { + if File_fortunedragon_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_fortunedragon_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FortuneDragonPlayerData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_fortunedragon_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCFortuneDragonRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_fortunedragon_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSFortuneDragonOp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_fortunedragon_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCFortuneDragonOp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_fortunedragon_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCFortuneDragonRoomState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_fortunedragon_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCFortuneDragonBilled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_fortunedragon_proto_rawDesc, + NumEnums: 1, + NumMessages: 6, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_fortunedragon_proto_goTypes, + DependencyIndexes: file_fortunedragon_proto_depIdxs, + EnumInfos: file_fortunedragon_proto_enumTypes, + MessageInfos: file_fortunedragon_proto_msgTypes, + }.Build() + File_fortunedragon_proto = out.File + file_fortunedragon_proto_rawDesc = nil + file_fortunedragon_proto_goTypes = nil + file_fortunedragon_proto_depIdxs = nil +} diff --git a/protocol/fortunedragon/fortunedragon.proto b/protocol/fortunedragon/fortunedragon.proto new file mode 100644 index 0000000..879c9e5 --- /dev/null +++ b/protocol/fortunedragon/fortunedragon.proto @@ -0,0 +1,67 @@ +syntax = "proto3"; +package fruits; +option go_package = "mongo.games.com/game/protocol/fortunedragon"; + +//fortunedragon +//龙 +enum FortuneDragonPID { + PACKET_FORTUNEDRAGON_ZERO = 0;// 弃用消息号 + PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO = 5600; //房间信息 + PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP = 5601; + PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONOP = 5602; + PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMSTATE = 5603; + PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONBILLED = 5604; +} + +message FortuneDragonPlayerData { + string Name = 1; //名字 + int32 SnId = 2; //账号 + int32 Head = 3; //头像 + int32 Sex = 4; //性别 + int64 Coin = 5; //金币 + int32 Pos = 6; //座位位置 + int32 Flag = 7; //二进制标记 + repeated string Params = 8; //其他数据 如:ip 等 + string City = 9; //城市 + int32 HeadOutLine = 10; //头像框 + int32 VIP = 11; +} +//房间信息 +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO +message SCFortuneDragonRoomInfo { + int32 RoomId = 1; //房间id + int32 GameFreeId = 2; + int32 GameId = 3; //游戏id + int32 RoomMode = 4; //游戏模式 + repeated int32 Params = 5; //规则参数 + int32 NumOfGames = 6; //当前第几局 + int32 State = 7; //房间当前状态 + repeated int64 ParamsEx = 8; //其他参数 + int32 SceneType = 9; //房间模式 + FortuneDragonPlayerData Player = 10; //房间内的玩家信息 + string PlayerInfo = 11; +} +//玩家操作 +//PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP +message CSFortuneDragonOp { + int32 OpCode = 1; //操作码 0.spin + repeated int64 Params = 2; //操作参数 下注索引编号 +} +//玩家操作返回 +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONOP +message SCFortuneDragonOp { + int32 OpCode = 1; //操作码 + int32 OpRetCode = 2; //操作结果 1.金币不足 2.低于该值不能押注 + repeated int64 Params = 3; //操作参数 +} +//房间状态 +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMSTATE +message SCFortuneDragonRoomState { + int32 State = 1; //房间当前状态 + int32 SubState = 2; //房间当前子状态 + repeated int32 Params = 3; //状态参数 +} +//PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONBILLED +message SCFortuneDragonBilled{ + string GameEndStr = 1; +} \ No newline at end of file

    YRnny4~zxD#e+!#2T&QokY+}*j(Z8RVSm8HOaun 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 Wa+1&hRlyg^$RKHe?b@Q?z5fFmzVLnk literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_Map.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_Map.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..49abd74cf4cc942f322910187473ee138df2d7e4 GIT binary patch literal 12378 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_ReelSureWinBaseSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_ReelSureWinBaseSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..91356d3b56805c811f2d272713232f56df2aed9c GIT binary patch literal 18954 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_ReelSureWinFreeSpin.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/S_ReelSureWinFreeSpin.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..12e971b278433dd3c6a0c9d33158bcf596f88765 GIT binary patch literal 19261 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/Symbol.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneDragon/Generic/Symbol.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..05c8ab7a0b924c9cfe1a7a84e50bb66b9aee5e30 GIT binary patch literal 11578 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Feature/S_Others.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Feature/S_Others.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5f4ce660ca9063cb3c6b6889050307a57bca5f79 GIT binary patch literal 9366 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Feature/S_SuperStack.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Feature/S_SuperStack.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c12164c0b23ab3c222e85795af142de8aaffb830 GIT binary patch literal 9489 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 literal 0 HcmV?d00001 diff --git a/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/Formation.xlsx b/gamesrv/slotspkg/external/excel/Base/Slots/FortuneMouse/Generic/Formation.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..86f730d71a4d3800c84bc26e4e1181ac372aa808 GIT binary patch literal 9532 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