From 9f188c7656b171c69d869186a44304c98bbb80d0 Mon Sep 17 00:00:00 2001 From: gromchek Date: Sat, 20 Sep 2025 15:39:58 +0300 Subject: [PATCH] feat(profile): DetailDoodad funcs --- .../ida/batch/import_symbols.idc | 39 +++++++++++++++++- .../3.3.5a-windows-386/include/map/CMapObj.h | 4 +- .../symbol/detaildoodad/func.sym | 5 +++ .../symbol/detaildoodad/label.sym | 11 +++++ .../symbol/detaildoodaddata/func.sym | 2 + .../symbol/detaildoodadinst/func.sym | 3 ++ .../symbol/m2lighting/func.sym | 1 + profile/3.3.5a-windows-386/symbol/main.sym | 37 +++++++++++++++++ .../3.3.5a-windows-386/symbol/map/func.sym | 1 + .../3.3.5a-windows-386/symbol/map/label.sym | 1 + .../symbol/mapchunk/func.sym | 1 + .../symbol/shadowcache/func.sym | 2 + .../symbol/shadowcache/label.sym | 1 + .../3.3.5a-windows-386/symbol/world/func.sym | 2 + .../3.3.5a-windows-386/symbol/world/label.sym | 4 ++ .../symbol/worldparam/func.sym | 2 + .../symbol/worldscene/func.sym | 1 + profile/3.3.5a-windows-386/x64dbg/game.dd32 | Bin 194089 -> 195171 bytes 18 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 profile/3.3.5a-windows-386/symbol/detaildoodad/label.sym create mode 100644 profile/3.3.5a-windows-386/symbol/detaildoodaddata/func.sym create mode 100644 profile/3.3.5a-windows-386/symbol/detaildoodadinst/func.sym create mode 100644 profile/3.3.5a-windows-386/symbol/shadowcache/label.sym create mode 100644 profile/3.3.5a-windows-386/symbol/worldparam/func.sym diff --git a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc index f210b98..7f474e9 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc @@ -4141,17 +4141,22 @@ static import_symbols() { set_name(0x0077F310, "World__Intersect"); set_name(0x0077FFB0, "World__ObjectTestConvexVolume"); set_name(0x00780240, "World__ObjectUpdate"); + set_name(0x00780710, "World__SetDetailDoodadDensity"); + set_name(0x00780730, "World__SetDetailDoodadDist"); set_name(0x00780860, "World__PrepareAreaOfInterest"); set_name(0x00780F50, "World__Initialize"); set_name(0x00781430, "World__LoadMap"); set_name(0x00781500, "World__Preload"); set_name(0x007816F0, "DayNight__Update"); set_name(0x007831A0, "World__PrepareUpdate"); + set_name(0x0078DAB0, "CWorldParam__GroundEffectDensityCallback"); + set_name(0x0078DB10, "CWorldParam__GroundEffectDistCallback"); set_name(0x0078F020, "AreaListRegisterLocation"); set_name(0x0078FB00, "CWorldScene__FrustumXform"); set_name(0x00791100, "CWorldScene__FrustumSet"); set_name(0x00795D40, "CWorldScene__LocateViewer3"); set_name(0x007964A0, "CWorldScene__RenderMapObjDefGroups"); + set_name(0x007984A0, "CWorldScene__RenderDetailDoodads"); set_name(0x00799730, "CBarrier__Initialize"); set_name(0x007997D0, "CWorldScene__Initialize"); set_name(0x0079A870, "CWorldScene__Render"); @@ -4163,6 +4168,7 @@ static import_symbols() { set_name(0x0079BCC0, "Particulate__InitMovement"); set_name(0x0079DFF0, "Particulate__SetTexture"); set_name(0x0079E100, "Particulate__constructor"); + set_name(0x0079E730, "CMap__ClearChunkDetailDoodads"); set_name(0x0079E7C0, "CMap__Initialize"); set_name(0x0079F320, "CMap__Destroy"); set_name(0x0079F820, "CPassenger__Disable"); @@ -4220,11 +4226,22 @@ static import_symbols() { set_name(0x007B0260, "CMapObj__FreeMapObj"); set_name(0x007B0580, "CMapObj__constructor"); set_name(0x007B0CC0, "CMapObj__Create"); + set_name(0x007B0F10, "CM2Lighting__Initialize"); + set_name(0x007B11B0, "CDetailDoodad__CreateAlphaRampTexture"); set_name(0x007B1270, "CDetailDoodad__UpdateAlphaRampTexture"); + set_name(0x007B1380, "CDetailDoodad__DestroyModels"); set_name(0x007B15D0, "CDetailDoodad__InitializeShaderConstants"); + set_name(0x007B1B10, "CDetailDoodadData__ModelLoadedCallback"); set_name(0x007B2760, "CDetailDoodad__Initialize"); set_name(0x007B2A80, "CDetailDoodad__UpdatePools"); set_name(0x007B2D30, "CDetailDoodad__InitializeRenderState"); + set_name(0x007B3050, "CDetailDoodadData__Load"); + set_name(0x007B31E0, "CDetailDoodadInst__AddDoodad"); + set_name(0x007B3480, "CDetailDoodad__Destroy"); + set_name(0x007B3530, "CDetailDoodad__LoadModel"); + set_name(0x007B36E0, "CDetailDoodadInst__constructor"); + set_name(0x007B3780, "CDetailDoodadInst__destructor"); + set_name(0x007B3910, "CDetailDoodad__AllocInst"); set_name(0x007B3960, "CDetailDoodad__FreeInst"); set_name(0x007B3DE0, "CMapObjDefGroup__constructor"); set_name(0x007B4350, "CMapObjDef__constructor"); @@ -4324,6 +4341,7 @@ static import_symbols() { set_name(0x007CF9A0, "CChunkLiquid__RenderPrep"); set_name(0x007D02C0, "CMapRenderChunk__RenderPrepBufs"); set_name(0x007D0420, "CMapRenderChunk__UseStreamingBufs"); + set_name(0x007D05F0, "CMapChunk__LoadDetailDoodadModels"); set_name(0x007D3390, "CMapChunk__CreateDetailDoodads"); set_name(0x007D3FE0, "CMapChunk__CreateDetailDoodadInst"); set_name(0x007D59B0, "CMap__LocateViewerMapObjs"); @@ -4616,7 +4634,7 @@ static import_symbols() { set_name(0x00834630, "CM2Model__AttachToSceneRecursive"); set_name(0x00834810, "CM2Model__Initialize"); set_name(0x008348D0, "CM2Light__Initialize"); - set_name(0x00834900, "CM2Lighting__Initialize"); + set_name(0x00834900, "CM2Lighting__Initialize@2"); set_name(0x00834940, "CM2Lighting__SetFog"); set_name(0x00834990, "CM2Lighting__SetFog@2"); set_name(0x008349E0, "CM2Lighting__GetPointLight"); @@ -4769,6 +4787,8 @@ static import_symbols() { set_name(0x00873FE0, "CShadowCache__NotifyTexturesRecreate"); set_name(0x008744E0, "CShadowCache__SetShadowMapGenericGlobal"); set_name(0x008745D0, "CShadowCache__SetShadowMapGenericInterior"); + set_name(0x00874660, "CShadowCache__SetShadowMapTerrain"); + set_name(0x00874760, "CShadowCache__SetShadowMapDetailDoodad"); set_name(0x00876530, "CShaderEffectManager__GetEffect"); set_name(0x00876BE0, "CShaderEffectManager__CreateEffect"); set_name(0x00876CA0, "CShaderEffectManager__ParseEffectCallback"); @@ -5495,11 +5515,13 @@ static import_symbols() { set_name(0x00ADBEE0, "s_distCull"); set_name(0x00ADBF00, "s_farClip"); set_name(0x00ADBF88, "g_videoHardwareDB"); + set_name(0x00ADEEB8, "World__groundEffectDistValue"); set_name(0x00ADEEC4, "World__loadMax"); set_name(0x00ADEEC8, "World__loadMin"); set_name(0x00ADEED4, "World__s_nearClip"); set_name(0x00ADFBC8, "CMap__bPreload"); set_name(0x00ADFC3C, "CMap__s_mapChunkLiquidUpdateList"); + set_name(0x00AEEDAC, "CMap__mapChunkPointer"); set_name(0x00AF4998, "g_lightSkyboxDB"); set_name(0x00AF49BC, "g_lightIntBandDB"); set_name(0x00AF49E0, "g_lightFloatBandDB"); @@ -5851,6 +5873,9 @@ static import_symbols() { set_name(0x00CB7220, "s_logsysteminit"); set_name(0x00CB732C, "s_defaultdir_critsect"); set_name(0x00CB7358, "s_critsect@2"); + set_name(0x00CD766C, "World__detailDoodadAlphaRef"); + set_name(0x00CD7674, "World__groundEffectDistValueSqr"); + set_name(0x00CD773C, "World__detailDoodadDensity"); set_name(0x00CD7744, "World__s_pervFarClip"); set_name(0x00CD7748, "World__s_farClip"); set_name(0x00CD774C, "World__enables"); @@ -5879,6 +5904,17 @@ static import_symbols() { set_name(0x00CFBEC4, "CMapObjRenderGroupExterior_ptr"); set_name(0x00CFBECC, "CMapObjRenderGroupInterior_ptr"); set_name(0x00D1C418, "CMapObj__sMinimapTag"); + set_name(0x00D1C488, "CDetailDoodad__s_pixelShader"); + set_name(0x00D1C4A8, "CDetailDoodad__s_vertexShader"); + set_name(0x00D1C4C0, "CDetailDoodad__s_bPoolDirty"); + set_name(0x00D1C4CC, "CDetailDoodad__s_idxBufItems"); + set_name(0x00D1C4D0, "CDetailDoodad__s_vtxBufItems"); + set_name(0x00D1C4D4, "CDetailDoodad__s_gxIndexPool"); + set_name(0x00D1C4D8, "CDetailDoodad__s_gxVertexPool"); + set_name(0x00D1C4E0, "CDetailDoodad__s_alphaRmapTexture"); + set_name(0x00D1C4E4, "CDetailDoodad__s_instHeap"); + set_name(0x00D1C4F0, "CDetailDoodad__s_bUseShaders"); + set_name(0x00D1C4FC, "CDetailDoodad__s_doodadList"); set_name(0x00D25308, "s_cvShadowCull"); set_name(0x00D25310, "s_cvShadowScissor"); set_name(0x00D25314, "s_cvShadowInstancing"); @@ -5914,4 +5950,5 @@ static import_symbols() { set_name(0x00D415D0, "s_gotPowerProfFrequency"); set_name(0x00D415D4, "s_checkedPowerProfInfo"); set_name(0x00D43020, "CShaderEffect__s_enableShaders"); + set_name(0x00D43154, "CShadowCache__s_shadowMode"); } diff --git a/profile/3.3.5a-windows-386/include/map/CMapObj.h b/profile/3.3.5a-windows-386/include/map/CMapObj.h index 0a21b27..ed834e2 100644 --- a/profile/3.3.5a-windows-386/include/map/CMapObj.h +++ b/profile/3.3.5a-windows-386/include/map/CMapObj.h @@ -96,8 +96,8 @@ struct CMapObjGroup uint16_t transparencyBatchesCount; uint16_t intBatchCount; int32_t extBatchCount; - void* CAaBspNodePtr; - void* CAaBspNodePtr; + void* CAaBspNodePtr1; + void* CAaBspNodePtr2; uint16_t* nodeFaceIndices; int32_t bspNodesCount; int32_t nodeFaceIndicesCount; diff --git a/profile/3.3.5a-windows-386/symbol/detaildoodad/func.sym b/profile/3.3.5a-windows-386/symbol/detaildoodad/func.sym index 3ae8e6f..cc165cd 100644 --- a/profile/3.3.5a-windows-386/symbol/detaildoodad/func.sym +++ b/profile/3.3.5a-windows-386/symbol/detaildoodad/func.sym @@ -4,3 +4,8 @@ CDetailDoodad__Initialize 007B2760 f end=007B29AA ; CDetailDoodad::Initialize() CDetailDoodad__InitializeRenderState 007B2D30 f end=007B304E ; CDetailDoodad::InitializeRenderState() CDetailDoodad__UpdatePools 007B2A80 f end=007B2C92 CDetailDoodad__FreeInst 007B3960 f end=007B3987 +CDetailDoodad__CreateAlphaRampTexture 007B11B0 f end=007B1264 +CDetailDoodad__DestroyModels 007B1380 f end=007B13EA +CDetailDoodad__Destroy 007B3480 f end=007B3521 +CDetailDoodad__LoadModel 007B3530 f end=007B3560 +CDetailDoodad__AllocInst 007B3910 f end=007B3959 diff --git a/profile/3.3.5a-windows-386/symbol/detaildoodad/label.sym b/profile/3.3.5a-windows-386/symbol/detaildoodad/label.sym new file mode 100644 index 0000000..0e37750 --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/detaildoodad/label.sym @@ -0,0 +1,11 @@ +CDetailDoodad__s_pixelShader 00D1C488 l +CDetailDoodad__s_vertexShader 00D1C4A8 l +CDetailDoodad__s_bPoolDirty 00D1C4C0 l +CDetailDoodad__s_idxBufItems 00D1C4CC l +CDetailDoodad__s_vtxBufItems 00D1C4D0 l +CDetailDoodad__s_gxIndexPool 00D1C4D4 l +CDetailDoodad__s_gxVertexPool 00D1C4D8 l +CDetailDoodad__s_alphaRmapTexture 00D1C4E0 l +CDetailDoodad__s_instHeap 00D1C4E4 l +CDetailDoodad__s_bUseShaders 00D1C4F0 l +CDetailDoodad__s_doodadList 00D1C4FC l diff --git a/profile/3.3.5a-windows-386/symbol/detaildoodaddata/func.sym b/profile/3.3.5a-windows-386/symbol/detaildoodaddata/func.sym new file mode 100644 index 0000000..7e17fb6 --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/detaildoodaddata/func.sym @@ -0,0 +1,2 @@ +CDetailDoodadData__ModelLoadedCallback 007B1B10 f end=007B1B49 +CDetailDoodadData__Load 007B3050 f end=007B30C7 diff --git a/profile/3.3.5a-windows-386/symbol/detaildoodadinst/func.sym b/profile/3.3.5a-windows-386/symbol/detaildoodadinst/func.sym new file mode 100644 index 0000000..243300d --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/detaildoodadinst/func.sym @@ -0,0 +1,3 @@ +CDetailDoodadInst__AddDoodad 007B31E0 f end=007B3390 +CDetailDoodadInst__constructor 007B36E0 f end=007B3778 +CDetailDoodadInst__destructor 007B3780 f end=007B390E diff --git a/profile/3.3.5a-windows-386/symbol/m2lighting/func.sym b/profile/3.3.5a-windows-386/symbol/m2lighting/func.sym index 376bca9..3f6469e 100644 --- a/profile/3.3.5a-windows-386/symbol/m2lighting/func.sym +++ b/profile/3.3.5a-windows-386/symbol/m2lighting/func.sym @@ -9,3 +9,4 @@ CM2Lighting__CameraSpace 008350A0 f end=00835275 ; CM2Lighting::CameraSpace() CM2Lighting__SetupSunlight 00835280 f end=008353C3 ; CM2Lighting::SetupSunlight() CM2Lighting__SetupGxLights 008353D0 f end=008355CC ; CM2Lighting::SetupGxLights(C3Vector const*) CM2Lighting__GetSunLight 008355D0 f end=00835638 ; CM2Lighting::GetSunLight(C3Vector&, C3Vector&, C3Vector&, C3Vector&) +CM2Lighting__Initialize 007B0F10 f end=007B0FF8 diff --git a/profile/3.3.5a-windows-386/symbol/main.sym b/profile/3.3.5a-windows-386/symbol/main.sym index a404115..8e6b38e 100644 --- a/profile/3.3.5a-windows-386/symbol/main.sym +++ b/profile/3.3.5a-windows-386/symbol/main.sym @@ -4137,17 +4137,22 @@ World__Render 0077EFF0 f end=0077F00C World__Intersect 0077F310 f end=0077F319 World__ObjectTestConvexVolume 0077FFB0 f end=00780122 World__ObjectUpdate 00780240 f end=007804F5 +World__SetDetailDoodadDensity 00780710 f end=0078072F +World__SetDetailDoodadDist 00780730 f end=00780761 World__PrepareAreaOfInterest 00780860 f end=00780CCF World__Initialize 00780F50 f end=0078142F World__LoadMap 00781430 f end=007814F2 World__Preload 00781500 f end=007815B7 DayNight__Update 007816F0 f end=007819BC ; DayNight::Update(unsigned int, float, float) World__PrepareUpdate 007831A0 f end=007834FE +CWorldParam__GroundEffectDensityCallback 0078DAB0 f end=0078DB0B +CWorldParam__GroundEffectDistCallback 0078DB10 f end=0078DB8A AreaListRegisterLocation 0078F020 f end=0078F1EC CWorldScene__FrustumXform 0078FB00 f end=0078FB20 CWorldScene__FrustumSet 00791100 f end=00791120 CWorldScene__LocateViewer3 00795D40 f end=00795F7F CWorldScene__RenderMapObjDefGroups 007964A0 f end=007968C2 +CWorldScene__RenderDetailDoodads 007984A0 f end=00798794 CBarrier__Initialize 00799730 f end=007997C5 CWorldScene__Initialize 007997D0 f end=00799891 CWorldScene__Render 0079A870 f end=0079ADBB @@ -4159,6 +4164,7 @@ CMapObj__QueryLiquidSounds 0079BBF0 f end=0079BCC0 Particulate__InitMovement 0079BCC0 f end=0079BE44 Particulate__SetTexture 0079DFF0 f end=0079E080 Particulate__constructor 0079E100 f end=0079E191 +CMap__ClearChunkDetailDoodads 0079E730 f end=0079E774 CMap__Initialize 0079E7C0 f end=0079EFD4 CMap__Destroy 0079F320 f end=0079F646 CPassenger__Disable 0079F820 f end=0079F858 @@ -4216,11 +4222,22 @@ CMapObj__AllocOccluder 007B0250 f end=007B025B CMapObj__FreeMapObj 007B0260 f end=007B0304 CMapObj__constructor 007B0580 f end=007B05F9 ; CMapObj::CMapObj() CMapObj__Create 007B0CC0 f end=007B0D37 ; CMapObj::Create(char const*) +CM2Lighting__Initialize 007B0F10 f end=007B0FF8 +CDetailDoodad__CreateAlphaRampTexture 007B11B0 f end=007B1264 CDetailDoodad__UpdateAlphaRampTexture 007B1270 f end=007B129F ; CDetailDoodad::UpdateAlphaRampTexture(EGxTexCommand, unsigned int, unsigned int, unsigned int, unsigned int, void*, unsigned int&, void const*&) +CDetailDoodad__DestroyModels 007B1380 f end=007B13EA CDetailDoodad__InitializeShaderConstants 007B15D0 f end=007B1B05 ; CDetailDoodad::InitializeShaderConstants() +CDetailDoodadData__ModelLoadedCallback 007B1B10 f end=007B1B49 CDetailDoodad__Initialize 007B2760 f end=007B29AA ; CDetailDoodad::Initialize() CDetailDoodad__UpdatePools 007B2A80 f end=007B2C92 CDetailDoodad__InitializeRenderState 007B2D30 f end=007B304E ; CDetailDoodad::InitializeRenderState() +CDetailDoodadData__Load 007B3050 f end=007B30C7 +CDetailDoodadInst__AddDoodad 007B31E0 f end=007B3390 +CDetailDoodad__Destroy 007B3480 f end=007B3521 +CDetailDoodad__LoadModel 007B3530 f end=007B3560 +CDetailDoodadInst__constructor 007B36E0 f end=007B3778 +CDetailDoodadInst__destructor 007B3780 f end=007B390E +CDetailDoodad__AllocInst 007B3910 f end=007B3959 CDetailDoodad__FreeInst 007B3960 f end=007B3987 CMapObjDefGroup__constructor 007B3DE0 f end=007B3EFC CMapObjDef__constructor 007B4350 f end=007B44FE @@ -4320,6 +4337,7 @@ CChunkLiquid__Batch 007CF200 f end=007CF78D CChunkLiquid__RenderPrep 007CF9A0 f end=007CF9D2 CMapRenderChunk__RenderPrepBufs 007D02C0 f end=007D0419 CMapRenderChunk__UseStreamingBufs 007D0420 f end=007D049B +CMapChunk__LoadDetailDoodadModels 007D05F0 f end=007D069A CMapChunk__CreateDetailDoodads 007D3390 f end=007D3E01 CMapChunk__CreateDetailDoodadInst 007D3FE0 f end=007D4091 CMap__LocateViewerMapObjs 007D59B0 f end=007D5CC9 @@ -4765,6 +4783,8 @@ CShaderEffect__SetLocalLighting 00873CA0 f end=00873ED2 ; CShaderEffect::SetLoca CShadowCache__NotifyTexturesRecreate 00873FE0 f end=00873FEB ; CShadowCache::NotifyTexturesRecreate() CShadowCache__SetShadowMapGenericGlobal 008744E0 f end=008745CE ; CShadowCache::SetShadowMapGenericGlobal() CShadowCache__SetShadowMapGenericInterior 008745D0 f end=00874658 ; CShadowCache::SetShadowMapGenericInterior(int) +CShadowCache__SetShadowMapTerrain 00874660 f end=00874757 +CShadowCache__SetShadowMapDetailDoodad 00874760 f end=0087488D CShaderEffectManager__GetEffect 00876530 f end=00876543 ; CShaderEffectManager::GetEffect(char const*) CShaderEffectManager__CreateEffect 00876BE0 f end=00876C97 ; CShaderEffectManager::CreateEffect(char const*) CShaderEffectManager__ParseEffectCallback 00876CA0 f end=00876D8D ; CShaderEffectManager::ParseEffectCallback(CShaderEffectParser::ParsedEffect const&, void*) @@ -5491,11 +5511,13 @@ s_smallCull 00ADBEC0 l type="float[4][2]" s_distCull 00ADBEE0 l type="float[4][2]" s_farClip 00ADBF00 l type="float[5][2]" g_videoHardwareDB 00ADBF88 l type="WowClientDB_VideoHardwareRec" +World__groundEffectDistValue 00ADEEB8 l World__loadMax 00ADEEC4 l World__loadMin 00ADEEC8 l World__s_nearClip 00ADEED4 l CMap__bPreload 00ADFBC8 l CMap__s_mapChunkLiquidUpdateList 00ADFC3C l +CMap__mapChunkPointer 00AEEDAC l g_lightSkyboxDB 00AF4998 l type="WowClientDB_LightSkyboxRec" ; 0x15F g_lightIntBandDB 00AF49BC l type="WowClientDB_LightIntBandRec" ; 0x15D g_lightFloatBandDB 00AF49E0 l type="WowClientDB_LightFloatBandRec" ; 0x15C @@ -5847,6 +5869,9 @@ g_opt 00CAE958 l type="STORMOPTIONS" s_logsysteminit 00CB7220 l type="int32_t" s_defaultdir_critsect 00CB732C l type="CRITICAL_SECTION" s_critsect 00CB7358 l type="CRITICAL_SECTION[4]" +World__detailDoodadAlphaRef 00CD766C l +World__groundEffectDistValueSqr 00CD7674 l +World__detailDoodadDensity 00CD773C l World__s_pervFarClip 00CD7744 l World__s_farClip 00CD7748 l World__enables 00CD774C l @@ -5875,6 +5900,17 @@ CMap__bDungeon 00CF08F4 l CMapObjRenderGroupExterior_ptr 00CFBEC4 l CMapObjRenderGroupInterior_ptr 00CFBECC l CMapObj__sMinimapTag 00D1C418 l +CDetailDoodad__s_pixelShader 00D1C488 l +CDetailDoodad__s_vertexShader 00D1C4A8 l +CDetailDoodad__s_bPoolDirty 00D1C4C0 l +CDetailDoodad__s_idxBufItems 00D1C4CC l +CDetailDoodad__s_vtxBufItems 00D1C4D0 l +CDetailDoodad__s_gxIndexPool 00D1C4D4 l +CDetailDoodad__s_gxVertexPool 00D1C4D8 l +CDetailDoodad__s_alphaRmapTexture 00D1C4E0 l +CDetailDoodad__s_instHeap 00D1C4E4 l +CDetailDoodad__s_bUseShaders 00D1C4F0 l +CDetailDoodad__s_doodadList 00D1C4FC l s_cvShadowCull 00D25308 l type="CVar*" s_cvShadowScissor 00D25310 l type="CVar*" s_cvShadowInstancing 00D25314 l type="CVar*" @@ -5910,3 +5946,4 @@ s_cpuTicksPerSecond 00D415C8 l type="uint64_t" s_gotPowerProfFrequency 00D415D0 l type="int32_t" s_checkedPowerProfInfo 00D415D4 l type="int32_t" CShaderEffect__s_enableShaders 00D43020 l type="int32_t" +CShadowCache__s_shadowMode 00D43154 l diff --git a/profile/3.3.5a-windows-386/symbol/map/func.sym b/profile/3.3.5a-windows-386/symbol/map/func.sym index 62f8cc3..21a9c6c 100644 --- a/profile/3.3.5a-windows-386/symbol/map/func.sym +++ b/profile/3.3.5a-windows-386/symbol/map/func.sym @@ -49,3 +49,4 @@ CMap__LoadTerrainTexture 007D6980 f end=007D6A8F CMap__LoadArea 007D9A20 f end=007D9A6B CMap__PrepareArea 007D9A70 f end=007D9B0E CMap__ProcessChunkLiquidUpdateList 007B5420 f end=007B549A +CMap__ClearChunkDetailDoodads 0079E730 f end=0079E774 diff --git a/profile/3.3.5a-windows-386/symbol/map/label.sym b/profile/3.3.5a-windows-386/symbol/map/label.sym index fa9b34f..3a4e010 100644 --- a/profile/3.3.5a-windows-386/symbol/map/label.sym +++ b/profile/3.3.5a-windows-386/symbol/map/label.sym @@ -20,3 +20,4 @@ CMap__bPreload 00ADFBC8 l CMap__s_holeMask 00A3FAF0 l CMap__m_areaTable 00CE48D0 l CMap__s_mapChunkLiquidUpdateList 00ADFC3C l +CMap__mapChunkPointer 00AEEDAC l diff --git a/profile/3.3.5a-windows-386/symbol/mapchunk/func.sym b/profile/3.3.5a-windows-386/symbol/mapchunk/func.sym index 5cd79de..212283c 100644 --- a/profile/3.3.5a-windows-386/symbol/mapchunk/func.sym +++ b/profile/3.3.5a-windows-386/symbol/mapchunk/func.sym @@ -20,3 +20,4 @@ CMapChunk__CreateDetailDoodadInst 007D3FE0 f end=007D4091 CMapChunk__Intersect 007D8730 f end=007D883E CMapChunk__Intersect 007D8840 f end=007D8DF6 CMapChunk__Intersect 007D8E00 f end=007D91E5 +CMapChunk__LoadDetailDoodadModels 007D05F0 f end=007D069A diff --git a/profile/3.3.5a-windows-386/symbol/shadowcache/func.sym b/profile/3.3.5a-windows-386/symbol/shadowcache/func.sym index b5e215a..3ec1535 100644 --- a/profile/3.3.5a-windows-386/symbol/shadowcache/func.sym +++ b/profile/3.3.5a-windows-386/symbol/shadowcache/func.sym @@ -1,3 +1,5 @@ CShadowCache__NotifyTexturesRecreate 00873FE0 f end=00873FEB ; CShadowCache::NotifyTexturesRecreate() CShadowCache__SetShadowMapGenericGlobal 008744E0 f end=008745CE ; CShadowCache::SetShadowMapGenericGlobal() CShadowCache__SetShadowMapGenericInterior 008745D0 f end=00874658 ; CShadowCache::SetShadowMapGenericInterior(int) +CShadowCache__SetShadowMapTerrain 00874660 f end=00874757 +CShadowCache__SetShadowMapDetailDoodad 00874760 f end=0087488D diff --git a/profile/3.3.5a-windows-386/symbol/shadowcache/label.sym b/profile/3.3.5a-windows-386/symbol/shadowcache/label.sym new file mode 100644 index 0000000..9a0a9f6 --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/shadowcache/label.sym @@ -0,0 +1 @@ +CShadowCache__s_shadowMode 00D43154 l diff --git a/profile/3.3.5a-windows-386/symbol/world/func.sym b/profile/3.3.5a-windows-386/symbol/world/func.sym index 57c366f..ceb3148 100644 --- a/profile/3.3.5a-windows-386/symbol/world/func.sym +++ b/profile/3.3.5a-windows-386/symbol/world/func.sym @@ -9,3 +9,5 @@ World__LoadMap 00781430 f end=007814F2 World__Render 0077EFF0 f end=0077F00C World__ObjectTestConvexVolume 0077FFB0 f end=00780122 World__PrepareUpdate 007831A0 f end=007834FE +World__SetDetailDoodadDensity 00780710 f end=0078072F +World__SetDetailDoodadDist 00780730 f end=00780761 diff --git a/profile/3.3.5a-windows-386/symbol/world/label.sym b/profile/3.3.5a-windows-386/symbol/world/label.sym index 3019bdd..f180a48 100644 --- a/profile/3.3.5a-windows-386/symbol/world/label.sym +++ b/profile/3.3.5a-windows-386/symbol/world/label.sym @@ -16,3 +16,7 @@ World__objectAoi_t_z 00CD77B0 l World__loadMax 00ADEEC4 l World__loadMin 00ADEEC8 l World__enables 00CD774C l +World__groundEffectDistValue 00ADEEB8 l +World__groundEffectDistValueSqr 00CD7674 l +World__detailDoodadAlphaRef 00CD766C l +World__detailDoodadDensity 00CD773C l diff --git a/profile/3.3.5a-windows-386/symbol/worldparam/func.sym b/profile/3.3.5a-windows-386/symbol/worldparam/func.sym new file mode 100644 index 0000000..fe57817 --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/worldparam/func.sym @@ -0,0 +1,2 @@ +CWorldParam__GroundEffectDensityCallback 0078DAB0 f end=0078DB0B +CWorldParam__GroundEffectDistCallback 0078DB10 f end=0078DB8A diff --git a/profile/3.3.5a-windows-386/symbol/worldscene/func.sym b/profile/3.3.5a-windows-386/symbol/worldscene/func.sym index 56064c0..bebb3db 100644 --- a/profile/3.3.5a-windows-386/symbol/worldscene/func.sym +++ b/profile/3.3.5a-windows-386/symbol/worldscene/func.sym @@ -4,3 +4,4 @@ CWorldScene__FrustumSet 00791100 f end=00791120 CWorldScene__LocateViewer3 00795D40 f end=00795F7F CWorldScene__RenderMapObjDefGroups 007964A0 f end=007968C2 CWorldScene__Render 0079A870 f end=0079ADBB +CWorldScene__RenderDetailDoodads 007984A0 f end=00798794 diff --git a/profile/3.3.5a-windows-386/x64dbg/game.dd32 b/profile/3.3.5a-windows-386/x64dbg/game.dd32 index 3ec9a5b17068cab806c32528b4b4cceb52ca871d..c6a645a3d347066ffec8691af70a7a26c5d416b1 100644 GIT binary patch delta 29884 zcmY&=cVJXi_WyhL%}gfKZb+!fym^@b0g}MJFP8A^DNh<3J_JMw`Fdr)WHj$6PlbF_DpMg0$j-GCbHxr- zrc*H^vB4r`@SsK6WO0v_PQ{bzR+|(^q2Z}WC6{u6Wa7eGvI9rsV^ZP%=~ODAI&#n_ z6}NdNqop0O7NlOUrdw@AXOWesSEN(2rVOy49~z$Wl(H+HPANe(nV-dseUg%YcRG_& zBA|(13V%`WE=ef~yLFf|kWvm_nWf-S&gJ|9cqwvthEOaiUr21K32yJpd!(aW4)#4iEeGQ% zbn4v>es7!ComKXVCJL%du_wX*m|tzRx{Jo!I=| z0BP!IzL=Js_DqS$F=Gu0$nj$%yGi3LjIaMD9g*YlDSs_a%kgj=$hy9JyF^Z2e>eTb zQY6XWy-myI)K*)GoJx!bV|yhuuwH6YXIf6_>adJ6yCCCK`I zJs90@&#nbV%GdvT%oevvdNdR8;~nEp>cC0CqjJary68`>_SB#S`qQl+buZ^~7T$p_ z5xIM&rJSoUdawu}kh4cOf!z*Q0U)su_5t&FcX=vgJ#Gu=u}dG%&ck?W;T&{{$4B!S zKb_@(DqbpPirWk~xYk%g45ATW#4%fy$TV z7@`C*tAuBU++nbSu0&Xu!@U_`(#HW=ukSh|yLgxL`*w6t<N2S!B$;Gc6k-1JWX31h?h8r^rS)6Fg4xjnqu~eXciPgg+YKE|-m?N6|4BS~RSC zzg$i(21p|DMDiSws|N;Tqr}AS83`N(kJEAzk4cpg&`6&4vUyf~1&|v51?SXAE*i!_ zIP$Wg$9M65ntwOGBxPLlY(O^pmS%Z6pSYZTOVdg)7-3upu%}!Jj#vmXGC zB<@~0M>(v0PMf%#ha4EDM2{29b;yBl3ZM3-m2gUi2$RAK=P=0oEr778^DOkSO#DAj8Ihg#Y~4wv`%5%mdZ4LoCZ`T08mNhsI^2vMyE5Z4%IY0>DT#oZKu)?gc> z$#KTUS_+4xTrr+VrWHfgz{V1uF_p3AZb0!Iy4$fpK83yDD0ADU*U0MgE)nG7ulq;e2MQ*RE^*}omyrfH~tRaqa zH5k2(!E~lIGa)YK258YHfWi?7mM#_Say}mksKFWAy1CNr_}YUWkq9IN-M!LNgXaW9 z>&=6^8Qw*H*lj(QgFewPJDiMUYVg%z3}C$PIydchA0Tn)(=24^2*}crWdJ3^le(lk zlgY`2B><(edObO56hm-~n?bOopN?^}seehCR}bV%#&5W%L=C+r(9*mjN!@S{EmuP& zL(^(VR*&VJTXhle2nQpd6?Cl%+adf$kANC(UhBu-35NOoK)zQd{CrxCM8cc8R2ow= zk!8eo#2Sdi9=@cQy~Fw*Cr*_biRoD`zwQWdiEOU}ByKcyebi{k(|MJEB*NRej1{O= z$7cm;6;$uYDW>+#z%p`2e@U%*rlgzRh02LcA;zdNaBm=@xC-#qk*`+;RGf%zu5>wZ zP}GPfKLP!LbAk@RnzR~?ht_wQYs?TlvjC7(417z^EWkQZAJE0YVU+Xr!k8%R2KA;V zvkNmR5gY8SRAbn*QGR;UlXME6!vidVSaewD*}ZjMSe{m6v9LF{81T15_f(*nVnPa* zFF^4bg2${J#203gYe1)XD7K4-LHM(Y=U9rFS@G!2IO%GftY9FfLL@u`o5X>Nw3>(q z84Kf?L6!^w#0WAQD%75LLlyJ=TD6$-*)M%(la z=6esRt!_|L;jqC-2kY3i@Vc~`io~&TlDhCZV3ykL4y2;hhs*_o`3hn?&%AapUzFKV zhI7~ZyR@o=nA)bjze88W0+kVt!NMx0mc9^QVHmPX>jpo%g<%!BT@Y}p5;NF{=Cwem zcsAMzm@37zcs4dtxitzvGG0qzUfmi6rIbq^1SF+{Qj)T6muHHq=t*J@9K!d=lnpLX z)wc)1?!sK!jeVWluH;W;VOWM8+?>?nms?Q>Opy2KR{;B z2b~6_0EjU;NC%{V)|k)HPQ@Ur>6p*)Vft@*`T9g#)?C9gEz)62sN;1t&O|2~m{q^& zdkiwvVt@Ah9Vbo~`xq#G2fp^!D89~kADm&NxUCzyY(i#lo zKONu5s)K1Qq6bIErGSP8`ZF6_iw09{w`!?pvKE6?pOe;Ns)|nz#8R7J=xcF9OlxsD z*)5Wo-5MXgETF}AyyC~-(aStjw73E>myRpC!Z<9WlniA9p}MuW7Rs{j4e*uF%^J`W zwbj|v$tFrb_G^hC4hWD!1AP+qAV8rIV?;bN2#jJtR9LU<=rdulViF+X6r7?iyWj0# zNG2jdSS$f8lV}~_@oID5DbW%?6wv+lZZFB@1P!%BH2%g}%N52f&VZKqT!hCbN@xJ@ z#7F0$S3>R61vO;_q<9ErucWG_0eMVGNO|*&}0eSk>e>! zte=wBlEL5xi=VEa0-RtYqOEjGACRCt8O$eeQx%!*!V1VRExC0BI)ydn^)f5nx&LFd zV_CZ>nLG}1Cu0dvG8r4QvRg;HoUr7zWCD^H$2W7L5M)cjtkaUoNVjvuKI6m{fM`ZO z@zXaZ0O{lpP8%G?)Tt@ww0J6hZ(2*qY%%zeKP$i|_3G;YDZwrfoSC9j92lmQBoje+ z#&?DP3xEn^#!s78WUzYbRTU5|%50xkRR%cl8Uw_cMTTdrp8DJ4ImZbtzBaq~aTuaA zlIUV2*(@`l^|jR8C236#LQP=I+$Dg>cgzJOlnnOi<^`u$)_Mfw=!rsD5AyMZr$Uo6 z-{->B3Nv1$Z|q~Eru4)pH8RgpOs}|uPQf!wJa}3$iYbXb_NTBNPSyND`iDkums5bkS4nG~(G) zu7?I#(t0Qu?PkVbERJ$L3@=p=CxcUZc5^zk-HCKsj|C05d+_K^q|HUc_;UYrIjzSd zNoamJZ_{N=Cqv8YGFuV$-{Gm|1H<^f86c{wS~en}&btr2)D;&4qHAEgZawb26!WWk z);drxO|w1^^kWc%@xc+R$IHA~U5hGAqTUP*jb{yjBm_)$5++HsTN_Js&3_Bs+@~m@ zqlJ0&o6M>JBztcxV8qXQ`iRh!7@=DltfhINkP?JV+jXd6;*`CVHo`JoQVE_}*-M^s zBLYQkL{gz{69@J}StNCr7BC_oPV=)j(2s7{%@`L=8DNos5zV^=;}CvG8!6pbTPkJP z^spOTKPzcNmBa9gB;#kqoD2=-siDQg>`dSp!?ZiDXOM_u%_7CD4XBwCL;J^HSa=~| zWR;Ggk+FdN^C;pAK03d*8v~EV0C8TFg&c*2YG`{70TR21W>_aC*$mC{7(j#4*-n>u z+y#cLGiyyt)I5`AZ1A~ryAP`zkh6Tx7(FYqAMOcmlH?EltNLeB)P0_%_#>pE1l9jAaaPkKC9L(JMt5F6AG@|)eUhLhK|M>0E$N)Ili;K-oL*RpnOsy zh2Fp4Ju>?o2ql|VWJiIG3d2wR1Ea#>__6;Rg@_{qC6Aw5t!yxZOjVm7JG zFrx1ncovo){a}@4lM~Qr_=~I04gR`{L88VFXZsb#=SIvM!+dX2ce#0Am>*QV=hy5z zAmohR27D4)go(}QZJw#D0VxT?5-5u7!_X@~b@ijR8A3W046|??d{-E8JtKT+X8$NR zhNR>*L`o?w#jHQ#B#!Eh{iDIlH{$?^w0fhv23-(64d^Mbi}H_?Q4tL)hL-Z5VCPWd{!D9(0aeADiRXeiDOf)og$WzLN8zDzf7u^!2nuft@? zNc6UDOc4@>HVdV~2ADb!O8KU^%cCLgDCS8equmw?&W~gF$}A|sXqwu+5_Cofi2M{n zzKC#2c=i;g5HJE{JYe-jB0RO6-sWo$~K?gJ80HxOX5VBf8MVP%g*5+gT?) z%A9?`G1It^0-r9R#73U!o(fyPZ6Xj=5`Q`x6?b7E?0xnz%1?eq21t5WhQ zruCQXDzF$G_RZ{#a?Q2fWOO--pJl`K_*Q&@Qv5796D`CA4OoHD#dxGH#AgwQh_K+h zV)%NwYeEVnEk}=y%ud7j`|wmutOnosXZOTTFBn%+pGX!9bFvb{?L1B-wYIuA+s~Wp zDMTatyyNWWxgF5?AvK(2aSHXVrx-QW@Ua|t+MXY~N#JsXuVWEaYfNmp?1;!^`jh4_!v8M%RMyf}rZ_b?-iq5NW@+C^qZiuVt0a;3w_C4Jo$syWIz%EQ5A zK47xe9a&%k8@N54;wO-;ADPzSd_}>Yjp=AO0)wnLjUQxUsKcBvoFC!d-a^IQJmXI_??%}5wiF{=IYUW`KaIa z;`B$tI?Sm^G^(9C7k(*^LdB<}@h~DqQXm>@(_Q7!$f<7{qLFAEc11Bg^^N)2Xui@% zK4Y*{lKEWZGcaq!c3u{uu{g6ivXU=!>^Q?9vV4ihTvW*q7+icUTQ;h~(~U&6B#W0u zyHJU02>$}6FfsS6`9LKJ~@V;IsVYGEREr<7slcBMs~}(dHi+~f@ z8=`t}MZwt)NIeuqe?DSv8OK-DUQz`V^d&>Or;{Qz#qP4Ge(K?_@uC#}el)sYcciQB zqxK*hP%*9p0V4lW88sw>d{%<#;VKFWd2aa&m>=eVOCf3 z{+>s+XLpe4q9fbEWODd{Z_U-!{3?Ezd8(QZS{*gdR7TCx@%+%ClXf;l<4Bh>V_bp% zFcl5R`an3stW;&IjTS1%1)xt@+h<-no*(Z-R574Lk?AZ_%(uq#{XJ|y<4SbQIK=Oi z^(H@o?=`VJj?g4xBZ(k0WnBfHvbgfu#jIaqKq`CWX9zCGwl!JE$gb=r6G2<=We{cU zZ`oa5YMwuVAD9U!YWTlW_63Xb#ucOs;)BTV?d3+GbFn_*v{$0c>^5gGX(87o~f*{h9L5&F^d{~A;w)Vm-MfU zs|l8id%1*`$2AE0xE564Gb2UGd{=Gl`ITnzM80PZi`wnCQ*-1*KIGp00Qf&{K&eYc zt9ju>zQX7F3JV&k;F-Z$#FugoZ{ntz=>+oih~bzoOynoK=P~ag8}M;J7WJFNpVxok z&*^9)tR9fNWhKkxF&;<2CG2fSz-8Vs^Oi|`kRZhP(jan5y1xNYvxhH9C*rXv z6V3@VJR=fu1qKJG9?yOb*wi&c2*fpeu>12|PGlz%aXq}-jqtB`w5KeQD1H_sNCv+P zcaL#q5JQ^h2qc3it|+d=8${fTbT&>`Sn5T>v!_H3ZX98KLO{A)j&-N?;0VuUO(e;( z;O_VucyG9oOoHv|d8<=8{Ly2L|O8f=I*_MM6&bLIoJw5a6 z(RTiHEzmZ6VI5D2sxm7$!Cy#@EVUT&d5ZuEvxE_1<1j5%8RoPUIW?uYyZ*%GT-S~n z%3kVLF>c2j$UDhVmV;rxF=m#q)RY{Hpu_@Qv5RG@Z2KjR$>OEsyFbz8+}esx2^Ljg zAI%acEO#R(BERLaVKvuyN>sUWTMi;F3F9eA=&FBV2Zx^aBA6~G5U%$)VbG~^isiHE z;B|;V%WH1{Kn)`I(M3#`7xoLxO6a?QtWN2PYHNjn+C^h^s=+;S*Rig zs;XK9!Bk1TVZ6ISMIBE-)tdXB?c&wI5Sq8keZ{GAB6F@H^aUdX_SkQEAcn>e&=ML; zVSN1{#4Z|f8-k#EHg9*67kLo`|5Q{VF-r7A^sfxLfhWNOdT5N>FX7pgr}Ox)WM9R|l6Jy3m9Uj&dbH-el&JkgyO0PTy6b-Mzp(UDUk;mK2= zX2wI5rHzDv6^m&{4lOiFVHP3NaFZ8PqXE+CF-Rmt1;erKK%x2TbmVag7gxq&ie2yK zX{U4e)9F}DHSP*@=`d(D$Up|U;mdA_I~QIy%5Z|i>!j?PNp{y{v_s?iF?GMeQYhf; zF_%+oT5;AsfCtt!ktV;oDLWCE&oRvWOPcTD8e&A&ou z_P3cIrTHj{YG&RHzGsHp;+~4P@eP)I#(`V?FTI0>~e{=;JL5tf}}QIb`DbfEJ$OFai2ZzE*wW0Ze*ql?5@FE<%pHs zokx!okzQEt1{DmocVR;;9t_5hSp9TT8(?T?6VmMGiEY`*ckzy*_`LfVC^WC~+EVYEGZY_ZjQBZYUdv z5K#9_ZU>Uq@n9l`7-b+H^o|DZXkuLAr~hQ9VViOIQiga^9*{Eco5_27qWlMKxp(?p z4_LT=o5=?Rgo2xE zuuFhIt%X7%Xk8>9T<)59CNGtI`d@ryw1YN+85C+5=yZ=VC3+nY_14Y zVmgwF#+dsZNq8jJ$XFbt55z(hcXiM2ER1D&A{HO+>z>TzsQC%=$JAj?zZ8ROk3EW^ zuuamY-kJT&eeDUrUR-u=t@xy!7?uc5 zvik#Zqo)V96w=(VXtW;1={T}-sIT%OS0O3;cV@Yrxi!lBWASN9Fu7#Nxe#gaUzkUk z7hd?>Ii%ko%Ru4oL(QVkIDty!qYaP^fWrtaQhFD{;*Dmjl@wT*&YD^5U35*N8$*}l zi+To$eQBOo&kxBwwTHD*r)Qq~ZdC6u2pQYGt{YaDq{K%^fmr;)KRozq1toE5MGeB% zEvEAyap%Vt)a4*6fea_=LyGD4IuH0$F|r^7nic^gWA-4%jw%>5poW@2Q?)dYdZQ}j zvKn2~C8yRfKkn#J&;luZWX>ft7@1YLrqHc7buq(HGc*gyld=Wuv(?laJrFb6-^QNx zDU-WD15V$!r>#hPBEy8 z_h46{3dxyBs0c0l>G1WSOd^@WiA<(E2eW;cB1pof1040emgM;v?U4IIe~g}ivkJR^%cZXLROHx z#^0>DDWCk!T^>uI7#S}RzsydDW9@?Kl65^BFn3+d(9jSE4rnnh#*ocq)s{Z^dkoVf zB}0p0k%wT{xeJXi{{YO0U1y&CDCfuqAZEmo3@)Z48$1;;R6a_G5BSf9Nw1lm?GWCI zaHX;S8-}D2pFIe59_zo!9y1&}2MXX4UoP^q$>TSbdfjCSW657wOYROSW6KH^)G#Lu z1@aMgvulz$YA!#76y9Mjnaf`zfBa?^C1zp0GbEiv!5kAt;oxQXyktaM%H>CjcF=i_ zbA`u9AEuMATUcH(iY=QGOU9BAw#is33Ja8JA8cA#EL9Oj#@h3vS$7_9l#aZ)`^#O9 zx$iV!h{Dp{U`S6{GFAqOn~bR_IQ;ZHKAa(+W&46~?3`-5SK?G8W7@dsIBxhomXjZQ zVJ8cA1X#n9AKQ7Wm6d?UG!&5eDGCxX=cAAkfFLZ(FhV}cInPlU(+pPjHP7KGj3K^^ z4*KAAXAyIv{s@4WdHp=zmC1qp)w|;~jMAuq#mf{+rQh*9qfJalEFz|NyKbxt@}Yq0 zh%?e1WppZ@afl>i_XB5F@EVAg8S;s)YC!lGh4CdX1B-a5V@LNVyPT+kNyas^=zQLt zWRf?j#2)BZ97rmYcCuyl*nT@=c&;vm#g2!*?IHBiQ^S45Y5cGX0<+lVi@ z$IH)w=0*_4D{60%UiTCl)rT<3h#aWE+(v%FQzj>$$Ii&u^zKS(_=^CdpbEg`7hUI( zi4G>2KA)e+H=EV-5yVzn%w_ZWp`)f( zxKTshYkUs81r@GR2});BQ=2S)md&K%)RfQ@C>zByGIx?1tjX>pyiiB}-R9Bxyq_S_ z_}}?_i4}D%@eyY60$$2%)4M}P5)Qn3M9fSt;0NX(<%F)dRX{`fKhJ>}_PPc9VASFv zA8+noz}J(f_L%mCyl74Aw64oF%kY^0+up9ZM2h%fc}&~C(>!k>e?{JoSI%0ch!8mr zK4E^lkPqbD+W2Sao?OYoWF=)&VOjWx`;0_-(SR2 z_9xF2WZuZTQ!jM(5kf;7cESMCYI6$>NvIw#9rHbKJX_ zzubG^1%W=u<=9HdvWZPCirn-&jAiX!fzIG^%&|*&A8(qAmhc{re2m+;fcjxWtI zjr`K0+ic!ko6uC<*e)wgzu2YJ*k=U#1E2FhQe{5Z$Zsg3U#u7CizJ7h&ykuLa$|G5 zKo`xm(0QEKT)dRuka=LD-Z4&Y*JsEbh1Nhg^y^-M?%+Hd0G`m;q}R>N2k@6y1X{;= zq`DoPU6SY6y}}MYQ>S-S%N_Es9FgS5ZC+a)cPAS$qouLAV?ho^Rciu0&3UHHYHn&7 z(-VNDUkP+Nm-9Q{P{(@Kw8)y-x{SZ7C=d?!Tqw|KoQK>_rZ={CwBJpn=%!AA)|+`v z{Ax1fbMx9JzLwnfx%p`m;;>6TH^a;M=@NbIh(L4sKD5%#L;YVXRM1%*p{w@^bT`*8 zV&1i!znb*;{jnj<{9?W*J$$o;%3KdYq77}j+@Wu<+RUvj{4i_(;})80zT3i&$_?nz zy{=Nrbm6gnt^7dVw)G1Oy~1WzU%+qSe>cCpfIp8s`-fTC#+UJ@%%yGo3i89#<`-@J zm3`~J6R5)V$SHHthe~N69=hp&0&T<&Ufj+PtNa(2OBWGKWjv&;%kj3P+vl`3cEouL z-PYUNKi&R&9xW+HF?2}LrgHcSrzRZr! zTH-TaG-r131$nbkXEt#**Mk~vFF9aIo1Go}EdJidUhCjbfk00_F3>q#j^(2fMd7=W&6?=JPlwZOHYK{pJVj_(A*&<{#_$_sK^0V;@|_2jA-XJ73k*(yotfYN}~z z>8NdKYI3^FK66PMxs^AsolB+@yYSfG=aTscOBs{U;yCZf=Dp2t~Akv(Tsd;WAV3vRny46k-g*t9IW43AX&7~-bi$)gkCFvP$dedj-+iOTcMxE(iNTkp!uZzMd zPPm7s4-*RwO_fdwb6VP(v>9@nyu6`dVp~gRvv#8)JVxkY5oL0kI?0E)m@UxQUK_Ka z-8o6Tg5gpF4*t}eu4zG(tcZu&d&ecdTa}%wPSuQP{kE1WMgPHt;!)Z4aLa&f(DhE>cxz|r$K2R+@(n|mHdI(fH+m*gHL zVoOzKtURv0bwZv4m$lw_#V5?-==&W6jcYIWk@@6|ExS-d!^}>-ZFNoK1)YsrT}x-_ z3Am3+;$EBg6aj@g8r9Awpxn?fxw)|edNB4lhkIN}eLhztJk8MqTs{@oiDW02bAYp4 zXt?_lNpZg~=AO@G^6Msj;p?2|3ZxM27l9sqD&HPR>1RgyBKX?VPc&35>1v z4+UQ(U}YAEq)&a%*MR4S273|857=cc;8#vD(aHX<8QEgUE!Tv zaTMED=Cr(bo@WkEXYG+JE3ITm&UX_tY#(bH7cc2pF1OZycPnZg)>uXBht?dKvuys{ z{S3zl)7MME+wR%$e}}u-YL(+xb&R#+{?X?>eAard=j20QyLWML_CBsAoE|3|6gp9)#K}i+I7P zy{V8IVqV++p63s=tlYV-E&pwZ%dM^}-=xV)aeT1|0 zBpwf;Hy4W5I?ke4=o1zTy))lunaf%3=jgU22({}4%S7v5&N2u7RL57@4^h7Md#!Ug zA%|A7&9Hz&4Ki>Gw!KRhT?y$c>w~L(mc3jHpxEQ*EgbFtnvd3UZppA`e3n{{9_kC$ zFdjeSv($6?Y+dbWX`9DQpV89R(QzAI^xNmNEaK9W+s8Kj?L`X!nSTrs=>pO-U?iRt z25w<5nyTC6m3f^&)A;2D@lC8Xt+BZg>@l-5zb7`pNNNj(A;iNA3P+nQs2~ll73p6& z4|Uw-BRe=!noIwHe=8e9B+;5n$n+jHvbscn&WeiBkqboYEUq@o;%-h@km2b9j-yL_ zUh4vmrhBjg)QqF_b)eCrBC_1nsp%K@2XJ{nwC?7{O=#0~7Y9Yl(aCfmtu3%i%E6S+ z3d+7yhOkO-c2Duzs%haYOV9ha2cqr04}A7-3oQG%En}Nnm&mp9^46h02*o|-IiscJYMztA?>Kyp z`JC-)p48>j7cb5bRLD-v_t_1OT*=d|l*b*YV9YHHzG*U6YG@d%X}=Y_MP7>hbDZd0 z%?lR6Gnb?P{od!8%Uz$DhN%ThUrHr<=+ zvo~WI-g}Wml@Y8x9Km~M?(Fr+3G8SD137?T$o2{8zc_l-u@>d*1T()|Y?y&Xf&_x7hAw_P%Rs1eClKIdMJK25QMhOiA{kf)DX;l@4UDIvdc zQq>F*`RHKBf5jY_sq1rxR_i}5L4q!1{KWgyjE`q=cA5#7i{$<;zUGTvli(=^?>XhO z)^g-OyrqxbGY=WI8{DF84sSi5gS_YHB6~3*e9pog&m1VrQlITXj?RN*y1JiVm?6+# zi9mlV>EDn&LASLa-;Id%G~S={qd?E_IrJHa&o+~%_wf!oIw)prM7WFD;Lr~>jrD#k zf70f+?h;BG8uA{R&W_PLR8lWrE9E@YAC@}|uYvum*uMW7=+&}Jpa-o$IdoyE=6G= z&oP@DI(M$|1^R1MJ~GRZ#&G>5$ic|XQIR|^&`GdYdBJbl%#*28H%vB+EMpuHKp)XB zfGdvlS~$5`Yg9ig!z8~yV@|n}NSUw3i8&8)B!}NPTW5v>qxJ@C$0k1PF?SFn8f*ciO|T=ATQ9XCz#KzBigmnX{iK}s=ADv!(|^sOS78^( zAkRJszrI8J3zLLnS=MCRF&0KquN(M3SmKU1YxVY)&Nfw_ z(V1ym{7C=^YsYlap>yO9=R&sp+}qLLTO)#7E1~9`FA9=6Iw)at>33FK;&@zw3@D(f z&wbh7zbm3+Ay3!(S?Sqphkd#8xM}0$4%PLlq+U}Y<-+@G^i79t-wIZ_Ymw-l?*ny) zjq7a5-~vzZmr;IF&k3dU%~|bwT?gdN^2X-H*lT)OG2`D!OqkzSLR$tQ+!|bglcI9u zE5WXF?voVe)6=*4Trp~21Z~-$N4vxAcT|rfUYqA2hkH#=BP+Is7d9m514Ash!_?5v z@7mPc^ALn;NoKB?b6amBm(U-26Wm`?B6YYew3j2h@;tkt#65ljfwPKuU_sn%@mWuE z8^dvQ#3pG=PD)HYcjnqr48LQr4~7ce=LZsrEAPyj$@_}n^SbEXKX7sd%U+(k zN7?YUQ1aWZbtWff^p0M6o(~TofquWwQQ;_=&^R>H!nQzPHT_-uUjT_mD||%dEIvM~ zPPr|f_k=(q`nspTWdUcoi1%Pi9-k@-{rESb5<5Ed=K40dx&6By_?kpg4O%4IQJ#Du zkP%uyZW3Xc9g39_ougX@Ff23P`E0E4h|7kpISMKG?da0I*-xC&(%#Xu&yq`(S0wU0 zM<$GNm*EtxqvfOrZ|MwszCi1Z@POP_-UItL{6a~w?Mgx$`JPhjPGKP3I~pIFJim`$ zxFwfv&SQ-i#K92McFK?R(+6NyT-TftZP!rhl7LI<=#@Tp?X_nvq8b+ZD@yWerle_s zJy%Kv!ag!&lF(j6Up>J|n)8U1^X|}bOa|Yx$OA!_^3=nL;fZu9=C#mIxBKiXC&8Yz z();;haUjZ?mQWAo>XA39=`h7b_>Mss80GKw8-~F zw7*Okz8RV)3K(4}Zprqk)7#shZUwQFz7s{;d~PJXQaW!ez5&;d#*q>WT<_cW z2v1>|?dUXds0c65x^myYv!kn)$j!}q)40`**aLBl`P{W|v+Z8dwwxn>;iq@V9i49> zHFiy~{2#r~7q=~|ZzM<;Z@AZEyY{F@Wy z<$8T1`=>5@wiEwjNVr`QN!9kM>3A{mU$s>&O)YIN<+vY*F-5CI_d>3ny{Xj~3)>kD zPk%1jWG-E|q-CX(a0rm!k}o3iMc38{xUV#=R-uQyrj=g`!Fci!}})8YD1OA2lZ^Pa^B!!CI~by#|!yL zj$A-5pATI1ReiwG^^WS-gyKPq?BtD@qzx>miZsiCT2a{GY4)30r)4AZ!P z2poD&T>5!4Br`hv<90wRIz`L*9GJejUWQ51F{`<>Q9%ubcE!!2doJu81R!<|K>Owd zYY(fHpDRUc_%L(92IB4e=@V?~F}H|rsEe^pjVm%Sv{$O;jT?wR_v2!(yMZI;CCn!` zkO7&VD&BorEm{DpT36EEa+!lbr~c&xD$TVU2Z>;N=qKDuKsQt^mI6&6r*6EWw^yQ-owRVauCOd6n)9Thq z12N#X2Sm#S{KIvS(_=e3T59Fy#r40?wKhT0U)&*D6s`&?tNr(T((nXp-~JtI7&Cqn zA)3j)V{|@_^V>VbocUY}UQd%(Jq+1&|70;|E=SToWpsJ5-rO`zN=nej*yCq!{4#|*kzbB99oWShr%6eZs{0@Q`Fws)~2g# zzBKQ;fkeIh%N+VdLks)$C$I9?vm-sO(=gy#0_0~rnP3{O{6&EUoOH0 zu^sK8Jumd&N<%n#af#Qun0uZ1EtBN-CDY+_?#&5=!u<}2R&4ZJWy2=4ov*U4#^n|- zLPVBcd|-kcx)ylj!cnBa3;q|@Q@4Ys>!0#j(U>`l9^a2$z=fk%5j>mC*)5`|YU90I(77I%H8i|_ zw^{WUGAzHQolP8%{mOZ(CLn~m;5GB|zmUNrdj7?I36bLB29Yk~cotr%Q`;I_JJu2G z@3n_SC^4IJP-rJ<~ooO+n6A50c~LO*a3+&B9ED$x$BICC>2 zv8*~Q-o7gkdwUR(R_O{6{ML*9ag7g0pX{|y8^1ztR#9Y)Ye)}SyuuQaKXJ!}EcC2M zt>#xZlMC{ats=s&LMfpix!~u2VJ^9aOeF8!Za#DiiIYhk<~O&HN;2lt-0Z1>ib9yE!UZ|R?-1`nXr?<1UH=)~ zaTlYonnF@Uc;l*C<}m89Q}nCWELcVwAO``B=YAniSUiV#`Z#>?hdJ_joW5FbzHlpv zXQ1ZRS|m#WZ(YPquWeM6vYnVv*WT#mrB8D_Ie3NVliDogQHK}dd)_?|8SgFqM0lIz z!G8thwn@btZZm%}PqJJqJX41-8R9LC9gQpUc{~1hqu(u(AalZRf7?60NnZ{z2A9fq zf?;Qb0ua|^))cxMkzwPN%OxW5kZskFZJigkc@8;nHR!!OwkX%YoP;GC=ULdegxyjK z9-@6(*sdALuSx0J>dsc2WVxfo>M7u*R1fPQdL!Y4QG{LuIe6L>*{?9|3R)`yTVvxG ziKYlgFE{^d63-IlJc?B5O}5*Z39#>3LW$II_SXqLR)Y`1WuuF171P*+IfzkB9WGkHuQNESxo;C0oO$F@5Gx!pw&hAT zX#YC>g3f;)vS&dOYS#=azK9H5dgn-iYOqc2_!6%&p{gh9fpJL#4+ zwm>v|hf!>C@}FYSY&Iq9fQ;E>esdcsbG-5O!ijpza{c2UOmQ>&dnt5{As=qIV@&reQzGyOnL_^!^!ANe5v4ddF!ry9%v-xHMY`9bWodc z=)*~4GL>vM3Up-;eE8gN&4IU*{`BUZqU|tGclWX5O4K(GnsaU^J~CG`SKdzIMUzg6 z@H++kw>Z=4FZ|KHiBN8Y&kcqD(Rb#{x09g-SKJ0s8lJYX*m*aBpU%-U8%+Bhq^wu* zF42Y)cBVo=5!z(I8Hj}3$IOX$kn!ZRznUBFAjQ09?!ALlkX1*_PwpTiN+a)zwnsRY zHW`RSulX$TF0&pu|N~N{t?mI~#nSZf)_)b!0eeX0){A&K^PBJ$0MT<{>N!idR&GHr3t^#-9 zuF`8lX`oJj4rU>1y=NIfwo~%lAMPt`QtUTcOjZs-{tTzOwrV}=k$PQ_EbzSCj`W-* zdh=fTG2CSeeU}vS>l) zWFZiVw?@PqjTeR;7FOoJK3i_;)Z6P@;0q}4KZl7D;Y*y7rP=)9F4AlK^_O8kaWRUw zN|t5Z7s$}GBLM`>2KzzXdPlz2xCvE79IgIC%o)YohB-FYEo*GXNj8*G9Lgj=9V6x_ z=F}~uU*8~1!d`YMGH#qN=V`8kg@tNbR$ldixpE7+h^)vnf7*hQt6{ek=T0N^Gmi5h zf^(zUe=8YIF8Ic5*h>844xs)ysu{Nq@d{~9YM=cP7(S|PbBp8~PHMReCfuyOKK80< z3ulq^y+Ki!!7c1;*W0w7?SW|Yhdt)=Tgi|D`<>#(hNe!r0TQ5d1{a9x*O_OwlKwpo zoBt@F9pu@%!`3G3$JyGg_N z6SzwgmxF%0*9mW841uHD@~ntcZMl`uR~m56@z&z-3JBm?c<9I+dLSg0rrXyqutu05h?=N+FXJ=o} z?Rmvnag zN5y||ga5f~BQLhpH?b9+r%(qR|FYHR_~Ic-NAZEUe(yoCB;8JiS`M9b!|yYCZ80yu z7bkPikDisknEUS~Gf{S9*+E8;0Y95nJ4l4s-ZEG1z+O9_GVk0$hLNV@=Ic91h(BZg zv4iv>SA1gj-ASTk@$=^Noup3=ecLMveV;Iw??j~VG-+9hEW$*js@odXY(zf>k8dw|@>GsBBDB_I9v}IgOc%;dFCxW)W_#Aig_BS|t>JHBmjv7ue*C5uB z{pj$aHk4@0TqMG36UbM6XgJ3bh%5i&{gw-Jp&Y8<#I>u~My1S(jxnLcy^QNWR=eeM z8d}P#J6e3=mb%Gdq&!*{H~jM_Y<41{e`523$Sx%MXK?-~PT?&Z+=zDS)sKh`(^rh0 zG5OAf9ruUu-;Qn<3K3zmT)J3j>tW8^MG7hoHy%PR$!J{M*(P^1w!Axx6f6p~t-fSD z$8H=YlO5b3a{=vscYQABE*wtH7{$X`PorQcriCf zuoMt{`wJYBwTJn^TNvx zV`xEK|9sA}Z?4&TA1Rxdm+wtam@v0tuZfd~|19o*_OA9#H-gR7qnG&X{RQ&gFJjAe zKjD2+`_S(FgP+*e*$jEMxUm_yv@|!|=INRTS(;yUE@^B&jrW<_r z1vofx5gTi7g#=UO92AYf(x`7)rq6>AYrCAe{dE|yLO&^aT!>^ZWRN$f>#IN)wG)Lf ztFM2A zw!NPpykR_J$QhHT@8W1#KheI6v%Mv>AQ08mq>o*Tz_VO=p=gKwbq%s5vRWt%raMZJ zDv^J6i}w4u>1_7c+B9w!g&*Yyu`Qb>XFA#%SFN$2jOkm^zL&Eu7Ahea2dzeUYQ*X6 zXR}eLg|X6q^b%R21gHjrH8sLcWeJ)F(B*}J2$=gvGG~CN<9#fa{{3(yd^s+Sx-E5f zjzv;9S!7mfC06~H6@jq{BeEULb@!9LWYCM|*853MZRnNEmvPa5*pUHAR6D)Y;Bu@e z9lO|yoA(#(6=^eTZSN% zKLUwsOmKOY3e)wK7jAX;L^yw7F^f@JTi{S5`LP(89dWdX^aV$IvjEtQ^&%|#jVuh; zhH{bED3WIXubD0kqbWDux6O`=j>lN?YI*Cs2y*S|BMS8#nR+*Q#4c4mm&9Hg11m(R z4?*L}-K{hl<#GEckyyf)SmtrV8kf%SZd5gnTRE=yD8`7SSNP7N!ozJs)yNioY~t$xxAPQQwQm7eepL!7UUS@v!BoPtRsrM1-bmWpf+^l&~dAu+0EX^It0GL;+D6a#lrZ-?t#s6l0yoVI_>3jg6gbPA<3uWX>zh&%tQrypV zO_}N5O9mI^mq|JM;PA}OVSVCyZ!a=>qft&XV~9CpFK#(Lc$ay>URa*HCY#sqCBrjA zRiE=AC}Y7Qg}=E*bnbNqha*n_eOD}tpJC9>--52%;g&uT=m5d_ z@vqo7K@Q!_RRl0tvYDMYeYm>UB=pz<_Z8~dOgf2oTFoq?++*UCj2Q>g>C(-lH)(%D z_iQFH#Icy3+e{L=d}uO+P34!50w$!e$zxJ~T_Z29Y@#t+kUtFh8|}XZ({|HBI(Z9; z%iFL-dla1eQ7)cf*7S2r$~>4yFuJ6y!5f6}MG(4&fum|xr8#`w^9|Y~m~xzl^avX; z45~U9>?K+B;1&{_y2&1Ab9do%%XraID2si0o^%c(b`IJqm)qGq3V?U-LIXo&#Ds`& ztPqw%yL^UVAbyN2?&o-+r$D~pbbC4R?H}}_1EWTPvh0v}7hqY|Y<2f(Cefe{$BN#MLc6O#X8t0CiH*Z#)dC*T;vfiIX7J*_X6eI9IfI4dqv2&ZX6WKo zp?pV6%@&easWk#TQ=QV2om`7~SZUG7L1Ez-@~ZgmfYZeo!YSIEMbJlovEgF7A4 ztPd&S7PAmSDJ&|O#EZEL^&w-pY-AmyH8|SC$#Up3Zf)T8q2Je?9D=htJtUrt=W7DH zjS2$Wkt z)QDG7epmMhP7YC@Zx+7^#dfN3ww`>!1+M-&L4k4qN)U6wnRrAT9ubDf z#-d`UAu$Y7d(+kj!02(x)> z9tKg*mg96}E9pbl9HLFF#30p7WXKxcRDbkEQ&!5nP#HKw@Eg21_8@I-B|}K*Kj~xC z9N2RXMhv)1-WHO?Sm4yk(qkCD3f~f9dD3Y*hz#445$qV1#=RV4k|vcZjTSeZoMbfl zE!47&Bz8QrmHnRarb-Tn;Goc-r*to*OSXYqy7xq{1ATmnwr(TcdhM!~H75wE&k(-@ zE@;e5&O8t$PhebxqEUnX4>zO?zN;tu%=C|KWKhcVW2lpwzN)JXPS;QjP)wvmADLG1 zyU0Tz6Wc?7G~ZY6ud7F9nOpB3Yo=4S6N!A_p!2trUdctb^+-6(4AT7&A;<^d4@$T< znH&J^-Bx#_To|!&Z6KS;^SK)4meDKQNskWA=aH#l0Zol0)^H)hP1?DQSVHyVWx>s< z=mqL;BR$Cb$LQN_q-50WZSNGh(CKQcy&h$7TQOv;$`2t1V=$GqKJJwv4nSBCMDAN9 zjE1y14c{ezucM8Z`WB`ZyrBBJUHfv6q)cP3R~{1xYX6`Eb^zNm&!EjaNKDb^7r%x*L~N)JBi*CN}ckGMe%QGMC!rwCW4ue=&T898|ul_(4>P8IPwnNz6b1l>w7eLFPT6ro9Uvxiamo6gSMWg zSN1_l-LjRY?#Cn2AEh()$@Bm52ll2`S zg=7a$cOM{+$j;Mktp`D|lCJG-KYmS~@{#G7n`kS!u4WXKxFtq^pFTWH{Oa#@fYfRA z5i+dvI-+ku&g+<>)XfeH6%UV-$J!1aA!i9GeMr|GBPYnZ@2T%N`Ia31ndYA$ zuXg;(Uk%-TwGt5KTxUX0bn9~`FyVd7QT`-RAhEAH3H;=`+;;6GG-kn&2KbQlx4r)@ zG4cHAwhP~pr9#Wg0r<~aGH?+dM*#AHQczKbY9v6XliW<}edZ^m)rwNCmO>DmZ75H2 zD#t4sfMWJrJ<56>+^-U;mX0wQu+?g3a&YgzH)5Yk`xCW9Mse@>tq@!W1WwoP30qf* zXC`o1>C%zbtZIqD#0e4Sq=4CB!d`O*I-gb2Z*ntK%rd3P?!9E>%vicHD~yj3Msr?d z%Q-gBPuf7C{ar53oR6z4ML=?2fSZDa+CJOq4lu~4+me3=tvZ_1HR{+_Y7QUst>5bZ zf9T@w;FfUUA}~*;{=!S|A$^`ikBQlonr8X}EA;phe&qujuKrT+T5bul zqe=*utrM!A7bE(*gX8{J1mkqs+P_2n%H&-g_3Ish6owHNCEbigmEi8CsRK27#Yvk=EqL{ArOxa5xJJe9&{--7$XZjL z^^)!E^|(CI*J$-wv_&gcRsmCVU!yO9|3vY9Y8{!2;l4I3Q2bk*r25!lwz$1@77Xw` zNet3Q4bPTRNijW(ltRp0OD@t-zv6)YS1jV?nI4w2`x-taINgF@WYv1kh`zU;>Hm1~ z-<%xfA9r8eizp0-$h^@KAuYoNK{SD(_+Qs_>mkFxrw~t4a@6yJ$5`V>Ly9ZGsr-PFu^Zs z5h0%H$_f_xT{X3CrPO;5YuRMjY+XA`xH7R=OV9p9;=4z?aFZzhy@#apyN=h`SXNx3 zu&2LkD*L7K-!%4T(xqibKM4ZYPL2wf_NNARi>qZhXaX1KxBfg#?fF!kb(45mbyL6>^i8f_T0NKj(7&0qUe4bi96TLR6tq*j5p5UPL; z>QHfRqzpNp-RFgz&>#MZs0n&mWvE=4Bte~(=Bck~I(gn)3slDgfen)qya1oRtupI- zKCv9)4aGU&H=PqZeBDzLce#a3N3|{9sI5Zu{24^MklLAj=qyLNuv^D6A|x@=-`OGv zTHS6=EV@r)&ynt3JC6`5>?7G^?1ZBxU1OJ_(uj1{kDwFJ5xL^!vq;(?Q`^2;R_)+G zjAUDUj!9^K!LQ39dEPbEHb09*ecnPWTvBPzJjKgFtG%zf@mh!aeBP)5S};+S*H_CS z6&&$~ni<1h2P=%pnQY3Aqd%S_u_WaneR7V(*|U9t;>Ud@w1>#TCNnfPE>CBj!TIt{ z0|2)G$6(0V$t5fXuH=|vsdXEpAaOhRNDhhM>O(jayh@`T@CQRb}drDAQk%QXBWrZc6mK1;O6)U^KEU{Az zTEirl2V?bVdi^{}Pzqw7Uwj9B&|ipfoF{$zzgX%U*Aysy1=f!mo|HrvF^$KwM}fkE z7o?DOE*sB;b%)j6#2#c~tb|7l3=VjU6J$^nFNpu4Q!kK&qVMk-g29N) z)(K`@Oyx!{A>HN4UG4@o3-wtq*yi{p0nG}A|2`qW@|`jSZeH}ydYjvdWAEVlB^8vl z;mHk6qSr5Az7*!u0caV8ml8_mx$)a&|{6&&OL?>N)kqn5BUcfFr^Xq}q zGr@0lG%&3Kb3s8~ZL4=L3*kgfHU0A<=|`MS+V2uc8nUb9C|c}DfDkn{-xU8re6=WZ zPX@$`oNzEhJ37j&WGYG@l^i`L)~FI^ZSnv(D=TCGO0|UGge227mq-nHEstt0BYqk5 z9_@P>nT`52T5_38HoiVU(m{Bh)dA!mEPb7LxT%zM+Ci_`$ED-M!{&)`7z{=sXapNL z#~80TH_W3qFB3WTljSf>rKAUG3=jjU6wZz6r8fJfAQU?tsvH`B1x%DJk(OLRU~!4Q zb_Kf78%CTVMKNv_^ic&}Yw4jY#9n+P7btvg0o1g91}w7i5XZu1ek$zXX|`#+J`c&G za)Pfwc}e}3k5QbSwp7$(3{+=nfjG^-^gSqAO)y zcHdET&msc9M|9K&&sj@rt|4yj^9fyfjp#cLKZV;eR#pxyl{8~GErh<6-_UQaftXux znMPhG69x@CEB+_|R7l>FAm>)Oi_71fPHKr}?+372C#V0Uk~O8A#`a-g>pUu~dJ97|F;rZDlveYkc@wuWWJW;Z@gMqc?AonS48~{Dtf%{m0P0w}_#? zaH1H^TM&DcOO`4(7>6$5;vJP*T$?K4stf&4puUS)c>*sB#a!5uXhZtLAhlQ{>IEyE zcMBv)(`LH&7K!Gc(bKm`0{P2h`s@~QcKUFde8SD#o{lL@RotX#1#$Fr+Vm^QDDmyY zYV^Q-5+kK_XPWcSY;grTVmYvAY>k{TDR5&M(e)DSpM_3Cc2Z_WpTYVHzt!$`oo4I7 zoc&dquLM|VjAzn{wY$YFj5y?KxH?AGs9 znG|zmIiJH&fBL$(0&mGJNswj0hafmUqc7ekonz+sx_KIgO@rHU)l_q)&2F23D*xc3 z%nd8(wwY?@;L>VCaRv(~O5CR=l)9#*CgYOI(V(nlYCu z4@pVO`mbeiM+DAknmSAtjx>g>ow0C8!0Mw^j)rK|l#vmtj$sag)COT%o2tk3ewL|! zYS|B_CkT;kTnM;c*9?Ju8pO10sRW>?#c!=e1eSlZ2~7v3H)SSJ63_qTd8MPWB$RL! ziU-!`mjC2JVtm-a;``%_+N&Mnby@A!#xPdK(}V zjeb$Deyc?s(v>$W__mLRNGdbeZ{$9K@n$K3!Gc89^cep6~sjVQ?c+sqi`HJO6aE+AU8Wi2wzr%0{%FpYwhQ=X}!ICwTF-I19 zCUfDm<~Im@zm7I%r8v@^eWZlkyse=?CwAW=@8&b+KE%umOcWbj&PE6US-f*Viw_<;gdC>CO=_sCfPduz!0-yLrK%A|6Qyx! z0>^4}L5-GnF0QKaGo$#=1XxdTA+a6UIsR@7v_k|k_tjWm9Ob2{lGec?y7AWyQ!eGO z{m%@Mq0Y#$mqElTh$aFL1u9i=IZn8cXEp@7kWE%r@93ST9YL*CCJRiAvGb{*lRd1kS@r=6Hlqd%1NR84@sNayx8hhzC4#0B z%lU4d919n~F`*LQij%tM7X5X>QI;ZBDc({qFudik`WtT)%fawg)MSTx8LBXL9Ag+A z9hg|J#a1&eDbo6Jj;NG}nX}R=O|8B4BuaO2Qpi%*B4`Mp^zqbP z>uSz|l+X|%B_ZF7(PU#QWw5-#Z#DZ_v{F=6jV6+wVqC}ROR8-R$|!sDBCjtWDNwzy zreolzeGyVeKWS^G!yb_yE!n0(p(9@3v34|{l&czLrVc;--zK^Fc|iVwV_*Rz~?=3bHXSE{_v1+MJ& z@_oJw+ACNiKE>#?2)t~8Z_+X4z!W&fy_HrI-a3AP9gy4)C)Hik@K~d|kWQSglE-)4 nzJfONy>P7NQ{8iX$f2YMg5MwaQe1Ll78X7>rpGl;Y7YB9VsFx2 delta 28682 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