From e0d4d8040cf17e6091d9e33fb61585f204443bea Mon Sep 17 00:00:00 2001 From: Akbar Yahya Date: Mon, 21 Nov 2022 16:30:31 +0800 Subject: [PATCH] melon --- app.sh | 4 + os | 24 + run.sh | 30 + soggy-mistress/CMakeLists.txt | 72 + soggy-mistress/dispatch.py | 182 + .../extern/nlohmann/adl_serializer.hpp | 55 + .../nlohmann/byte_container_with_subtype.hpp | 103 + .../extern/nlohmann/detail/abi_macros.hpp | 100 + .../nlohmann/detail/conversions/from_json.hpp | 497 + .../nlohmann/detail/conversions/to_chars.hpp | 1118 + .../nlohmann/detail/conversions/to_json.hpp | 446 + .../extern/nlohmann/detail/exceptions.hpp | 255 + .../extern/nlohmann/detail/hash.hpp | 129 + .../nlohmann/detail/input/binary_reader.hpp | 3010 + .../nlohmann/detail/input/input_adapters.hpp | 494 + .../extern/nlohmann/detail/input/json_sax.hpp | 728 + .../extern/nlohmann/detail/input/lexer.hpp | 1632 + .../extern/nlohmann/detail/input/parser.hpp | 507 + .../nlohmann/detail/input/position_t.hpp | 37 + .../detail/iterators/internal_iterator.hpp | 35 + .../nlohmann/detail/iterators/iter_impl.hpp | 751 + .../detail/iterators/iteration_proxy.hpp | 242 + .../detail/iterators/iterator_traits.hpp | 61 + .../iterators/json_reverse_iterator.hpp | 130 + .../detail/iterators/primitive_iterator.hpp | 132 + .../extern/nlohmann/detail/json_pointer.hpp | 988 + .../extern/nlohmann/detail/json_ref.hpp | 78 + .../extern/nlohmann/detail/macro_scope.hpp | 468 + .../extern/nlohmann/detail/macro_unscope.hpp | 44 + .../nlohmann/detail/meta/call_std/begin.hpp | 17 + .../nlohmann/detail/meta/call_std/end.hpp | 17 + .../nlohmann/detail/meta/cpp_future.hpp | 171 + .../extern/nlohmann/detail/meta/detected.hpp | 70 + .../nlohmann/detail/meta/identity_tag.hpp | 21 + .../extern/nlohmann/detail/meta/is_sax.hpp | 159 + .../extern/nlohmann/detail/meta/std_fs.hpp | 29 + .../nlohmann/detail/meta/type_traits.hpp | 740 + .../extern/nlohmann/detail/meta/void_t.hpp | 24 + .../nlohmann/detail/output/binary_writer.hpp | 1838 + .../detail/output/output_adapters.hpp | 147 + .../nlohmann/detail/output/serializer.hpp | 988 + .../extern/nlohmann/detail/string_concat.hpp | 146 + .../extern/nlohmann/detail/string_escape.hpp | 72 + .../extern/nlohmann/detail/value_t.hpp | 118 + soggy-mistress/extern/nlohmann/json.hpp | 5214 ++ soggy-mistress/extern/nlohmann/json_fwd.hpp | 74 + .../extern/nlohmann/ordered_map.hpp | 359 + .../nlohmann/thirdparty/hedley/hedley.hpp | 2045 + .../thirdparty/hedley/hedley_undef.hpp | 158 + soggy-mistress/proto/AbilityActionBlink.proto | 7 + .../proto/AbilityActionCreateGadget.proto | 8 + .../proto/AbilityActionSetCrashDamage.proto | 8 + .../proto/AbilityActionSummon.proto | 8 + .../proto/AbilityActionTriggerAbility.proto | 5 + .../proto/AbilityAppliedAbility.proto | 11 + .../proto/AbilityAppliedModifier.proto | 16 + soggy-mistress/proto/AbilityArgument.proto | 9 + .../proto/AbilityAttachedModifier.proto | 7 + soggy-mistress/proto/AbilityBornType.proto | 8 + soggy-mistress/proto/AbilityFloatValue.proto | 5 + soggy-mistress/proto/AbilityGadgetInfo.proto | 7 + soggy-mistress/proto/AbilityIdentifier.proto | 9 + .../proto/AbilityInvocationFailNotify.proto | 16 + .../proto/AbilityInvocationFixedNotify.proto | 25 + .../proto/AbilityInvocationsNotify.proto | 20 + .../proto/AbilityInvokeArgument.proto | 32 + soggy-mistress/proto/AbilityInvokeEntry.proto | 10 + .../proto/AbilityInvokeEntryHead.proto | 9 + .../proto/AbilityMetaAddAbility.proto | 7 + ...AbilityMetaAddOrGetAbilityAndTrigger.proto | 9 + .../proto/AbilityMetaModifierChange.proto | 17 + .../proto/AbilityMetaReInitOverrideMap.proto | 7 + .../proto/AbilityMetaSetAbilityTrigger.proto | 5 + .../proto/AbilityMetaSetKilledState.proto | 5 + .../AbilityMetaSetModifierApplyEntityId.proto | 5 + .../AbilityMetaSpecialFloatArgument.proto | 6 + .../AbilityMixinAvatarSteerByCamera.proto | 8 + .../proto/AbilityMixinCostStamina.proto | 5 + .../proto/AbilityMixinElementShield.proto | 8 + .../proto/AbilityMixinEliteShield.proto | 5 + soggy-mistress/proto/AbilityMixinEmpty.proto | 4 + .../proto/AbilityMixinWindZone.proto | 5 + soggy-mistress/proto/AbilityResetReason.proto | 8 + .../proto/AbilityResetReasonType.proto | 7 + soggy-mistress/proto/AbilityScalarType.proto | 11 + .../proto/AbilityScalarValueEntry.proto | 15 + soggy-mistress/proto/AbilityString.proto | 8 + .../proto/AbilitySyncStateInfo.proto | 12 + soggy-mistress/proto/AccountType.proto | 23 + .../proto/AddQuestContentProgressReq.proto | 15 + .../proto/AddQuestContentProgressRsp.proto | 13 + .../proto/AddSeenMonsterNotify.proto | 13 + soggy-mistress/proto/AiSkillCdInfo.proto | 5 + .../proto/AllSeenMonsterNotify.proto | 13 + .../proto/AnimatorForceSetAirMoveNotify.proto | 17 + .../proto/AnimatorParameterValueInfo.proto | 10 + soggy-mistress/proto/AreaType.proto | 7 + .../proto/AttackHitEffectResult.proto | 9 + soggy-mistress/proto/AttackResult.proto | 33 + soggy-mistress/proto/AuthkeySignType.proto | 7 + .../proto/AvatarAbilityResetNotify.proto | 15 + soggy-mistress/proto/AvatarAddNotify.proto | 15 + .../proto/AvatarCardChangeReq.proto | 15 + .../proto/AvatarCardChangeRsp.proto | 12 + .../proto/AvatarChangeElementTypeReq.proto | 14 + .../proto/AvatarChangeElementTypeRsp.proto | 12 + soggy-mistress/proto/AvatarDataNotify.proto | 18 + soggy-mistress/proto/AvatarDelNotify.proto | 12 + .../proto/AvatarDieAnimationEndReq.proto | 14 + .../proto/AvatarDieAnimationEndRsp.proto | 14 + .../proto/AvatarEnterElementViewNotify.proto | 14 + .../proto/AvatarEnterSceneInfo.proto | 13 + .../proto/AvatarEquipChangeNotify.proto | 21 + .../proto/AvatarFightPropNotify.proto | 13 + .../proto/AvatarFightPropUpdateNotify.proto | 13 + soggy-mistress/proto/AvatarInfo.proto | 19 + .../proto/AvatarLifeStateChangeNotify.proto | 19 + soggy-mistress/proto/AvatarPromoteReq.proto | 13 + soggy-mistress/proto/AvatarPromoteRsp.proto | 13 + .../proto/AvatarPropChangeReasonNotify.proto | 18 + soggy-mistress/proto/AvatarPropNotify.proto | 13 + .../proto/AvatarSkillDepotChangeNotify.proto | 15 + soggy-mistress/proto/AvatarSkillInfo.proto | 7 + .../proto/AvatarSkillInfoNotify.proto | 15 + .../AvatarSkillMaxChargeCountNotify.proto | 14 + soggy-mistress/proto/AvatarTeam.proto | 5 + .../proto/AvatarTeamUpdateNotify.proto | 15 + .../proto/AvatarUnlockTalentNotify.proto | 14 + soggy-mistress/proto/AvatarUpgradeReq.proto | 15 + soggy-mistress/proto/AvatarUpgradeRsp.proto | 17 + soggy-mistress/proto/BackMyWorldReq.proto | 12 + soggy-mistress/proto/BackMyWorldRsp.proto | 12 + .../proto/BeginCameraSceneLookNotify.proto | 17 + .../proto/BigTalentPointConvertReq.proto | 14 + .../proto/BigTalentPointConvertRsp.proto | 13 + soggy-mistress/proto/BuffAddNotify.proto | 14 + soggy-mistress/proto/BuffDelNotify.proto | 14 + soggy-mistress/proto/BuyGoodsReq.proto | 17 + soggy-mistress/proto/BuyGoodsRsp.proto | 17 + soggy-mistress/proto/CellInfo.proto | 8 + .../proto/ChallengeDataNotify.proto | 14 + soggy-mistress/proto/ChangHpReason.proto | 23 + soggy-mistress/proto/ChangeAvatarReq.proto | 14 + soggy-mistress/proto/ChangeAvatarRsp.proto | 14 + soggy-mistress/proto/ChangeGameTimeReq.proto | 14 + soggy-mistress/proto/ChangeGameTimeRsp.proto | 13 + soggy-mistress/proto/ChapterState.proto | 8 + soggy-mistress/proto/ChapterStateNotify.proto | 15 + soggy-mistress/proto/ChildQuest.proto | 6 + .../proto/ChooseCurAvatarTeamReq.proto | 13 + .../proto/ChooseCurAvatarTeamRsp.proto | 14 + soggy-mistress/proto/CityInfo.proto | 7 + .../proto/ClientAbilityInitBeginNotify.proto | 13 + .../proto/ClientAbilityInitFinishNotify.proto | 16 + .../proto/ClientFpsStatusNotify.proto | 13 + soggy-mistress/proto/ClientGadgetInfo.proto | 10 + .../proto/ClientNewMailNotify.proto | 13 + soggy-mistress/proto/ClientPauseNotify.proto | 13 + .../proto/ClientReconnectNotify.proto | 14 + .../proto/ClientReconnectReason.proto | 6 + .../proto/ClientScriptEventNotify.proto | 16 + soggy-mistress/proto/ClientTransmitReq.proto | 19 + soggy-mistress/proto/ClientTransmitRsp.proto | 15 + .../proto/ClientTriggerEventNotify.proto | 16 + soggy-mistress/proto/ClientType.proto | 6 + .../proto/CmdAbilityReflection.proto | 4 + .../proto/CmdDungeonReflection.proto | 4 + soggy-mistress/proto/CmdFightReflection.proto | 4 + .../proto/CmdGadgetReflection.proto | 4 + soggy-mistress/proto/CmdItemReflection.proto | 4 + soggy-mistress/proto/CmdMailReflection.proto | 4 + soggy-mistress/proto/CmdMiscReflection.proto | 4 + .../proto/CmdMonsterReflection.proto | 4 + soggy-mistress/proto/CmdNpcReflection.proto | 4 + .../proto/CmdPlayerReflection.proto | 4 + .../proto/CmdPropertyReflection.proto | 4 + soggy-mistress/proto/CmdQuestReflection.proto | 4 + soggy-mistress/proto/CmdSceneReflection.proto | 4 + soggy-mistress/proto/CmdShopReflection.proto | 4 + soggy-mistress/proto/CmdSkillReflection.proto | 4 + soggy-mistress/proto/CompoundDataNotify.proto | 15 + soggy-mistress/proto/CompoundQueueData.proto | 8 + soggy-mistress/proto/CookDataNotify.proto | 15 + .../proto/CookGradeDataNotify.proto | 12 + soggy-mistress/proto/CookRecipeData.proto | 6 + .../proto/CookRecipeDataNotify.proto | 14 + soggy-mistress/proto/CreateEntityInfo.proto | 23 + soggy-mistress/proto/CreateGadgetInfo.proto | 12 + soggy-mistress/proto/CreateReason.proto | 7 + .../proto/CutSceneBeginNotify.proto | 13 + soggy-mistress/proto/CutSceneEndNotify.proto | 13 + .../proto/CutSceneFinishNotify.proto | 13 + .../proto/DataResVersionNotify.proto | 13 + soggy-mistress/proto/DebugNotify.proto | 19 + soggy-mistress/proto/DefineReflection.proto | 4 + soggy-mistress/proto/DelMailReq.proto | 13 + soggy-mistress/proto/DelMailRsp.proto | 13 + .../proto/DoSetPlayerBornDataNotify.proto | 11 + soggy-mistress/proto/DropHintNotify.proto | 15 + soggy-mistress/proto/DropItemReq.proto | 19 + soggy-mistress/proto/DropItemRsp.proto | 16 + soggy-mistress/proto/DropSubfieldReq.proto | 17 + soggy-mistress/proto/DropSubfieldRsp.proto | 12 + soggy-mistress/proto/DropSubfieldType.proto | 6 + .../proto/DungeonChallengeBeginNotify.proto | 14 + .../proto/DungeonChallengeFinishNotify.proto | 13 + soggy-mistress/proto/DungeonDataNotify.proto | 12 + soggy-mistress/proto/DungeonDataType.proto | 7 + .../proto/DungeonDieOptionReq.proto | 15 + .../proto/DungeonDieOptionRsp.proto | 15 + soggy-mistress/proto/DungeonEntryInfo.proto | 7 + .../proto/DungeonEntryInfoReq.proto | 13 + .../proto/DungeonEntryInfoRsp.proto | 17 + .../proto/DungeonFollowNotify.proto | 12 + .../proto/DungeonPlayerDieNotify.proto | 22 + .../proto/DungeonPlayerDieReq.proto | 16 + .../proto/DungeonPlayerDieRsp.proto | 12 + .../proto/DungeonSettleNotify.proto | 18 + .../proto/DungeonShowReminderNotify.proto | 12 + .../proto/DungeonWayPointActivateReq.proto | 13 + .../proto/DungeonWayPointActivateRsp.proto | 13 + .../proto/DungeonWayPointNotify.proto | 13 + soggy-mistress/proto/ENetReason.proto | 18 + soggy-mistress/proto/EditorReflection.proto | 4 + .../proto/EndCameraSceneLookNotify.proto | 11 + soggy-mistress/proto/EnterSceneDoneReq.proto | 12 + soggy-mistress/proto/EnterSceneDoneRsp.proto | 12 + .../proto/EnterScenePeerNotify.proto | 14 + soggy-mistress/proto/EnterSceneReadyReq.proto | 12 + soggy-mistress/proto/EnterSceneReadyRsp.proto | 12 + .../proto/EnterSceneWeatherAreaNotify.proto | 13 + .../proto/EnterTransPointRegionNotify.proto | 14 + soggy-mistress/proto/EnterType.proto | 13 + soggy-mistress/proto/EnterWorldAreaReq.proto | 14 + soggy-mistress/proto/EnterWorldAreaRsp.proto | 14 + .../proto/EntityAuthorityChangeNotify.proto | 17 + .../EntityFightPropChangeReasonNotify.proto | 18 + .../proto/EntityFightPropNotify.proto | 13 + .../proto/EntityFightPropUpdateNotify.proto | 13 + soggy-mistress/proto/EntityForceSyncReq.proto | 17 + soggy-mistress/proto/EntityForceSyncRsp.proto | 17 + soggy-mistress/proto/EntityJumpNotify.proto | 22 + soggy-mistress/proto/EntityMoveFailInfo.proto | 11 + soggy-mistress/proto/EntityMoveInfo.proto | 10 + soggy-mistress/proto/EntityPropNotify.proto | 15 + .../proto/EntityRendererChangedInfo.proto | 5 + soggy-mistress/proto/Equip.proto | 11 + soggy-mistress/proto/EquipParam.proto | 8 + soggy-mistress/proto/EquipParamList.proto | 7 + soggy-mistress/proto/EventTriggerType.proto | 6 + .../proto/EvtAiSyncSkillCdNotify.proto | 15 + .../proto/EvtAnimatorParameterNotify.proto | 20 + .../proto/EvtAnimatorStateChangedNotify.proto | 19 + .../proto/EvtAvatarEnterFocusNotify.proto | 26 + .../proto/EvtAvatarExitFocusNotify.proto | 18 + .../proto/EvtAvatarUpdateFocusNotify.proto | 18 + soggy-mistress/proto/EvtBeingHitNotify.proto | 19 + .../proto/EvtBulletDeactiveNotify.proto | 18 + soggy-mistress/proto/EvtBulletHitNotify.proto | 24 + .../proto/EvtBulletMoveNotify.proto | 18 + .../proto/EvtCostStaminaNotify.proto | 14 + .../proto/EvtCreateGadgetNotify.proto | 27 + .../proto/EvtDestroyGadgetNotify.proto | 16 + .../proto/EvtDoSkillSuccNotify.proto | 19 + .../EvtEntityRenderersChangedNotify.proto | 19 + .../proto/EvtEntityStartDieEndNotify.proto | 18 + soggy-mistress/proto/EvtFaceToDirNotify.proto | 18 + .../proto/EvtFaceToEntityNotify.proto | 17 + soggy-mistress/proto/EvtRushMoveNotify.proto | 24 + .../proto/EvtSetAttackTargetNotify.proto | 17 + .../proto/ExecuteGadgetLuaReq.proto | 16 + .../proto/ExecuteGadgetLuaRsp.proto | 12 + .../proto/ExecuteGroupTriggerReq.proto | 18 + .../proto/ExecuteGroupTriggerRsp.proto | 12 + .../proto/ExitSceneWeatherAreaNotify.proto | 13 + .../proto/ExitTransPointRegionNotify.proto | 14 + .../proto/FinishedParentQuestNotify.proto | 14 + .../FinishedParentQuestUpdateNotify.proto | 14 + soggy-mistress/proto/ForceUpdateInfo.proto | 6 + soggy-mistress/proto/ForwardType.proto | 13 + soggy-mistress/proto/GadgetBornType.proto | 11 + soggy-mistress/proto/GadgetInteractReq.proto | 17 + soggy-mistress/proto/GadgetInteractRsp.proto | 19 + soggy-mistress/proto/GadgetStateNotify.proto | 14 + soggy-mistress/proto/GetAllMailReq.proto | 12 + soggy-mistress/proto/GetAllMailRsp.proto | 15 + soggy-mistress/proto/GetAuthkeyReq.proto | 15 + soggy-mistress/proto/GetAuthkeyRsp.proto | 17 + soggy-mistress/proto/GetCompoundDataReq.proto | 12 + soggy-mistress/proto/GetCompoundDataRsp.proto | 16 + soggy-mistress/proto/GetMailItemReq.proto | 13 + soggy-mistress/proto/GetMailItemRsp.proto | 16 + .../proto/GetOnlinePlayerListReq.proto | 12 + .../proto/GetOnlinePlayerListRsp.proto | 15 + soggy-mistress/proto/GetPlayerTokenReq.proto | 17 + soggy-mistress/proto/GetPlayerTokenRsp.proto | 18 + .../proto/GetQuestTalkHistoryReq.proto | 13 + .../proto/GetQuestTalkHistoryRsp.proto | 14 + soggy-mistress/proto/GetSceneAreaReq.proto | 14 + soggy-mistress/proto/GetSceneAreaRsp.proto | 17 + .../proto/GetSceneNpcPostionReq.proto | 13 + .../proto/GetSceneNpcPostionRsp.proto | 16 + soggy-mistress/proto/GetScenePointReq.proto | 14 + soggy-mistress/proto/GetScenePointRsp.proto | 17 + soggy-mistress/proto/GetShopReq.proto | 13 + soggy-mistress/proto/GetShopRsp.proto | 15 + soggy-mistress/proto/GmTalkReq.proto | 13 + soggy-mistress/proto/GmTalkRsp.proto | 14 + soggy-mistress/proto/GrantRewardNotify.proto | 14 + .../proto/HitClientTrivialNotify.proto | 16 + soggy-mistress/proto/HitColliderType.proto | 8 + soggy-mistress/proto/HitCollision.proto | 11 + soggy-mistress/proto/HostPlayerNotify.proto | 13 + soggy-mistress/proto/InterOpType.proto | 6 + soggy-mistress/proto/InteractType.proto | 8 + soggy-mistress/proto/Item.proto | 13 + soggy-mistress/proto/ItemAddHintNotify.proto | 19 + soggy-mistress/proto/ItemAddReasonType.proto | 10 + .../proto/ItemCdGroupTimeNotify.proto | 12 + soggy-mistress/proto/ItemHint.proto | 7 + soggy-mistress/proto/ItemParam.proto | 6 + .../proto/JoinPlayerFailNotify.proto | 12 + soggy-mistress/proto/JoinPlayerSceneReq.proto | 13 + soggy-mistress/proto/JoinPlayerSceneRsp.proto | 12 + soggy-mistress/proto/KeepAliveNotify.proto | 11 + soggy-mistress/proto/LanguageType.proto | 18 + soggy-mistress/proto/LeaveSceneReq.proto | 12 + soggy-mistress/proto/LeaveSceneRsp.proto | 12 + soggy-mistress/proto/LevelupCityReq.proto | 15 + soggy-mistress/proto/LevelupCityRsp.proto | 17 + .../proto/LifeStateChangeNotify.proto | 19 + soggy-mistress/proto/LogCutsceneNotify.proto | 15 + soggy-mistress/proto/LogTalkNotify.proto | 14 + .../proto/LoginRewardConfigType.proto | 6 + soggy-mistress/proto/MailChangeNotify.proto | 15 + soggy-mistress/proto/MailData.proto | 17 + soggy-mistress/proto/MailTextContent.proto | 7 + soggy-mistress/proto/MapInfo.proto | 11 + .../proto/MarkEntityInMinMapNotify.proto | 18 + soggy-mistress/proto/Material.proto | 5 + soggy-mistress/proto/MathExpressionType.proto | 9 + soggy-mistress/proto/ModifierAction.proto | 6 + soggy-mistress/proto/ModifierProperty.proto | 8 + .../proto/MonsterAlertChangeNotify.proto | 15 + soggy-mistress/proto/MonsterBornType.proto | 7 + .../proto/MonsterForceAiNotify.proto | 13 + .../proto/MonsterForceAlertNotify.proto | 13 + .../proto/MonsterSummonTagNotify.proto | 13 + soggy-mistress/proto/MotionInfo.proto | 12 + soggy-mistress/proto/MotionState.proto | 47 + soggy-mistress/proto/MsgParam.proto | 9 + soggy-mistress/proto/NpcPostionInfo.proto | 8 + soggy-mistress/proto/NpcTalkInfo.proto | 6 + soggy-mistress/proto/NpcTalkReq.proto | 17 + soggy-mistress/proto/NpcTalkRsp.proto | 18 + soggy-mistress/proto/NpcTalkState.proto | 7 + soggy-mistress/proto/NpcTalkStateNotify.proto | 14 + soggy-mistress/proto/NpcTalkType.proto | 9 + soggy-mistress/proto/OnlinePlayerInfo.proto | 9 + soggy-mistress/proto/OnlinePlayerState.proto | 6 + .../proto/OpenStateChangeNotify.proto | 12 + .../proto/OpenStateUpdateNotify.proto | 12 + soggy-mistress/proto/PacketHead.proto | 20 + .../proto/PacketHeadReflection.proto | 4 + soggy-mistress/proto/ParamList.proto | 5 + soggy-mistress/proto/ParentQuest.proto | 12 + .../proto/ParentQuestRandomInfo.proto | 7 + .../proto/PersonalSceneJumpReq.proto | 13 + .../proto/PersonalSceneJumpRsp.proto | 16 + soggy-mistress/proto/PingReq.proto | 14 + soggy-mistress/proto/PingRsp.proto | 14 + soggy-mistress/proto/PlaceInfo.proto | 8 + .../proto/PlatformChangeRouteNotify.proto | 15 + soggy-mistress/proto/PlatformInfo.proto | 14 + .../proto/PlatformStartRouteNotify.proto | 16 + .../proto/PlatformStopRouteNotify.proto | 13 + .../proto/PlayerCompoundMaterialReq.proto | 14 + .../proto/PlayerCompoundMaterialRsp.proto | 15 + soggy-mistress/proto/PlayerCookReq.proto | 15 + soggy-mistress/proto/PlayerCookRsp.proto | 18 + soggy-mistress/proto/PlayerDataNotify.proto | 16 + soggy-mistress/proto/PlayerDieOption.proto | 8 + soggy-mistress/proto/PlayerDieType.proto | 10 + .../proto/PlayerEnterDungeonReq.proto | 14 + .../proto/PlayerEnterDungeonRsp.proto | 14 + .../proto/PlayerEnterSceneInfoNotify.proto | 18 + .../proto/PlayerEnterSceneNotify.proto | 22 + .../proto/PlayerGameTimeNotify.proto | 14 + soggy-mistress/proto/PlayerLocationInfo.proto | 9 + soggy-mistress/proto/PlayerLoginReq.proto | 25 + soggy-mistress/proto/PlayerLoginRsp.proto | 22 + soggy-mistress/proto/PlayerLogoutNotify.proto | 9 + soggy-mistress/proto/PlayerLogoutReq.proto | 22 + soggy-mistress/proto/PlayerLogoutRsp.proto | 12 + .../proto/PlayerPropChangeNotify.proto | 13 + .../proto/PlayerPropChangeReasonNotify.proto | 17 + soggy-mistress/proto/PlayerPropNotify.proto | 14 + .../proto/PlayerQuitDungeonReq.proto | 13 + .../proto/PlayerQuitDungeonRsp.proto | 13 + .../proto/PlayerRandomCookReq.proto | 15 + .../proto/PlayerRandomCookRsp.proto | 12 + .../proto/PlayerSetLanguageReq.proto | 13 + .../proto/PlayerSetLanguageRsp.proto | 12 + soggy-mistress/proto/PlayerSetPauseReq.proto | 13 + soggy-mistress/proto/PlayerSetPauseRsp.proto | 12 + soggy-mistress/proto/PlayerStoreNotify.proto | 17 + soggy-mistress/proto/PlayerTimeNotify.proto | 14 + soggy-mistress/proto/PropChangeReason.proto | 15 + soggy-mistress/proto/PropValue.proto | 10 + soggy-mistress/proto/ProtEntityType.proto | 15 + .../proto/QueryCurrRegionHttpRsp.proto | 15 + .../proto/QueryRegionListHttpRsp.proto | 9 + soggy-mistress/proto/Quest.proto | 11 + .../proto/QuestCreateEntityReq.proto | 17 + .../proto/QuestCreateEntityRsp.proto | 18 + soggy-mistress/proto/QuestDelNotify.proto | 12 + .../proto/QuestDestroyEntityReq.proto | 14 + .../proto/QuestDestroyEntityRsp.proto | 14 + soggy-mistress/proto/QuestListNotify.proto | 14 + .../proto/QuestListUpdateNotify.proto | 14 + soggy-mistress/proto/ReadMailNotify.proto | 13 + .../proto/RefreshBackgroundAvatarReq.proto | 12 + .../proto/RefreshBackgroundAvatarRsp.proto | 13 + soggy-mistress/proto/RegionInfo.proto | 20 + soggy-mistress/proto/RegionSimpleInfo.proto | 8 + soggy-mistress/proto/RegionType.proto | 8 + soggy-mistress/proto/Reliquary.proto | 9 + .../proto/ReliquaryPromoteReq.proto | 14 + .../proto/ReliquaryPromoteRsp.proto | 17 + .../proto/ReliquaryUpgradeReq.proto | 14 + .../proto/ReliquaryUpgradeRsp.proto | 16 + soggy-mistress/proto/Retcode.proto | 158 + soggy-mistress/proto/RetcodeReflection.proto | 4 + soggy-mistress/proto/Reward.proto | 8 + .../proto/RoutePointChangeInfo.proto | 7 + .../proto/SceneAreaExploreNotify.proto | 14 + .../proto/SceneAreaUnlockNotify.proto | 13 + .../proto/SceneAreaWeatherNotify.proto | 13 + soggy-mistress/proto/SceneAvatarInfo.proto | 17 + .../proto/SceneAvatarStaminaStepReq.proto | 12 + .../proto/SceneAvatarStaminaStepRsp.proto | 12 + .../proto/SceneCreateEntityReq.proto | 17 + .../proto/SceneCreateEntityRsp.proto | 16 + .../proto/SceneDestroyEntityReq.proto | 13 + .../proto/SceneDestroyEntityRsp.proto | 13 + .../proto/SceneEntitiesMovesNotify.proto | 14 + .../proto/SceneEntitiesMovesReq.proto | 15 + .../proto/SceneEntitiesMovesRsp.proto | 14 + soggy-mistress/proto/SceneEntityAiInfo.proto | 9 + .../proto/SceneEntityAppearNotify.proto | 17 + .../proto/SceneEntityDisappearNotify.proto | 15 + .../proto/SceneEntityDrownReq.proto | 13 + .../proto/SceneEntityDrownRsp.proto | 13 + soggy-mistress/proto/SceneEntityInfo.proto | 33 + .../proto/SceneEntityMoveNotify.proto | 17 + soggy-mistress/proto/SceneEntityMoveReq.proto | 18 + soggy-mistress/proto/SceneEntityMoveRsp.proto | 18 + .../proto/SceneForceLockNotify.proto | 12 + .../proto/SceneForceUnlockNotify.proto | 13 + soggy-mistress/proto/SceneGadgetInfo.proto | 31 + .../proto/SceneGetAreaExplorePercentReq.proto | 13 + .../proto/SceneGetAreaExplorePercentRsp.proto | 14 + soggy-mistress/proto/SceneInitFinishReq.proto | 12 + soggy-mistress/proto/SceneInitFinishRsp.proto | 13 + .../proto/SceneKickPlayerNotify.proto | 14 + soggy-mistress/proto/SceneKickPlayerReq.proto | 13 + soggy-mistress/proto/SceneKickPlayerRsp.proto | 12 + soggy-mistress/proto/SceneMonsterInfo.proto | 19 + soggy-mistress/proto/SceneNpcInfo.proto | 6 + soggy-mistress/proto/ScenePlayerInfo.proto | 8 + .../proto/ScenePlayerInfoNotify.proto | 14 + .../proto/ScenePlayerLocationNotify.proto | 14 + .../proto/ScenePlayerSoundNotify.proto | 21 + .../proto/ScenePointUnlockNotify.proto | 14 + soggy-mistress/proto/SceneReliquaryInfo.proto | 8 + .../proto/SceneRouteChangeInfo.proto | 10 + .../proto/SceneRouteChangeNotify.proto | 16 + .../proto/SceneSurfaceMaterial.proto | 12 + soggy-mistress/proto/SceneTimeNotify.proto | 14 + .../proto/SceneTransToPointReq.proto | 14 + .../proto/SceneTransToPointRsp.proto | 14 + soggy-mistress/proto/SceneWeaponInfo.proto | 14 + .../proto/SealBattleBeginNotify.proto | 17 + .../proto/SealBattleEndNotify.proto | 13 + .../proto/SealBattleProgressNotify.proto | 16 + soggy-mistress/proto/SealBattleType.proto | 6 + soggy-mistress/proto/SeeMonsterReq.proto | 13 + soggy-mistress/proto/SeeMonsterRsp.proto | 12 + .../proto/SelectWorktopOptionReq.proto | 14 + .../proto/SelectWorktopOptionRsp.proto | 14 + soggy-mistress/proto/ServerLogLevel.proto | 9 + soggy-mistress/proto/ServerLogNotify.proto | 17 + soggy-mistress/proto/ServerLogType.proto | 7 + soggy-mistress/proto/ServerTimeNotify.proto | 12 + soggy-mistress/proto/ServiceType.proto | 17 + soggy-mistress/proto/SetOpenStateReq.proto | 14 + soggy-mistress/proto/SetOpenStateRsp.proto | 14 + .../proto/SetPlayerBornDataReq.proto | 14 + .../proto/SetPlayerBornDataRsp.proto | 12 + soggy-mistress/proto/SetPlayerNameReq.proto | 13 + soggy-mistress/proto/SetPlayerNameRsp.proto | 13 + soggy-mistress/proto/SetPlayerPropReq.proto | 15 + soggy-mistress/proto/SetPlayerPropRsp.proto | 12 + .../proto/SetSceneWeatherAreaReq.proto | 14 + .../proto/SetSceneWeatherAreaRsp.proto | 12 + soggy-mistress/proto/SetUpAvatarTeamReq.proto | 17 + soggy-mistress/proto/SetUpAvatarTeamRsp.proto | 17 + soggy-mistress/proto/Shop.proto | 8 + soggy-mistress/proto/ShopGoods.proto | 16 + soggy-mistress/proto/ShowMessageNotify.proto | 16 + soggy-mistress/proto/SpringUseReq.proto | 13 + soggy-mistress/proto/SpringUseRsp.proto | 13 + soggy-mistress/proto/StopServerInfo.proto | 6 + .../proto/StoreItemChangeNotify.proto | 16 + soggy-mistress/proto/StoreItemDelNotify.proto | 15 + soggy-mistress/proto/StoreType.proto | 7 + .../proto/StoreWeightLimitNotify.proto | 15 + soggy-mistress/proto/SvrMsgId.proto | 7 + .../proto/TakeCompoundOutputReq.proto | 13 + .../proto/TakeCompoundOutputRsp.proto | 15 + soggy-mistress/proto/TakeoffEquipReq.proto | 14 + soggy-mistress/proto/TakeoffEquipRsp.proto | 14 + soggy-mistress/proto/TeamEnterSceneInfo.proto | 8 + soggy-mistress/proto/TransmitReason.proto | 6 + soggy-mistress/proto/TrialAvatarInfo.proto | 8 + ...TriggerCreateGadgetToEquipPartNotify.proto | 16 + .../proto/UnlockAvatarTalentReq.proto | 14 + .../proto/UnlockAvatarTalentRsp.proto | 14 + .../proto/UnlockTransPointReq.proto | 14 + .../proto/UnlockTransPointRsp.proto | 12 + .../proto/UnmarkEntityInMinMapNotify.proto | 12 + soggy-mistress/proto/UseItemReq.proto | 15 + soggy-mistress/proto/UseItemRsp.proto | 15 + soggy-mistress/proto/Vector.proto | 7 + soggy-mistress/proto/VirtualItem.proto | 9 + soggy-mistress/proto/VisionType.proto | 13 + soggy-mistress/proto/Weapon.proto | 8 + soggy-mistress/proto/WeaponAwakenReq.proto | 15 + soggy-mistress/proto/WeaponAwakenRsp.proto | 16 + soggy-mistress/proto/WeaponPromoteReq.proto | 14 + soggy-mistress/proto/WeaponPromoteRsp.proto | 15 + soggy-mistress/proto/WeaponUpgradeReq.proto | 17 + soggy-mistress/proto/WeaponUpgradeRsp.proto | 15 + soggy-mistress/proto/WearEquipReq.proto | 14 + soggy-mistress/proto/WearEquipRsp.proto | 14 + soggy-mistress/proto/WeatherInfo.proto | 5 + soggy-mistress/proto/WorktopInfo.proto | 5 + .../proto/WorktopOptionNotify.proto | 13 + .../proto/WorldPlayerDieNotify.proto | 19 + .../proto/WorldPlayerReviveReq.proto | 12 + .../proto/WorldPlayerReviveRsp.proto | 12 + soggy-mistress/proto/cmdids.csv | 331 + soggy-mistress/src/game_data.cpp | 377 + soggy-mistress/src/game_data.hpp | 167 + soggy-mistress/src/game_enums.hpp | 346 + soggy-mistress/src/log.cpp | 30 + soggy-mistress/src/log.hpp | 6 + soggy-mistress/src/packet.cpp | 76 + soggy-mistress/src/packet.hpp | 14 + soggy-mistress/src/soggy.cpp | 1619 + soggy-mistress/src/vec.hpp | 17 + soggy-mistress/tool/cmdids_processor.cpp | 100 + .../scene1011_1011_actionpoints.json | 4 + .../scene20000_20000_actionpoints.json | 4 + .../scene20007_20007_actionpoints.json | 4 + .../scene20018_20018_actionpoints.json | 204 + .../scene3_3001_actionpoints.json | 710 + .../scene3_3002_actionpoints.json | 83 + .../scene3_3003_actionpoints.json | 391 + .../scene3_3004_actionpoints.json | 4 + .../scene3_3005_actionpoints.json | 4 + .../scene3_3007_actionpoints.json | 4 + .../scene50002_50002_actionpoints.json | 4 + .../scene50004_50004_actionpoints.json | 4 + .../scene50005_50005_actionpoints.json | 4 + .../scene1001_block1001_levelgadgets.json | 4 + .../scene1005_block1005_levelgadgets.json | 4 + .../scene1006_block1006_levelgadgets.json | 4 + .../scene1010_block1010_levelgadgets.json | 4 + .../scene1011_block1011_levelgadgets.json | 4 + .../scene1012_block1012_levelgadgets.json | 34 + .../scene1013_block1013_levelgadgets.json | 4 + .../scene20000_block20000_levelgadgets.json | 13 + .../scene20001_block20001_levelgadgets.json | 4 + .../scene20002_block20002_levelgadgets.json | 4 + .../scene20003_block20003_levelgadgets.json | 4 + .../scene20005_block20005_levelgadgets.json | 4 + .../scene20007_block20007_levelgadgets.json | 20 + .../scene20008_block20008_levelgadgets.json | 12 + .../scene20009_block20009_levelgadgets.json | 12 + .../scene20010_block20010_levelgadgets.json | 4 + .../scene20011_block20011_levelgadgets.json | 4 + .../scene20012_block20012_levelgadgets.json | 4 + .../scene20013_block20013_levelgadgets.json | 4 + .../scene20014_block20014_levelgadgets.json | 4 + .../scene20015_block20015_levelgadgets.json | 4 + .../scene20016_block20016_levelgadgets.json | 4 + .../scene20017_block20017_levelgadgets.json | 4 + .../scene20018_block20018_levelgadgets.json | 4 + .../scene20019_block20019_levelgadgets.json | 13 + .../scene20021_block20021_levelgadgets.json | 13 + .../scene30002_block30002_levelgadgets.json | 4 + .../scene30003_block30003_levelgadgets.json | 4 + .../scene3_block3001_levelgadgets.json | 48 + .../scene3_block3002_levelgadgets.json | 84 + .../scene3_block3003_levelgadgets.json | 126 + .../scene3_block3004_levelgadgets.json | 18 + .../scene3_block3005_levelgadgets.json | 12 + .../scene3_block3007_levelgadgets.json | 36 + .../scene40001_block40001_levelgadgets.json | 4 + .../scene40004_block40004_levelgadgets.json | 4 + .../scene40007_block40007_levelgadgets.json | 4 + .../scene50001_block50001_levelgadgets.json | 4 + .../scene50002_block50002_levelgadgets.json | 12 + .../scene50003_block50003_levelgadgets.json | 4 + .../scene50004_block50004_levelgadgets.json | 4 + .../scene50005_block50005_levelgadgets.json | 4 + .../scene1006_block1006_levelmonsters.json | 107 + .../scene1007_block1007_levelmonsters.json | 150 + .../scene1008_block1008_levelmonsters.json | 4 + .../scene1009_block1009_levelmonsters.json | 4 + .../scene1010_block1010_levelmonsters.json | 233 + .../scene1011_block1011_levelmonsters.json | 1503 + .../scene1012_block1012_levelmonsters.json | 65 + .../scene1013_block1013_levelmonsters.json | 4 + .../scene1015_block1015_levelmonsters.json | 83 + .../scene20000_block20000_levelmonsters.json | 511 + .../scene20002_block20002_levelmonsters.json | 4 + .../scene20003_block20003_levelmonsters.json | 4 + .../scene20004_block20004_levelmonsters.json | 4 + .../scene20005_block20005_levelmonsters.json | 4 + .../scene20006_block20006_levelmonsters.json | 215 + .../scene20007_block20007_levelmonsters.json | 24 + .../scene20008_block20008_levelmonsters.json | 85 + .../scene20009_block20009_levelmonsters.json | 61 + .../scene20010_block20010_levelmonsters.json | 265 + .../scene20011_block20011_levelmonsters.json | 133 + .../scene20012_block20012_levelmonsters.json | 221 + .../scene20013_block20013_levelmonsters.json | 551 + .../scene20014_block20014_levelmonsters.json | 158 + .../scene20015_block20015_levelmonsters.json | 41 + .../scene20016_block20016_levelmonsters.json | 131 + .../scene20017_block20017_levelmonsters.json | 12 + .../scene20018_block20018_levelmonsters.json | 15 + .../scene20019_block20019_levelmonsters.json | 102 + .../scene20020_block20020_levelmonsters.json | 12 + .../scene20021_block20021_levelmonsters.json | 36 + .../scene30001_block30001_levelmonsters.json | 1101 + .../scene30002_block30002_levelmonsters.json | 122 + .../scene30003_block30003_levelmonsters.json | 76 + .../scene3_block3001_levelmonsters.json | 4348 ++ .../scene3_block3002_levelmonsters.json | 3139 + .../scene3_block3003_levelmonsters.json | 4483 ++ .../scene3_block3004_levelmonsters.json | 1841 + .../scene3_block3005_levelmonsters.json | 4 + .../scene3_block3007_levelmonsters.json | 2111 + .../scene40001_block40001_levelmonsters.json | 176 + .../scene40002_block40002_levelmonsters.json | 4 + .../scene40003_block40003_levelmonsters.json | 4 + .../scene40004_block40004_levelmonsters.json | 146 + .../scene40006_block40006_levelmonsters.json | 4 + .../scene40007_block40007_levelmonsters.json | 81 + .../scene50001_block50001_levelmonsters.json | 256 + .../scene50002_block50002_levelmonsters.json | 593 + .../scene50003_block50003_levelmonsters.json | 336 + .../scene50004_block50004_levelmonsters.json | 34 + .../scene50005_block50005_levelmonsters.json | 279 + .../Routes/scene1001_1001_routes.json | 1102 + .../LevelDesign/Routes/scene1001_routes.json | 110 + .../Routes/scene1003_1003_routes.json | 4 + .../Routes/scene1004_1004_routes.json | 4 + .../Routes/scene1005_1005_routes.json | 4 + .../Routes/scene1006_1006_routes.json | 333 + .../Routes/scene1007_1007_routes.json | 58 + .../Routes/scene1008_1008_routes.json | 4 + .../Routes/scene1009_1009_routes.json | 4 + .../Routes/scene1010_1010_routes.json | 105 + .../Routes/scene1011_1011_routes.json | 11 + .../Routes/scene1012_1012_routes.json | 186 + .../Routes/scene20000_20000_routes.json | 732 + .../Routes/scene20001_20001_routes.json | 4 + .../Routes/scene20002_20002_routes.json | 4 + .../Routes/scene20003_20003_routes.json | 4 + .../Routes/scene20004_20004_routes.json | 4 + .../Routes/scene20005_20005_routes.json | 4 + .../Routes/scene20006_20006_routes.json | 457 + .../Routes/scene20007_20007_routes.json | 233 + .../Routes/scene20008_20008_routes.json | 161 + .../Routes/scene20009_20009_routes.json | 272 + .../Routes/scene20010_20010_routes.json | 259 + .../Routes/scene20011_20011_routes.json | 433 + .../Routes/scene20012_20012_routes.json | 393 + .../Routes/scene20013_20013_routes.json | 373 + .../Routes/scene20014_20014_routes.json | 350 + .../Routes/scene20015_20015_routes.json | 4 + .../Routes/scene20016_20016_routes.json | 31 + .../Routes/scene20019_20019_routes.json | 4 + .../Routes/scene20021_20021_routes.json | 110 + .../Routes/scene30001_30001_routes.json | 4 + .../Routes/scene30002_30002_routes.json | 4 + .../Routes/scene30003_30003_routes.json | 4 + .../Routes/scene3_3001_routes.json | 4394 ++ .../Routes/scene3_3002_routes.json | 5101 ++ .../Routes/scene3_3003_routes.json | 7086 ++ .../Routes/scene3_3004_routes.json | 4094 ++ .../Routes/scene3_3005_routes.json | 174 + .../Routes/scene3_3007_routes.json | 2077 + .../Routes/scene40001_40001_routes.json | 252 + .../Routes/scene40002_40002_routes.json | 4 + .../Routes/scene40003_40003_routes.json | 4 + .../Routes/scene40004_40004_routes.json | 4 + .../Routes/scene40005_40005_routes.json | 4 + .../Routes/scene40006_40006_routes.json | 4 + .../Routes/scene40007_40007_routes.json | 96 + .../Routes/scene50001_50001_routes.json | 66 + .../Routes/scene50002_50002_routes.json | 49 + .../Routes/scene50004_50004_routes.json | 4 + .../Routes/scene50005_50005_routes.json | 4 + .../Scene/LevelLayout/scene3_levelLayout.json | 6957 ++ .../Scene/Point/scene1001_point.json | 3 + .../Scene/Point/scene1002_point.json | 3 + .../Scene/Point/scene1004_point.json | 84 + .../Scene/Point/scene1005_point.json | 33 + .../Scene/Point/scene1006_point.json | 211 + .../Scene/Point/scene1007_point.json | 117 + .../Scene/Point/scene1008_point.json | 65 + .../Scene/Point/scene1010_point.json | 3 + .../Scene/Point/scene1011_point.json | 3 + .../Scene/Point/scene1013_point.json | 3 + .../binoutput/Scene/Point/scene1_point.json | 211 + .../Scene/Point/scene20000_point.json | 43 + .../Scene/Point/scene20001_point.json | 67 + .../Scene/Point/scene20002_point.json | 22 + .../Scene/Point/scene20003_point.json | 3 + .../Scene/Point/scene20004_point.json | 22 + .../Scene/Point/scene20006_point.json | 553 + .../Scene/Point/scene20007_point.json | 90 + .../Scene/Point/scene20008_point.json | 620 + .../Scene/Point/scene20009_point.json | 560 + .../Scene/Point/scene20012_point.json | 136 + .../Scene/Point/scene20013_point.json | 129 + .../Scene/Point/scene20014_point.json | 65 + .../Scene/Point/scene20015_point.json | 3 + .../Scene/Point/scene20016_point.json | 64 + .../Scene/Point/scene20018_point.json | 26 + .../Scene/Point/scene20021_point.json | 16 + .../Scene/Point/scene30001_point.json | 39 + .../Scene/Point/scene30002_point.json | 22 + .../Scene/Point/scene30003_point.json | 22 + .../binoutput/Scene/Point/scene3_point.json | 2192 + .../Scene/Point/scene40002_point.json | 3 + .../Scene/Point/scene40003_point.json | 3 + .../Scene/Point/scene40004_point.json | 85 + .../Scene/Point/scene40005_point.json | 3 + .../Scene/Point/scene40006_point.json | 3 + .../Scene/Point/scene40007_point.json | 95 + .../Scene/Point/scene50000_point.json | 29 + .../Scene/Point/scene50001_point.json | 288 + .../Scene/Point/scene50003_point.json | 22 + soggy_resources/exceloutput/AffixData.tsv | 76 + soggy_resources/exceloutput/AffixPropData.tsv | 145 + .../exceloutput/AvatarBreakData.tsv | 5 + .../exceloutput/AvatarCardChangeData.tsv | 42 + .../exceloutput/AvatarCurveData.tsv | 91 + soggy_resources/exceloutput/AvatarData.tsv | 38 + .../exceloutput/AvatarLevelData.tsv | 91 + .../exceloutput/AvatarPromoteData.tsv | 41 + .../exceloutput/AvatarSkillData.tsv | 115 + .../exceloutput/AvatarSkillDepotData.tsv | 39 + .../exceloutput/BoredActionPriority.tsv | 4 + .../exceloutput/BoredCreateMonster.tsv | 21 + soggy_resources/exceloutput/BoredEvent.tsv | 9 + .../exceloutput/BoredMonsterPool.tsv | 23 + soggy_resources/exceloutput/BuffData.tsv | 82 + soggy_resources/exceloutput/CampData.tsv | 14 + soggy_resources/exceloutput/ChapterData.tsv | 4 + soggy_resources/exceloutput/CityData.tsv | 2 + .../exceloutput/CityLevelUpData.tsv | 11 + soggy_resources/exceloutput/CompoundData.tsv | 17 + .../exceloutput/ConstValueData.tsv | 90 + soggy_resources/exceloutput/CookBonusData.tsv | 8 + .../exceloutput/CookRecipeData.tsv | 21 + soggy_resources/exceloutput/CutsceneData.tsv | 14 + soggy_resources/exceloutput/DialogData.tsv | 4554 ++ .../exceloutput/DieTypeTipsData.tsv | 39 + soggy_resources/exceloutput/DocumentData.tsv | 37 + soggy_resources/exceloutput/DropLeafData.tsv | 2487 + .../exceloutput/DropSubfieldData.tsv | 25 + soggy_resources/exceloutput/DropTreeData.tsv | 477 + .../exceloutput/DungeonChallengeData.tsv | 53 + soggy_resources/exceloutput/DungeonData.tsv | 47 + .../exceloutput/DungeonPassData.tsv | 28 + .../exceloutput/DungeonPreviewData.tsv | 32 + .../exceloutput/DungeonReminderData.tsv | 259 + soggy_resources/exceloutput/ElementCoeff.tsv | 81 + soggy_resources/exceloutput/ElementData.tsv | 91 + .../exceloutput/ElementStateData.tsv | 9 + .../exceloutput/EmbeddedTextMapData.tsv | 59 + .../exceloutput/EndureTemplateData.tsv | 15 + .../exceloutput/EntityDropSubfieldData.tsv | 15 + .../exceloutput/EnvAnimalGather.tsv | 17 + .../exceloutput/EnvAnimalRefreshNum.tsv | 5 + .../exceloutput/EnvAnimalWeight.tsv | 11 + .../exceloutput/EquipAffixData.tsv | 226 + .../exceloutput/EquipCurveData.tsv | 51 + soggy_resources/exceloutput/EquipData.tsv | 26 + .../exceloutput/EquipLevelData.tsv | 22 + soggy_resources/exceloutput/EquipPropData.tsv | 26 + .../exceloutput/EquipRatioData.tsv | 13 + soggy_resources/exceloutput/EquipStarData.tsv | 4 + .../exceloutput/GadgetCurveData.tsv | 91 + soggy_resources/exceloutput/GadgetData.tsv | 472 + .../exceloutput/GadgetData_Avatar.tsv | 146 + .../exceloutput/GadgetData_Equip.tsv | 123 + .../exceloutput/GadgetData_Level.tsv | 423 + .../exceloutput/GadgetData_Monster.tsv | 109 + .../exceloutput/GadgetPropData.tsv | 32 + .../exceloutput/GadgetRadarHint.tsv | 2 + .../exceloutput/GatherBundleData.tsv | 9 + soggy_resources/exceloutput/GatherData.tsv | 196 + soggy_resources/exceloutput/GroupData.tsv | 5 + soggy_resources/exceloutput/HardLevelData.tsv | 101 + .../exceloutput/LevelSuppressData.tsv | 122 + .../exceloutput/LocalizationData.tsv | 43 + soggy_resources/exceloutput/MainQuestData.tsv | 103 + soggy_resources/exceloutput/MaterialData.tsv | 434 + .../exceloutput/ModifierPropData.tsv | 27 + .../exceloutput/MonsterAffixData.tsv | 30 + .../exceloutput/MonsterCurveData.tsv | 91 + soggy_resources/exceloutput/MonsterData.tsv | 72 + .../exceloutput/MonsterInstruction.tsv | 36 + soggy_resources/exceloutput/NpcData.tsv | 264 + soggy_resources/exceloutput/OpenStateData.tsv | 30 + soggy_resources/exceloutput/OptionData.tsv | 73 + .../exceloutput/PlayerLevelData.tsv | 71 + soggy_resources/exceloutput/QuestData.tsv | 659 + .../exceloutput/ReactionEnergyData.tsv | 3 + .../exceloutput/ReliquaryAffixData.tsv | 169 + .../exceloutput/ReliquaryCurveData.tsv | 51 + soggy_resources/exceloutput/ReliquaryData.tsv | 1054 + .../exceloutput/ReliquaryLevelData.tsv | 92 + .../exceloutput/ReliquaryMainData.tsv | 25 + .../exceloutput/ReliquaryPowerupData.tsv | 4 + .../exceloutput/ReliquaryPromotionData.tsv | 23 + .../exceloutput/ReliquaryPropData.tsv | 26 + .../exceloutput/ReliquarySetData.tsv | 26 + .../exceloutput/ReliquaryStarData.tsv | 4 + soggy_resources/exceloutput/ReminderData.tsv | 4 + soggy_resources/exceloutput/RewardData.tsv | 327 + soggy_resources/exceloutput/RoomData.tsv | 6 + .../exceloutput/RqEntranceData.tsv | 2 + soggy_resources/exceloutput/RqFactorData.tsv | 21 + .../exceloutput/RqMainQuestData.tsv | 2 + soggy_resources/exceloutput/RqQuestData.tsv | 3 + .../exceloutput/RqTemplateData.tsv | 2 + soggy_resources/exceloutput/SceneData.tsv | 56 + .../exceloutput/SensitiveWordData.tsv | 57557 ++++++++++++++++ soggy_resources/exceloutput/ShopData.tsv | 24 + soggy_resources/exceloutput/ShopGoodsData.tsv | 68 + soggy_resources/exceloutput/ShopPlanData.tsv | 68 + soggy_resources/exceloutput/StateData.tsv | 8 + .../exceloutput/TalentSkillData.tsv | 332 + soggy_resources/exceloutput/TalkData.tsv | 755 + .../TextMap/CHS/TextMap_ChaData_CHS.tsv | 965 + .../TextMap/CHS/TextMap_DialogueData_CHS.tsv | 14969 ++++ .../TextMap/CHS/TextMap_EmbeddedData_CHS.tsv | 59 + .../TextMap/CHS/TextMap_EntityData_CHS.tsv | 101 + .../TextMap/CHS/TextMap_EquipData_CHS.tsv | 2759 + .../TextMap/CHS/TextMap_InfoData_CHS.tsv | 576 + .../TextMap/CHS/TextMap_Total_CHS.tsv | 24319 +++++++ .../TextMap/CHS/TextMap_UIData_CHS.tsv | 374 + .../TextMap/CHS/TextMap_UniqueData_CHS.tsv | 3492 + .../TextMap/CHS/TextMap_WorldData_CHS.tsv | 1032 + .../TextMap/CHT/TextMap_ChaData_CHT.tsv | 965 + .../TextMap/CHT/TextMap_DialogueData_CHT.tsv | 14969 ++++ .../TextMap/CHT/TextMap_EmbeddedData_CHT.tsv | 59 + .../TextMap/CHT/TextMap_EntityData_CHT.tsv | 101 + .../TextMap/CHT/TextMap_EquipData_CHT.tsv | 2759 + .../TextMap/CHT/TextMap_InfoData_CHT.tsv | 562 + .../TextMap/CHT/TextMap_Total_CHT.tsv | 24305 +++++++ .../TextMap/CHT/TextMap_UIData_CHT.tsv | 374 + .../TextMap/CHT/TextMap_UniqueData_CHT.tsv | 3492 + .../TextMap/CHT/TextMap_WorldData_CHT.tsv | 1032 + .../TextMap/ENG/TextMap_ChaData_ENG.tsv | 965 + .../TextMap/ENG/TextMap_DialogueData_ENG.tsv | 14969 ++++ .../TextMap/ENG/TextMap_EmbeddedData_ENG.tsv | 59 + .../TextMap/ENG/TextMap_EntityData_ENG.tsv | 101 + .../TextMap/ENG/TextMap_EquipData_ENG.tsv | 2759 + .../TextMap/ENG/TextMap_InfoData_ENG.tsv | 562 + .../TextMap/ENG/TextMap_Total_ENG.tsv | 24305 +++++++ .../TextMap/ENG/TextMap_UIData_ENG.tsv | 374 + .../TextMap/ENG/TextMap_UniqueData_ENG.tsv | 3492 + .../TextMap/ENG/TextMap_WorldData_ENG.tsv | 1032 + .../TextMap/KOR/TextMap_ChaData_KOR.tsv | 965 + .../TextMap/KOR/TextMap_DialogueData_KOR.tsv | 14969 ++++ .../TextMap/KOR/TextMap_EmbeddedData_KOR.tsv | 59 + .../TextMap/KOR/TextMap_EntityData_KOR.tsv | 101 + .../TextMap/KOR/TextMap_EquipData_KOR.tsv | 2759 + .../TextMap/KOR/TextMap_InfoData_KOR.tsv | 562 + .../TextMap/KOR/TextMap_Total_KOR.tsv | 24305 +++++++ .../TextMap/KOR/TextMap_UIData_KOR.tsv | 374 + .../TextMap/KOR/TextMap_UniqueData_KOR.tsv | 3492 + .../TextMap/KOR/TextMap_WorldData_KOR.tsv | 1032 + soggy_resources/exceloutput/TextMapData.tsv | 434 + .../exceloutput/TextMapMsgData.tsv | 14 + .../exceloutput/TextMapRetData.tsv | 130 + .../exceloutput/TextMapUIStcData.tsv | 374 + .../exceloutput/TransPointReward.tsv | 25 + .../exceloutput/TrialAvatarData.tsv | 7 + .../exceloutput/TrialReliquaryData.tsv | 8 + soggy_resources/exceloutput/TriggerData.tsv | 103 + soggy_resources/exceloutput/TutorialData.tsv | 66 + .../exceloutput/TutorialDetailData.tsv | 100 + .../exceloutput/WeaponAwakeningData.tsv | 6 + .../exceloutput/WeaponBreakData.tsv | 6 + .../exceloutput/WeaponCurveData.tsv | 91 + soggy_resources/exceloutput/WeaponData.tsv | 102 + .../exceloutput/WeaponLevelData.tsv | 91 + .../exceloutput/WeaponPromoteData.tsv | 6 + soggy_resources/exceloutput/WeatherData.tsv | 4 + soggy_resources/exceloutput/WorldAreaData.tsv | 25 + .../exceloutput/WorldAreaExploreEventData.tsv | 79 + .../exceloutput/WorldAreaLevelUpData.tsv | 13 + .../exceloutput/WorldReminderData.tsv | 69 + soggy_resources/lua/Actor/ActorCommon.lua | 27 + soggy_resources/lua/Actor/ActorData.lua | 68 + soggy_resources/lua/Actor/ActorManager.lua | 497 + soggy_resources/lua/Actor/BaseActorMode.lua | 23 + soggy_resources/lua/Actor/BaseActorProxy.lua | 1339 + soggy_resources/lua/Actor/ConfigCommon.lua | 45 + .../lua/Actor/Cutscene/CutsceneActorProxy.lua | 29 + .../Cutscene/CutsceneActor_Goddess1201.lua | 20 + .../Cutscene/CutsceneActor_GoddessLvup.lua | 34 + .../CutsceneActor_GoddessUpgrade_01.lua | 66 + .../lua/Actor/Cutscene/TestCutsceneActor.lua | 16 + soggy_resources/lua/Actor/DailyNPCManager.lua | 73 + soggy_resources/lua/Actor/DummyActorProxy.lua | 4121 ++ .../lua/Actor/EntityActorProxy.lua | 836 + .../lua/Actor/Gadget/AirflowFieldActor.lua | 12 + soggy_resources/lua/Actor/Gadget/CoinTest.lua | 35 + .../lua/Actor/Gadget/DragonTrigger.lua | 30 + .../lua/Actor/Gadget/GadgetActorProxy.lua | 139 + .../lua/Actor/Gadget/GadgetFactory.lua | 52 + .../lua/Actor/Gadget/GoalMarker404.lua | 44 + .../lua/Actor/Gadget/GoalMarker405.lua | 42 + .../lua/Actor/Gadget/GoalMarker408.lua | 40 + .../lua/Actor/Gadget/GoalMarker409.lua | 53 + .../lua/Actor/Gadget/GoalMarkerAS.lua | 34 + .../lua/Actor/Gadget/Q351Trigger1.lua | 30 + .../lua/Actor/Gadget/Q353Trigger1.lua | 33 + .../lua/Actor/Gadget/Q353Trigger2.lua | 28 + .../lua/Actor/Gadget/Q354Trigger1.lua | 30 + .../lua/Actor/Gadget/Q371Trigger.lua | 30 + .../lua/Actor/Gadget/Q377Trigger.lua | 36 + .../lua/Actor/Gadget/Q378Trigger.lua | 36 + .../lua/Actor/Gadget/Q380TriggerArea.lua | 31 + .../lua/Actor/Gadget/Q381Trigger.lua | 31 + .../lua/Actor/Gadget/Q382Trigger.lua | 31 + .../lua/Actor/Gadget/Q384Trigger.lua | 36 + .../lua/Actor/Gadget/Q384TriggerSP.lua | 36 + .../lua/Actor/Gadget/Q395Trigger.lua | 36 + .../lua/Actor/Gadget/Q427FlyCoins.lua | 75 + .../lua/Actor/Gadget/Q427FlyCoins2.lua | 75 + .../lua/Actor/Gadget/Q466Trigger1.lua | 30 + .../lua/Actor/Gadget/Q466Trigger2.lua | 30 + .../lua/Actor/Gadget/Q466Trigger3.lua | 31 + .../lua/Actor/Gadget/Q466Trigger4.lua | 31 + .../lua/Actor/Gadget/QuestArea.lua | 40 + .../lua/Actor/Gadget/RunCoinStart.lua | 85 + .../lua/Actor/Gadget/SneakTreasure.lua | 40 + .../lua/Actor/Gadget/TriggerTest.lua | 42 + soggy_resources/lua/Actor/Gadget/WalkArea.lua | 42 + .../lua/Actor/Gadget/WendyTrackTrigger.lua | 35 + .../lua/Actor/Gadget/WendyTrackTriggersp.lua | 36 + .../lua/Actor/Gadget/WendyTrackTriggersp1.lua | 36 + .../lua/Actor/Gadget/WendyTrackTriggersp2.lua | 36 + .../lua/Actor/Gadget/WendyTrackTriggersp3.lua | 36 + .../lua/Actor/Gadget/WendyTrackTriggersp4.lua | 36 + .../lua/Actor/GlobalActorConfig.lua | 22 + .../lua/Actor/GlobalActorProxy.lua | 265 + .../lua/Actor/InterLua/Q304Feather.lua | 56 + .../lua/Actor/InterLua/Q305Knight.lua | 80 + .../lua/Actor/InterLua/Q353Slime.lua | 80 + .../lua/Actor/InterLua/Q370SDragonTears.lua | 59 + soggy_resources/lua/Actor/InterLua/Q37604.lua | 58 + .../lua/Actor/InterLua/Q414_41400.lua | 84 + .../lua/Actor/InterLua/TempPreview.lua | 56 + .../Interaction/InteractionActorProxy.lua | 49 + .../Interaction/TestInteractionActor.lua | 9 + .../lua/Actor/Npc/BaseDailyNpc.lua | 121 + .../Actor/Npc/Config/CfgMengdeDayPatrol.lua | 248 + .../lua/Actor/Npc/Config/CfgMengdeDaySit.lua | 20 + .../Actor/Npc/Config/CfgMengdeDayStand.lua | 63 + .../Npc/Config/CfgMengdeInsomniaPatrol.lua | 189 + .../Npc/Config/CfgMengdeInsomniaStand.lua | 115 + .../Npc/Config/CfgMengdeNightConfuse.lua | 28 + .../Actor/Npc/Config/CfgMengdeNightSit.lua | 22 + .../Actor/Npc/Config/CfgMengdeNightStand.lua | 34 + soggy_resources/lua/Actor/Npc/JohnDoe01.lua | 168 + soggy_resources/lua/Actor/Npc/JohnDoe02.lua | 171 + soggy_resources/lua/Actor/Npc/JohnDoe03.lua | 171 + soggy_resources/lua/Actor/Npc/JohnDoe04.lua | 171 + soggy_resources/lua/Actor/Npc/JohnDoe05.lua | 150 + soggy_resources/lua/Actor/Npc/JohnDoe06.lua | 150 + soggy_resources/lua/Actor/Npc/JohnDoe07.lua | 147 + soggy_resources/lua/Actor/Npc/JohnDoe08.lua | 147 + .../lua/Actor/Npc/MengdeSample01.lua | 81 + .../lua/Actor/Npc/MengdeSample02.lua | 78 + .../lua/Actor/Npc/MengdeSample03.lua | 62 + .../lua/Actor/Npc/MengdeSample04.lua | 80 + .../lua/Actor/Npc/MengdeSample05.lua | 64 + .../lua/Actor/Npc/NPCEventType.lua | 17 + .../lua/Actor/Npc/NpcActorProxy.lua | 105 + .../lua/Actor/Npc/NpcDailyCommon.lua | 64 + .../lua/Actor/Npc/NpcMengdeDayPatrol.lua | 169 + .../lua/Actor/Npc/NpcMengdeDaySit.lua | 68 + .../lua/Actor/Npc/NpcMengdeDayStand.lua | 112 + .../lua/Actor/Npc/NpcMengdeInsomniaPatrol.lua | 163 + .../lua/Actor/Npc/NpcMengdeInsomniaStand.lua | 105 + .../lua/Actor/Npc/NpcMengdeNightConfuse.lua | 110 + .../lua/Actor/Npc/NpcMengdeNightSit.lua | 68 + .../lua/Actor/Npc/NpcMengdeNightStand.lua | 100 + .../lua/Actor/Npc/NpcMode/NpcModeType.lua | 26 + .../Actor/Npc/NpcMode/NpcMode_BanDaily.lua | 27 + .../Actor/Npc/NpcMode/NpcMode_MengdeHide.lua | 78 + soggy_resources/lua/Actor/Npc/Razor.lua | 24 + soggy_resources/lua/Actor/Npc/RazorFarmer.lua | 24 + .../lua/Actor/Npc/RazorWolfBoss.lua | 24 + .../lua/Actor/Npc/RazorWolfWound.lua | 24 + soggy_resources/lua/Actor/Npc/SneakAI.lua | 134 + soggy_resources/lua/Actor/Npc/SneakAdvAI.lua | 120 + .../lua/Actor/Npc/SneakBlackDoor.lua | 12 + soggy_resources/lua/Actor/Npc/SneakJudge.lua | 12 + .../lua/Actor/Npc/SneakRedDoor.lua | 12 + soggy_resources/lua/Actor/Npc/Soilder01.lua | 157 + soggy_resources/lua/Actor/Npc/Soilder02.lua | 157 + .../lua/Actor/Npc/StoreKeeper01.lua | 128 + .../lua/Actor/Npc/StoreKeeper02.lua | 143 + .../lua/Actor/Npc/StoreKeeper03.lua | 143 + .../lua/Actor/Npc/StoreKeeper04.lua | 166 + soggy_resources/lua/Actor/Npc/TempNPC.lua | 12 + .../lua/Actor/Npc/TempNpcActor.lua | 8 + soggy_resources/lua/Actor/Npc/Test9001.lua | 40 + soggy_resources/lua/Actor/Quest/AQ306.lua | 178 + soggy_resources/lua/Actor/Quest/AQ307.lua | 207 + soggy_resources/lua/Actor/Quest/AQ308.lua | 185 + soggy_resources/lua/Actor/Quest/AQ309.lua | 83 + soggy_resources/lua/Actor/Quest/AQ311.lua | 68 + soggy_resources/lua/Actor/Quest/AQ350.lua | 54 + soggy_resources/lua/Actor/Quest/AQ351.lua | 266 + soggy_resources/lua/Actor/Quest/AQ352.lua | 222 + soggy_resources/lua/Actor/Quest/AQ353.lua | 362 + soggy_resources/lua/Actor/Quest/AQ354.lua | 127 + soggy_resources/lua/Actor/Quest/AQ355.lua | 137 + soggy_resources/lua/Actor/Quest/AQ356.lua | 265 + soggy_resources/lua/Actor/Quest/AQ357.lua | 678 + soggy_resources/lua/Actor/Quest/AQ358.lua | 79 + soggy_resources/lua/Actor/Quest/AQ359.lua | 121 + soggy_resources/lua/Actor/Quest/AQ360.lua | 106 + soggy_resources/lua/Actor/Quest/AQ361.lua | 92 + soggy_resources/lua/Actor/Quest/AQ501.lua | 223 + soggy_resources/lua/Actor/Quest/AQ502.lua | 205 + soggy_resources/lua/Actor/Quest/AQ503.lua | 210 + soggy_resources/lua/Actor/Quest/AQ504.lua | 302 + soggy_resources/lua/Actor/Quest/AQ505.lua | 115 + soggy_resources/lua/Actor/Quest/IQ467.lua | 60 + soggy_resources/lua/Actor/Quest/IQ468.lua | 60 + soggy_resources/lua/Actor/Quest/IQ469.lua | 77 + soggy_resources/lua/Actor/Quest/IQ470.lua | 94 + soggy_resources/lua/Actor/Quest/LQ451.lua | 104 + soggy_resources/lua/Actor/Quest/LQ452.lua | 107 + soggy_resources/lua/Actor/Quest/LQ453.lua | 169 + soggy_resources/lua/Actor/Quest/LQ454.lua | 175 + soggy_resources/lua/Actor/Quest/LQ461.lua | 323 + soggy_resources/lua/Actor/Quest/LQ462.lua | 217 + soggy_resources/lua/Actor/Quest/LQ463.lua | 450 + soggy_resources/lua/Actor/Quest/LQ464.lua | 74 + soggy_resources/lua/Actor/Quest/LQ465.lua | 252 + soggy_resources/lua/Actor/Quest/LQ466.lua | 320 + soggy_resources/lua/Actor/Quest/MQ301.lua | 254 + soggy_resources/lua/Actor/Quest/MQ303.lua | 73 + soggy_resources/lua/Actor/Quest/MQ304.lua | 261 + soggy_resources/lua/Actor/Quest/MQ305.lua | 146 + soggy_resources/lua/Actor/Quest/MQ362.lua | 96 + soggy_resources/lua/Actor/Quest/MQ370.lua | 108 + soggy_resources/lua/Actor/Quest/MQ371.lua | 287 + soggy_resources/lua/Actor/Quest/MQ372.lua | 179 + soggy_resources/lua/Actor/Quest/MQ373.lua | 76 + soggy_resources/lua/Actor/Quest/MQ374.lua | 173 + soggy_resources/lua/Actor/Quest/MQ375.lua | 320 + soggy_resources/lua/Actor/Quest/MQ376.lua | 326 + soggy_resources/lua/Actor/Quest/MQ377.lua | 183 + soggy_resources/lua/Actor/Quest/MQ378.lua | 196 + soggy_resources/lua/Actor/Quest/MQ379.lua | 151 + soggy_resources/lua/Actor/Quest/MQ380.lua | 146 + soggy_resources/lua/Actor/Quest/MQ381.lua | 154 + soggy_resources/lua/Actor/Quest/MQ382.lua | 85 + soggy_resources/lua/Actor/Quest/MQ383.lua | 135 + soggy_resources/lua/Actor/Quest/MQ384.lua | 310 + soggy_resources/lua/Actor/Quest/MQ385.lua | 46 + soggy_resources/lua/Actor/Quest/MQ388.lua | 308 + soggy_resources/lua/Actor/Quest/MQ389.lua | 174 + soggy_resources/lua/Actor/Quest/MQ390.lua | 379 + soggy_resources/lua/Actor/Quest/MQ391.lua | 380 + soggy_resources/lua/Actor/Quest/MQ392.lua | 380 + soggy_resources/lua/Actor/Quest/MQ393.lua | 136 + soggy_resources/lua/Actor/Quest/MQ394.lua | 99 + soggy_resources/lua/Actor/Quest/MQ395.lua | 104 + soggy_resources/lua/Actor/Quest/MQ396.lua | 211 + soggy_resources/lua/Actor/Quest/MQ419.lua | 46 + soggy_resources/lua/Actor/Quest/MQ420.lua | 46 + soggy_resources/lua/Actor/Quest/MQ421.lua | 108 + soggy_resources/lua/Actor/Quest/MQ422.lua | 46 + .../lua/Actor/Quest/Q220/Gaia22003.lua | 38 + .../lua/Actor/Quest/Q220/Wendy22003.lua | 44 + .../lua/Actor/Quest/Q220/WendyAudience.lua | 70 + .../Actor/Quest/Q220/config/Q220Config.lua | 143 + .../lua/Actor/Quest/Q301/Ambor301.lua | 48 + .../lua/Actor/Quest/Q301/Gaia301.lua | 185 + .../lua/Actor/Quest/Q301/Robam301.lua | 80 + .../lua/Actor/Quest/Q301/Test301.lua | 33 + .../lua/Actor/Quest/Q301/Wendy301.lua | 72 + .../lua/Actor/Quest/Q301/WendyAudience.lua | 215 + .../Actor/Quest/Q301/config/Q301Config.lua | 306 + .../lua/Actor/Quest/Q303/Q303Config.lua | 28 + .../lua/Actor/Quest/Q304/Dragon.lua | 60 + .../lua/Actor/Quest/Q304/Q304Config.lua | 171 + .../lua/Actor/Quest/Q305/Q305Config.lua | 102 + .../lua/Actor/Quest/Q352/Paimon.lua | 316 + .../lua/Actor/Quest/Q362/Q362Config.lua | 26 + .../lua/Actor/Quest/Q375/Guard.lua | 103 + .../lua/Actor/Quest/Q376/Diluc.lua | 12 + .../lua/Actor/Quest/Q376/Soldier.lua | 12 + soggy_resources/lua/Actor/Quest/Q378/Qin.lua | 85 + .../lua/Actor/Quest/Q401/Q401Config.lua | 32 + .../lua/Actor/Quest/Q402/Hostage.lua | 42 + .../lua/Actor/Quest/Q402/Q402Config.lua | 42 + .../lua/Actor/Quest/Q403/Q403Config.lua | 21 + .../lua/Actor/Quest/Q404/Q404Config.lua | 58 + .../lua/Actor/Quest/Q405/Q405Config.lua | 70 + .../lua/Actor/Quest/Q406/Judge406.lua | 23 + .../lua/Actor/Quest/Q406/Q406Config.lua | 128 + .../lua/Actor/Quest/Q407/CricketJudge.lua | 34 + .../lua/Actor/Quest/Q407/Q407Config.lua | 52 + .../lua/Actor/Quest/Q408/Q408Config.lua | 45 + .../lua/Actor/Quest/Q408/RiverRunJudge.lua | 34 + .../lua/Actor/Quest/Q409/BallJudge.lua | 34 + .../lua/Actor/Quest/Q409/Q409Config.lua | 44 + .../lua/Actor/Quest/Q410/Q410Config.lua | 45 + .../lua/Actor/Quest/Q410/Qiuqiu.lua | 34 + .../lua/Actor/Quest/Q410/Soldier.lua | 34 + soggy_resources/lua/Actor/Quest/Q411/Lisa.lua | 34 + .../lua/Actor/Quest/Q411/Merchant.lua | 37 + .../lua/Actor/Quest/Q411/Q411Config.lua | 132 + soggy_resources/lua/Actor/Quest/Q411/Qin.lua | 175 + .../lua/Actor/Quest/Q412/Q412Config.lua | 95 + .../lua/Actor/Quest/Q413/Barbara.lua | 106 + .../lua/Actor/Quest/Q413/Captain.lua | 34 + .../lua/Actor/Quest/Q413/Pastor.lua | 55 + .../lua/Actor/Quest/Q413/Q413Config.lua | 139 + .../lua/Actor/Quest/Q413/Soldier.lua | 35 + .../lua/Actor/Quest/Q414/Q414Config.lua | 51 + .../lua/Actor/Quest/Q501/Q501Config.lua | 67 + .../lua/Actor/Quest/Q502/Q502Config.lua | 55 + .../lua/Actor/Quest/Q503/Q503Config.lua | 55 + .../lua/Actor/Quest/Q504/Q504Config.lua | 96 + .../lua/Actor/Quest/Q505/Q505Config.lua | 19 + .../lua/Actor/Quest/QuestActorProxy.lua | 405 + soggy_resources/lua/Actor/Quest/SQ401.lua | 117 + soggy_resources/lua/Actor/Quest/SQ402.lua | 104 + soggy_resources/lua/Actor/Quest/SQ403.lua | 111 + soggy_resources/lua/Actor/Quest/SQ404.lua | 236 + soggy_resources/lua/Actor/Quest/SQ405.lua | 268 + soggy_resources/lua/Actor/Quest/SQ406.lua | 242 + soggy_resources/lua/Actor/Quest/SQ407.lua | 190 + soggy_resources/lua/Actor/Quest/SQ408.lua | 222 + soggy_resources/lua/Actor/Quest/SQ409.lua | 173 + soggy_resources/lua/Actor/Quest/SQ410.lua | 107 + soggy_resources/lua/Actor/Quest/SQ411.lua | 211 + soggy_resources/lua/Actor/Quest/SQ412.lua | 291 + soggy_resources/lua/Actor/Quest/SQ413.lua | 165 + soggy_resources/lua/Actor/Quest/SQ414.lua | 176 + soggy_resources/lua/Actor/Quest/SQ415.lua | 151 + soggy_resources/lua/Actor/Quest/SQ416.lua | 60 + soggy_resources/lua/Actor/Quest/SQ424.lua | 306 + soggy_resources/lua/Actor/Quest/SQ425.lua | 102 + soggy_resources/lua/Actor/Quest/SQ426.lua | 98 + soggy_resources/lua/Actor/Quest/SQ427.lua | 182 + soggy_resources/lua/Actor/Quest/SQ994.lua | 52 + soggy_resources/lua/Actor/Quest/SQ996.lua | 66 + soggy_resources/lua/Actor/Quest/SQ997.lua | 59 + soggy_resources/lua/Actor/Quest/SQ998.lua | 106 + soggy_resources/lua/Actor/Quest/SQ999.lua | 36 + .../SubGlobal/LimitRegionGlobalActor.lua | 213 + .../Actor/SubGlobal/SubGlobalActorProxy.lua | 125 + .../Actor/SubGlobal/WindTestGlobalActor.lua | 76 + soggy_resources/lua/Actor/TestActorProxy.lua | 74 + soggy_resources/lua/Base/BenchMark.lua | 33 + soggy_resources/lua/Base/Class.lua | 45 + soggy_resources/lua/Base/Common.lua | 41 + soggy_resources/lua/Base/Dispatch.lua | 23 + soggy_resources/lua/Base/Inspect.lua | 347 + soggy_resources/lua/Base/SceneData.lua | 272 + soggy_resources/lua/Base/memory.lua | 20 + soggy_resources/lua/Base/profiler.lua | 125 + soggy_resources/lua/Base/uMath.lua | 89 + soggy_resources/lua/Base/util.lua | 226 + soggy_resources/lua/Config/DefineCommon.lua | 35 + .../lua/Config/Excel/CommonExcelConfig.lua | 306 + .../lua/Config/Excel/CommonScriptConfig.lua | 65 + .../Config/Excel/ConstValueExcelConfig.lua | 35 + .../lua/Config/Excel/EquipExcelConfig.lua | 51 + .../lua/Config/Excel/GatherExcelConfig.lua | 14 + .../lua/Config/Excel/ItemExcelConfig.lua | 16 + .../lua/Config/Excel/OpenStateExcelConfig.lua | 29 + .../lua/Config/Excel/QuestExcelConfig.lua | 129 + .../lua/Config/Excel/SceneExcelConfig.lua | 16 + .../lua/Config/Json/ConfigAIData.lua | 16 + .../lua/Config/Json/ConfigAbilityAction.lua | 22 + .../lua/Config/Json/ConfigAbilityCommon.lua | 70 + .../lua/Config/Json/ConfigAbilityMixin.lua | 14 + .../lua/Config/Json/ConfigAbilityModifier.lua | 35 + .../Config/Json/ConfigAbilityPredicate.lua | 33 + .../lua/Config/Json/ConfigAttackPattern.lua | 15 + .../lua/Config/Json/ConfigBoundary.lua | 15 + .../lua/Config/Json/ConfigBulletPattern.lua | 15 + .../lua/Config/Json/ConfigCombat.lua | 49 + .../lua/Config/Json/ConfigCommon.lua | 15 + .../lua/Config/Json/ConfigCutscene.lua | 25 + .../lua/Config/Json/ConfigDefine.lua | 99 + .../lua/Config/Json/ConfigEntity.lua | 29 + .../lua/Config/Json/ConfigEntityType.lua | 33 + .../lua/Config/Json/ConfigEquipController.lua | 17 + .../lua/Config/Json/ConfigInteraction.lua | 97 + .../lua/Config/Json/ConfigLuaDefine.lua | 105 + .../lua/Config/Json/ConfigMark.lua | 46 + .../lua/Config/Json/ConfigNavigation.lua | 14 + .../lua/Config/Json/ConfigScene.lua | 24 + .../lua/Config/Json/ConfigShape.lua | 14 + .../lua/Config/Json/ConfigStateAudioEvent.lua | 15 + .../lua/Config/Json/ConfigStateLayers.lua | 16 + .../lua/Config/Json/ConfigTransPoint.lua | 23 + soggy_resources/lua/Console.lua | 102 + soggy_resources/lua/Hotfix.lua | 15 + soggy_resources/lua/LuaDebug.lua | 2119 + soggy_resources/lua/LuaDebugjit.lua | 2102 + .../lua/Quest/Client/Q306ClientConfig.lua | 48 + .../lua/Quest/Client/Q307ClientConfig.lua | 64 + .../lua/Quest/Client/Q308ClientConfig.lua | 59 + .../lua/Quest/Client/Q309ClientConfig.lua | 31 + .../lua/Quest/Client/Q311ClientConfig.lua | 17 + .../lua/Quest/Client/Q350ClientConfig.lua | 10 + .../lua/Quest/Client/Q351ClientConfig.lua | 134 + .../lua/Quest/Client/Q352ClientConfig.lua | 130 + .../lua/Quest/Client/Q353ClientConfig.lua | 110 + .../lua/Quest/Client/Q354ClientConfig.lua | 105 + .../lua/Quest/Client/Q355ClientConfig.lua | 64 + .../lua/Quest/Client/Q356ClientConfig.lua | 123 + .../lua/Quest/Client/Q357ClientConfig.lua | 368 + .../lua/Quest/Client/Q358ClientConfig.lua | 75 + .../lua/Quest/Client/Q359ClientConfig.lua | 81 + .../lua/Quest/Client/Q360ClientConfig.lua | 71 + .../lua/Quest/Client/Q361ClientConfig.lua | 19 + .../lua/Quest/Client/Q370ClientConfig.lua | 67 + .../lua/Quest/Client/Q371ClientConfig.lua | 52 + .../lua/Quest/Client/Q372ClientConfig.lua | 49 + .../lua/Quest/Client/Q373ClientConfig.lua | 56 + .../lua/Quest/Client/Q374ClientConfig.lua | 68 + .../lua/Quest/Client/Q375ClientConfig.lua | 417 + .../lua/Quest/Client/Q376ClientConfig.lua | 154 + .../lua/Quest/Client/Q377ClientConfig.lua | 46 + .../lua/Quest/Client/Q378ClientConfig.lua | 85 + .../lua/Quest/Client/Q379ClientConfig.lua | 63 + .../lua/Quest/Client/Q380ClientConfig.lua | 69 + .../lua/Quest/Client/Q381ClientConfig.lua | 63 + .../lua/Quest/Client/Q382ClientConfig.lua | 40 + .../lua/Quest/Client/Q383ClientConfig.lua | 47 + .../lua/Quest/Client/Q384ClientConfig.lua | 75 + .../lua/Quest/Client/Q385ClientConfig.lua | 10 + .../lua/Quest/Client/Q388ClientConfig.lua | 74 + .../lua/Quest/Client/Q389ClientConfig.lua | 75 + .../lua/Quest/Client/Q390ClientConfig.lua | 162 + .../lua/Quest/Client/Q391ClientConfig.lua | 162 + .../lua/Quest/Client/Q392ClientConfig.lua | 162 + .../lua/Quest/Client/Q393ClientConfig.lua | 51 + .../lua/Quest/Client/Q394ClientConfig.lua | 39 + .../lua/Quest/Client/Q395ClientConfig.lua | 22 + .../lua/Quest/Client/Q396ClientConfig.lua | 46 + .../lua/Quest/Client/Q404ClientConfig.lua | 77 + .../lua/Quest/Client/Q415ClientConfig.lua | 404 + .../lua/Quest/Client/Q416ClientConfig.lua | 34 + .../lua/Quest/Client/Q419ClientConfig.lua | 24 + .../lua/Quest/Client/Q420ClientConfig.lua | 24 + .../lua/Quest/Client/Q421ClientConfig.lua | 26 + .../lua/Quest/Client/Q422ClientConfig.lua | 24 + .../lua/Quest/Client/Q424ClientConfig.lua | 361 + .../lua/Quest/Client/Q425ClientConfig.lua | 42 + .../lua/Quest/Client/Q426ClientConfig.lua | 20 + .../lua/Quest/Client/Q427ClientConfig.lua | 190 + .../lua/Quest/Client/Q451ClientConfig.lua | 42 + .../lua/Quest/Client/Q452ClientConfig.lua | 44 + .../lua/Quest/Client/Q453ClientConfig.lua | 159 + .../lua/Quest/Client/Q454ClientConfig.lua | 96 + .../lua/Quest/Client/Q461ClientConfig.lua | 99 + .../lua/Quest/Client/Q462ClientConfig.lua | 103 + .../lua/Quest/Client/Q463ClientConfig.lua | 115 + .../lua/Quest/Client/Q464ClientConfig.lua | 78 + .../lua/Quest/Client/Q465ClientConfig.lua | 109 + .../lua/Quest/Client/Q466ClientConfig.lua | 145 + .../lua/Quest/Client/Q467ClientConfig.lua | 44 + .../lua/Quest/Client/Q468ClientConfig.lua | 44 + .../lua/Quest/Client/Q469ClientConfig.lua | 34 + .../lua/Quest/Client/Q470ClientConfig.lua | 29 + .../lua/Quest/Client/Q994ClientConfig.lua | 23 + .../lua/Quest/Client/Q996ClientConfig.lua | 23 + .../lua/Quest/Client/Q997ClientConfig.lua | 55 + .../lua/Quest/Client/Q998ClientConfig.lua | 76 + .../lua/Quest/Client/Q999ClientConfig.lua | 33 + .../lua/Quest/Share/Q306ShareConfig.lua | 90 + .../lua/Quest/Share/Q307ShareConfig.lua | 105 + .../lua/Quest/Share/Q308ShareConfig.lua | 103 + .../lua/Quest/Share/Q309ShareConfig.lua | 30 + .../lua/Quest/Share/Q311ShareConfig.lua | 27 + .../lua/Quest/Share/Q350ShareConfig.lua | 17 + .../lua/Quest/Share/Q351ShareConfig.lua | 82 + .../lua/Quest/Share/Q352ShareConfig.lua | 89 + .../lua/Quest/Share/Q353ShareConfig.lua | 120 + .../lua/Quest/Share/Q354ShareConfig.lua | 88 + .../lua/Quest/Share/Q355ShareConfig.lua | 94 + .../lua/Quest/Share/Q356ShareConfig.lua | 63 + .../lua/Quest/Share/Q357ShareConfig.lua | 367 + .../lua/Quest/Share/Q358ShareConfig.lua | 100 + .../lua/Quest/Share/Q359ShareConfig.lua | 31 + .../lua/Quest/Share/Q360ShareConfig.lua | 62 + .../lua/Quest/Share/Q361ShareConfig.lua | 27 + .../lua/Quest/Share/Q370ShareConfig.lua | 216 + .../lua/Quest/Share/Q371ShareConfig.lua | 68 + .../lua/Quest/Share/Q372ShareConfig.lua | 99 + .../lua/Quest/Share/Q373ShareConfig.lua | 167 + .../lua/Quest/Share/Q374ShareConfig.lua | 301 + .../lua/Quest/Share/Q375ShareConfig.lua | 132 + .../lua/Quest/Share/Q376ShareConfig.lua | 177 + .../lua/Quest/Share/Q377ShareConfig.lua | 182 + .../lua/Quest/Share/Q378ShareConfig.lua | 95 + .../lua/Quest/Share/Q379ShareConfig.lua | 186 + .../lua/Quest/Share/Q380ShareConfig.lua | 68 + .../lua/Quest/Share/Q381ShareConfig.lua | 77 + .../lua/Quest/Share/Q382ShareConfig.lua | 64 + .../lua/Quest/Share/Q383ShareConfig.lua | 134 + .../lua/Quest/Share/Q384ShareConfig.lua | 214 + .../lua/Quest/Share/Q385ShareConfig.lua | 28 + .../lua/Quest/Share/Q388ShareConfig.lua | 77 + .../lua/Quest/Share/Q389ShareConfig.lua | 80 + .../lua/Quest/Share/Q390ShareConfig.lua | 78 + .../lua/Quest/Share/Q391ShareConfig.lua | 78 + .../lua/Quest/Share/Q392ShareConfig.lua | 78 + .../lua/Quest/Share/Q393ShareConfig.lua | 57 + .../lua/Quest/Share/Q394ShareConfig.lua | 58 + .../lua/Quest/Share/Q395ShareConfig.lua | 71 + .../lua/Quest/Share/Q396ShareConfig.lua | 204 + .../lua/Quest/Share/Q404ShareConfig.lua | 109 + .../lua/Quest/Share/Q415ShareConfig.lua | 89 + .../lua/Quest/Share/Q416ShareConfig.lua | 24 + .../lua/Quest/Share/Q421ShareConfig.lua | 60 + .../lua/Quest/Share/Q424ShareConfig.lua | 53 + .../lua/Quest/Share/Q425ShareConfig.lua | 81 + .../lua/Quest/Share/Q427ShareConfig.lua | 51 + .../lua/Quest/Share/Q451ShareConfig.lua | 22 + .../lua/Quest/Share/Q452ShareConfig.lua | 48 + .../lua/Quest/Share/Q453ShareConfig.lua | 25 + .../lua/Quest/Share/Q454ShareConfig.lua | 57 + .../lua/Quest/Share/Q461ShareConfig.lua | 62 + .../lua/Quest/Share/Q462ShareConfig.lua | 102 + .../lua/Quest/Share/Q463ShareConfig.lua | 36 + .../lua/Quest/Share/Q464ShareConfig.lua | 83 + .../lua/Quest/Share/Q465ShareConfig.lua | 209 + .../lua/Quest/Share/Q466ShareConfig.lua | 402 + .../lua/Quest/Share/Q467ShareConfig.lua | 67 + .../lua/Quest/Share/Q468ShareConfig.lua | 67 + .../lua/Quest/Share/Q469ShareConfig.lua | 44 + .../lua/Quest/Share/Q470ShareConfig.lua | 45 + .../lua/Quest/Share/Q994ShareConfig.lua | 58 + .../lua/Quest/Share/Q996ShareConfig.lua | 60 + .../lua/Quest/Share/Q997ShareConfig.lua | 91 + .../lua/Quest/Share/Q998ShareConfig.lua | 89 + .../lua/Quest/Share/Q999ShareConfig.lua | 81 + soggy_resources/lua/Scene/1/scene1.lua | 10 + .../lua/Scene/1/scene1_block1001.lua | 4 + .../lua/Scene/1/scene1_dummy_points.lua | 5 + .../lua/Scene/1/scene1_group111001001.lua | 187 + .../lua/Scene/1/scene1_group111001002.lua | 54 + .../lua/Scene/1/scene1_group111001003.lua | 52 + .../lua/Scene/1/scene1_group111001004.lua | 54 + .../lua/Scene/1/scene1_group111001005.lua | 54 + .../lua/Scene/1/scene1_group111001006.lua | 54 + .../lua/Scene/1/scene1_group111001007.lua | 54 + .../lua/Scene/1/scene1_group111001008.lua | 50 + .../lua/Scene/1/scene1_group111001009.lua | 52 + .../lua/Scene/1/scene1_group111001010.lua | 52 + .../lua/Scene/1/scene1_group111001011.lua | 65 + .../lua/Scene/1/scene1_group111001012.lua | 55 + .../lua/Scene/1/scene1_group111001013.lua | 53 + .../lua/Scene/1/scene1_group111001014.lua | 52 + .../lua/Scene/1/scene1_group111001015.lua | 56 + .../lua/Scene/1/scene1_group111001016.lua | 57 + .../lua/Scene/1/scene1_group111001017.lua | 54 + .../lua/Scene/1/scene1_group111001018.lua | 54 + .../lua/Scene/1/scene1_group111001019.lua | 54 + .../lua/Scene/1/scene1_group111001020.lua | 53 + .../lua/Scene/1/scene1_group111001021.lua | 53 + .../lua/Scene/1/scene1_group111001022.lua | 52 + .../lua/Scene/1/scene1_group111001023.lua | 51 + .../lua/Scene/1/scene1_group111001024.lua | 51 + .../lua/Scene/1/scene1_group111001025.lua | 51 + .../lua/Scene/1/scene1_group111001026.lua | 52 + .../lua/Scene/1/scene1_group111001027.lua | 51 + .../lua/Scene/1/scene1_group111001028.lua | 52 + .../lua/Scene/1/scene1_group111001029.lua | 53 + .../lua/Scene/1/scene1_group111001030.lua | 51 + .../lua/Scene/1/scene1_group111001031.lua | 53 + .../lua/Scene/1/scene1_group111001032.lua | 53 + .../lua/Scene/1/scene1_group111001033.lua | 53 + .../lua/Scene/1/scene1_group111001034.lua | 53 + .../lua/Scene/1/scene1_group111001035.lua | 52 + .../lua/Scene/1/scene1_group111001036.lua | 52 + .../lua/Scene/1/scene1_group111001037.lua | 52 + .../lua/Scene/1/scene1_group111001038.lua | 52 + .../lua/Scene/1/scene1_group111001039.lua | 57 + .../lua/Scene/1/scene1_group111001040.lua | 51 + .../lua/Scene/1/scene1_group111001041.lua | 52 + .../lua/Scene/1/scene1_group111001042.lua | 55 + .../lua/Scene/1/scene1_group111001043.lua | 53 + .../lua/Scene/1/scene1_group111001044.lua | 53 + .../lua/Scene/1/scene1_group111001045.lua | 53 + .../lua/Scene/1/scene1_group111001046.lua | 51 + .../lua/Scene/1/scene1_group111001047.lua | 51 + .../lua/Scene/1/scene1_group111001048.lua | 51 + .../lua/Scene/1/scene1_group111001049.lua | 53 + .../lua/Scene/1/scene1_group111001050.lua | 53 + .../lua/Scene/1/scene1_group111001051.lua | 54 + .../lua/Scene/1/scene1_group111001052.lua | 53 + .../lua/Scene/1/scene1_group111001053.lua | 55 + .../lua/Scene/1/scene1_group111001054.lua | 53 + .../lua/Scene/1/scene1_group111001055.lua | 51 + .../lua/Scene/1/scene1_group111001056.lua | 52 + .../lua/Scene/1/scene1_group111001057.lua | 53 + .../lua/Scene/1/scene1_group111001058.lua | 52 + .../lua/Scene/1/scene1_group111001059.lua | 52 + .../lua/Scene/1/scene1_group111001060.lua | 53 + .../lua/Scene/1/scene1_group111001061.lua | 52 + .../lua/Scene/1/scene1_group111001062.lua | 54 + .../lua/Scene/1/scene1_group111001063.lua | 53 + .../lua/Scene/1/scene1_group111001064.lua | 53 + .../lua/Scene/1/scene1_group111001065.lua | 54 + .../lua/Scene/1/scene1_group111001066.lua | 54 + .../lua/Scene/1/scene1_group111001067.lua | 54 + .../lua/Scene/1/scene1_group111001068.lua | 53 + .../lua/Scene/1/scene1_group111001069.lua | 51 + .../lua/Scene/1/scene1_group111001070.lua | 51 + .../lua/Scene/1/scene1_group111001071.lua | 51 + .../lua/Scene/1/scene1_group111001072.lua | 53 + .../lua/Scene/1/scene1_group111001073.lua | 51 + .../lua/Scene/1/scene1_group111001074.lua | 51 + .../lua/Scene/1/scene1_group111001075.lua | 51 + .../lua/Scene/1/scene1_group111001076.lua | 51 + .../lua/Scene/1/scene1_group111001077.lua | 51 + .../lua/Scene/1/scene1_group111001078.lua | 50 + .../lua/Scene/1/scene1_group111001079.lua | 53 + .../lua/Scene/1/scene1_group111001080.lua | 53 + .../lua/Scene/1/scene1_group111001081.lua | 54 + .../lua/Scene/1/scene1_group111001082.lua | 52 + .../lua/Scene/1/scene1_group111001083.lua | 52 + .../lua/Scene/1/scene1_group111001084.lua | 53 + .../lua/Scene/1/scene1_group111001085.lua | 53 + .../lua/Scene/1/scene1_group111001086.lua | 50 + .../lua/Scene/1/scene1_group111001087.lua | 50 + .../lua/Scene/1/scene1_group111001088.lua | 52 + .../lua/Scene/1/scene1_group111001089.lua | 52 + .../lua/Scene/1/scene1_group111001090.lua | 52 + .../lua/Scene/1/scene1_group111001091.lua | 53 + .../lua/Scene/1/scene1_group111001092.lua | 54 + .../lua/Scene/1/scene1_group111001093.lua | 55 + .../lua/Scene/1/scene1_group111001094.lua | 52 + .../lua/Scene/1/scene1_group111001095.lua | 52 + .../lua/Scene/1/scene1_group111001096.lua | 52 + .../lua/Scene/1/scene1_group111001097.lua | 52 + .../lua/Scene/1/scene1_group111001098.lua | 51 + .../lua/Scene/1/scene1_group111001099.lua | 53 + .../lua/Scene/1/scene1_group111001100.lua | 53 + .../lua/Scene/1/scene1_group111001101.lua | 52 + .../lua/Scene/1/scene1_group111001102.lua | 51 + .../lua/Scene/1/scene1_group111001103.lua | 52 + .../lua/Scene/1/scene1_group111001104.lua | 52 + .../lua/Scene/1/scene1_group111001105.lua | 53 + .../lua/Scene/1/scene1_group111001106.lua | 52 + .../lua/Scene/1/scene1_group111001107.lua | 52 + .../lua/Scene/1/scene1_group111001108.lua | 52 + .../lua/Scene/1/scene1_group111001109.lua | 53 + .../lua/Scene/1/scene1_group111001110.lua | 53 + .../lua/Scene/1/scene1_group111001111.lua | 54 + .../lua/Scene/1/scene1_group111001112.lua | 54 + .../lua/Scene/1/scene1_group111001113.lua | 53 + .../lua/Scene/1/scene1_group111001114.lua | 52 + .../lua/Scene/1/scene1_group111001115.lua | 52 + .../lua/Scene/1/scene1_group111001116.lua | 52 + .../lua/Scene/1/scene1_group111001117.lua | 53 + .../lua/Scene/1/scene1_group111001118.lua | 53 + .../lua/Scene/1/scene1_group111001119.lua | 55 + .../lua/Scene/1/scene1_group111001120.lua | 50 + .../lua/Scene/1/scene1_group111001121.lua | 54 + .../lua/Scene/1/scene1_group111001122.lua | 53 + .../lua/Scene/1/scene1_group111001123.lua | 52 + .../lua/Scene/1/scene1_group111001124.lua | 53 + .../lua/Scene/1/scene1_group111001125.lua | 53 + .../lua/Scene/1/scene1_group111001126.lua | 54 + .../lua/Scene/1/scene1_group111001127.lua | 66 + .../lua/Scene/1/scene1_group111001128.lua | 50 + .../lua/Scene/1/scene1_group111001129.lua | 51 + .../lua/Scene/1/scene1_group111001130.lua | 51 + .../lua/Scene/1/scene1_group111001131.lua | 52 + .../lua/Scene/1/scene1_group111001132.lua | 75 + .../lua/Scene/1/scene1_group111001133.lua | 50 + soggy_resources/lua/Scene/1/scene1_point.json | 192 + soggy_resources/lua/Scene/1001/scene1001.lua | 22 + .../lua/Scene/1001/scene1001_1001_routes.json | 1065 + .../lua/Scene/1001/scene1001_block1001.lua | 5 + .../lua/Scene/1001/scene1001_block81001.lua | 4 + .../Scene/1001/scene1001_group11001001.lua | 51 + .../Scene/1001/scene1001_group201001001.lua | 96 + .../Scene/1001/scene1001_group201001002.lua | 96 + .../lua/Scene/1001/scene1001_point.json | 8 + .../lua/Scene/1001/scene1001_routes.json | 117 + soggy_resources/lua/Scene/1002/scene1002.lua | 15 + .../lua/Scene/1002/scene1002_group10001.lua | 109 + .../lua/Scene/1002/scene1002_group10002.lua | 101 + .../lua/Scene/1002/scene1002_point.json | 22 + soggy_resources/lua/Scene/1003/scene1003.lua | 10 + .../lua/Scene/1003/scene1003_1003_routes.json | 4 + .../lua/Scene/1003/scene3_block3003.lua | 4 + soggy_resources/lua/Scene/1004/scene1004.lua | 22 + .../lua/Scene/1004/scene1004_1004_routes.json | 4 + .../lua/Scene/1004/scene1004_block1004.lua | 6 + .../lua/Scene/1004/scene1004_dummy_points.lua | 36 + .../Scene/1004/scene1004_group201004901.lua | 102 + .../Scene/1004/scene1004_group201004902.lua | 93 + .../Scene/1004/scene1004_group201004903.lua | 67 + .../lua/Scene/1004/scene1004_point.json | 101 + .../lua/Scene/1004/scene1004_routes.lua | 2 + .../lua/Scene/1004/scene1004_triggers.json | 35 + soggy_resources/lua/Scene/1005/scene1005.lua | 22 + .../lua/Scene/1005/scene1005_1005_routes.json | 4 + .../lua/Scene/1005/scene1005_block1005.lua | 5 + .../lua/Scene/1005/scene1005_dummy_points.lua | 59 + .../Scene/1005/scene1005_group201005001.lua | 86 + .../Scene/1005/scene1005_group201005901.lua | 93 + .../lua/Scene/1005/scene1005_point.json | 46 + soggy_resources/lua/Scene/1006/scene1006.lua | 22 + .../lua/Scene/1006/scene1006_1006_routes.json | 305 + .../lua/Scene/1006/scene1006_block1006.lua | 8 + .../lua/Scene/1006/scene1006_dummy_points.lua | 8 + .../Scene/1006/scene1006_group201006004.lua | 242 + .../Scene/1006/scene1006_group201006005.lua | 137 + .../Scene/1006/scene1006_group201006006.lua | 310 + .../Scene/1006/scene1006_group201006007.lua | 276 + .../Scene/1006/scene1006_group201006008.lua | 91 + .../lua/Scene/1006/scene1006_point.json | 319 + .../lua/Scene/1006/scene1006_routes.lua | 2 + soggy_resources/lua/Scene/1007/scene1007.lua | 22 + .../lua/Scene/1007/scene1007_1007_routes.json | 55 + .../lua/Scene/1007/scene1007_block1007.lua | 8 + .../lua/Scene/1007/scene1007_dummy_points.lua | 2 + .../Scene/1007/scene1007_group201007001.lua | 137 + .../Scene/1007/scene1007_group201007002.lua | 70 + .../Scene/1007/scene1007_group201007003.lua | 168 + .../Scene/1007/scene1007_group201007004.lua | 71 + .../Scene/1007/scene1007_group201007005.lua | 122 + .../lua/Scene/1007/scene1007_point.json | 146 + .../lua/Scene/1007/scene1007_routes.lua | 20 + soggy_resources/lua/Scene/1008/scene1008.lua | 22 + .../lua/Scene/1008/scene1008_1008_routes.json | 4 + .../lua/Scene/1008/scene1008_block1008.lua | 6 + .../lua/Scene/1008/scene1008_dummy_points.lua | 38 + .../Scene/1008/scene1008_group201008001.lua | 66 + .../Scene/1008/scene1008_group201008003.lua | 69 + .../Scene/1008/scene1008_group201008901.lua | 102 + .../lua/Scene/1008/scene1008_point.json | 83 + .../lua/Scene/1008/scene1008_triggers.json | 35 + soggy_resources/lua/Scene/1009/scene1009.lua | 22 + .../lua/Scene/1009/scene1009_1009_routes.json | 4 + .../lua/Scene/1009/scene1009_block1009.lua | 6 + .../lua/Scene/1009/scene1009_dummy_points.lua | 29 + .../lua/Scene/1009/scene1009_environment.json | 1 + .../Scene/1009/scene1009_group201009001.lua | 66 + .../Scene/1009/scene1009_group201009003.lua | 73 + .../Scene/1009/scene1009_group201009901.lua | 90 + .../lua/Scene/1009/scene1009_point.json | 120 + soggy_resources/lua/Scene/1010/scene1010.lua | 22 + .../lua/Scene/1010/scene1010_1010_routes.json | 98 + .../lua/Scene/1010/scene1010_block1010.lua | 7 + .../lua/Scene/1010/scene1010_dummy_points.lua | 2 + .../Scene/1010/scene1010_group201010001.lua | 120 + .../Scene/1010/scene1010_group201010002.lua | 107 + .../Scene/1010/scene1010_group201010003.lua | 99 + .../Scene/1010/scene1010_group201010004.lua | 211 + .../lua/Scene/1010/scene1010_point.json | 8 + soggy_resources/lua/Scene/1011/scene1011.lua | 22 + .../lua/Scene/1011/scene1011_1011_routes.json | 11 + .../lua/Scene/1011/scene1011_block1011.lua | 49 + .../lua/Scene/1011/scene1011_dummy_points.lua | 2 + .../Scene/1011/scene1011_group201011001.lua | 531 + .../Scene/1011/scene1011_group201011002.lua | 259 + .../Scene/1011/scene1011_group201011003.lua | 346 + .../Scene/1011/scene1011_group201011004.lua | 344 + .../Scene/1011/scene1011_group201011005.lua | 169 + .../Scene/1011/scene1011_group201011006.lua | 435 + .../Scene/1011/scene1011_group201011007.lua | 340 + .../Scene/1011/scene1011_group201011008.lua | 67 + .../Scene/1011/scene1011_group201011009.lua | 69 + .../Scene/1011/scene1011_group201011010.lua | 106 + .../Scene/1011/scene1011_group201011011.lua | 127 + .../Scene/1011/scene1011_group201011012.lua | 127 + .../Scene/1011/scene1011_group201011013.lua | 127 + .../Scene/1011/scene1011_group201011014.lua | 127 + .../Scene/1011/scene1011_group201011015.lua | 127 + .../Scene/1011/scene1011_group201011016.lua | 127 + .../Scene/1011/scene1011_group201011017.lua | 127 + .../Scene/1011/scene1011_group201011018.lua | 127 + .../Scene/1011/scene1011_group201011019.lua | 127 + .../Scene/1011/scene1011_group201011020.lua | 127 + .../Scene/1011/scene1011_group201011021.lua | 127 + .../Scene/1011/scene1011_group201011022.lua | 127 + .../Scene/1011/scene1011_group201011023.lua | 127 + .../Scene/1011/scene1011_group201011024.lua | 127 + .../Scene/1011/scene1011_group201011025.lua | 127 + .../Scene/1011/scene1011_group201011026.lua | 127 + .../Scene/1011/scene1011_group201011027.lua | 127 + .../Scene/1011/scene1011_group201011028.lua | 127 + .../Scene/1011/scene1011_group201011029.lua | 127 + .../Scene/1011/scene1011_group201011030.lua | 127 + .../Scene/1011/scene1011_group201011031.lua | 127 + .../Scene/1011/scene1011_group201011032.lua | 127 + .../Scene/1011/scene1011_group201011033.lua | 127 + .../Scene/1011/scene1011_group201011034.lua | 127 + .../Scene/1011/scene1011_group201011035.lua | 127 + .../Scene/1011/scene1011_group201011036.lua | 127 + .../Scene/1011/scene1011_group201011037.lua | 127 + .../Scene/1011/scene1011_group201011038.lua | 127 + .../Scene/1011/scene1011_group201011039.lua | 127 + .../Scene/1011/scene1011_group201011040.lua | 127 + .../Scene/1011/scene1011_group201011041.lua | 127 + .../Scene/1011/scene1011_group201011042.lua | 127 + .../Scene/1011/scene1011_group201011043.lua | 127 + .../Scene/1011/scene1011_group201011044.lua | 541 + .../Scene/1011/scene1011_group201011045.lua | 259 + .../Scene/1011/scene1011_group201011046.lua | 366 + .../lua/Scene/1011/scene1011_point.json | 928 + soggy_resources/lua/Scene/1012/scene1012.lua | 22 + .../lua/Scene/1012/scene1012_1012_routes.json | 167 + .../lua/Scene/1012/scene1012_block1012.lua | 8 + .../lua/Scene/1012/scene1012_dummy_points.lua | 2 + .../Scene/1012/scene1012_group201012001.lua | 72 + .../Scene/1012/scene1012_group201012002.lua | 66 + .../Scene/1012/scene1012_group201012003.lua | 76 + .../Scene/1012/scene1012_group201012004.lua | 76 + .../Scene/1012/scene1012_group201012005.lua | 72 + .../lua/Scene/1012/scene1012_point.json | 8 + soggy_resources/lua/Scene/1013/scene1013.lua | 22 + .../lua/Scene/1013/scene1013_block1013.lua | 4 + .../lua/Scene/1013/scene1013_dummy_points.lua | 44 + .../Scene/1013/scene1013_group201013001.lua | 66 + .../lua/Scene/1013/scene1013_point.json | 8 + soggy_resources/lua/Scene/1015/scene1015.lua | 22 + .../lua/Scene/1015/scene1015_1015_routes.json | 4 + .../lua/Scene/1015/scene1015_block1015.lua | 4 + .../lua/Scene/1015/scene1015_dummy_points.lua | 8 + .../Scene/1015/scene1015_group201015001.lua | 77 + .../lua/Scene/1015/scene1015_point.json | 8 + soggy_resources/lua/Scene/2/scene2.lua | 10 + .../lua/Scene/20000/scene20000.lua | 22 + .../Scene/20000/scene20000_20000_routes.json | 710 + .../lua/Scene/20000/scene20000_block20000.lua | 44 + .../Scene/20000/scene20000_dummy_points.lua | 2 + .../Scene/20000/scene20000_group220000001.lua | 267 + .../Scene/20000/scene20000_group220000002.lua | 211 + .../Scene/20000/scene20000_group220000004.lua | 163 + .../Scene/20000/scene20000_group220000005.lua | 306 + .../Scene/20000/scene20000_group220000006.lua | 76 + .../Scene/20000/scene20000_group220000007.lua | 95 + .../Scene/20000/scene20000_group220000008.lua | 125 + .../Scene/20000/scene20000_group220000009.lua | 135 + .../Scene/20000/scene20000_group220000010.lua | 184 + .../Scene/20000/scene20000_group220000018.lua | 78 + .../Scene/20000/scene20000_group220000019.lua | 189 + .../Scene/20000/scene20000_group220000020.lua | 70 + .../Scene/20000/scene20000_group220000021.lua | 70 + .../Scene/20000/scene20000_group220000022.lua | 69 + .../Scene/20000/scene20000_group220000023.lua | 73 + .../Scene/20000/scene20000_group220000024.lua | 70 + .../Scene/20000/scene20000_group220000025.lua | 69 + .../Scene/20000/scene20000_group220000026.lua | 82 + .../Scene/20000/scene20000_group220000027.lua | 70 + .../Scene/20000/scene20000_group220000028.lua | 72 + .../Scene/20000/scene20000_group220000029.lua | 69 + .../Scene/20000/scene20000_group220000030.lua | 136 + .../Scene/20000/scene20000_group220000031.lua | 132 + .../Scene/20000/scene20000_group220000034.lua | 148 + .../Scene/20000/scene20000_group220000035.lua | 68 + .../Scene/20000/scene20000_group220000036.lua | 131 + .../Scene/20000/scene20000_group220000037.lua | 273 + .../Scene/20000/scene20000_group220000038.lua | 67 + .../Scene/20000/scene20000_group220000039.lua | 69 + .../Scene/20000/scene20000_group220000040.lua | 85 + .../Scene/20000/scene20000_group220000041.lua | 118 + .../Scene/20000/scene20000_group220000042.lua | 84 + .../Scene/20000/scene20000_group220000043.lua | 89 + .../Scene/20000/scene20000_group220000044.lua | 112 + .../Scene/20000/scene20000_group220000045.lua | 90 + .../Scene/20000/scene20000_group220000046.lua | 89 + .../Scene/20000/scene20000_group220000047.lua | 95 + .../Scene/20000/scene20000_group220000048.lua | 71 + .../Scene/20000/scene20000_group220000049.lua | 109 + .../Scene/20000/scene20000_group220000050.lua | 92 + .../Scene/20000/scene20000_group220000051.lua | 95 + .../lua/Scene/20000/scene20000_point.json | 63 + .../lua/Scene/20000/scene20000_triggers.json | 849 + .../lua/Scene/20001/scene20001.lua | 11 + .../Scene/20001/scene20001_20001_routes.json | 4 + .../lua/Scene/20001/scene20001_block20001.lua | 6 + .../Scene/20001/scene20001_group220001001.lua | 69 + .../Scene/20001/scene20001_group220001002.lua | 92 + .../Scene/20001/scene20001_group220001003.lua | 69 + .../lua/Scene/20001/scene20001_point.json | 76 + .../lua/Scene/20002/scene20002.lua | 13 + .../Scene/20002/scene20002_20002_routes.json | 4 + .../lua/Scene/20002/scene20002_block20002.lua | 8 + .../Scene/20002/scene20002_group220002001.lua | 66 + .../Scene/20002/scene20002_group220002002.lua | 74 + .../Scene/20002/scene20002_group220002003.lua | 68 + .../Scene/20002/scene20002_group220002004.lua | 66 + .../Scene/20002/scene20002_group220002005.lua | 66 + .../lua/Scene/20002/scene20002_point.json | 24 + .../lua/Scene/20002/scene20002_trails.json | 84 + .../lua/Scene/20003/scene20003.lua | 13 + .../Scene/20003/scene20003_20003_routes.json | 4 + .../lua/Scene/20003/scene20003_block20003.lua | 9 + .../Scene/20003/scene20003_group220003001.lua | 74 + .../Scene/20003/scene20003_group220003003.lua | 67 + .../Scene/20003/scene20003_group220003004.lua | 67 + .../Scene/20003/scene20003_group220003005.lua | 66 + .../Scene/20003/scene20003_group220003006.lua | 70 + .../Scene/20003/scene20003_group220003007.lua | 67 + .../lua/Scene/20003/scene20003_point.json | 5 + .../lua/Scene/20004/scene20004.lua | 13 + .../Scene/20004/scene20004_20004_routes.json | 4 + .../lua/Scene/20004/scene20004_block20004.lua | 7 + .../Scene/20004/scene20004_group220004001.lua | 67 + .../Scene/20004/scene20004_group220004002.lua | 66 + .../Scene/20004/scene20004_group220004003.lua | 72 + .../Scene/20004/scene20004_group220004004.lua | 66 + .../lua/Scene/20004/scene20004_point.json | 24 + .../lua/Scene/20005/scene20005.lua | 13 + .../Scene/20005/scene20005_20005_routes.json | 4 + .../lua/Scene/20005/scene20005_block20005.lua | 8 + .../Scene/20005/scene20005_group220005001.lua | 67 + .../Scene/20005/scene20005_group220005002.lua | 67 + .../Scene/20005/scene20005_group220005003.lua | 82 + .../Scene/20005/scene20005_group220005004.lua | 73 + .../Scene/20005/scene20005_group220005005.lua | 68 + .../lua/Scene/20005/scene20005_point.json | 5 + .../lua/Scene/20006/scene20006.lua | 22 + .../Scene/20006/scene20006_20006_routes.json | 426 + .../lua/Scene/20006/scene20006_block20006.lua | 12 + .../Scene/20006/scene20006_dummy_points.lua | 11 + .../Scene/20006/scene20006_group220006001.lua | 311 + .../Scene/20006/scene20006_group220006002.lua | 216 + .../Scene/20006/scene20006_group220006003.lua | 73 + .../Scene/20006/scene20006_group220006004.lua | 356 + .../Scene/20006/scene20006_group220006005.lua | 166 + .../Scene/20006/scene20006_group220006006.lua | 67 + .../Scene/20006/scene20006_group220006007.lua | 168 + .../Scene/20006/scene20006_group220006008.lua | 93 + .../Scene/20006/scene20006_group220006009.lua | 177 + .../lua/Scene/20006/scene20006_point.json | 847 + .../lua/Scene/20006/scene20006_routes.lua | 111 + .../lua/Scene/20007/scene20007.lua | 22 + .../Scene/20007/scene20007_20007_routes.json | 217 + .../lua/Scene/20007/scene20007_block20007.lua | 7 + .../Scene/20007/scene20007_dummy_points.lua | 10 + .../Scene/20007/scene20007_environment.json | 1 + .../Scene/20007/scene20007_group220007001.lua | 143 + .../Scene/20007/scene20007_group220007003.lua | 225 + .../Scene/20007/scene20007_group220007004.lua | 101 + .../Scene/20007/scene20007_group220007005.lua | 68 + .../lua/Scene/20007/scene20007_point.json | 161 + .../lua/Scene/20008/scene20008.lua | 22 + .../Scene/20008/scene20008_20008_routes.json | 151 + .../lua/Scene/20008/scene20008_block20008.lua | 11 + .../Scene/20008/scene20008_dummy_points.lua | 8 + .../Scene/20008/scene20008_group220008001.lua | 440 + .../Scene/20008/scene20008_group220008002.lua | 148 + .../Scene/20008/scene20008_group220008003.lua | 412 + .../Scene/20008/scene20008_group220008004.lua | 146 + .../Scene/20008/scene20008_group220008005.lua | 66 + .../Scene/20008/scene20008_group220008006.lua | 118 + .../Scene/20008/scene20008_group220008007.lua | 68 + .../Scene/20008/scene20008_group220008901.lua | 102 + .../lua/Scene/20008/scene20008_point.json | 951 + .../lua/Scene/20009/scene20009.lua | 22 + .../Scene/20009/scene20009_20009_routes.json | 259 + .../lua/Scene/20009/scene20009_block20009.lua | 12 + .../Scene/20009/scene20009_dummy_points.lua | 5 + .../Scene/20009/scene20009_group220009001.lua | 597 + .../Scene/20009/scene20009_group220009002.lua | 310 + .../Scene/20009/scene20009_group220009003.lua | 313 + .../Scene/20009/scene20009_group220009004.lua | 66 + .../Scene/20009/scene20009_group220009006.lua | 90 + .../Scene/20009/scene20009_group220009007.lua | 99 + .../Scene/20009/scene20009_group220009008.lua | 75 + .../Scene/20009/scene20009_group220009011.lua | 273 + .../Scene/20009/scene20009_group220009901.lua | 115 + .../lua/Scene/20009/scene20009_point.json | 859 + .../lua/Scene/20009/scene20009_triggers.json | 486 + .../lua/Scene/20010/scene20010.lua | 22 + .../Scene/20010/scene20010_20010_routes.json | 246 + .../lua/Scene/20010/scene20010_block20010.lua | 14 + .../Scene/20010/scene20010_dummy_points.lua | 2 + .../Scene/20010/scene20010_group220010001.lua | 477 + .../Scene/20010/scene20010_group220010002.lua | 275 + .../Scene/20010/scene20010_group220010003.lua | 139 + .../Scene/20010/scene20010_group220010004.lua | 330 + .../Scene/20010/scene20010_group220010005.lua | 206 + .../Scene/20010/scene20010_group220010006.lua | 145 + .../Scene/20010/scene20010_group220010007.lua | 93 + .../Scene/20010/scene20010_group220010008.lua | 126 + .../Scene/20010/scene20010_group220010009.lua | 127 + .../Scene/20010/scene20010_group220010010.lua | 178 + .../Scene/20010/scene20010_group220010017.lua | 70 + .../lua/Scene/20010/scene20010_point.json | 1739 + .../lua/Scene/20010/scene20010_routes.lua | 62 + .../lua/Scene/20011/scene20011.lua | 22 + .../Scene/20011/scene20011_20011_routes.json | 410 + .../lua/Scene/20011/scene20011_block20011.lua | 9 + .../Scene/20011/scene20011_dummy_points.lua | 8 + .../Scene/20011/scene20011_group220011001.lua | 634 + .../Scene/20011/scene20011_group220011002.lua | 204 + .../Scene/20011/scene20011_group220011003.lua | 483 + .../Scene/20011/scene20011_group220011004.lua | 336 + .../Scene/20011/scene20011_group220011006.lua | 238 + .../Scene/20011/scene20011_group220011901.lua | 114 + .../lua/Scene/20011/scene20011_point.json | 1093 + .../lua/Scene/20011/scene20011_routes.lua | 53 + .../lua/Scene/20012/scene20012.lua | 22 + .../Scene/20012/scene20012_20012_routes.json | 376 + .../lua/Scene/20012/scene20012_block20012.lua | 10 + .../Scene/20012/scene20012_dummy_points.lua | 2 + .../Scene/20012/scene20012_group220012001.lua | 71 + .../Scene/20012/scene20012_group220012002.lua | 69 + .../Scene/20012/scene20012_group220012003.lua | 192 + .../Scene/20012/scene20012_group220012004.lua | 67 + .../Scene/20012/scene20012_group220012005.lua | 142 + .../Scene/20012/scene20012_group220012006.lua | 68 + .../Scene/20012/scene20012_group220012007.lua | 238 + .../lua/Scene/20012/scene20012_point.json | 182 + .../lua/Scene/20012/scene20012_routes.lua | 93 + .../lua/Scene/20013/scene20013.lua | 22 + .../Scene/20013/scene20013_20013_routes.json | 361 + .../lua/Scene/20013/scene20013_block20013.lua | 9 + .../Scene/20013/scene20013_dummy_points.lua | 3 + .../Scene/20013/scene20013_group220013001.lua | 179 + .../Scene/20013/scene20013_group220013002.lua | 1200 + .../Scene/20013/scene20013_group220013003.lua | 212 + .../Scene/20013/scene20013_group220013004.lua | 66 + .../Scene/20013/scene20013_group220013005.lua | 874 + .../Scene/20013/scene20013_group220013006.lua | 91 + .../lua/Scene/20013/scene20013_point.json | 182 + .../lua/Scene/20013/scene20013_routes.lua | 110 + .../lua/Scene/20014/scene20014.lua | 22 + .../Scene/20014/scene20014_20014_routes.json | 329 + .../lua/Scene/20014/scene20014_block20014.lua | 10 + .../Scene/20014/scene20014_dummy_points.lua | 3 + .../Scene/20014/scene20014_group220014002.lua | 442 + .../Scene/20014/scene20014_group220014003.lua | 135 + .../Scene/20014/scene20014_group220014004.lua | 131 + .../Scene/20014/scene20014_group220014005.lua | 141 + .../Scene/20014/scene20014_group220014006.lua | 178 + .../Scene/20014/scene20014_group220014007.lua | 119 + .../Scene/20014/scene20014_group220014008.lua | 117 + .../lua/Scene/20014/scene20014_point.json | 93 + .../lua/Scene/20014/scene20014_routes.lua | 94 + .../lua/Scene/20015/scene20015.lua | 22 + .../Scene/20015/scene20015_20015_routes.json | 4 + .../lua/Scene/20015/scene20015_block20015.lua | 4 + .../Scene/20015/scene20015_dummy_points.lua | 2 + .../Scene/20015/scene20015_group220015002.lua | 117 + .../lua/Scene/20015/scene20015_point.json | 7 + .../lua/Scene/20016/scene20016.lua | 22 + .../Scene/20016/scene20016_20016_routes.json | 30 + .../lua/Scene/20016/scene20016_block20016.lua | 11 + .../Scene/20016/scene20016_dummy_points.lua | 19 + .../Scene/20016/scene20016_group220016001.lua | 146 + .../Scene/20016/scene20016_group220016002.lua | 240 + .../Scene/20016/scene20016_group220016003.lua | 166 + .../Scene/20016/scene20016_group220016005.lua | 71 + .../Scene/20016/scene20016_group220016006.lua | 79 + .../Scene/20016/scene20016_group220016007.lua | 177 + .../Scene/20016/scene20016_group220016008.lua | 158 + .../Scene/20016/scene20016_group220016901.lua | 79 + .../lua/Scene/20016/scene20016_point.json | 83 + .../lua/Scene/20016/scene20016_triggers.json | 178 + .../lua/Scene/20017/scene20017.lua | 22 + .../lua/Scene/20017/scene20017_block20017.lua | 4 + .../Scene/20017/scene20017_group220017001.lua | 67 + .../lua/Scene/20017/scene20017_point.json | 8 + .../lua/Scene/20018/scene20018.lua | 22 + .../lua/Scene/20018/scene20018_block20018.lua | 4 + .../Scene/20018/scene20018_group220018001.lua | 128 + .../lua/Scene/20018/scene20018_point.json | 44 + .../lua/Scene/20018/scene20018_triggers.json | 24 + .../lua/Scene/20019/scene20019.lua | 22 + .../Scene/20019/scene20019_20019_routes.json | 4 + .../lua/Scene/20019/scene20019_block20019.lua | 6 + .../Scene/20019/scene20019_group220019001.lua | 170 + .../Scene/20019/scene20019_group220019002.lua | 150 + .../Scene/20019/scene20019_group220019003.lua | 68 + .../lua/Scene/20019/scene20019_point.json | 58 + .../lua/Scene/20020/scene20020.lua | 22 + .../lua/Scene/20020/scene20020_block20020.lua | 4 + .../Scene/20020/scene20020_group220020001.lua | 89 + .../lua/Scene/20020/scene20020_point.json | 8 + .../lua/Scene/20021/scene20021.lua | 22 + .../Scene/20021/scene20021_20021_routes.json | 106 + .../lua/Scene/20021/scene20021_block20021.lua | 6 + .../Scene/20021/scene20021_group220021001.lua | 145 + .../Scene/20021/scene20021_group220021002.lua | 97 + .../Scene/20021/scene20021_group220021003.lua | 66 + .../lua/Scene/20021/scene20021_point.json | 33 + soggy_resources/lua/Scene/3/scene3.lua | 27 + .../lua/Scene/3/scene3_3001_routes.json | 4256 ++ .../lua/Scene/3/scene3_3002_routes.json | 4821 ++ .../lua/Scene/3/scene3_3003_routes.json | 6788 ++ .../lua/Scene/3/scene3_3004_routes.json | 4025 ++ .../lua/Scene/3/scene3_3005_routes.json | 167 + .../lua/Scene/3/scene3_3007_routes.json | 2021 + .../lua/Scene/3/scene3_Q301_points.lua | 25 + .../lua/Scene/3/scene3_block3001.lua | 206 + .../lua/Scene/3/scene3_block3002.lua | 156 + .../lua/Scene/3/scene3_block3003.lua | 329 + .../lua/Scene/3/scene3_block3004.lua | 162 + .../lua/Scene/3/scene3_block3005.lua | 8 + .../lua/Scene/3/scene3_block3007.lua | 211 + .../lua/Scene/3/scene3_dummy_points.lua | 917 + .../lua/Scene/3/scene3_environment.json | 2461 + .../lua/Scene/3/scene3_group133001006.lua | 66 + .../lua/Scene/3/scene3_group133001007.lua | 88 + .../lua/Scene/3/scene3_group133001011.lua | 66 + .../lua/Scene/3/scene3_group133001012.lua | 66 + .../lua/Scene/3/scene3_group133001013.lua | 66 + .../lua/Scene/3/scene3_group133001016.lua | 66 + .../lua/Scene/3/scene3_group133001021.lua | 126 + .../lua/Scene/3/scene3_group133001022.lua | 115 + .../lua/Scene/3/scene3_group133001024.lua | 68 + .../lua/Scene/3/scene3_group133001026.lua | 66 + .../lua/Scene/3/scene3_group133001028.lua | 66 + .../lua/Scene/3/scene3_group133001031.lua | 81 + .../lua/Scene/3/scene3_group133001032.lua | 67 + .../lua/Scene/3/scene3_group133001034.lua | 144 + .../lua/Scene/3/scene3_group133001047.lua | 66 + .../lua/Scene/3/scene3_group133001048.lua | 81 + .../lua/Scene/3/scene3_group133001049.lua | 290 + .../lua/Scene/3/scene3_group133001052.lua | 66 + .../lua/Scene/3/scene3_group133001054.lua | 72 + .../lua/Scene/3/scene3_group133001055.lua | 243 + .../lua/Scene/3/scene3_group133001057.lua | 67 + .../lua/Scene/3/scene3_group133001058.lua | 82 + .../lua/Scene/3/scene3_group133001060.lua | 86 + .../lua/Scene/3/scene3_group133001061.lua | 66 + .../lua/Scene/3/scene3_group133001062.lua | 69 + .../lua/Scene/3/scene3_group133001066.lua | 66 + .../lua/Scene/3/scene3_group133001067.lua | 70 + .../lua/Scene/3/scene3_group133001068.lua | 68 + .../lua/Scene/3/scene3_group133001069.lua | 69 + .../lua/Scene/3/scene3_group133001073.lua | 138 + .../lua/Scene/3/scene3_group133001074.lua | 117 + .../lua/Scene/3/scene3_group133001076.lua | 325 + .../lua/Scene/3/scene3_group133001077.lua | 75 + .../lua/Scene/3/scene3_group133001078.lua | 75 + .../lua/Scene/3/scene3_group133001079.lua | 75 + .../lua/Scene/3/scene3_group133001082.lua | 188 + .../lua/Scene/3/scene3_group133001083.lua | 399 + .../lua/Scene/3/scene3_group133001085.lua | 97 + .../lua/Scene/3/scene3_group133001086.lua | 67 + .../lua/Scene/3/scene3_group133001087.lua | 346 + .../lua/Scene/3/scene3_group133001088.lua | 174 + .../lua/Scene/3/scene3_group133001089.lua | 72 + .../lua/Scene/3/scene3_group133001090.lua | 201 + .../lua/Scene/3/scene3_group133001091.lua | 100 + .../lua/Scene/3/scene3_group133001092.lua | 216 + .../lua/Scene/3/scene3_group133001093.lua | 138 + .../lua/Scene/3/scene3_group133001094.lua | 179 + .../lua/Scene/3/scene3_group133001095.lua | 75 + .../lua/Scene/3/scene3_group133001097.lua | 70 + .../lua/Scene/3/scene3_group133001098.lua | 69 + .../lua/Scene/3/scene3_group133001099.lua | 69 + .../lua/Scene/3/scene3_group133001100.lua | 136 + .../lua/Scene/3/scene3_group133001101.lua | 121 + .../lua/Scene/3/scene3_group133001102.lua | 140 + .../lua/Scene/3/scene3_group133001103.lua | 114 + .../lua/Scene/3/scene3_group133001104.lua | 78 + .../lua/Scene/3/scene3_group133001105.lua | 114 + .../lua/Scene/3/scene3_group133001106.lua | 297 + .../lua/Scene/3/scene3_group133001108.lua | 158 + .../lua/Scene/3/scene3_group133001109.lua | 117 + .../lua/Scene/3/scene3_group133001112.lua | 120 + .../lua/Scene/3/scene3_group133001113.lua | 150 + .../lua/Scene/3/scene3_group133001114.lua | 75 + .../lua/Scene/3/scene3_group133001115.lua | 108 + .../lua/Scene/3/scene3_group133001117.lua | 534 + .../lua/Scene/3/scene3_group133001118.lua | 326 + .../lua/Scene/3/scene3_group133001119.lua | 96 + .../lua/Scene/3/scene3_group133001121.lua | 66 + .../lua/Scene/3/scene3_group133001122.lua | 90 + .../lua/Scene/3/scene3_group133001123.lua | 325 + .../lua/Scene/3/scene3_group133001124.lua | 252 + .../lua/Scene/3/scene3_group133001125.lua | 108 + .../lua/Scene/3/scene3_group133001126.lua | 70 + .../lua/Scene/3/scene3_group133001127.lua | 66 + .../lua/Scene/3/scene3_group133001128.lua | 91 + .../lua/Scene/3/scene3_group133001129.lua | 284 + .../lua/Scene/3/scene3_group133001130.lua | 97 + .../lua/Scene/3/scene3_group133001140.lua | 139 + .../lua/Scene/3/scene3_group133001142.lua | 71 + .../lua/Scene/3/scene3_group133001143.lua | 71 + .../lua/Scene/3/scene3_group133001144.lua | 74 + .../lua/Scene/3/scene3_group133001145.lua | 102 + .../lua/Scene/3/scene3_group133001146.lua | 397 + .../lua/Scene/3/scene3_group133001152.lua | 427 + .../lua/Scene/3/scene3_group133001153.lua | 82 + .../lua/Scene/3/scene3_group133001154.lua | 96 + .../lua/Scene/3/scene3_group133001155.lua | 117 + .../lua/Scene/3/scene3_group133001156.lua | 70 + .../lua/Scene/3/scene3_group133001157.lua | 105 + .../lua/Scene/3/scene3_group133001158.lua | 130 + .../lua/Scene/3/scene3_group133001159.lua | 132 + .../lua/Scene/3/scene3_group133001160.lua | 129 + .../lua/Scene/3/scene3_group133001161.lua | 70 + .../lua/Scene/3/scene3_group133001162.lua | 246 + .../lua/Scene/3/scene3_group133001165.lua | 67 + .../lua/Scene/3/scene3_group133001166.lua | 214 + .../lua/Scene/3/scene3_group133001172.lua | 144 + .../lua/Scene/3/scene3_group133001173.lua | 94 + .../lua/Scene/3/scene3_group133001174.lua | 76 + .../lua/Scene/3/scene3_group133001175.lua | 103 + .../lua/Scene/3/scene3_group133001176.lua | 74 + .../lua/Scene/3/scene3_group133001193.lua | 98 + .../lua/Scene/3/scene3_group133001194.lua | 89 + .../lua/Scene/3/scene3_group133001195.lua | 66 + .../lua/Scene/3/scene3_group133001196.lua | 107 + .../lua/Scene/3/scene3_group133001197.lua | 71 + .../lua/Scene/3/scene3_group133001198.lua | 71 + .../lua/Scene/3/scene3_group133001199.lua | 71 + .../lua/Scene/3/scene3_group133001200.lua | 71 + .../lua/Scene/3/scene3_group133001201.lua | 71 + .../lua/Scene/3/scene3_group133001202.lua | 71 + .../lua/Scene/3/scene3_group133001203.lua | 71 + .../lua/Scene/3/scene3_group133001204.lua | 71 + .../lua/Scene/3/scene3_group133001205.lua | 71 + .../lua/Scene/3/scene3_group133001206.lua | 71 + .../lua/Scene/3/scene3_group133001207.lua | 71 + .../lua/Scene/3/scene3_group133001208.lua | 71 + .../lua/Scene/3/scene3_group133001209.lua | 71 + .../lua/Scene/3/scene3_group133001210.lua | 71 + .../lua/Scene/3/scene3_group133001211.lua | 71 + .../lua/Scene/3/scene3_group133001212.lua | 71 + .../lua/Scene/3/scene3_group133001213.lua | 71 + .../lua/Scene/3/scene3_group133001214.lua | 71 + .../lua/Scene/3/scene3_group133001215.lua | 71 + .../lua/Scene/3/scene3_group133001216.lua | 71 + .../lua/Scene/3/scene3_group133001217.lua | 71 + .../lua/Scene/3/scene3_group133001218.lua | 66 + .../lua/Scene/3/scene3_group133001219.lua | 66 + .../lua/Scene/3/scene3_group133001220.lua | 66 + .../lua/Scene/3/scene3_group133001221.lua | 66 + .../lua/Scene/3/scene3_group133001222.lua | 66 + .../lua/Scene/3/scene3_group133001223.lua | 71 + .../lua/Scene/3/scene3_group133001224.lua | 104 + .../lua/Scene/3/scene3_group133001225.lua | 104 + .../lua/Scene/3/scene3_group133001226.lua | 104 + .../lua/Scene/3/scene3_group133001227.lua | 104 + .../lua/Scene/3/scene3_group133001228.lua | 68 + .../lua/Scene/3/scene3_group133001229.lua | 69 + .../lua/Scene/3/scene3_group133001230.lua | 70 + .../lua/Scene/3/scene3_group133001231.lua | 70 + .../lua/Scene/3/scene3_group133001232.lua | 127 + .../lua/Scene/3/scene3_group133001233.lua | 127 + .../lua/Scene/3/scene3_group133001234.lua | 71 + .../lua/Scene/3/scene3_group133001235.lua | 71 + .../lua/Scene/3/scene3_group133001236.lua | 71 + .../lua/Scene/3/scene3_group133001237.lua | 71 + .../lua/Scene/3/scene3_group133001238.lua | 71 + .../lua/Scene/3/scene3_group133001239.lua | 140 + .../lua/Scene/3/scene3_group133001240.lua | 81 + .../lua/Scene/3/scene3_group133001241.lua | 69 + .../lua/Scene/3/scene3_group133001242.lua | 68 + .../lua/Scene/3/scene3_group133001243.lua | 66 + .../lua/Scene/3/scene3_group133001244.lua | 66 + .../lua/Scene/3/scene3_group133001246.lua | 125 + .../lua/Scene/3/scene3_group133001247.lua | 156 + .../lua/Scene/3/scene3_group133001249.lua | 77 + .../lua/Scene/3/scene3_group133001250.lua | 68 + .../lua/Scene/3/scene3_group133001251.lua | 89 + .../lua/Scene/3/scene3_group133001252.lua | 89 + .../lua/Scene/3/scene3_group133001253.lua | 66 + .../lua/Scene/3/scene3_group133001254.lua | 106 + .../lua/Scene/3/scene3_group133001255.lua | 103 + .../lua/Scene/3/scene3_group133001256.lua | 176 + .../lua/Scene/3/scene3_group133001257.lua | 79 + .../lua/Scene/3/scene3_group133001258.lua | 350 + .../lua/Scene/3/scene3_group133001259.lua | 107 + .../lua/Scene/3/scene3_group133001260.lua | 107 + .../lua/Scene/3/scene3_group133001261.lua | 199 + .../lua/Scene/3/scene3_group133001262.lua | 98 + .../lua/Scene/3/scene3_group133001263.lua | 156 + .../lua/Scene/3/scene3_group133001264.lua | 68 + .../lua/Scene/3/scene3_group133001265.lua | 66 + .../lua/Scene/3/scene3_group133001266.lua | 74 + .../lua/Scene/3/scene3_group133001267.lua | 66 + .../lua/Scene/3/scene3_group133001268.lua | 66 + .../lua/Scene/3/scene3_group133001269.lua | 69 + .../lua/Scene/3/scene3_group133001270.lua | 71 + .../lua/Scene/3/scene3_group133001271.lua | 79 + .../lua/Scene/3/scene3_group133001272.lua | 90 + .../lua/Scene/3/scene3_group133001273.lua | 78 + .../lua/Scene/3/scene3_group133001275.lua | 345 + .../lua/Scene/3/scene3_group133001276.lua | 68 + .../lua/Scene/3/scene3_group133001277.lua | 89 + .../lua/Scene/3/scene3_group133001278.lua | 89 + .../lua/Scene/3/scene3_group133001279.lua | 91 + .../lua/Scene/3/scene3_group133001280.lua | 71 + .../lua/Scene/3/scene3_group133001281.lua | 71 + .../lua/Scene/3/scene3_group133001282.lua | 68 + .../lua/Scene/3/scene3_group133001283.lua | 66 + .../lua/Scene/3/scene3_group133001284.lua | 146 + .../lua/Scene/3/scene3_group133001285.lua | 67 + .../lua/Scene/3/scene3_group133001801.lua | 265 + .../lua/Scene/3/scene3_group133001802.lua | 100 + .../lua/Scene/3/scene3_group133001803.lua | 97 + .../lua/Scene/3/scene3_group133001804.lua | 72 + .../lua/Scene/3/scene3_group133001805.lua | 118 + .../lua/Scene/3/scene3_group133001807.lua | 86 + .../lua/Scene/3/scene3_group133001808.lua | 66 + .../lua/Scene/3/scene3_group133001809.lua | 134 + .../lua/Scene/3/scene3_group133001810.lua | 66 + .../lua/Scene/3/scene3_group133001901.lua | 102 + .../lua/Scene/3/scene3_group133001902.lua | 188 + .../lua/Scene/3/scene3_group133001903.lua | 78 + .../lua/Scene/3/scene3_group133002001.lua | 66 + .../lua/Scene/3/scene3_group133002004.lua | 115 + .../lua/Scene/3/scene3_group133002022.lua | 66 + .../lua/Scene/3/scene3_group133002030.lua | 66 + .../lua/Scene/3/scene3_group133002031.lua | 66 + .../lua/Scene/3/scene3_group133002032.lua | 66 + .../lua/Scene/3/scene3_group133002034.lua | 66 + .../lua/Scene/3/scene3_group133002035.lua | 167 + .../lua/Scene/3/scene3_group133002043.lua | 221 + .../lua/Scene/3/scene3_group133002045.lua | 72 + .../lua/Scene/3/scene3_group133002047.lua | 107 + .../lua/Scene/3/scene3_group133002049.lua | 94 + .../lua/Scene/3/scene3_group133002050.lua | 168 + .../lua/Scene/3/scene3_group133002056.lua | 89 + .../lua/Scene/3/scene3_group133002057.lua | 80 + .../lua/Scene/3/scene3_group133002065.lua | 85 + .../lua/Scene/3/scene3_group133002069.lua | 88 + .../lua/Scene/3/scene3_group133002074.lua | 80 + .../lua/Scene/3/scene3_group133002075.lua | 82 + .../lua/Scene/3/scene3_group133002076.lua | 132 + .../lua/Scene/3/scene3_group133002077.lua | 124 + .../lua/Scene/3/scene3_group133002078.lua | 83 + .../lua/Scene/3/scene3_group133002079.lua | 327 + .../lua/Scene/3/scene3_group133002080.lua | 72 + .../lua/Scene/3/scene3_group133002084.lua | 128 + .../lua/Scene/3/scene3_group133002085.lua | 160 + .../lua/Scene/3/scene3_group133002086.lua | 119 + .../lua/Scene/3/scene3_group133002087.lua | 222 + .../lua/Scene/3/scene3_group133002088.lua | 66 + .../lua/Scene/3/scene3_group133002089.lua | 85 + .../lua/Scene/3/scene3_group133002090.lua | 70 + .../lua/Scene/3/scene3_group133002091.lua | 72 + .../lua/Scene/3/scene3_group133002092.lua | 84 + .../lua/Scene/3/scene3_group133002093.lua | 77 + .../lua/Scene/3/scene3_group133002094.lua | 84 + .../lua/Scene/3/scene3_group133002096.lua | 77 + .../lua/Scene/3/scene3_group133002098.lua | 104 + .../lua/Scene/3/scene3_group133002100.lua | 69 + .../lua/Scene/3/scene3_group133002101.lua | 66 + .../lua/Scene/3/scene3_group133002102.lua | 91 + .../lua/Scene/3/scene3_group133002103.lua | 66 + .../lua/Scene/3/scene3_group133002104.lua | 69 + .../lua/Scene/3/scene3_group133002105.lua | 102 + .../lua/Scene/3/scene3_group133002109.lua | 90 + .../lua/Scene/3/scene3_group133002110.lua | 120 + .../lua/Scene/3/scene3_group133002111.lua | 81 + .../lua/Scene/3/scene3_group133002112.lua | 106 + .../lua/Scene/3/scene3_group133002114.lua | 137 + .../lua/Scene/3/scene3_group133002115.lua | 109 + .../lua/Scene/3/scene3_group133002116.lua | 356 + .../lua/Scene/3/scene3_group133002117.lua | 69 + .../lua/Scene/3/scene3_group133002118.lua | 79 + .../lua/Scene/3/scene3_group133002119.lua | 92 + .../lua/Scene/3/scene3_group133002120.lua | 95 + .../lua/Scene/3/scene3_group133002121.lua | 67 + .../lua/Scene/3/scene3_group133002122.lua | 67 + .../lua/Scene/3/scene3_group133002123.lua | 82 + .../lua/Scene/3/scene3_group133002124.lua | 143 + .../lua/Scene/3/scene3_group133002125.lua | 100 + .../lua/Scene/3/scene3_group133002126.lua | 66 + .../lua/Scene/3/scene3_group133002127.lua | 120 + .../lua/Scene/3/scene3_group133002129.lua | 75 + .../lua/Scene/3/scene3_group133002130.lua | 75 + .../lua/Scene/3/scene3_group133002132.lua | 143 + .../lua/Scene/3/scene3_group133002133.lua | 69 + .../lua/Scene/3/scene3_group133002134.lua | 87 + .../lua/Scene/3/scene3_group133002136.lua | 102 + .../lua/Scene/3/scene3_group133002137.lua | 89 + .../lua/Scene/3/scene3_group133002138.lua | 110 + .../lua/Scene/3/scene3_group133002140.lua | 66 + .../lua/Scene/3/scene3_group133002143.lua | 90 + .../lua/Scene/3/scene3_group133002147.lua | 119 + .../lua/Scene/3/scene3_group133002148.lua | 78 + .../lua/Scene/3/scene3_group133002149.lua | 119 + .../lua/Scene/3/scene3_group133002150.lua | 196 + .../lua/Scene/3/scene3_group133002151.lua | 90 + .../lua/Scene/3/scene3_group133002152.lua | 78 + .../lua/Scene/3/scene3_group133002153.lua | 66 + .../lua/Scene/3/scene3_group133002155.lua | 70 + .../lua/Scene/3/scene3_group133002157.lua | 99 + .../lua/Scene/3/scene3_group133002158.lua | 107 + .../lua/Scene/3/scene3_group133002159.lua | 91 + .../lua/Scene/3/scene3_group133002160.lua | 88 + .../lua/Scene/3/scene3_group133002161.lua | 174 + .../lua/Scene/3/scene3_group133002162.lua | 90 + .../lua/Scene/3/scene3_group133002163.lua | 67 + .../lua/Scene/3/scene3_group133002164.lua | 170 + .../lua/Scene/3/scene3_group133002165.lua | 67 + .../lua/Scene/3/scene3_group133002166.lua | 127 + .../lua/Scene/3/scene3_group133002167.lua | 67 + .../lua/Scene/3/scene3_group133002169.lua | 159 + .../lua/Scene/3/scene3_group133002170.lua | 147 + .../lua/Scene/3/scene3_group133002171.lua | 230 + .../lua/Scene/3/scene3_group133002172.lua | 90 + .../lua/Scene/3/scene3_group133002173.lua | 349 + .../lua/Scene/3/scene3_group133002182.lua | 90 + .../lua/Scene/3/scene3_group133002184.lua | 91 + .../lua/Scene/3/scene3_group133002202.lua | 96 + .../lua/Scene/3/scene3_group133002203.lua | 416 + .../lua/Scene/3/scene3_group133002204.lua | 71 + .../lua/Scene/3/scene3_group133002205.lua | 71 + .../lua/Scene/3/scene3_group133002206.lua | 96 + .../lua/Scene/3/scene3_group133002207.lua | 240 + .../lua/Scene/3/scene3_group133002209.lua | 67 + .../lua/Scene/3/scene3_group133002210.lua | 435 + .../lua/Scene/3/scene3_group133002211.lua | 85 + .../lua/Scene/3/scene3_group133002212.lua | 74 + .../lua/Scene/3/scene3_group133002213.lua | 131 + .../lua/Scene/3/scene3_group133002214.lua | 70 + .../lua/Scene/3/scene3_group133002216.lua | 70 + .../lua/Scene/3/scene3_group133002217.lua | 67 + .../lua/Scene/3/scene3_group133002218.lua | 70 + .../lua/Scene/3/scene3_group133002219.lua | 93 + .../lua/Scene/3/scene3_group133002220.lua | 88 + .../lua/Scene/3/scene3_group133002221.lua | 90 + .../lua/Scene/3/scene3_group133002222.lua | 179 + .../lua/Scene/3/scene3_group133002223.lua | 70 + .../lua/Scene/3/scene3_group133002224.lua | 70 + .../lua/Scene/3/scene3_group133002225.lua | 159 + .../lua/Scene/3/scene3_group133002226.lua | 73 + .../lua/Scene/3/scene3_group133002227.lua | 110 + .../lua/Scene/3/scene3_group133002228.lua | 114 + .../lua/Scene/3/scene3_group133002229.lua | 80 + .../lua/Scene/3/scene3_group133002230.lua | 102 + .../lua/Scene/3/scene3_group133002231.lua | 71 + .../lua/Scene/3/scene3_group133002232.lua | 126 + .../lua/Scene/3/scene3_group133002233.lua | 118 + .../lua/Scene/3/scene3_group133002234.lua | 68 + .../lua/Scene/3/scene3_group133002235.lua | 69 + .../lua/Scene/3/scene3_group133002236.lua | 70 + .../lua/Scene/3/scene3_group133002237.lua | 70 + .../lua/Scene/3/scene3_group133002238.lua | 70 + .../lua/Scene/3/scene3_group133002239.lua | 173 + .../lua/Scene/3/scene3_group133002240.lua | 98 + .../lua/Scene/3/scene3_group133002241.lua | 67 + .../lua/Scene/3/scene3_group133002242.lua | 126 + .../lua/Scene/3/scene3_group133002243.lua | 96 + .../lua/Scene/3/scene3_group133002244.lua | 99 + .../lua/Scene/3/scene3_group133002245.lua | 67 + .../lua/Scene/3/scene3_group133002246.lua | 67 + .../lua/Scene/3/scene3_group133002247.lua | 71 + .../lua/Scene/3/scene3_group133002248.lua | 114 + .../lua/Scene/3/scene3_group133002249.lua | 66 + .../lua/Scene/3/scene3_group133002250.lua | 93 + .../lua/Scene/3/scene3_group133002251.lua | 91 + .../lua/Scene/3/scene3_group133002252.lua | 97 + .../lua/Scene/3/scene3_group133002253.lua | 99 + .../lua/Scene/3/scene3_group133002801.lua | 90 + .../lua/Scene/3/scene3_group133002802.lua | 108 + .../lua/Scene/3/scene3_group133002803.lua | 79 + .../lua/Scene/3/scene3_group133002804.lua | 269 + .../lua/Scene/3/scene3_group133002805.lua | 133 + .../lua/Scene/3/scene3_group133002901.lua | 176 + .../lua/Scene/3/scene3_group133003001.lua | 191 + .../lua/Scene/3/scene3_group133003002.lua | 151 + .../lua/Scene/3/scene3_group133003003.lua | 66 + .../lua/Scene/3/scene3_group133003004.lua | 172 + .../lua/Scene/3/scene3_group133003005.lua | 70 + .../lua/Scene/3/scene3_group133003010.lua | 103 + .../lua/Scene/3/scene3_group133003013.lua | 66 + .../lua/Scene/3/scene3_group133003021.lua | 104 + .../lua/Scene/3/scene3_group133003022.lua | 66 + .../lua/Scene/3/scene3_group133003023.lua | 149 + .../lua/Scene/3/scene3_group133003027.lua | 139 + .../lua/Scene/3/scene3_group133003029.lua | 66 + .../lua/Scene/3/scene3_group133003031.lua | 69 + .../lua/Scene/3/scene3_group133003032.lua | 97 + .../lua/Scene/3/scene3_group133003034.lua | 121 + .../lua/Scene/3/scene3_group133003035.lua | 78 + .../lua/Scene/3/scene3_group133003036.lua | 66 + .../lua/Scene/3/scene3_group133003043.lua | 78 + .../lua/Scene/3/scene3_group133003045.lua | 90 + .../lua/Scene/3/scene3_group133003049.lua | 66 + .../lua/Scene/3/scene3_group133003052.lua | 66 + .../lua/Scene/3/scene3_group133003054.lua | 75 + .../lua/Scene/3/scene3_group133003055.lua | 67 + .../lua/Scene/3/scene3_group133003057.lua | 66 + .../lua/Scene/3/scene3_group133003065.lua | 70 + .../lua/Scene/3/scene3_group133003066.lua | 66 + .../lua/Scene/3/scene3_group133003067.lua | 66 + .../lua/Scene/3/scene3_group133003069.lua | 66 + .../lua/Scene/3/scene3_group133003070.lua | 66 + .../lua/Scene/3/scene3_group133003071.lua | 66 + .../lua/Scene/3/scene3_group133003074.lua | 66 + .../lua/Scene/3/scene3_group133003075.lua | 66 + .../lua/Scene/3/scene3_group133003077.lua | 266 + .../lua/Scene/3/scene3_group133003078.lua | 266 + .../lua/Scene/3/scene3_group133003079.lua | 275 + .../lua/Scene/3/scene3_group133003086.lua | 152 + .../lua/Scene/3/scene3_group133003087.lua | 90 + .../lua/Scene/3/scene3_group133003090.lua | 94 + .../lua/Scene/3/scene3_group133003091.lua | 66 + .../lua/Scene/3/scene3_group133003092.lua | 152 + .../lua/Scene/3/scene3_group133003094.lua | 86 + .../lua/Scene/3/scene3_group133003095.lua | 104 + .../lua/Scene/3/scene3_group133003096.lua | 84 + .../lua/Scene/3/scene3_group133003097.lua | 69 + .../lua/Scene/3/scene3_group133003098.lua | 445 + .../lua/Scene/3/scene3_group133003101.lua | 66 + .../lua/Scene/3/scene3_group133003102.lua | 71 + .../lua/Scene/3/scene3_group133003103.lua | 66 + .../lua/Scene/3/scene3_group133003104.lua | 67 + .../lua/Scene/3/scene3_group133003105.lua | 133 + .../lua/Scene/3/scene3_group133003107.lua | 146 + .../lua/Scene/3/scene3_group133003108.lua | 67 + .../lua/Scene/3/scene3_group133003109.lua | 68 + .../lua/Scene/3/scene3_group133003110.lua | 67 + .../lua/Scene/3/scene3_group133003111.lua | 97 + .../lua/Scene/3/scene3_group133003112.lua | 188 + .../lua/Scene/3/scene3_group133003113.lua | 234 + .../lua/Scene/3/scene3_group133003115.lua | 66 + .../lua/Scene/3/scene3_group133003116.lua | 104 + .../lua/Scene/3/scene3_group133003117.lua | 282 + .../lua/Scene/3/scene3_group133003118.lua | 69 + .../lua/Scene/3/scene3_group133003119.lua | 70 + .../lua/Scene/3/scene3_group133003120.lua | 96 + .../lua/Scene/3/scene3_group133003121.lua | 67 + .../lua/Scene/3/scene3_group133003122.lua | 67 + .../lua/Scene/3/scene3_group133003123.lua | 101 + .../lua/Scene/3/scene3_group133003124.lua | 115 + .../lua/Scene/3/scene3_group133003125.lua | 191 + .../lua/Scene/3/scene3_group133003126.lua | 86 + .../lua/Scene/3/scene3_group133003127.lua | 123 + .../lua/Scene/3/scene3_group133003128.lua | 67 + .../lua/Scene/3/scene3_group133003129.lua | 77 + .../lua/Scene/3/scene3_group133003130.lua | 231 + .../lua/Scene/3/scene3_group133003131.lua | 133 + .../lua/Scene/3/scene3_group133003132.lua | 106 + .../lua/Scene/3/scene3_group133003133.lua | 69 + .../lua/Scene/3/scene3_group133003135.lua | 81 + .../lua/Scene/3/scene3_group133003136.lua | 118 + .../lua/Scene/3/scene3_group133003137.lua | 191 + .../lua/Scene/3/scene3_group133003139.lua | 91 + .../lua/Scene/3/scene3_group133003140.lua | 81 + .../lua/Scene/3/scene3_group133003141.lua | 66 + .../lua/Scene/3/scene3_group133003142.lua | 91 + .../lua/Scene/3/scene3_group133003143.lua | 67 + .../lua/Scene/3/scene3_group133003144.lua | 85 + .../lua/Scene/3/scene3_group133003145.lua | 147 + .../lua/Scene/3/scene3_group133003146.lua | 101 + .../lua/Scene/3/scene3_group133003147.lua | 68 + .../lua/Scene/3/scene3_group133003148.lua | 143 + .../lua/Scene/3/scene3_group133003149.lua | 81 + .../lua/Scene/3/scene3_group133003150.lua | 87 + .../lua/Scene/3/scene3_group133003151.lua | 242 + .../lua/Scene/3/scene3_group133003152.lua | 66 + .../lua/Scene/3/scene3_group133003154.lua | 84 + .../lua/Scene/3/scene3_group133003156.lua | 123 + .../lua/Scene/3/scene3_group133003158.lua | 71 + .../lua/Scene/3/scene3_group133003159.lua | 70 + .../lua/Scene/3/scene3_group133003163.lua | 68 + .../lua/Scene/3/scene3_group133003164.lua | 66 + .../lua/Scene/3/scene3_group133003165.lua | 112 + .../lua/Scene/3/scene3_group133003166.lua | 75 + .../lua/Scene/3/scene3_group133003167.lua | 70 + .../lua/Scene/3/scene3_group133003168.lua | 66 + .../lua/Scene/3/scene3_group133003170.lua | 94 + .../lua/Scene/3/scene3_group133003171.lua | 108 + .../lua/Scene/3/scene3_group133003173.lua | 66 + .../lua/Scene/3/scene3_group133003174.lua | 155 + .../lua/Scene/3/scene3_group133003175.lua | 81 + .../lua/Scene/3/scene3_group133003176.lua | 68 + .../lua/Scene/3/scene3_group133003177.lua | 67 + .../lua/Scene/3/scene3_group133003178.lua | 93 + .../lua/Scene/3/scene3_group133003179.lua | 66 + .../lua/Scene/3/scene3_group133003180.lua | 103 + .../lua/Scene/3/scene3_group133003181.lua | 67 + .../lua/Scene/3/scene3_group133003182.lua | 67 + .../lua/Scene/3/scene3_group133003183.lua | 80 + .../lua/Scene/3/scene3_group133003184.lua | 149 + .../lua/Scene/3/scene3_group133003185.lua | 70 + .../lua/Scene/3/scene3_group133003187.lua | 70 + .../lua/Scene/3/scene3_group133003188.lua | 77 + .../lua/Scene/3/scene3_group133003189.lua | 93 + .../lua/Scene/3/scene3_group133003190.lua | 66 + .../lua/Scene/3/scene3_group133003193.lua | 67 + .../lua/Scene/3/scene3_group133003194.lua | 69 + .../lua/Scene/3/scene3_group133003195.lua | 66 + .../lua/Scene/3/scene3_group133003196.lua | 285 + .../lua/Scene/3/scene3_group133003197.lua | 99 + .../lua/Scene/3/scene3_group133003198.lua | 98 + .../lua/Scene/3/scene3_group133003199.lua | 70 + .../lua/Scene/3/scene3_group133003203.lua | 103 + .../lua/Scene/3/scene3_group133003204.lua | 78 + .../lua/Scene/3/scene3_group133003205.lua | 67 + .../lua/Scene/3/scene3_group133003206.lua | 67 + .../lua/Scene/3/scene3_group133003207.lua | 114 + .../lua/Scene/3/scene3_group133003208.lua | 91 + .../lua/Scene/3/scene3_group133003209.lua | 93 + .../lua/Scene/3/scene3_group133003210.lua | 115 + .../lua/Scene/3/scene3_group133003211.lua | 132 + .../lua/Scene/3/scene3_group133003212.lua | 125 + .../lua/Scene/3/scene3_group133003213.lua | 69 + .../lua/Scene/3/scene3_group133003214.lua | 69 + .../lua/Scene/3/scene3_group133003215.lua | 145 + .../lua/Scene/3/scene3_group133003216.lua | 81 + .../lua/Scene/3/scene3_group133003217.lua | 72 + .../lua/Scene/3/scene3_group133003218.lua | 147 + .../lua/Scene/3/scene3_group133003219.lua | 160 + .../lua/Scene/3/scene3_group133003220.lua | 166 + .../lua/Scene/3/scene3_group133003221.lua | 146 + .../lua/Scene/3/scene3_group133003222.lua | 71 + .../lua/Scene/3/scene3_group133003223.lua | 77 + .../lua/Scene/3/scene3_group133003224.lua | 172 + .../lua/Scene/3/scene3_group133003225.lua | 457 + .../lua/Scene/3/scene3_group133003268.lua | 85 + .../lua/Scene/3/scene3_group133003269.lua | 109 + .../lua/Scene/3/scene3_group133003270.lua | 146 + .../lua/Scene/3/scene3_group133003271.lua | 125 + .../lua/Scene/3/scene3_group133003272.lua | 75 + .../lua/Scene/3/scene3_group133003274.lua | 187 + .../lua/Scene/3/scene3_group133003275.lua | 86 + .../lua/Scene/3/scene3_group133003276.lua | 70 + .../lua/Scene/3/scene3_group133003277.lua | 107 + .../lua/Scene/3/scene3_group133003278.lua | 81 + .../lua/Scene/3/scene3_group133003279.lua | 151 + .../lua/Scene/3/scene3_group133003280.lua | 220 + .../lua/Scene/3/scene3_group133003283.lua | 146 + .../lua/Scene/3/scene3_group133003285.lua | 73 + .../lua/Scene/3/scene3_group133003286.lua | 125 + .../lua/Scene/3/scene3_group133003287.lua | 66 + .../lua/Scene/3/scene3_group133003288.lua | 108 + .../lua/Scene/3/scene3_group133003289.lua | 82 + .../lua/Scene/3/scene3_group133003290.lua | 89 + .../lua/Scene/3/scene3_group133003291.lua | 106 + .../lua/Scene/3/scene3_group133003292.lua | 218 + .../lua/Scene/3/scene3_group133003293.lua | 197 + .../lua/Scene/3/scene3_group133003294.lua | 69 + .../lua/Scene/3/scene3_group133003295.lua | 69 + .../lua/Scene/3/scene3_group133003296.lua | 126 + .../lua/Scene/3/scene3_group133003297.lua | 84 + .../lua/Scene/3/scene3_group133003298.lua | 68 + .../lua/Scene/3/scene3_group133003300.lua | 217 + .../lua/Scene/3/scene3_group133003301.lua | 106 + .../lua/Scene/3/scene3_group133003305.lua | 129 + .../lua/Scene/3/scene3_group133003306.lua | 81 + .../lua/Scene/3/scene3_group133003307.lua | 83 + .../lua/Scene/3/scene3_group133003308.lua | 74 + .../lua/Scene/3/scene3_group133003309.lua | 93 + .../lua/Scene/3/scene3_group133003310.lua | 66 + .../lua/Scene/3/scene3_group133003311.lua | 74 + .../lua/Scene/3/scene3_group133003312.lua | 111 + .../lua/Scene/3/scene3_group133003313.lua | 167 + .../lua/Scene/3/scene3_group133003314.lua | 83 + .../lua/Scene/3/scene3_group133003315.lua | 145 + .../lua/Scene/3/scene3_group133003316.lua | 145 + .../lua/Scene/3/scene3_group133003317.lua | 105 + .../lua/Scene/3/scene3_group133003318.lua | 87 + .../lua/Scene/3/scene3_group133003319.lua | 148 + .../lua/Scene/3/scene3_group133003320.lua | 66 + .../lua/Scene/3/scene3_group133003321.lua | 75 + .../lua/Scene/3/scene3_group133003322.lua | 99 + .../lua/Scene/3/scene3_group133003323.lua | 145 + .../lua/Scene/3/scene3_group133003324.lua | 110 + .../lua/Scene/3/scene3_group133003325.lua | 68 + .../lua/Scene/3/scene3_group133003326.lua | 105 + .../lua/Scene/3/scene3_group133003327.lua | 84 + .../lua/Scene/3/scene3_group133003328.lua | 82 + .../lua/Scene/3/scene3_group133003329.lua | 68 + .../lua/Scene/3/scene3_group133003330.lua | 88 + .../lua/Scene/3/scene3_group133003331.lua | 68 + .../lua/Scene/3/scene3_group133003332.lua | 70 + .../lua/Scene/3/scene3_group133003333.lua | 81 + .../lua/Scene/3/scene3_group133003334.lua | 151 + .../lua/Scene/3/scene3_group133003335.lua | 82 + .../lua/Scene/3/scene3_group133003336.lua | 180 + .../lua/Scene/3/scene3_group133003337.lua | 70 + .../lua/Scene/3/scene3_group133003338.lua | 68 + .../lua/Scene/3/scene3_group133003339.lua | 129 + .../lua/Scene/3/scene3_group133003340.lua | 107 + .../lua/Scene/3/scene3_group133003341.lua | 97 + .../lua/Scene/3/scene3_group133003342.lua | 83 + .../lua/Scene/3/scene3_group133003344.lua | 97 + .../lua/Scene/3/scene3_group133003345.lua | 108 + .../lua/Scene/3/scene3_group133003346.lua | 69 + .../lua/Scene/3/scene3_group133003347.lua | 169 + .../lua/Scene/3/scene3_group133003348.lua | 97 + .../lua/Scene/3/scene3_group133003349.lua | 96 + .../lua/Scene/3/scene3_group133003350.lua | 96 + .../lua/Scene/3/scene3_group133003351.lua | 90 + .../lua/Scene/3/scene3_group133003352.lua | 124 + .../lua/Scene/3/scene3_group133003356.lua | 68 + .../lua/Scene/3/scene3_group133003357.lua | 70 + .../lua/Scene/3/scene3_group133003358.lua | 69 + .../lua/Scene/3/scene3_group133003359.lua | 68 + .../lua/Scene/3/scene3_group133003360.lua | 68 + .../lua/Scene/3/scene3_group133003361.lua | 70 + .../lua/Scene/3/scene3_group133003362.lua | 70 + .../lua/Scene/3/scene3_group133003363.lua | 70 + .../lua/Scene/3/scene3_group133003364.lua | 70 + .../lua/Scene/3/scene3_group133003366.lua | 70 + .../lua/Scene/3/scene3_group133003367.lua | 69 + .../lua/Scene/3/scene3_group133003368.lua | 70 + .../lua/Scene/3/scene3_group133003369.lua | 112 + .../lua/Scene/3/scene3_group133003370.lua | 97 + .../lua/Scene/3/scene3_group133003371.lua | 76 + .../lua/Scene/3/scene3_group133003372.lua | 91 + .../lua/Scene/3/scene3_group133003373.lua | 66 + .../lua/Scene/3/scene3_group133003374.lua | 108 + .../lua/Scene/3/scene3_group133003375.lua | 68 + .../lua/Scene/3/scene3_group133003376.lua | 67 + .../lua/Scene/3/scene3_group133003377.lua | 258 + .../lua/Scene/3/scene3_group133003378.lua | 103 + .../lua/Scene/3/scene3_group133003380.lua | 71 + .../lua/Scene/3/scene3_group133003381.lua | 69 + .../lua/Scene/3/scene3_group133003382.lua | 249 + .../lua/Scene/3/scene3_group133003383.lua | 76 + .../lua/Scene/3/scene3_group133003384.lua | 70 + .../lua/Scene/3/scene3_group133003385.lua | 99 + .../lua/Scene/3/scene3_group133003386.lua | 70 + .../lua/Scene/3/scene3_group133003387.lua | 164 + .../lua/Scene/3/scene3_group133003388.lua | 72 + .../lua/Scene/3/scene3_group133003389.lua | 69 + .../lua/Scene/3/scene3_group133003390.lua | 66 + .../lua/Scene/3/scene3_group133003391.lua | 67 + .../lua/Scene/3/scene3_group133003392.lua | 68 + .../lua/Scene/3/scene3_group133003393.lua | 69 + .../lua/Scene/3/scene3_group133003394.lua | 74 + .../lua/Scene/3/scene3_group133003395.lua | 115 + .../lua/Scene/3/scene3_group133003396.lua | 125 + .../lua/Scene/3/scene3_group133003397.lua | 69 + .../lua/Scene/3/scene3_group133003398.lua | 70 + .../lua/Scene/3/scene3_group133003399.lua | 70 + .../lua/Scene/3/scene3_group133003401.lua | 70 + .../lua/Scene/3/scene3_group133003402.lua | 149 + .../lua/Scene/3/scene3_group133003403.lua | 107 + .../lua/Scene/3/scene3_group133003404.lua | 66 + .../lua/Scene/3/scene3_group133003405.lua | 90 + .../lua/Scene/3/scene3_group133003406.lua | 69 + .../lua/Scene/3/scene3_group133003407.lua | 98 + .../lua/Scene/3/scene3_group133003408.lua | 82 + .../lua/Scene/3/scene3_group133003409.lua | 107 + .../lua/Scene/3/scene3_group133003411.lua | 149 + .../lua/Scene/3/scene3_group133003412.lua | 68 + .../lua/Scene/3/scene3_group133003414.lua | 89 + .../lua/Scene/3/scene3_group133003415.lua | 70 + .../lua/Scene/3/scene3_group133003416.lua | 68 + .../lua/Scene/3/scene3_group133003417.lua | 68 + .../lua/Scene/3/scene3_group133003418.lua | 73 + .../lua/Scene/3/scene3_group133003419.lua | 68 + .../lua/Scene/3/scene3_group133003421.lua | 89 + .../lua/Scene/3/scene3_group133003422.lua | 66 + .../lua/Scene/3/scene3_group133003423.lua | 66 + .../lua/Scene/3/scene3_group133003424.lua | 76 + .../lua/Scene/3/scene3_group133003425.lua | 72 + .../lua/Scene/3/scene3_group133003426.lua | 67 + .../lua/Scene/3/scene3_group133003427.lua | 71 + .../lua/Scene/3/scene3_group133003428.lua | 66 + .../lua/Scene/3/scene3_group133003429.lua | 113 + .../lua/Scene/3/scene3_group133003430.lua | 91 + .../lua/Scene/3/scene3_group133003431.lua | 66 + .../lua/Scene/3/scene3_group133003433.lua | 66 + .../lua/Scene/3/scene3_group133003434.lua | 90 + .../lua/Scene/3/scene3_group133003435.lua | 98 + .../lua/Scene/3/scene3_group133003436.lua | 91 + .../lua/Scene/3/scene3_group133003437.lua | 111 + .../lua/Scene/3/scene3_group133003438.lua | 68 + .../lua/Scene/3/scene3_group133003439.lua | 129 + .../lua/Scene/3/scene3_group133003440.lua | 69 + .../lua/Scene/3/scene3_group133003441.lua | 78 + .../lua/Scene/3/scene3_group133003443.lua | 123 + .../lua/Scene/3/scene3_group133003444.lua | 90 + .../lua/Scene/3/scene3_group133003445.lua | 87 + .../lua/Scene/3/scene3_group133003446.lua | 68 + .../lua/Scene/3/scene3_group133003447.lua | 76 + .../lua/Scene/3/scene3_group133003448.lua | 151 + .../lua/Scene/3/scene3_group133003449.lua | 163 + .../lua/Scene/3/scene3_group133003450.lua | 67 + .../lua/Scene/3/scene3_group133003451.lua | 109 + .../lua/Scene/3/scene3_group133003801.lua | 71 + .../lua/Scene/3/scene3_group133003802.lua | 106 + .../lua/Scene/3/scene3_group133003803.lua | 294 + .../lua/Scene/3/scene3_group133003804.lua | 93 + .../lua/Scene/3/scene3_group133003805.lua | 101 + .../lua/Scene/3/scene3_group133003806.lua | 211 + .../lua/Scene/3/scene3_group133003807.lua | 90 + .../lua/Scene/3/scene3_group133003901.lua | 303 + .../lua/Scene/3/scene3_group133003902.lua | 66 + .../lua/Scene/3/scene3_group133003903.lua | 68 + .../lua/Scene/3/scene3_group133004001.lua | 83 + .../lua/Scene/3/scene3_group133004002.lua | 66 + .../lua/Scene/3/scene3_group133004003.lua | 89 + .../lua/Scene/3/scene3_group133004004.lua | 69 + .../lua/Scene/3/scene3_group133004005.lua | 71 + .../lua/Scene/3/scene3_group133004006.lua | 95 + .../lua/Scene/3/scene3_group133004007.lua | 73 + .../lua/Scene/3/scene3_group133004008.lua | 67 + .../lua/Scene/3/scene3_group133004010.lua | 130 + .../lua/Scene/3/scene3_group133004011.lua | 106 + .../lua/Scene/3/scene3_group133004012.lua | 139 + .../lua/Scene/3/scene3_group133004013.lua | 68 + .../lua/Scene/3/scene3_group133004014.lua | 69 + .../lua/Scene/3/scene3_group133004015.lua | 69 + .../lua/Scene/3/scene3_group133004016.lua | 259 + .../lua/Scene/3/scene3_group133004018.lua | 106 + .../lua/Scene/3/scene3_group133004019.lua | 70 + .../lua/Scene/3/scene3_group133004020.lua | 81 + .../lua/Scene/3/scene3_group133004021.lua | 73 + .../lua/Scene/3/scene3_group133004026.lua | 80 + .../lua/Scene/3/scene3_group133004028.lua | 69 + .../lua/Scene/3/scene3_group133004029.lua | 136 + .../lua/Scene/3/scene3_group133004032.lua | 215 + .../lua/Scene/3/scene3_group133004033.lua | 167 + .../lua/Scene/3/scene3_group133004034.lua | 66 + .../lua/Scene/3/scene3_group133004037.lua | 74 + .../lua/Scene/3/scene3_group133004039.lua | 69 + .../lua/Scene/3/scene3_group133004040.lua | 137 + .../lua/Scene/3/scene3_group133004041.lua | 154 + .../lua/Scene/3/scene3_group133004043.lua | 114 + .../lua/Scene/3/scene3_group133004044.lua | 70 + .../lua/Scene/3/scene3_group133004051.lua | 68 + .../lua/Scene/3/scene3_group133004055.lua | 72 + .../lua/Scene/3/scene3_group133004061.lua | 125 + .../lua/Scene/3/scene3_group133004062.lua | 67 + .../lua/Scene/3/scene3_group133004063.lua | 68 + .../lua/Scene/3/scene3_group133004064.lua | 66 + .../lua/Scene/3/scene3_group133004065.lua | 91 + .../lua/Scene/3/scene3_group133004066.lua | 66 + .../lua/Scene/3/scene3_group133004068.lua | 66 + .../lua/Scene/3/scene3_group133004069.lua | 81 + .../lua/Scene/3/scene3_group133004070.lua | 121 + .../lua/Scene/3/scene3_group133004072.lua | 83 + .../lua/Scene/3/scene3_group133004073.lua | 190 + .../lua/Scene/3/scene3_group133004076.lua | 71 + .../lua/Scene/3/scene3_group133004077.lua | 66 + .../lua/Scene/3/scene3_group133004078.lua | 74 + .../lua/Scene/3/scene3_group133004082.lua | 104 + .../lua/Scene/3/scene3_group133004083.lua | 104 + .../lua/Scene/3/scene3_group133004084.lua | 132 + .../lua/Scene/3/scene3_group133004085.lua | 236 + .../lua/Scene/3/scene3_group133004086.lua | 67 + .../lua/Scene/3/scene3_group133004087.lua | 70 + .../lua/Scene/3/scene3_group133004088.lua | 114 + .../lua/Scene/3/scene3_group133004089.lua | 114 + .../lua/Scene/3/scene3_group133004090.lua | 128 + .../lua/Scene/3/scene3_group133004091.lua | 126 + .../lua/Scene/3/scene3_group133004092.lua | 116 + .../lua/Scene/3/scene3_group133004093.lua | 67 + .../lua/Scene/3/scene3_group133004094.lua | 136 + .../lua/Scene/3/scene3_group133004095.lua | 85 + .../lua/Scene/3/scene3_group133004096.lua | 66 + .../lua/Scene/3/scene3_group133004097.lua | 159 + .../lua/Scene/3/scene3_group133004098.lua | 116 + .../lua/Scene/3/scene3_group133004099.lua | 69 + .../lua/Scene/3/scene3_group133004100.lua | 67 + .../lua/Scene/3/scene3_group133004101.lua | 96 + .../lua/Scene/3/scene3_group133004102.lua | 124 + .../lua/Scene/3/scene3_group133004103.lua | 84 + .../lua/Scene/3/scene3_group133004104.lua | 133 + .../lua/Scene/3/scene3_group133004105.lua | 68 + .../lua/Scene/3/scene3_group133004107.lua | 157 + .../lua/Scene/3/scene3_group133004108.lua | 137 + .../lua/Scene/3/scene3_group133004109.lua | 89 + .../lua/Scene/3/scene3_group133004110.lua | 71 + .../lua/Scene/3/scene3_group133004111.lua | 66 + .../lua/Scene/3/scene3_group133004112.lua | 85 + .../lua/Scene/3/scene3_group133004113.lua | 93 + .../lua/Scene/3/scene3_group133004114.lua | 71 + .../lua/Scene/3/scene3_group133004115.lua | 75 + .../lua/Scene/3/scene3_group133004116.lua | 71 + .../lua/Scene/3/scene3_group133004117.lua | 69 + .../lua/Scene/3/scene3_group133004118.lua | 119 + .../lua/Scene/3/scene3_group133004119.lua | 75 + .../lua/Scene/3/scene3_group133004120.lua | 93 + .../lua/Scene/3/scene3_group133004121.lua | 80 + .../lua/Scene/3/scene3_group133004122.lua | 77 + .../lua/Scene/3/scene3_group133004123.lua | 67 + .../lua/Scene/3/scene3_group133004124.lua | 66 + .../lua/Scene/3/scene3_group133004125.lua | 69 + .../lua/Scene/3/scene3_group133004126.lua | 75 + .../lua/Scene/3/scene3_group133004127.lua | 67 + .../lua/Scene/3/scene3_group133004128.lua | 195 + .../lua/Scene/3/scene3_group133004129.lua | 77 + .../lua/Scene/3/scene3_group133004130.lua | 259 + .../lua/Scene/3/scene3_group133004131.lua | 67 + .../lua/Scene/3/scene3_group133004191.lua | 221 + .../lua/Scene/3/scene3_group133004192.lua | 68 + .../lua/Scene/3/scene3_group133004193.lua | 71 + .../lua/Scene/3/scene3_group133004194.lua | 105 + .../lua/Scene/3/scene3_group133004195.lua | 71 + .../lua/Scene/3/scene3_group133004196.lua | 190 + .../lua/Scene/3/scene3_group133004197.lua | 131 + .../lua/Scene/3/scene3_group133004198.lua | 70 + .../lua/Scene/3/scene3_group133004199.lua | 90 + .../lua/Scene/3/scene3_group133004200.lua | 91 + .../lua/Scene/3/scene3_group133004201.lua | 71 + .../lua/Scene/3/scene3_group133004202.lua | 130 + .../lua/Scene/3/scene3_group133004203.lua | 67 + .../lua/Scene/3/scene3_group133004204.lua | 137 + .../lua/Scene/3/scene3_group133004207.lua | 66 + .../lua/Scene/3/scene3_group133004208.lua | 99 + .../lua/Scene/3/scene3_group133004209.lua | 66 + .../lua/Scene/3/scene3_group133004210.lua | 104 + .../lua/Scene/3/scene3_group133004211.lua | 102 + .../lua/Scene/3/scene3_group133004212.lua | 131 + .../lua/Scene/3/scene3_group133004213.lua | 83 + .../lua/Scene/3/scene3_group133004214.lua | 66 + .../lua/Scene/3/scene3_group133004215.lua | 71 + .../lua/Scene/3/scene3_group133004216.lua | 74 + .../lua/Scene/3/scene3_group133004217.lua | 90 + .../lua/Scene/3/scene3_group133004218.lua | 67 + .../lua/Scene/3/scene3_group133004220.lua | 135 + .../lua/Scene/3/scene3_group133004221.lua | 72 + .../lua/Scene/3/scene3_group133004222.lua | 72 + .../lua/Scene/3/scene3_group133004223.lua | 77 + .../lua/Scene/3/scene3_group133004224.lua | 73 + .../lua/Scene/3/scene3_group133004225.lua | 67 + .../lua/Scene/3/scene3_group133004226.lua | 66 + .../lua/Scene/3/scene3_group133004227.lua | 133 + .../lua/Scene/3/scene3_group133004228.lua | 80 + .../lua/Scene/3/scene3_group133004229.lua | 68 + .../lua/Scene/3/scene3_group133004230.lua | 159 + .../lua/Scene/3/scene3_group133004231.lua | 70 + .../lua/Scene/3/scene3_group133004232.lua | 134 + .../lua/Scene/3/scene3_group133004233.lua | 240 + .../lua/Scene/3/scene3_group133004234.lua | 67 + .../lua/Scene/3/scene3_group133004235.lua | 103 + .../lua/Scene/3/scene3_group133004236.lua | 68 + .../lua/Scene/3/scene3_group133004237.lua | 70 + .../lua/Scene/3/scene3_group133004238.lua | 207 + .../lua/Scene/3/scene3_group133004239.lua | 75 + .../lua/Scene/3/scene3_group133004240.lua | 70 + .../lua/Scene/3/scene3_group133004241.lua | 70 + .../lua/Scene/3/scene3_group133004242.lua | 69 + .../lua/Scene/3/scene3_group133004243.lua | 98 + .../lua/Scene/3/scene3_group133004244.lua | 67 + .../lua/Scene/3/scene3_group133004245.lua | 187 + .../lua/Scene/3/scene3_group133004246.lua | 76 + .../lua/Scene/3/scene3_group133004801.lua | 132 + .../lua/Scene/3/scene3_group133004802.lua | 221 + .../lua/Scene/3/scene3_group133004803.lua | 74 + .../lua/Scene/3/scene3_group133004804.lua | 75 + .../lua/Scene/3/scene3_group133004805.lua | 73 + .../lua/Scene/3/scene3_group133004806.lua | 83 + .../lua/Scene/3/scene3_group133004807.lua | 114 + .../lua/Scene/3/scene3_group133004901.lua | 466 + .../lua/Scene/3/scene3_group133004902.lua | 76 + .../lua/Scene/3/scene3_group133004903.lua | 68 + .../lua/Scene/3/scene3_group133005011.lua | 259 + .../lua/Scene/3/scene3_group133005013.lua | 87 + .../lua/Scene/3/scene3_group133005014.lua | 191 + .../lua/Scene/3/scene3_group133005015.lua | 87 + .../lua/Scene/3/scene3_group133005016.lua | 201 + .../lua/Scene/3/scene3_group133007001.lua | 99 + .../lua/Scene/3/scene3_group133007002.lua | 67 + .../lua/Scene/3/scene3_group133007003.lua | 88 + .../lua/Scene/3/scene3_group133007004.lua | 67 + .../lua/Scene/3/scene3_group133007005.lua | 81 + .../lua/Scene/3/scene3_group133007006.lua | 68 + .../lua/Scene/3/scene3_group133007007.lua | 79 + .../lua/Scene/3/scene3_group133007008.lua | 66 + .../lua/Scene/3/scene3_group133007009.lua | 427 + .../lua/Scene/3/scene3_group133007010.lua | 90 + .../lua/Scene/3/scene3_group133007011.lua | 442 + .../lua/Scene/3/scene3_group133007012.lua | 456 + .../lua/Scene/3/scene3_group133007014.lua | 66 + .../lua/Scene/3/scene3_group133007015.lua | 115 + .../lua/Scene/3/scene3_group133007016.lua | 69 + .../lua/Scene/3/scene3_group133007017.lua | 109 + .../lua/Scene/3/scene3_group133007018.lua | 71 + .../lua/Scene/3/scene3_group133007019.lua | 112 + .../lua/Scene/3/scene3_group133007020.lua | 111 + .../lua/Scene/3/scene3_group133007021.lua | 125 + .../lua/Scene/3/scene3_group133007022.lua | 75 + .../lua/Scene/3/scene3_group133007023.lua | 73 + .../lua/Scene/3/scene3_group133007024.lua | 75 + .../lua/Scene/3/scene3_group133007025.lua | 129 + .../lua/Scene/3/scene3_group133007026.lua | 75 + .../lua/Scene/3/scene3_group133007027.lua | 73 + .../lua/Scene/3/scene3_group133007028.lua | 131 + .../lua/Scene/3/scene3_group133007029.lua | 96 + .../lua/Scene/3/scene3_group133007030.lua | 97 + .../lua/Scene/3/scene3_group133007032.lua | 113 + .../lua/Scene/3/scene3_group133007033.lua | 68 + .../lua/Scene/3/scene3_group133007034.lua | 129 + .../lua/Scene/3/scene3_group133007035.lua | 68 + .../lua/Scene/3/scene3_group133007036.lua | 70 + .../lua/Scene/3/scene3_group133007037.lua | 68 + .../lua/Scene/3/scene3_group133007038.lua | 68 + .../lua/Scene/3/scene3_group133007039.lua | 68 + .../lua/Scene/3/scene3_group133007040.lua | 69 + .../lua/Scene/3/scene3_group133007041.lua | 67 + .../lua/Scene/3/scene3_group133007042.lua | 68 + .../lua/Scene/3/scene3_group133007043.lua | 66 + .../lua/Scene/3/scene3_group133007044.lua | 88 + .../lua/Scene/3/scene3_group133007045.lua | 119 + .../lua/Scene/3/scene3_group133007046.lua | 67 + .../lua/Scene/3/scene3_group133007047.lua | 67 + .../lua/Scene/3/scene3_group133007048.lua | 67 + .../lua/Scene/3/scene3_group133007049.lua | 67 + .../lua/Scene/3/scene3_group133007050.lua | 97 + .../lua/Scene/3/scene3_group133007051.lua | 97 + .../lua/Scene/3/scene3_group133007052.lua | 367 + .../lua/Scene/3/scene3_group133007053.lua | 125 + .../lua/Scene/3/scene3_group133007055.lua | 67 + .../lua/Scene/3/scene3_group133007056.lua | 81 + .../lua/Scene/3/scene3_group133007057.lua | 70 + .../lua/Scene/3/scene3_group133007058.lua | 99 + .../lua/Scene/3/scene3_group133007059.lua | 67 + .../lua/Scene/3/scene3_group133007060.lua | 66 + .../lua/Scene/3/scene3_group133007061.lua | 72 + .../lua/Scene/3/scene3_group133007062.lua | 70 + .../lua/Scene/3/scene3_group133007063.lua | 72 + .../lua/Scene/3/scene3_group133007064.lua | 74 + .../lua/Scene/3/scene3_group133007065.lua | 74 + .../lua/Scene/3/scene3_group133007066.lua | 71 + .../lua/Scene/3/scene3_group133007071.lua | 66 + .../lua/Scene/3/scene3_group133007072.lua | 66 + .../lua/Scene/3/scene3_group133007073.lua | 66 + .../lua/Scene/3/scene3_group133007074.lua | 68 + .../lua/Scene/3/scene3_group133007075.lua | 69 + .../lua/Scene/3/scene3_group133007076.lua | 67 + .../lua/Scene/3/scene3_group133007078.lua | 67 + .../lua/Scene/3/scene3_group133007079.lua | 67 + .../lua/Scene/3/scene3_group133007080.lua | 68 + .../lua/Scene/3/scene3_group133007082.lua | 66 + .../lua/Scene/3/scene3_group133007083.lua | 68 + .../lua/Scene/3/scene3_group133007084.lua | 189 + .../lua/Scene/3/scene3_group133007085.lua | 67 + .../lua/Scene/3/scene3_group133007086.lua | 70 + .../lua/Scene/3/scene3_group133007087.lua | 66 + .../lua/Scene/3/scene3_group133007089.lua | 66 + .../lua/Scene/3/scene3_group133007093.lua | 67 + .../lua/Scene/3/scene3_group133007094.lua | 67 + .../lua/Scene/3/scene3_group133007095.lua | 67 + .../lua/Scene/3/scene3_group133007096.lua | 67 + .../lua/Scene/3/scene3_group133007097.lua | 67 + .../lua/Scene/3/scene3_group133007098.lua | 72 + .../lua/Scene/3/scene3_group133007099.lua | 88 + .../lua/Scene/3/scene3_group133007100.lua | 88 + .../lua/Scene/3/scene3_group133007101.lua | 125 + .../lua/Scene/3/scene3_group133007102.lua | 72 + .../lua/Scene/3/scene3_group133007103.lua | 67 + .../lua/Scene/3/scene3_group133007104.lua | 69 + .../lua/Scene/3/scene3_group133007105.lua | 67 + .../lua/Scene/3/scene3_group133007106.lua | 68 + .../lua/Scene/3/scene3_group133007107.lua | 68 + .../lua/Scene/3/scene3_group133007108.lua | 70 + .../lua/Scene/3/scene3_group133007109.lua | 68 + .../lua/Scene/3/scene3_group133007110.lua | 66 + .../lua/Scene/3/scene3_group133007111.lua | 69 + .../lua/Scene/3/scene3_group133007113.lua | 260 + .../lua/Scene/3/scene3_group133007115.lua | 123 + .../lua/Scene/3/scene3_group133007116.lua | 97 + .../lua/Scene/3/scene3_group133007118.lua | 78 + .../lua/Scene/3/scene3_group133007119.lua | 67 + .../lua/Scene/3/scene3_group133007120.lua | 113 + .../lua/Scene/3/scene3_group133007121.lua | 137 + .../lua/Scene/3/scene3_group133007122.lua | 175 + .../lua/Scene/3/scene3_group133007123.lua | 137 + .../lua/Scene/3/scene3_group133007124.lua | 260 + .../lua/Scene/3/scene3_group133007125.lua | 78 + .../lua/Scene/3/scene3_group133007126.lua | 163 + .../lua/Scene/3/scene3_group133007127.lua | 77 + .../lua/Scene/3/scene3_group133007128.lua | 175 + .../lua/Scene/3/scene3_group133007129.lua | 175 + .../lua/Scene/3/scene3_group133007130.lua | 175 + .../lua/Scene/3/scene3_group133007131.lua | 175 + .../lua/Scene/3/scene3_group133007132.lua | 159 + .../lua/Scene/3/scene3_group133007133.lua | 69 + .../lua/Scene/3/scene3_group133007134.lua | 110 + .../lua/Scene/3/scene3_group133007135.lua | 89 + .../lua/Scene/3/scene3_group133007136.lua | 71 + .../lua/Scene/3/scene3_group133007138.lua | 68 + .../lua/Scene/3/scene3_group133007139.lua | 89 + .../lua/Scene/3/scene3_group133007141.lua | 89 + .../lua/Scene/3/scene3_group133007142.lua | 129 + .../lua/Scene/3/scene3_group133007144.lua | 113 + .../lua/Scene/3/scene3_group133007145.lua | 113 + .../lua/Scene/3/scene3_group133007146.lua | 74 + .../lua/Scene/3/scene3_group133007147.lua | 67 + .../lua/Scene/3/scene3_group133007149.lua | 106 + .../lua/Scene/3/scene3_group133007150.lua | 111 + .../lua/Scene/3/scene3_group133007152.lua | 108 + .../lua/Scene/3/scene3_group133007153.lua | 67 + .../lua/Scene/3/scene3_group133007154.lua | 67 + .../lua/Scene/3/scene3_group133007155.lua | 67 + .../lua/Scene/3/scene3_group133007156.lua | 68 + .../lua/Scene/3/scene3_group133007157.lua | 72 + .../lua/Scene/3/scene3_group133007158.lua | 117 + .../lua/Scene/3/scene3_group133007159.lua | 78 + .../lua/Scene/3/scene3_group133007160.lua | 237 + .../lua/Scene/3/scene3_group133007161.lua | 237 + .../lua/Scene/3/scene3_group133007162.lua | 252 + .../lua/Scene/3/scene3_group133007163.lua | 68 + .../lua/Scene/3/scene3_group133007164.lua | 93 + .../lua/Scene/3/scene3_group133007165.lua | 68 + .../lua/Scene/3/scene3_group133007166.lua | 69 + .../lua/Scene/3/scene3_group133007167.lua | 67 + .../lua/Scene/3/scene3_group133007168.lua | 120 + .../lua/Scene/3/scene3_group133007169.lua | 67 + .../lua/Scene/3/scene3_group133007170.lua | 67 + .../lua/Scene/3/scene3_group133007171.lua | 97 + .../lua/Scene/3/scene3_group133007172.lua | 79 + .../lua/Scene/3/scene3_group133007173.lua | 90 + .../lua/Scene/3/scene3_group133007174.lua | 132 + .../lua/Scene/3/scene3_group133007175.lua | 76 + .../lua/Scene/3/scene3_group133007176.lua | 132 + .../lua/Scene/3/scene3_group133007177.lua | 77 + .../lua/Scene/3/scene3_group133007178.lua | 67 + .../lua/Scene/3/scene3_group133007179.lua | 67 + .../lua/Scene/3/scene3_group133007180.lua | 67 + .../lua/Scene/3/scene3_group133007181.lua | 67 + .../lua/Scene/3/scene3_group133007182.lua | 67 + .../lua/Scene/3/scene3_group133007183.lua | 121 + .../lua/Scene/3/scene3_group133007184.lua | 279 + .../lua/Scene/3/scene3_group133007185.lua | 549 + .../lua/Scene/3/scene3_group133007186.lua | 79 + .../lua/Scene/3/scene3_group133007187.lua | 141 + .../lua/Scene/3/scene3_group133007188.lua | 125 + .../lua/Scene/3/scene3_group133007189.lua | 71 + .../lua/Scene/3/scene3_group133007190.lua | 209 + .../lua/Scene/3/scene3_group133007191.lua | 94 + .../lua/Scene/3/scene3_group133007192.lua | 80 + .../lua/Scene/3/scene3_group133007193.lua | 92 + .../lua/Scene/3/scene3_group133007194.lua | 94 + .../lua/Scene/3/scene3_group133007195.lua | 77 + .../lua/Scene/3/scene3_group133007196.lua | 78 + .../lua/Scene/3/scene3_group133007197.lua | 110 + .../lua/Scene/3/scene3_group133007198.lua | 110 + .../lua/Scene/3/scene3_group133007199.lua | 83 + .../lua/Scene/3/scene3_group133007200.lua | 116 + .../lua/Scene/3/scene3_group133007201.lua | 79 + .../lua/Scene/3/scene3_group133007202.lua | 89 + .../lua/Scene/3/scene3_group133007203.lua | 209 + .../lua/Scene/3/scene3_group133007204.lua | 159 + .../lua/Scene/3/scene3_group133007205.lua | 111 + .../lua/Scene/3/scene3_group133007206.lua | 68 + .../lua/Scene/3/scene3_group133007207.lua | 68 + .../lua/Scene/3/scene3_group133007208.lua | 89 + .../lua/Scene/3/scene3_group133007209.lua | 67 + .../lua/Scene/3/scene3_group133007210.lua | 89 + .../lua/Scene/3/scene3_group133007211.lua | 93 + .../lua/Scene/3/scene3_group133007212.lua | 68 + .../lua/Scene/3/scene3_group133007213.lua | 93 + .../lua/Scene/3/scene3_group133007214.lua | 68 + .../lua/Scene/3/scene3_group133007215.lua | 70 + .../lua/Scene/3/scene3_group133007216.lua | 89 + .../lua/Scene/3/scene3_group133007217.lua | 88 + .../lua/Scene/3/scene3_group133007218.lua | 132 + .../lua/Scene/3/scene3_group133007219.lua | 76 + .../lua/Scene/3/scene3_group133007220.lua | 66 + .../lua/Scene/3/scene3_group133007221.lua | 164 + .../lua/Scene/3/scene3_group133007222.lua | 76 + .../lua/Scene/3/scene3_group133007801.lua | 128 + .../lua/Scene/3/scene3_group133007802.lua | 89 + .../lua/Scene/3/scene3_group133007803.lua | 130 + .../lua/Scene/3/scene3_group133007804.lua | 191 + .../lua/Scene/3/scene3_group133007805.lua | 140 + .../lua/Scene/3/scene3_group133007806.lua | 83 + .../lua/Scene/3/scene3_group133007901.lua | 239 + soggy_resources/lua/Scene/3/scene3_point.json | 2611 + .../lua/Scene/3/scene3_point_test.json | 372 + .../lua/Scene/3/scene3_triggers.json | 15006 ++++ .../lua/Scene/30001/scene30001.lua | 22 + .../Scene/30001/scene30001_30001_routes.json | 4 + .../lua/Scene/30001/scene30001_block30001.lua | 25 + .../Scene/30001/scene30001_dummy_points.lua | 2 + .../Scene/30001/scene30001_group230001001.lua | 134 + .../Scene/30001/scene30001_group230001002.lua | 112 + .../Scene/30001/scene30001_group230001003.lua | 123 + .../Scene/30001/scene30001_group230001004.lua | 93 + .../Scene/30001/scene30001_group230001005.lua | 282 + .../Scene/30001/scene30001_group230001006.lua | 104 + .../Scene/30001/scene30001_group230001007.lua | 285 + .../Scene/30001/scene30001_group230001008.lua | 71 + .../Scene/30001/scene30001_group230001009.lua | 247 + .../Scene/30001/scene30001_group230001010.lua | 68 + .../Scene/30001/scene30001_group230001011.lua | 99 + .../Scene/30001/scene30001_group230001012.lua | 301 + .../Scene/30001/scene30001_group230001013.lua | 70 + .../Scene/30001/scene30001_group230001014.lua | 145 + .../Scene/30001/scene30001_group230001015.lua | 68 + .../Scene/30001/scene30001_group230001016.lua | 105 + .../Scene/30001/scene30001_group230001017.lua | 66 + .../Scene/30001/scene30001_group230001018.lua | 214 + .../Scene/30001/scene30001_group230001019.lua | 1008 + .../Scene/30001/scene30001_group230001020.lua | 69 + .../Scene/30001/scene30001_group230001021.lua | 73 + .../Scene/30001/scene30001_group230001022.lua | 69 + .../lua/Scene/30001/scene30001_point.json | 56 + .../lua/Scene/30001/scene30001_routes.lua | 2 + .../lua/Scene/30002/scene30002.lua | 22 + .../Scene/30002/scene30002_30002_routes.json | 4 + .../lua/Scene/30002/scene30002_block30002.lua | 6 + .../Scene/30002/scene30002_dummy_points.lua | 2 + .../Scene/30002/scene30002_group230002001.lua | 446 + .../Scene/30002/scene30002_group230002002.lua | 67 + .../Scene/30002/scene30002_group230002003.lua | 197 + .../lua/Scene/30002/scene30002_point.json | 33 + .../lua/Scene/30002/scene30002_routes.lua | 2 + .../lua/Scene/30003/scene30003.lua | 22 + .../Scene/30003/scene30003_30003_routes.json | 4 + .../lua/Scene/30003/scene30003_block30003.lua | 4 + .../Scene/30003/scene30003_dummy_points.lua | 2 + .../Scene/30003/scene30003_group230003001.lua | 275 + .../lua/Scene/30003/scene30003_point.json | 33 + soggy_resources/lua/Scene/3001/scene3001.lua | 10 + .../lua/Scene/3001/scene3001_block81001.lua | 3 + .../Scene/3001/scene3001_group11001001.lua | 50 + .../lua/Scene/40001/scene40001.lua | 22 + .../Scene/40001/scene40001_40001_routes.json | 229 + .../lua/Scene/40001/scene40001_block40001.lua | 7 + .../Scene/40001/scene40001_group240001001.lua | 66 + .../Scene/40001/scene40001_group240001002.lua | 122 + .../Scene/40001/scene40001_group240001003.lua | 132 + .../Scene/40001/scene40001_group240001004.lua | 169 + .../lua/Scene/40001/scene40001_point.json | 298 + .../lua/Scene/40001/scene40001_routes.lua | 61 + .../lua/Scene/40002/scene40002.lua | 17 + .../Scene/40002/scene40002_40002_routes.json | 4 + .../lua/Scene/40002/scene40002_block40002.lua | 3 + .../lua/Scene/40002/scene40002_point.json | 7 + .../lua/Scene/40003/scene40003.lua | 17 + .../Scene/40003/scene40003_40003_routes.json | 4 + .../lua/Scene/40003/scene40003_block40003.lua | 3 + .../lua/Scene/40003/scene40003_point.json | 7 + .../lua/Scene/40004/scene40004.lua | 22 + .../Scene/40004/scene40004_40004_routes.json | 4 + .../lua/Scene/40004/scene40004_block40004.lua | 10 + .../Scene/40004/scene40004_group240004002.lua | 128 + .../Scene/40004/scene40004_group240004003.lua | 126 + .../Scene/40004/scene40004_group240004004.lua | 125 + .../Scene/40004/scene40004_group240004005.lua | 306 + .../Scene/40004/scene40004_group240004006.lua | 76 + .../Scene/40004/scene40004_group240004007.lua | 309 + .../Scene/40004/scene40004_group240004008.lua | 76 + .../lua/Scene/40004/scene40004_point.json | 126 + .../lua/Scene/40005/scene40005.lua | 17 + .../Scene/40005/scene40005_40005_routes.json | 4 + .../lua/Scene/40005/scene40005_block40005.lua | 3 + .../lua/Scene/40005/scene40005_point.json | 7 + .../lua/Scene/40006/scene40006.lua | 17 + .../Scene/40006/scene40006_40006_routes.json | 4 + .../lua/Scene/40006/scene40006_block40006.lua | 3 + .../lua/Scene/40006/scene40006_point.json | 7 + .../lua/Scene/40007/scene40007.lua | 22 + .../Scene/40007/scene40007_40007_routes.json | 86 + .../lua/Scene/40007/scene40007_block40007.lua | 9 + .../Scene/40007/scene40007_group240007001.lua | 154 + .../Scene/40007/scene40007_group240007002.lua | 138 + .../Scene/40007/scene40007_group240007003.lua | 178 + .../Scene/40007/scene40007_group240007004.lua | 142 + .../Scene/40007/scene40007_group240007005.lua | 67 + .../Scene/40007/scene40007_group240007006.lua | 115 + .../lua/Scene/40007/scene40007_point.json | 161 + .../lua/Scene/50000/scene50000.lua | 15 + .../lua/Scene/50000/scene50000_point.json | 45 + .../lua/Scene/50001/scene50001.lua | 22 + .../Scene/50001/scene50001_50001_routes.json | 59 + .../lua/Scene/50001/scene50001_block50001.lua | 10 + .../Scene/50001/scene50001_dummy_points.lua | 2 + .../Scene/50001/scene50001_group250001001.lua | 86 + .../Scene/50001/scene50001_group250001002.lua | 271 + .../Scene/50001/scene50001_group250001003.lua | 110 + .../Scene/50001/scene50001_group250001004.lua | 260 + .../Scene/50001/scene50001_group250001005.lua | 139 + .../Scene/50001/scene50001_group250001006.lua | 98 + .../Scene/50001/scene50001_group250001007.lua | 107 + .../lua/Scene/50001/scene50001_point.json | 431 + .../lua/Scene/50002/scene50002.lua | 22 + .../Scene/50002/scene50002_50002_routes.json | 48 + .../lua/Scene/50002/scene50002_block50002.lua | 8 + .../Scene/50002/scene50002_group250002001.lua | 280 + .../Scene/50002/scene50002_group250002002.lua | 208 + .../Scene/50002/scene50002_group250002003.lua | 66 + .../Scene/50002/scene50002_group250002004.lua | 118 + .../Scene/50002/scene50002_group250002005.lua | 129 + .../lua/Scene/50002/scene50002_point.json | 8 + .../lua/Scene/50003/scene50003.lua | 22 + .../lua/Scene/50003/scene50003_block50003.lua | 6 + .../Scene/50003/scene50003_group250003001.lua | 592 + .../Scene/50003/scene50003_group250003002.lua | 144 + .../Scene/50003/scene50003_group250003003.lua | 174 + .../lua/Scene/50003/scene50003_point.json | 33 + .../lua/Scene/50004/scene50004.lua | 22 + .../Scene/50004/scene50004_50004_routes.json | 4 + .../lua/Scene/50004/scene50004_block50004.lua | 10 + .../Scene/50004/scene50004_group250004001.lua | 78 + .../Scene/50004/scene50004_group250004002.lua | 87 + .../Scene/50004/scene50004_group250004003.lua | 95 + .../Scene/50004/scene50004_group250004004.lua | 87 + .../Scene/50004/scene50004_group250004005.lua | 118 + .../Scene/50004/scene50004_group250004006.lua | 167 + .../Scene/50004/scene50004_group250004007.lua | 119 + .../lua/Scene/50004/scene50004_triggers.json | 112 + .../lua/Scene/50005/scene50005.lua | 22 + .../Scene/50005/scene50005_50005_routes.json | 4 + .../lua/Scene/50005/scene50005_block50005.lua | 13 + .../Scene/50005/scene50005_group250005001.lua | 135 + .../Scene/50005/scene50005_group250005002.lua | 71 + .../Scene/50005/scene50005_group250005003.lua | 70 + .../Scene/50005/scene50005_group250005004.lua | 67 + .../Scene/50005/scene50005_group250005005.lua | 70 + .../Scene/50005/scene50005_group250005006.lua | 68 + .../Scene/50005/scene50005_group250005007.lua | 70 + .../Scene/50005/scene50005_group250005008.lua | 71 + .../Scene/50005/scene50005_group250005009.lua | 71 + .../Scene/50005/scene50005_group250005010.lua | 71 + .../lua/UAuto/Base/UAutoCommon.lua | 109 + .../lua/UAuto/Base/UAutoCoroutine.lua | 20 + .../lua/UAuto/Base/UAutoLuaTestBase.lua | 335 + .../TestCases/UAutoLuaTestCaseExample.lua | 88 + .../UAuto/TestCases/avatar/Avatar100Dead.lua | 62 + .../lua/UAuto/TestCases/avatar/Test.lua | 19 + .../TestCases/avatar/skill/AmborSkill.lua | 71 + .../avatar/skill/AvatarSkillBase.lua | 12 + .../TestCases/avatar/skill/AyakaSkill.lua | 82 + .../TestCases/avatar/skill/BarbaraSkill.lua | 67 + .../TestCases/avatar/skill/DilucSkill.lua | 67 + .../TestCases/avatar/skill/KaeyaSkill.lua | 67 + .../TestCases/avatar/skill/LisaSkill.lua | 67 + .../TestCases/avatar/skill/PlayerBoySkill.lua | 80 + .../avatar/skill/PlayerGirlSkill.lua | 80 + .../UAuto/TestCases/avatar/skill/QinSkill.lua | 80 + .../TestCases/avatar/skill/RazorSkill.lua | 74 + .../TestCases/avatar/skill/VentiSkill.lua | 67 + .../TestCases/avatar/skill/XianglingSkill.lua | 67 + .../lua/UAuto/TestCases/combat/CombatBase.lua | 93 + .../combat/avatar/AmborSkillHitMonster.lua | 99 + .../combat/avatar/AyakaSkillHitMonster.lua | 120 + .../combat/avatar/BarbaraSkillHitMonster.lua | 115 + .../TestCases/combat/avatar/CombatAvatar.lua | 84 + .../combat/avatar/DilucSkillHitMonster.lua | 121 + .../combat/avatar/KaeyaSkillHitMonster.lua | 104 + .../combat/avatar/LisaSkillHitMonster.lua | 104 + .../avatar/PlayerBoySkillHitMonster.lua | 108 + .../avatar/PlayerGirlSkillHitMonster.lua | 108 + .../combat/avatar/QinSkillHitMonster.lua | 106 + .../combat/avatar/RazorSkillHitMonster.lua | 111 + .../combat/avatar/VentiSkillHitMonster.lua | 105 + .../avatar/XianglingSkillHitMonster.lua | 105 + .../UAuto/TestCases/element/ElementBase.lua | 143 + .../element/electric/ElectricComponent.lua | 47 + .../element/electric/ElectricFireReaction.lua | 61 + .../element/electric/ElectricReaction.lua | 46 + .../TestCases/element/fire/FireComponent.lua | 34 + .../element/fire/FireElectricReaction.lua | 39 + .../TestCases/element/fire/FireReaction.lua | 40 + .../element/fire/FireWaterReaction.lua | 50 + .../element/grass/GrassComponent.lua | 62 + .../element/grass/GrassFireReaction.lua | 131 + .../TestCases/element/ice/IceComponent.lua | 79 + .../TestCases/element/ice/IceFireReaction.lua | 66 + .../TestCases/element/rock/RockComponent.lua | 33 + .../element/water/WaterComponent.lua | 76 + .../element/water/WaterElectricReaction.lua | 72 + .../element/water/WaterFireReaction.lua | 73 + .../element/water/WaterIceReaction.lua | 66 + .../UAuto/TestCases/item/AllTreasurebox.lua | 101 + .../UAuto/TestCases/item/KapokFlower01.lua | 82 + .../UAuto/TestCases/item/PumpkinBomb01.lua | 63 + .../item/treasurebox/OpenTreasure01.lua | 69 + .../item/treasurebox/OpenTreasure02.lua | 95 + .../item/treasurebox/OpenTreasure03.lua | 71 + .../item/treasurebox/OpenTreasure04.lua | 102 + .../item/treasurebox/OpenTreasure05.lua | 94 + .../TestCases/localtest/CreateMonster.lua | 31 + .../lua/UAuto/TestCases/number/NumberBase.lua | 26 + .../number/avatar/AvatarReliquaryTest.lua | 239 + .../number/avatar/AvatarTalentTest.lua | 151 + .../TestCases/number/avatar/AvatarUpLevel.lua | 172 + .../number/avatar/AvatarWeaponTest.lua | 293 + .../number/quest/QuestNumberData.lua | 24 + .../TestCases/online/OnlineAddClient.lua | 45 + .../lua/UAuto/TestCases/online/OnlineBase.lua | 93 + .../online/avatar/OnlineChangeAvatar.lua | 116 + .../element/monster/OnlineElementElectric.lua | 109 + .../element/monster/OnlineElementFire.lua | 157 + .../element/monster/OnlineElementGrass.lua | 106 + .../element/monster/OnlineElementIce.lua | 111 + .../element/monster/OnlineElementWater.lua | 158 + .../TestCases/online/monster/AbyssFire.lua | 282 + .../TestCases/online/monster/AbyssIce.lua | 279 + .../TestCases/online/monster/AbyssWater.lua | 279 + .../online/monster/BruteNoneShield.lua | 328 + .../TestCases/online/monster/DefenderNone.lua | 278 + .../online/monster/ElementalWind.lua | 252 + .../TestCases/online/monster/HiliNone.lua | 186 + .../TestCases/online/monster/HiliNoneClub.lua | 333 + .../online/monster/HiliNoneRange.lua | 333 + .../online/monster/HiliNoneShield.lua | 333 + .../TestCases/online/monster/ShamanGrass.lua | 228 + .../TestCases/online/monster/ShamanWater.lua | 228 + .../TestCases/online/monster/ShamanWind.lua | 228 + .../online/monster/SlimeElectric.lua | 228 + .../online/monster/SlimeElectricBig.lua | 228 + .../monster/SlimeElectricBigPositive.lua | 228 + .../TestCases/online/monster/SlimeFire.lua | 203 + .../TestCases/online/monster/SlimeFireBig.lua | 253 + .../TestCases/online/monster/SlimeGrass.lua | 253 + .../online/monster/SlimeGrassBig.lua | 353 + .../TestCases/online/monster/SlimeIce.lua | 178 + .../TestCases/online/monster/SlimeIceBig.lua | 278 + .../TestCases/online/monster/SlimeRock.lua | 203 + .../TestCases/online/monster/SlimeRockBig.lua | 228 + .../TestCases/online/monster/SlimeWater.lua | 178 + .../online/monster/SlimeWaterBig.lua | 228 + .../TestCases/online/monster/SlimeWind.lua | 203 + .../TestCases/online/monster/SlimeWindBig.lua | 228 + .../TestCases/online/move/OnlineMove.lua | 98 + .../online/skill/OnlineAmborSkill.lua | 153 + .../online/skill/OnlineAyakaSkill.lua | 280 + .../online/skill/OnlineBarbaraSkill.lua | 111 + .../online/skill/OnlineGirlSkill.lua | 115 + .../online/skill/OnlineKaeyaSkill.lua | 249 + .../online/skill/OnlineLisaSkill.lua | 265 + .../TestCases/online/skill/OnlineQinSkill.lua | 115 + .../lua/UAuto/TestCases/perf/RunScene.lua | 80 + .../TestCases/perf/RunSceneBenlangling.lua | 110 + .../perf/RunSceneChenxijiuzhuang.lua | 108 + .../UAuto/TestCases/perf/RunSceneFengqidi.lua | 108 + .../TestCases/perf/RunSceneManualPoint.lua | 75 + .../UAuto/TestCases/perf/RunSceneMengde.lua | 108 + .../TestCases/perf/RunSceneMengdeEast.lua | 108 + .../TestCases/perf/RunSceneMengdeMini.lua | 108 + .../TestCases/perf/RunSceneQingquanzhen.lua | 108 + .../UAuto/TestCases/perf/RunSceneSetPos.lua | 109 + .../TestCases/perf/RunSceneSetPosMini.lua | 109 + .../TestCases/perf/RunSceneShiyanjia.lua | 108 + .../TestCases/perf/RunSceneWangfengshandi.lua | 108 + .../TestCases/perf/RunXinshouToMengde.lua | 592 + .../lua/UAuto/TestCases/perf/TestCutscene.lua | 52 + .../lua/UAuto/TestCases/perf/TestMem.lua | 432 + .../TestCases/perf/TestMemDungeonInOut.lua | 69 + .../UAuto/TestCases/perf/TestMemReLogin.lua | 66 + .../TestCases/perf/TestMemRoundFenglong.lua | 158 + .../TestCases/perf/TestMemRoundMengde.lua | 216 + .../TestCases/quest/301/MainQuest_301.lua | 22 + .../UAuto/TestCases/quest/301/Quest301.lua | 277 + .../TestCases/quest/302/QuestBase_302.lua | 57 + .../TestCases/quest/302/QuestBranch_302.lua | 38 + .../TestCases/quest/302/QuestRewind_302.lua | 56 + .../UAuto/TestCases/quest/304/Quest304.lua | 698 + .../UAuto/TestCases/quest/305/Quest305.lua | 975 + .../UAuto/TestCases/quest/306/Quest306.lua | 75 + .../UAuto/TestCases/quest/351/Quest351.lua | 268 + .../TestCases/quest/351/QuestBase_351.lua | 34 + .../TestCases/quest/351/QuestNormal_351.lua | 61 + .../UAuto/TestCases/quest/352/Quest352.lua | 144 + .../UAuto/TestCases/quest/352/Quest352bug.lua | 424 + .../TestCases/quest/352/QuestBase_352.lua | 36 + .../TestCases/quest/352/QuestNormal_352.lua | 71 + .../UAuto/TestCases/quest/353/Quest353.lua | 223 + .../TestCases/quest/353/QuestBase_353.lua | 34 + .../TestCases/quest/353/QuestNormal_353.lua | 89 + .../UAuto/TestCases/quest/354/Quest354.lua | 100 + .../TestCases/quest/354/QuestAuto354.lua | 192 + .../TestCases/quest/354/QuestBase_354.lua | 32 + .../TestCases/quest/354/QuestNormal_354.lua | 62 + .../TestCases/quest/354/unlockTransPoint.lua | 515 + .../UAuto/TestCases/quest/355/Quest355.lua | 65 + .../UAuto/TestCases/quest/356/Quest356.lua | 152 + .../UAuto/TestCases/quest/358/Quest358.lua | 53 + .../UAuto/TestCases/quest/361/Quest361.lua | 29 + .../TestCases/quest/404/QuestBase_404.lua | 65 + .../TestCases/quest/404/QuestNormal_404.lua | 89 + .../TestCases/quest/405/QuestBase_405.lua | 33 + .../TestCases/quest/405/QuestNormal_405.lua | 51 + .../UAuto/TestCases/quest/FirstGoddess.lua | 74 + .../UAuto/TestCases/quest/NPCRunInMengde.lua | 6 + .../lua/UAuto/TestCases/quest/QuestBase.lua | 201 + .../UAuto/TestCases/scene/CheckStreaming.lua | 23 + .../lua/UAuto/TestCases/scene/SceneBase.lua | 9 + .../ui/character/ChangeCharacter.lua | 54 + .../character/CharacterEnterReturnTwice.lua | 78 + .../ui/character/CharacterPageBase.lua | 26 + .../character/property/OpenAllProperties.lua | 141 + .../UAuto/TestCases/ui/map/MapTransPoint.lua | 68 + soggy_resources/lua/UAuto/UAutoMain.lua | 222 + soggy_resources/lua/main.lua | 41 + 3326 files changed, 683000 insertions(+) create mode 100644 app.sh create mode 100644 os create mode 100644 run.sh create mode 100644 soggy-mistress/CMakeLists.txt create mode 100644 soggy-mistress/dispatch.py create mode 100644 soggy-mistress/extern/nlohmann/adl_serializer.hpp create mode 100644 soggy-mistress/extern/nlohmann/byte_container_with_subtype.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/abi_macros.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/conversions/from_json.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/conversions/to_chars.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/conversions/to_json.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/exceptions.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/hash.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/input/binary_reader.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/input/input_adapters.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/input/json_sax.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/input/lexer.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/input/parser.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/input/position_t.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/iterators/internal_iterator.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/iterators/iter_impl.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/iterators/iteration_proxy.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/iterators/iterator_traits.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/iterators/json_reverse_iterator.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/iterators/primitive_iterator.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/json_pointer.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/json_ref.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/macro_scope.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/macro_unscope.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/call_std/begin.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/call_std/end.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/cpp_future.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/detected.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/identity_tag.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/is_sax.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/std_fs.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/type_traits.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/meta/void_t.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/output/binary_writer.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/output/output_adapters.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/output/serializer.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/string_concat.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/string_escape.hpp create mode 100644 soggy-mistress/extern/nlohmann/detail/value_t.hpp create mode 100644 soggy-mistress/extern/nlohmann/json.hpp create mode 100644 soggy-mistress/extern/nlohmann/json_fwd.hpp create mode 100644 soggy-mistress/extern/nlohmann/ordered_map.hpp create mode 100644 soggy-mistress/extern/nlohmann/thirdparty/hedley/hedley.hpp create mode 100644 soggy-mistress/extern/nlohmann/thirdparty/hedley/hedley_undef.hpp create mode 100644 soggy-mistress/proto/AbilityActionBlink.proto create mode 100644 soggy-mistress/proto/AbilityActionCreateGadget.proto create mode 100644 soggy-mistress/proto/AbilityActionSetCrashDamage.proto create mode 100644 soggy-mistress/proto/AbilityActionSummon.proto create mode 100644 soggy-mistress/proto/AbilityActionTriggerAbility.proto create mode 100644 soggy-mistress/proto/AbilityAppliedAbility.proto create mode 100644 soggy-mistress/proto/AbilityAppliedModifier.proto create mode 100644 soggy-mistress/proto/AbilityArgument.proto create mode 100644 soggy-mistress/proto/AbilityAttachedModifier.proto create mode 100644 soggy-mistress/proto/AbilityBornType.proto create mode 100644 soggy-mistress/proto/AbilityFloatValue.proto create mode 100644 soggy-mistress/proto/AbilityGadgetInfo.proto create mode 100644 soggy-mistress/proto/AbilityIdentifier.proto create mode 100644 soggy-mistress/proto/AbilityInvocationFailNotify.proto create mode 100644 soggy-mistress/proto/AbilityInvocationFixedNotify.proto create mode 100644 soggy-mistress/proto/AbilityInvocationsNotify.proto create mode 100644 soggy-mistress/proto/AbilityInvokeArgument.proto create mode 100644 soggy-mistress/proto/AbilityInvokeEntry.proto create mode 100644 soggy-mistress/proto/AbilityInvokeEntryHead.proto create mode 100644 soggy-mistress/proto/AbilityMetaAddAbility.proto create mode 100644 soggy-mistress/proto/AbilityMetaAddOrGetAbilityAndTrigger.proto create mode 100644 soggy-mistress/proto/AbilityMetaModifierChange.proto create mode 100644 soggy-mistress/proto/AbilityMetaReInitOverrideMap.proto create mode 100644 soggy-mistress/proto/AbilityMetaSetAbilityTrigger.proto create mode 100644 soggy-mistress/proto/AbilityMetaSetKilledState.proto create mode 100644 soggy-mistress/proto/AbilityMetaSetModifierApplyEntityId.proto create mode 100644 soggy-mistress/proto/AbilityMetaSpecialFloatArgument.proto create mode 100644 soggy-mistress/proto/AbilityMixinAvatarSteerByCamera.proto create mode 100644 soggy-mistress/proto/AbilityMixinCostStamina.proto create mode 100644 soggy-mistress/proto/AbilityMixinElementShield.proto create mode 100644 soggy-mistress/proto/AbilityMixinEliteShield.proto create mode 100644 soggy-mistress/proto/AbilityMixinEmpty.proto create mode 100644 soggy-mistress/proto/AbilityMixinWindZone.proto create mode 100644 soggy-mistress/proto/AbilityResetReason.proto create mode 100644 soggy-mistress/proto/AbilityResetReasonType.proto create mode 100644 soggy-mistress/proto/AbilityScalarType.proto create mode 100644 soggy-mistress/proto/AbilityScalarValueEntry.proto create mode 100644 soggy-mistress/proto/AbilityString.proto create mode 100644 soggy-mistress/proto/AbilitySyncStateInfo.proto create mode 100644 soggy-mistress/proto/AccountType.proto create mode 100644 soggy-mistress/proto/AddQuestContentProgressReq.proto create mode 100644 soggy-mistress/proto/AddQuestContentProgressRsp.proto create mode 100644 soggy-mistress/proto/AddSeenMonsterNotify.proto create mode 100644 soggy-mistress/proto/AiSkillCdInfo.proto create mode 100644 soggy-mistress/proto/AllSeenMonsterNotify.proto create mode 100644 soggy-mistress/proto/AnimatorForceSetAirMoveNotify.proto create mode 100644 soggy-mistress/proto/AnimatorParameterValueInfo.proto create mode 100644 soggy-mistress/proto/AreaType.proto create mode 100644 soggy-mistress/proto/AttackHitEffectResult.proto create mode 100644 soggy-mistress/proto/AttackResult.proto create mode 100644 soggy-mistress/proto/AuthkeySignType.proto create mode 100644 soggy-mistress/proto/AvatarAbilityResetNotify.proto create mode 100644 soggy-mistress/proto/AvatarAddNotify.proto create mode 100644 soggy-mistress/proto/AvatarCardChangeReq.proto create mode 100644 soggy-mistress/proto/AvatarCardChangeRsp.proto create mode 100644 soggy-mistress/proto/AvatarChangeElementTypeReq.proto create mode 100644 soggy-mistress/proto/AvatarChangeElementTypeRsp.proto create mode 100644 soggy-mistress/proto/AvatarDataNotify.proto create mode 100644 soggy-mistress/proto/AvatarDelNotify.proto create mode 100644 soggy-mistress/proto/AvatarDieAnimationEndReq.proto create mode 100644 soggy-mistress/proto/AvatarDieAnimationEndRsp.proto create mode 100644 soggy-mistress/proto/AvatarEnterElementViewNotify.proto create mode 100644 soggy-mistress/proto/AvatarEnterSceneInfo.proto create mode 100644 soggy-mistress/proto/AvatarEquipChangeNotify.proto create mode 100644 soggy-mistress/proto/AvatarFightPropNotify.proto create mode 100644 soggy-mistress/proto/AvatarFightPropUpdateNotify.proto create mode 100644 soggy-mistress/proto/AvatarInfo.proto create mode 100644 soggy-mistress/proto/AvatarLifeStateChangeNotify.proto create mode 100644 soggy-mistress/proto/AvatarPromoteReq.proto create mode 100644 soggy-mistress/proto/AvatarPromoteRsp.proto create mode 100644 soggy-mistress/proto/AvatarPropChangeReasonNotify.proto create mode 100644 soggy-mistress/proto/AvatarPropNotify.proto create mode 100644 soggy-mistress/proto/AvatarSkillDepotChangeNotify.proto create mode 100644 soggy-mistress/proto/AvatarSkillInfo.proto create mode 100644 soggy-mistress/proto/AvatarSkillInfoNotify.proto create mode 100644 soggy-mistress/proto/AvatarSkillMaxChargeCountNotify.proto create mode 100644 soggy-mistress/proto/AvatarTeam.proto create mode 100644 soggy-mistress/proto/AvatarTeamUpdateNotify.proto create mode 100644 soggy-mistress/proto/AvatarUnlockTalentNotify.proto create mode 100644 soggy-mistress/proto/AvatarUpgradeReq.proto create mode 100644 soggy-mistress/proto/AvatarUpgradeRsp.proto create mode 100644 soggy-mistress/proto/BackMyWorldReq.proto create mode 100644 soggy-mistress/proto/BackMyWorldRsp.proto create mode 100644 soggy-mistress/proto/BeginCameraSceneLookNotify.proto create mode 100644 soggy-mistress/proto/BigTalentPointConvertReq.proto create mode 100644 soggy-mistress/proto/BigTalentPointConvertRsp.proto create mode 100644 soggy-mistress/proto/BuffAddNotify.proto create mode 100644 soggy-mistress/proto/BuffDelNotify.proto create mode 100644 soggy-mistress/proto/BuyGoodsReq.proto create mode 100644 soggy-mistress/proto/BuyGoodsRsp.proto create mode 100644 soggy-mistress/proto/CellInfo.proto create mode 100644 soggy-mistress/proto/ChallengeDataNotify.proto create mode 100644 soggy-mistress/proto/ChangHpReason.proto create mode 100644 soggy-mistress/proto/ChangeAvatarReq.proto create mode 100644 soggy-mistress/proto/ChangeAvatarRsp.proto create mode 100644 soggy-mistress/proto/ChangeGameTimeReq.proto create mode 100644 soggy-mistress/proto/ChangeGameTimeRsp.proto create mode 100644 soggy-mistress/proto/ChapterState.proto create mode 100644 soggy-mistress/proto/ChapterStateNotify.proto create mode 100644 soggy-mistress/proto/ChildQuest.proto create mode 100644 soggy-mistress/proto/ChooseCurAvatarTeamReq.proto create mode 100644 soggy-mistress/proto/ChooseCurAvatarTeamRsp.proto create mode 100644 soggy-mistress/proto/CityInfo.proto create mode 100644 soggy-mistress/proto/ClientAbilityInitBeginNotify.proto create mode 100644 soggy-mistress/proto/ClientAbilityInitFinishNotify.proto create mode 100644 soggy-mistress/proto/ClientFpsStatusNotify.proto create mode 100644 soggy-mistress/proto/ClientGadgetInfo.proto create mode 100644 soggy-mistress/proto/ClientNewMailNotify.proto create mode 100644 soggy-mistress/proto/ClientPauseNotify.proto create mode 100644 soggy-mistress/proto/ClientReconnectNotify.proto create mode 100644 soggy-mistress/proto/ClientReconnectReason.proto create mode 100644 soggy-mistress/proto/ClientScriptEventNotify.proto create mode 100644 soggy-mistress/proto/ClientTransmitReq.proto create mode 100644 soggy-mistress/proto/ClientTransmitRsp.proto create mode 100644 soggy-mistress/proto/ClientTriggerEventNotify.proto create mode 100644 soggy-mistress/proto/ClientType.proto create mode 100644 soggy-mistress/proto/CmdAbilityReflection.proto create mode 100644 soggy-mistress/proto/CmdDungeonReflection.proto create mode 100644 soggy-mistress/proto/CmdFightReflection.proto create mode 100644 soggy-mistress/proto/CmdGadgetReflection.proto create mode 100644 soggy-mistress/proto/CmdItemReflection.proto create mode 100644 soggy-mistress/proto/CmdMailReflection.proto create mode 100644 soggy-mistress/proto/CmdMiscReflection.proto create mode 100644 soggy-mistress/proto/CmdMonsterReflection.proto create mode 100644 soggy-mistress/proto/CmdNpcReflection.proto create mode 100644 soggy-mistress/proto/CmdPlayerReflection.proto create mode 100644 soggy-mistress/proto/CmdPropertyReflection.proto create mode 100644 soggy-mistress/proto/CmdQuestReflection.proto create mode 100644 soggy-mistress/proto/CmdSceneReflection.proto create mode 100644 soggy-mistress/proto/CmdShopReflection.proto create mode 100644 soggy-mistress/proto/CmdSkillReflection.proto create mode 100644 soggy-mistress/proto/CompoundDataNotify.proto create mode 100644 soggy-mistress/proto/CompoundQueueData.proto create mode 100644 soggy-mistress/proto/CookDataNotify.proto create mode 100644 soggy-mistress/proto/CookGradeDataNotify.proto create mode 100644 soggy-mistress/proto/CookRecipeData.proto create mode 100644 soggy-mistress/proto/CookRecipeDataNotify.proto create mode 100644 soggy-mistress/proto/CreateEntityInfo.proto create mode 100644 soggy-mistress/proto/CreateGadgetInfo.proto create mode 100644 soggy-mistress/proto/CreateReason.proto create mode 100644 soggy-mistress/proto/CutSceneBeginNotify.proto create mode 100644 soggy-mistress/proto/CutSceneEndNotify.proto create mode 100644 soggy-mistress/proto/CutSceneFinishNotify.proto create mode 100644 soggy-mistress/proto/DataResVersionNotify.proto create mode 100644 soggy-mistress/proto/DebugNotify.proto create mode 100644 soggy-mistress/proto/DefineReflection.proto create mode 100644 soggy-mistress/proto/DelMailReq.proto create mode 100644 soggy-mistress/proto/DelMailRsp.proto create mode 100644 soggy-mistress/proto/DoSetPlayerBornDataNotify.proto create mode 100644 soggy-mistress/proto/DropHintNotify.proto create mode 100644 soggy-mistress/proto/DropItemReq.proto create mode 100644 soggy-mistress/proto/DropItemRsp.proto create mode 100644 soggy-mistress/proto/DropSubfieldReq.proto create mode 100644 soggy-mistress/proto/DropSubfieldRsp.proto create mode 100644 soggy-mistress/proto/DropSubfieldType.proto create mode 100644 soggy-mistress/proto/DungeonChallengeBeginNotify.proto create mode 100644 soggy-mistress/proto/DungeonChallengeFinishNotify.proto create mode 100644 soggy-mistress/proto/DungeonDataNotify.proto create mode 100644 soggy-mistress/proto/DungeonDataType.proto create mode 100644 soggy-mistress/proto/DungeonDieOptionReq.proto create mode 100644 soggy-mistress/proto/DungeonDieOptionRsp.proto create mode 100644 soggy-mistress/proto/DungeonEntryInfo.proto create mode 100644 soggy-mistress/proto/DungeonEntryInfoReq.proto create mode 100644 soggy-mistress/proto/DungeonEntryInfoRsp.proto create mode 100644 soggy-mistress/proto/DungeonFollowNotify.proto create mode 100644 soggy-mistress/proto/DungeonPlayerDieNotify.proto create mode 100644 soggy-mistress/proto/DungeonPlayerDieReq.proto create mode 100644 soggy-mistress/proto/DungeonPlayerDieRsp.proto create mode 100644 soggy-mistress/proto/DungeonSettleNotify.proto create mode 100644 soggy-mistress/proto/DungeonShowReminderNotify.proto create mode 100644 soggy-mistress/proto/DungeonWayPointActivateReq.proto create mode 100644 soggy-mistress/proto/DungeonWayPointActivateRsp.proto create mode 100644 soggy-mistress/proto/DungeonWayPointNotify.proto create mode 100644 soggy-mistress/proto/ENetReason.proto create mode 100644 soggy-mistress/proto/EditorReflection.proto create mode 100644 soggy-mistress/proto/EndCameraSceneLookNotify.proto create mode 100644 soggy-mistress/proto/EnterSceneDoneReq.proto create mode 100644 soggy-mistress/proto/EnterSceneDoneRsp.proto create mode 100644 soggy-mistress/proto/EnterScenePeerNotify.proto create mode 100644 soggy-mistress/proto/EnterSceneReadyReq.proto create mode 100644 soggy-mistress/proto/EnterSceneReadyRsp.proto create mode 100644 soggy-mistress/proto/EnterSceneWeatherAreaNotify.proto create mode 100644 soggy-mistress/proto/EnterTransPointRegionNotify.proto create mode 100644 soggy-mistress/proto/EnterType.proto create mode 100644 soggy-mistress/proto/EnterWorldAreaReq.proto create mode 100644 soggy-mistress/proto/EnterWorldAreaRsp.proto create mode 100644 soggy-mistress/proto/EntityAuthorityChangeNotify.proto create mode 100644 soggy-mistress/proto/EntityFightPropChangeReasonNotify.proto create mode 100644 soggy-mistress/proto/EntityFightPropNotify.proto create mode 100644 soggy-mistress/proto/EntityFightPropUpdateNotify.proto create mode 100644 soggy-mistress/proto/EntityForceSyncReq.proto create mode 100644 soggy-mistress/proto/EntityForceSyncRsp.proto create mode 100644 soggy-mistress/proto/EntityJumpNotify.proto create mode 100644 soggy-mistress/proto/EntityMoveFailInfo.proto create mode 100644 soggy-mistress/proto/EntityMoveInfo.proto create mode 100644 soggy-mistress/proto/EntityPropNotify.proto create mode 100644 soggy-mistress/proto/EntityRendererChangedInfo.proto create mode 100644 soggy-mistress/proto/Equip.proto create mode 100644 soggy-mistress/proto/EquipParam.proto create mode 100644 soggy-mistress/proto/EquipParamList.proto create mode 100644 soggy-mistress/proto/EventTriggerType.proto create mode 100644 soggy-mistress/proto/EvtAiSyncSkillCdNotify.proto create mode 100644 soggy-mistress/proto/EvtAnimatorParameterNotify.proto create mode 100644 soggy-mistress/proto/EvtAnimatorStateChangedNotify.proto create mode 100644 soggy-mistress/proto/EvtAvatarEnterFocusNotify.proto create mode 100644 soggy-mistress/proto/EvtAvatarExitFocusNotify.proto create mode 100644 soggy-mistress/proto/EvtAvatarUpdateFocusNotify.proto create mode 100644 soggy-mistress/proto/EvtBeingHitNotify.proto create mode 100644 soggy-mistress/proto/EvtBulletDeactiveNotify.proto create mode 100644 soggy-mistress/proto/EvtBulletHitNotify.proto create mode 100644 soggy-mistress/proto/EvtBulletMoveNotify.proto create mode 100644 soggy-mistress/proto/EvtCostStaminaNotify.proto create mode 100644 soggy-mistress/proto/EvtCreateGadgetNotify.proto create mode 100644 soggy-mistress/proto/EvtDestroyGadgetNotify.proto create mode 100644 soggy-mistress/proto/EvtDoSkillSuccNotify.proto create mode 100644 soggy-mistress/proto/EvtEntityRenderersChangedNotify.proto create mode 100644 soggy-mistress/proto/EvtEntityStartDieEndNotify.proto create mode 100644 soggy-mistress/proto/EvtFaceToDirNotify.proto create mode 100644 soggy-mistress/proto/EvtFaceToEntityNotify.proto create mode 100644 soggy-mistress/proto/EvtRushMoveNotify.proto create mode 100644 soggy-mistress/proto/EvtSetAttackTargetNotify.proto create mode 100644 soggy-mistress/proto/ExecuteGadgetLuaReq.proto create mode 100644 soggy-mistress/proto/ExecuteGadgetLuaRsp.proto create mode 100644 soggy-mistress/proto/ExecuteGroupTriggerReq.proto create mode 100644 soggy-mistress/proto/ExecuteGroupTriggerRsp.proto create mode 100644 soggy-mistress/proto/ExitSceneWeatherAreaNotify.proto create mode 100644 soggy-mistress/proto/ExitTransPointRegionNotify.proto create mode 100644 soggy-mistress/proto/FinishedParentQuestNotify.proto create mode 100644 soggy-mistress/proto/FinishedParentQuestUpdateNotify.proto create mode 100644 soggy-mistress/proto/ForceUpdateInfo.proto create mode 100644 soggy-mistress/proto/ForwardType.proto create mode 100644 soggy-mistress/proto/GadgetBornType.proto create mode 100644 soggy-mistress/proto/GadgetInteractReq.proto create mode 100644 soggy-mistress/proto/GadgetInteractRsp.proto create mode 100644 soggy-mistress/proto/GadgetStateNotify.proto create mode 100644 soggy-mistress/proto/GetAllMailReq.proto create mode 100644 soggy-mistress/proto/GetAllMailRsp.proto create mode 100644 soggy-mistress/proto/GetAuthkeyReq.proto create mode 100644 soggy-mistress/proto/GetAuthkeyRsp.proto create mode 100644 soggy-mistress/proto/GetCompoundDataReq.proto create mode 100644 soggy-mistress/proto/GetCompoundDataRsp.proto create mode 100644 soggy-mistress/proto/GetMailItemReq.proto create mode 100644 soggy-mistress/proto/GetMailItemRsp.proto create mode 100644 soggy-mistress/proto/GetOnlinePlayerListReq.proto create mode 100644 soggy-mistress/proto/GetOnlinePlayerListRsp.proto create mode 100644 soggy-mistress/proto/GetPlayerTokenReq.proto create mode 100644 soggy-mistress/proto/GetPlayerTokenRsp.proto create mode 100644 soggy-mistress/proto/GetQuestTalkHistoryReq.proto create mode 100644 soggy-mistress/proto/GetQuestTalkHistoryRsp.proto create mode 100644 soggy-mistress/proto/GetSceneAreaReq.proto create mode 100644 soggy-mistress/proto/GetSceneAreaRsp.proto create mode 100644 soggy-mistress/proto/GetSceneNpcPostionReq.proto create mode 100644 soggy-mistress/proto/GetSceneNpcPostionRsp.proto create mode 100644 soggy-mistress/proto/GetScenePointReq.proto create mode 100644 soggy-mistress/proto/GetScenePointRsp.proto create mode 100644 soggy-mistress/proto/GetShopReq.proto create mode 100644 soggy-mistress/proto/GetShopRsp.proto create mode 100644 soggy-mistress/proto/GmTalkReq.proto create mode 100644 soggy-mistress/proto/GmTalkRsp.proto create mode 100644 soggy-mistress/proto/GrantRewardNotify.proto create mode 100644 soggy-mistress/proto/HitClientTrivialNotify.proto create mode 100644 soggy-mistress/proto/HitColliderType.proto create mode 100644 soggy-mistress/proto/HitCollision.proto create mode 100644 soggy-mistress/proto/HostPlayerNotify.proto create mode 100644 soggy-mistress/proto/InterOpType.proto create mode 100644 soggy-mistress/proto/InteractType.proto create mode 100644 soggy-mistress/proto/Item.proto create mode 100644 soggy-mistress/proto/ItemAddHintNotify.proto create mode 100644 soggy-mistress/proto/ItemAddReasonType.proto create mode 100644 soggy-mistress/proto/ItemCdGroupTimeNotify.proto create mode 100644 soggy-mistress/proto/ItemHint.proto create mode 100644 soggy-mistress/proto/ItemParam.proto create mode 100644 soggy-mistress/proto/JoinPlayerFailNotify.proto create mode 100644 soggy-mistress/proto/JoinPlayerSceneReq.proto create mode 100644 soggy-mistress/proto/JoinPlayerSceneRsp.proto create mode 100644 soggy-mistress/proto/KeepAliveNotify.proto create mode 100644 soggy-mistress/proto/LanguageType.proto create mode 100644 soggy-mistress/proto/LeaveSceneReq.proto create mode 100644 soggy-mistress/proto/LeaveSceneRsp.proto create mode 100644 soggy-mistress/proto/LevelupCityReq.proto create mode 100644 soggy-mistress/proto/LevelupCityRsp.proto create mode 100644 soggy-mistress/proto/LifeStateChangeNotify.proto create mode 100644 soggy-mistress/proto/LogCutsceneNotify.proto create mode 100644 soggy-mistress/proto/LogTalkNotify.proto create mode 100644 soggy-mistress/proto/LoginRewardConfigType.proto create mode 100644 soggy-mistress/proto/MailChangeNotify.proto create mode 100644 soggy-mistress/proto/MailData.proto create mode 100644 soggy-mistress/proto/MailTextContent.proto create mode 100644 soggy-mistress/proto/MapInfo.proto create mode 100644 soggy-mistress/proto/MarkEntityInMinMapNotify.proto create mode 100644 soggy-mistress/proto/Material.proto create mode 100644 soggy-mistress/proto/MathExpressionType.proto create mode 100644 soggy-mistress/proto/ModifierAction.proto create mode 100644 soggy-mistress/proto/ModifierProperty.proto create mode 100644 soggy-mistress/proto/MonsterAlertChangeNotify.proto create mode 100644 soggy-mistress/proto/MonsterBornType.proto create mode 100644 soggy-mistress/proto/MonsterForceAiNotify.proto create mode 100644 soggy-mistress/proto/MonsterForceAlertNotify.proto create mode 100644 soggy-mistress/proto/MonsterSummonTagNotify.proto create mode 100644 soggy-mistress/proto/MotionInfo.proto create mode 100644 soggy-mistress/proto/MotionState.proto create mode 100644 soggy-mistress/proto/MsgParam.proto create mode 100644 soggy-mistress/proto/NpcPostionInfo.proto create mode 100644 soggy-mistress/proto/NpcTalkInfo.proto create mode 100644 soggy-mistress/proto/NpcTalkReq.proto create mode 100644 soggy-mistress/proto/NpcTalkRsp.proto create mode 100644 soggy-mistress/proto/NpcTalkState.proto create mode 100644 soggy-mistress/proto/NpcTalkStateNotify.proto create mode 100644 soggy-mistress/proto/NpcTalkType.proto create mode 100644 soggy-mistress/proto/OnlinePlayerInfo.proto create mode 100644 soggy-mistress/proto/OnlinePlayerState.proto create mode 100644 soggy-mistress/proto/OpenStateChangeNotify.proto create mode 100644 soggy-mistress/proto/OpenStateUpdateNotify.proto create mode 100644 soggy-mistress/proto/PacketHead.proto create mode 100644 soggy-mistress/proto/PacketHeadReflection.proto create mode 100644 soggy-mistress/proto/ParamList.proto create mode 100644 soggy-mistress/proto/ParentQuest.proto create mode 100644 soggy-mistress/proto/ParentQuestRandomInfo.proto create mode 100644 soggy-mistress/proto/PersonalSceneJumpReq.proto create mode 100644 soggy-mistress/proto/PersonalSceneJumpRsp.proto create mode 100644 soggy-mistress/proto/PingReq.proto create mode 100644 soggy-mistress/proto/PingRsp.proto create mode 100644 soggy-mistress/proto/PlaceInfo.proto create mode 100644 soggy-mistress/proto/PlatformChangeRouteNotify.proto create mode 100644 soggy-mistress/proto/PlatformInfo.proto create mode 100644 soggy-mistress/proto/PlatformStartRouteNotify.proto create mode 100644 soggy-mistress/proto/PlatformStopRouteNotify.proto create mode 100644 soggy-mistress/proto/PlayerCompoundMaterialReq.proto create mode 100644 soggy-mistress/proto/PlayerCompoundMaterialRsp.proto create mode 100644 soggy-mistress/proto/PlayerCookReq.proto create mode 100644 soggy-mistress/proto/PlayerCookRsp.proto create mode 100644 soggy-mistress/proto/PlayerDataNotify.proto create mode 100644 soggy-mistress/proto/PlayerDieOption.proto create mode 100644 soggy-mistress/proto/PlayerDieType.proto create mode 100644 soggy-mistress/proto/PlayerEnterDungeonReq.proto create mode 100644 soggy-mistress/proto/PlayerEnterDungeonRsp.proto create mode 100644 soggy-mistress/proto/PlayerEnterSceneInfoNotify.proto create mode 100644 soggy-mistress/proto/PlayerEnterSceneNotify.proto create mode 100644 soggy-mistress/proto/PlayerGameTimeNotify.proto create mode 100644 soggy-mistress/proto/PlayerLocationInfo.proto create mode 100644 soggy-mistress/proto/PlayerLoginReq.proto create mode 100644 soggy-mistress/proto/PlayerLoginRsp.proto create mode 100644 soggy-mistress/proto/PlayerLogoutNotify.proto create mode 100644 soggy-mistress/proto/PlayerLogoutReq.proto create mode 100644 soggy-mistress/proto/PlayerLogoutRsp.proto create mode 100644 soggy-mistress/proto/PlayerPropChangeNotify.proto create mode 100644 soggy-mistress/proto/PlayerPropChangeReasonNotify.proto create mode 100644 soggy-mistress/proto/PlayerPropNotify.proto create mode 100644 soggy-mistress/proto/PlayerQuitDungeonReq.proto create mode 100644 soggy-mistress/proto/PlayerQuitDungeonRsp.proto create mode 100644 soggy-mistress/proto/PlayerRandomCookReq.proto create mode 100644 soggy-mistress/proto/PlayerRandomCookRsp.proto create mode 100644 soggy-mistress/proto/PlayerSetLanguageReq.proto create mode 100644 soggy-mistress/proto/PlayerSetLanguageRsp.proto create mode 100644 soggy-mistress/proto/PlayerSetPauseReq.proto create mode 100644 soggy-mistress/proto/PlayerSetPauseRsp.proto create mode 100644 soggy-mistress/proto/PlayerStoreNotify.proto create mode 100644 soggy-mistress/proto/PlayerTimeNotify.proto create mode 100644 soggy-mistress/proto/PropChangeReason.proto create mode 100644 soggy-mistress/proto/PropValue.proto create mode 100644 soggy-mistress/proto/ProtEntityType.proto create mode 100644 soggy-mistress/proto/QueryCurrRegionHttpRsp.proto create mode 100644 soggy-mistress/proto/QueryRegionListHttpRsp.proto create mode 100644 soggy-mistress/proto/Quest.proto create mode 100644 soggy-mistress/proto/QuestCreateEntityReq.proto create mode 100644 soggy-mistress/proto/QuestCreateEntityRsp.proto create mode 100644 soggy-mistress/proto/QuestDelNotify.proto create mode 100644 soggy-mistress/proto/QuestDestroyEntityReq.proto create mode 100644 soggy-mistress/proto/QuestDestroyEntityRsp.proto create mode 100644 soggy-mistress/proto/QuestListNotify.proto create mode 100644 soggy-mistress/proto/QuestListUpdateNotify.proto create mode 100644 soggy-mistress/proto/ReadMailNotify.proto create mode 100644 soggy-mistress/proto/RefreshBackgroundAvatarReq.proto create mode 100644 soggy-mistress/proto/RefreshBackgroundAvatarRsp.proto create mode 100644 soggy-mistress/proto/RegionInfo.proto create mode 100644 soggy-mistress/proto/RegionSimpleInfo.proto create mode 100644 soggy-mistress/proto/RegionType.proto create mode 100644 soggy-mistress/proto/Reliquary.proto create mode 100644 soggy-mistress/proto/ReliquaryPromoteReq.proto create mode 100644 soggy-mistress/proto/ReliquaryPromoteRsp.proto create mode 100644 soggy-mistress/proto/ReliquaryUpgradeReq.proto create mode 100644 soggy-mistress/proto/ReliquaryUpgradeRsp.proto create mode 100644 soggy-mistress/proto/Retcode.proto create mode 100644 soggy-mistress/proto/RetcodeReflection.proto create mode 100644 soggy-mistress/proto/Reward.proto create mode 100644 soggy-mistress/proto/RoutePointChangeInfo.proto create mode 100644 soggy-mistress/proto/SceneAreaExploreNotify.proto create mode 100644 soggy-mistress/proto/SceneAreaUnlockNotify.proto create mode 100644 soggy-mistress/proto/SceneAreaWeatherNotify.proto create mode 100644 soggy-mistress/proto/SceneAvatarInfo.proto create mode 100644 soggy-mistress/proto/SceneAvatarStaminaStepReq.proto create mode 100644 soggy-mistress/proto/SceneAvatarStaminaStepRsp.proto create mode 100644 soggy-mistress/proto/SceneCreateEntityReq.proto create mode 100644 soggy-mistress/proto/SceneCreateEntityRsp.proto create mode 100644 soggy-mistress/proto/SceneDestroyEntityReq.proto create mode 100644 soggy-mistress/proto/SceneDestroyEntityRsp.proto create mode 100644 soggy-mistress/proto/SceneEntitiesMovesNotify.proto create mode 100644 soggy-mistress/proto/SceneEntitiesMovesReq.proto create mode 100644 soggy-mistress/proto/SceneEntitiesMovesRsp.proto create mode 100644 soggy-mistress/proto/SceneEntityAiInfo.proto create mode 100644 soggy-mistress/proto/SceneEntityAppearNotify.proto create mode 100644 soggy-mistress/proto/SceneEntityDisappearNotify.proto create mode 100644 soggy-mistress/proto/SceneEntityDrownReq.proto create mode 100644 soggy-mistress/proto/SceneEntityDrownRsp.proto create mode 100644 soggy-mistress/proto/SceneEntityInfo.proto create mode 100644 soggy-mistress/proto/SceneEntityMoveNotify.proto create mode 100644 soggy-mistress/proto/SceneEntityMoveReq.proto create mode 100644 soggy-mistress/proto/SceneEntityMoveRsp.proto create mode 100644 soggy-mistress/proto/SceneForceLockNotify.proto create mode 100644 soggy-mistress/proto/SceneForceUnlockNotify.proto create mode 100644 soggy-mistress/proto/SceneGadgetInfo.proto create mode 100644 soggy-mistress/proto/SceneGetAreaExplorePercentReq.proto create mode 100644 soggy-mistress/proto/SceneGetAreaExplorePercentRsp.proto create mode 100644 soggy-mistress/proto/SceneInitFinishReq.proto create mode 100644 soggy-mistress/proto/SceneInitFinishRsp.proto create mode 100644 soggy-mistress/proto/SceneKickPlayerNotify.proto create mode 100644 soggy-mistress/proto/SceneKickPlayerReq.proto create mode 100644 soggy-mistress/proto/SceneKickPlayerRsp.proto create mode 100644 soggy-mistress/proto/SceneMonsterInfo.proto create mode 100644 soggy-mistress/proto/SceneNpcInfo.proto create mode 100644 soggy-mistress/proto/ScenePlayerInfo.proto create mode 100644 soggy-mistress/proto/ScenePlayerInfoNotify.proto create mode 100644 soggy-mistress/proto/ScenePlayerLocationNotify.proto create mode 100644 soggy-mistress/proto/ScenePlayerSoundNotify.proto create mode 100644 soggy-mistress/proto/ScenePointUnlockNotify.proto create mode 100644 soggy-mistress/proto/SceneReliquaryInfo.proto create mode 100644 soggy-mistress/proto/SceneRouteChangeInfo.proto create mode 100644 soggy-mistress/proto/SceneRouteChangeNotify.proto create mode 100644 soggy-mistress/proto/SceneSurfaceMaterial.proto create mode 100644 soggy-mistress/proto/SceneTimeNotify.proto create mode 100644 soggy-mistress/proto/SceneTransToPointReq.proto create mode 100644 soggy-mistress/proto/SceneTransToPointRsp.proto create mode 100644 soggy-mistress/proto/SceneWeaponInfo.proto create mode 100644 soggy-mistress/proto/SealBattleBeginNotify.proto create mode 100644 soggy-mistress/proto/SealBattleEndNotify.proto create mode 100644 soggy-mistress/proto/SealBattleProgressNotify.proto create mode 100644 soggy-mistress/proto/SealBattleType.proto create mode 100644 soggy-mistress/proto/SeeMonsterReq.proto create mode 100644 soggy-mistress/proto/SeeMonsterRsp.proto create mode 100644 soggy-mistress/proto/SelectWorktopOptionReq.proto create mode 100644 soggy-mistress/proto/SelectWorktopOptionRsp.proto create mode 100644 soggy-mistress/proto/ServerLogLevel.proto create mode 100644 soggy-mistress/proto/ServerLogNotify.proto create mode 100644 soggy-mistress/proto/ServerLogType.proto create mode 100644 soggy-mistress/proto/ServerTimeNotify.proto create mode 100644 soggy-mistress/proto/ServiceType.proto create mode 100644 soggy-mistress/proto/SetOpenStateReq.proto create mode 100644 soggy-mistress/proto/SetOpenStateRsp.proto create mode 100644 soggy-mistress/proto/SetPlayerBornDataReq.proto create mode 100644 soggy-mistress/proto/SetPlayerBornDataRsp.proto create mode 100644 soggy-mistress/proto/SetPlayerNameReq.proto create mode 100644 soggy-mistress/proto/SetPlayerNameRsp.proto create mode 100644 soggy-mistress/proto/SetPlayerPropReq.proto create mode 100644 soggy-mistress/proto/SetPlayerPropRsp.proto create mode 100644 soggy-mistress/proto/SetSceneWeatherAreaReq.proto create mode 100644 soggy-mistress/proto/SetSceneWeatherAreaRsp.proto create mode 100644 soggy-mistress/proto/SetUpAvatarTeamReq.proto create mode 100644 soggy-mistress/proto/SetUpAvatarTeamRsp.proto create mode 100644 soggy-mistress/proto/Shop.proto create mode 100644 soggy-mistress/proto/ShopGoods.proto create mode 100644 soggy-mistress/proto/ShowMessageNotify.proto create mode 100644 soggy-mistress/proto/SpringUseReq.proto create mode 100644 soggy-mistress/proto/SpringUseRsp.proto create mode 100644 soggy-mistress/proto/StopServerInfo.proto create mode 100644 soggy-mistress/proto/StoreItemChangeNotify.proto create mode 100644 soggy-mistress/proto/StoreItemDelNotify.proto create mode 100644 soggy-mistress/proto/StoreType.proto create mode 100644 soggy-mistress/proto/StoreWeightLimitNotify.proto create mode 100644 soggy-mistress/proto/SvrMsgId.proto create mode 100644 soggy-mistress/proto/TakeCompoundOutputReq.proto create mode 100644 soggy-mistress/proto/TakeCompoundOutputRsp.proto create mode 100644 soggy-mistress/proto/TakeoffEquipReq.proto create mode 100644 soggy-mistress/proto/TakeoffEquipRsp.proto create mode 100644 soggy-mistress/proto/TeamEnterSceneInfo.proto create mode 100644 soggy-mistress/proto/TransmitReason.proto create mode 100644 soggy-mistress/proto/TrialAvatarInfo.proto create mode 100644 soggy-mistress/proto/TriggerCreateGadgetToEquipPartNotify.proto create mode 100644 soggy-mistress/proto/UnlockAvatarTalentReq.proto create mode 100644 soggy-mistress/proto/UnlockAvatarTalentRsp.proto create mode 100644 soggy-mistress/proto/UnlockTransPointReq.proto create mode 100644 soggy-mistress/proto/UnlockTransPointRsp.proto create mode 100644 soggy-mistress/proto/UnmarkEntityInMinMapNotify.proto create mode 100644 soggy-mistress/proto/UseItemReq.proto create mode 100644 soggy-mistress/proto/UseItemRsp.proto create mode 100644 soggy-mistress/proto/Vector.proto create mode 100644 soggy-mistress/proto/VirtualItem.proto create mode 100644 soggy-mistress/proto/VisionType.proto create mode 100644 soggy-mistress/proto/Weapon.proto create mode 100644 soggy-mistress/proto/WeaponAwakenReq.proto create mode 100644 soggy-mistress/proto/WeaponAwakenRsp.proto create mode 100644 soggy-mistress/proto/WeaponPromoteReq.proto create mode 100644 soggy-mistress/proto/WeaponPromoteRsp.proto create mode 100644 soggy-mistress/proto/WeaponUpgradeReq.proto create mode 100644 soggy-mistress/proto/WeaponUpgradeRsp.proto create mode 100644 soggy-mistress/proto/WearEquipReq.proto create mode 100644 soggy-mistress/proto/WearEquipRsp.proto create mode 100644 soggy-mistress/proto/WeatherInfo.proto create mode 100644 soggy-mistress/proto/WorktopInfo.proto create mode 100644 soggy-mistress/proto/WorktopOptionNotify.proto create mode 100644 soggy-mistress/proto/WorldPlayerDieNotify.proto create mode 100644 soggy-mistress/proto/WorldPlayerReviveReq.proto create mode 100644 soggy-mistress/proto/WorldPlayerReviveRsp.proto create mode 100644 soggy-mistress/proto/cmdids.csv create mode 100644 soggy-mistress/src/game_data.cpp create mode 100644 soggy-mistress/src/game_data.hpp create mode 100644 soggy-mistress/src/game_enums.hpp create mode 100644 soggy-mistress/src/log.cpp create mode 100644 soggy-mistress/src/log.hpp create mode 100644 soggy-mistress/src/packet.cpp create mode 100644 soggy-mistress/src/packet.hpp create mode 100644 soggy-mistress/src/soggy.cpp create mode 100644 soggy-mistress/src/vec.hpp create mode 100644 soggy-mistress/tool/cmdids_processor.cpp create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene1011_1011_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene20000_20000_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene20007_20007_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene20018_20018_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene3_3001_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene3_3002_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene3_3003_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene3_3004_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene3_3005_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene3_3007_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene50002_50002_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene50004_50004_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/ActionPoints/scene50005_50005_actionpoints.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1001_block1001_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1005_block1005_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1006_block1006_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1010_block1010_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1011_block1011_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1012_block1012_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene1013_block1013_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20000_block20000_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20001_block20001_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20002_block20002_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20003_block20003_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20005_block20005_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20007_block20007_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20008_block20008_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20009_block20009_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20010_block20010_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20011_block20011_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20012_block20012_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20013_block20013_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20014_block20014_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20015_block20015_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20016_block20016_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20017_block20017_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20018_block20018_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20019_block20019_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene20021_block20021_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene30002_block30002_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene30003_block30003_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene3_block3001_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene3_block3002_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene3_block3003_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene3_block3004_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene3_block3005_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene3_block3007_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene40001_block40001_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene40004_block40004_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene40007_block40007_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene50001_block50001_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene50002_block50002_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene50003_block50003_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene50004_block50004_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Gadgets/scene50005_block50005_levelgadgets.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1006_block1006_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1007_block1007_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1008_block1008_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1009_block1009_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1010_block1010_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1011_block1011_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1012_block1012_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1013_block1013_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene1015_block1015_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20000_block20000_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20002_block20002_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20003_block20003_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20004_block20004_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20005_block20005_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20006_block20006_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20007_block20007_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20008_block20008_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20009_block20009_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20010_block20010_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20011_block20011_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20012_block20012_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20013_block20013_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20014_block20014_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20015_block20015_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20016_block20016_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20017_block20017_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20018_block20018_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20019_block20019_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20020_block20020_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene20021_block20021_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene30001_block30001_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene30002_block30002_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene30003_block30003_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene3_block3001_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene3_block3002_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene3_block3003_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene3_block3004_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene3_block3005_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene3_block3007_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene40001_block40001_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene40002_block40002_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene40003_block40003_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene40004_block40004_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene40006_block40006_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene40007_block40007_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene50001_block50001_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene50002_block50002_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene50003_block50003_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene50004_block50004_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Monsters/scene50005_block50005_levelmonsters.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1001_1001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1003_1003_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1004_1004_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1005_1005_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1006_1006_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1007_1007_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1008_1008_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1009_1009_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1010_1010_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1011_1011_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene1012_1012_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20000_20000_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20001_20001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20002_20002_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20003_20003_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20004_20004_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20005_20005_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20006_20006_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20007_20007_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20008_20008_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20009_20009_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20010_20010_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20011_20011_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20012_20012_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20013_20013_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20014_20014_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20015_20015_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20016_20016_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20019_20019_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene20021_20021_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene30001_30001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene30002_30002_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene30003_30003_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene3_3001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene3_3002_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene3_3003_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene3_3004_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene3_3005_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene3_3007_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40001_40001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40002_40002_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40003_40003_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40004_40004_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40005_40005_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40006_40006_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene40007_40007_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene50001_50001_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene50002_50002_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene50004_50004_routes.json create mode 100644 soggy_resources/binoutput/LevelDesign/Routes/scene50005_50005_routes.json create mode 100644 soggy_resources/binoutput/Scene/LevelLayout/scene3_levelLayout.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1001_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1002_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1004_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1005_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1006_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1007_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1008_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1010_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1011_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1013_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene1_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20000_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20001_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20002_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20003_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20004_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20006_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20007_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20008_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20009_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20012_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20013_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20014_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20015_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20016_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20018_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene20021_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene30001_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene30002_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene30003_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene3_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene40002_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene40003_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene40004_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene40005_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene40006_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene40007_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene50000_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene50001_point.json create mode 100644 soggy_resources/binoutput/Scene/Point/scene50003_point.json create mode 100644 soggy_resources/exceloutput/AffixData.tsv create mode 100644 soggy_resources/exceloutput/AffixPropData.tsv create mode 100644 soggy_resources/exceloutput/AvatarBreakData.tsv create mode 100644 soggy_resources/exceloutput/AvatarCardChangeData.tsv create mode 100644 soggy_resources/exceloutput/AvatarCurveData.tsv create mode 100644 soggy_resources/exceloutput/AvatarData.tsv create mode 100644 soggy_resources/exceloutput/AvatarLevelData.tsv create mode 100644 soggy_resources/exceloutput/AvatarPromoteData.tsv create mode 100644 soggy_resources/exceloutput/AvatarSkillData.tsv create mode 100644 soggy_resources/exceloutput/AvatarSkillDepotData.tsv create mode 100644 soggy_resources/exceloutput/BoredActionPriority.tsv create mode 100644 soggy_resources/exceloutput/BoredCreateMonster.tsv create mode 100644 soggy_resources/exceloutput/BoredEvent.tsv create mode 100644 soggy_resources/exceloutput/BoredMonsterPool.tsv create mode 100644 soggy_resources/exceloutput/BuffData.tsv create mode 100644 soggy_resources/exceloutput/CampData.tsv create mode 100644 soggy_resources/exceloutput/ChapterData.tsv create mode 100644 soggy_resources/exceloutput/CityData.tsv create mode 100644 soggy_resources/exceloutput/CityLevelUpData.tsv create mode 100644 soggy_resources/exceloutput/CompoundData.tsv create mode 100644 soggy_resources/exceloutput/ConstValueData.tsv create mode 100644 soggy_resources/exceloutput/CookBonusData.tsv create mode 100644 soggy_resources/exceloutput/CookRecipeData.tsv create mode 100644 soggy_resources/exceloutput/CutsceneData.tsv create mode 100644 soggy_resources/exceloutput/DialogData.tsv create mode 100644 soggy_resources/exceloutput/DieTypeTipsData.tsv create mode 100644 soggy_resources/exceloutput/DocumentData.tsv create mode 100644 soggy_resources/exceloutput/DropLeafData.tsv create mode 100644 soggy_resources/exceloutput/DropSubfieldData.tsv create mode 100644 soggy_resources/exceloutput/DropTreeData.tsv create mode 100644 soggy_resources/exceloutput/DungeonChallengeData.tsv create mode 100644 soggy_resources/exceloutput/DungeonData.tsv create mode 100644 soggy_resources/exceloutput/DungeonPassData.tsv create mode 100644 soggy_resources/exceloutput/DungeonPreviewData.tsv create mode 100644 soggy_resources/exceloutput/DungeonReminderData.tsv create mode 100644 soggy_resources/exceloutput/ElementCoeff.tsv create mode 100644 soggy_resources/exceloutput/ElementData.tsv create mode 100644 soggy_resources/exceloutput/ElementStateData.tsv create mode 100644 soggy_resources/exceloutput/EmbeddedTextMapData.tsv create mode 100644 soggy_resources/exceloutput/EndureTemplateData.tsv create mode 100644 soggy_resources/exceloutput/EntityDropSubfieldData.tsv create mode 100644 soggy_resources/exceloutput/EnvAnimalGather.tsv create mode 100644 soggy_resources/exceloutput/EnvAnimalRefreshNum.tsv create mode 100644 soggy_resources/exceloutput/EnvAnimalWeight.tsv create mode 100644 soggy_resources/exceloutput/EquipAffixData.tsv create mode 100644 soggy_resources/exceloutput/EquipCurveData.tsv create mode 100644 soggy_resources/exceloutput/EquipData.tsv create mode 100644 soggy_resources/exceloutput/EquipLevelData.tsv create mode 100644 soggy_resources/exceloutput/EquipPropData.tsv create mode 100644 soggy_resources/exceloutput/EquipRatioData.tsv create mode 100644 soggy_resources/exceloutput/EquipStarData.tsv create mode 100644 soggy_resources/exceloutput/GadgetCurveData.tsv create mode 100644 soggy_resources/exceloutput/GadgetData.tsv create mode 100644 soggy_resources/exceloutput/GadgetData_Avatar.tsv create mode 100644 soggy_resources/exceloutput/GadgetData_Equip.tsv create mode 100644 soggy_resources/exceloutput/GadgetData_Level.tsv create mode 100644 soggy_resources/exceloutput/GadgetData_Monster.tsv create mode 100644 soggy_resources/exceloutput/GadgetPropData.tsv create mode 100644 soggy_resources/exceloutput/GadgetRadarHint.tsv create mode 100644 soggy_resources/exceloutput/GatherBundleData.tsv create mode 100644 soggy_resources/exceloutput/GatherData.tsv create mode 100644 soggy_resources/exceloutput/GroupData.tsv create mode 100644 soggy_resources/exceloutput/HardLevelData.tsv create mode 100644 soggy_resources/exceloutput/LevelSuppressData.tsv create mode 100644 soggy_resources/exceloutput/LocalizationData.tsv create mode 100644 soggy_resources/exceloutput/MainQuestData.tsv create mode 100644 soggy_resources/exceloutput/MaterialData.tsv create mode 100644 soggy_resources/exceloutput/ModifierPropData.tsv create mode 100644 soggy_resources/exceloutput/MonsterAffixData.tsv create mode 100644 soggy_resources/exceloutput/MonsterCurveData.tsv create mode 100644 soggy_resources/exceloutput/MonsterData.tsv create mode 100644 soggy_resources/exceloutput/MonsterInstruction.tsv create mode 100644 soggy_resources/exceloutput/NpcData.tsv create mode 100644 soggy_resources/exceloutput/OpenStateData.tsv create mode 100644 soggy_resources/exceloutput/OptionData.tsv create mode 100644 soggy_resources/exceloutput/PlayerLevelData.tsv create mode 100644 soggy_resources/exceloutput/QuestData.tsv create mode 100644 soggy_resources/exceloutput/ReactionEnergyData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryAffixData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryCurveData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryLevelData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryMainData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryPowerupData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryPromotionData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryPropData.tsv create mode 100644 soggy_resources/exceloutput/ReliquarySetData.tsv create mode 100644 soggy_resources/exceloutput/ReliquaryStarData.tsv create mode 100644 soggy_resources/exceloutput/ReminderData.tsv create mode 100644 soggy_resources/exceloutput/RewardData.tsv create mode 100644 soggy_resources/exceloutput/RoomData.tsv create mode 100644 soggy_resources/exceloutput/RqEntranceData.tsv create mode 100644 soggy_resources/exceloutput/RqFactorData.tsv create mode 100644 soggy_resources/exceloutput/RqMainQuestData.tsv create mode 100644 soggy_resources/exceloutput/RqQuestData.tsv create mode 100644 soggy_resources/exceloutput/RqTemplateData.tsv create mode 100644 soggy_resources/exceloutput/SceneData.tsv create mode 100644 soggy_resources/exceloutput/SensitiveWordData.tsv create mode 100644 soggy_resources/exceloutput/ShopData.tsv create mode 100644 soggy_resources/exceloutput/ShopGoodsData.tsv create mode 100644 soggy_resources/exceloutput/ShopPlanData.tsv create mode 100644 soggy_resources/exceloutput/StateData.tsv create mode 100644 soggy_resources/exceloutput/TalentSkillData.tsv create mode 100644 soggy_resources/exceloutput/TalkData.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_ChaData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_DialogueData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_EmbeddedData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_EntityData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_EquipData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_InfoData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_Total_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_UIData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_UniqueData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHS/TextMap_WorldData_CHS.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_ChaData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_DialogueData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_EmbeddedData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_EntityData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_EquipData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_InfoData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_Total_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_UIData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_UniqueData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/CHT/TextMap_WorldData_CHT.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_ChaData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_DialogueData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_EmbeddedData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_EntityData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_EquipData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_InfoData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_Total_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_UIData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_UniqueData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/ENG/TextMap_WorldData_ENG.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_ChaData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_DialogueData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_EmbeddedData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_EntityData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_EquipData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_InfoData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_Total_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_UIData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_UniqueData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMap/KOR/TextMap_WorldData_KOR.tsv create mode 100644 soggy_resources/exceloutput/TextMapData.tsv create mode 100644 soggy_resources/exceloutput/TextMapMsgData.tsv create mode 100644 soggy_resources/exceloutput/TextMapRetData.tsv create mode 100644 soggy_resources/exceloutput/TextMapUIStcData.tsv create mode 100644 soggy_resources/exceloutput/TransPointReward.tsv create mode 100644 soggy_resources/exceloutput/TrialAvatarData.tsv create mode 100644 soggy_resources/exceloutput/TrialReliquaryData.tsv create mode 100644 soggy_resources/exceloutput/TriggerData.tsv create mode 100644 soggy_resources/exceloutput/TutorialData.tsv create mode 100644 soggy_resources/exceloutput/TutorialDetailData.tsv create mode 100644 soggy_resources/exceloutput/WeaponAwakeningData.tsv create mode 100644 soggy_resources/exceloutput/WeaponBreakData.tsv create mode 100644 soggy_resources/exceloutput/WeaponCurveData.tsv create mode 100644 soggy_resources/exceloutput/WeaponData.tsv create mode 100644 soggy_resources/exceloutput/WeaponLevelData.tsv create mode 100644 soggy_resources/exceloutput/WeaponPromoteData.tsv create mode 100644 soggy_resources/exceloutput/WeatherData.tsv create mode 100644 soggy_resources/exceloutput/WorldAreaData.tsv create mode 100644 soggy_resources/exceloutput/WorldAreaExploreEventData.tsv create mode 100644 soggy_resources/exceloutput/WorldAreaLevelUpData.tsv create mode 100644 soggy_resources/exceloutput/WorldReminderData.tsv create mode 100644 soggy_resources/lua/Actor/ActorCommon.lua create mode 100644 soggy_resources/lua/Actor/ActorData.lua create mode 100644 soggy_resources/lua/Actor/ActorManager.lua create mode 100644 soggy_resources/lua/Actor/BaseActorMode.lua create mode 100644 soggy_resources/lua/Actor/BaseActorProxy.lua create mode 100644 soggy_resources/lua/Actor/ConfigCommon.lua create mode 100644 soggy_resources/lua/Actor/Cutscene/CutsceneActorProxy.lua create mode 100644 soggy_resources/lua/Actor/Cutscene/CutsceneActor_Goddess1201.lua create mode 100644 soggy_resources/lua/Actor/Cutscene/CutsceneActor_GoddessLvup.lua create mode 100644 soggy_resources/lua/Actor/Cutscene/CutsceneActor_GoddessUpgrade_01.lua create mode 100644 soggy_resources/lua/Actor/Cutscene/TestCutsceneActor.lua create mode 100644 soggy_resources/lua/Actor/DailyNPCManager.lua create mode 100644 soggy_resources/lua/Actor/DummyActorProxy.lua create mode 100644 soggy_resources/lua/Actor/EntityActorProxy.lua create mode 100644 soggy_resources/lua/Actor/Gadget/AirflowFieldActor.lua create mode 100644 soggy_resources/lua/Actor/Gadget/CoinTest.lua create mode 100644 soggy_resources/lua/Actor/Gadget/DragonTrigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GadgetActorProxy.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GadgetFactory.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GoalMarker404.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GoalMarker405.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GoalMarker408.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GoalMarker409.lua create mode 100644 soggy_resources/lua/Actor/Gadget/GoalMarkerAS.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q351Trigger1.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q353Trigger1.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q353Trigger2.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q354Trigger1.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q371Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q377Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q378Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q380TriggerArea.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q381Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q382Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q384Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q384TriggerSP.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q395Trigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q427FlyCoins.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q427FlyCoins2.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q466Trigger1.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q466Trigger2.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q466Trigger3.lua create mode 100644 soggy_resources/lua/Actor/Gadget/Q466Trigger4.lua create mode 100644 soggy_resources/lua/Actor/Gadget/QuestArea.lua create mode 100644 soggy_resources/lua/Actor/Gadget/RunCoinStart.lua create mode 100644 soggy_resources/lua/Actor/Gadget/SneakTreasure.lua create mode 100644 soggy_resources/lua/Actor/Gadget/TriggerTest.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WalkArea.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WendyTrackTrigger.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WendyTrackTriggersp.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WendyTrackTriggersp1.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WendyTrackTriggersp2.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WendyTrackTriggersp3.lua create mode 100644 soggy_resources/lua/Actor/Gadget/WendyTrackTriggersp4.lua create mode 100644 soggy_resources/lua/Actor/GlobalActorConfig.lua create mode 100644 soggy_resources/lua/Actor/GlobalActorProxy.lua create mode 100644 soggy_resources/lua/Actor/InterLua/Q304Feather.lua create mode 100644 soggy_resources/lua/Actor/InterLua/Q305Knight.lua create mode 100644 soggy_resources/lua/Actor/InterLua/Q353Slime.lua create mode 100644 soggy_resources/lua/Actor/InterLua/Q370SDragonTears.lua create mode 100644 soggy_resources/lua/Actor/InterLua/Q37604.lua create mode 100644 soggy_resources/lua/Actor/InterLua/Q414_41400.lua create mode 100644 soggy_resources/lua/Actor/InterLua/TempPreview.lua create mode 100644 soggy_resources/lua/Actor/Interaction/InteractionActorProxy.lua create mode 100644 soggy_resources/lua/Actor/Interaction/TestInteractionActor.lua create mode 100644 soggy_resources/lua/Actor/Npc/BaseDailyNpc.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeDayPatrol.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeDaySit.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeDayStand.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeInsomniaPatrol.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeInsomniaStand.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeNightConfuse.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeNightSit.lua create mode 100644 soggy_resources/lua/Actor/Npc/Config/CfgMengdeNightStand.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe01.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe02.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe03.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe04.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe05.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe06.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe07.lua create mode 100644 soggy_resources/lua/Actor/Npc/JohnDoe08.lua create mode 100644 soggy_resources/lua/Actor/Npc/MengdeSample01.lua create mode 100644 soggy_resources/lua/Actor/Npc/MengdeSample02.lua create mode 100644 soggy_resources/lua/Actor/Npc/MengdeSample03.lua create mode 100644 soggy_resources/lua/Actor/Npc/MengdeSample04.lua create mode 100644 soggy_resources/lua/Actor/Npc/MengdeSample05.lua create mode 100644 soggy_resources/lua/Actor/Npc/NPCEventType.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcActorProxy.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcDailyCommon.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeDayPatrol.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeDaySit.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeDayStand.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeInsomniaPatrol.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeInsomniaStand.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeNightConfuse.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeNightSit.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMengdeNightStand.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMode/NpcModeType.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMode/NpcMode_BanDaily.lua create mode 100644 soggy_resources/lua/Actor/Npc/NpcMode/NpcMode_MengdeHide.lua create mode 100644 soggy_resources/lua/Actor/Npc/Razor.lua create mode 100644 soggy_resources/lua/Actor/Npc/RazorFarmer.lua create mode 100644 soggy_resources/lua/Actor/Npc/RazorWolfBoss.lua create mode 100644 soggy_resources/lua/Actor/Npc/RazorWolfWound.lua create mode 100644 soggy_resources/lua/Actor/Npc/SneakAI.lua create mode 100644 soggy_resources/lua/Actor/Npc/SneakAdvAI.lua create mode 100644 soggy_resources/lua/Actor/Npc/SneakBlackDoor.lua create mode 100644 soggy_resources/lua/Actor/Npc/SneakJudge.lua create mode 100644 soggy_resources/lua/Actor/Npc/SneakRedDoor.lua create mode 100644 soggy_resources/lua/Actor/Npc/Soilder01.lua create mode 100644 soggy_resources/lua/Actor/Npc/Soilder02.lua create mode 100644 soggy_resources/lua/Actor/Npc/StoreKeeper01.lua create mode 100644 soggy_resources/lua/Actor/Npc/StoreKeeper02.lua create mode 100644 soggy_resources/lua/Actor/Npc/StoreKeeper03.lua create mode 100644 soggy_resources/lua/Actor/Npc/StoreKeeper04.lua create mode 100644 soggy_resources/lua/Actor/Npc/TempNPC.lua create mode 100644 soggy_resources/lua/Actor/Npc/TempNpcActor.lua create mode 100644 soggy_resources/lua/Actor/Npc/Test9001.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ306.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ307.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ308.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ309.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ311.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ350.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ351.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ352.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ353.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ354.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ355.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ356.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ357.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ358.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ359.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ360.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ361.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ501.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ502.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ503.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ504.lua create mode 100644 soggy_resources/lua/Actor/Quest/AQ505.lua create mode 100644 soggy_resources/lua/Actor/Quest/IQ467.lua create mode 100644 soggy_resources/lua/Actor/Quest/IQ468.lua create mode 100644 soggy_resources/lua/Actor/Quest/IQ469.lua create mode 100644 soggy_resources/lua/Actor/Quest/IQ470.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ451.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ452.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ453.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ454.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ461.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ462.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ463.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ464.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ465.lua create mode 100644 soggy_resources/lua/Actor/Quest/LQ466.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ301.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ303.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ304.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ305.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ362.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ370.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ371.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ372.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ373.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ374.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ375.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ376.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ377.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ378.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ379.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ380.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ381.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ382.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ383.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ384.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ385.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ388.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ389.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ390.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ391.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ392.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ393.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ394.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ395.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ396.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ419.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ420.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ421.lua create mode 100644 soggy_resources/lua/Actor/Quest/MQ422.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q220/Gaia22003.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q220/Wendy22003.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q220/WendyAudience.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q220/config/Q220Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/Ambor301.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/Gaia301.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/Robam301.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/Test301.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/Wendy301.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/WendyAudience.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q301/config/Q301Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q303/Q303Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q304/Dragon.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q304/Q304Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q305/Q305Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q352/Paimon.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q362/Q362Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q375/Guard.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q376/Diluc.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q376/Soldier.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q378/Qin.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q401/Q401Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q402/Hostage.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q402/Q402Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q403/Q403Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q404/Q404Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q405/Q405Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q406/Judge406.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q406/Q406Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q407/CricketJudge.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q407/Q407Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q408/Q408Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q408/RiverRunJudge.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q409/BallJudge.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q409/Q409Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q410/Q410Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q410/Qiuqiu.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q410/Soldier.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q411/Lisa.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q411/Merchant.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q411/Q411Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q411/Qin.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q412/Q412Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q413/Barbara.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q413/Captain.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q413/Pastor.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q413/Q413Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q413/Soldier.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q414/Q414Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q501/Q501Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q502/Q502Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q503/Q503Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q504/Q504Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/Q505/Q505Config.lua create mode 100644 soggy_resources/lua/Actor/Quest/QuestActorProxy.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ401.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ402.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ403.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ404.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ405.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ406.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ407.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ408.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ409.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ410.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ411.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ412.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ413.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ414.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ415.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ416.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ424.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ425.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ426.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ427.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ994.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ996.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ997.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ998.lua create mode 100644 soggy_resources/lua/Actor/Quest/SQ999.lua create mode 100644 soggy_resources/lua/Actor/SubGlobal/LimitRegionGlobalActor.lua create mode 100644 soggy_resources/lua/Actor/SubGlobal/SubGlobalActorProxy.lua create mode 100644 soggy_resources/lua/Actor/SubGlobal/WindTestGlobalActor.lua create mode 100644 soggy_resources/lua/Actor/TestActorProxy.lua create mode 100644 soggy_resources/lua/Base/BenchMark.lua create mode 100644 soggy_resources/lua/Base/Class.lua create mode 100644 soggy_resources/lua/Base/Common.lua create mode 100644 soggy_resources/lua/Base/Dispatch.lua create mode 100644 soggy_resources/lua/Base/Inspect.lua create mode 100644 soggy_resources/lua/Base/SceneData.lua create mode 100644 soggy_resources/lua/Base/memory.lua create mode 100644 soggy_resources/lua/Base/profiler.lua create mode 100644 soggy_resources/lua/Base/uMath.lua create mode 100644 soggy_resources/lua/Base/util.lua create mode 100644 soggy_resources/lua/Config/DefineCommon.lua create mode 100644 soggy_resources/lua/Config/Excel/CommonExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/CommonScriptConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/ConstValueExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/EquipExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/GatherExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/ItemExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/OpenStateExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/QuestExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Excel/SceneExcelConfig.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAIData.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAbilityAction.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAbilityCommon.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAbilityMixin.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAbilityModifier.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAbilityPredicate.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigAttackPattern.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigBoundary.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigBulletPattern.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigCombat.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigCommon.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigCutscene.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigDefine.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigEntity.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigEntityType.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigEquipController.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigInteraction.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigLuaDefine.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigMark.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigNavigation.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigScene.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigShape.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigStateAudioEvent.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigStateLayers.lua create mode 100644 soggy_resources/lua/Config/Json/ConfigTransPoint.lua create mode 100644 soggy_resources/lua/Console.lua create mode 100644 soggy_resources/lua/Hotfix.lua create mode 100644 soggy_resources/lua/LuaDebug.lua create mode 100644 soggy_resources/lua/LuaDebugjit.lua create mode 100644 soggy_resources/lua/Quest/Client/Q306ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q307ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q308ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q309ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q311ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q350ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q351ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q352ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q353ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q354ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q355ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q356ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q357ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q358ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q359ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q360ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q361ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q370ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q371ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q372ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q373ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q374ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q375ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q376ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q377ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q378ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q379ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q380ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q381ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q382ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q383ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q384ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q385ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q388ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q389ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q390ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q391ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q392ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q393ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q394ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q395ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q396ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q404ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q415ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q416ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q419ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q420ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q421ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q422ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q424ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q425ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q426ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q427ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q451ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q452ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q453ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q454ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q461ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q462ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q463ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q464ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q465ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q466ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q467ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q468ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q469ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q470ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q994ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q996ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q997ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q998ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Client/Q999ClientConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q306ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q307ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q308ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q309ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q311ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q350ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q351ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q352ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q353ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q354ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q355ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q356ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q357ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q358ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q359ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q360ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q361ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q370ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q371ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q372ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q373ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q374ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q375ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q376ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q377ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q378ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q379ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q380ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q381ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q382ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q383ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q384ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q385ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q388ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q389ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q390ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q391ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q392ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q393ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q394ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q395ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q396ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q404ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q415ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q416ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q421ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q424ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q425ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q427ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q451ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q452ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q453ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q454ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q461ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q462ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q463ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q464ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q465ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q466ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q467ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q468ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q469ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q470ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q994ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q996ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q997ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q998ShareConfig.lua create mode 100644 soggy_resources/lua/Quest/Share/Q999ShareConfig.lua create mode 100644 soggy_resources/lua/Scene/1/scene1.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_block1001.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001001.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001002.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001003.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001004.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001005.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001006.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001007.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001008.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001009.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001010.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001011.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001012.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001013.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001014.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001015.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001016.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001017.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001018.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001019.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001020.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001021.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001022.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001023.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001024.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001025.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001026.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001027.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001028.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001029.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001030.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001031.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001032.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001033.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001034.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001035.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001036.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001037.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001038.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001039.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001040.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001041.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001042.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001043.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001044.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001045.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001046.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001047.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001048.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001049.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001050.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001051.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001052.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001053.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001054.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001055.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001056.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001057.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001058.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001059.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001060.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001061.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001062.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001063.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001064.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001065.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001066.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001067.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001068.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001069.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001070.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001071.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001072.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001073.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001074.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001075.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001076.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001077.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001078.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001079.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001080.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001081.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001082.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001083.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001084.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001085.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001086.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001087.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001088.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001089.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001090.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001091.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001092.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001093.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001094.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001095.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001096.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001097.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001098.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001099.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001100.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001101.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001102.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001103.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001104.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001105.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001106.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001107.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001108.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001109.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001110.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001111.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001112.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001113.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001114.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001115.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001116.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001117.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001118.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001119.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001120.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001121.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001122.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001123.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001124.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001125.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001126.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001127.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001128.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001129.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001130.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001131.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001132.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_group111001133.lua create mode 100644 soggy_resources/lua/Scene/1/scene1_point.json create mode 100644 soggy_resources/lua/Scene/1001/scene1001.lua create mode 100644 soggy_resources/lua/Scene/1001/scene1001_1001_routes.json create mode 100644 soggy_resources/lua/Scene/1001/scene1001_block1001.lua create mode 100644 soggy_resources/lua/Scene/1001/scene1001_block81001.lua create mode 100644 soggy_resources/lua/Scene/1001/scene1001_group11001001.lua create mode 100644 soggy_resources/lua/Scene/1001/scene1001_group201001001.lua create mode 100644 soggy_resources/lua/Scene/1001/scene1001_group201001002.lua create mode 100644 soggy_resources/lua/Scene/1001/scene1001_point.json create mode 100644 soggy_resources/lua/Scene/1001/scene1001_routes.json create mode 100644 soggy_resources/lua/Scene/1002/scene1002.lua create mode 100644 soggy_resources/lua/Scene/1002/scene1002_group10001.lua create mode 100644 soggy_resources/lua/Scene/1002/scene1002_group10002.lua create mode 100644 soggy_resources/lua/Scene/1002/scene1002_point.json create mode 100644 soggy_resources/lua/Scene/1003/scene1003.lua create mode 100644 soggy_resources/lua/Scene/1003/scene1003_1003_routes.json create mode 100644 soggy_resources/lua/Scene/1003/scene3_block3003.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_1004_routes.json create mode 100644 soggy_resources/lua/Scene/1004/scene1004_block1004.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_group201004901.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_group201004902.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_group201004903.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_point.json create mode 100644 soggy_resources/lua/Scene/1004/scene1004_routes.lua create mode 100644 soggy_resources/lua/Scene/1004/scene1004_triggers.json create mode 100644 soggy_resources/lua/Scene/1005/scene1005.lua create mode 100644 soggy_resources/lua/Scene/1005/scene1005_1005_routes.json create mode 100644 soggy_resources/lua/Scene/1005/scene1005_block1005.lua create mode 100644 soggy_resources/lua/Scene/1005/scene1005_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1005/scene1005_group201005001.lua create mode 100644 soggy_resources/lua/Scene/1005/scene1005_group201005901.lua create mode 100644 soggy_resources/lua/Scene/1005/scene1005_point.json create mode 100644 soggy_resources/lua/Scene/1006/scene1006.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_1006_routes.json create mode 100644 soggy_resources/lua/Scene/1006/scene1006_block1006.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_group201006004.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_group201006005.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_group201006006.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_group201006007.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_group201006008.lua create mode 100644 soggy_resources/lua/Scene/1006/scene1006_point.json create mode 100644 soggy_resources/lua/Scene/1006/scene1006_routes.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_1007_routes.json create mode 100644 soggy_resources/lua/Scene/1007/scene1007_block1007.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_group201007001.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_group201007002.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_group201007003.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_group201007004.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_group201007005.lua create mode 100644 soggy_resources/lua/Scene/1007/scene1007_point.json create mode 100644 soggy_resources/lua/Scene/1007/scene1007_routes.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008_1008_routes.json create mode 100644 soggy_resources/lua/Scene/1008/scene1008_block1008.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008_group201008001.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008_group201008003.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008_group201008901.lua create mode 100644 soggy_resources/lua/Scene/1008/scene1008_point.json create mode 100644 soggy_resources/lua/Scene/1008/scene1008_triggers.json create mode 100644 soggy_resources/lua/Scene/1009/scene1009.lua create mode 100644 soggy_resources/lua/Scene/1009/scene1009_1009_routes.json create mode 100644 soggy_resources/lua/Scene/1009/scene1009_block1009.lua create mode 100644 soggy_resources/lua/Scene/1009/scene1009_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1009/scene1009_environment.json create mode 100644 soggy_resources/lua/Scene/1009/scene1009_group201009001.lua create mode 100644 soggy_resources/lua/Scene/1009/scene1009_group201009003.lua create mode 100644 soggy_resources/lua/Scene/1009/scene1009_group201009901.lua create mode 100644 soggy_resources/lua/Scene/1009/scene1009_point.json create mode 100644 soggy_resources/lua/Scene/1010/scene1010.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_1010_routes.json create mode 100644 soggy_resources/lua/Scene/1010/scene1010_block1010.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_group201010001.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_group201010002.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_group201010003.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_group201010004.lua create mode 100644 soggy_resources/lua/Scene/1010/scene1010_point.json create mode 100644 soggy_resources/lua/Scene/1011/scene1011.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_1011_routes.json create mode 100644 soggy_resources/lua/Scene/1011/scene1011_block1011.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011001.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011002.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011003.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011004.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011005.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011006.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011007.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011008.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011009.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011010.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011011.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011012.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011013.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011014.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011015.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011016.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011017.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011018.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011019.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011020.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011021.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011022.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011023.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011024.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011025.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011026.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011027.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011028.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011029.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011030.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011031.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011032.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011033.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011034.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011035.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011036.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011037.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011038.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011039.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011040.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011041.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011042.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011043.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011044.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011045.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_group201011046.lua create mode 100644 soggy_resources/lua/Scene/1011/scene1011_point.json create mode 100644 soggy_resources/lua/Scene/1012/scene1012.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_1012_routes.json create mode 100644 soggy_resources/lua/Scene/1012/scene1012_block1012.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_group201012001.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_group201012002.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_group201012003.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_group201012004.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_group201012005.lua create mode 100644 soggy_resources/lua/Scene/1012/scene1012_point.json create mode 100644 soggy_resources/lua/Scene/1013/scene1013.lua create mode 100644 soggy_resources/lua/Scene/1013/scene1013_block1013.lua create mode 100644 soggy_resources/lua/Scene/1013/scene1013_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1013/scene1013_group201013001.lua create mode 100644 soggy_resources/lua/Scene/1013/scene1013_point.json create mode 100644 soggy_resources/lua/Scene/1015/scene1015.lua create mode 100644 soggy_resources/lua/Scene/1015/scene1015_1015_routes.json create mode 100644 soggy_resources/lua/Scene/1015/scene1015_block1015.lua create mode 100644 soggy_resources/lua/Scene/1015/scene1015_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/1015/scene1015_group201015001.lua create mode 100644 soggy_resources/lua/Scene/1015/scene1015_point.json create mode 100644 soggy_resources/lua/Scene/2/scene2.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_20000_routes.json create mode 100644 soggy_resources/lua/Scene/20000/scene20000_block20000.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000001.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000002.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000004.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000005.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000006.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000007.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000008.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000009.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000010.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000018.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000019.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000020.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000021.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000022.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000023.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000024.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000025.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000026.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000027.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000028.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000029.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000030.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000031.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000034.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000035.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000036.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000037.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000038.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000039.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000040.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000041.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000042.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000043.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000044.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000045.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000046.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000047.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000048.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000049.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000050.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_group220000051.lua create mode 100644 soggy_resources/lua/Scene/20000/scene20000_point.json create mode 100644 soggy_resources/lua/Scene/20000/scene20000_triggers.json create mode 100644 soggy_resources/lua/Scene/20001/scene20001.lua create mode 100644 soggy_resources/lua/Scene/20001/scene20001_20001_routes.json create mode 100644 soggy_resources/lua/Scene/20001/scene20001_block20001.lua create mode 100644 soggy_resources/lua/Scene/20001/scene20001_group220001001.lua create mode 100644 soggy_resources/lua/Scene/20001/scene20001_group220001002.lua create mode 100644 soggy_resources/lua/Scene/20001/scene20001_group220001003.lua create mode 100644 soggy_resources/lua/Scene/20001/scene20001_point.json create mode 100644 soggy_resources/lua/Scene/20002/scene20002.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_20002_routes.json create mode 100644 soggy_resources/lua/Scene/20002/scene20002_block20002.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_group220002001.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_group220002002.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_group220002003.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_group220002004.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_group220002005.lua create mode 100644 soggy_resources/lua/Scene/20002/scene20002_point.json create mode 100644 soggy_resources/lua/Scene/20002/scene20002_trails.json create mode 100644 soggy_resources/lua/Scene/20003/scene20003.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_20003_routes.json create mode 100644 soggy_resources/lua/Scene/20003/scene20003_block20003.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_group220003001.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_group220003003.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_group220003004.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_group220003005.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_group220003006.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_group220003007.lua create mode 100644 soggy_resources/lua/Scene/20003/scene20003_point.json create mode 100644 soggy_resources/lua/Scene/20004/scene20004.lua create mode 100644 soggy_resources/lua/Scene/20004/scene20004_20004_routes.json create mode 100644 soggy_resources/lua/Scene/20004/scene20004_block20004.lua create mode 100644 soggy_resources/lua/Scene/20004/scene20004_group220004001.lua create mode 100644 soggy_resources/lua/Scene/20004/scene20004_group220004002.lua create mode 100644 soggy_resources/lua/Scene/20004/scene20004_group220004003.lua create mode 100644 soggy_resources/lua/Scene/20004/scene20004_group220004004.lua create mode 100644 soggy_resources/lua/Scene/20004/scene20004_point.json create mode 100644 soggy_resources/lua/Scene/20005/scene20005.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_20005_routes.json create mode 100644 soggy_resources/lua/Scene/20005/scene20005_block20005.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_group220005001.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_group220005002.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_group220005003.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_group220005004.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_group220005005.lua create mode 100644 soggy_resources/lua/Scene/20005/scene20005_point.json create mode 100644 soggy_resources/lua/Scene/20006/scene20006.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_20006_routes.json create mode 100644 soggy_resources/lua/Scene/20006/scene20006_block20006.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006001.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006002.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006003.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006004.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006005.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006006.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006007.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006008.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_group220006009.lua create mode 100644 soggy_resources/lua/Scene/20006/scene20006_point.json create mode 100644 soggy_resources/lua/Scene/20006/scene20006_routes.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_20007_routes.json create mode 100644 soggy_resources/lua/Scene/20007/scene20007_block20007.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_environment.json create mode 100644 soggy_resources/lua/Scene/20007/scene20007_group220007001.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_group220007003.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_group220007004.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_group220007005.lua create mode 100644 soggy_resources/lua/Scene/20007/scene20007_point.json create mode 100644 soggy_resources/lua/Scene/20008/scene20008.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_20008_routes.json create mode 100644 soggy_resources/lua/Scene/20008/scene20008_block20008.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008001.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008002.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008003.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008004.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008005.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008006.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008007.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_group220008901.lua create mode 100644 soggy_resources/lua/Scene/20008/scene20008_point.json create mode 100644 soggy_resources/lua/Scene/20009/scene20009.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_20009_routes.json create mode 100644 soggy_resources/lua/Scene/20009/scene20009_block20009.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009001.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009002.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009003.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009004.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009006.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009007.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009008.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009011.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_group220009901.lua create mode 100644 soggy_resources/lua/Scene/20009/scene20009_point.json create mode 100644 soggy_resources/lua/Scene/20009/scene20009_triggers.json create mode 100644 soggy_resources/lua/Scene/20010/scene20010.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_20010_routes.json create mode 100644 soggy_resources/lua/Scene/20010/scene20010_block20010.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010001.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010002.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010003.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010004.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010005.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010006.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010007.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010008.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010009.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010010.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_group220010017.lua create mode 100644 soggy_resources/lua/Scene/20010/scene20010_point.json create mode 100644 soggy_resources/lua/Scene/20010/scene20010_routes.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_20011_routes.json create mode 100644 soggy_resources/lua/Scene/20011/scene20011_block20011.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_group220011001.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_group220011002.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_group220011003.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_group220011004.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_group220011006.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_group220011901.lua create mode 100644 soggy_resources/lua/Scene/20011/scene20011_point.json create mode 100644 soggy_resources/lua/Scene/20011/scene20011_routes.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_20012_routes.json create mode 100644 soggy_resources/lua/Scene/20012/scene20012_block20012.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012001.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012002.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012003.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012004.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012005.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012006.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_group220012007.lua create mode 100644 soggy_resources/lua/Scene/20012/scene20012_point.json create mode 100644 soggy_resources/lua/Scene/20012/scene20012_routes.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_20013_routes.json create mode 100644 soggy_resources/lua/Scene/20013/scene20013_block20013.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_group220013001.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_group220013002.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_group220013003.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_group220013004.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_group220013005.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_group220013006.lua create mode 100644 soggy_resources/lua/Scene/20013/scene20013_point.json create mode 100644 soggy_resources/lua/Scene/20013/scene20013_routes.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_20014_routes.json create mode 100644 soggy_resources/lua/Scene/20014/scene20014_block20014.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014002.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014003.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014004.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014005.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014006.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014007.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_group220014008.lua create mode 100644 soggy_resources/lua/Scene/20014/scene20014_point.json create mode 100644 soggy_resources/lua/Scene/20014/scene20014_routes.lua create mode 100644 soggy_resources/lua/Scene/20015/scene20015.lua create mode 100644 soggy_resources/lua/Scene/20015/scene20015_20015_routes.json create mode 100644 soggy_resources/lua/Scene/20015/scene20015_block20015.lua create mode 100644 soggy_resources/lua/Scene/20015/scene20015_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20015/scene20015_group220015002.lua create mode 100644 soggy_resources/lua/Scene/20015/scene20015_point.json create mode 100644 soggy_resources/lua/Scene/20016/scene20016.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_20016_routes.json create mode 100644 soggy_resources/lua/Scene/20016/scene20016_block20016.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016001.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016002.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016003.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016005.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016006.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016007.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016008.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_group220016901.lua create mode 100644 soggy_resources/lua/Scene/20016/scene20016_point.json create mode 100644 soggy_resources/lua/Scene/20016/scene20016_triggers.json create mode 100644 soggy_resources/lua/Scene/20017/scene20017.lua create mode 100644 soggy_resources/lua/Scene/20017/scene20017_block20017.lua create mode 100644 soggy_resources/lua/Scene/20017/scene20017_group220017001.lua create mode 100644 soggy_resources/lua/Scene/20017/scene20017_point.json create mode 100644 soggy_resources/lua/Scene/20018/scene20018.lua create mode 100644 soggy_resources/lua/Scene/20018/scene20018_block20018.lua create mode 100644 soggy_resources/lua/Scene/20018/scene20018_group220018001.lua create mode 100644 soggy_resources/lua/Scene/20018/scene20018_point.json create mode 100644 soggy_resources/lua/Scene/20018/scene20018_triggers.json create mode 100644 soggy_resources/lua/Scene/20019/scene20019.lua create mode 100644 soggy_resources/lua/Scene/20019/scene20019_20019_routes.json create mode 100644 soggy_resources/lua/Scene/20019/scene20019_block20019.lua create mode 100644 soggy_resources/lua/Scene/20019/scene20019_group220019001.lua create mode 100644 soggy_resources/lua/Scene/20019/scene20019_group220019002.lua create mode 100644 soggy_resources/lua/Scene/20019/scene20019_group220019003.lua create mode 100644 soggy_resources/lua/Scene/20019/scene20019_point.json create mode 100644 soggy_resources/lua/Scene/20020/scene20020.lua create mode 100644 soggy_resources/lua/Scene/20020/scene20020_block20020.lua create mode 100644 soggy_resources/lua/Scene/20020/scene20020_group220020001.lua create mode 100644 soggy_resources/lua/Scene/20020/scene20020_point.json create mode 100644 soggy_resources/lua/Scene/20021/scene20021.lua create mode 100644 soggy_resources/lua/Scene/20021/scene20021_20021_routes.json create mode 100644 soggy_resources/lua/Scene/20021/scene20021_block20021.lua create mode 100644 soggy_resources/lua/Scene/20021/scene20021_group220021001.lua create mode 100644 soggy_resources/lua/Scene/20021/scene20021_group220021002.lua create mode 100644 soggy_resources/lua/Scene/20021/scene20021_group220021003.lua create mode 100644 soggy_resources/lua/Scene/20021/scene20021_point.json create mode 100644 soggy_resources/lua/Scene/3/scene3.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_3001_routes.json create mode 100644 soggy_resources/lua/Scene/3/scene3_3002_routes.json create mode 100644 soggy_resources/lua/Scene/3/scene3_3003_routes.json create mode 100644 soggy_resources/lua/Scene/3/scene3_3004_routes.json create mode 100644 soggy_resources/lua/Scene/3/scene3_3005_routes.json create mode 100644 soggy_resources/lua/Scene/3/scene3_3007_routes.json create mode 100644 soggy_resources/lua/Scene/3/scene3_Q301_points.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_block3001.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_block3002.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_block3003.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_block3004.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_block3005.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_block3007.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_environment.json create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001006.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001007.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001011.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001012.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001013.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001016.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001021.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001022.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001024.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001026.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001028.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001031.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001032.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001034.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001047.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001048.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001049.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001052.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001054.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001055.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001057.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001058.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001060.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001061.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001062.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001066.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001067.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001068.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001069.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001073.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001074.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001076.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001077.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001078.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001079.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001082.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001083.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001085.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001086.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001087.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001088.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001089.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001090.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001091.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001092.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001093.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001094.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001095.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001097.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001098.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001099.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001100.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001101.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001102.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001103.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001104.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001105.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001106.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001108.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001109.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001112.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001113.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001114.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001115.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001117.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001118.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001119.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001121.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001122.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001123.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001124.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001125.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001126.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001127.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001128.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001129.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001130.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001140.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001142.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001143.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001144.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001145.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001146.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001152.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001153.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001154.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001155.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001156.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001157.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001158.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001159.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001160.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001161.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001162.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001165.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001166.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001172.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001173.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001174.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001175.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001176.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001193.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001194.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001195.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001196.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001197.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001198.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001199.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001200.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001201.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001202.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001203.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001204.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001205.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001206.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001207.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001208.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001209.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001210.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001211.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001212.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001213.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001214.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001215.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001216.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001217.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001218.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001219.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001220.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001221.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001222.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001223.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001224.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001225.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001226.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001227.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001228.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001229.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001230.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001231.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001232.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001233.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001234.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001235.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001236.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001237.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001238.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001239.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001240.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001241.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001242.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001243.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001244.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001246.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001247.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001249.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001250.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001251.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001252.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001253.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001254.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001255.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001256.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001257.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001258.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001259.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001260.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001261.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001262.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001263.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001264.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001265.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001266.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001267.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001268.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001269.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001270.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001271.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001272.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001273.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001275.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001276.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001277.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001278.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001279.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001280.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001281.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001282.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001283.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001284.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001285.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001801.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001802.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001803.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001804.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001805.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001807.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001808.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001809.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001810.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001901.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001902.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133001903.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002001.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002004.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002022.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002030.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002031.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002032.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002034.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002035.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002043.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002045.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002047.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002049.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002050.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002056.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002057.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002065.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002069.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002074.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002075.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002076.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002077.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002078.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002079.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002080.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002084.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002085.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002086.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002087.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002088.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002089.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002090.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002091.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002092.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002093.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002094.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002096.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002098.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002100.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002101.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002102.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002103.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002104.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002105.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002109.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002110.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002111.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002112.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002114.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002115.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002116.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002117.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002118.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002119.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002120.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002121.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002122.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002123.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002124.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002125.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002126.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002127.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002129.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002130.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002132.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002133.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002134.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002136.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002137.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002138.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002140.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002143.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002147.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002148.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002149.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002150.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002151.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002152.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002153.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002155.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002157.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002158.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002159.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002160.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002161.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002162.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002163.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002164.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002165.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002166.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002167.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002169.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002170.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002171.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002172.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002173.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002182.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002184.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002202.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002203.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002204.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002205.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002206.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002207.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002209.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002210.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002211.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002212.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002213.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002214.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002216.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002217.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002218.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002219.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002220.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002221.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002222.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002223.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002224.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002225.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002226.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002227.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002228.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002229.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002230.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002231.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002232.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002233.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002234.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002235.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002236.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002237.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002238.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002239.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002240.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002241.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002242.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002243.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002244.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002245.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002246.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002247.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002248.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002249.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002250.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002251.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002252.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002253.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002801.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002802.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002803.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002804.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002805.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133002901.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003001.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003002.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003003.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003004.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003005.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003010.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003013.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003021.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003022.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003023.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003027.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003029.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003031.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003032.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003034.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003035.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003036.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003043.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003045.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003049.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003052.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003054.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003055.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003057.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003065.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003066.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003067.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003069.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003070.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003071.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003074.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003075.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003077.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003078.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003079.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003086.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003087.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003090.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003091.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003092.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003094.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003095.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003096.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003097.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003098.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003101.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003102.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003103.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003104.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003105.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003107.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003108.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003109.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003110.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003111.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003112.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003113.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003115.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003116.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003117.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003118.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003119.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003120.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003121.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003122.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003123.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003124.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003125.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003126.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003127.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003128.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003129.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003130.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003131.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003132.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003133.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003135.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003136.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003137.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003139.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003140.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003141.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003142.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003143.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003144.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003145.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003146.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003147.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003148.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003149.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003150.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003151.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003152.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003154.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003156.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003158.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003159.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003163.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003164.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003165.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003166.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003167.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003168.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003170.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003171.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003173.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003174.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003175.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003176.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003177.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003178.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003179.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003180.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003181.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003182.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003183.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003184.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003185.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003187.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003188.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003189.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003190.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003193.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003194.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003195.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003196.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003197.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003198.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003199.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003203.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003204.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003205.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003206.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003207.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003208.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003209.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003210.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003211.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003212.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003213.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003214.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003215.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003216.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003217.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003218.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003219.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003220.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003221.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003222.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003223.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003224.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003225.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003268.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003269.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003270.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003271.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003272.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003274.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003275.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003276.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003277.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003278.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003279.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003280.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003283.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003285.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003286.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003287.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003288.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003289.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003290.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003291.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003292.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003293.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003294.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003295.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003296.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003297.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003298.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003300.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003301.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003305.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003306.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003307.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003308.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003309.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003310.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003311.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003312.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003313.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003314.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003315.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003316.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003317.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003318.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003319.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003320.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003321.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003322.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003323.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003324.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003325.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003326.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003327.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003328.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003329.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003330.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003331.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003332.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003333.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003334.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003335.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003336.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003337.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003338.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003339.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003340.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003341.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003342.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003344.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003345.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003346.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003347.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003348.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003349.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003350.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003351.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003352.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003356.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003357.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003358.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003359.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003360.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003361.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003362.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003363.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003364.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003366.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003367.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003368.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003369.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003370.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003371.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003372.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003373.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003374.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003375.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003376.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003377.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003378.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003380.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003381.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003382.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003383.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003384.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003385.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003386.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003387.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003388.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003389.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003390.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003391.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003392.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003393.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003394.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003395.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003396.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003397.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003398.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003399.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003401.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003402.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003403.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003404.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003405.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003406.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003407.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003408.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003409.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003411.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003412.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003414.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003415.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003416.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003417.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003418.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003419.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003421.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003422.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003423.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003424.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003425.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003426.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003427.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003428.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003429.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003430.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003431.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003433.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003434.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003435.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003436.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003437.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003438.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003439.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003440.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003441.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003443.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003444.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003445.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003446.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003447.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003448.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003449.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003450.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003451.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003801.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003802.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003803.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003804.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003805.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003806.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003807.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003901.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003902.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133003903.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004001.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004002.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004003.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004004.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004005.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004006.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004007.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004008.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004010.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004011.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004012.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004013.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004014.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004015.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004016.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004018.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004019.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004020.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004021.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004026.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004028.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004029.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004032.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004033.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004034.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004037.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004039.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004040.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004041.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004043.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004044.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004051.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004055.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004061.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004062.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004063.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004064.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004065.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004066.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004068.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004069.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004070.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004072.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004073.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004076.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004077.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004078.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004082.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004083.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004084.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004085.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004086.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004087.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004088.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004089.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004090.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004091.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004092.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004093.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004094.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004095.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004096.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004097.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004098.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004099.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004100.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004101.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004102.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004103.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004104.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004105.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004107.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004108.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004109.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004110.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004111.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004112.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004113.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004114.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004115.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004116.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004117.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004118.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004119.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004120.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004121.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004122.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004123.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004124.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004125.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004126.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004127.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004128.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004129.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004130.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004131.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004191.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004192.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004193.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004194.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004195.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004196.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004197.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004198.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004199.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004200.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004201.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004202.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004203.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004204.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004207.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004208.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004209.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004210.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004211.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004212.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004213.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004214.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004215.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004216.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004217.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004218.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004220.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004221.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004222.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004223.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004224.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004225.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004226.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004227.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004228.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004229.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004230.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004231.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004232.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004233.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004234.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004235.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004236.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004237.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004238.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004239.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004240.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004241.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004242.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004243.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004244.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004245.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004246.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004801.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004802.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004803.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004804.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004805.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004806.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004807.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004901.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004902.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133004903.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133005011.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133005013.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133005014.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133005015.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133005016.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007001.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007002.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007003.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007004.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007005.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007006.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007007.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007008.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007009.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007010.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007011.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007012.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007014.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007015.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007016.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007017.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007018.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007019.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007020.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007021.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007022.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007023.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007024.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007025.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007026.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007027.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007028.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007029.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007030.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007032.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007033.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007034.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007035.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007036.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007037.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007038.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007039.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007040.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007041.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007042.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007043.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007044.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007045.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007046.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007047.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007048.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007049.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007050.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007051.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007052.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007053.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007055.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007056.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007057.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007058.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007059.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007060.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007061.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007062.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007063.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007064.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007065.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007066.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007071.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007072.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007073.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007074.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007075.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007076.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007078.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007079.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007080.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007082.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007083.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007084.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007085.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007086.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007087.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007089.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007093.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007094.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007095.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007096.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007097.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007098.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007099.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007100.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007101.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007102.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007103.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007104.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007105.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007106.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007107.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007108.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007109.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007110.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007111.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007113.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007115.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007116.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007118.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007119.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007120.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007121.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007122.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007123.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007124.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007125.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007126.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007127.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007128.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007129.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007130.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007131.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007132.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007133.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007134.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007135.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007136.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007138.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007139.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007141.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007142.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007144.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007145.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007146.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007147.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007149.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007150.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007152.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007153.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007154.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007155.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007156.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007157.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007158.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007159.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007160.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007161.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007162.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007163.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007164.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007165.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007166.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007167.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007168.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007169.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007170.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007171.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007172.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007173.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007174.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007175.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007176.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007177.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007178.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007179.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007180.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007181.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007182.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007183.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007184.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007185.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007186.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007187.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007188.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007189.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007190.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007191.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007192.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007193.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007194.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007195.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007196.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007197.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007198.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007199.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007200.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007201.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007202.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007203.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007204.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007205.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007206.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007207.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007208.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007209.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007210.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007211.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007212.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007213.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007214.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007215.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007216.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007217.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007218.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007219.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007220.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007221.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007222.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007801.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007802.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007803.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007804.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007805.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007806.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_group133007901.lua create mode 100644 soggy_resources/lua/Scene/3/scene3_point.json create mode 100644 soggy_resources/lua/Scene/3/scene3_point_test.json create mode 100644 soggy_resources/lua/Scene/3/scene3_triggers.json create mode 100644 soggy_resources/lua/Scene/30001/scene30001.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_30001_routes.json create mode 100644 soggy_resources/lua/Scene/30001/scene30001_block30001.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001001.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001002.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001003.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001004.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001005.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001006.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001007.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001008.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001009.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001010.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001011.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001012.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001013.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001014.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001015.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001016.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001017.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001018.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001019.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001020.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001021.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_group230001022.lua create mode 100644 soggy_resources/lua/Scene/30001/scene30001_point.json create mode 100644 soggy_resources/lua/Scene/30001/scene30001_routes.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002_30002_routes.json create mode 100644 soggy_resources/lua/Scene/30002/scene30002_block30002.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002_group230002001.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002_group230002002.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002_group230002003.lua create mode 100644 soggy_resources/lua/Scene/30002/scene30002_point.json create mode 100644 soggy_resources/lua/Scene/30002/scene30002_routes.lua create mode 100644 soggy_resources/lua/Scene/30003/scene30003.lua create mode 100644 soggy_resources/lua/Scene/30003/scene30003_30003_routes.json create mode 100644 soggy_resources/lua/Scene/30003/scene30003_block30003.lua create mode 100644 soggy_resources/lua/Scene/30003/scene30003_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/30003/scene30003_group230003001.lua create mode 100644 soggy_resources/lua/Scene/30003/scene30003_point.json create mode 100644 soggy_resources/lua/Scene/3001/scene3001.lua create mode 100644 soggy_resources/lua/Scene/3001/scene3001_block81001.lua create mode 100644 soggy_resources/lua/Scene/3001/scene3001_group11001001.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001_40001_routes.json create mode 100644 soggy_resources/lua/Scene/40001/scene40001_block40001.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001_group240001001.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001_group240001002.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001_group240001003.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001_group240001004.lua create mode 100644 soggy_resources/lua/Scene/40001/scene40001_point.json create mode 100644 soggy_resources/lua/Scene/40001/scene40001_routes.lua create mode 100644 soggy_resources/lua/Scene/40002/scene40002.lua create mode 100644 soggy_resources/lua/Scene/40002/scene40002_40002_routes.json create mode 100644 soggy_resources/lua/Scene/40002/scene40002_block40002.lua create mode 100644 soggy_resources/lua/Scene/40002/scene40002_point.json create mode 100644 soggy_resources/lua/Scene/40003/scene40003.lua create mode 100644 soggy_resources/lua/Scene/40003/scene40003_40003_routes.json create mode 100644 soggy_resources/lua/Scene/40003/scene40003_block40003.lua create mode 100644 soggy_resources/lua/Scene/40003/scene40003_point.json create mode 100644 soggy_resources/lua/Scene/40004/scene40004.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_40004_routes.json create mode 100644 soggy_resources/lua/Scene/40004/scene40004_block40004.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004002.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004003.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004004.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004005.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004006.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004007.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_group240004008.lua create mode 100644 soggy_resources/lua/Scene/40004/scene40004_point.json create mode 100644 soggy_resources/lua/Scene/40005/scene40005.lua create mode 100644 soggy_resources/lua/Scene/40005/scene40005_40005_routes.json create mode 100644 soggy_resources/lua/Scene/40005/scene40005_block40005.lua create mode 100644 soggy_resources/lua/Scene/40005/scene40005_point.json create mode 100644 soggy_resources/lua/Scene/40006/scene40006.lua create mode 100644 soggy_resources/lua/Scene/40006/scene40006_40006_routes.json create mode 100644 soggy_resources/lua/Scene/40006/scene40006_block40006.lua create mode 100644 soggy_resources/lua/Scene/40006/scene40006_point.json create mode 100644 soggy_resources/lua/Scene/40007/scene40007.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_40007_routes.json create mode 100644 soggy_resources/lua/Scene/40007/scene40007_block40007.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_group240007001.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_group240007002.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_group240007003.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_group240007004.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_group240007005.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_group240007006.lua create mode 100644 soggy_resources/lua/Scene/40007/scene40007_point.json create mode 100644 soggy_resources/lua/Scene/50000/scene50000.lua create mode 100644 soggy_resources/lua/Scene/50000/scene50000_point.json create mode 100644 soggy_resources/lua/Scene/50001/scene50001.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_50001_routes.json create mode 100644 soggy_resources/lua/Scene/50001/scene50001_block50001.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_dummy_points.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001001.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001002.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001003.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001004.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001005.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001006.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_group250001007.lua create mode 100644 soggy_resources/lua/Scene/50001/scene50001_point.json create mode 100644 soggy_resources/lua/Scene/50002/scene50002.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_50002_routes.json create mode 100644 soggy_resources/lua/Scene/50002/scene50002_block50002.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_group250002001.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_group250002002.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_group250002003.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_group250002004.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_group250002005.lua create mode 100644 soggy_resources/lua/Scene/50002/scene50002_point.json create mode 100644 soggy_resources/lua/Scene/50003/scene50003.lua create mode 100644 soggy_resources/lua/Scene/50003/scene50003_block50003.lua create mode 100644 soggy_resources/lua/Scene/50003/scene50003_group250003001.lua create mode 100644 soggy_resources/lua/Scene/50003/scene50003_group250003002.lua create mode 100644 soggy_resources/lua/Scene/50003/scene50003_group250003003.lua create mode 100644 soggy_resources/lua/Scene/50003/scene50003_point.json create mode 100644 soggy_resources/lua/Scene/50004/scene50004.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_50004_routes.json create mode 100644 soggy_resources/lua/Scene/50004/scene50004_block50004.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004001.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004002.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004003.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004004.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004005.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004006.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_group250004007.lua create mode 100644 soggy_resources/lua/Scene/50004/scene50004_triggers.json create mode 100644 soggy_resources/lua/Scene/50005/scene50005.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_50005_routes.json create mode 100644 soggy_resources/lua/Scene/50005/scene50005_block50005.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005001.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005002.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005003.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005004.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005005.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005006.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005007.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005008.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005009.lua create mode 100644 soggy_resources/lua/Scene/50005/scene50005_group250005010.lua create mode 100644 soggy_resources/lua/UAuto/Base/UAutoCommon.lua create mode 100644 soggy_resources/lua/UAuto/Base/UAutoCoroutine.lua create mode 100644 soggy_resources/lua/UAuto/Base/UAutoLuaTestBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/UAutoLuaTestCaseExample.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/Avatar100Dead.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/Test.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/AmborSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/AvatarSkillBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/AyakaSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/BarbaraSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/DilucSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/KaeyaSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/LisaSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/PlayerBoySkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/PlayerGirlSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/QinSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/RazorSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/VentiSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/avatar/skill/XianglingSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/CombatBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/AmborSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/AyakaSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/BarbaraSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/CombatAvatar.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/DilucSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/KaeyaSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/LisaSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/PlayerBoySkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/PlayerGirlSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/QinSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/RazorSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/VentiSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/combat/avatar/XianglingSkillHitMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/ElementBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/electric/ElectricComponent.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/electric/ElectricFireReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/electric/ElectricReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/fire/FireComponent.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/fire/FireElectricReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/fire/FireReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/fire/FireWaterReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/grass/GrassComponent.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/grass/GrassFireReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/ice/IceComponent.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/ice/IceFireReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/rock/RockComponent.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/water/WaterComponent.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/water/WaterElectricReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/water/WaterFireReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/element/water/WaterIceReaction.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/AllTreasurebox.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/KapokFlower01.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/PumpkinBomb01.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/treasurebox/OpenTreasure01.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/treasurebox/OpenTreasure02.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/treasurebox/OpenTreasure03.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/treasurebox/OpenTreasure04.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/item/treasurebox/OpenTreasure05.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/localtest/CreateMonster.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/number/NumberBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/number/avatar/AvatarReliquaryTest.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/number/avatar/AvatarTalentTest.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/number/avatar/AvatarUpLevel.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/number/avatar/AvatarWeaponTest.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/number/quest/QuestNumberData.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/OnlineAddClient.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/OnlineBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/avatar/OnlineChangeAvatar.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/element/monster/OnlineElementElectric.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/element/monster/OnlineElementFire.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/element/monster/OnlineElementGrass.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/element/monster/OnlineElementIce.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/element/monster/OnlineElementWater.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/AbyssFire.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/AbyssIce.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/AbyssWater.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/BruteNoneShield.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/DefenderNone.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/ElementalWind.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/HiliNone.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/HiliNoneClub.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/HiliNoneRange.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/HiliNoneShield.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/ShamanGrass.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/ShamanWater.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/ShamanWind.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeElectric.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeElectricBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeElectricBigPositive.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeFire.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeFireBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeGrass.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeGrassBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeIce.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeIceBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeRock.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeRockBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeWater.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeWaterBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeWind.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/monster/SlimeWindBig.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/move/OnlineMove.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineAmborSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineAyakaSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineBarbaraSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineGirlSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineKaeyaSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineLisaSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/online/skill/OnlineQinSkill.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunScene.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneBenlangling.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneChenxijiuzhuang.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneFengqidi.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneManualPoint.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneMengde.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneMengdeEast.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneMengdeMini.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneQingquanzhen.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneSetPos.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneSetPosMini.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneShiyanjia.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunSceneWangfengshandi.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/RunXinshouToMengde.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/TestCutscene.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/TestMem.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/TestMemDungeonInOut.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/TestMemReLogin.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/TestMemRoundFenglong.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/perf/TestMemRoundMengde.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/301/MainQuest_301.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/301/Quest301.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/302/QuestBase_302.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/302/QuestBranch_302.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/302/QuestRewind_302.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/304/Quest304.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/305/Quest305.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/306/Quest306.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/351/Quest351.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/351/QuestBase_351.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/351/QuestNormal_351.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/352/Quest352.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/352/Quest352bug.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/352/QuestBase_352.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/352/QuestNormal_352.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/353/Quest353.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/353/QuestBase_353.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/353/QuestNormal_353.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/354/Quest354.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/354/QuestAuto354.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/354/QuestBase_354.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/354/QuestNormal_354.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/354/unlockTransPoint.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/355/Quest355.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/356/Quest356.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/358/Quest358.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/361/Quest361.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/404/QuestBase_404.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/404/QuestNormal_404.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/405/QuestBase_405.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/405/QuestNormal_405.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/FirstGoddess.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/NPCRunInMengde.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/quest/QuestBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/scene/CheckStreaming.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/scene/SceneBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/ui/character/ChangeCharacter.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/ui/character/CharacterEnterReturnTwice.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/ui/character/CharacterPageBase.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/ui/character/property/OpenAllProperties.lua create mode 100644 soggy_resources/lua/UAuto/TestCases/ui/map/MapTransPoint.lua create mode 100644 soggy_resources/lua/UAuto/UAutoMain.lua create mode 100644 soggy_resources/lua/main.lua diff --git a/app.sh b/app.sh new file mode 100644 index 0000000..7ef1058 --- /dev/null +++ b/app.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +python3 server/dispatch.py & +cd server/build/ && ./soggy \ No newline at end of file diff --git a/os b/os new file mode 100644 index 0000000..2805c44 --- /dev/null +++ b/os @@ -0,0 +1,24 @@ +FROM ubuntu:latest + +RUN export DEBIAN_FRONTEND=noninteractive &&\ + apt update && apt-get upgrade -y && apt-get -y install \ + # dependencies + git build-essential cmake pkgconf libenet-dev libprotobuf-dev protobuf-compiler liblua5.3-dev nlohmann-json3-dev libreadline-dev \ + # for dispatch server + python3 + +WORKDIR /root + +COPY soggy-mistress/ ./server/ +COPY soggy_resources/ ./server/build/resources/ + +RUN ls server && cd server &&\ + cmake -B build &&\ + cmake --build build -j8 + +#RUN cd server/build/ && ./soggy +COPY app.sh ./app.sh + +EXPOSE 22102 8099 + +ENTRYPOINT ["sh", "app.sh"] \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..dc7233c --- /dev/null +++ b/run.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +metode=$1 + +if [ "$metode" = "b" ];then + docker build -t "siakbary/gsserver:cbt1" --progress=plain -f os .; +fi + +if [ "$metode" = "localhost" ];then +echo "hello" + # TODO +fi + +if [ "$metode" = "up" ];then +docker compose up +fi + +if [ "$metode" = "t" ];then + docker run --rm -it -p 8099:8099 -p 22102:22102/udp siakbary/gsserver:cbt1 +fi + +# Push Private +if [ "$metode" = "private_push" ];then + docker push repo.yuuki.me/gsserver:cbt1 +fi + +# Push Public +if [ "$metode" = "push" ];then + docker push siakbary/gsserver:cbt1 +fi \ No newline at end of file diff --git a/soggy-mistress/CMakeLists.txt b/soggy-mistress/CMakeLists.txt new file mode 100644 index 0000000..01eaca2 --- /dev/null +++ b/soggy-mistress/CMakeLists.txt @@ -0,0 +1,72 @@ +# CMakeLists.txt + +cmake_minimum_required(VERSION 3.13) + +project(soggy) + +# debug build by default +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug") +endif() + +find_package(PkgConfig REQUIRED) +find_package(Protobuf REQUIRED) + + +# libenet +pkg_check_modules(libenet IMPORTED_TARGET libenet REQUIRED) +add_library(libenet INTERFACE) +target_compile_options(libenet INTERFACE ${libenet_CFLAGS}) +target_link_libraries(libenet INTERFACE ${libenet_LDFLAGS}) + +# readline +pkg_check_modules(readline IMPORTED_TARGET readline REQUIRED) +add_library(readline INTERFACE) +target_compile_options(readline INTERFACE ${readline_CFLAGS}) +target_link_libraries(readline INTERFACE ${readline_LDFLAGS}) + +# lua53 +#pkg_check_modules(lua53 IMPORTED_TARGET lua53 REQUIRED) +#add_library(lua53 INTERFACE) +#target_compile_options(lua53 INTERFACE ${lua53_CFLAGS}) +#target_link_libraries(lua53 INTERFACE ${lua53_LDFLAGS}) + +# protos +# use a shared library because linking a 100mb+ static library takes extremely long +# maybe use a static library for release builds? +add_library(soggy_proto SHARED) +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/proto/proto") +file(GLOB proto_srcs "${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto") +target_include_directories(soggy_proto PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/proto") +# target_compile_definitions(soggy_proto PUBLIC "PROTOBUF_NAMESPACE_ID=proto") +foreach(f ${proto_srcs}) + protobuf_generate_cpp(proto_src proto_header ${f} PROTOC_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/proto/proto") + target_sources(soggy_proto PRIVATE ${proto_src}) +endforeach() +target_link_libraries(soggy_proto PUBLIC ${Protobuf_LIBRARY}) + +# cmdids processor +add_executable(soggy_cmdids_processor "tool/cmdids_processor.cpp") +set_target_properties(soggy_cmdids_processor PROPERTIES CXX_STANDARD "17") +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/proto/proto/cmdids.cpp" "${CMAKE_CURRENT_BINARY_DIR}/proto/proto/cmdids.hpp" + DEPENDS soggy_cmdids_processor "${CMAKE_CURRENT_SOURCE_DIR}/proto/cmdids.csv" + COMMAND soggy_cmdids_processor "${CMAKE_CURRENT_SOURCE_DIR}/proto/cmdids.csv" "${CMAKE_CURRENT_BINARY_DIR}/proto/proto/cmdids.cpp" "${CMAKE_CURRENT_BINARY_DIR}/proto/proto/cmdids.hpp" +) +# cmdids processor output +target_sources(soggy_proto PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/proto/proto/cmdids.cpp") + +# soggy +add_executable(soggy + "src/soggy.cpp" + "src/packet.cpp" + "src/game_data.cpp" + "src/log.cpp" +) +target_include_directories(soggy PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_include_directories(soggy PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/extern") +set_target_properties(soggy PROPERTIES CXX_STANDARD "17") +target_link_libraries(soggy PRIVATE soggy_proto) +target_link_libraries(soggy PRIVATE libenet) +target_link_libraries(soggy PRIVATE readline) +#target_link_libraries(soggy PRIVATE lua) diff --git a/soggy-mistress/dispatch.py b/soggy-mistress/dispatch.py new file mode 100644 index 0000000..3707b53 --- /dev/null +++ b/soggy-mistress/dispatch.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python + +import http.server +import socketserver +import json +import traceback +import urllib.parse + +DISPATCH_LISTEN = "0.0.0.0" +DISPATCH_PORT = 8099 +DISPATCH_ROUTE_URL = "http://cbt1.yuuki.me" + +GAME_IP = "38.242.197.120" +GAME_PORT = 22102 + +GAME_RES_CUR_VERSION = 138541 +DESIGN_DATA_CUR_VERSION = 138541 + +PLAYER_UID = 1 + +FEEDBACK_URL = "https://cdn.discordapp.com/attachments/441109559004889098/1043690740397641748/unknown.png" +NOTICES_URL = "https://cdn.discordapp.com/attachments/441109559004889098/1043690740397641748/unknown.png" +GUIDE_URL = "https://cdn.discordapp.com/attachments/441109559004889098/1043690740397641748/unknown.png" + +GAME_RES_CUR_VERSION_BYTES = str(GAME_RES_CUR_VERSION).encode("utf8") +DESIGN_DATA_CUR_VERSION_BYTES = str(DESIGN_DATA_CUR_VERSION).encode("utf8") + +class DispatchHandler(http.server.BaseHTTPRequestHandler): + def version_string(self): + return "broken pancake" + + def do_GET(self): + url = urllib.parse.urlparse(self.path) + query = urllib.parse.parse_qs(url.query) + for k in query.keys(): + query[k] = query[k][-1] + + try: + if url.path == "/query_region_list": + self.do_query_region_list(url, query) + elif url.path == "/sdk/login": + self.do_sdk_login(url, query) + elif url.path == "/sdk/token_login": + self.do_sdk_token_login(url, query) + elif url.path == "/query_cur_region": + self.do_query_cur_region(url, query) + elif url.path == "/game_res/cur_version.txt": + self.send_response(200) + self.end_headers() + self.wfile.write(GAME_RES_CUR_VERSION_BYTES) + elif url.path.startswith("/game_res/"): + self.send_response(200) + self.end_headers() + elif url.path == "/design_data/cur_version.txt": + self.send_response(200) + self.end_headers() + self.wfile.write(DESIGN_DATA_CUR_VERSION_BYTES) + else: + self.send_response(501) + self.end_headers() + except Exception as ex: + traceback.print_exception(ex) + self.send_response(500) + self.end_headers() + + def do_HEAD(self): + url = urllib.parse.urlparse(self.path) + query = urllib.parse.parse_qs(url.query) + for k in query.keys(): + query[k] = query[k][-1] + + try: + if url.path == "/game_res/cur_version.txt": + self.send_response(200) + self.send_header("Content-Length", str(len(GAME_RES_CUR_VERSION_BYTES))) + self.end_headers() + elif url.path.startswith("/game_res/"): + self.send_response(200) + self.send_header("Content-Length", "0") + self.end_headers() + elif url.path == "/design_data/cur_version.txt": + self.send_response(200) + self.send_header("Content-Length", str(len(DESIGN_DATA_CUR_VERSION_BYTES))) + self.end_headers() + else: + self.send_response(501) + self.end_headers() + except Exception as ex: + traceback.print_exc(ex) + self.send_response(500) + self.end_headers() + + def do_POST(self): + self.send_response(501) + self.end_headers() + + def do_query_region_list(self, url: urllib.parse.ParseResult, query: dict): + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.end_headers() + + REGION_TITLES = [ + "YuukiPS CBT1", + "MelonPS", + "FakePS" + ] + + query_region_list_rsp = { + "retcode": 0, + "clientCustomConfig": json.dumps({ "sdkenv": "2", "visitor": False, "devicelist": None }), + # ^ these are ALL of keys it checks for in clientCustomConfig + # "devicelist" seems completely unused? + "regionList": list() + } + + for i, region_title in enumerate(REGION_TITLES): + query_region_list_rsp["regionList"].append({ + "dispatchUrl": f"{DISPATCH_ROUTE_URL:s}/query_cur_region", + "name": f"region{i:d}", + "title": region_title, + "type": "DEV_PUBLIC" + }) + + self.wfile.write(json.dumps(query_region_list_rsp).encode("utf8")) + + LOGIN_JSON = { + "retcode": 0, + "data": { + "uid": str(PLAYER_UID), + "token": "token1", + "email": "soggy:)", + } + } + + def do_sdk_login(self, url: urllib.parse.ParseResult, query: dict): + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.end_headers() + self.wfile.write(json.dumps(self.LOGIN_JSON).encode("utf8")) + + def do_sdk_token_login(self, url: urllib.parse.ParseResult, query: dict): + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.end_headers() + self.wfile.write(json.dumps(self.LOGIN_JSON).encode("utf8")) + + def do_query_cur_region(self, url: urllib.parse.ParseResult, query: dict): + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.end_headers() + + query_cur_region_rsp = { + "retcode": 0, + "regionInfo": { + "gateserverIp": GAME_IP, + "gateserverPort": GAME_PORT, + "resourceUrl": f"{DISPATCH_ROUTE_URL:s}/game_res", + "dataUrl": f"{DISPATCH_ROUTE_URL:s}/design_data", + "feedbackUrl": FEEDBACK_URL, + "bulletinUrl": NOTICES_URL, + "handbookUrl": GUIDE_URL, + "resVersion": GAME_RES_CUR_VERSION, + "dataVersion": DESIGN_DATA_CUR_VERSION, + # these are unused I think + "clientCustomConfig": json.dumps({}), + "regionCustomConfig": json.dumps({}) + } + } + + self.wfile.write(json.dumps(query_cur_region_rsp).encode("utf8")) + +httpd = None +try: + socketserver.TCPServer.allow_reuse_address = True + httpd = socketserver.TCPServer((DISPATCH_LISTEN, DISPATCH_PORT), DispatchHandler) + print(f"dispatch listening on port {DISPATCH_PORT:d}") + httpd.serve_forever() +except KeyboardInterrupt: + print("\nKeyboardInterrupt") +finally: + if httpd != None: + httpd.server_close() diff --git a/soggy-mistress/extern/nlohmann/adl_serializer.hpp b/soggy-mistress/extern/nlohmann/adl_serializer.hpp new file mode 100644 index 0000000..f77f944 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/adl_serializer.hpp @@ -0,0 +1,55 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @sa https://json.nlohmann.me/api/adl_serializer/ +template +struct adl_serializer +{ + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j, TargetType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), val))) + -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + { + ::nlohmann::from_json(std::forward(j), val); + } + + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) + -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) + { + return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); + } + + /// @brief convert any value type to a JSON value + /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ + template + static auto to_json(BasicJsonType& j, TargetType && val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward(val)))) + -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) + { + ::nlohmann::to_json(j, std::forward(val)); + } +}; + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/byte_container_with_subtype.hpp b/soggy-mistress/extern/nlohmann/byte_container_with_subtype.hpp new file mode 100644 index 0000000..1031cdc --- /dev/null +++ b/soggy-mistress/extern/nlohmann/byte_container_with_subtype.hpp @@ -0,0 +1,103 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // uint8_t, uint64_t +#include // tie +#include // move + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @brief an internal type for a backed binary type +/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ +template +class byte_container_with_subtype : public BinaryType +{ + public: + using container_type = BinaryType; + using subtype_type = std::uint64_t; + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /// @brief sets the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ + void set_subtype(subtype_type subtype_) noexcept + { + m_subtype = subtype_; + m_has_subtype = true; + } + + /// @brief return the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ + constexpr subtype_type subtype() const noexcept + { + return m_has_subtype ? m_subtype : static_cast(-1); + } + + /// @brief return whether the value has a subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /// @brief clears the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + subtype_type m_subtype = 0; + bool m_has_subtype = false; +}; + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/abi_macros.hpp b/soggy-mistress/extern/nlohmann/detail/abi_macros.hpp new file mode 100644 index 0000000..0d3108d --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/abi_macros.hpp @@ -0,0 +1,100 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 2 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif diff --git a/soggy-mistress/extern/nlohmann/detail/conversions/from_json.hpp b/soggy-mistress/extern/nlohmann/detail/conversions/from_json.hpp new file mode 100644 index 0000000..c6299aa --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/conversions/from_json.hpp @@ -0,0 +1,497 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +#include +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, concat("type must be null, but is ", j.type_name()), &j)); + } + n = nullptr; +} + +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic::value&& + !std::is_same::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); + } +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, concat("type must be boolean, but is ", j.type_name()), &j)); + } + b = *j.template get_ptr(); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + s = *j.template get_ptr(); +} + +template < + typename BasicJsonType, typename StringType, + enable_if_t < + std::is_assignable::value + && is_detected_exact::value + && !std::is_same::value + && !is_json_ref::value, int > = 0 > +inline void from_json(const BasicJsonType& j, StringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + + s = *j.template get_ptr(); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} + +#if !JSON_DISABLE_ENUM_SERIALIZATION +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type::type val; + get_arithmetic_value(j, val); + e = static_cast(val); +} +#endif // JSON_DISABLE_ENUM_SERIALIZATION + +// forward_list doesn't have an insert method +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, std::forward_list& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get(); + }); +} + +// valarray doesn't have an insert method +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, std::valarray& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get(); + }); +} + +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template +inline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr(); +} + +template +auto from_json_array_impl(const BasicJsonType& j, std::array& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template::value, + int> = 0> +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval()), + j.template get(), + void()) +{ + using std::end; + + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template::value, + int> = 0> +inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; + + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type::value&& + !is_constructible_object_type::value&& + !is_constructible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + from_json_array_impl(j, arr, priority_tag<3> {}); +} + +template < typename BasicJsonType, typename T, std::size_t... Idx > +std::array from_json_inplace_array_impl(BasicJsonType&& j, + identity_tag> /*unused*/, index_sequence /*unused*/) +{ + return { { std::forward(j).at(Idx).template get()... } }; +} + +template < typename BasicJsonType, typename T, std::size_t N > +auto from_json(BasicJsonType&& j, identity_tag> tag) +-> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, concat("type must be binary, but is ", j.type_name()), &j)); + } + + bin = *j.template get_ptr(); +} + +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, concat("type must be object, but is ", j.type_name()), &j)); + } + + ConstructibleObjectType ret; + const auto* inner_object = j.template get_ptr(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get()); + }); + obj = std::move(ret); +} + +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value, + int > = 0 > +inline void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::boolean: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); + } +} + +template +std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) +{ + return std::make_tuple(std::forward(j).at(Idx).template get()...); +} + +template < typename BasicJsonType, class A1, class A2 > +std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) +{ + return {std::forward(j).at(0).template get(), + std::forward(j).at(1).template get()}; +} + +template +inline void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) +{ + p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); +} + +template +std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) +{ + return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +inline void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) +{ + t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +auto from_json(BasicJsonType&& j, TupleRelated&& t) +-> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); +} + +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +inline void from_json(const BasicJsonType& j, std::map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +inline void from_json(const BasicJsonType& j, std::unordered_map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +inline void from_json(const BasicJsonType& j, std_fs::path& p) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + p = *j.template get_ptr(); +} +#endif + +struct from_json_fn +{ + template + auto operator()(const BasicJsonType& j, T&& val) const + noexcept(noexcept(from_json(j, std::forward(val)))) + -> decltype(from_json(j, std::forward(val))) + { + return from_json(j, std::forward(val)); + } +}; + +} // namespace detail + +#ifndef JSON_HAS_CPP_17 +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +#endif +JSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers) + detail::static_const::value; +#ifndef JSON_HAS_CPP_17 +} // namespace +#endif + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/conversions/to_chars.hpp b/soggy-mistress/extern/nlohmann/detail/conversions/to_chars.hpp new file mode 100644 index 0000000..febef93 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/conversions/to_chars.hpp @@ -0,0 +1,1118 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2009 Florian Loitsch +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // signbit, isfinite +#include // intN_t, uintN_t +#include // memcpy, memmove +#include // numeric_limits +#include // conditional + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief implements the Grisu2 algorithm for binary to decimal floating-point +conversion. + +This implementation is a slightly modified version of the reference +implementation which may be obtained from +http://florian.loitsch.com/publications (bench.tar.gz). + +The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. + +For a detailed description of the algorithm see: + +[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with + Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming + Language Design and Implementation, PLDI 2010 +[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", + Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language + Design and Implementation, PLDI 1996 +*/ +namespace dtoa_impl +{ + +template +Target reinterpret_bits(const Source source) +{ + static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); + + Target target; + std::memcpy(&target, &source, sizeof(Source)); + return target; +} + +struct diyfp // f * 2^e +{ + static constexpr int kPrecision = 64; // = q + + std::uint64_t f = 0; + int e = 0; + + constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} + + /*! + @brief returns x - y + @pre x.e == y.e and x.f >= y.f + */ + static diyfp sub(const diyfp& x, const diyfp& y) noexcept + { + JSON_ASSERT(x.e == y.e); + JSON_ASSERT(x.f >= y.f); + + return {x.f - y.f, x.e}; + } + + /*! + @brief returns x * y + @note The result is rounded. (Only the upper q bits are returned.) + */ + static diyfp mul(const diyfp& x, const diyfp& y) noexcept + { + static_assert(kPrecision == 64, "internal error"); + + // Computes: + // f = round((x.f * y.f) / 2^q) + // e = x.e + y.e + q + + // Emulate the 64-bit * 64-bit multiplication: + // + // p = u * v + // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) + // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) + // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) + // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) + // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) + // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) + // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) + // + // (Since Q might be larger than 2^32 - 1) + // + // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) + // + // (Q_hi + H does not overflow a 64-bit int) + // + // = p_lo + 2^64 p_hi + + const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; + const std::uint64_t u_hi = x.f >> 32u; + const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; + const std::uint64_t v_hi = y.f >> 32u; + + const std::uint64_t p0 = u_lo * v_lo; + const std::uint64_t p1 = u_lo * v_hi; + const std::uint64_t p2 = u_hi * v_lo; + const std::uint64_t p3 = u_hi * v_hi; + + const std::uint64_t p0_hi = p0 >> 32u; + const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; + const std::uint64_t p1_hi = p1 >> 32u; + const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; + const std::uint64_t p2_hi = p2 >> 32u; + + std::uint64_t Q = p0_hi + p1_lo + p2_lo; + + // The full product might now be computed as + // + // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) + // p_lo = p0_lo + (Q << 32) + // + // But in this particular case here, the full p_lo is not required. + // Effectively we only need to add the highest bit in p_lo to p_hi (and + // Q_hi + 1 does not overflow). + + Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up + + const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); + + return {h, x.e + y.e + 64}; + } + + /*! + @brief normalize x such that the significand is >= 2^(q-1) + @pre x.f != 0 + */ + static diyfp normalize(diyfp x) noexcept + { + JSON_ASSERT(x.f != 0); + + while ((x.f >> 63u) == 0) + { + x.f <<= 1u; + x.e--; + } + + return x; + } + + /*! + @brief normalize x such that the result has the exponent E + @pre e >= x.e and the upper e - x.e bits of x.f must be zero. + */ + static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept + { + const int delta = x.e - target_exponent; + + JSON_ASSERT(delta >= 0); + JSON_ASSERT(((x.f << delta) >> delta) == x.f); + + return {x.f << delta, target_exponent}; + } +}; + +struct boundaries +{ + diyfp w; + diyfp minus; + diyfp plus; +}; + +/*! +Compute the (normalized) diyfp representing the input number 'value' and its +boundaries. + +@pre value must be finite and positive +*/ +template +boundaries compute_boundaries(FloatType value) +{ + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // Convert the IEEE representation into a diyfp. + // + // If v is denormal: + // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) + // If v is normalized: + // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) + + static_assert(std::numeric_limits::is_iec559, + "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); + + constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) + constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); + constexpr int kMinExp = 1 - kBias; + constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) + + using bits_type = typename std::conditional::type; + + const auto bits = static_cast(reinterpret_bits(value)); + const std::uint64_t E = bits >> (kPrecision - 1); + const std::uint64_t F = bits & (kHiddenBit - 1); + + const bool is_denormal = E == 0; + const diyfp v = is_denormal + ? diyfp(F, kMinExp) + : diyfp(F + kHiddenBit, static_cast(E) - kBias); + + // Compute the boundaries m- and m+ of the floating-point value + // v = f * 2^e. + // + // Determine v- and v+, the floating-point predecessor and successor if v, + // respectively. + // + // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) + // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) + // + // v+ = v + 2^e + // + // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ + // between m- and m+ round to v, regardless of how the input rounding + // algorithm breaks ties. + // + // ---+-------------+-------------+-------------+-------------+--- (A) + // v- m- v m+ v+ + // + // -----------------+------+------+-------------+-------------+--- (B) + // v- m- v m+ v+ + + const bool lower_boundary_is_closer = F == 0 && E > 1; + const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); + const diyfp m_minus = lower_boundary_is_closer + ? diyfp(4 * v.f - 1, v.e - 2) // (B) + : diyfp(2 * v.f - 1, v.e - 1); // (A) + + // Determine the normalized w+ = m+. + const diyfp w_plus = diyfp::normalize(m_plus); + + // Determine w- = m- such that e_(w-) = e_(w+). + const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); + + return {diyfp::normalize(v), w_minus, w_plus}; +} + +// Given normalized diyfp w, Grisu needs to find a (normalized) cached +// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies +// within a certain range [alpha, gamma] (Definition 3.2 from [1]) +// +// alpha <= e = e_c + e_w + q <= gamma +// +// or +// +// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q +// <= f_c * f_w * 2^gamma +// +// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies +// +// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma +// +// or +// +// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) +// +// The choice of (alpha,gamma) determines the size of the table and the form of +// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well +// in practice: +// +// The idea is to cut the number c * w = f * 2^e into two parts, which can be +// processed independently: An integral part p1, and a fractional part p2: +// +// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e +// = (f div 2^-e) + (f mod 2^-e) * 2^e +// = p1 + p2 * 2^e +// +// The conversion of p1 into decimal form requires a series of divisions and +// modulos by (a power of) 10. These operations are faster for 32-bit than for +// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be +// achieved by choosing +// +// -e >= 32 or e <= -32 := gamma +// +// In order to convert the fractional part +// +// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... +// +// into decimal form, the fraction is repeatedly multiplied by 10 and the digits +// d[-i] are extracted in order: +// +// (10 * p2) div 2^-e = d[-1] +// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... +// +// The multiplication by 10 must not overflow. It is sufficient to choose +// +// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. +// +// Since p2 = f mod 2^-e < 2^-e, +// +// -e <= 60 or e >= -60 := alpha + +constexpr int kAlpha = -60; +constexpr int kGamma = -32; + +struct cached_power // c = f * 2^e ~= 10^k +{ + std::uint64_t f; + int e; + int k; +}; + +/*! +For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached +power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c +satisfies (Definition 3.2 from [1]) + + alpha <= e_c + e + q <= gamma. +*/ +inline cached_power get_cached_power_for_binary_exponent(int e) +{ + // Now + // + // alpha <= e_c + e + q <= gamma (1) + // ==> f_c * 2^alpha <= c * 2^e * 2^q + // + // and since the c's are normalized, 2^(q-1) <= f_c, + // + // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) + // ==> 2^(alpha - e - 1) <= c + // + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as + // + // k = ceil( log_10( 2^(alpha - e - 1) ) ) + // = ceil( (alpha - e - 1) * log_10(2) ) + // + // From the paper: + // "In theory the result of the procedure could be wrong since c is rounded, + // and the computation itself is approximated [...]. In practice, however, + // this simple function is sufficient." + // + // For IEEE double precision floating-point numbers converted into + // normalized diyfp's w = f * 2^e, with q = 64, + // + // e >= -1022 (min IEEE exponent) + // -52 (p - 1) + // -52 (p - 1, possibly normalize denormal IEEE numbers) + // -11 (normalize the diyfp) + // = -1137 + // + // and + // + // e <= +1023 (max IEEE exponent) + // -52 (p - 1) + // -11 (normalize the diyfp) + // = 960 + // + // This binary exponent range [-1137,960] results in a decimal exponent + // range [-307,324]. One does not need to store a cached power for each + // k in this range. For each such k it suffices to find a cached power + // such that the exponent of the product lies in [alpha,gamma]. + // This implies that the difference of the decimal exponents of adjacent + // table entries must be less than or equal to + // + // floor( (gamma - alpha) * log_10(2) ) = 8. + // + // (A smaller distance gamma-alpha would require a larger table.) + + // NB: + // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. + + constexpr int kCachedPowersMinDecExp = -300; + constexpr int kCachedPowersDecStep = 8; + + static constexpr std::array kCachedPowers = + { + { + { 0xAB70FE17C79AC6CA, -1060, -300 }, + { 0xFF77B1FCBEBCDC4F, -1034, -292 }, + { 0xBE5691EF416BD60C, -1007, -284 }, + { 0x8DD01FAD907FFC3C, -980, -276 }, + { 0xD3515C2831559A83, -954, -268 }, + { 0x9D71AC8FADA6C9B5, -927, -260 }, + { 0xEA9C227723EE8BCB, -901, -252 }, + { 0xAECC49914078536D, -874, -244 }, + { 0x823C12795DB6CE57, -847, -236 }, + { 0xC21094364DFB5637, -821, -228 }, + { 0x9096EA6F3848984F, -794, -220 }, + { 0xD77485CB25823AC7, -768, -212 }, + { 0xA086CFCD97BF97F4, -741, -204 }, + { 0xEF340A98172AACE5, -715, -196 }, + { 0xB23867FB2A35B28E, -688, -188 }, + { 0x84C8D4DFD2C63F3B, -661, -180 }, + { 0xC5DD44271AD3CDBA, -635, -172 }, + { 0x936B9FCEBB25C996, -608, -164 }, + { 0xDBAC6C247D62A584, -582, -156 }, + { 0xA3AB66580D5FDAF6, -555, -148 }, + { 0xF3E2F893DEC3F126, -529, -140 }, + { 0xB5B5ADA8AAFF80B8, -502, -132 }, + { 0x87625F056C7C4A8B, -475, -124 }, + { 0xC9BCFF6034C13053, -449, -116 }, + { 0x964E858C91BA2655, -422, -108 }, + { 0xDFF9772470297EBD, -396, -100 }, + { 0xA6DFBD9FB8E5B88F, -369, -92 }, + { 0xF8A95FCF88747D94, -343, -84 }, + { 0xB94470938FA89BCF, -316, -76 }, + { 0x8A08F0F8BF0F156B, -289, -68 }, + { 0xCDB02555653131B6, -263, -60 }, + { 0x993FE2C6D07B7FAC, -236, -52 }, + { 0xE45C10C42A2B3B06, -210, -44 }, + { 0xAA242499697392D3, -183, -36 }, + { 0xFD87B5F28300CA0E, -157, -28 }, + { 0xBCE5086492111AEB, -130, -20 }, + { 0x8CBCCC096F5088CC, -103, -12 }, + { 0xD1B71758E219652C, -77, -4 }, + { 0x9C40000000000000, -50, 4 }, + { 0xE8D4A51000000000, -24, 12 }, + { 0xAD78EBC5AC620000, 3, 20 }, + { 0x813F3978F8940984, 30, 28 }, + { 0xC097CE7BC90715B3, 56, 36 }, + { 0x8F7E32CE7BEA5C70, 83, 44 }, + { 0xD5D238A4ABE98068, 109, 52 }, + { 0x9F4F2726179A2245, 136, 60 }, + { 0xED63A231D4C4FB27, 162, 68 }, + { 0xB0DE65388CC8ADA8, 189, 76 }, + { 0x83C7088E1AAB65DB, 216, 84 }, + { 0xC45D1DF942711D9A, 242, 92 }, + { 0x924D692CA61BE758, 269, 100 }, + { 0xDA01EE641A708DEA, 295, 108 }, + { 0xA26DA3999AEF774A, 322, 116 }, + { 0xF209787BB47D6B85, 348, 124 }, + { 0xB454E4A179DD1877, 375, 132 }, + { 0x865B86925B9BC5C2, 402, 140 }, + { 0xC83553C5C8965D3D, 428, 148 }, + { 0x952AB45CFA97A0B3, 455, 156 }, + { 0xDE469FBD99A05FE3, 481, 164 }, + { 0xA59BC234DB398C25, 508, 172 }, + { 0xF6C69A72A3989F5C, 534, 180 }, + { 0xB7DCBF5354E9BECE, 561, 188 }, + { 0x88FCF317F22241E2, 588, 196 }, + { 0xCC20CE9BD35C78A5, 614, 204 }, + { 0x98165AF37B2153DF, 641, 212 }, + { 0xE2A0B5DC971F303A, 667, 220 }, + { 0xA8D9D1535CE3B396, 694, 228 }, + { 0xFB9B7CD9A4A7443C, 720, 236 }, + { 0xBB764C4CA7A44410, 747, 244 }, + { 0x8BAB8EEFB6409C1A, 774, 252 }, + { 0xD01FEF10A657842C, 800, 260 }, + { 0x9B10A4E5E9913129, 827, 268 }, + { 0xE7109BFBA19C0C9D, 853, 276 }, + { 0xAC2820D9623BF429, 880, 284 }, + { 0x80444B5E7AA7CF85, 907, 292 }, + { 0xBF21E44003ACDD2D, 933, 300 }, + { 0x8E679C2F5E44FF8F, 960, 308 }, + { 0xD433179D9C8CB841, 986, 316 }, + { 0x9E19DB92B4E31BA9, 1013, 324 }, + } + }; + + // This computation gives exactly the same results for k as + // k = ceil((kAlpha - e - 1) * 0.30102999566398114) + // for |e| <= 1500, but doesn't require floating-point operations. + // NB: log_10(2) ~= 78913 / 2^18 + JSON_ASSERT(e >= -1500); + JSON_ASSERT(e <= 1500); + const int f = kAlpha - e - 1; + const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); + + const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; + JSON_ASSERT(index >= 0); + JSON_ASSERT(static_cast(index) < kCachedPowers.size()); + + const cached_power cached = kCachedPowers[static_cast(index)]; + JSON_ASSERT(kAlpha <= cached.e + e + 64); + JSON_ASSERT(kGamma >= cached.e + e + 64); + + return cached; +} + +/*! +For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. +For n == 0, returns 1 and sets pow10 := 1. +*/ +inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) +{ + // LCOV_EXCL_START + if (n >= 1000000000) + { + pow10 = 1000000000; + return 10; + } + // LCOV_EXCL_STOP + if (n >= 100000000) + { + pow10 = 100000000; + return 9; + } + if (n >= 10000000) + { + pow10 = 10000000; + return 8; + } + if (n >= 1000000) + { + pow10 = 1000000; + return 7; + } + if (n >= 100000) + { + pow10 = 100000; + return 6; + } + if (n >= 10000) + { + pow10 = 10000; + return 5; + } + if (n >= 1000) + { + pow10 = 1000; + return 4; + } + if (n >= 100) + { + pow10 = 100; + return 3; + } + if (n >= 10) + { + pow10 = 10; + return 2; + } + + pow10 = 1; + return 1; +} + +inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, + std::uint64_t rest, std::uint64_t ten_k) +{ + JSON_ASSERT(len >= 1); + JSON_ASSERT(dist <= delta); + JSON_ASSERT(rest <= delta); + JSON_ASSERT(ten_k > 0); + + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // ten_k + // <------> + // <---- rest ----> + // --------------[------------------+----+--------------]-------------- + // w V + // = buf * 10^k + // + // ten_k represents a unit-in-the-last-place in the decimal representation + // stored in buf. + // Decrement buf by ten_k while this takes buf closer to w. + + // The tests are written in this order to avoid overflow in unsigned + // integer arithmetic. + + while (rest < dist + && delta - rest >= ten_k + && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) + { + JSON_ASSERT(buf[len - 1] != '0'); + buf[len - 1]--; + rest += ten_k; + } +} + +/*! +Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. +M- and M+ must be normalized and share the same exponent -60 <= e <= -32. +*/ +inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, + diyfp M_minus, diyfp w, diyfp M_plus) +{ + static_assert(kAlpha >= -60, "internal error"); + static_assert(kGamma <= -32, "internal error"); + + // Generates the digits (and the exponent) of a decimal floating-point + // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's + // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. + // + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // Grisu2 generates the digits of M+ from left to right and stops as soon as + // V is in [M-,M+]. + + JSON_ASSERT(M_plus.e >= kAlpha); + JSON_ASSERT(M_plus.e <= kGamma); + + std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) + std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) + + // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): + // + // M+ = f * 2^e + // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e + // = ((p1 ) * 2^-e + (p2 )) * 2^e + // = p1 + p2 * 2^e + + const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); + + auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) + std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e + + // 1) + // + // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] + + JSON_ASSERT(p1 > 0); + + std::uint32_t pow10{}; + const int k = find_largest_pow10(p1, pow10); + + // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) + // + // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) + // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) + // + // M+ = p1 + p2 * 2^e + // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e + // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e + // = d[k-1] * 10^(k-1) + ( rest) * 2^e + // + // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) + // + // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] + // + // but stop as soon as + // + // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e + + int n = k; + while (n > 0) + { + // Invariants: + // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) + // pow10 = 10^(n-1) <= p1 < 10^n + // + const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) + const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) + // + // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e + // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) + // + p1 = r; + n--; + // + // M+ = buffer * 10^n + (p1 + p2 * 2^e) + // pow10 = 10^n + // + + // Now check if enough digits have been generated. + // Compute + // + // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e + // + // Note: + // Since rest and delta share the same exponent e, it suffices to + // compare the significands. + const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; + if (rest <= delta) + { + // V = buffer * 10^n, with M- <= V <= M+. + + decimal_exponent += n; + + // We may now just stop. But instead look if the buffer could be + // decremented to bring V closer to w. + // + // pow10 = 10^n is now 1 ulp in the decimal representation V. + // The rounding procedure works with diyfp's with an implicit + // exponent of e. + // + // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e + // + const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; + grisu2_round(buffer, length, dist, delta, rest, ten_n); + + return; + } + + pow10 /= 10; + // + // pow10 = 10^(n-1) <= p1 < 10^n + // Invariants restored. + } + + // 2) + // + // The digits of the integral part have been generated: + // + // M+ = d[k-1]...d[1]d[0] + p2 * 2^e + // = buffer + p2 * 2^e + // + // Now generate the digits of the fractional part p2 * 2^e. + // + // Note: + // No decimal point is generated: the exponent is adjusted instead. + // + // p2 actually represents the fraction + // + // p2 * 2^e + // = p2 / 2^-e + // = d[-1] / 10^1 + d[-2] / 10^2 + ... + // + // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) + // + // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m + // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) + // + // using + // + // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) + // = ( d) * 2^-e + ( r) + // + // or + // 10^m * p2 * 2^e = d + r * 2^e + // + // i.e. + // + // M+ = buffer + p2 * 2^e + // = buffer + 10^-m * (d + r * 2^e) + // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e + // + // and stop as soon as 10^-m * r * 2^e <= delta * 2^e + + JSON_ASSERT(p2 > delta); + + int m = 0; + for (;;) + { + // Invariant: + // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e + // = buffer * 10^-m + 10^-m * (p2 ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e + // + JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); + p2 *= 10; + const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e + const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e + // + // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) + // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + p2 = r; + m++; + // + // M+ = buffer * 10^-m + 10^-m * p2 * 2^e + // Invariant restored. + + // Check if enough digits have been generated. + // + // 10^-m * p2 * 2^e <= delta * 2^e + // p2 * 2^e <= 10^m * delta * 2^e + // p2 <= 10^m * delta + delta *= 10; + dist *= 10; + if (p2 <= delta) + { + break; + } + } + + // V = buffer * 10^-m, with M- <= V <= M+. + + decimal_exponent -= m; + + // 1 ulp in the decimal representation is now 10^-m. + // Since delta and dist are now scaled by 10^m, we need to do the + // same with ulp in order to keep the units in sync. + // + // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e + // + const std::uint64_t ten_m = one.f; + grisu2_round(buffer, length, dist, delta, p2, ten_m); + + // By construction this algorithm generates the shortest possible decimal + // number (Loitsch, Theorem 6.2) which rounds back to w. + // For an input number of precision p, at least + // + // N = 1 + ceil(p * log_10(2)) + // + // decimal digits are sufficient to identify all binary floating-point + // numbers (Matula, "In-and-Out conversions"). + // This implies that the algorithm does not produce more than N decimal + // digits. + // + // N = 17 for p = 53 (IEEE double precision) + // N = 9 for p = 24 (IEEE single precision) +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +JSON_HEDLEY_NON_NULL(1) +inline void grisu2(char* buf, int& len, int& decimal_exponent, + diyfp m_minus, diyfp v, diyfp m_plus) +{ + JSON_ASSERT(m_plus.e == m_minus.e); + JSON_ASSERT(m_plus.e == v.e); + + // --------(-----------------------+-----------------------)-------- (A) + // m- v m+ + // + // --------------------(-----------+-----------------------)-------- (B) + // m- v m+ + // + // First scale v (and m- and m+) such that the exponent is in the range + // [alpha, gamma]. + + const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); + + const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k + + // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] + const diyfp w = diyfp::mul(v, c_minus_k); + const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); + const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); + + // ----(---+---)---------------(---+---)---------------(---+---)---- + // w- w w+ + // = c*m- = c*v = c*m+ + // + // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and + // w+ are now off by a small amount. + // In fact: + // + // w - v * 10^k < 1 ulp + // + // To account for this inaccuracy, add resp. subtract 1 ulp. + // + // --------+---[---------------(---+---)---------------]---+-------- + // w- M- w M+ w+ + // + // Now any number in [M-, M+] (bounds included) will round to w when input, + // regardless of how the input rounding algorithm breaks ties. + // + // And digit_gen generates the shortest possible such number in [M-, M+]. + // Note that this does not mean that Grisu2 always generates the shortest + // possible number in the interval (m-, m+). + const diyfp M_minus(w_minus.f + 1, w_minus.e); + const diyfp M_plus (w_plus.f - 1, w_plus.e ); + + decimal_exponent = -cached.k; // = -(-k) = k + + grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +template +JSON_HEDLEY_NON_NULL(1) +void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) +{ + static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, + "internal error: not enough precision"); + + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // If the neighbors (and boundaries) of 'value' are always computed for double-precision + // numbers, all float's can be recovered using strtod (and strtof). However, the resulting + // decimal representations are not exactly "short". + // + // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) + // says "value is converted to a string as if by std::sprintf in the default ("C") locale" + // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars' + // does. + // On the other hand, the documentation for 'std::to_chars' requires that "parsing the + // representation using the corresponding std::from_chars function recovers value exactly". That + // indicates that single precision floating-point numbers should be recovered using + // 'std::strtof'. + // + // NB: If the neighbors are computed for single-precision numbers, there is a single float + // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision + // value is off by 1 ulp. +#if 0 + const boundaries w = compute_boundaries(static_cast(value)); +#else + const boundaries w = compute_boundaries(value); +#endif + + grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); +} + +/*! +@brief appends a decimal representation of e to buf +@return a pointer to the element following the exponent. +@pre -1000 < e < 1000 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* append_exponent(char* buf, int e) +{ + JSON_ASSERT(e > -1000); + JSON_ASSERT(e < 1000); + + if (e < 0) + { + e = -e; + *buf++ = '-'; + } + else + { + *buf++ = '+'; + } + + auto k = static_cast(e); + if (k < 10) + { + // Always print at least two digits in the exponent. + // This is for compatibility with printf("%g"). + *buf++ = '0'; + *buf++ = static_cast('0' + k); + } + else if (k < 100) + { + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + else + { + *buf++ = static_cast('0' + k / 100); + k %= 100; + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + + return buf; +} + +/*! +@brief prettify v = buf * 10^decimal_exponent + +If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point +notation. Otherwise it will be printed in exponential notation. + +@pre min_exp < 0 +@pre max_exp > 0 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* format_buffer(char* buf, int len, int decimal_exponent, + int min_exp, int max_exp) +{ + JSON_ASSERT(min_exp < 0); + JSON_ASSERT(max_exp > 0); + + const int k = len; + const int n = len + decimal_exponent; + + // v = buf * 10^(n-k) + // k is the length of the buffer (number of decimal digits) + // n is the position of the decimal point relative to the start of the buffer. + + if (k <= n && n <= max_exp) + { + // digits[000] + // len <= max_exp + 2 + + std::memset(buf + k, '0', static_cast(n) - static_cast(k)); + // Make it look like a floating-point number (#362, #378) + buf[n + 0] = '.'; + buf[n + 1] = '0'; + return buf + (static_cast(n) + 2); + } + + if (0 < n && n <= max_exp) + { + // dig.its + // len <= max_digits10 + 1 + + JSON_ASSERT(k > n); + + std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); + buf[n] = '.'; + return buf + (static_cast(k) + 1U); + } + + if (min_exp < n && n <= 0) + { + // 0.[000]digits + // len <= 2 + (-min_exp - 1) + max_digits10 + + std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); + buf[0] = '0'; + buf[1] = '.'; + std::memset(buf + 2, '0', static_cast(-n)); + return buf + (2U + static_cast(-n) + static_cast(k)); + } + + if (k == 1) + { + // dE+123 + // len <= 1 + 5 + + buf += 1; + } + else + { + // d.igitsE+123 + // len <= max_digits10 + 1 + 5 + + std::memmove(buf + 2, buf + 1, static_cast(k) - 1); + buf[1] = '.'; + buf += 1 + static_cast(k); + } + + *buf++ = 'e'; + return append_exponent(buf, n - 1); +} + +} // namespace dtoa_impl + +/*! +@brief generates a decimal representation of the floating-point number value in [first, last). + +The format of the resulting decimal representation is similar to printf's %g +format. Returns an iterator pointing past-the-end of the decimal representation. + +@note The input number must be finite, i.e. NaN's and Inf's are not supported. +@note The buffer must be large enough. +@note The result is NOT null-terminated. +*/ +template +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL +char* to_chars(char* first, const char* last, FloatType value) +{ + static_cast(last); // maybe unused - fix warning + JSON_ASSERT(std::isfinite(value)); + + // Use signbit(value) instead of (value < 0) since signbit works for -0. + if (std::signbit(value)) + { + value = -value; + *first++ = '-'; + } + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (value == 0) // +-0 + { + *first++ = '0'; + // Make it look like a floating-point number (#362, #378) + *first++ = '.'; + *first++ = '0'; + return first; + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); + + // Compute v = buffer * 10^decimal_exponent. + // The decimal digits are stored in the buffer, which needs to be interpreted + // as an unsigned decimal integer. + // len is the length of the buffer, i.e. the number of decimal digits. + int len = 0; + int decimal_exponent = 0; + dtoa_impl::grisu2(first, len, decimal_exponent, value); + + JSON_ASSERT(len <= std::numeric_limits::max_digits10); + + // Format the buffer like printf("%.*g", prec, value) + constexpr int kMinExp = -4; + // Use digits10 here to increase compatibility with version 2. + constexpr int kMaxExp = std::numeric_limits::digits10; + + JSON_ASSERT(last - first >= kMaxExp + 2); + JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); + + return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/conversions/to_json.hpp b/soggy-mistress/extern/nlohmann/detail/conversions/to_json.hpp new file mode 100644 index 0000000..b33d726 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/conversions/to_json.hpp @@ -0,0 +1,446 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // copy +#include // begin, end +#include // string +#include // tuple, get +#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include // move, forward, declval, pair +#include // valarray +#include // vector + +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +////////////////// +// constructors // +////////////////// + +/* + * Note all external_constructor<>::construct functions need to call + * j.m_value.destroy(j.m_type) to avoid a memory leak in case j contains an + * allocated value (e.g., a string). See bug issue + * https://github.com/nlohmann/json/issues/2865 for more information. + */ + +template struct external_constructor; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::boolean; + j.m_value = b; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = s; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = std::move(s); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value.string = j.template create(str); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(b); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(std::move(b)); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_float; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_unsigned; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_integer; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = arr; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = std::move(arr); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; + + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value.array = j.template create(begin(arr), end(arr)); + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, const std::vector& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_value.array->push_back(x); + j.set_parent(j.m_value.array->back()); + } + j.assert_invariant(); + } + + template::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + } + j.set_parents(); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = obj; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = std::move(obj); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) + { + using std::begin; + using std::end; + + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value.object = j.template create(begin(obj), end(obj)); + j.set_parents(); + j.assert_invariant(); + } +}; + +///////////// +// to_json // +///////////// + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, T b) noexcept +{ + external_constructor::construct(j, b); +} + +template < typename BasicJsonType, typename BoolRef, + enable_if_t < + ((std::is_same::reference, BoolRef>::value + && !std::is_same ::reference, typename BasicJsonType::boolean_t&>::value) + || (std::is_same::const_reference, BoolRef>::value + && !std::is_same ::const_reference>, + typename BasicJsonType::boolean_t >::value)) + && std::is_convertible::value, int > = 0 > +inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept +{ + external_constructor::construct(j, static_cast(b)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, const CompatibleString& s) +{ + external_constructor::construct(j, s); +} + +template +inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) +{ + external_constructor::construct(j, std::move(s)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, FloatType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +#if !JSON_DISABLE_ENUM_SERIALIZATION +template::value, int> = 0> +inline void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type::type; + external_constructor::construct(j, static_cast(e)); +} +#endif // JSON_DISABLE_ENUM_SERIALIZATION + +template +inline void to_json(BasicJsonType& j, const std::vector& e) +{ + external_constructor::construct(j, e); +} + +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type::value&& + !is_compatible_object_type::value&& + !is_compatible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr) +{ + external_constructor::construct(j, arr); +} + +template +inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor::construct(j, bin); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, const std::valarray& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template +inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > +inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor::construct(j, obj); +} + +template +inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor::construct(j, std::move(obj)); +} + +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int > = 0 > +inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + external_constructor::construct(j, arr); +} + +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +inline void to_json(BasicJsonType& j, const std::pair& p) +{ + j = { p.first, p.second }; +} + +// for https://github.com/nlohmann/json/pull/1134 +template>::value, int> = 0> +inline void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} + +template +inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) +{ + j = { std::get(t)... }; +} + +template::value, int > = 0> +inline void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence::value> {}); +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +inline void to_json(BasicJsonType& j, const std_fs::path& p) +{ + j = p.string(); +} +#endif + +struct to_json_fn +{ + template + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) + -> decltype(to_json(j, std::forward(val)), void()) + { + return to_json(j, std::forward(val)); + } +}; +} // namespace detail + +#ifndef JSON_HAS_CPP_17 +/// namespace to hold default `to_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +#endif +JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers) + detail::static_const::value; +#ifndef JSON_HAS_CPP_17 +} // namespace +#endif + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/exceptions.hpp b/soggy-mistress/extern/nlohmann/detail/exceptions.hpp new file mode 100644 index 0000000..96d7e01 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/exceptions.hpp @@ -0,0 +1,255 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // nullptr_t +#include // exception +#include // runtime_error +#include // to_string +#include // vector + +#include +#include +#include +#include +#include +#include +#include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +//////////////// +// exceptions // +//////////////// + +/// @brief general exception of the @ref basic_json class +/// @sa https://json.nlohmann.me/api/basic_json/exception/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + const char* what() const noexcept override + { + return m.what(); + } + + /// the id of the exception + const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) + + static std::string name(const std::string& ename, int id_) + { + return concat("[json.exception.", ename, '.', std::to_string(id_), "] "); + } + + static std::string diagnostics(std::nullptr_t /*leaf_element*/) + { + return ""; + } + + template + static std::string diagnostics(const BasicJsonType* leaf_element) + { +#if JSON_DIAGNOSTICS + std::vector tokens; + for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent) + { + switch (current->m_parent->type()) + { + case value_t::array: + { + for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i) + { + if (¤t->m_parent->m_value.array->operator[](i) == current) + { + tokens.emplace_back(std::to_string(i)); + break; + } + } + break; + } + + case value_t::object: + { + for (const auto& element : *current->m_parent->m_value.object) + { + if (&element.second == current) + { + tokens.emplace_back(element.first.c_str()); + break; + } + } + break; + } + + case value_t::null: // LCOV_EXCL_LINE + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + } + + if (tokens.empty()) + { + return ""; + } + + auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, + [](const std::string & a, const std::string & b) + { + return concat(a, '/', detail::escape(b)); + }); + return concat('(', str, ") "); +#else + static_cast(leaf_element); + return ""; +#endif + } + + private: + /// an exception object as storage for error messages + std::runtime_error m; +}; + +/// @brief exception indicating a parse error +/// @sa https://json.nlohmann.me/api/basic_json/parse_error/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + template::value, int> = 0> + static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context) + { + std::string w = concat(exception::name("parse_error", id_), "parse error", + position_string(pos), ": ", exception::diagnostics(context), what_arg); + return {id_, pos.chars_read_total, w.c_str()}; + } + + template::value, int> = 0> + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context) + { + std::string w = concat(exception::name("parse_error", id_), "parse error", + (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""), + ": ", exception::diagnostics(context), what_arg); + return {id_, byte_, w.c_str()}; + } + + /*! + @brief byte index of the parse error + + The byte index of the last read character in the input file. + + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; + + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + + static std::string position_string(const position_t& pos) + { + return concat(" at line ", std::to_string(pos.lines_read + 1), + ", column ", std::to_string(pos.chars_read_current_line)); + } +}; + +/// @brief exception indicating errors with iterators +/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ +class invalid_iterator : public exception +{ + public: + template::value, int> = 0> + static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context) + { + std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; + +/// @brief exception indicating executing a member function with a wrong type +/// @sa https://json.nlohmann.me/api/basic_json/type_error/ +class type_error : public exception +{ + public: + template::value, int> = 0> + static type_error create(int id_, const std::string& what_arg, BasicJsonContext context) + { + std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating access out of the defined range +/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ +class out_of_range : public exception +{ + public: + template::value, int> = 0> + static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context) + { + std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating other library errors +/// @sa https://json.nlohmann.me/api/basic_json/other_error/ +class other_error : public exception +{ + public: + template::value, int> = 0> + static other_error create(int id_, const std::string& what_arg, BasicJsonContext context) + { + std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/hash.hpp b/soggy-mistress/extern/nlohmann/detail/hash.hpp new file mode 100644 index 0000000..3f05af8 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/hash.hpp @@ -0,0 +1,129 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // uint8_t +#include // size_t +#include // hash + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} + +/*! +@brief hash a JSON value + +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. + +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template +std::size_t hash(const BasicJsonType& j) +{ + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + + const auto type = static_cast(j.type()); + switch (j.type()) + { + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } + + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } + + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } + + case BasicJsonType::value_t::string: + { + const auto h = std::hash {}(j.template get_ref()); + return combine(type, h); + } + + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_unsigned: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_float: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::binary: + { + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, static_cast(j.get_binary().subtype())); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash {}(byte)); + } + return seed; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return 0; // LCOV_EXCL_LINE + } +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/input/binary_reader.hpp b/soggy-mistress/extern/nlohmann/detail/input/binary_reader.hpp new file mode 100644 index 0000000..634615d --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/input/binary_reader.hpp @@ -0,0 +1,3010 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // generate_n +#include // array +#include // ldexp +#include // size_t +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // snprintf +#include // memcpy +#include // back_inserter +#include // numeric_limits +#include // char_traits, string +#include // make_pair, move +#include // vector + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// how to treat CBOR tags +enum class cbor_tag_handler_t +{ + error, ///< throw a parse_error exception in case of a tag + ignore, ///< ignore tags + store ///< store tags as binary type +}; + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianness(int num = 1) noexcept +{ + return *reinterpret_cast(&num) == 1; +} + + +/////////////////// +// binary reader // +/////////////////// + +/*! +@brief deserialization of CBOR, MessagePack, and UBJSON values +*/ +template> +class binary_reader +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + /*! + @brief create a binary reader + + @param[in] adapter input adapter to read from + */ + explicit binary_reader(InputAdapterType&& adapter, const input_format_t format = input_format_t::json) noexcept : ia(std::move(adapter)), input_format(format) + { + (void)detail::is_sax_static_asserts {}; + } + + // make class move-only + binary_reader(const binary_reader&) = delete; + binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + binary_reader& operator=(const binary_reader&) = delete; + binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~binary_reader() = default; + + /*! + @param[in] format the binary format to parse + @param[in] sax_ a SAX event processor + @param[in] strict whether to expect the input to be consumed completed + @param[in] tag_handler how to treat CBOR tags + + @return whether parsing was successful + */ + JSON_HEDLEY_NON_NULL(3) + bool sax_parse(const input_format_t format, + json_sax_t* sax_, + const bool strict = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + sax = sax_; + bool result = false; + + switch (format) + { + case input_format_t::bson: + result = parse_bson_internal(); + break; + + case input_format_t::cbor: + result = parse_cbor_internal(true, tag_handler); + break; + + case input_format_t::msgpack: + result = parse_msgpack_internal(); + break; + + case input_format_t::ubjson: + case input_format_t::bjdata: + result = parse_ubjson_internal(); + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + // strict mode: next byte must be EOF + if (result && strict) + { + if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata) + { + get_ignore_noop(); + } + else + { + get(); + } + + if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, + exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr)); + } + } + + return result; + } + + private: + ////////// + // BSON // + ////////// + + /*! + @brief Reads in a BSON-object and passes it to the SAX-parser. + @return whether a valid BSON-value was passed to the SAX parser + */ + bool parse_bson_internal() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) + { + return false; + } + + return sax->end_object(); + } + + /*! + @brief Parses a C-style string from the BSON input. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @return `true` if the \x00-byte indicating the end of the string was + encountered before the EOF; false` indicates an unexpected EOF. + */ + bool get_bson_cstr(string_t& result) + { + auto out = std::back_inserter(result); + while (true) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) + { + return false; + } + if (current == 0x00) + { + return true; + } + *out++ = static_cast(current); + } + } + + /*! + @brief Parses a zero-terminated string of length @a len from the BSON + input. + @param[in] len The length (including the zero-byte at the end) of the + string to be read. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 1 + @return `true` if the string was successfully parsed + */ + template + bool get_bson_string(const NumberType len, string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 1)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr)); + } + + return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in,out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr)); + } + + // All BSON binary values have a subtype + std::uint8_t subtype{}; + get_number(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); + } + + /*! + @brief Read a BSON document element of the given @a element_type. + @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html + @param[in] element_type_parse_position The position in the input stream, + where the `element_type` was read. + @warning Not all BSON element types are supported yet. An unsupported + @a element_type will give rise to a parse_error.114: + Unsupported BSON record type 0x... + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_internal(const char_int_type element_type, + const std::size_t element_type_parse_position) + { + switch (element_type) + { + case 0x01: // double + { + double number{}; + return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); + } + + case 0x02: // string + { + std::int32_t len{}; + string_t value; + return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); + } + + case 0x03: // object + { + return parse_bson_internal(); + } + + case 0x04: // array + { + return parse_bson_array(); + } + + case 0x05: // binary + { + std::int32_t len{}; + binary_t value; + return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); + } + + case 0x08: // boolean + { + return sax->boolean(get() != 0); + } + + case 0x0A: // null + { + return sax->null(); + } + + case 0x10: // int32 + { + std::int32_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x12: // int64 + { + std::int64_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + default: // anything else not supported (yet) + { + std::array cr{{}}; + static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + std::string cr_str{cr.data()}; + return sax->parse_error(element_type_parse_position, cr_str, + parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr)); + } + } + } + + /*! + @brief Read a BSON element list (as specified in the BSON-spec) + + The same binary layout is used for objects and arrays, hence it must be + indicated with the argument @a is_array which one is expected + (true --> array, false --> object). + + @param[in] is_array Determines if the element list being read is to be + treated as an object (@a is_array == false), or as an + array (@a is_array == true). + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_list(const bool is_array) + { + string_t key; + + while (auto element_type = get()) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) + { + return false; + } + + const std::size_t element_type_parse_position = chars_read; + if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) + { + return false; + } + + if (!is_array && !sax->key(key)) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) + { + return false; + } + + // get_bson_cstr only appends + key.clear(); + } + + return true; + } + + /*! + @brief Reads an array from the BSON input and passes it to the SAX-parser. + @return whether a valid BSON-array was passed to the SAX parser + */ + bool parse_bson_array() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) + { + return false; + } + + return sax->end_array(); + } + + ////////// + // CBOR // + ////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true) or whether the last read character should + be considered instead (false) + @param[in] tag_handler how CBOR tags should be treated + + @return whether a valid CBOR value was passed to the SAX parser + */ + bool parse_cbor_internal(const bool get_char, + const cbor_tag_handler_t tag_handler) + { + switch (get_char ? get() : current) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::cbor, "value"); + + // Integer 0x00..0x17 (0..23) + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return sax->number_unsigned(static_cast(current)); + + case 0x18: // Unsigned integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x19: // Unsigned integer (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1A: // Unsigned integer (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1B: // Unsigned integer (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + // Negative integer -1-0x00..-1-0x17 (-1..-24) + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return sax->number_integer(static_cast(0x20 - 1 - current)); + + case 0x38: // Negative integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x39: // Negative integer -1-n (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) + - static_cast(number)); + } + + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) && sax->binary(b); + } + + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + case 0x7F: // UTF-8 string (indefinite length) + { + string_t s; + return get_cbor_string(s) && sax->string(s); + } + + // array (0x00..0x17 data items follow) + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + return get_cbor_array( + conditional_static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0x98: // array (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x99: // array (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9A: // array (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast(len), tag_handler); + } + + case 0x9B: // array (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast(len), tag_handler); + } + + case 0x9F: // array (indefinite length) + return get_cbor_array(static_cast(-1), tag_handler); + + // map (0x00..0x17 pairs of data items follow) + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + return get_cbor_object(conditional_static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0xB8: // map (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xB9: // map (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBA: // map (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast(len), tag_handler); + } + + case 0xBB: // map (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast(len), tag_handler); + } + + case 0xBF: // map (indefinite length) + return get_cbor_object(static_cast(-1), tag_handler); + + case 0xC6: // tagged item + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD8: // tagged item (1 bytes follow) + case 0xD9: // tagged item (2 bytes follow) + case 0xDA: // tagged item (4 bytes follow) + case 0xDB: // tagged item (8 bytes follow) + { + switch (tag_handler) + { + case cbor_tag_handler_t::error: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + + case cbor_tag_handler_t::ignore: + { + // ignore binary subtype + switch (current) + { + case 0xD8: + { + std::uint8_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xD9: + { + std::uint16_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDA: + { + std::uint32_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDB: + { + std::uint64_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + default: + break; + } + return parse_cbor_internal(true, tag_handler); + } + + case cbor_tag_handler_t::store: + { + binary_t b; + // use binary subtype and store in binary container + switch (current) + { + case 0xD8: + { + std::uint8_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xD9: + { + std::uint16_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDA: + { + std::uint32_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDB: + { + std::uint64_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + default: + return parse_cbor_internal(true, tag_handler); + } + get(); + return get_cbor_binary(b) && sax->binary(b); + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + case 0xF4: // false + return sax->boolean(false); + + case 0xF5: // true + return sax->boolean(true); + + case 0xF6: // null + return sax->null(); + + case 0xF9: // Half-Precision Float (two-byte IEEE 754) + { + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte1 << 8u) + byte2); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 0xFA: // Single-Precision Float (four-byte IEEE 754) + { + float number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + case 0xFB: // Double-Precision Float (eight-byte IEEE 754) + { + double number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + default: // anything else (0xFF is handled inside the other types) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + } + } + + /*! + @brief reads a CBOR string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + Additionally, CBOR's strings with indefinite lengths are supported. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_cbor_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) + { + return false; + } + + switch (current) + { + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + { + return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7F: // UTF-8 string (indefinite length) + { + while (get() != 0xFF) + { + string_t chunk; + if (!get_cbor_string(chunk)) + { + return false; + } + result.append(chunk); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr)); + } + } + } + + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (!get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr)); + } + } + } + + /*! + @param[in] len the length of the array or static_cast(-1) for an + array of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether array creation completed + */ + bool get_cbor_array(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + if (len != static_cast(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) + { + return false; + } + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object or static_cast(-1) for an + object of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether object creation completed + */ + bool get_cbor_object(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + if (len != 0) + { + string_t key; + if (len != static_cast(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + } + + return sax->end_object(); + } + + ///////////// + // MsgPack // + ///////////// + + /*! + @return whether a valid MessagePack value was passed to the SAX parser + */ + bool parse_msgpack_internal() + { + switch (get()) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::msgpack, "value"); + + // positive fixint + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + return sax->number_unsigned(static_cast(current)); + + // fixmap + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + return get_msgpack_object(conditional_static_cast(static_cast(current) & 0x0Fu)); + + // fixarray + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + return get_msgpack_array(conditional_static_cast(static_cast(current) & 0x0Fu)); + + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 + { + string_t s; + return get_msgpack_string(s) && sax->string(s); + } + + case 0xC0: // nil + return sax->null(); + + case 0xC2: // false + return sax->boolean(false); + + case 0xC3: // true + return sax->boolean(true); + + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) && sax->binary(b); + } + + case 0xCA: // float 32 + { + float number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCB: // float 64 + { + double number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCC: // uint 8 + { + std::uint8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCD: // uint 16 + { + std::uint16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCE: // uint 32 + { + std::uint32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCF: // uint 64 + { + std::uint64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xD0: // int 8 + { + std::int8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD1: // int 16 + { + std::int16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD2: // int 32 + { + std::int32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD3: // int 64 + { + std::int64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xDC: // array 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDD: // array 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(conditional_static_cast(len)); + } + + case 0xDE: // map 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + case 0xDF: // map 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(conditional_static_cast(len)); + } + + // negative fixint + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: + return sax->number_integer(static_cast(current)); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + } + } + + /*! + @brief reads a MessagePack string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_msgpack_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) + { + return false; + } + + switch (current) + { + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + { + return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); + } + + case 0xD9: // str 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDA: // str 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDB: // str 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr)); + } + } + } + + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 1, result) && + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 2, result) && + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 4, result) && + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 8, result) && + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 16, result) && + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + /*! + @param[in] len the length of the array + @return whether array creation completed + */ + bool get_msgpack_array(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object + @return whether object creation completed + */ + bool get_msgpack_object(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + key.clear(); + } + + return sax->end_object(); + } + + //////////// + // UBJSON // + //////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether a valid UBJSON value was passed to the SAX parser + */ + bool parse_ubjson_internal(const bool get_char = true) + { + return get_ubjson_value(get_char ? get_ignore_noop() : current); + } + + /*! + @brief reads a UBJSON string + + This function is either called after reading the 'S' byte explicitly + indicating a string, or in case of an object key where the 'S' byte can be + left out. + + @param[out] result created string + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether string creation completed + */ + bool get_ubjson_string(string_t& result, const bool get_char = true) + { + if (get_char) + { + get(); // TODO(niels): may we ignore N here? + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) + { + return false; + } + + switch (current) + { + case 'U': + { + std::uint8_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'i': + { + std::int8_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'I': + { + std::int16_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'l': + { + std::int32_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'L': + { + std::int64_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + default: + break; + } + auto last_token = get_token_string(); + std::string message; + + if (input_format != input_format_t::bjdata) + { + message = "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token; + } + else + { + message = "expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x" + last_token; + } + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "string"), nullptr)); + } + + /*! + @param[out] dim an integer vector storing the ND array dimensions + @return whether reading ND array size vector is successful + */ + bool get_ubjson_ndarray_size(std::vector& dim) + { + std::pair size_and_type; + size_t dimlen = 0; + bool no_ndarray = true; + + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray))) + { + return false; + } + + if (size_and_type.first != npos) + { + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second))) + { + return false; + } + dim.push_back(dimlen); + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray))) + { + return false; + } + dim.push_back(dimlen); + } + } + } + else + { + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current))) + { + return false; + } + dim.push_back(dimlen); + get_ignore_noop(); + } + } + return true; + } + + /*! + @param[out] result determined size + @param[in,out] is_ndarray for input, `true` means already inside an ndarray vector + or ndarray dimension is not allowed; `false` means ndarray + is allowed; for output, `true` means an ndarray is found; + is_ndarray can only return `true` when its initial value + is `false` + @param[in] prefix type marker if already read, otherwise set to 0 + + @return whether size determination completed + */ + bool get_ubjson_size_value(std::size_t& result, bool& is_ndarray, char_int_type prefix = 0) + { + if (prefix == 0) + { + prefix = get_ignore_noop(); + } + + switch (prefix) + { + case 'U': + { + std::uint8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'i': + { + std::int8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char + return true; + } + + case 'I': + { + std::int16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast(number); + return true; + } + + case 'l': + { + std::int32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast(number); + return true; + } + + case 'L': + { + std::int64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + if (!value_in_range_of(number)) + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, + exception_message(input_format, "integer value overflow", "size"), nullptr)); + } + result = static_cast(number); + return true; + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = conditional_static_cast(number); + return true; + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (!value_in_range_of(number)) + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, + exception_message(input_format, "integer value overflow", "size"), nullptr)); + } + result = detail::conditional_static_cast(number); + return true; + } + + case '[': + { + if (input_format != input_format_t::bjdata) + { + break; + } + if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimentional vector is not allowed", "size"), nullptr)); + } + std::vector dim; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim))) + { + return false; + } + if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector + { + result = dim.at(dim.size() - 1); + return true; + } + if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format + { + for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container + { + if ( i == 0 ) + { + result = 0; + return true; + } + } + + string_t key = "_ArraySize_"; + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size()))) + { + return false; + } + result = 1; + for (auto i : dim) + { + result *= i; + if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type() + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr)); + } + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast(i)))) + { + return false; + } + } + is_ndarray = true; + return sax->end_array(); + } + result = 0; + return true; + } + + default: + break; + } + auto last_token = get_token_string(); + std::string message; + + if (input_format != input_format_t::bjdata) + { + message = "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token; + } + else + { + message = "expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x" + last_token; + } + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "size"), nullptr)); + } + + /*! + @brief determine the type and size for a container + + In the optimized UBJSON format, a type and a size can be provided to allow + for a more compact representation. + + @param[out] result pair of the size and the type + @param[in] inside_ndarray whether the parser is parsing an ND array dimensional vector + + @return whether pair creation completed + */ + bool get_ubjson_size_type(std::pair& result, bool inside_ndarray = false) + { + result.first = npos; // size + result.second = 0; // type + bool is_ndarray = false; + + get_ignore_noop(); + + if (current == '$') + { + result.second = get(); // must not ignore 'N', because 'N' maybe the type + if (input_format == input_format_t::bjdata + && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second))) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type"))) + { + return false; + } + + get_ignore_noop(); + if (JSON_HEDLEY_UNLIKELY(current != '#')) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) + { + return false; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr)); + } + + bool is_error = get_ubjson_size_value(result.first, is_ndarray); + if (input_format == input_format_t::bjdata && is_ndarray) + { + if (inside_ndarray) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, + exception_message(input_format, "ndarray can not be recursive", "size"), nullptr)); + } + result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters + } + return is_error; + } + + if (current == '#') + { + bool is_error = get_ubjson_size_value(result.first, is_ndarray); + if (input_format == input_format_t::bjdata && is_ndarray) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, + exception_message(input_format, "ndarray requires both type and size", "size"), nullptr)); + } + return is_error; + } + + return true; + } + + /*! + @param prefix the previously read or set type prefix + @return whether value creation completed + */ + bool get_ubjson_value(const char_int_type prefix) + { + switch (prefix) + { + case std::char_traits::eof(): // EOF + return unexpect_eof(input_format, "value"); + + case 'T': // true + return sax->boolean(true); + case 'F': // false + return sax->boolean(false); + + case 'Z': // null + return sax->null(); + + case 'U': + { + std::uint8_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'i': + { + std::int8_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'I': + { + std::int16_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'l': + { + std::int32_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'L': + { + std::int64_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'h': + { + if (input_format != input_format_t::bjdata) + { + break; + } + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte2 << 8u) + byte1); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 'd': + { + float number{}; + return get_number(input_format, number) && sax->number_float(static_cast(number), ""); + } + + case 'D': + { + double number{}; + return get_number(input_format, number) && sax->number_float(static_cast(number), ""); + } + + case 'H': + { + return get_ubjson_high_precision_number(); + } + + case 'C': // char + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "char"))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(current > 127)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr)); + } + string_t s(1, static_cast(current)); + return sax->string(s); + } + + case 'S': // string + { + string_t s; + return get_ubjson_string(s) && sax->string(s); + } + + case '[': // array + return get_ubjson_array(); + + case '{': // object + return get_ubjson_object(); + + default: // anything else + break; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr)); + } + + /*! + @return whether array creation completed + */ + bool get_ubjson_array() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata): + // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]} + + if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) + { + size_and_type.second &= ~(static_cast(1) << 8); // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker + auto it = std::lower_bound(bjd_types_map.begin(), bjd_types_map.end(), size_and_type.second, [](const bjd_type & p, char_int_type t) + { + return p.first < t; + }); + string_t key = "_ArrayType_"; + if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr)); + } + + string_t type = it->second; // sax->string() takes a reference + if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->string(type))) + { + return false; + } + + if (size_and_type.second == 'C') + { + size_and_type.second = 'U'; + } + + key = "_ArrayData_"; + if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) )) + { + return false; + } + + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + + return (sax->end_array() && sax->end_object()); + } + + if (size_and_type.first != npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) + { + return false; + } + get_ignore_noop(); + } + } + + return sax->end_array(); + } + + /*! + @return whether object creation completed + */ + bool get_ubjson_object() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + // do not accept ND-array size in objects in BJData + if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr)); + } + + string_t key; + if (size_and_type.first != npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + key.clear(); + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + key.clear(); + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + while (current != '}') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + get_ignore_noop(); + key.clear(); + } + } + + return sax->end_object(); + } + + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + + bool get_ubjson_high_precision_number() + { + // get size of following number string + std::size_t size{}; + bool no_ndarray = true; + auto res = get_ubjson_size_value(size, no_ndarray); + if (JSON_HEDLEY_UNLIKELY(!res)) + { + return res; + } + + // get number string + std::vector number_vector; + for (std::size_t i = 0; i < size; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + number_vector.push_back(static_cast(current)); + } + + // parse number string + using ia_type = decltype(detail::input_adapter(number_vector)); + auto number_lexer = detail::lexer(detail::input_adapter(number_vector), false); + const auto result_number = number_lexer.scan(); + const auto number_string = number_lexer.get_token_string(); + const auto result_remainder = number_lexer.scan(); + + using token_type = typename detail::lexer_base::token_type; + + if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) + { + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, + exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); + } + + switch (result_number) + { + case token_type::value_integer: + return sax->number_integer(number_lexer.get_number_integer()); + case token_type::value_unsigned: + return sax->number_unsigned(number_lexer.get_number_unsigned()); + case token_type::value_float: + return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); + case token_type::uninitialized: + case token_type::literal_true: + case token_type::literal_false: + case token_type::literal_null: + case token_type::value_string: + case token_type::begin_array: + case token_type::begin_object: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::parse_error: + case token_type::end_of_input: + case token_type::literal_or_value: + default: + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, + exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); + } + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /*! + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a -'ve valued + `std::char_traits::eof()` in that case. + + @return character read from the input + */ + char_int_type get() + { + ++chars_read; + return current = ia.get_character(); + } + + /*! + @return character read from the input after ignoring all 'N' entries + */ + char_int_type get_ignore_noop() + { + do + { + get(); + } + while (current == 'N'); + + return current; + } + + /* + @brief read a number from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[out] result number of type @a NumberType + + @return whether conversion completed + + @note This function needs to respect the system's endianness, because + bytes in CBOR, MessagePack, and UBJSON are stored in network order + (big endian) and therefore need reordering on little endian systems. + On the other hand, BSON and BJData use little endian and should reorder + on big endian systems. + */ + template + bool get_number(const input_format_t format, NumberType& result) + { + // step 1: read input into array with system's byte order + std::array vec{}; + for (std::size_t i = 0; i < sizeof(NumberType); ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) + { + return false; + } + + // reverse byte order prior to conversion if necessary + if (is_little_endian != (InputIsLittleEndian || format == input_format_t::bjdata)) + { + vec[sizeof(NumberType) - i - 1] = static_cast(current); + } + else + { + vec[i] = static_cast(current); // LCOV_EXCL_LINE + } + } + + // step 2: convert array into number of type T and return + std::memcpy(&result, vec.data(), sizeof(NumberType)); + return true; + } + + /*! + @brief create a string by reading characters from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of characters to read + @param[out] result string created by reading @a len bytes + + @return whether string creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of string memory. + */ + template + bool get_string(const input_format_t format, + const NumberType len, + string_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @param[in] format the current format (for diagnostics) + @param[in] context further context information (for diagnostics) + @return whether the last read character is not EOF + */ + JSON_HEDLEY_NON_NULL(3) + bool unexpect_eof(const input_format_t format, const char* context) const + { + if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) + { + return sax->parse_error(chars_read, "", + parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr)); + } + return true; + } + + /*! + @return a string representation of the last read byte + */ + std::string get_token_string() const + { + std::array cr{{}}; + static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return std::string{cr.data()}; + } + + /*! + @param[in] format the current format + @param[in] detail a detailed error message + @param[in] context further context information + @return a message string to use in the parse_error exceptions + */ + std::string exception_message(const input_format_t format, + const std::string& detail, + const std::string& context) const + { + std::string error_msg = "syntax error while parsing "; + + switch (format) + { + case input_format_t::cbor: + error_msg += "CBOR"; + break; + + case input_format_t::msgpack: + error_msg += "MessagePack"; + break; + + case input_format_t::ubjson: + error_msg += "UBJSON"; + break; + + case input_format_t::bson: + error_msg += "BSON"; + break; + + case input_format_t::bjdata: + error_msg += "BJData"; + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + return concat(error_msg, ' ', context, ": ", detail); + } + + private: + static JSON_INLINE_VARIABLE constexpr std::size_t npos = static_cast(-1); + + /// input adapter + InputAdapterType ia; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// the number of characters read + std::size_t chars_read = 0; + + /// whether we can assume little endianness + const bool is_little_endian = little_endianness(); + + /// input format + const input_format_t input_format = input_format_t::json; + + /// the SAX parser + json_sax_t* sax = nullptr; + + // excluded markers in bjdata optimized type +#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \ + make_array('F', 'H', 'N', 'S', 'T', 'Z', '[', '{') + +#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \ + make_array( \ + bjd_type{'C', "char"}, \ + bjd_type{'D', "double"}, \ + bjd_type{'I', "int16"}, \ + bjd_type{'L', "int64"}, \ + bjd_type{'M', "uint64"}, \ + bjd_type{'U', "uint8"}, \ + bjd_type{'d', "single"}, \ + bjd_type{'i', "int8"}, \ + bjd_type{'l', "int32"}, \ + bjd_type{'m', "uint32"}, \ + bjd_type{'u', "uint16"}) + + JSON_PRIVATE_UNLESS_TESTED: + // lookup tables + // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) + const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers = + JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_; + + using bjd_type = std::pair; + // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) + const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map = + JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_; + +#undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ +#undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr std::size_t binary_reader::npos; +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/input/input_adapters.hpp b/soggy-mistress/extern/nlohmann/detail/input/input_adapters.hpp new file mode 100644 index 0000000..cf53b1d --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/input/input_adapters.hpp @@ -0,0 +1,494 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // size_t +#include // strlen +#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include // shared_ptr, make_shared, addressof +#include // accumulate +#include // string, char_traits +#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include // pair, declval + +#ifndef JSON_NO_IO + #include // FILE * + #include // istream +#endif // JSON_NO_IO + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata }; + +//////////////////// +// input adapters // +//////////////////// + +#ifndef JSON_NO_IO +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter +{ + public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + { + JSON_ASSERT(m_file != nullptr); + } + + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) noexcept = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + ~file_input_adapter() = default; + + std::char_traits::int_type get_character() noexcept + { + return std::fgetc(m_file); + } + + private: + /// the file pointer to read from + std::FILE* m_file; +}; + + +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter +{ + public: + using char_type = char; + + ~input_stream_adapter() + { + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } + } + + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} + + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } + + // std::istream/std::streambuf use std::char_traits::to_int_type, to + // ensure that std::char_traits::eof() and the character 0xFF do not + // end up as the same value, e.g. 0xFFFFFFFF. + std::char_traits::int_type get_character() + { + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; +}; +#endif // JSON_NO_IO + +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter +{ + public: + using char_type = typename std::iterator_traits::value_type; + + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) + {} + + typename std::char_traits::int_type get_character() + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } + + return std::char_traits::eof(); + } + + private: + IteratorType current; + IteratorType end; + + template + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } +}; + + +template +struct wide_string_input_helper; + +template +struct wide_string_input_helper +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } +}; + +template +struct wide_string_input_helper +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-16 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } + } +}; + +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter +{ + public: + using char_type = char; + + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer(); + + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } + + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } + + private: + BaseInputAdapter base_adapter; + + template + void fill_buffer() + { + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } + + /// a buffer for UTF-8 bytes + std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; + + +template +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; + +template +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template +struct iterator_input_adapter_factory::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; + +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} + +// Convenience shorthand from container to iterator +// Enables ADL on begin(container) and end(container) +// Encloses the using declarations in namespace for not to leak them to outside scope + +namespace container_input_adapter_factory_impl +{ + +using std::begin; +using std::end; + +template +struct container_input_adapter_factory {}; + +template +struct container_input_adapter_factory< ContainerType, + void_t()), end(std::declval()))>> + { + using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); + + static adapter_type create(const ContainerType& container) +{ + return input_adapter(begin(container), end(container)); +} + }; + +} // namespace container_input_adapter_factory_impl + +template +typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) +{ + return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); +} + +#ifndef JSON_NO_IO +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} +#endif // JSON_NO_IO + +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + !std::is_array::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + const auto* ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitly cast +// to the correct adapter. +class span_input_adapter +{ + public: + template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} + + template::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} + + contiguous_bytes_input_adapter&& get() + { + return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) + } + + private: + contiguous_bytes_input_adapter ia; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/input/json_sax.hpp b/soggy-mistress/extern/nlohmann/detail/input/json_sax.hpp new file mode 100644 index 0000000..5bd5c51 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/input/json_sax.hpp @@ -0,0 +1,728 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include // string +#include // move +#include // vector + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/*! +@brief SAX interface + +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template +struct json_sax +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; + + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; + + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; + + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; + + /*! + @brief a floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; + + /*! + @brief a string value was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string value. + */ + virtual bool string(string_t& val) = 0; + + /*! + @brief a binary value was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary value. + */ + virtual bool binary(binary_t& val) = 0; + + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; + + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; + + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; + + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; + + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; + + json_sax() = default; + json_sax(const json_sax&) = default; + json_sax(json_sax&&) noexcept = default; + json_sax& operator=(const json_sax&) = default; + json_sax& operator=(json_sax&&) noexcept = default; + virtual ~json_sax() = default; +}; + + +namespace detail +{ +/*! +@brief SAX implementation to create a JSON value from SAX events + +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. + +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. + +@tparam BasicJsonType the JSON type +*/ +template +class json_sax_dom_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @param[in,out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) + : root(r), allow_exceptions(allow_exceptions_) + {} + + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_object()); + + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_value.object->operator[](val)); + return true; + } + + bool end_object() + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_object()); + + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool end_array() + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_array()); + + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward(v)); + return &root; + } + + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::forward(v)); + return &(ref_stack.back()->m_value.array->back()); + } + + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward(v)); + return object_element; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +template +class json_sax_dom_callback_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; + + json_sax_dom_callback_parser(BasicJsonType& r, + const parser_callback_t cb, + const bool allow_exceptions_ = true) + : root(r), callback(cb), allow_exceptions(allow_exceptions_) + { + keep_stack.push_back(true); + } + + // make class move-only + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_callback_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + // check callback for object start + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + // check object limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); + } + + return true; + } + + bool end_object() + { + if (ref_stack.back()) + { + if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + } + else + { + ref_stack.back()->set_parents(); + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + + return true; + } + + bool start_array(std::size_t len) + { + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + // check array limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool end_array() + { + bool keep = true; + + if (ref_stack.back()) + { + keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); + if (keep) + { + ref_stack.back()->set_parents(); + } + else + { + // discard array + *ref_stack.back() = discarded; + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + // remove discarded value + if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->pop_back(); + } + + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @param[in] v value to add to the JSON value we build during parsing + @param[in] skip_callback whether we should skip calling the callback + function; this is required after start_array() and + start_object() SAX events, because otherwise we would call the + callback function with an empty array or object, respectively. + + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + + @return pair of boolean (whether value should be kept) and pointer (to the + passed value in the ref_stack hierarchy; nullptr if not kept) + */ + template + std::pair handle_value(Value&& v, const bool skip_callback = false) + { + JSON_ASSERT(!keep_stack.empty()); + + // do not handle this value if we know it would be added to a discarded + // container + if (!keep_stack.back()) + { + return {false, nullptr}; + } + + // create value + auto value = BasicJsonType(std::forward(v)); + + // check callback + const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); + + // do not handle this value if we just learnt it shall be discarded + if (!keep) + { + return {false, nullptr}; + } + + if (ref_stack.empty()) + { + root = std::move(value); + return {true, &root}; + } + + // skip this value if we already decided to skip the parent + // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) + if (!ref_stack.back()) + { + return {false, nullptr}; + } + + // we now only expect arrays and objects + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + // array + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::move(value)); + return {true, &(ref_stack.back()->m_value.array->back())}; + } + + // object + JSON_ASSERT(ref_stack.back()->is_object()); + // check if we should store an element for the current key + JSON_ASSERT(!key_keep_stack.empty()); + const bool store_element = key_keep_stack.back(); + key_keep_stack.pop_back(); + + if (!store_element) + { + return {false, nullptr}; + } + + JSON_ASSERT(object_element); + *object_element = std::move(value); + return {true, object_element}; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// stack to manage which values to keep + std::vector keep_stack {}; + /// stack to manage which object keys to keep + std::vector key_keep_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// callback function + const parser_callback_t callback = nullptr; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// a discarded value for the callback + BasicJsonType discarded = BasicJsonType::value_t::discarded; +}; + +template +class json_sax_acceptor +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + bool null() + { + return true; + } + + bool boolean(bool /*unused*/) + { + return true; + } + + bool number_integer(number_integer_t /*unused*/) + { + return true; + } + + bool number_unsigned(number_unsigned_t /*unused*/) + { + return true; + } + + bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) + { + return true; + } + + bool string(string_t& /*unused*/) + { + return true; + } + + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = static_cast(-1)) + { + return true; + } + + bool key(string_t& /*unused*/) + { + return true; + } + + bool end_object() + { + return true; + } + + bool start_array(std::size_t /*unused*/ = static_cast(-1)) + { + return true; + } + + bool end_array() + { + return true; + } + + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) + { + return false; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/input/lexer.hpp b/soggy-mistress/extern/nlohmann/detail/input/lexer.hpp new file mode 100644 index 0000000..72e9951 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/input/lexer.hpp @@ -0,0 +1,1632 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // localeconv +#include // size_t +#include // snprintf +#include // strtof, strtod, strtold, strtoll, strtoull +#include // initializer_list +#include // char_traits, string +#include // move +#include // vector + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////// +// lexer // +/////////// + +template +class lexer_base +{ + public: + /// token types for the parser + enum class token_type + { + uninitialized, ///< indicating the scanner is uninitialized + literal_true, ///< the `true` literal + literal_false, ///< the `false` literal + literal_null, ///< the `null` literal + value_string, ///< a string -- use get_string() for actual value + value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value + value_integer, ///< a signed integer -- use get_number_integer() for actual value + value_float, ///< an floating point number -- use get_number_float() for actual value + begin_array, ///< the character for array begin `[` + begin_object, ///< the character for object begin `{` + end_array, ///< the character for array end `]` + end_object, ///< the character for object end `}` + name_separator, ///< the name separator `:` + value_separator, ///< the value separator `,` + parse_error, ///< indicating a parse error + end_of_input, ///< indicating the end of the input buffer + literal_or_value ///< a literal or the begin of a value (only for diagnostics) + }; + + /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST + static const char* token_type_name(const token_type t) noexcept + { + switch (t) + { + case token_type::uninitialized: + return ""; + case token_type::literal_true: + return "true literal"; + case token_type::literal_false: + return "false literal"; + case token_type::literal_null: + return "null literal"; + case token_type::value_string: + return "string literal"; + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: + return "number literal"; + case token_type::begin_array: + return "'['"; + case token_type::begin_object: + return "'{'"; + case token_type::end_array: + return "']'"; + case token_type::end_object: + return "'}'"; + case token_type::name_separator: + return "':'"; + case token_type::value_separator: + return "','"; + case token_type::parse_error: + return ""; + case token_type::end_of_input: + return "end of input"; + case token_type::literal_or_value: + return "'[', '{', or a literal"; + // LCOV_EXCL_START + default: // catch non-enum values + return "unknown token"; + // LCOV_EXCL_STOP + } + } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template +class lexer : public lexer_base +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + using token_type = typename lexer_base::token_type; + + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept + : ia(std::move(adapter)) + , ignore_comments(ignore_comments_) + , decimal_point_char(static_cast(get_decimal_point())) + {} + + // delete because of pointer members + lexer(const lexer&) = delete; + lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + lexer& operator=(lexer&) = delete; + lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~lexer() = default; + + private: + ///////////////////// + // locales + ///////////////////// + + /// return the locale-dependent decimal point + JSON_HEDLEY_PURE + static char get_decimal_point() noexcept + { + const auto* loc = localeconv(); + JSON_ASSERT(loc != nullptr); + return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); + } + + ///////////////////// + // scan functions + ///////////////////// + + /*! + @brief get codepoint from 4 hex characters following `\u` + + For input "\u c1 c2 c3 c4" the codepoint is: + (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 + = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) + + Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' + must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The + conversion is done by subtracting the offset (0x30, 0x37, and 0x57) + between the ASCII value of the character and the desired integer value. + + @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or + non-hex character) + */ + int get_codepoint() + { + // this function only makes sense after reading `\u` + JSON_ASSERT(current == 'u'); + int codepoint = 0; + + const auto factors = { 12u, 8u, 4u, 0u }; + for (const auto factor : factors) + { + get(); + + if (current >= '0' && current <= '9') + { + codepoint += static_cast((static_cast(current) - 0x30u) << factor); + } + else if (current >= 'A' && current <= 'F') + { + codepoint += static_cast((static_cast(current) - 0x37u) << factor); + } + else if (current >= 'a' && current <= 'f') + { + codepoint += static_cast((static_cast(current) - 0x57u) << factor); + } + else + { + return -1; + } + } + + JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); + return codepoint; + } + + /*! + @brief check if the next byte(s) are inside a given range + + Adds the current byte and, for each passed range, reads a new byte and + checks if it is inside the range. If a violation was detected, set up an + error message and return false. Otherwise, return true. + + @param[in] ranges list of integers; interpreted as list of pairs of + inclusive lower and upper bound, respectively + + @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, + 1, 2, or 3 pairs. This precondition is enforced by an assertion. + + @return true if and only if no range violation was detected + */ + bool next_byte_in_range(std::initializer_list ranges) + { + JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); + add(current); + + for (auto range = ranges.begin(); range != ranges.end(); ++range) + { + get(); + if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) + { + add(current); + } + else + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return false; + } + } + + return true; + } + + /*! + @brief scan a string literal + + This function scans a string according to Sect. 7 of RFC 8259. While + scanning, bytes are escaped and copied into buffer token_buffer. Then the + function returns successfully, token_buffer is *not* null-terminated (as it + may contain \0 bytes), and token_buffer.size() is the number of bytes in the + string. + + @return token_type::value_string if string could be successfully scanned, + token_type::parse_error otherwise + + @note In case of errors, variable error_message contains a textual + description. + */ + token_type scan_string() + { + // reset token_buffer (ignore opening quote) + reset(); + + // we entered the function by reading an open quote + JSON_ASSERT(current == '\"'); + + while (true) + { + // get next character + switch (get()) + { + // end of file while parsing string + case std::char_traits::eof(): + { + error_message = "invalid string: missing closing quote"; + return token_type::parse_error; + } + + // closing quote + case '\"': + { + return token_type::value_string; + } + + // escapes + case '\\': + { + switch (get()) + { + // quotation mark + case '\"': + add('\"'); + break; + // reverse solidus + case '\\': + add('\\'); + break; + // solidus + case '/': + add('/'); + break; + // backspace + case 'b': + add('\b'); + break; + // form feed + case 'f': + add('\f'); + break; + // line feed + case 'n': + add('\n'); + break; + // carriage return + case 'r': + add('\r'); + break; + // tab + case 't': + add('\t'); + break; + + // unicode escapes + case 'u': + { + const int codepoint1 = get_codepoint(); + int codepoint = codepoint1; // start with codepoint1 + + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if code point is a high surrogate + if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) + { + // expect next \uxxxx entry + if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) + { + const int codepoint2 = get_codepoint(); + + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if codepoint2 is a low surrogate + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) + { + // overwrite codepoint + codepoint = static_cast( + // high surrogate occupies the most significant 22 bits + (static_cast(codepoint1) << 10u) + // low surrogate occupies the least significant 15 bits + + static_cast(codepoint2) + // there is still the 0xD800, 0xDC00 and 0x10000 noise + // in the result, so we have to subtract with: + // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 + - 0x35FDC00u); + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) + { + error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; + return token_type::parse_error; + } + } + + // result of the above calculation yields a proper codepoint + JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); + + // translate codepoint into bytes + if (codepoint < 0x80) + { + // 1-byte characters: 0xxxxxxx (ASCII) + add(static_cast(codepoint)); + } + else if (codepoint <= 0x7FF) + { + // 2-byte characters: 110xxxxx 10xxxxxx + add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else if (codepoint <= 0xFFFF) + { + // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx + add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else + { + // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + + break; + } + + // other characters after escape + default: + error_message = "invalid string: forbidden character after backslash"; + return token_type::parse_error; + } + + break; + } + + // invalid control characters + case 0x00: + { + error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; + return token_type::parse_error; + } + + case 0x01: + { + error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; + return token_type::parse_error; + } + + case 0x02: + { + error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; + return token_type::parse_error; + } + + case 0x03: + { + error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; + return token_type::parse_error; + } + + case 0x04: + { + error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; + return token_type::parse_error; + } + + case 0x05: + { + error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; + return token_type::parse_error; + } + + case 0x06: + { + error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; + return token_type::parse_error; + } + + case 0x07: + { + error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; + return token_type::parse_error; + } + + case 0x08: + { + error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; + return token_type::parse_error; + } + + case 0x09: + { + error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; + return token_type::parse_error; + } + + case 0x0A: + { + error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; + return token_type::parse_error; + } + + case 0x0B: + { + error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; + return token_type::parse_error; + } + + case 0x0C: + { + error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; + return token_type::parse_error; + } + + case 0x0D: + { + error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; + return token_type::parse_error; + } + + case 0x0E: + { + error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; + return token_type::parse_error; + } + + case 0x0F: + { + error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; + return token_type::parse_error; + } + + case 0x10: + { + error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; + return token_type::parse_error; + } + + case 0x11: + { + error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; + return token_type::parse_error; + } + + case 0x12: + { + error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; + return token_type::parse_error; + } + + case 0x13: + { + error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; + return token_type::parse_error; + } + + case 0x14: + { + error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; + return token_type::parse_error; + } + + case 0x15: + { + error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; + return token_type::parse_error; + } + + case 0x16: + { + error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; + return token_type::parse_error; + } + + case 0x17: + { + error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; + return token_type::parse_error; + } + + case 0x18: + { + error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; + return token_type::parse_error; + } + + case 0x19: + { + error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; + return token_type::parse_error; + } + + case 0x1A: + { + error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; + return token_type::parse_error; + } + + case 0x1B: + { + error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; + return token_type::parse_error; + } + + case 0x1C: + { + error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; + return token_type::parse_error; + } + + case 0x1D: + { + error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; + return token_type::parse_error; + } + + case 0x1E: + { + error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; + return token_type::parse_error; + } + + case 0x1F: + { + error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; + return token_type::parse_error; + } + + // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) + case 0x20: + case 0x21: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + { + add(current); + break; + } + + // U+0080..U+07FF: bytes C2..DF 80..BF + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + { + if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) + { + return token_type::parse_error; + } + break; + } + + // U+0800..U+0FFF: bytes E0 A0..BF 80..BF + case 0xE0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF + // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xEE: + case 0xEF: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+D000..U+D7FF: bytes ED 80..9F 80..BF + case 0xED: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + case 0xF0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + case 0xF1: + case 0xF2: + case 0xF3: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF + case 0xF4: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // remaining bytes (80..C1 and F5..FF) are ill-formed + default: + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return token_type::parse_error; + } + } + } + } + + /*! + * @brief scan a comment + * @return whether comment could be scanned successfully + */ + bool scan_comment() + { + switch (get()) + { + // single-line comments skip input until a newline or EOF is read + case '/': + { + while (true) + { + switch (get()) + { + case '\n': + case '\r': + case std::char_traits::eof(): + case '\0': + return true; + + default: + break; + } + } + } + + // multi-line comments skip input until */ is read + case '*': + { + while (true) + { + switch (get()) + { + case std::char_traits::eof(): + case '\0': + { + error_message = "invalid comment; missing closing '*/'"; + return false; + } + + case '*': + { + switch (get()) + { + case '/': + return true; + + default: + { + unget(); + continue; + } + } + } + + default: + continue; + } + } + } + + // unexpected character after reading '/' + default: + { + error_message = "invalid comment; expecting '/' or '*' after '/'"; + return false; + } + } + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(float& f, const char* str, char** endptr) noexcept + { + f = std::strtof(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(double& f, const char* str, char** endptr) noexcept + { + f = std::strtod(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(long double& f, const char* str, char** endptr) noexcept + { + f = std::strtold(str, endptr); + } + + /*! + @brief scan a number literal + + This function scans a string according to Sect. 6 of RFC 8259. + + The function is realized with a deterministic finite state machine derived + from the grammar described in RFC 8259. Starting in state "init", the + input is read and used to determined the next state. Only state "done" + accepts the number. State "error" is a trap state to model errors. In the + table below, "anything" means any character but the ones listed before. + + state | 0 | 1-9 | e E | + | - | . | anything + ---------|----------|----------|----------|---------|---------|----------|----------- + init | zero | any1 | [error] | [error] | minus | [error] | [error] + minus | zero | any1 | [error] | [error] | [error] | [error] | [error] + zero | done | done | exponent | done | done | decimal1 | done + any1 | any1 | any1 | exponent | done | done | decimal1 | done + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] + decimal2 | decimal2 | decimal2 | exponent | done | done | done | done + exponent | any2 | any2 | [error] | sign | sign | [error] | [error] + sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] + any2 | any2 | any2 | done | done | done | done | done + + The state machine is realized with one label per state (prefixed with + "scan_number_") and `goto` statements between them. The state machine + contains cycles, but any cycle can be left when EOF is read. Therefore, + the function is guaranteed to terminate. + + During scanning, the read bytes are stored in token_buffer. This string is + then converted to a signed integer, an unsigned integer, or a + floating-point number. + + @return token_type::value_unsigned, token_type::value_integer, or + token_type::value_float if number could be successfully scanned, + token_type::parse_error otherwise + + @note The scanner is independent of the current locale. Internally, the + locale's decimal point is used instead of `.` to work with the + locale-dependent converters. + */ + token_type scan_number() // lgtm [cpp/use-of-goto] + { + // reset token_buffer to store the number's bytes + reset(); + + // the type of the parsed number; initially set to unsigned; will be + // changed if minus sign, decimal point or exponent is read + token_type number_type = token_type::value_unsigned; + + // state (init): we just found out we need to scan a number + switch (current) + { + case '-': + { + add(current); + goto scan_number_minus; + } + + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + // all other characters are rejected outside scan_number() + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + +scan_number_minus: + // state: we just parsed a leading minus sign + number_type = token_type::value_integer; + switch (get()) + { + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + default: + { + error_message = "invalid number; expected digit after '-'"; + return token_type::parse_error; + } + } + +scan_number_zero: + // state: we just parse a zero (maybe with a leading minus sign) + switch (get()) + { + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_any1: + // state: we just parsed a number 0-9 (maybe with a leading minus sign) + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_decimal1: + // state: we just parsed a decimal point + number_type = token_type::value_float; + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + default: + { + error_message = "invalid number; expected digit after '.'"; + return token_type::parse_error; + } + } + +scan_number_decimal2: + // we just parsed at least one number after a decimal point + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_exponent: + // we just parsed an exponent + number_type = token_type::value_float; + switch (get()) + { + case '+': + case '-': + { + add(current); + goto scan_number_sign; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = + "invalid number; expected '+', '-', or digit after exponent"; + return token_type::parse_error; + } + } + +scan_number_sign: + // we just parsed an exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = "invalid number; expected digit after exponent sign"; + return token_type::parse_error; + } + } + +scan_number_any2: + // we just parsed a number after the exponent or exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + goto scan_number_done; + } + +scan_number_done: + // unget the character after the number (we only read it to know that + // we are done scanning a number) + unget(); + + char* endptr = nullptr; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + errno = 0; + + // try to parse integers first and fall back to floats + if (number_type == token_type::value_unsigned) + { + const auto x = std::strtoull(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_unsigned = static_cast(x); + if (value_unsigned == x) + { + return token_type::value_unsigned; + } + } + } + else if (number_type == token_type::value_integer) + { + const auto x = std::strtoll(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_integer = static_cast(x); + if (value_integer == x) + { + return token_type::value_integer; + } + } + } + + // this code is reached if we parse a floating-point number or if an + // integer conversion above failed + strtof(value_float, token_buffer.data(), &endptr); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + return token_type::value_float; + } + + /*! + @param[in] literal_text the literal text to expect + @param[in] length the length of the passed literal text + @param[in] return_type the token type to return on success + */ + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, + token_type return_type) + { + JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); + for (std::size_t i = 1; i < length; ++i) + { + if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) + { + error_message = "invalid literal"; + return token_type::parse_error; + } + } + return return_type; + } + + ///////////////////// + // input management + ///////////////////// + + /// reset token_buffer; current character is beginning of token + void reset() noexcept + { + token_buffer.clear(); + token_string.clear(); + token_string.push_back(std::char_traits::to_char_type(current)); + } + + /* + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a + `std::char_traits::eof()` in that case. Stores the scanned characters + for use in error messages. + + @return character read from the input + */ + char_int_type get() + { + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + token_string.push_back(std::char_traits::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; + } + + /*! + @brief unget current character (read it again on next get) + + We implement unget by setting variable next_unget to true. The input is not + changed - we just simulate ungetting by modifying chars_read_total, + chars_read_current_line, and token_string. The next call to get() will + behave as if the unget character is read again. + */ + void unget() + { + next_unget = true; + + --position.chars_read_total; + + // in case we "unget" a newline, we have to also decrement the lines_read + if (position.chars_read_current_line == 0) + { + if (position.lines_read > 0) + { + --position.lines_read; + } + } + else + { + --position.chars_read_current_line; + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + JSON_ASSERT(!token_string.empty()); + token_string.pop_back(); + } + } + + /// add a character to token_buffer + void add(char_int_type c) + { + token_buffer.push_back(static_cast(c)); + } + + public: + ///////////////////// + // value getters + ///////////////////// + + /// return integer value + constexpr number_integer_t get_number_integer() const noexcept + { + return value_integer; + } + + /// return unsigned integer value + constexpr number_unsigned_t get_number_unsigned() const noexcept + { + return value_unsigned; + } + + /// return floating-point value + constexpr number_float_t get_number_float() const noexcept + { + return value_float; + } + + /// return current string value (implicitly resets the token; useful only once) + string_t& get_string() + { + return token_buffer; + } + + ///////////////////// + // diagnostics + ///////////////////// + + /// return position of last read token + constexpr position_t get_position() const noexcept + { + return position; + } + + /// return the last read token (for errors only). Will never contain EOF + /// (an arbitrary value that is not a valid char value, often -1), because + /// 255 may legitimately occur. May contain NUL, which should be escaped. + std::string get_token_string() const + { + // escape control characters + std::string result; + for (const auto c : token_string) + { + if (static_cast(c) <= '\x1F') + { + // escape control characters + std::array cs{{}}; + static_cast((std::snprintf)(cs.data(), cs.size(), "", static_cast(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + result += cs.data(); + } + else + { + // add character as is + result.push_back(static_cast(c)); + } + } + + return result; + } + + /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL + constexpr const char* get_error_message() const noexcept + { + return error_message; + } + + ///////////////////// + // actual scanner + ///////////////////// + + /*! + @brief skip the UTF-8 byte order mark + @return true iff there is no BOM or the correct BOM has been skipped + */ + bool skip_bom() + { + if (get() == 0xEF) + { + // check if we completely parse the BOM + return get() == 0xBB && get() == 0xBF; + } + + // the first character is not the beginning of the BOM; unget it to + // process is later + unget(); + return true; + } + + void skip_whitespace() + { + do + { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + } + + token_type scan() + { + // initially, skip the BOM + if (position.chars_read_total == 0 && !skip_bom()) + { + error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; + return token_type::parse_error; + } + + // read next character and ignore whitespace + skip_whitespace(); + + // ignore comments + while (ignore_comments && current == '/') + { + if (!scan_comment()) + { + return token_type::parse_error; + } + + // skip following whitespace + skip_whitespace(); + } + + switch (current) + { + // structural characters + case '[': + return token_type::begin_array; + case ']': + return token_type::end_array; + case '{': + return token_type::begin_object; + case '}': + return token_type::end_object; + case ':': + return token_type::name_separator; + case ',': + return token_type::value_separator; + + // literals + case 't': + { + std::array true_literal = {{static_cast('t'), static_cast('r'), static_cast('u'), static_cast('e')}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } + case 'f': + { + std::array false_literal = {{static_cast('f'), static_cast('a'), static_cast('l'), static_cast('s'), static_cast('e')}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } + case 'n': + { + std::array null_literal = {{static_cast('n'), static_cast('u'), static_cast('l'), static_cast('l')}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } + + // string + case '\"': + return scan_string(); + + // number + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return scan_number(); + + // end of input (the null byte is needed when parsing from + // string literals) + case '\0': + case std::char_traits::eof(): + return token_type::end_of_input; + + // error + default: + error_message = "invalid literal"; + return token_type::parse_error; + } + } + + private: + /// input adapter + InputAdapterType ia; + + /// whether comments should be ignored (true) or signaled as errors (false) + const bool ignore_comments = false; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// whether the next get() call should just return current + bool next_unget = false; + + /// the start position of the current token + position_t position {}; + + /// raw input token string (for error messages) + std::vector token_string {}; + + /// buffer for variable-length tokens (numbers, strings) + string_t token_buffer {}; + + /// a description of occurred lexer errors + const char* error_message = ""; + + // number values + number_integer_t value_integer = 0; + number_unsigned_t value_unsigned = 0; + number_float_t value_float = 0; + + /// the decimal point + const char_int_type decimal_point_char = '.'; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/input/parser.hpp b/soggy-mistress/extern/nlohmann/detail/input/parser.hpp new file mode 100644 index 0000000..8acbd4f --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/input/parser.hpp @@ -0,0 +1,507 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // isfinite +#include // uint8_t +#include // function +#include // string +#include // move +#include // vector + +#include +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +//////////// +// parser // +//////////// + +enum class parse_event_t : std::uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template +using parser_callback_t = + std::function; + +/*! +@brief syntax analysis + +This class implements a recursive descent parser. +*/ +template +class parser +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using lexer_t = lexer; + using token_type = typename lexer_t::token_type; + + public: + /// a parser reading from an input adapter + explicit parser(InputAdapterType&& adapter, + const parser_callback_t cb = nullptr, + const bool allow_exceptions_ = true, + const bool skip_comments = false) + : callback(cb) + , m_lexer(std::move(adapter), skip_comments) + , allow_exceptions(allow_exceptions_) + { + // read first token + get_token(); + } + + /*! + @brief public parser interface + + @param[in] strict whether to expect the last token to be EOF + @param[in,out] result parsed JSON value + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + void parse(const bool strict, BasicJsonType& result) + { + if (callback) + { + json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"), nullptr)); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + + // set top-level value to null if it was discarded by the callback + // function + if (result.is_discarded()) + { + result = nullptr; + } + } + else + { + json_sax_dom_parser sdp(result, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + } + + result.assert_invariant(); + } + + /*! + @brief public accept interface + + @param[in] strict whether to expect the last token to be EOF + @return whether the input is a proper JSON text + */ + bool accept(const bool strict = true) + { + json_sax_acceptor sax_acceptor; + return sax_parse(&sax_acceptor, strict); + } + + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse(SAX* sax, const bool strict = true) + { + (void)detail::is_sax_static_asserts {}; + const bool result = sax_parse_internal(sax); + + // strict mode: next byte must be EOF + if (result && strict && (get_token() != token_type::end_of_input)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); + } + + return result; + } + + private: + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse_internal(SAX* sax) + { + // stack to remember the hierarchy of structured values we are parsing + // true = array; false = object + std::vector states; + // value to avoid a goto (see comment where set to true) + bool skip_to_state_evaluation = false; + + while (true) + { + if (!skip_to_state_evaluation) + { + // invariant: get_token() was called before each iteration + switch (last_token) + { + case token_type::begin_object: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + // closing } -> we are done + if (get_token() == token_type::end_object) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + break; + } + + // parse key + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); + } + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); + } + + // remember we are now inside an object + states.push_back(false); + + // parse values + get_token(); + continue; + } + + case token_type::begin_array: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + // closing ] -> we are done + if (get_token() == token_type::end_array) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + break; + } + + // remember we are now inside an array + states.push_back(true); + + // parse values (no need to call get_token) + continue; + } + + case token_type::value_float: + { + const auto res = m_lexer.get_number_float(); + + if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + out_of_range::create(406, concat("number overflow parsing '", m_lexer.get_token_string(), '\''), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) + { + return false; + } + + break; + } + + case token_type::literal_false: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) + { + return false; + } + break; + } + + case token_type::literal_null: + { + if (JSON_HEDLEY_UNLIKELY(!sax->null())) + { + return false; + } + break; + } + + case token_type::literal_true: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) + { + return false; + } + break; + } + + case token_type::value_integer: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) + { + return false; + } + break; + } + + case token_type::value_string: + { + if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) + { + return false; + } + break; + } + + case token_type::value_unsigned: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) + { + return false; + } + break; + } + + case token_type::parse_error: + { + // using "uninitialized" to avoid "expected" message + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr)); + } + + case token_type::uninitialized: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::end_of_input: + case token_type::literal_or_value: + default: // the last token was unexpected + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr)); + } + } + } + else + { + skip_to_state_evaluation = false; + } + + // we reached this line after we successfully parsed a value + if (states.empty()) + { + // empty stack: we reached the end of the hierarchy: done + return true; + } + + if (states.back()) // array + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse a new value + get_token(); + continue; + } + + // closing ] + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + + // We are done with this array. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), nullptr)); + } + + // states.back() is false -> object + + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse key + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); + } + + // parse values + get_token(); + continue; + } + + // closing } + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + + // We are done with this object. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), nullptr)); + } + } + + /// get next token from lexer + token_type get_token() + { + return last_token = m_lexer.scan(); + } + + std::string exception_message(const token_type expected, const std::string& context) + { + std::string error_msg = "syntax error "; + + if (!context.empty()) + { + error_msg += concat("while parsing ", context, ' '); + } + + error_msg += "- "; + + if (last_token == token_type::parse_error) + { + error_msg += concat(m_lexer.get_error_message(), "; last read: '", + m_lexer.get_token_string(), '\''); + } + else + { + error_msg += concat("unexpected ", lexer_t::token_type_name(last_token)); + } + + if (expected != token_type::uninitialized) + { + error_msg += concat("; expected ", lexer_t::token_type_name(expected)); + } + + return error_msg; + } + + private: + /// callback function + const parser_callback_t callback = nullptr; + /// the type of the last read token + token_type last_token = token_type::uninitialized; + /// the lexer + lexer_t m_lexer; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/input/position_t.hpp b/soggy-mistress/extern/nlohmann/detail/input/position_t.hpp new file mode 100644 index 0000000..396db0e --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/input/position_t.hpp @@ -0,0 +1,37 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // size_t + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/iterators/internal_iterator.hpp b/soggy-mistress/extern/nlohmann/detail/iterators/internal_iterator.hpp new file mode 100644 index 0000000..13a212c --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/iterators/internal_iterator.hpp @@ -0,0 +1,35 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief an iterator value + +@note This structure could easily be a union, but MSVC currently does not allow +unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. +*/ +template struct internal_iterator +{ + /// iterator for JSON objects + typename BasicJsonType::object_t::iterator object_iterator {}; + /// iterator for JSON arrays + typename BasicJsonType::array_t::iterator array_iterator {}; + /// generic iterator for all other types + primitive_iterator_t primitive_iterator {}; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/iterators/iter_impl.hpp b/soggy-mistress/extern/nlohmann/detail/iterators/iter_impl.hpp new file mode 100644 index 0000000..3f5a990 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/iterators/iter_impl.hpp @@ -0,0 +1,751 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next +#include // conditional, is_const, remove_const + +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// forward declare, to be able to friend it later on +template class iteration_proxy; +template class iteration_proxy_value; + +/*! +@brief a template for a bidirectional iterator for the @ref basic_json class +This class implements a both iterators (iterator and const_iterator) for the +@ref basic_json class. +@note An iterator is called *initialized* when a pointer to a JSON value has + been set (e.g., by a constructor or a copy assignment). If the iterator is + default-constructed, it is *uninitialized* and most methods are undefined. + **The library uses assertions to detect calls on uninitialized iterators.** +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +@since version 1.0.0, simplified in version 2.0.9, change to bidirectional + iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) +*/ +template +class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) +{ + /// the iterator with BasicJsonType of different const-ness + using other_iter_impl = iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; + /// allow basic_json to access private members + friend other_iter_impl; + friend BasicJsonType; + friend iteration_proxy; + friend iteration_proxy_value; + + using object_t = typename BasicJsonType::object_t; + using array_t = typename BasicJsonType::array_t; + // make sure BasicJsonType is basic_json or const basic_json + static_assert(is_basic_json::type>::value, + "iter_impl only accepts (const) basic_json"); + // superficial check for the LegacyBidirectionalIterator named requirement + static_assert(std::is_base_of::value + && std::is_base_of::iterator_category>::value, + "basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement."); + + public: + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; + + /// the type of the values when the iterator is dereferenced + using value_type = typename BasicJsonType::value_type; + /// a type to represent differences between iterators + using difference_type = typename BasicJsonType::difference_type; + /// defines a pointer to the type iterated over (value_type) + using pointer = typename std::conditional::value, + typename BasicJsonType::const_pointer, + typename BasicJsonType::pointer>::type; + /// defines a reference to the type iterated over (value_type) + using reference = + typename std::conditional::value, + typename BasicJsonType::const_reference, + typename BasicJsonType::reference>::type; + + iter_impl() = default; + ~iter_impl() = default; + iter_impl(iter_impl&&) noexcept = default; + iter_impl& operator=(iter_impl&&) noexcept = default; + + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ + explicit iter_impl(pointer object) noexcept : m_object(object) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = typename object_t::iterator(); + break; + } + + case value_t::array: + { + m_it.array_iterator = typename array_t::iterator(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator = primitive_iterator_t(); + break; + } + } + } + + /*! + @note The conventional copy constructor and copy assignment are implicitly + defined. Combined with the following converting constructor and + assignment, they support: (1) copy from iterator to iterator, (2) + copy from const iterator to const iterator, and (3) conversion from + iterator to const iterator. However conversion from const iterator + to iterator is not defined. + */ + + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl& other) noexcept + { + if (&other != this) + { + m_object = other.m_object; + m_it = other.m_it; + } + return *this; + } + + /*! + @brief converting constructor + @param[in] other non-const iterator to copy from + @note It is not checked whether @a other is initialized. + */ + iter_impl(const iter_impl::type>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other non-const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl::type>& other) noexcept // NOLINT(cert-oop54-cpp) + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_begin() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->begin(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->begin(); + break; + } + + case value_t::null: + { + // set to end so begin()==end() is true: null is empty + m_it.primitive_iterator.set_end(); + break; + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_begin(); + break; + } + } + } + + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_end() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->end(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->end(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_end(); + break; + } + } + } + + public: + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator*() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return m_it.object_iterator->second; + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return *m_it.array_iterator; + } + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + pointer operator->() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return &(m_it.object_iterator->second); + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return &*m_it.array_iterator; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + ++(*this); + return result; + } + + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator++() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, 1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, 1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + ++m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + --(*this); + return result; + } + + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator--() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, -1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, -1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + --m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator==(const IterImpl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + return (m_it.object_iterator == other.m_it.object_iterator); + + case value_t::array: + return (m_it.array_iterator == other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator == other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator!=(const IterImpl& other) const + { + return !operator==(other); + } + + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object)); + + case value_t::array: + return (m_it.array_iterator < other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator < other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<=(const iter_impl& other) const + { + return !other.operator < (*this); + } + + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>(const iter_impl& other) const + { + return !operator<=(other); + } + + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>=(const iter_impl& other) const + { + return !operator<(other); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator+=(difference_type i) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); + + case value_t::array: + { + std::advance(m_it.array_iterator, i); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator += i; + break; + } + } + + return *this; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator-=(difference_type i) + { + return operator+=(-i); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator+(difference_type i) const + { + auto result = *this; + result += i; + return result; + } + + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator-(difference_type i) const + { + auto result = *this; + result -= i; + return result; + } + + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + difference_type operator-(const iter_impl& other) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); + + case value_t::array: + return m_it.array_iterator - other.m_it.array_iterator; + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return m_it.primitive_iterator - other.m_it.primitive_iterator; + } + } + + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator[](difference_type n) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object)); + + case value_t::array: + return *std::next(m_it.array_iterator, n); + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + const typename object_t::key_type& key() const + { + JSON_ASSERT(m_object != nullptr); + + if (JSON_HEDLEY_LIKELY(m_object->is_object())) + { + return m_it.object_iterator->first; + } + + JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", m_object)); + } + + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference value() const + { + return operator*(); + } + + JSON_PRIVATE_UNLESS_TESTED: + /// associated JSON instance + pointer m_object = nullptr; + /// the actual iterator of the associated instance + internal_iterator::type> m_it {}; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/iterators/iteration_proxy.hpp b/soggy-mistress/extern/nlohmann/detail/iterators/iteration_proxy.hpp new file mode 100644 index 0000000..659cd06 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/iterators/iteration_proxy.hpp @@ -0,0 +1,242 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // size_t +#include // input_iterator_tag +#include // string, to_string +#include // tuple_size, get, tuple_element +#include // move + +#if JSON_HAS_RANGES + #include // enable_borrowed_range +#endif + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +void int_to_string( string_type& target, std::size_t value ) +{ + // For ADL + using std::to_string; + target = to_string(value); +} +template class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type *; + using reference = value_type &; + using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; + + private: + /// the iterator + IteratorType anchor{}; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + string_type empty_str{}; + + public: + explicit iteration_proxy_value() = default; + explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) + noexcept(std::is_nothrow_move_constructible::value + && std::is_nothrow_default_constructible::value) + : anchor(std::move(it)) + , array_index(array_index_) + {} + + iteration_proxy_value(iteration_proxy_value const&) = default; + iteration_proxy_value& operator=(iteration_proxy_value const&) = default; + // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions + iteration_proxy_value(iteration_proxy_value&&) + noexcept(std::is_nothrow_move_constructible::value + && std::is_nothrow_move_constructible::value) = default; + iteration_proxy_value& operator=(iteration_proxy_value&&) + noexcept(std::is_nothrow_move_assignable::value + && std::is_nothrow_move_assignable::value) = default; + ~iteration_proxy_value() = default; + + /// dereference operator (needed for range-based for) + const iteration_proxy_value& operator*() const + { + return *this; + } + + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() + { + ++anchor; + ++array_index; + + return *this; + } + + iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp) + { + auto tmp = iteration_proxy_value(anchor, array_index); + ++anchor; + ++array_index; + return tmp; + } + + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } +}; + +/// proxy class for the items() function +template class iteration_proxy +{ + private: + /// the container to iterate + typename IteratorType::pointer container = nullptr; + + public: + explicit iteration_proxy() = default; + + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(&cont) {} + + iteration_proxy(iteration_proxy const&) = default; + iteration_proxy& operator=(iteration_proxy const&) = default; + iteration_proxy(iteration_proxy&&) noexcept = default; + iteration_proxy& operator=(iteration_proxy&&) noexcept = default; + ~iteration_proxy() = default; + + /// return iterator begin (needed for range-based for) + iteration_proxy_value begin() const noexcept + { + return iteration_proxy_value(container->begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value end() const noexcept + { + return iteration_proxy_value(container->end()); + } +}; + +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) +{ + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) +{ + return i.value(); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ + +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template +class tuple_size<::nlohmann::detail::iteration_proxy_value> + : public std::integral_constant {}; + +template +class tuple_element> +{ + public: + using type = decltype( + get(std::declval < + ::nlohmann::detail::iteration_proxy_value> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +} // namespace std + +#if JSON_HAS_RANGES + template + inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy> = true; +#endif diff --git a/soggy-mistress/extern/nlohmann/detail/iterators/iterator_traits.hpp b/soggy-mistress/extern/nlohmann/detail/iterators/iterator_traits.hpp new file mode 100644 index 0000000..34a20ee --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/iterators/iterator_traits.hpp @@ -0,0 +1,61 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // random_access_iterator_tag + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/iterators/json_reverse_iterator.hpp b/soggy-mistress/extern/nlohmann/detail/iterators/json_reverse_iterator.hpp new file mode 100644 index 0000000..eb450e9 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/iterators/json_reverse_iterator.hpp @@ -0,0 +1,130 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // ptrdiff_t +#include // reverse_iterator +#include // declval + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +////////////////////// +// reverse_iterator // +////////////////////// + +/*! +@brief a template for a reverse iterator class + +@tparam Base the base iterator type to reverse. Valid types are @ref +iterator (to create @ref reverse_iterator) and @ref const_iterator (to +create @ref const_reverse_iterator). + +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): + It is possible to write to the pointed-to element (only if @a Base is + @ref iterator). + +@since version 1.0.0 +*/ +template +class json_reverse_iterator : public std::reverse_iterator +{ + public: + using difference_type = std::ptrdiff_t; + /// shortcut to the reverse iterator adapter + using base_iterator = std::reverse_iterator; + /// the reference type for the pointed-to element + using reference = typename Base::reference; + + /// create reverse iterator from iterator + explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept + : base_iterator(it) {} + + /// create reverse iterator from base class + explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} + + /// post-increment (it++) + json_reverse_iterator operator++(int)& // NOLINT(cert-dcl21-cpp) + { + return static_cast(base_iterator::operator++(1)); + } + + /// pre-increment (++it) + json_reverse_iterator& operator++() + { + return static_cast(base_iterator::operator++()); + } + + /// post-decrement (it--) + json_reverse_iterator operator--(int)& // NOLINT(cert-dcl21-cpp) + { + return static_cast(base_iterator::operator--(1)); + } + + /// pre-decrement (--it) + json_reverse_iterator& operator--() + { + return static_cast(base_iterator::operator--()); + } + + /// add to iterator + json_reverse_iterator& operator+=(difference_type i) + { + return static_cast(base_iterator::operator+=(i)); + } + + /// add to iterator + json_reverse_iterator operator+(difference_type i) const + { + return static_cast(base_iterator::operator+(i)); + } + + /// subtract from iterator + json_reverse_iterator operator-(difference_type i) const + { + return static_cast(base_iterator::operator-(i)); + } + + /// return difference + difference_type operator-(const json_reverse_iterator& other) const + { + return base_iterator(*this) - base_iterator(other); + } + + /// access to successor + reference operator[](difference_type n) const + { + return *(this->operator+(n)); + } + + /// return the key of an object iterator + auto key() const -> decltype(std::declval().key()) + { + auto it = --this->base(); + return it.key(); + } + + /// return the value of an iterator + reference value() const + { + auto it = --this->base(); + return it.operator * (); + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/iterators/primitive_iterator.hpp b/soggy-mistress/extern/nlohmann/detail/iterators/primitive_iterator.hpp new file mode 100644 index 0000000..0bc3ca8 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/iterators/primitive_iterator.hpp @@ -0,0 +1,132 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // ptrdiff_t +#include // numeric_limits + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/* +@brief an iterator for primitive JSON types + +This class models an iterator for primitive JSON types (boolean, number, +string). It's only purpose is to allow the iterator/const_iterator classes +to "iterate" over primitive values. Internally, the iterator is modeled by +a `difference_type` variable. Value begin_value (`0`) models the begin, +end_value (`1`) models past the end. +*/ +class primitive_iterator_t +{ + private: + using difference_type = std::ptrdiff_t; + static constexpr difference_type begin_value = 0; + static constexpr difference_type end_value = begin_value + 1; + + JSON_PRIVATE_UNLESS_TESTED: + /// iterator as signed integer type + difference_type m_it = (std::numeric_limits::min)(); + + public: + constexpr difference_type get_value() const noexcept + { + return m_it; + } + + /// set iterator to a defined beginning + void set_begin() noexcept + { + m_it = begin_value; + } + + /// set iterator to a defined past the end + void set_end() noexcept + { + m_it = end_value; + } + + /// return whether the iterator can be dereferenced + constexpr bool is_begin() const noexcept + { + return m_it == begin_value; + } + + /// return whether the iterator is at end + constexpr bool is_end() const noexcept + { + return m_it == end_value; + } + + friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it == rhs.m_it; + } + + friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it < rhs.m_it; + } + + primitive_iterator_t operator+(difference_type n) noexcept + { + auto result = *this; + result += n; + return result; + } + + friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it - rhs.m_it; + } + + primitive_iterator_t& operator++() noexcept + { + ++m_it; + return *this; + } + + primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + ++m_it; + return result; + } + + primitive_iterator_t& operator--() noexcept + { + --m_it; + return *this; + } + + primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + --m_it; + return result; + } + + primitive_iterator_t& operator+=(difference_type n) noexcept + { + m_it += n; + return *this; + } + + primitive_iterator_t& operator-=(difference_type n) noexcept + { + m_it -= n; + return *this; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/json_pointer.hpp b/soggy-mistress/extern/nlohmann/detail/json_pointer.hpp new file mode 100644 index 0000000..3f69bcd --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/json_pointer.hpp @@ -0,0 +1,988 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // all_of +#include // isdigit +#include // errno, ERANGE +#include // strtoull +#ifndef JSON_NO_IO + #include // ostream +#endif // JSON_NO_IO +#include // max +#include // accumulate +#include // string +#include // move +#include // vector + +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document +/// @sa https://json.nlohmann.me/api/json_pointer/ +template +class json_pointer +{ + // allow basic_json to access private members + NLOHMANN_BASIC_JSON_TPL_DECLARATION + friend class basic_json; + + template + friend class json_pointer; + + template + struct string_t_helper + { + using type = T; + }; + + NLOHMANN_BASIC_JSON_TPL_DECLARATION + struct string_t_helper + { + using type = StringType; + }; + + public: + // for backwards compatibility accept BasicJsonType + using string_t = typename string_t_helper::type; + + /// @brief create JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/ + explicit json_pointer(const string_t& s = "") + : reference_tokens(split(s)) + {} + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/to_string/ + string_t to_string() const + { + return std::accumulate(reference_tokens.begin(), reference_tokens.end(), + string_t{}, + [](const string_t& a, const string_t& b) + { + return detail::concat(a, '/', detail::escape(b)); + }); + } + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, to_string()) + operator string_t() const + { + return to_string(); + } + +#ifndef JSON_NO_IO + /// @brief write string representation of the JSON pointer to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr) + { + o << ptr.to_string(); + return o; + } +#endif + + /// @brief append another JSON pointer at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(const json_pointer& ptr) + { + reference_tokens.insert(reference_tokens.end(), + ptr.reference_tokens.begin(), + ptr.reference_tokens.end()); + return *this; + } + + /// @brief append an unescaped reference token at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(string_t token) + { + push_back(std::move(token)); + return *this; + } + + /// @brief append an array index at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(std::size_t array_idx) + { + return *this /= std::to_string(array_idx); + } + + /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, + const json_pointer& rhs) + { + return json_pointer(lhs) /= rhs; + } + + /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, string_t token) // NOLINT(performance-unnecessary-value-param) + { + return json_pointer(lhs) /= std::move(token); + } + + /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx) + { + return json_pointer(lhs) /= array_idx; + } + + /// @brief returns the parent of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/ + json_pointer parent_pointer() const + { + if (empty()) + { + return *this; + } + + json_pointer res = *this; + res.pop_back(); + return res; + } + + /// @brief remove last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/ + void pop_back() + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + reference_tokens.pop_back(); + } + + /// @brief return last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/back/ + const string_t& back() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + return reference_tokens.back(); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(const string_t& token) + { + reference_tokens.push_back(token); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(string_t&& token) + { + reference_tokens.push_back(std::move(token)); + } + + /// @brief return whether pointer points to the root document + /// @sa https://json.nlohmann.me/api/json_pointer/empty/ + bool empty() const noexcept + { + return reference_tokens.empty(); + } + + private: + /*! + @param[in] s reference token to be converted into an array index + + @return integer representation of @a s + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index begins not with a digit + @throw out_of_range.404 if string @a s could not be converted to an integer + @throw out_of_range.410 if an array index exceeds size_type + */ + template + static typename BasicJsonType::size_type array_index(const string_t& s) + { + using size_type = typename BasicJsonType::size_type; + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, detail::concat("array index '", s, "' must not begin with '0'"), nullptr)); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, detail::concat("array index '", s, "' is not a number"), nullptr)); + } + + const char* p = s.c_str(); + char* p_end = nullptr; + errno = 0; // strtoull doesn't reset errno + unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int) + if (p == p_end // invalid input or empty string + || errno == ERANGE // out of range + || JSON_HEDLEY_UNLIKELY(static_cast(p_end - p) != s.size())) // incomplete read + { + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", s, "'"), nullptr)); + } + + // only triggered on special platforms (like 32bit), see also + // https://github.com/nlohmann/json/pull/2203 + if (res >= static_cast((std::numeric_limits::max)())) // NOLINT(runtime/int) + { + JSON_THROW(detail::out_of_range::create(410, detail::concat("array index ", s, " exceeds size_type"), nullptr)); // LCOV_EXCL_LINE + } + + return static_cast(res); + } + + JSON_PRIVATE_UNLESS_TESTED: + json_pointer top() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + json_pointer result = *this; + result.reference_tokens = {reference_tokens[0]}; + return result; + } + + private: + /*! + @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. + + @throw parse_error.109 if array index is not a number + @throw type_error.313 if value cannot be unflattened + */ + template + BasicJsonType& get_and_create(BasicJsonType& j) const + { + auto* result = &j; + + // in case no reference tokens exist, return a reference to the JSON value + // j which will be overwritten by a primitive value + for (const auto& reference_token : reference_tokens) + { + switch (result->type()) + { + case detail::value_t::null: + { + if (reference_token == "0") + { + // start a new array if reference token is 0 + result = &result->operator[](0); + } + else + { + // start a new object otherwise + result = &result->operator[](reference_token); + } + break; + } + + case detail::value_t::object: + { + // create an entry in the object + result = &result->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + // create an entry in the array + result = &result->operator[](array_index(reference_token)); + break; + } + + /* + The following code is only reached if there exists a reference + token _and_ the current value is primitive. In this case, we have + an error situation, because primitive values may only occur as + single value; that is, with an empty list of reference tokens. + */ + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", &j)); + } + } + + return *result; + } + + /*! + @brief return a reference to the pointed to value + + @note This version does not throw if a value is not present, but tries to + create nested values instead. For instance, calling this function + with pointer `"/this/that"` on a null value is equivalent to calling + `operator[]("this").operator[]("that")` on that value, effectively + changing the null value to an object. + + @param[in] ptr a JSON value + + @return reference to the JSON value pointed to by the JSON pointer + + @complexity Linear in the length of the JSON pointer. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + BasicJsonType& get_unchecked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + // convert null values to arrays or objects before continuing + if (ptr->is_null()) + { + // check if reference token is a number + const bool nums = + std::all_of(reference_token.begin(), reference_token.end(), + [](const unsigned char x) + { + return std::isdigit(x); + }); + + // change value to array for numbers or "-" or to object otherwise + *ptr = (nums || reference_token == "-") + ? detail::value_t::array + : detail::value_t::object; + } + + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (reference_token == "-") + { + // explicitly treat "-" as index beyond the end + ptr = &ptr->operator[](ptr->m_value.array->size()); + } + else + { + // convert array index to number; unchecked access + ptr = &ptr->operator[](array_index(reference_token)); + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + BasicJsonType& get_checked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, detail::concat( + "array index '-' (", std::to_string(ptr->m_value.array->size()), + ") is out of range"), ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @brief return a const reference to the pointed to value + + @param[in] ptr a JSON value + + @return const reference to the JSON value pointed to by the JSON + pointer + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" cannot be used for const access + JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_value.array->size()), ") is out of range"), ptr)); + } + + // use unchecked array access + ptr = &ptr->operator[](array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + const BasicJsonType& get_checked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, detail::concat( + "array index '-' (", std::to_string(ptr->m_value.array->size()), + ") is out of range"), ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + template + bool contains(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (!ptr->contains(reference_token)) + { + // we did not find the key in the object + return false; + } + + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) + { + if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } + } + + const auto idx = array_index(reference_token); + if (idx >= ptr->size()) + { + // index out of range + return false; + } + + ptr = &ptr->operator[](idx); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } + } + } + + // no reference token left means we found a primitive value + return true; + } + + /*! + @brief split the string input to reference tokens + + @note This function is only called by the json_pointer constructor. + All exceptions below are documented there. + + @throw parse_error.107 if the pointer is not empty or begins with '/' + @throw parse_error.108 if character '~' is not followed by '0' or '1' + */ + static std::vector split(const string_t& reference_string) + { + std::vector result; + + // special case: empty reference string -> no reference tokens + if (reference_string.empty()) + { + return result; + } + + // check if nonempty reference string begins with slash + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) + { + JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr)); + } + + // extract the reference tokens: + // - slash: position of the last read slash (or end of string) + // - start: position after the previous slash + for ( + // search for the first slash after the first character + std::size_t slash = reference_string.find_first_of('/', 1), + // set the beginning of the first reference token + start = 1; + // we can stop if start == 0 (if slash == string_t::npos) + start != 0; + // set the beginning of the next reference token + // (will eventually be 0 if slash == string_t::npos) + start = (slash == string_t::npos) ? 0 : slash + 1, + // find next slash + slash = reference_string.find_first_of('/', start)) + { + // use the text between the beginning of the reference token + // (start) and the last slash (slash). + auto reference_token = reference_string.substr(start, slash - start); + + // check reference tokens are properly escaped + for (std::size_t pos = reference_token.find_first_of('~'); + pos != string_t::npos; + pos = reference_token.find_first_of('~', pos + 1)) + { + JSON_ASSERT(reference_token[pos] == '~'); + + // ~ must be followed by 0 or 1 + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || + (reference_token[pos + 1] != '0' && + reference_token[pos + 1] != '1'))) + { + JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr)); + } + } + + // finally, store the reference token + detail::unescape(reference_token); + result.push_back(reference_token); + } + + return result; + } + + private: + /*! + @param[in] reference_string the reference string to the current value + @param[in] value the value to consider + @param[in,out] result the result object to insert values to + + @note Empty objects or arrays are flattened to `null`. + */ + template + static void flatten(const string_t& reference_string, + const BasicJsonType& value, + BasicJsonType& result) + { + switch (value.type()) + { + case detail::value_t::array: + { + if (value.m_value.array->empty()) + { + // flatten empty array as null + result[reference_string] = nullptr; + } + else + { + // iterate array and use index as reference string + for (std::size_t i = 0; i < value.m_value.array->size(); ++i) + { + flatten(detail::concat(reference_string, '/', std::to_string(i)), + value.m_value.array->operator[](i), result); + } + } + break; + } + + case detail::value_t::object: + { + if (value.m_value.object->empty()) + { + // flatten empty object as null + result[reference_string] = nullptr; + } + else + { + // iterate object and use keys as reference string + for (const auto& element : *value.m_value.object) + { + flatten(detail::concat(reference_string, '/', detail::escape(element.first)), element.second, result); + } + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // add primitive value with its reference string + result[reference_string] = value; + break; + } + } + } + + /*! + @param[in] value flattened JSON + + @return unflattened JSON + + @throw parse_error.109 if array index is not a number + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + @throw type_error.313 if value cannot be unflattened + */ + template + static BasicJsonType + unflatten(const BasicJsonType& value) + { + if (JSON_HEDLEY_UNLIKELY(!value.is_object())) + { + JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", &value)); + } + + BasicJsonType result; + + // iterate the JSON object values + for (const auto& element : *value.m_value.object) + { + if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) + { + JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second)); + } + + // assign value to reference pointed to by JSON pointer; Note that if + // the JSON pointer is "" (i.e., points to the whole value), function + // get_and_create returns a reference to result itself. An assignment + // will then create a primitive value. + json_pointer(element.first).get_and_create(result) = element.second; + } + + return result; + } + + // can't use conversion operator because of ambiguity + json_pointer convert() const& + { + json_pointer result; + result.reference_tokens = reference_tokens; + return result; + } + + json_pointer convert()&& + { + json_pointer result; + result.reference_tokens = std::move(reference_tokens); + return result; + } + + public: +#if JSON_HAS_THREE_WAY_COMPARISON + /// @brief compares two JSON pointers for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + bool operator==(const json_pointer& rhs) const noexcept + { + return reference_tokens == rhs.reference_tokens; + } + + /// @brief compares JSON pointer and string for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer)) + bool operator==(const string_t& rhs) const + { + return *this == json_pointer(rhs); + } + + /// @brief 3-way compares two JSON pointers + template + std::strong_ordering operator<=>(const json_pointer& rhs) const noexcept // *NOPAD* + { + return reference_tokens <=> rhs.reference_tokens; // *NOPAD* + } +#else + /// @brief compares two JSON pointers for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const json_pointer& lhs, + const json_pointer& rhs) noexcept; + + /// @brief compares JSON pointer and string for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const json_pointer& lhs, + const StringType& rhs); + + /// @brief compares string and JSON pointer for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const StringType& lhs, + const json_pointer& rhs); + + /// @brief compares two JSON pointers for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const json_pointer& lhs, + const json_pointer& rhs) noexcept; + + /// @brief compares JSON pointer and string for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const json_pointer& lhs, + const StringType& rhs); + + /// @brief compares string and JSON pointer for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const StringType& lhs, + const json_pointer& rhs); + + /// @brief compares two JSON pointer for less-than + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator<(const json_pointer& lhs, + const json_pointer& rhs) noexcept; +#endif + + private: + /// the reference tokens + std::vector reference_tokens; +}; + +#if !JSON_HAS_THREE_WAY_COMPARISON +// functions cannot be defined inside class due to ODR violations +template +inline bool operator==(const json_pointer& lhs, + const json_pointer& rhs) noexcept +{ + return lhs.reference_tokens == rhs.reference_tokens; +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) +inline bool operator==(const json_pointer& lhs, + const StringType& rhs) +{ + return lhs == json_pointer(rhs); +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) +inline bool operator==(const StringType& lhs, + const json_pointer& rhs) +{ + return json_pointer(lhs) == rhs; +} + +template +inline bool operator!=(const json_pointer& lhs, + const json_pointer& rhs) noexcept +{ + return !(lhs == rhs); +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) +inline bool operator!=(const json_pointer& lhs, + const StringType& rhs) +{ + return !(lhs == rhs); +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) +inline bool operator!=(const StringType& lhs, + const json_pointer& rhs) +{ + return !(lhs == rhs); +} + +template +inline bool operator<(const json_pointer& lhs, + const json_pointer& rhs) noexcept +{ + return lhs.reference_tokens < rhs.reference_tokens; +} +#endif + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/json_ref.hpp b/soggy-mistress/extern/nlohmann/detail/json_ref.hpp new file mode 100644 index 0000000..47911fb --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/json_ref.hpp @@ -0,0 +1,78 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +class json_ref +{ + public: + using value_type = BasicJsonType; + + json_ref(value_type&& value) + : owned_value(std::move(value)) + {} + + json_ref(const value_type& value) + : value_ref(&value) + {} + + json_ref(std::initializer_list init) + : owned_value(init) + {} + + template < + class... Args, + enable_if_t::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward(args)...) + {} + + // class should be movable only + json_ref(json_ref&&) noexcept = default; + json_ref(const json_ref&) = delete; + json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; + + value_type moved_or_copied() const + { + if (value_ref == nullptr) + { + return std::move(owned_value); + } + return *value_ref; + } + + value_type const& operator*() const + { + return value_ref ? *value_ref : owned_value; + } + + value_type const* operator->() const + { + return &** this; + } + + private: + mutable value_type owned_value = nullptr; + value_type const* value_ref = nullptr; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/macro_scope.hpp b/soggy-mistress/extern/nlohmann/detail/macro_scope.hpp new file mode 100644 index 0000000..6248bea --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/macro_scope.hpp @@ -0,0 +1,468 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // declval, pair +#include +#include + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +#include + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { Type nlohmann_json_default_obj; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif diff --git a/soggy-mistress/extern/nlohmann/detail/macro_unscope.hpp b/soggy-mistress/extern/nlohmann/detail/macro_unscope.hpp new file mode 100644 index 0000000..4a871f0 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/macro_unscope.hpp @@ -0,0 +1,44 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +// restore clang diagnostic settings +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +// clean up +#undef JSON_ASSERT +#undef JSON_INTERNAL_CATCH +#undef JSON_THROW +#undef JSON_PRIVATE_UNLESS_TESTED +#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION +#undef NLOHMANN_BASIC_JSON_TPL +#undef JSON_EXPLICIT +#undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL +#undef JSON_INLINE_VARIABLE +#undef JSON_NO_UNIQUE_ADDRESS +#undef JSON_DISABLE_ENUM_SERIALIZATION +#undef JSON_USE_GLOBAL_UDLS + +#ifndef JSON_TEST_KEEP_MACROS + #undef JSON_CATCH + #undef JSON_TRY + #undef JSON_HAS_CPP_11 + #undef JSON_HAS_CPP_14 + #undef JSON_HAS_CPP_17 + #undef JSON_HAS_CPP_20 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #undef JSON_HAS_THREE_WAY_COMPARISON + #undef JSON_HAS_RANGES + #undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#include diff --git a/soggy-mistress/extern/nlohmann/detail/meta/call_std/begin.hpp b/soggy-mistress/extern/nlohmann/detail/meta/call_std/begin.hpp new file mode 100644 index 0000000..27d36c6 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/call_std/begin.hpp @@ -0,0 +1,17 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/meta/call_std/end.hpp b/soggy-mistress/extern/nlohmann/detail/meta/call_std/end.hpp new file mode 100644 index 0000000..d10bf83 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/call_std/end.hpp @@ -0,0 +1,17 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/meta/cpp_future.hpp b/soggy-mistress/extern/nlohmann/detail/meta/cpp_future.hpp new file mode 100644 index 0000000..22f2514 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/cpp_future.hpp @@ -0,0 +1,171 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +inline constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/meta/detected.hpp b/soggy-mistress/extern/nlohmann/detail/meta/detected.hpp new file mode 100644 index 0000000..b2f6db9 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/detected.hpp @@ -0,0 +1,70 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/meta/identity_tag.hpp b/soggy-mistress/extern/nlohmann/detail/meta/identity_tag.hpp new file mode 100644 index 0000000..71164f2 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/identity_tag.hpp @@ -0,0 +1,21 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// dispatching helper struct +template struct identity_tag {}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/meta/is_sax.hpp b/soggy-mistress/extern/nlohmann/detail/meta/is_sax.hpp new file mode 100644 index 0000000..2150089 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/is_sax.hpp @@ -0,0 +1,159 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // size_t +#include // declval +#include // string + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using null_function_t = decltype(std::declval().null()); + +template +using boolean_function_t = + decltype(std::declval().boolean(std::declval())); + +template +using number_integer_function_t = + decltype(std::declval().number_integer(std::declval())); + +template +using number_unsigned_function_t = + decltype(std::declval().number_unsigned(std::declval())); + +template +using number_float_function_t = decltype(std::declval().number_float( + std::declval(), std::declval())); + +template +using string_function_t = + decltype(std::declval().string(std::declval())); + +template +using binary_function_t = + decltype(std::declval().binary(std::declval())); + +template +using start_object_function_t = + decltype(std::declval().start_object(std::declval())); + +template +using key_function_t = + decltype(std::declval().key(std::declval())); + +template +using end_object_function_t = decltype(std::declval().end_object()); + +template +using start_array_function_t = + decltype(std::declval().start_array(std::declval())); + +template +using end_array_function_t = decltype(std::declval().end_array()); + +template +using parse_error_function_t = decltype(std::declval().parse_error( + std::declval(), std::declval(), + std::declval())); + +template +struct is_sax +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static constexpr bool value = + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value; +}; + +template +struct is_sax_static_asserts +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static_assert(is_detected_exact::value, + "Missing/invalid function: bool null()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_integer(number_integer_t)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool string(string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool binary(binary_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_object(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool key(string_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_object()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_array(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_array()"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool parse_error(std::size_t, const " + "std::string&, const exception&)"); +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/soggy-mistress/extern/nlohmann/detail/meta/std_fs.hpp b/soggy-mistress/extern/nlohmann/detail/meta/std_fs.hpp new file mode 100644 index 0000000..c096158 --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/std_fs.hpp @@ -0,0 +1,29 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +#if JSON_HAS_EXPERIMENTAL_FILESYSTEM +#include +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +namespace std_fs = std::experimental::filesystem; +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END +#elif JSON_HAS_FILESYSTEM +#include +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +namespace std_fs = std::filesystem; +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END +#endif diff --git a/soggy-mistress/extern/nlohmann/detail/meta/type_traits.hpp b/soggy-mistress/extern/nlohmann/detail/meta/type_traits.hpp new file mode 100644 index 0000000..cfc7e5a --- /dev/null +++ b/soggy-mistress/extern/nlohmann/detail/meta/type_traits.hpp @@ -0,0 +1,740 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple + +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template