From 7e8a2fc1360bf8e3c9c07e9ef233826086652b25 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Fri, 3 Jul 2009 03:26:23 +0000 Subject: [PATCH] remove MusicMod git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3657 8ced0084-cf51-0410-be5f-012b33b47a6e --- Externals/MusicMod/Common/Common.vcproj | 342 ---- Externals/MusicMod/Data/win32/Plainamp.ini | 40 - .../Data/win32/PluginsMusic/in_vgmstream.dll | Bin 331776 -> 0 bytes .../Data/win32/PluginsMusic/libmpg123-0.dll | Bin 202213 -> 0 bytes .../Data/win32/PluginsMusic/libvorbis.dll | Bin 190464 -> 0 bytes .../Data/win32/PluginsMusic/out_ds.dll | Bin 40960 -> 0 bytes .../Data/win32/PluginsMusic/out_wave_gpl.dll | Bin 14336 -> 0 bytes Externals/MusicMod/Data/win32/libmpg123-0.dll | Bin 202213 -> 0 bytes Externals/MusicMod/Data/win32/libvorbis.dll | Bin 190464 -> 0 bytes Externals/MusicMod/Data/x64/Plainamp.ini | 29 - .../Data/x64/PluginsMusic/in_vgmstream.dll | Bin 177152 -> 0 bytes .../Data/x64/PluginsMusic/out_wave_gpl.dll | Bin 55296 -> 0 bytes Externals/MusicMod/Data/x64/libmpg123-0.dll | Bin 202213 -> 0 bytes Externals/MusicMod/Data/x64/libvorbis.dll | Bin 190464 -> 0 bytes Externals/MusicMod/Main/Main.vcproj | 417 ----- Externals/MusicMod/Main/Src/Frame.cpp | 464 ------ Externals/MusicMod/Main/Src/Main.cpp | 366 ----- Externals/MusicMod/Main/Src/Main.h | 31 - Externals/MusicMod/Player/Lib/fftw3.lib | Bin 31296 -> 0 bytes Externals/MusicMod/Player/Lib/libzlib1.lib | Bin 37266 -> 0 bytes Externals/MusicMod/Player/Player.vcproj | 925 ----------- .../MusicMod/Player/Src/AddDirectory.cpp | 364 ---- Externals/MusicMod/Player/Src/AddDirectory.h | 26 - Externals/MusicMod/Player/Src/AddFiles.cpp | 181 -- Externals/MusicMod/Player/Src/AddFiles.h | 26 - Externals/MusicMod/Player/Src/Config.cpp | 687 -------- Externals/MusicMod/Player/Src/Config.h | 239 --- Externals/MusicMod/Player/Src/Console.cpp | 228 --- Externals/MusicMod/Player/Src/Console.h | 40 - Externals/MusicMod/Player/Src/DspModule.cpp | 136 -- Externals/MusicMod/Player/Src/DspModule.h | 67 - Externals/MusicMod/Player/Src/DspPlugin.cpp | 186 --- Externals/MusicMod/Player/Src/DspPlugin.h | 69 - .../MusicMod/Player/Src/Emabox/Emabox.cpp | 455 ----- Externals/MusicMod/Player/Src/Emabox/Emabox.h | 141 -- .../MusicMod/Player/Src/Emabox/EmaboxConfig.h | 32 - Externals/MusicMod/Player/Src/Embed.cpp | 233 --- Externals/MusicMod/Player/Src/Embed.h | 36 - Externals/MusicMod/Player/Src/Font.cpp | 83 - Externals/MusicMod/Player/Src/Font.h | 34 - Externals/MusicMod/Player/Src/GenPlugin.cpp | 199 --- Externals/MusicMod/Player/Src/GenPlugin.h | 64 - Externals/MusicMod/Player/Src/Global.h | 151 -- Externals/MusicMod/Player/Src/GlobalVersion.h | 28 - Externals/MusicMod/Player/Src/Input.cpp | 483 ------ Externals/MusicMod/Player/Src/Input.h | 28 - Externals/MusicMod/Player/Src/InputPlugin.cpp | 389 ----- Externals/MusicMod/Player/Src/InputPlugin.h | 96 -- Externals/MusicMod/Player/Src/Lock.cpp | 16 - Externals/MusicMod/Player/Src/Lock.h | 111 -- Externals/MusicMod/Player/Src/Main.cpp | 816 --------- Externals/MusicMod/Player/Src/Main.h | 51 - Externals/MusicMod/Player/Src/Output.cpp | 382 ----- Externals/MusicMod/Player/Src/Output.h | 27 - .../MusicMod/Player/Src/OutputPlugin.cpp | 316 ---- Externals/MusicMod/Player/Src/OutputPlugin.h | 87 - Externals/MusicMod/Player/Src/Path.cpp | 243 --- Externals/MusicMod/Player/Src/Path.h | 31 - Externals/MusicMod/Player/Src/Playback.cpp | 804 --------- Externals/MusicMod/Player/Src/Playback.h | 106 -- Externals/MusicMod/Player/Src/PlaybackEq.cpp | 223 --- .../MusicMod/Player/Src/PlaybackOrder.cpp | 205 --- Externals/MusicMod/Player/Src/Player.cpp | 380 ----- .../MusicMod/Player/Src/PlayerExport.cpp | 183 --- Externals/MusicMod/Player/Src/PlayerExport.h | 49 - Externals/MusicMod/Player/Src/Playlist.cpp | 1383 ---------------- Externals/MusicMod/Player/Src/Playlist.h | 65 - .../MusicMod/Player/Src/PlaylistControler.cpp | 467 ------ .../MusicMod/Player/Src/PlaylistControler.h | 65 - Externals/MusicMod/Player/Src/PlaylistModel.h | 122 -- .../MusicMod/Player/Src/PlaylistView.cpp | 782 --------- Externals/MusicMod/Player/Src/PlaylistView.h | 27 - Externals/MusicMod/Player/Src/Plugin.cpp | 63 - Externals/MusicMod/Player/Src/Plugin.h | 142 -- .../MusicMod/Player/Src/PluginManager.cpp | 1143 ------------- Externals/MusicMod/Player/Src/PluginManager.h | 42 - Externals/MusicMod/Player/Src/Prefs.cpp | 565 ------- Externals/MusicMod/Player/Src/Prefs.h | 36 - Externals/MusicMod/Player/Src/Rebar.cpp | 1457 ----------------- Externals/MusicMod/Player/Src/Rebar.h | 40 - .../MusicMod/Player/Src/Resources/Buttons.bmp | Bin 734 -> 0 bytes .../Player/Src/Resources/Plainamp.ico | Bin 38638 -> 0 bytes .../MusicMod/Player/Src/Resources/resrc1.aps | Bin 73968 -> 0 bytes .../MusicMod/Player/Src/Resources/resrc1.h | 17 - .../MusicMod/Player/Src/Resources/resrc1.rc | 131 -- Externals/MusicMod/Player/Src/Status.cpp | 80 - Externals/MusicMod/Player/Src/Status.h | 33 - Externals/MusicMod/Player/Src/Timer.cpp | 126 -- Externals/MusicMod/Player/Src/Unicode.cpp | 77 - Externals/MusicMod/Player/Src/Unicode.h | 29 - Externals/MusicMod/Player/Src/Util.cpp | 48 - Externals/MusicMod/Player/Src/Util.h | 26 - Externals/MusicMod/Player/Src/VisCache.cpp | 303 ---- Externals/MusicMod/Player/Src/VisCache.h | 50 - Externals/MusicMod/Player/Src/VisModule.cpp | 358 ---- Externals/MusicMod/Player/Src/VisModule.h | 71 - Externals/MusicMod/Player/Src/VisPlugin.cpp | 189 --- Externals/MusicMod/Player/Src/VisPlugin.h | 68 - Externals/MusicMod/Player/Src/Winamp.cpp | 996 ----------- Externals/MusicMod/Player/Src/Winamp.h | 26 - Externals/MusicMod/Player/Src/Winamp/Dsp.h | 47 - Externals/MusicMod/Player/Src/Winamp/Gen.h | 28 - Externals/MusicMod/Player/Src/Winamp/In2.h | 119 -- Externals/MusicMod/Player/Src/Winamp/Out.h | 69 - Externals/MusicMod/Player/Src/Winamp/Vis.h | 57 - Externals/MusicMod/Player/Src/Winamp/wa_ipc.h | 1103 ------------- .../MusicMod/Player/Src/Winamp/wa_msgids.h | 297 ---- Externals/MusicMod/Player/Src/Winmain.cpp | 236 --- Externals/MusicMod/Player/Src/afxres.h | 823 ---------- Externals/MusicMod/Player/Src/fftw3/fftw3.h | 276 ---- .../Player/Src/vis_plainbar/vis_plainbar.cpp | 259 --- Externals/MusicMod/Player/Src/zlib/zconf.h | 332 ---- Externals/MusicMod/Player/Src/zlib/zlib.h | 1357 --------------- Externals/MusicMod/TestPlayer/Src/Player.cpp | 37 - .../MusicMod/TestPlayer/TestPlayer.vcproj | 403 ----- Source/Core/Common/Src/Setup.h | 3 - .../Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp | 11 - Source/Core/DiscIO/Src/FileSystemGCWii.h | 5 +- Source/Core/DiscIO/Src/VolumeGC.cpp | 16 +- Source/Core/DolphinWX/Src/BootManager.cpp | 14 - Source/Core/DolphinWX/Src/Frame.cpp | 13 - Source/Core/DolphinWX/Src/Frame.h | 21 - Source/Core/DolphinWX/Src/FrameTools.cpp | 32 - Source/Core/DolphinWX/Src/Globals.h | 11 - Source/MusicMod.sln | 633 ------- 125 files changed, 3 insertions(+), 26571 deletions(-) delete mode 100644 Externals/MusicMod/Common/Common.vcproj delete mode 100644 Externals/MusicMod/Data/win32/Plainamp.ini delete mode 100644 Externals/MusicMod/Data/win32/PluginsMusic/in_vgmstream.dll delete mode 100644 Externals/MusicMod/Data/win32/PluginsMusic/libmpg123-0.dll delete mode 100644 Externals/MusicMod/Data/win32/PluginsMusic/libvorbis.dll delete mode 100644 Externals/MusicMod/Data/win32/PluginsMusic/out_ds.dll delete mode 100644 Externals/MusicMod/Data/win32/PluginsMusic/out_wave_gpl.dll delete mode 100644 Externals/MusicMod/Data/win32/libmpg123-0.dll delete mode 100644 Externals/MusicMod/Data/win32/libvorbis.dll delete mode 100644 Externals/MusicMod/Data/x64/Plainamp.ini delete mode 100644 Externals/MusicMod/Data/x64/PluginsMusic/in_vgmstream.dll delete mode 100644 Externals/MusicMod/Data/x64/PluginsMusic/out_wave_gpl.dll delete mode 100644 Externals/MusicMod/Data/x64/libmpg123-0.dll delete mode 100644 Externals/MusicMod/Data/x64/libvorbis.dll delete mode 100644 Externals/MusicMod/Main/Main.vcproj delete mode 100644 Externals/MusicMod/Main/Src/Frame.cpp delete mode 100644 Externals/MusicMod/Main/Src/Main.cpp delete mode 100644 Externals/MusicMod/Main/Src/Main.h delete mode 100644 Externals/MusicMod/Player/Lib/fftw3.lib delete mode 100644 Externals/MusicMod/Player/Lib/libzlib1.lib delete mode 100644 Externals/MusicMod/Player/Player.vcproj delete mode 100644 Externals/MusicMod/Player/Src/AddDirectory.cpp delete mode 100644 Externals/MusicMod/Player/Src/AddDirectory.h delete mode 100644 Externals/MusicMod/Player/Src/AddFiles.cpp delete mode 100644 Externals/MusicMod/Player/Src/AddFiles.h delete mode 100644 Externals/MusicMod/Player/Src/Config.cpp delete mode 100644 Externals/MusicMod/Player/Src/Config.h delete mode 100644 Externals/MusicMod/Player/Src/Console.cpp delete mode 100644 Externals/MusicMod/Player/Src/Console.h delete mode 100644 Externals/MusicMod/Player/Src/DspModule.cpp delete mode 100644 Externals/MusicMod/Player/Src/DspModule.h delete mode 100644 Externals/MusicMod/Player/Src/DspPlugin.cpp delete mode 100644 Externals/MusicMod/Player/Src/DspPlugin.h delete mode 100644 Externals/MusicMod/Player/Src/Emabox/Emabox.cpp delete mode 100644 Externals/MusicMod/Player/Src/Emabox/Emabox.h delete mode 100644 Externals/MusicMod/Player/Src/Emabox/EmaboxConfig.h delete mode 100644 Externals/MusicMod/Player/Src/Embed.cpp delete mode 100644 Externals/MusicMod/Player/Src/Embed.h delete mode 100644 Externals/MusicMod/Player/Src/Font.cpp delete mode 100644 Externals/MusicMod/Player/Src/Font.h delete mode 100644 Externals/MusicMod/Player/Src/GenPlugin.cpp delete mode 100644 Externals/MusicMod/Player/Src/GenPlugin.h delete mode 100644 Externals/MusicMod/Player/Src/Global.h delete mode 100644 Externals/MusicMod/Player/Src/GlobalVersion.h delete mode 100644 Externals/MusicMod/Player/Src/Input.cpp delete mode 100644 Externals/MusicMod/Player/Src/Input.h delete mode 100644 Externals/MusicMod/Player/Src/InputPlugin.cpp delete mode 100644 Externals/MusicMod/Player/Src/InputPlugin.h delete mode 100644 Externals/MusicMod/Player/Src/Lock.cpp delete mode 100644 Externals/MusicMod/Player/Src/Lock.h delete mode 100644 Externals/MusicMod/Player/Src/Main.cpp delete mode 100644 Externals/MusicMod/Player/Src/Main.h delete mode 100644 Externals/MusicMod/Player/Src/Output.cpp delete mode 100644 Externals/MusicMod/Player/Src/Output.h delete mode 100644 Externals/MusicMod/Player/Src/OutputPlugin.cpp delete mode 100644 Externals/MusicMod/Player/Src/OutputPlugin.h delete mode 100644 Externals/MusicMod/Player/Src/Path.cpp delete mode 100644 Externals/MusicMod/Player/Src/Path.h delete mode 100644 Externals/MusicMod/Player/Src/Playback.cpp delete mode 100644 Externals/MusicMod/Player/Src/Playback.h delete mode 100644 Externals/MusicMod/Player/Src/PlaybackEq.cpp delete mode 100644 Externals/MusicMod/Player/Src/PlaybackOrder.cpp delete mode 100644 Externals/MusicMod/Player/Src/Player.cpp delete mode 100644 Externals/MusicMod/Player/Src/PlayerExport.cpp delete mode 100644 Externals/MusicMod/Player/Src/PlayerExport.h delete mode 100644 Externals/MusicMod/Player/Src/Playlist.cpp delete mode 100644 Externals/MusicMod/Player/Src/Playlist.h delete mode 100644 Externals/MusicMod/Player/Src/PlaylistControler.cpp delete mode 100644 Externals/MusicMod/Player/Src/PlaylistControler.h delete mode 100644 Externals/MusicMod/Player/Src/PlaylistModel.h delete mode 100644 Externals/MusicMod/Player/Src/PlaylistView.cpp delete mode 100644 Externals/MusicMod/Player/Src/PlaylistView.h delete mode 100644 Externals/MusicMod/Player/Src/Plugin.cpp delete mode 100644 Externals/MusicMod/Player/Src/Plugin.h delete mode 100644 Externals/MusicMod/Player/Src/PluginManager.cpp delete mode 100644 Externals/MusicMod/Player/Src/PluginManager.h delete mode 100644 Externals/MusicMod/Player/Src/Prefs.cpp delete mode 100644 Externals/MusicMod/Player/Src/Prefs.h delete mode 100644 Externals/MusicMod/Player/Src/Rebar.cpp delete mode 100644 Externals/MusicMod/Player/Src/Rebar.h delete mode 100644 Externals/MusicMod/Player/Src/Resources/Buttons.bmp delete mode 100644 Externals/MusicMod/Player/Src/Resources/Plainamp.ico delete mode 100644 Externals/MusicMod/Player/Src/Resources/resrc1.aps delete mode 100644 Externals/MusicMod/Player/Src/Resources/resrc1.h delete mode 100644 Externals/MusicMod/Player/Src/Resources/resrc1.rc delete mode 100644 Externals/MusicMod/Player/Src/Status.cpp delete mode 100644 Externals/MusicMod/Player/Src/Status.h delete mode 100644 Externals/MusicMod/Player/Src/Timer.cpp delete mode 100644 Externals/MusicMod/Player/Src/Unicode.cpp delete mode 100644 Externals/MusicMod/Player/Src/Unicode.h delete mode 100644 Externals/MusicMod/Player/Src/Util.cpp delete mode 100644 Externals/MusicMod/Player/Src/Util.h delete mode 100644 Externals/MusicMod/Player/Src/VisCache.cpp delete mode 100644 Externals/MusicMod/Player/Src/VisCache.h delete mode 100644 Externals/MusicMod/Player/Src/VisModule.cpp delete mode 100644 Externals/MusicMod/Player/Src/VisModule.h delete mode 100644 Externals/MusicMod/Player/Src/VisPlugin.cpp delete mode 100644 Externals/MusicMod/Player/Src/VisPlugin.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp.cpp delete mode 100644 Externals/MusicMod/Player/Src/Winamp.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/Dsp.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/Gen.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/In2.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/Out.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/Vis.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/wa_ipc.h delete mode 100644 Externals/MusicMod/Player/Src/Winamp/wa_msgids.h delete mode 100644 Externals/MusicMod/Player/Src/Winmain.cpp delete mode 100644 Externals/MusicMod/Player/Src/afxres.h delete mode 100644 Externals/MusicMod/Player/Src/fftw3/fftw3.h delete mode 100644 Externals/MusicMod/Player/Src/vis_plainbar/vis_plainbar.cpp delete mode 100644 Externals/MusicMod/Player/Src/zlib/zconf.h delete mode 100644 Externals/MusicMod/Player/Src/zlib/zlib.h delete mode 100644 Externals/MusicMod/TestPlayer/Src/Player.cpp delete mode 100644 Externals/MusicMod/TestPlayer/TestPlayer.vcproj delete mode 100644 Source/MusicMod.sln diff --git a/Externals/MusicMod/Common/Common.vcproj b/Externals/MusicMod/Common/Common.vcproj deleted file mode 100644 index bfd7927ca2..0000000000 --- a/Externals/MusicMod/Common/Common.vcproj +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Externals/MusicMod/Data/win32/Plainamp.ini b/Externals/MusicMod/Data/win32/Plainamp.ini deleted file mode 100644 index d82f44952a..0000000000 --- a/Externals/MusicMod/Data/win32/Plainamp.ini +++ /dev/null @@ -1,40 +0,0 @@ -[Plainamp] -OutputPluginActive___out_ds.dll=1 -Volume=255 -Loop=1 -WinPlaceConsole=(1,(62,441,1179,845)) -WinPlaceMain=(1,(274,203,1005,765)) -MinimizeToTray=1 -Panning=0 -CurPresetFixed=-1 -PreventDistortion=1 -Order=3 -PlaylistFollow=1 -PlaylistEntryNumberZeroPadding=1 -CurPlaylistPosition=0 -InfinitePlaylist=0 -ManagerGrid=1 -WinPlaceManager=(1,(500,400,1000,700)) -OrderBand=(0,-2,0,1) -EqBand=(1,-2,0,1) -SeekBand=(2,-2,0,1) -VolBand=(3,-2,0,1) -PanBand=(4,-2,0,1) -ButtonsBand=(5,134,0,1) -VisBand=(6,134,0,1) -InvertPanSlider=0 -CurDir=C:\ -WarnPluginsMissing=1 -[out_wave_gpl] -config=14000000002400000100000000000000FFFFFFFF0100000036 -[out_ds] -cfg_hw_mix=1 -cfg_buf_ms=2000 -cfg_trackhack=0 -cfg_prebuf2=500 -cfg_fade_seek.on=0 -cfg_fade_pause.on=0 -cfg_fadevol=0 -cfg_wait=0 -[Interface] -ShowConsole = False diff --git a/Externals/MusicMod/Data/win32/PluginsMusic/in_vgmstream.dll b/Externals/MusicMod/Data/win32/PluginsMusic/in_vgmstream.dll deleted file mode 100644 index f54a9f9e625e99abd495ffe4d883242be3ede0b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331776 zcmeZ`n!v!!z`(%5z`*eTKLf)K1_*F~Q20qk1_nO)U3?5%IL|8XVDvew7?P1$tWZ#t zpI(%htB{k!Rwpy~5M^&2kZEEwH?YvnNFzz7y*6k%du5MY2{5D8_2!VRPV zMl(3DgJeNM3`}5B0Lq8a5UxT!8$&wC=nrfR0bq6P3^tr#1}Y)I&TvJVfkDBHjX?%g z1}|^NCpLx*hy$>y(<@1>C`l?VUiga<;vg)l7BDb80IOqQV2~FDg#{BdOi&doFfb(O z6{RGWBr-6xgFIuv#=wxkz`$St4;8Qm2L=WQJ%}=fBT)o{ zac&F@FFAP`7+#8~GBUipAIZS*a@HwEhL@%C3=A(noM&KoDSe)a;iVhM8S_DUc^)t@ zyli)1WO!*5%*^o8_9qj=OAmVnhL?{&GBCV+XUD+s(zBPD;pLO#ObjpomoPKDtoq5w z@bc&tW`>syZj1~sH<~gqymWiU$nf%GE;GYRn`O)lFSpNUVtBde8#BX8W00%?$fC!; zm>FLFyTi=z^5k76hL<`ZiN7Wc3@>kiTz@p0f#GF?6$8Ud?a#~%FVk)^F}(cvftlgu zo5RcuFV&YYF}(b=g^}T<>;`6rmn*(AFuY_w&dl)A3}o`oC`N{t??6WRmoYQElqzCo zcsW&?f#Kx^0Val**7ZybFPC*NGrTl3XJB~A0kSt;fq~(r5J>OcAIuCdB_1#{yqy1x znc?Lg1{Q{wCzmoZybSSXV0d{LWT*{DOx25-;pHp-mSig%<$3FBh!^<`cP|S!iGQ6w-1;lMo+OPphOa&sTn9e|NjDtj}T^tm&cPC8D28IV`g|+`-g$yrG!2s z!^`GNObjpAf#SCl6hcpIm>6E3FJokQY4wtU;iV`jSqMZjGrW{eVPbfx7Rbc#(h;QC z=NvP`%kMLo8D1K_0_7Bt9T|O03@;@?_O1hEji>*Z8D4GyDP9d?t-8p-@KW_L6T?dZ zUM7Z@-H#X;UbgLKV0bwZq*o`8nc?O2MrMYWmq4j$F-V8RWM+n!!JwG-3uR__xzmt= z;bqA-Q0_U&%FrnHgTL2ibc76hh@73ARtn3@;Nw z5;if+3@=+jvWr$TGraU&&cN_;g##1A%Vdz^xRs#%afXrM<(0`y3@`gz85mxQffPSY zWoCF8puxoOQaXZ(;pMX+CWe>VprqoX$HeebeI^6LOC=EZGROrT^BEXkZZ=_Jc=>J; z1H;Re{}~xxrqqMd_$o$*m$yJH)gmT_mkUZkar76IkGdEbUKVmPFudI33QAWXu}cli z3@>>>q0w=fnc?MS2?mCjTR;+(H<=k;vVgLwKPV)XL20-22BncOZf&BX9> zcQq5k%d`eYhL?)23=A)8K-pmJTV{rrG9YceAnpo~TZGv`Wf(|orwjwb%P*kBknaL2 zUv4upymVz?WO(@?n1SKtR0B|XwV8?Gr7y^~nm?fQ=fuG9auIo=OSNE{$LLaP`VUYdaR_uZCAa z{$0b&@Undk1H(%vkh-;-K;=OO6T{2pAd~w*7R{_;W_bAp#QF~soADczLqXghAi^Bv zst2GDQUp177f9^*6lR8(O`8}PUdn=800{)A>_`)V&{pE$`_y7OnbUC

=aFXSeH*<^znKu0NV|2ar(v{Pq9;)&u-4hZz_cK!KaZkO7(shpBo3QFZp~|Npk2XyPd)87zzp4Bf6j0=j)U0{@G~d|?x4KEh-D-pd9mjUiP3_HAQD;N z_;L~539f7cFHVCK5=(FEhkyV72fQ%* z2ufEh-Cv*rS|++Y)Ewgr(4HJlIzTU}uHmn`NC z6IV8Y-qsg?|Njs8FB$+2K~Pj~`3#CmsKLFxAo)OK(~m$*@BRG$|8Z83!OY;~1J#hh zz{tP=)1?D)lMIM}IP3sKYY^0iJ0PnwCR||?$PfX!1!C8K(Gaj(Km~xt=l}nke=ydl zLEZUc*9Wl2En7i)OZjiUyCVzIfB(U^BaWqR@bJh$w;Af_8=pXagILJ|au-M)%tDao zw}Ta6^UEJl3H1g~8PeL_79G`*5@$*3m?gwKjJR%H{9S?~JkbaDa zK(`s{7k{wL86YhgV84LWA^SxStN`klEQX9D2**Q{H_yla{}(5`ViSPJdKN>*77S%i zKm7l{IOP>67l0Hq@VBgIU|?vr1qm_mw=4oD-Yf=OxnbD{q%ei0Yb3`&{Zs$p|NrBx zU<(Ks7>dn6Bxgen)B_s`b|eD>!;8o7|Njr_J{!<0%Av|6@WTJ?|NjwDpqkA0kMY?T z8(#na-*^O6qFBFq@#Q_F9P9oM%9sMGOah=XgO!ni!4ahO@BjaxENZLDBmjzb&}tDA zRVIPt{Ji4Q+|(3?q|!8o%)Csu%$(HG9w>L%kB18SsMP9mo=v6pRfj^6tv0ytwil%Kzs7|HTy(KuQ*Z>fmmk))-LRvs)A-81!HC3`E`Y z*Z=>66I|mFPy(}l^Wy4jNbvwot3!bb#oK>4&I$^BP*&*vlEt_XoX$Kf{$Ff9!eag9 z#j{t?RvsunTEBU5?G<6~6JsAJXMh^l==PPN*_TGKeG5U}LoYH=q7A=$GkQQ}N7oBb za${+>1*MPwC5gvbL1`NjY8jwhv=Af_@L%)}B;l-k`TxHy6C(pdsW{l1P}v(0*$FSf zISeXz1tM7e5|lkaVxWuyErCiTAbH}&ikDyqAj%a;$bISd(D;AR`pXMju#x{oeI|kX z26``1<4q1Eja+D=gaBzA{Nc3_lp|+mF@QrQDBwln)BpdwPjr8R7iKeq0>T1cG(JUj zVC@US2@C2>0``Mb@Rx264{*4sg3SHUEeaO>)9vK*|AO_O7yK{&|JVM&Yziujx{rZ- zm(T?M^*KRz;I|(ZaeCdZ95b3T?1n{Cz{;c2erU?}10cIDvT$I*JSR2Lc{rR>HB zUbZkWKzj4N5RKiupc*#th5aM2*4HkeuzJz*1jJ+Mbp6s?`-P#D#rVK$Kd==rUA|ue zU+_S*bh~~Dc)|S)tO4pkP=?Rgf^c28FHazROlIm+P>lj6WI8P z3~2ns64BpA3+^&laI?Pj0=1fIK`pHpDv$pE@AehwWNfbGVJPthH-BE}fMjKSRkd?ZjczrUm$Z|ut3tyao0DXbPD#WC)gFv4?%{pFuQVex<2T3eE{{RaJTCN zYgZ1CHy<>Ey!qhuqi)v+;Bm1B-M$YX-qZwZ<^UHEpjfbe^CI9e&ddrf5vWUm;~!K! zg4@^VQI4J-@{#+SYqa&)@>$an*)V%5R^WNEeq z)vOHsttu=G3=2VRL}u3?)~ujfrB0>U7TiZH;Re@=%@q<1r2^mzN1GL-veWg=YqoCJ zAE4;A1(mA*`CFzjFfc3xv8};MYR$n~176&`3yu?LPZqUVe;lk76p6=KK~)5Z1$K%x zxFK6B2R0CHXSeGcYu6ujP@7+KA)340UlxM&!;4=RSn=5R@c)0XL%K`f@UJi6xcIF5 z&wtSzQ04vSMd8E$|G(dmKJfiU_le8TI!hmb(r#%gyv8>G*KFP(Bf!<#mu?Reu#m+= z(9mV6DyRg?V#r_ug&=fr^A2R#QtTn9_<4B>)am(>#r0qG0i^Nq@4^57FV`}Gx;db* z`d<8;xkOF_b**yeBf3d-!Zpw>MD zf8Pr*2b?7MTW^CR8k9`5SwYg>ydW29pXl_x((QVM+4W890sg-2pw5Wv2~d2#7V36A z0nTbCx_z%SA7lh8JYntnhQD_L$lTg14E%kKAVWdMX}ezOYz3v|+hFpRDM;{c?3&}Q zd%&h~cDwEYo3;lWaNWLptUWktU7?&4{Odh9n0@!~?-%g}g=Xhegi&{V*SvTD3OI0G z)E#<)e|;babLgJ5PL@!R+Sf~82K@)O7ePT7kR<@gLEV8ILExDAFB$;uc7eKX=J)X` zjDaiUyZ`?`IQDQw<*M6Qqw>^kXjFE8fhN~4FAm)UrMeRP?k^DEda%HIt{foe!jjN` z(E_mjp#E#$z5o9&K7h0d`PVyv%f&C-0iIxC>;}(S9f1^3rFZ`ShYXq2b1*Q##(GYdjlXd4ZR@y0$~{p zH1%WybvJ0jEua@7k7eFX^v3`HcUwVmco#hN)lF3Hy?-4NC@6*_&CEe(9d=v?84ilV zyRx8c3^g3Yyep%EDP2(Lzv*3ui=Z1{(z}xnU83Ipxy>R+fP%FQ7J-pxOwU z!s-695Jcg$(GhGEnvGi!Q&~_yN`aMSq1HF7*Z%*183r99N2!TkU;Y38r43jHv(`Cx zmAG1G*;P=uX0gDk8?;KP{VHh850u71lTF=Uz{$Ovrxiza69G02GCK>dLcpalw7|B8 zNP=cHGr*+`vZNeD5;RQ+9+-pp6snUEESbfC6#dW={`nQK^BIt$2`Y0IBEy)0QK)ae z^8f#9&|u3xP;VSdjXmkg|NoY*BK)nBKnh&pC4cizmJ)$(WIk)DNVluN!50Gj+fOvV zWbEVxh16?HX!i!RDx>=kdffbZVRQvNB@eClRj&O1-~56RR-c1Rz#YKfFaQ7l8Z_R+ z3T}fyhG}dZnFL6aepDXK-<35&#uXpn1aUAiaP8 z{|C(=G_P2anp+T` zlb>G@pPXNsSHb}1rzNJO#;2s_Bv!^3rzYp;r4%EH!$e@Sk)WB$0d8rIT0a^BXU>58 z8#u?4K$$yZpC}V}DO*-*H}98;YyyG*MGrtKq|ghf@nRyI0Ju8|a-a2^7thWUG@gKeaEyzUGqV!)CRN?+t1uZoBuX^Sa zo4|in(7fw^RnSb=e^t;V*nd^fMA?5;(D2iLRZyGxzbdG}{;vvJh4)_-G+gyx71Sj7 zuL^3I{#OOnJO5QdHP(MsP}lFjDyYZ!Ulo)tP;(VHypF)et8GBz)rN@vY-244sLfj= z+E~lMP|nCu&vU#Lqy{v?{+bKI294-+gGDi857jOZ4{RT3dKes^80!zdWPzrF0+3hP zO*jjmy$98B904yBPlMwMJVN{fX?0|`>kn}JfsD6)^CJ8#;p7O3KhUZ?uzS$gJ2uyf zFqTSmy9!)<5YX+*6WATf5%hu;l5SqxL)T|^yGnq@QiYHP-QO_#igfzE>302L?J7_! z*6sSH+n1v|^hb9oPg=J~SX!ruCga9)ROOZSU zwjUIM;P}8uAFe$7>s>`IKInA)k;RhX-~s7Kz9>2cN)bHZ7*GK%7;Qet68PfRagZoS z7E6W&L}Bv*j(`_#5Vct>83r&>o`4qyP*G4x+IⅅKg33W>5>b`G82ki`Zje)6%+K zMIbha1-|fvh;_RPK!hX$U$jE>b-M~cTndqp34DVXtW^ql z@%<>+mMoSG4Vddx0$xly2@(bQ4`Q4~;0sxZao|J*3NPz7FVaqtnTU|WpAZuqKcGYl zjvvhY!og6_^tuX~Gf?s-NAn9tOV=N@{N1iR%&ws6tJaexOt0@kXMjLM%+OWN-M(+Y zL(FfwU16H!yIlpCUEhFbDNBSPCUpA>F#Epg66_FoeFP$MjDdl03PbfFLH{t;v%WkJ z9tlTZj16`j6Ua-l5bMFNE9HZ6JQ%?qJP%h_DhiQ01{%Wwg#l>U@axj%+8+#ch&A4X z!UJrhE>d`aY=i_3*hb9I*@nehQo{)~)DS#^;l}`;O9st1U?z&@+8=@Z&3i%R6J+Au z_eZx#?~KW80-&*M(9HYfaR_n_sQ$-mFf<9{ zHy<+o@gn6ghT*@CV0SgxJWx<#Egzw2iKE-20@9Y)2{xIh+m)jmmIgVxoisqDe0QKq z(2JRH`Q{29$x=74!kSLsAKk7$jyr%lz6`MP0-V%Alm4J)N4M`AYmQoR&`uE#0Z_VT znHcaw?I6e-EU&MDLkZ+a>o+e9ad-q8K7=T+fB(SRk1U|}qdlVim~jM@600ET4z&28 z9yHeR9x_e@%2!#8|3w|ZOYlK6S4$6rayxjTCb-l%hD%`$SRuGrD3t{zvL6BeMP0z= zfJ%+n!=Oz0vK^$|^+&hwn@*1kP&S7!zGRhvk_@uNI$-l2G}k_0C^g13kM}TWWCxUo zkZt*X2yBZY%$5h89x9*!_vPsH;ONF;%dtZs?_FuGy~0rHiD}F7L)dJY2o-&R;=^i) z-Alnm(~oZ7E1e!1ppuWjr41y6#d1%uA95kr2-QJ1GF4QZSQpZ{;>Ao;O|`kiV@cz*#}BMoq#}A_CST zhNZ&D^2b>~$89paUf+%64yfQu5730UD@SvM4nv6~C}nVTd*}orr*z%};1xp66&eT? z8Yn7W?}w^TL8wqcQE?Kcq5`3!0!77gmQ_>IZA`$H*_>{D5(+y9eg3R2Q>2inzh?ip&Qg{Z#)9B#rn;Q1$(jAtQbxM3lMUj zK(~iLXD?{XqIoZf_QyvPElHpu8BG*!&p1xXbI;+jcG*bwgYrF^=tVZ zav)PBAUXuW@-DAAAzVb%UW#H8fZ>}_OadVMAc{%gNEDO6=_n?F7g0Lawa5R&EVl$N+GiffQVNwuH7gz2?Yx2r@zx32)G%hBy*0_j|EfU~PF4`{Jncc@4& zi&wX=Os|MXP`9fLq+P-6s1oqP8eED=AeUGFw-fDJ=={Y6SbGZ8Ti$7cXitFx22|dF z#GChmND2OST}}pu?x`Tof0d~-(wGGBw61EQB{4^Lpb6MRpq*f$9NnOCLMM)HUy)uB z$8Ogjy*y5!ty$TZKrMgf0F|H@THrEUlH6ovEmOYN^E%mjt`J6E(B~LH*cq}2l)e(^B%F__XoK)7{lWO zv^1X<<&!1c4{|i}L&sWJDD7dUO(<=G+Ym*-25S;iEl0o$A80b#`0_9Q4tOmki8XB< zD3CyjbvglC$nb*ECWzr1Us@3`oZNJJYYoT-P)@kPNSiqJg2!Vyy?-M&29ryz4S6i>T?{R^7!2m2RueFSKAM|XgMb)W)&t2=mR zf&)Ae3hJOYSBNl`Xn>}pD?}Jehs#lHHs}lp0I3DpY|0W`6Zhy0Na%LuIPTyBT4@Cy2ZJA~(Xawi!jqa)XrmsS9xpIL_d^+g_OF&8 z`uB+aP|dX*45jwnUoxJ=vI!t>^7t=m1D>}7ZA)0X{QrOGZVkw4D}kUFCCk7e`BGI1 zw0i{SUkjKHE(9jX&F-OSV33yQAh zy&zJOzg+~h-(@O@^Iv7^gLWo??k^dCVsJ;+kEQ?rzXa`??f#N+2amc7Aa%DuyP3XZ zEWo2~1xVc{h`K3w)HQ(AbwSkS;87O=QkMi#=YvO`0Z5${M4bs9bsQjdLJ)N#c+@>u z^8f$KSKvLv8E>L-hu;p6xK1_1t%9h#5`{bbDnRO*AnF$2 zQ5OJG7X?w5gGZePNSzTxodOkUD6F;K8Gg9i$GLAwERlj?nuH5EYy3o03LPyAa&3Tu?CO2bdWk& zhQOoF9;6PMA!_ib69=h-W(W^F>fX=)|NkX4Ls;NZcO0Y+bpA;9mkbR&>gI#gK{JE^ z9(Cm)b>IALN5MYG1)diTKZFK=={?=~LvIx-f$!-sez>F5S`KXN((1u+%EarI7wa5#&st!QcLcA3PcK@Bjb* zDpNZknO+Bv`AKs@r7lR*mka?s>a0NOc0tsA3B#Rugh1*hLDb#Aqwdw5|NmcRLDcQR zqwWw$ofAae96ah~fz(Ms)CJ&CR|Hb`i4W8^&S1c!&I_dO6hz&NP~84i0;yXBQFj54 zx?i*Z|9@EpQMU$mj~ivk{XRv>k|AnLvZ;`WCSNZlle zx(j&Jy_yax{~+qt;8Ax7q|OPVt^<#{Ss-;%5OpDV)D?l$eFCi*_>!T3N1Yc)-6@E= zCjq$qs{~TF2%_!^9(BK_fyzIKx+!?nT>_~Kf~ZTtqiz*Qofbr$4jy$)AazU-bszk3 z`y&dZ?iTpan2alU)ER-)ZGx!Vfkzz|NL?31-5fmX9!&+6e-L#gc+~9zsk4Hp3&Epq z5=fm8M4ba3by*;Fuh_xq-T;p}Cy=^B5OorG)JcKV&4Q@oz@zTd6j1pGQTN6VcYK@z zsq=!UyMssFB9J;Ih`J4U)K!7h{Q{i^^ChDPkGdd`x=Rps1$fkHfz+*nsPn<2jtQi$ z38GE`kGflvLFFGr9Skh)zE zbyM)D69TE51W^})N8PJQpz;r*P6Us-Lm+id5OqI%aQk-_NSzc!-5EUUia_cJ~xNO~9k>*F;eH2T@mnN8Kfmx*&+U7(D7$fz)Y1)VbhM z*91}r9d$Ipqb>@h4m#?{gGZeaNF8+4@sBs|_}~JmgN{1Bz@zTb1W@@086~`dN8K)v zI_Rk52|Vg1fz&}q9e3bSmjzM>9d(?5N1YQ$9dy(&29G)^kUHq7qYEB&pZY=NA82Ie zONI^}b*Dh;po1(jc+@Qdse=x(aNto_1yTncb^PFkJKlmo>Y#%x7x1Xl0;z)zvTVVl zjtQg=I>=IhN8PPHQ27TLC5*tMZWBlybdbdckGd|9I_Mw^2Of1vAa&3|mOGxf!^H}u z4m!xP1CKf(kUHofOA8)#uX>?_ECF~F9R(=@4YFw9QM3T02sFsTf=5wxFXjM*R}Xjq z0&)(`k#;757gM@W&Y}6*0Xl~UG+AZ+=7nW1WE!p46LjlfdKxCV|HV zOai+Lm;|^BnFNdrnFOK>nFN{(nFLlBG6`HRWD@vY$Rwa##3bNd#3WE$#3V4Ih)G~? z5tBeoF_XZOVkUtz#Y_TUikSplN|*$4N|*$ulrRbGDPah;}9c%L*oe#%d;ki`7g5KdYGp z6l<6SD(jd89@aAn7&buEc-Alp%q(XTC@g0Z*jT|NaI=C*K(dNSpsanvW7{(vX)68v6e}ovzAFklDf{FtLS6U}p=Hz{3_M0nSz?fyP!Qft9UH0*Y-+0-kM50)=f%0tefe1YWi= z3GlTu2^hCC324?a2?W+L2`sE*5;$4MBp_MOByh8dNr17LNk9{12grT(Oae1&m;`p# zGYLdCFbOm^FbS+|U=q04z$Eaqfk~jSkx5`C2!qUTWD*#tJ+RQ+YnmQT+qaiRF0;3@?5<>vI{wM)<9`gdwdCZ{IfYAFi5$lhRw_f-Q zx+>=X|KqJkK=+b?R=Bn9fU>{~f;bpUSYQ5zbh$xyPxiKc0Ub;XS&78c?Zor{0^|b9 ze@&pqCs^{u)CN$alco6wQ!(qyeXO7}S-}#}>)T$;0Lybg&)a;lqZzCmdImH2fJ=x< z?Sr7Z2jw6KG4t>9_}~0fuaqCc1zmRlR(ia34b;J}`Mbev(AH-NV=vf${H;eo7fI{| zsbk^q-40rl4L*(+v^N=~33Of}SQD55)6@ml1QKH6@2v&(TELnPK49wZ1sT;nw3VV8tfIMsgOR`WEvRD;=7W|f3RnyBx86b#3ShAg zWZ`c;iYh2#9Vo)zx&c*?$2yRQzjZdMpn!Ft0Do&6s-T2*pag$wA*!H^b)XD?YYeKO z0%V;ls-T5+pap-c5vrh#b)XG@t1M`rMQZ^x6CH0&fwDlSb!0Iip9msV4+_wlzo3W! zk)Qy*54yA#yaLoiC9r!cD8pr6Dq)@qk`H?Et`?Nuc(O_$0oV;!)BK4MN!f9TGE5s+ z)PZaSxu|(Bh-4_0>;BT+3Njq!Jb{L~|NmcxfHDneO@IzVNerf0F<`Sm{%qb0A{k1} zv6^L42R_LI91bX!NP{eSk62lNdX~fAT8K7KssZ^E`K*YC5IN9XKI#z>Cm<4#)Z~FG zw+18!^^PfY2?FX76kQ+{UtmFtDwhY6bLHsn1%(y(5EhQ^UQiHrdVp3tclUyV0DK?` z$8iS^&{lL%V1OKt;%D_**u9qwGnfQkgjfAXzV~uR1!(X9RMS|$dGV(PGI-GaA7mQG z3?>0kp%1Dwv_M+_{{IhRE6iXLNXyJg%}dNpHDZ9VsJQujBv$xz_A|JBApyHT8FZxi zPS6QEnC%P5eOu5=pnF?iK$;F5kUiJ%ro-W?|No(qFV<9p3JjL+F98`pV%Y@#iyDCI z9ne8YbE?3%gs{GR2Fd3ESpqLUfi8?V!T~y6{QHg0)(ii@O__iH!AY302c z+<}K1l>I@n3@^$cve^e@W;Q?KXFhcB2g}UwdqH-AG%z;r1-XWy#1C|?QkKXIcf86S zWx&c9UVu){X+FY%!&FBFurolHVlaSN77U;w9pp3-Uy#$jfKUH|h9>Ab2Jp&lc$FAY z2`W$5fU8mv2`a&-Lt1^HU|?Wi0JVp9faDJ_cD8~T-C)wX738tnOb8FW7yb)qi$gES zlujOjZr3l}9v1xTdqG;5dqIKPJr%?TZ!iDS?V!@>Bf!xOmIj^56Z)mwNd=*z^b6>a z9v2RdP8TtjmsQ~X3twJ~fNoDK;Q`-}_7WU>EXD^QLzz8um;_#&EJZ1ev`Rpw5hz_+ zzj={Y0V$0@dj+O|6#s*iKMUp{%AcWH>VWefp8YO70a+}dxbF@95%dC7VKpBSX#T-c z!rFY||7)IJ*B=2dG9l;OK?3u_Tqc1RH6_r%gm0?QE{6o+1W*{>n9C&ate$*2J?3^)R^7+&09V_;}L!eQ&? z<{4Dt0WMrPUL1xBx`sK1gAU8$2*?t7(Z>Q-$-n!3ryqEwt zusifirx$v$tM%eO#JM;MNO-Yp3@VX&L9XrefRwFTFP7ldiluB#VStpfB0eC;5-3~$ z6c5$1wYL})OYpMw#X=^57r6z{;-DLR!}+;9q_S107?LGG<-!M$Vrbd=XW`H-QZ?A^r!|??;wW-~W(0or?84{`7$eAA8Vn1^)24ung4x$wm(!?L4ILxv>lp zK2MfWKYR{8kbnmfyxGHq)Er_aoNl1m2XcNt@$C_CbuaM3j2YYxK<-NsYM*fCBHAaP za>11dsOQEIhuU*{lml&_?1lB*7+yp`>f+V|C9E%(fg1&&4hE>SLu*1*Wr55^YC=?i zRfC!kIJ#}QkR}AE7lzSo<9XqakcBrEtf4_*43Wdpwt)80cwX>8lz}b4?2v)hYk@mt z-b6GSj%N?mMngn4C|=-=28C5j0xv8wpm_+=XqcIX)M&Vy1<6g&wIv!L_0V>M$*Q5< zZXl_=CZa!4i&|M|*sp#>+4Rr}PK7Oo0#0Se->c_`G)(>AYKqI&4gG%u6 zJLYsmE$}8CTq=NS0T#4c;7%H}77&H@QZoct7#Lpchg1Z%4(zw*l(4@10jnZ7UWj5= zNXNm$P*`e-kQ9);NVUWUJhjA^;|?rJVbH!E52*DA9jq%21y=+dFF=btn~!jSOL$1{ zk>LesLZ)_hOi-_7KGj*ueF2BI>39nshHZTdixRnUafsoq8IsvJ6sZW8F z3gEoh0#XgFTPAE6+I0(-;tkTiBewlZM16B%BdGnG01aJueWRU>6s9*eBFeWX8>wHu z4VwDKGzqo7QB8t`0=9^Nic!11N!Sdk|Krf(V|F6MCEzrku^AB`C7Y=qA5^bz5@7R1 zpcNH6XCTIZk=CO?=8KMlXB?MpXsDCz#WF}m#lQc=_nXouzu)Za?Ep_V z)xf8lK>UF2UXVcGi$k#>yOC-nb?`hpxZeUQxM4GatiA8;Y-25E!z zZC)gSt6Y}O)+ztM2lxkM33T^@LO!r}DyV-J^x^`z!V+L^1&MZoN&aoEM?r%SKbT9U zn)iZZ475rIq@ekQKqoj3Un_uTumeC#CIUG?W9^_jNlwQ7|8EVpt7cL+SRJyvW`5rb z^A)I){c_v^sUn2-{f;|`c!ENcz}Rd;9H=5p0l9K7h(yeL6+n{}Xx6cV6@LJvqWv>sf)ok;)`gP;T8muv^ENjxR%7a$7eu{wBt+mjeUKYcP6_C2s)+53NRIet(WCC9N1J^kyYdFBw7RQSx5SdPJ zrw?sdFgXllJyP{5h^St%t>#d8F%4oGxVB>f+Ys_X2;!>N1Eqf8o)+kW4hE3i3l6Yq zmh1yE2VbxlU;4fkRCt2*g1c!iUV!UCEb@#mL2F^49m_AXAVlQjj#PA_cM0DpIfzq9O%z ziK<9ffD;V7BE7JWN#I3CFf>a;D$UB4Ul?hUHW9-@at1z ztEXUM;Q9n_{fJ&)eF#CVuO5Uz0uyE;Dh)Ote|e3V&mp2eyWjwmz>773(71(HSJ6;M zfcsA?4nWFl(0tdH1Jp0Ck?Si6dw|xnqz0o#MQAX-r~pR{N%29%_^H7mCV>|+0qF5@ zItbztaC}%CLd1v5A?n8m)%&x=&#w_*zwQh~)US(zKouOgeicBgUnd1Z>(`I4!BU17 zGa!9KTaFY4(3Xws;Nefu@)uC=8C(g;ym$gB^Rd>a!u}xZkm}Q^Fta&ctbyqRbzZ^i zYCyFXtm7*2q6Z=mu1nAt?C`wEgUI5j_uzAIhTuvFUIAzEyfDS95w%Om5s;<(z1=1xSN<{SX3(?B%|toO?La%e1yyaJ9ic%8Q7D3id8Ek4kE2C36Ty+L&vD6v|< zc@gOk$#Kv+Z4F30v`*V`bokV1B$Z!8)F&T~f#!d_q2UUzPq_Ucp$RU(ejG!TUo6L| zUw%RA5Gt;pz+0b#u3dm!?}xEIQq&ik(e0`LGw4OBH^^lippAbS;C``4z>7eLYr)$b zLHi~^2?)i25+t4-^bDYCGfxKjL&QW%|}4vtC^nv|96LqFi!<3 z?O=Mn2bZsvVU7}kISS%fZkRZluRnubhw1Cv5OGXjAA(3A`?}r>?&~6OTSElqfirLq ztndJPpo0mQ!?R%KqB%SWCXVKCE10+hsz;R|;+PKSgh(Je{1`YXfTL?CsCnTk!oSah z2^{nYm%np|xZDY+)7QI!{0~mbC@E(;OdQSW^)PWXr>8^2F`e!QkwA7jH_Yj!Os_%3 z1?vvb*cD_Kz=N|)0x!y3prtCL^>Ez@)OrAARqHn|q(NSK8haRAzP>n%*x&W#ENDDA zw;(m4xF3fiy@ zVHNxWEy!nJINs_2XPLlR8oywhw`Jfg0XT~V&iVmf)(<`f5VDQ~)GYuFFr)3mvUUaa zKERSMRKRHm-23oA>wSp0!g?QEpqxw$?g>4B$E5`UdI=P&o)X!$bC<^TWgsUVFVEutVDuh;j2Ll>tXQtd%b!0^LoP6h`4ePGYF z9w=pf`51KmB-kIwe(L^`#nlVhZQR=n+Fcp=Uvvq$cmrKWanc#o^N9Eb+E5MJq0GOJ zqxED7>&xjNvmmQ(x?4fg0m$2MCxdl?Qc3e(5D5y=R89tlW35wu|Nqa>3*KH5(Ax{* zL2ETK~{kIjEoEn&?E^G3+U}#@&%M6r5r(y=7CCqv260WFi_-`5KAE;w}lFu+3x zBnA(iKj7Q~3ms4fgNM#Th}7}c2BgpdvB9AOVswM0U||9A07x7rg64rP2Tjn9bc1P-S3uHew(YkEc?G1qqeT=X|9TZ9E;0{*%Ixl5P)0w-!pH#4zTLf`43~Kl zB*_exgy!@}aF*hMx&fy$BZx9^qXF3>W^nBTExmamioiV&O#5E!1E+RyI|y{E7XLnQ z0nvJ()E1oVau9Q&B~$NIQ0fSJQ3?(w8SqN*d7#D9;8KKCeyY`( z3=A)qgR4qV4*bvGqRj{@*E2qY%XLtJ9?;th;z46O8)7!p*CzZ3Wo`iL)1s5Q*+DFi{0?vtR+ZE(2}P{%Zr;dkspJu-pe?gEIw)0SO*R z-B4==;X&dUn&hC4e^F=!3R6&c@Ih2{wt|{BubE!2ZQcuF{V$R11{Y9Zvq9l>ycN_? z0<~njzhsGIF(Ox%X*Qq^@}1_|JD_UP4%EH+lEs3hR<*VH|G(S!PN$v zCD4+UJ1EB?NPs*EX{WvX1Ri1q`Hi55`Fjt6ItoY$8|rDuuCW(EFK%0ae9Z&S1T(?C zp*!6k0^L(V#&^5E=wz7)2@Gp+V3hK7w}M)Aovonu9!v%l6bKnm`>)&eMYr#ZZU-6T zOWzHdp;|y1oA-hYW~kHbb_Lrb2vW&m%~dLlEa1Un?Zr~U`jUf@f#IbrXj3-W2iD-w zN4E)T4pV1q3b;K3ijsitUJxhn#a6KQkVcocg2Dr|1PUY%9!ZAkcm2}s#nR~k9Y&Uf zDFZpWlLI{V4DvE~Pv@8JUXUj{J)nCq_#ujqJBVa}S$Dd7L2W0HwmZiiKodO-Am858k%f+B!mD)QDCF#doV?bFF+6V%% z!HE&X09yfKSaa0cgE*jQ1o4|~CNh+0Ba3viObmF@X9H3HPI3W`9Om& zAmz~g-9PUz34po*pvvXL9VP)#+X}>fa)(I()Jz2h<()fB0-!P!B!1}*lK`k}0#GZ18NdVNm0SHGzs2~g)=}ZA;zZWrNkGM6fuA`B%v*!N=(j;FD@xc zP0StPJz&cE&!f6WLx7qg03MG4ZQ29xU;gs<|NouMpdt@s$LH0U>yM%1G2mrKpn@2_ zWqnKzC;@T{|_BzdI=iehYl6MTOpwaAjd;m zAq&8D=!msdR+ppn?WbOfUDLopms+fOJ@K|MUK=O z0WEQ60#Er0fT|xbOC%j^=bhu=)2F*#k!x)af$q>3oq`}+eD8F6)O5R|o)2@<2;_8l z?YHI;lfa9W`Y5#@mmaA01EmA&H!u8*AhjQ8z2X*-VrboW^%0`(JM#!>PIL&B?cnqd zn(_gscg*{cNj)Ft!(-6=ryevg5%ZshkRSw)2mg4Cm~UfwG6d$^KwvUSE!*uF{3LenpPQZ&IaE=6z*an~#JW2Y{f(MlLLH*Dy zh8H`a>qUG+f`dv}!JQefjLHi>$Wle)lg&T=^G`k43GT;(<#=G{ZDCzOa#07A1K~vi zE1~nXI9@D)6n^0K8qjhAe!i9hY`-0$bt91TwNze&Lkz>A9J0S5OW}n9er3?E1h_8= z+Gb|~S}zYNoZLW#6J#zHeJdpVe61h4ph3r>xRj(*7ZiK&^7GAeCV>~3TF@*HnG8Cm z0V+R1>Dc|`n$W<7m#4e6 zAwdc*Pd#2D%F~dS)Gtp5&3clfTBzmeRxL;<;7KGT#Rn1VNiMts?SE89j}L9AOTh7Q z;}s%4p1h)dd{BKo2`HaZyS|asMASD-THpc$w9`8Rt-krB0j+PCK*MdI-E#~tBp|hl zZKSKScM0pu7obKgNJiwvKS+s;rM}^K@dzS^wZ2JI133VxzL^3x6YWGXffw^&W zq=C)-a?Bxzv711haYP-n&NxZ@nT-6sptXwl&SeC*-}%>jSiqLmgIej?m%uG{QqE;W zv*Wl6lL^?v;O(0575&Fum~248poKC2(Oc=t>YzA-*D@jRm;_!ht3Wdzq?SohLaJp} zs6h&Y?*E{ACI+M&TF+#>8$R_6N#)sl&>$pezZUNEDi*v4t$$a71}nUNiB^RKCb&FX z@g7m0ZFxTg$}@7?>!~WJ^-HJZz?0o&qFHUtNug1onl5W#rKTvjbmIuf z;&{;jQ3om+(MnC87byriXsOBZA^=GYT55u_Hn@px0U9UQwkVC9^7An` z_Tc5`l+R28FAmE=GdiUFRFOq0KQj~|i5*gY&H*WhmY*v=kCvaT&DhVweei`z;6;us zG+5!~r?dhjFu~>Li!X@s^UIfETz;y`qn4kd@{mv%i1Kr$9HRVek_Q!J;PH+WwDPk^ z4qASG0k;Uj1Ff+AF$M}_Z^2|ZUc7^pNXX~j;VeDhN`ov#Dm^EGCxJm_B=kT6 zlrzLL8W8FQso!*%gaGCp7B)@wY+>P2?+&4OGJ!kEcgv-|BIo= zM>NzW;P_ba8xbE{ep5d_25>wBK3xYM7za&mfiFRTPuB%YAZigCNpSH1YK7;Z)gn3) z&{_m^I|_LGo8iSKNKtMZ!@mKR-+Vx4d$5(M@L$BRe;8ldfU7T9<>PLomVm@mg2kVed1h^SeP zi4E17C0q;?hwz$3;XjkW3v*#;ri0WhGX#-pmOG-5f&kJM*8nMp)-5Lghfm!CD(0v? zo>9QSEb!uvAT(&<^-H%1BtXICSp@?#{CK6tkW`P$z0_gGaTL|J3aC~quA>u=XiTd#|fb|RU`}toAB5ImTLg3;8RMQlo)ij3$ zp*0ONV!V6>w5DP3_4X`befbhr(>TEH>#$`A33e=DeR&=xBLdsskKB_17xw`#PC<%$ ztmEjC{2+%R)kUDY4v&M!eX#XuvRq!&KuiO7BGBh;eO|;tWOYHB3H51U7;f(3}UUWQ@6yDw%SAq&(OI zQVp$RX0S5D?_C?}ixWvI&xjZ=zre;U@S=tr8mjR6MVk*PEN`$O%CjeI)GyBlP5;G| z7qxy-<%NU-j=BXTOj3LhQNJW`FblkR!-*arvw0vc0oN}X9EkWR;h=te42k-slN(XL z6!CzHaqxIp30nP<#0{-qK(lDz8iC;jtbQr*b#*UcefbpJ{{XFT1kK&y?6bq7AW8)S_mbZE?ph`NQ9YpB*O(>Otq39nlo za5D?MC}V@>I!N7eodv0Gk>*6oe=k6)p>@j_?%`9nkX)V-QNI}QG7G$rVTFb)ynZ>& zjuf62yomD5g_ru}*`TRkuCk%lFGtxRp#Tba9GKem%K<)Sffqf@=<#6K7q4aA^VRzto`BFHEe^`h^YFe-VJKF9mOCdk?E5TwVx5rYw-V zC^##d1}2b=NR`cUa3uwrYyscL2iiV{d=Qz#i_MS<09=Hl)h}5dFQ!6dG0)Bh83NJ+ zuU$gGm88oH&?%+h6E@LL+lJ|Y4wHGjuq0$QYTW}GCj;GG4z9&S9EqrA<}nY|YDS+K z6pip|#zTl%-~~SeH1k2KnSy`+{x=>0t+=p$^I{7Vq(Fd-lLdg3L+hCsq2X1}z=}JP z$~PkFn+3wm0x#D5`vxQB31xtU0xa;c z&?LnN5&anhQBeK=7d<{s|Nr;D8+M+Kg(xCETtulKA5^bzKzGf8*O%S^?WgL(x1S2U zbqLh2AT%?x^WQ)CP2h|E|NGy31l*r#K&x*i{rmSHT(LOA>Kld^KcM4f5y7FpC9E$s zp)wf`91ILEydkv?VsZvlenaN2LHmEu_BL_+0ojaH?|{xf0@nxvFD62)fm}5XIg+}w z6%+!EdqHHpQE)&B>&xq)0v)ufR0Dcn0tZsB2s9B6US|cmhKQjSwx$Zc^MU8Z97tt? z)(ZmZ1J_dEN(0oNf?Q5(0a|1L787v*tqlZULC#PDuER1WfV}U6*E~oamN5sUQVG9G zh1aYvLHC;yTGIOQ&%ghWyCIrMJtZ3COVD)-pgj~w%LV9lN^}!A?%|cy7YSy87fC;% zITun{9sUlgtU$@%`ppaWKS+7_4@fn%uHuj!o^=(dxFo53B%;0wkYW~i@#i}R(7<8zF@#A5)~LUp@|+`fBUXfB(T}Hi8zsTEBU*^d}?~Kmm^flN29B)K?FrnFU_t zd_#{9X{bxU?S~iAi1_#-P5t;76!jHS6#+So3w`4kd`-ds?}(b~#Sc*Z0j{|^&}yz5 z-=Q^^2(*66VtBC+Ql;2BLu#&H;7$&xf&$f;NG<@^qVNs4$zMU1AXQR_V4W<17k40~ zIA$f)46dXUN|;`kK_++D=T%!O#jRsA$WD;V?xn?+#jeQ{`X1l1lg zU{`*DY$FEOf*b)^Y%h@Ke;^$z|;R5>gded_<~>YQ91W3P``H1Ed^U7fq2LUUd;kd(8B8< z?Jtl31($a>6cFXz69wv*cY~(>G5w5M|EPY3gaVGb2P8~Vd=OFpBq)LAf8L|V$LvoK zmw@9VLkSTdB}&wf531KcpwSI*e~Fs=zds^souW^m3ISZ}OhBu3l0HIfoy*|T7rY+2 z0$S@B7&}Iku)f?0u60o7e?UuMAzhpR$Xrg~i?{DUmLSzSjW82=UQB~j8%RAJP$dQ{ z<5`gR*I}$+6L}E<(T!GjfJ^}Qd0_YHU{*Tvcs0U?-9U9|H+W~B9TAm=;RjHq0qTMb zwHpBry$3}QywcdB$}I3=(Hm$^f>avJuR)atC^=fcdEx#ZDNpSIsfN}WCsc<|ok3Fh zL_~eTpblF9^cotf@cQESTcoh$P)C$cBI?vHp9W2R!TJ`pzWDkE5(=P-0S6{2K8UC< zCTK7Vyx8*+JwCFbE&FN|J8>kH7T z0Pw&U!;21Rec|Hg6kfvm@-(d6Pk3<;QUF7G8#pI(HopK_hg5TP!c0(rjdx+IIY47% zh<%6P8VNM6rt$)GP(GI1xZzVc4q$gDyl{ZH4%~M@zO@^&$}HxE0uFhM6=&dqLU0XY zOGFLw{^d}uK^k6yA_`uE{Lp3=c#-f7nztY|$iXK_H3;iVNPdUjDZ`+{EC5<}4?3%l zM`w7{AtaSoMARP+y37JEc%DMT6kdPqehvvqaCzmSizu%`bg5rn4VwDn=rh#%W9u_W zDB!3&K*A)&2NCth1wByz?=gCOXhU5Bj*lC9i1>J-NB#I167`4VQ$+p2^bA~1fa;Gq zX!XaZC(!x>UP~~%$bi-#5#f$OC9E$u!b*Rh7yBS3FoF7`_z}oDr1~QtW&#UrJud~HQ2nL~f zl9P{zYAq4<7!)1wT0+K%S>T1$185F{)DpArA=MK1A3<_8I4`MyR73k221Y}_jv%Q# zBBFjsFb0i(+=GTDyndMd5Gf2Zj1lEgi81xdqd`+YEPa4lKTLf92?bC^fCG~hA4Jp- zA5549Uc}r*j}LCBOTcORhY2D+SWKxOA5^a&Kn-K?c+>&V{QU&H^Y@@}AqkWti3rW) zzrTm5DQ?^cmldFzVgXuBapE4drZ8Xy&4YtSrq*#WFfxphAq`r<2HArHUPgV39UQ1=qj#VIG*H#a*t{1stc>7Icd;|nv1Z)Wo&cIHC|e=yJdz89xs z%RYeB2uFpNy)cV;;HS<*XRJUWqXL!%JLUi+xgC7KHghLP`1?y@Et%%4I+^5VMDP#FSH@5z}7&f z+eAQD26nrCX|CX5=WksN&g-Bx7ody-I@$rm1|RJJW`GxU2-IqUT;1IZ66y`%%m{jM z8Pdq>_WjZwr~;8l>vZuFdA$#8GzUXT$njQ?a=gYGAQ?M_a~cB!L(q##Y$msOb%0Lb z-$AIEm2?Z#%3%| zxCyC5A#;UWK+2)*u>;mazdeSdSukvbiD=(2b^CGz_J;lldI4Im)eJf>j;Vw#jrafm z*F3$hKLTEWuE=OU!UDPa?}9C}z>DfD(DVXtaB5wLq!Lg~dczjdz5$i9Pi(2*zCmtp z#>Yj2)$&YS_;hyQ#IM0ms7lX$}0!Jb** z1@~q2@ZNP5;uKJLd)OnwJH(#);eGG{2Quk+jf`dw=K<$hyh8MO_ zK@*T5>r2pl23SVu#bijUgMa^t?>D7Se!tlXJ|qz=$?@VDE4a%CZBoP#vJI>Bv=ZZO%|3JR3Qy&zJ-*ExW{Wdpc(0Oq?phLy0sREJN{BP|q8 zhByJ-jqR4Yr85g`^ZmgWEXJ3vsO7~Ql3P{7zg@dEhMU3TT6_$qMByd87Hyoe1 zG7G#YIs+|vAPvXMr$7xyQ1-Qc^FsVQQW^9Hq#D|8{NXyi~SokX;RicW!=9N_hTE6`d(NhhH#p_{OQB8C^R z^?wWu9K0p0;9)>W{S6wL!MTd#?Jx14{fJ_hMXBn^ua9&_%RPz@bl^Q zgb(bzQ@F{nlN~HUBXk66b?p z>Yzkv{pN+^aY)XBuHiTWQV*@yFZd4qdYz>5n~3>227l1{zr)b*gjbipk3vEbTz+%- zBg!Wcf9jV{kTM%mUqaXvmfz&or>sX&>(j4CAfW)RIk6KY#Rn1f>4X5#`oDwd@sSO6 z2{=Ax1R&yLNdWcZV@T8&k%tlWh0_sm83F1!uR*IXj1EKVi;I}`g+g#B=+wFGFd3E? z=OCpy@{tbU!k6d87KjXNz6?~P!&j0oJ^->FsU}IqQKGgc+=srj&zyco&O;UUiQC}Pg1D*e~ z8$CX(p)LW($B8gRd|U~metZmx`a*LrqP`H?2QDi>^~DCX`hsaMw7z%@s}&II#SNX) zGfG%ro&=Zfpc(+wzW~<{951dw%4MweL-Q_>bx8FCqNf2mxVXoX;|wA z9@u*EgAZ7ttH9yCj_d<6AU*I}!vw9*!2_#5aO=gaK_F`*z8rTDF(;x1IkakN8<47t6_zU`c(S*&YgJf9)4 z{3D`2!;l0j|29CQ4PGDp-UM+3xNhf2LMs1~s9*jKn)--!6KYg^-3SQ<>`?(0rFMU2 zLNaLlYaM!gWJ6s7j*l71i1=8NO#S#667^B!21I@2v=Lksf$F0@X!ViN255Z*+WrIX ztFXMVfUMfEWf1zpP{R5WekTye3ptpKm&qffJApD>7#SE|JcLwZ=!0V!ejv#ZNc{y~ ziVm(zz^iuQLu3tWK`un9!X_iCFb>QrEF%D9W&y-PaFqfbC4)_eyl4SeM#$?hz_$8+ z>4bNF+(6!iI9&~55_swa+Ghfr3f>2m0a{4@f*FSrl$s7Spaz;X2G@-urbN_lo7N50 z`ptPAD9YgVn@KvezzgNo(2NPG-&$58)o&-(LJA8={bmDF4z1rj(uYs|1}^lF2yppF zQhm2z4Qe4fVGShQkPJm)g3ZUjUXir*5g#&`1ztq2gvKMh!sCLv0+hjiWI)PSP)cXX zq<;B|T;I`jeT3<1)Sy;fjW4Ldp-x12lhnUT$O6s(FGmmV*{dKf0oP|4S&;Ast&b?l zqHTCX!k)tUHT>xj5kB^W*GDvDGYh;pvkX0as#hX~Pe(Q)e5PbmKYXZO-y6Wzhh6}! z5ADITAMIG{anQDn51QUjRM*DK(r9zauidpX!t)|X|VEoEP_6#k2@_{=5%Spl|hIjqhD)xcQ{ zFWfo6%S&xD{DKWjSYJAU^nf+mQz4&Ds}N_?Q*QJ~eD7+Z%xAy*p&+MCqC zzyM7ipjGnV%P2+uUuZtUWBujDv8Dh1cZ2r@LDz2vsdTakqHP6gwh;g=DFy9Re?1Wq z1Y%%sv%HXjL_63I9|w7qSp9yygS>D@)@AFN6=$1>RcM$pJh3ObRRp3bpP)fzALK5ZCuh zw_s<00(6B^iDdT|NZtzgFY59IR=6ZC{`bGz^~-BB{K~8r|NGxu`-P!|2jr9&WgzYm zcw?5Kh*{u8*aB#+)9w4m`0R`A^FWPRP|G0;hG}IB`_UDTdMEmMX3H94okTxe3=j(|LpZkROCozBqA3juXe;#0m?oV>~@&EtM4~z^9xb`POR>y+se#GGd*czjVHUgn$>A|^(X6dSV zpc)Olj+Y~zP2j(%0k|0Fu>SI5)?8=f zi%7iahKs0xMHF6C!bOC@A}TM^VIn20FC{?cqnvo%+uQN?|Np@MqA_6CfLbm*bN~H6 z*4hnfio^X^@aO;k0C*!u0M^KPIOpI0?k`y}y{#Zq0{)ApfK37U>DU}lySE0E==Oq0 zhEhYQX&FD_*aYA@5cW=)0}3pVO`WYNfBye}9oO9o(%F1~5#mbigS$Ydk7-}%{t^T> z1TG(d?0z4(qd;b%ILdI&zyIL&9LRix9~lHd4LPtE;C_TR<3wMgr&39=ga4-K`FoGRMLJtq zKmo|#4W_|*K>`piM0u?zgr^NP0_3V%)9zNVySjTp$^&0`^Mjnn!N2bUvf}PuQ1J2Z zV_~$uP|Ear7P6c**n6esXa+IC4Ql?ySt<$fDI~~1Hi2CT3eT5(|3Tpl_F_r)vDOd2 z|Nmz&KG50v@%R7#ovmMggTfQ+L{K*eq$99*Do9b#i}l;3zff{?ZH98t`9q z4ZJ62G7A)uplxT+(;4cxAUPi54zQ^&IKif{K$9x8b>G|j->ilrH}{!nH%t;c_z4+>}*}} z6BO4V5}bEHvYoASz=9y70$%8WPiU=gsv-Mt`*z!!czpaca<{LR0VOPF47>TU(gXK_JPG#_LP?49cK z^Z);#7e<^QwF1pQxJp=G+A%UPWO4Pjf}{d6Zp5((yx2JnV{?RpTSUHq$Be?T^*yB8Gb{QE)}FL(bzQv2t{%W41q zTYo5JeVGk*CCFqndqE`tIJ98)GQjO^{-p#e0YFg!iFk-7#X7;M;-v?u9S4o57Dq+~ zhGVT3pa=z(0+v5PrGPCszI8x?;LV>3P!_ntlX+1Fjth>N-}i#DSZAvUBF%sb4N%ex z?41fSGw4MXcn}3#Xar_)^nz^)$T$OvGPbGEC@bab2Acud*!x-@RJee2qZBUJr-D*C zs0(+z733a>&%hx7v$XjjH{4z(guSk4_V!JI*~|1=6RTa>V7ovC+3{9TD1hv0-V0(e zln6KP1zFEff>O4D-SI*fJeEMCV}ij8v22pI`aj#NtOc~tSm3&A)`~^ zVFwnl7}E=Gus0y(8K`;Hyca}rlqfj$lVm-ucXf%SXg-&KM)`7aQ&`rS5aV5~QJO=2UL?sX_MUs&&O%exnsi7N# zk-OKg9iSU~OLW055=lYQB!R98e6CcdhXT}6kt9%sOJK9nzR943!2vD;K_qCrXCgS+ zg2s_RjZIK71!9Ae0xwJ_K)VHy0fK3LpaB9<+uHig zi(8W*9R$#jo(4!UbbR1K6SDxQRRwCbooHef0JXIzV$Iinpi9s`jbOcy2J<;U z^KvX81Hh_4p@}*#r`PrGf2Zq<=Gqqw{H>s~I(u8eDqrkq2id{W*?Q#f|No#i8HjFv z!3Ys(-V5R~)Hrv8<@xvZu!6KT|BNXyKo#o#68K;A47^*luk+vk?x`Tn9WA0DEw7gn za$EFBgLvnXWGaUR>^kIMDSAsHs-U`mz%ybA%Dp`(!x|jStXij}i=^LBcP` z9V9>rp!-W!38*pa!4ddh)B!$5rv!3a=$B3>P>Z>_LWiN0>9skyY0vQD0@zH*3>bK2 zSQg8RJxF4ZrC=fnU^jeutp*BE(EQSifET70uTCr3X;Ea6u2V04Nwi>?u8n`KNHlFovPt zo&)DUP>utiCxPw!J81m`uWu9DQR~})c1Xa1t2+z=Y(BB&GZE{B4f;U)A6uaD2(O+_ zw?P~ME}t#>5aqK=A93Xn%;8}7;tmg24*qQnkTRKy^C`IP`_k=-r#*7D6*Vf3wn9Py z<{2zB*nb}wpyjQ=|NsAYf=-u*mbY2#psbjo5zi*@qOt{)_rc>w%_si94(R^U>v|=i z*Y`nSZ|IvK(7}%xBJpej-M$>n2iXJvi-v&nxPR65mi1>7zz%20Q|Ns9Wak~l3 z0uP{U>j}&PSDdG6`(LmCja><&AqmWKL3IP6_MF-{6Ar zMDq*Kj1TgHpta4Q(tS^J?HPR8y~k!CA~8usI^KR|T`s7QYUQx^(TCjn9?0af<~qz=41MqtbfhlG))M~a+BXa(oZYT6#~HwyT}8TmCAtNy1?!}`T}8S%I(;{QXkUqL z!A^m0SBY-l4V@g|YjZ*IZ2jg%9?0;gv4^o_C%OxP(;vCz#nML9@?vTuB$wgw1=v1f z%Wop~OMjRQI{&^7p5H-6Tfce14Rr~){QfZ+k>6RS41w|+clruS0~-!knFK z0>(!>UH=?+{Q@pI!HWYy6E%n>gpe6Ch%9IX8o~mNdqdQLR+B+kptW-l7AW^a)Ybe0 ziGXHn3gD~=&_pwMK-34$a)7enT?C}n+l8@4W!;l)yLPnE;g&CL^Z#mzyO49AOZsElivBk1z90-6^y`S<@n52!qE1+lEb zlKj1(JLy4YboYWp17C+jc0m(r~ur^T5Wepx9u48@q z7qq++ti7`plnxsAg2<3yPapmkXYkDdAbw&=VhVrDKk$*IAihFLZdwWJ%Q{d6vlkp& zC9E$ufhY7pJV=4g5dd=yPv8qLm}@|31>uF}gIs|x?7#uS!N31P=Ty*C1hOO~t%?DshCc&ZI*$PV0 zuVauM$r1P>0TvPh8*GwiVVo!+t(rxanRAO2+?kcdm$4iA z{%0{{fEu$w0Wa*!|NRFo$#jzGZUqG?hVtiS$jSv^%AsA_M9|7(F35CHJSZ;`nBloo z`R_k?*{Vt>6UfmXD$SOlrrk^iP+Ady7GWA{{$7<>+= zo3oRL38IdFJ$PXURmI$T-a#U;x^p1fF(0nc09Rul= zp!kE&_6W>j7I@)a2CeiUo%0nXpw2m{=CFSA;!Opl`s)U_`z1iiq4PaCbC?A{5e4cG zB+X$K0L2xE9WsYm02C1*w#OXE{7rmnUP^p!F?g0HzPKc@s07YS%SlWh@_l(c&A1UG z1#Yk6Z68C&GvMRx6UtB<#SLYUw1z#%z~psSb=Iw* zZM~pF#X(|7Wj)BOP9D&{1IVG`AZgg4;vhD>Lh1Ao;DFS{&`l|zL&ae#AT!9tEEX{fypSz`<`zgzQI`j*DL`q``pt_&MTmUk08$LCCwvwm#%-xOAcVb` zpqVJR{2{4)+fayFzAY$(gb;Qog3ZTYz9IUvM2y!ySPWYKo(GLEc=09;bp*IS`(iPq zd;`_hUl!B0e1nvA6wasN4S&$67>@J8RSQs~LbL#1RDdIhr1&6W{H0(iv%rfxIq31x zoeyydI6f+tBI2WEDfQ!n>f;M5VB-rBpz(!Oc*hq&jYaSb63Uu%_@o_t3b8T|Q6DAc zg9{;0edK^v9|h$>>!WB;j|a4jjG-6Yg$R5B>a;f>0S}l`r80K^mL-wtlc^KS?D&8-iXvc6o# z2yzx!xb;AZU3cq}fB*j z20{Iv00nEoI&M%02D)brTov*lF7pFbX<#uC5bHR&3kPC>syR>>0bI?28GAvbK&>Lk zFb|b(a8DT0;4z^w!(`#jj(cM!)iJ~(Q96BJUK)9d|>}%wua#}f{z=c3ATa@5FY#a%V!gzh zRm7FEVE2(*|18Z!t$(IwLfiwcX|NMu`&1aA^M#-p@tvO7%2&{YQkEC!ri|Xu1wk)D zL3=7dA>&oT1v+ny;bjyf14D)jXkzhnIyn9Ix-JNK5eshVf?5=vjJ>W)0$%ta1RPm< zT~`FWutE~y=yhEa@B-BIZ$1Ljl-B9U)9bn};KfnU_#jM(uh(@$zzZfMeFD9%TLNBy zHex~abvlaly6y;g0oqjq6On)pLBHk%ZE!xo*a=?rAW$pY?fRwH$8}HOiv*}8p>(;^}0R?cmbMsgIJc<>FChw`Y7N9AF?W^ zUe_l9FF=!ca8)k7uFnEqfR?<#h1_~U3p1{QQyw%3JYb6)BGxhsy!f92O?Hr?AR!r4 z6o6vT`pt_a>5vGAoDq|-mRVrI|NsBJ7#J9G))JTgu%{C0iGtG`?(_|we<%6AIfCX% zK$?Y&NY}P8fv=B&h%=LTf7=sSdqf7*9@&X4zd#e)aqx&7XkL=gyu-^>M0?~?8aM}m z+9NG!?U6&N;Pwc7-eEaHDSFdoIz%b!%Pp`u1cn!TVI$xt8hgo zJ|5CEXx8FBZcFI3QQ>rsQJ(eCc#69y)KLjGn*gDgKp_yJ@|mN zv-QVc$aF;(6MTGr`-x6)D+g?t1FS(+03OeVG^iLrtsk%pm`W8v$}$!(FfjD?g2u@M zU$`Nuyat|k05vusjieIRmxq}_%^sxI7--}&@C5^C_tOy$Ses@pSQXaR7-+9Pv^j;@ zZhG_g|9_Nr6UcPtUXXC$3(#(&W`rGHxJ>n;>FqKw<tugcVMZ)q*O`l_j7xf$%mlD1~+g)<8VfJr%;OK;J$h28nT4MVPRKS>VODSd@w| zJO)$|f{JGAH!o%*1mZZ18(22 zz67}eRPSfO$6Eryp#y0iXhEtl(9#fay(I zxeK6E{n@~iwxB8&R@Z>o7$X$UAag;(0w7r|BNX_gp;g0Dh#I_O7~p~(t^&34fDCj@ z1XUgchg6vOdqFKS&{DlG-5wT!y;DJ>B9Ju(z8u|wBB1>{ptBzYqCuxtfjkABAb_4) z1r|9_0vhfKQ~{q_#q>H1>;Vh@^}Qfj=3Y=NLWXS6<{LoLP~$-J4PY+%Cd8L6SZ1cr zf}5aq+ANKhVR0rh_-pp_4YBB15N3sANM zkH@~40cqFUGBT|HRl@r69B8jRV;0kk>@biqNLhIcOb^G46o?*ZhUN&!VtEmW5OM?! z${lxrUMBbjltw`(XMuAzMsDW_$l`e+f~463tWE^9%@nc94Ky+dTJHkR_h1HiFS$T% zD5#W!EPUw=;S>mZAqi=%gDeeHfk>ovx_E)lYJ+flLpTkBUVMbKxKY)$c!3*un=Ui2`K-9xkTk(-f&Qy!t-y&K4yUz zZ-Y_tuU`--|ANw}^_v%y!XWtj~>-}-8zXXk! z5E_q&3`OL}4?*BSZ~nnv<_$f+^+2f@ z|MpfbM0Xvu8W7y<5dk?6ydcdQynL_JtGl%XJSC(68XmCeZmj_GR6sn?U;?P3W*6BH)D_L=btP z0b6qqQYv?PfC~QZUQqh%^bmm#{ef2g@k5rbh!m)WH~BzZh#JuFLJznP z?-D2iax$nzh$?LXmd0rEL8h{hrmZ%C)dhkb1)j%(3?ra6`QpHepiMrIJ+L+^h>hl8 zCjQ=ephQ4mTtPk%RAGShqgEJT5sV50JV4679y}Au3|^d!xfGED5;jQ7Q^01Ogq=DO z!o<-T!pHK`4NHUX4md5qD~vfuK>L4vQ7Q~sA5evHfQf;@`pt{P07!+=>j~O8$gl*Y z9$IJII|5mA2pTWAe1us5G(HMqpExo)b}$&m20(5Aw@*QriGtgwKA`$=EuQu%p;|E5 z4^a!+_(MvFF98`V&}tbSKTtJQ!upaGI@F%g0IJ`>y_mokGoFBoH%OK81XN+6bftQ5%8O!)hZ?kpL+tFl!@_98?rs8-e)z+qWJ-3kHyI;ES6NQG&q; zZ1L6{ENWo^w;WXmXkvwbJ7h(B7SoF-o}hGtR2w}2cSF8(gOdleHUiZ*;Mxe}rGOVp zy+C^4wGk*J0$xmj2$E789d{4`EnYkhZXLjic2KzmF51Bi@azOqT?7(@Yz6?;MWE#- zps7%JU4$wPnx#nV#Hfq*fNK?`x@aFn08tlZfCW(NqAZ9QX!wE9!18Xde`pKjyFHV$1r?i~F9C8VEdgtpZXFt$*T9L)O28>YU)yi1i#E zr$_4_P}xrp46a{5O$BiMLa@I@sDAnEj;LSmctG;}mw=2lX!Xk(cWC`$2CZMR7+x%b z^c`%2LwrHEY|Fr8L|$}2WFY%(j)U7&kXx$3r`Tt~WI??$a808C>-)UF3o7{_71bF? zO@ZFK*>eY^1m3$@2A{R&mP>If~h(Pxx!39yZH17o`?NUofPb{r_DuF%}L>-R0s0L4$5YlpiF30zS@X#tGP*9;& zNMIpYmkQBuLamUdqE|>K!Kne>C0cWlS>VM=2b2nl%N|rAfyz1SH!u90Ar%s6E_Dk? zF|>%FIo=8yC<5h5LN%4A zBci4$j!?**-02CXLIgQ;M6aSf(I z1bk8}h~%hcefb7dr?rB3ovj@IKzqFZ{Dqvz3mQ!avB6~sh|vu;{NMv7%T^GVzjrri zqyjuF2htz-q8Mhy2k?$o5Ghd0`mz&j1xU-x?_ig8e`-Dkz9Xl*7o-t<{DnD0ul0u# z)|V0J8d@)b`YIsvAdY-3+}#S|S%aNi!uk?)IUY<16xwAx5MC!Z?7PAKV+L#K1hZc% zf`>7{Tc7qqdKR6nPyT|ue*?+;AU4?hAVzm9h=g>s_&sqHjR_7Skh1230)gFALB?cX^67061+7yGcyZ?{s5*i)31UI&!7gb&P|)2AQrg+l z3+k;wtj|8+!@qqCYa6Ji&QwUK0elIAjpdC5Tf+=uE4rF-1i#uRF@LCjPN5G5Y5JBWx6f}!NaMe3# zMhP;v1lrJlymbpwasaWx$pOUZ21~(`18Bp<@zw)Kia~6!VlZPbh!m(bhv>>a;M3c~ z3i46+RFGManH%N+m2R*R-CIGb)4F{MWzsr*oJ3x4glp^W1*?Zl>jbH!b+@pBy6b73 zE?g$~6oEz~vmR6ivGU7G@V5>ZbfEc)b2knIf z_dki)p9^Zh5>vltS|aNAAS+OA0nfkhK&#)KETQ%LRB#UhTuEtw*6JSNu=Vr|b1Gqd zSq;9*0%kAd-V@OBiEi*-(*Ve3(ZCmH%|MnQm8PIWLO{6!dZsq$Oss$`ju)puUCbkp zQv)H>@;sm+EpX43<%JA*7XU{mc>Vy=*9DD)LiYYd46d7CsgNlmd4j_33 zNHGdJ$_H{_2PlX@jSA4dS8$mCVnD9PvTg;9dlEPIp=<$~`vB=hwA4XYw1GunWd?k) z3)s>8>%p^pu(=PgN>~xv2_AL=3&Au)&bk1Z4k=Ke!%mRH{n3tLcwi0+Vt7M;#$9HC z7Y9sG3K2zPP$2?JP}Xl=q?$tt5$OJv1t9g%a%9cjp*dd;&M)}a3nJFv5wYL(!aZhz z7d6JvFoZ7`)HZ{J9C-cRjeCgocTet-vHlJ;KM&5|80R&D_eVfBEewM52~AB=_Zz92 zLP7ygIZ9G|5V7Ai;Q{FWS3~spm~8@a2{=A79w6eQz` zzsJB($^)?+w8rMO8n|HQc~Oi-0myZ)Szm(gXn@|AQ^Et8y#lptUvoj&p!Jd;;jGCEO53a*51qHArP60otgw7i>le>r2pF(Q847 zj5uiKpY^3Y69WV2dQp%=176(F2Zb_Hr3acTf`tVn=-6IZKn|ap`5kQT%JPfgJzB09;eDbb@D|VEcwaE%4e}kUV5_Zs3bduriLcPVg8Z zLZ98V+k*W^^y_P80G@mmc{VmAf#&N-wwK@v(pPy_jiMDrvM-H z1geuEw@)5-5QznaHS~O?I7k=ZxPt(wlSF7DsmK6yat3G$vw1Iw1kD-c9|td~0fjKA zNdOvB1~&;n49M|M&~Z8`2oKb{_x;ihTC4{$qLWA9^+{Nqf=<~Ws(43wDNEy7w_IS!H@PbblTDn1&r{-&eYHUyuVg2UCW__e`E&!w&T3^RJ9h&tu zo~nZ;QsDXscYXT>loq=|>zU!_2|4JYR(b|{kSM_JJh1ur+aHMi3gp7VqP zo-+%)_^ky^67UAdDqV;xKqXnkb4Yy$D&bO|Q@_4LZhsJUo)F&f#dDsNixLsui1r>4?TZ61m<3++Xrc$VHPj{G_Qi=8knjfWx480xw&4v4dkW7t!Ji%x z``_W`nWEnpaN{Lt|GNfysHkc~;s@G)c<>Tw|NBeg!UY_Epv{Be_Ah9tY3BsIg$f3{_<@eB5`#9JUi5-%P8P_0*pTWQqLYWu-SGnU7!ZeYiDFxfxs6EFj-JELCgtq@dz$qdM$})5JG&@d_Vv)9gS=R zOW=#UkhTcK@tt5VynGLy0|3|WrK~S+L&q5)>nfWMDg?e*0nvoK`Uw<>kUoC^q>T{x zB3BI*jYv(ciJ;B+;3ky}=%{MYDJ`HzS@S`iz!#wqBb#43z!$F|%^KvGFp6*ig_?HrUeFR^ z#yTv;xi%C8A(6Fm^BynEXsu zM@)WpgSQHS4xVIs9dR7os00Nws7VBBRDzpCAO_^@PRPNswcwl3KqIFh8R#ge17zeB ze8fsX7Q>4zs^FMGZ~GXjgM{I2AD4H`0xyJApk)lC?Nh7-YWskS2kSR4wyQx(8*mxy z15yob`$W7OZTo;LLm~)pd5gDxMn6x{K^3)9Hc*8`19r>6=Hst#5cM$;<1YapK>HsR zp{WAi{8_C6aRfLmM0`Nh$0;9(t9M|o2fG({c!0-WsNUblZ6E&oA+{=`M#WNPNGQNO zgM|kBj{|nz%MZ~0EhlXCEBIt{F3=fApxYo`xPr<~P|K97gx&bS%h?PJ4E)<%-yD3v z!N1M-E%!my|Md(E;F}O0=>E3{GmpDo0Tma=T~B~0(5WjYKt+b@iRRi99JQ|9t`C}D zuy^~OIQWoR`(UT*o(j=!*Ax8PLRjB*`|i2?h&%L3XXusJ(#^Gde$*jLeZP767gTZ$ z$PKEXrM93GAe$fjYd*lpzaDn=M9U{;ffpC$p-BZ&fEdYv3J{S0t>3&TQ-TB+sC4c5 z1i5ztG!QZ46KQD%OEBXU0*61j@qJVgHNLkhLOg)ewlinI_JJm?*jqXa=tv^ zNp5gM;|NDur|XYySDxkrT%E2Dpch?$BJT}2^4{=ocl}}M`lhxVqV+-G3(%AsWW>Na zRG?H8Dh?h@m=8`h9It)hf^2~=Rzd1N{%seU4>5LzUg>tdqRPm?&``38fG2RyK*I-r`Gn}7!P~=l`ez@$ zFblkhmW8G|cmc%)btovU{rCbYpFsUHman9xHE?|5PCwA{i38G2U?hC54cI*V{zsJ0 z_Mqhhpi+RPgcWpW3=im*m=~F#R>u+OcKQ!rLH9q%pnIQN9uiOB^7+SCi2p(TC6;fr z@V^Aq|5Q5f2Y>h=`b+ZQ6Z!?3f1vl5IKDFryl|6750$U7kWhj4mju2e`b#q3i3=BS z{DB7k!1?a z;x@1yovol;*|--(h6MY0mK!42{4J$S3=9yyudlx|e+%et2navOHO#F<>tzL8fp?Ij zFMo?1obTcn9L(PW+U@=_7*wb31!tlX)|U#P!3X&L5<;w?PzT9@g0Xoo$ZsqqtS^6o z7P5ioNk9PuZUVfA>^!%12y9qX!uk?)?)FR2#Z8d&en5wX9R*)00?MNx!@5zmZ-8t_ z2Va^2DqJA9F)-A#zU)J@i!1O&GsG_BQ2~fM_yS*~BN+r52SBz*An-+`Bq+0RKrT;* z9MuH6#{tPPQh_g&VdjIv9TK7@0WOXuDiAib%dLAHJYWLqQ$u>VAaA{vfrx_67KQi$ zbVUgJYu1;?m>C#eM?tT_C<%m|p$&=PW^e>^lyE~B0wof!bs)xomdzp=E)5ZdlwF{5 z6x0lO&H6HnnStSD7pN`;FNX$&b~yMR6i_(`au#wZa0I?^f&^0cR8X+>x-bbqhEHC5 zHSYzNm!R`z!TLcwu>Mw%O2~O^uT`4&f=kd6)|Vf_7m$E>$f`i4DthYf1l#p;HmI5d zpOD2+qSOpcc0#a3!U@^k3d+ILL6@E=z=BI0iwaQkhq{En8B;LrGG1D@Y`uyBAc^fY+V9Xcq*fHl9xKoKSZwNFj=RI!qo^>p_l9frKNd zKC}j3%2Ub(5eLON(LxV4IRbj_LFOkIwXh9NOuj0LwW%;E^JcDA2f)Ff6j5lWEbQFeWf&q%VqX%!u_R zXx{pG>kOm?cOW*n=mask!BXg#m4IYWhm9cW_}7C6pdbT<-MwICNULO6AgYjN;$SLZ zt7KR@L-;seV!Nzlmk1~d;Nwnv7+3^e%o2pQ)gax*-~6C%BdD2W{pN+e2&B~pZp$74 zsfLa_U0`4l7(Fcve}8LKmbxJTZvW%%4`P|WY!E~pL?{r1BxmgI0-FyyUIE;{_ySsw z(u{4q2!7rvXapNv&Jj3&{igt;HU0=(go4)_zCdfIUJ?Meepz4oLuWp+7+!FI+BZiy zY&lXG7)ymf)nXRQi_ehB2=GQ^Wtdt4*m?%g_|W$okd`7?gUkyf$QV6jmmIuQ zHsk{p2}q^#MOdi}Ds?+OAZrsPUc3XfyAW#=IRdg2UfhC+HUD5Ng_Nv3pmhka(R;{X zJ^09=jSz*%ixi=Il)-B~K&KQ}NHCNbf!!7b%x(g0;At`u$CZZ1r8t4bLzQ83mhyiKtKuT=>UeK|(h$#Xc z&_as_&?VWR72DwT*Ql3dbMm9t65UflhN2htU@_QYNBBxf&{PEISTK+*Gx&rJG~Faz zL!t&+l7hBUavM0p;dQ_PHWq;w)3{OUfbX23IslXvtlzw_=7VG!a2;?0q#9ZWTwxpD zbpW_L0F5w!%L4-UVG=Q(ufV|~@Ir?R8q)CLvfDgJ;j6*HBJcxx_pb>Di$GFo8qrt0 zfZdC`d<2h|b^CJgZwnj*>nWddqZZ9qxgnu|y=VrDg8fHqd=RnTVFM?Nz>7H?=<(qV zbqP4V@8Cql#}Q8I#|PEtS3rxU!08pVif<>VU5aab3_gYgnqEhgV(?o-oVh@?7FhCy z4mYTh0M}X{&}uCiE@-V43GMi1F}yJ1U|?uI!eQ&-=jvX<`qCaI!}0<&E&?ilU0*cU zzF@3neW?tSlX#H>S%%mNUWV8VUWUlY-`)Z$yn8{u`LEKufS*MG(!T^%F0Tt9Y<^I4 zJ_W)Ctq^RkeF55ZcLLOd^@Rw7s_EB`5H_gG^4b)_26b3pYeLwdp7Cp02piNN2CZ%c z^(&yO8!Mp;8?t0x9D>x!ovv%Z6_&z_jWB@)&9w^{O8Jhvt^sXBKkm8!M0L9^uy$Qj z$NJI?W(3EJdYFzoU?X^5GgBv<)pqI>o`&=k~;%`?6set*5K>+Np4-kJf zR|qhc);HGP0j+AS(FUCjdM5ySx;y3`uJ3H1rI#S*y*6&%3!)iHwLr}X7Em(+oX0@( zkEqRvLvT%?!1n;P2|zwz_FdBn?$^F1XhH+rgxB$eYzslCMRg*$rGvwX@^DQsUopK7 zfdny9{}kk3&;@JYWwS`);LbUC9~sDB(AE)X9~oG}MUdqsXch{6?Zh`$P|Ak4UmEyX z1YTTYf|lZtKCC$-sQm&e3a#I~sAh%KEa39IgP#R_PYh`B(G-59_DioPgF82iKrlCp zKs+~#Kp8iSKod8MKp!`Yz$|VSfo0q*0{ggG1U7NA2z=sU5%A$<5isLr5eVaD5ny0o zW?*J!W@cmt(@Y?Wfti`%6fcXwDn1s0IzASGyL?#HF@V&8E4NXC?jb-@dxD7e9fJ^y zzzZJ+Xi9{)?|w5Or9TcKM0-L+i2Ch`LDRltWkPM=ePx7%0-jhVDL#m3-%Su^5qPoZ z-{1ccQQ&!WP}9-+&5LZPOTgv93}HlkED@%Dd{Di82kMl8+jmqPpNM1twe-N9*%wZX z;L;T|TlfR5rDwzdZR!03Rg0khG{cJ(kf8|MumEp`64sYbpfVYM*cljJ{DySOF$N?= zUOa@zU>%TH@b~Y3a1-%MbL|(<(0V`A&@7P`D3vpr$G) zTsU5US_L3akT%Xh+$rO${{8(A*;xwO8X5Yf8+uAHXutqoyV7Jh!5+(SLi#^Ybiu1* z0dW?A7w*5InGRANulV`*f8!BQ$_3qj{rB(x?x(SbA@?>(fRsbW6I8^J>SH|R#88nU zsXQa1eo2sE5qRx(kN^djXBiTR@~lLH`sLZ6sb7}<{tHixlaS2}dkOr26&Zr~Hi3Gmzg2>Hm ze#8#iNY9*ofDf`)9Wj~?Gf5%v1?V^mP<`z~E+ zBJmq22$4GePr$X(m*Wl`pxJkDcbSEu7PR{1OE+YXAqUii5=bu}j zz#?d40yAYpi&v_zIg;Kk-I(2NSHlSDp)>LgHVw|?^? z0%SS7PFe#}4y}`R$PTYM3AuO#mxrL@6WpG}*nf{@KF#18YN4y}4PT)PHXqdJ2Afa$ z_<4dnsQ&u|jYdTM_Z8v@aCw^{k0@_T=#`61vM(Beu0Dnas;EX!SQi} z0eb(b#{d8ScbXx}_v5ZVKsgv(V)^oP3kJOaor2$dgrmdteYY!5H%Ie9#_mv_POjG+ zU9RtS7&~0w^KWx~-+G|VxZCx|!3P}R#nhl36kyHqpam|Vd-x78yZ!)6Asex`+w}*y zPX=<1^_v&hKNEC4nrDbx&x}~Fit~Qk9g3j&uMg;{$`$G&=z7%yiYx-Z|Ns9F8aqCt zNL;!Chc~(Ld-M}({BHe3FoeMN-GRlg3MhWf5%JsYD$wcrrrVY0m;(nRm=a(BQ-Tm4 zCmST{1p;3%Lk5~{gF=GcOQj)-n7dsCnh$Vvx(al=iZs7q>2wu&?FQFz5mM#x@4wLa zDI12s~3}5%{OfB4DJ#BH*IJA|R^5A`qj(B2c8l zBEZ1O$i&RT%F4#c&dJIN0uU0+V&&xIz|6*jRs@`%@Yi36{Sy43g@T~{0(kaID5$Xr zywHAwUew%r2MJ|R*`lEaslPx?H4`=B${APyg58U|yuq0NC2BuA(f$XoH5O?8fzSWy zApgI{@c&yR|EnYUU!D5?C;7f*{QgJm7vTr5r$)ce5M{rJf(B^*{}sCTZ@+aMzHb$067DKP=jer*~UVw^W z9(WJ&%)kHtvCKs8d=2U$f+b%pdIQn|o{45jU=#Q+YVd_kp!o=g^_LfuUW0mw{4H&u zlD-w9ycnVUKpd*_WU%s*=w7H&4}?(gr3NsivIwONXpZ28C}n-A3Y*wwc(EC@ z{`LrmZH|XCXooyEOorvfOxTq73h$a!Dn?gzW}Wf z1}O^c4ZQ(6CNkiK(Q{CE2pn&P1up+K*9V=g;LC@=VgcQ~AWq;54{%^3bqt$927}hw zg5)8S!d<=(J3I=yUB7hszUc7C12bNBc;q+N-eD-=22DePrgK?dJAq_83Oag0vEBe) zTFeeQF$l!vEa7_%>PQ}UU^x)W!0;Nf!<)rr4FdyoW|u`N4BY+fLN$T2gy}VVx9gW< z4*ASrt8RejrTMpcIN@#ZhplGS@GNqwpX9O{UoS|+X}Lqe_O{KJy4zB+o1=Z ze&*lik>C828M-`8BoHxqED`|H1-{b~G}8?3%?g0->*{v>!oSUF{wCc#pdI1*k_2(udlk28*Eds99fDFfuT_ zo(N0cb}vC`3Y^E#legXra2{&~rA<)l??pMd<;T(qzE7(gd;l#oII)6<$UQ)Q1^ESZ z2w^}s_$pE6UQpr=eBlkYg##4R9v<3AQk}h^`>H@ae9%d;fgV9G6yQpmD|om|K_S@f z;DR=$&kQ}!AOJkH&m#z0F8QUKqdW8qGx*HWPL9{65GkfoNsz6+UqFU@uLLV$0=bv* zwJ=D+!zKHq3`iennL#HbdhqweK}N#Syi@_nVj!o#nDi79h@jewSk6Xm(u?W2Q{TNzdK*lX%9)ZR!K&7trn->e7 zL8^}K|DZIMqQ@d|bXWw` zbXWu!Sipdhg$Ya(BA8)qj!}BxLV!Sf56k#X!4uR@Wx^9k`oZo8u=zx{e?EdXtl)3| z7=qeA5248!K7MoiF~kv&_KzV_`^S*_?H{VoUw~${!0jI@&c~j71ZwYq2TEUTdJHK> zz64}&pfxoXJpz@*C9E%{5hLOnkOqaVo114)sRO8l&f<6>3>9<@a||!l1`G1M_y_Ie zE0pA>m5PA{MP5XLOLGqX{U@4#W|pwNJP1DD7BoT)DXusIvcz7Pz!h~uZ$JbofG;S2 za3ADiq;^IPs7nrNXMhH_H6{B_g~L{dXefdmosy2)xL-g&y3}P?v!7$P05wc!T=yU(9J6-jKSCrsv}!!Uwbx zvl%qLh5I}V220TTx0~qU11eBJ3qHW%!(oXC9}!FHhY!`~!$Avq!1X%===>nifHSW3 z^pK-)LFGSuJOj0ihtGJwyoIRWFWm;0$edo1khBqzO^Cfew=gi@>V3<1S2~(GdoS zx#&xs*k3oG&jX*n2?`N-b+^WvMc~EiYtRG=sqT2Lf~q@EEL*>M5dd-pd>(iUNIA5= zJ77Kd>N{}xhPONg&Af1Q2g1*DEx3VNh$h^?SBQem2Q>u1>7R=2+n3jo(my!Sg2x&p z(9{2QX!_p|Za{(;;hg}t_Bf1BHvjm~KlNZIc!2^WM}Vq3v>Xw76%_wSIieJ75@;<1 zST$($2RtwZ$q|r&9PrJ7AD|6E*p&+C%LZYsXwV*$<|75TNJ+>cd$SVGQq7D z(F3(hK??>MUerS@gq#t9SUdyDQ=sM@I8T8X$W2N9Ug8!ER$c>TE|6~2%mo&KWiGlc z7&N;EiWGRJbg*X;cp-KfB~zAP1Z7H4(zAZ^V)s=@A_dnU9w61wJQ-p?`0^yU;Xxz; z&R_W3gNXW*T0Z9$spKY*m@bYs4Kk; z2?acHLsEPY(OwjAVi9;@a{)a*USEQ^1e~5FoDlJ$;za%Upn7`_Y0gA}M3i_ckL>+`TKK36^u zvL30%05y(4BLrD2FU~;f9`Jw#WbwJiiycT}=!?&JUd)2XqSX$_;|a~6ZSRnA8l4x} zSe1h-6OMo^gBRX7HmB+n8T^Cm2aJ&F5;-}RLb&d;zslqu5j#GGrv%!@` z;KkB2&}<251+tw+s&Kr{Loz6+p56gc46SdDxDM_52EFJbsk|ei{$X$j_5V&o0~TKY z{5}f_PH=h0;f^TpMBJ%g-VK`ihxIIK{qyw#aCAK6fs zfa7C^2O>U}cu+q+s9yhouI~cZKZNgtbA18ol|niPAQrq^4jHZnUE3MT(d`89mIs{% zRYPFO7uIJ$^#HhAg1#6)`!uu~n#2U!ybDpk^8{Eu=$gwf0slo;d4Vo?fbU2V0S!#@SbupTa}re7 zfpnvGuD~K_ovUPs1@Msz(EPS1XkRx-F*A54G>8S=3GJW)Iq3x~1UUfANu?XSPXMF> za@v;*2S=xi7|Tl|$b|Ikpyt{a44{PzF9Ke4gU=*pfhN2X^nk#`hYnn0?}^M^szCMZiA`s0Zo_3Mv8Q=gk2MU4v8qxhl%96{jtphbUaqXH9(s&Mm zY(eT4Wq^(R0;!u|bGj@qG9hMw3w8AFkPNK<0+Iz4@8G_V2H19y7y3v#Wx!%GFF^C! zpbb`_It8)?34A^Xc(Bd_aaLI<90LRAy*#6N3(Ed@-LN{FVWyip+SB7J)7yteL&wi}+(!c-z%a65Q zhEP`^)Kv&|4MJUqP&XjdO$c=hLfwW?paQM@SnFK~?;eD@51~MLmf=|IPKbTG{{8>Y zaIAGVgxUk4_ClzA5Nbb!0xzvS)_M@aI|QK)Lnu(=jNw@8Q3&rCggOqQAZN%cfD0$k zF;bu+32`vd@mA1j-w-j_G2!qI3b<&8uML5BP&V#El>4*xgGyv@2So?1-0#{4F82+f zYfN6`Ba~{ODUF9HWqrxP4qA~5-c?|D#QQ(|7{uE9m7D4Y_QB~E_4~zm*=4; zlxH!&IKu;$?r1Ik_y2zvnCxf;C4+{&ATq2(4Z_GQ;e#*=N{nBA1kY`PLI5b=22JTJ5%Lfs!gLHA-V4>NGK#37Z4wOaUa!znLG02Hs4xk$(Z6PWITPG_1qFXVcP}XX17ED%333Qh6QdNQ2DEGpB;V=5fh9%p zw}1{Dfg~oRRF(e{bd(3UnE-7ta0Fxtyx;-HD*SeJ@O30JT8@QeHvaCj<^Q z4%-5E$1qS)0SbDM8^E>+y!Z@RMhJ-*uo%ya`w%fC5AcEHLG9Ax4kB7`7l0i7n)T%i zaJlrQyBB0M593K0YTmd~Jo1D_qI4Gvsrjt3ug1``1#e`s9sw;Td#02{-<9-QrBJvf~qxe2riz0*ksVl9UH?n7uwnVn=no^V9h0CE663lz{SfT_n~fdbe9 zNNXH?&d%{x(0vQwVB+rvv%&3ckRXI>4K84bovS{(9n{_i=|*jDgGF$*w?VSZ;6w4c zr-Im^@e$WA-LMf9un=Md1PC4?{9&{%<{c`25}oi6n6Na3mwbMW(+!YNfu1j+kb*d0LMMf|Z~>?9FO1OhJa|CsQ)}_;za`YW4Bmj~UD|8} z*L$E*MFX@hqs|6!?~?VUHX{Q=7DE=(i}!0miji9Gf{?}%%85gWb*G?dbx z#K9Mky?5ZYAEHTW0crGt8mAGUCKG|1S*EVXoM-CC zlExzNLSzjzg+N*rrK>=#3Q*))zj?899ZFj90jYHVfeUenZUs#J;z8_c% z@i_KM4s1SX~g3&r~T!C_e30h82S_{nyU%}}e+^cYOA2+p1YNVf4H zD0&bxsYpEqkTlddP=*F`(KGZ*Y(0g9)u32{=V^&77J(NID^T+E!eyX54N9=qZ(clI z1xebl@*kugnx}QL25+9mo)fW)g7YW-`je#ftqIwn^S_os!xY~Bn!OSdlHm45MmC~- zQIbtuJqmL@*uA*RD~$6~Aaj!x?!UopAO8EWm##o9DyOc1gaXVnSZJ{SI+&sDg$mI9 zsgLlq7vRe!Km(Vc3KTL12w{On2p}xb;qD;TvDRqN^=HRh9sWX&$%3~xK;;}_kqUe? z`|)y6DGQc-ab^WL_kc=S2eeXl&vI}nYtRe1w&=w|gi;$cr4u1aSzk)B!dK?>_NM&( z|3C1B^-_=x92ph~Yy!QlAhCcKEMPH~-X7LOuo`hNAGW#%stPogjCwA=*7CpqJ0YuU zO4uRZ29FoMxD6iFLOOObOCXD(7kq_J;0r&nqyRJcZawG?d!Qjef$m;V5C-;61ueP> zdZC7?4m2l&AGTsblkAa8#7?cY_UXejxxInuT$@dqEMxzrGiw z&iWuoAxHpR^nw`t+gjIx`aVC{N+p`Xr!_Kw)PURsHVhQ|a5c;zHQ>n%6g40b&TKO#o(w#tW1((23^?>wF+|2DAYRWc`M*L3bIOx=S3@I z@DMBpS*0ZKq7X?8vN%cLMJ!b81L%H@ERh$!5PtIuM*j65xou0+!5ofuk5azk{A5RxJVLh*Hqu6vrLF z+gD(kS`nJi^F}F(riR@N4Bg-ff`czuj4yrP3JQMM9v5gd@VDFowY$L%<6jSUD`Zk* z=J%ic>%jw@Nd5ygD?o;Tc8q}rEJ3LaT^Gu5B9aEAVM`QkpkzhZG6hK3!7YR8!fhGG z5GGpBLj<(>8sn>1h%v?h%O#CUkG1+h5}MfGtPCeT zT51tPZe|jcH9GQ%r6wO5Lg4lW-u4Z&zJRZHyD%TMQFCBEzD5mU^YM&VrlMIDiq|S| zfD^V4>L2)iO9nJcKFlNNA7b0fM2uHXCx)DhtJ@{BS>dwEIO5NI!h zx=+;Z??=uBwM4;-E?zjz0~dgxmZ%F_^U`Q8sNOAMeK{Al%ZTAc2BgBbO;0QX9qk5M zX$p>sN}d;~aIK)a)(f%| ziQ~mS$WAC&GX`|J34A{*%ZmjNS)>XZG*gJN6UiOyJc$>DSe3(eBC)&(#3~On&IvLk zAn-y9q73XN3&=8L#yV@T9V{<+;ga2zHi=q#~cb_}ifU92t&}bm^ z_&88K0yhoJGVizaEx_UpyukAZV%AHZcxNyS=jA78&nyCDlz2B__Y~y z@jY~P4Q3_Ija46Hgack%W9+sC*+c2L#6R#EuU}A(6gvSvV`G@gxNz!W%JO1ZvI_ zIFDpPEvWvRf*#!2P?tdJzgkFmgW9i4YH1tZR2eVApB@q6L&SM48|py!pH4;(AMa_9 zm;#5-jygp69I2yz_)vYm4pfX$yM16e712IWng*(w!ToX{wDy6}RA~Ev9adR0yx0M0 z1=xlJN4S=-zI+QFx(Ba3tAkX3Slb6|FFt^KW;ojiHIqQDKx!XMff>y9Vk=xLO8bBh zVjs9JMxP!Kc>z7|;@|@=v?f9)e2xHo+IyD3i=&YC2NtE!i2{)qi*PG}tQ@jnfGqAi zj(knG5-FAWJWzKW)}02`;D`}M_%^u4$=GUedep>@(A`)fNL_2Y$)Grc*Tfc0ECMg& zCO~r^q$aNKL#l}nPeRIv4j|Rgdf2CFc-F&2l>emFw-cIK1YYd!g9b6YzRj8l30P2l zJEIv=zJco7CC$_?-ymf^syM~ zpIq)m)Utc}z-1+<7aoFE%dY7K*Rt^44HFSc1JINw!?yo1kkJlsKW?Ku2~Gw-Lo(Lb%9)mRQvLRYhUCU`7g&ESipnqpd+SuKqU>R z*ZblnWXTJti|fg8@gcao8~UXaa>SYisOMjB3l zUgBl#!GSi$4E8Q&_cW&mR4IZCLGIQ<)*PUBPc6`d5o63?{jd>fj4@{9YR|m~6j<%>4szn$o-HOAmz|{&!ux{)qCLjjF|CH_;}%k zF4RK&Ko=w|uovQB^FbT^!1<4g=d*csA#$QoH#qu0IWYn)dnt8+b0X_YQAB$eb{{u)cf-&Mh1PSvD^?Aq_>)!2{^Wxq-4DB>BNt!nC!6 z+=7(v=73E?&UYLES$Z!vLt4OCo4OXT`(m>X$iSPrh`BlN0r3(HC6FU|Y+htQjDoAo zJ^ zs2LqB0?WD><4_=3N_VbeYyCQOfZ`5b3|REC2)s~eMJWavn?c0@C_!7ld2zHIlJueD zP!1sV&~m`1cW9LZ*mEzYC^$b8+uk7JJe~=Cpz)7pXc)trzu9e&kOjBLX7nN28%z4A z-`;?&O9GwQXk^^!8DC9y`(BVCx6Zk;}LQbe}e#sj6;s~TV z?Er6;?gEnmFZAodF79Xrg+s$$5Xk_#kq5+J1l`C3Ii48QuzW2BVS{Q|Py-j#mIE~| zK@D6GJK%+E1IRF>iq;zJPH0mTvSQ_!Lka`T@}ee?dKTQ4gIl#MD<&hZ1B&oPTn7ZQ z9IS$e4>YRd$`SD51Eitc{KCfg(oO?T28Qn+GY>S#GcZ7|tVM4+3$TGTf*Q>FAl8=* zkRF^-aEz~E}Ljnt4grhLP=2NkL{V)}D|91^E?%?$+H`Ec} z^8CkCM0w6KZ77%Lpzz02zlzqOMg?mfzNi4l3lZ^w*k1#$U(xs1R7__PcyX-?Jr-JP zA@)P_O~Z7={+gcY#Ki;HeV}VY!Tl=%(0!^li2CKY>kk)DQRB)J@WKhaIf?~*zv>Tb z*EcmR#s^;eb-VHebo>5je#svA0;C&!m+oV@C|lr*U!aATpu0`4^Y3$gZ0*WX%E`aa z^?LJvBP^v3~PnMGeGr;9w-00Q;u^R$op4)t8_vesP`8 zL8!h|u0hn7Jhk9b4OCwypw*Xus-gAeeeiX2;JWS+bk&4Qa5$`&$nxSWRFH}B|GyH} zmm6TpC0=ZX$Ut{TfDcmu4ax+*m<5rr1zl`Y!uqlnrbXsO14IT=n?mYOkQVR_@F@^E zYw(3IC9E&qpxPjZ88si|2z=oPQPTW_v4r)d8k)R7;0s6aB3%yteHS{Xf_hBIHV6j3 zP(qRht$sz877Bd9j3f=Jgdi14Cuqp_fAd~Y#4wbIKp2cA;t&Q?iPUQqNWIMrT5Ko_ zVS}p9*Mbl>=<>SPtS`$!T~2Vd##qbx5_BRHWTj^Sq@oIZVP64?ETr1q721-41%OQ8 z3kS%&Rlp1ON|0g}&{Pr=vNuEmU#x+&W%##W=yv_m8Nh-pEfM(QFQl0g@Zt#AKClr^ zGN5&@zF)cpI|D#7L6F+K(}M?G{Ua^x5C&(hFU=J^?EI}u!DC>crJ*@s7WnW5P$2Mk zgZJEnN5epZAj84Cz^y$vYKxA8mq3F<2(~)<03&4Ob@N`(`euPzPlTJ9!3$lxr-IDM zzGT3B3bLTOm&Y;i#UW6T9^rsVmUR1mVGdM*EZk1(bny~-J^y7Pc*+NScsw)2=bhk_ zG7vU29}Eb5@f;FpkYfUlgU`u;xe#>N2-qtiMmJc>x)qc@_L8uK*Ad|VNtSx7U3-c8OC8e_(*{J5QNQi@DT@$&CGoWPnRDhl!yo) zMEeiEo&}@*w-D6+D?ksG)?!GgK+BVcg-Gqcg~Wvm*nObkNO1d)isS1qix4fROU01- z^-DlT23pJMP!Y7{1lm~%sz$OHUhIHWEw*mK0e&T{FF%9(mc3mMILC4ZLUVsj5YCgh&t{1w&l;wpEL=Swh9&?weJh;^WKJ4i~ zcmM%9oI*s`9@IKS)U)7C8ZS_8qlT|4(Jlnlv!GTVYCQ`UfmM}s8&`h;jz0K!!h|I( z0xwSFLURM8p4H3&)w7_4Z2jg%ZUIWZm;q7`t!I}k8D8})IR6q`{t_{s{$MHS{Er-H z*utwj>3m3tg3I3*OA+Pom!-s&Gq6Gt>|WgU6S%&E6u5(6JY6*pwLTQhgMtbBI?6}Af&+7zJ=lTm=(cW;}L6bzCPh045`2(H#xAZN~Hsl0dy=5sV3(6Ihc%=+>z zw1b)@^Wr!}21_+3@M1MY4r?{%l?n1KQZ+XdW~RW4Vu(I)Wdy0_cwWRKiJ@0>DlZ%% zvPjdyXxk~k{Xl7ms^%X8C7R$4E_@+KmdcBNkop={o5A)@fIHb)A}>IrC9t!PF=mbB z!1df0@X-yG;3;bhfl|o4gT#xa5QD+Kft{p05lKwpHDo2H#EWW(=)ngpXdZ!W^pJTG zfm;c<|L*&xJ3zr&u#Owl^@jHAA$R#g4)FtZUqSr<$fC>6R!}7gTEqgPn-8!+1RD2( zxS%r`YL!9l1IQ(}fiG@DD*V<1C0vLk{`wGP%$^Z+&>v{x9Hj3!crPm`2Y?I*4Y`0j z(jW$8@B?4=o(JQz;oaW<3y0fNX-HV zm{|fZY#{nT6)E_9k1UQCng}6B@OXEY$O};n^^>2XvRac1f=%r ziUrkPpmb&Z=Eb>0Nag^w8B9Qmp>>zT=Al=2kyM@#QNAZ^0geB~LIV$8zRym81R1zI z$=HG@PfE57f${`z{fcM4d1*Xq`93us5(?mw96JGyj~rP4Y6_@-H5)OXyD(=bn}G4r zPS-!jUB7@bA>{mi5Q|VrCK-JZN+@L$vbeA5z#^_Lf);-Dp21Q+D+ z>MVvA5`y3}^KFYtik(YXU)sTBq+iGhfo1sjooN2a$lt2V1iIP;G)e_NNCZ@}>Acv* z2T`;C1mq%QP~$l(?!{u5F!&(+?x`SMK`+iitm5Bx!1_Z8>&wfWP)F#!D2Ay&(RvcP zQYq#|9FkxO>&qoDwK) zK}Ld$w16ze7b~Md0f$r)8-b)j{?vH!i63kus3e9Ky9zJvA;cJA*4u)uH+XRfA{X$& zGX`WR3s@thY&LnZ6eg(yk%Zk^1}&#Sv#5}A8XWbY_4^{A(g<<-6{vIuO`CyBXE0+g zh!m&=_rSV)L7d(YPMe??QoJyCcY~%2K@yPZ!hM7`kspis`yaGRAW#LoIiTA^rP&g+ z988u26l-6)Jyamk+8GF1VT8m5^;KVTgH>?^WU;-N4!M+pACyEuoiWJXh6kV;1QfPB zFQ!4F3KpB7k{%q2Ixk|7w1QSXK|`6pwGE^j9Q&-G&X*;4BE7a4tS#<^Doh(R?m;F7 zz3_*GIym)}f=7Wf_AxLpy!Z~i*r2q01CSFT_SR$30<#yEf1o*KCG3g|y%(M^UC24b1WB-j^<@=Q zc}5?|f8t1zr4nHK_khIzL+;Yx-+!X@WC`m_SE!~eofl7GGT;!&=mDv|2ot+t{i%fY zr8rErz>DjU(1wiW_lh_|)+4~8s%09u*Z@tPgHkh=Zt@F`PH^A3c`v9-`k|%<G4F?!vnbu1(dm7v%bvv z|NlSqFf;zvRp1l`O0N*tfwCOPec;#!F(8){HXjhM1iQW*=Ij-aJ0AF9$q7{OpgQ{) zB)~A7orgsy%-NHW^`JUC1>x*c)|a47z2E>ef!$968Pdv_0ty-E{UqSxHw3%^mLnj` z{M#W)G+xYtDJfxnc^EVv2(68nUPy<6A_A#4S^|;=g{Q`g6o@Wxr2^>$ zD7*-Oik*OzQrh6sac1))cIHC|e=uhs;A1`kT0+AG&zQSG@dF+XgQ(R8kKsaAr$83! zTzm*wfdbwnc7lIBc$sPUR#2w6_zW)fjrr8Yhk-8=!0v^wu>q&6J&*tic;O6@gjaO1 z=u-lRoXLyH5QU%wD1oLFI;@8=#s{t;c@T9aBvF2WxV+N?GGYm>H$f|EK&1~T6NA{` zdK1jp3nJn5CWr&6Hy=S(A3-X>Zt#j8XuXMas|fnypJu3O;5Gg?gLl|p1t9X7#1Tk;9kf15&WA=gx2MN{ZDRx zTr>c+Kh6sEB<|oo1GbOY@P?1KGL^8U@&5n+ny1(GN5G2=&|T0+SRjiG8;-IFyg2QH z9^O^{i16+>iU{v1N2wp)B(F!q?|-EAVc@0Wc<iRcae9rQvT*Zm|rPOu2PnC6KdDy}||P=T(WJ8%NAe(uZ(;=%=-zd@ISgXarg zfX3TEBL}$FGY}eO+w6@PWt-yzZrWfQW$W>Vjzcvy`tbHWs4w0d!l@7hTaO59--9He?R%JG1BozJ7ZkdXwF12% zoDM-RX2WM)z{712W1+45-AF44_+g_5jGf>%ID`wET>Ptbx+Xj3aBfF zm?&WpgqVZg&<}+OXC45V$P5l+NH+o+g5JRn&c)Xtv)QVeb9FF7-^+xg(~3UB)degC0?J8Gjx zz#S5@*c&}y^YNG0q_r;#&anu*xa|y$X?Xjx%MIcRQ2bV$gVblBoZ51ZxN;ljda!$O zhX;5)BFXI?+~(n5f4|igHK>=mLOcm`EEXE0Z;~l}iE}IrjPlbfB)59})I1yTDuEK-=23oM$Cz}pueuCNHaNVSC)gOK*cF>6r! z0#ue*zj?vs04bV5sqzO%F|>Wba&=_4FR)Zmc!h|lzesB@EV#xZ@M5(!H0I##g(y2j ze66?!slPz&g)P@;QGanjh6NZ2?-K+2pWOCBt1W7Kq0|=QNjxDAwvUSK1%Vr&^?z3A z!Ts6>;u3IsLE;7^yg}^+l^e7OZz{JJKnI$E+Y2{9{drJjgsZ)f(UQO>@M5JEs77ER z)KIu)jc6$Bw}EO2$Y?-oD6F@JHWWa6#Xxmu7Q+iyNJVDr8x#^;Y6%wPdT{{Ur3Iaz z-279Z6fyzG@nCFERk}$kEq3~id#CYTyw6hfyp3QqfBtr=| zgn@K!4;N^=J9M8vxHe&Z=?QWbxaAQ5sa^wLq*{PN4ypQ81*rkKMdXDX#8Ob53mJnD zc)^Vjf-b9(c<~+LWRNoWaKmFHG0-X*NNo?_wGT?W;Hp_f2wWk9=I6m~#;vlmS9coaG2Nr?# zr=iRBCEzt)mcxsU;G~IB-A%Iu1tPqJF3@tlzwl2H6j~ z^Bq**y#T3()^}fS5AXU8TwdZWpV9lvAIwn;5}Uw(p>=AKhdE zt^DAJ{WHAafE3~2qg6{;Usl1&dx014AcZ!xLkwBi0$C*%_`=o*WC>C|;RMsi@?slA zAE*L=)Ds*pj3GT7{_Ws3EMAZ`FCs5`5Gp}c#TU?UF7#ZN;|@Ha8Vg)2Agy;7gmv94 zI6*A%BAM(1oS;FZFSu7#>@o(O)&{CS5y#?91lKg6suot$fY{)^6^H>jQ3tZ=t2P6lx1L8%;qrF3e)cVtR2`8x$N!^@}99eu14I3Tkp6cVJ=GRFw51YpbZQ1l{HpiI}HRXn{eOb!7rI>3R$@=_Zz_J%UlCZ!7sIC!-Y^MXa- z#V<{04un)2(HcnA#(W(}sQ}K4DInF*dZXaQ(5*MHmu_bu>xD?_Z!~D57NP~(kl?~@ z0}8OL;gH&K$1C=V^_UXYFtgwr*!OdBuYdttX zionGdFN`H30b;@SW`aEn8ffYc<>+>TpCI&71Ac*gDbwpbf>i)htt(`r3EqT7T*Lt? z!;ytS6)^*v>Tcf`pyP=bqc>95Xn=eTFKy1eVG(%IqY6#AkkaO@GN`lxB?9X=FAOzM z((sixi2I%&yczuE4LCjH%|Gbl6%OjCnZ`gJ5&+=rfkA-H$3I>{MET+Ijz!=Fn+h}* z;N{0wHHg*F@+06KqWp+?M~CvmR1GyKRH5#{2nB=yI6OdWPQc{{1l)R{g!LtS{T0KDAjr5csIX>z=>(pn1!YZ8UI8_TKx}Y>2*dyt z9nkSy7E5rqxfr~25Hjc)_(BabSIocfLhGdxrq>7I%?0H49H<+Y#hAtT;<6IRp-2VG z5ooCfF|P68Ed~aLz!w`K-FVOz5%2*pFxeYmS!Hm8kpu0ZRghyF58eZ-fZo>&(hoXf zl><5<+j#I1SUL!9e7BcOZwTXm@PaPTP%g^MDyS6-F5^T%bF4(Hz%m8}7NqUdJr(4h z-WIQK3=9kbFF;d)kmGBRmSTYpO5F+xFIF)|1_nrpj#y0qiVM)lFE}nh49LnU$bd0_ zZws_&Wx;a@YM(Nwr3ccBXs&?$6}$u?#CbAB#k#Xd}R@M z!6Sl_i`AUoMrt)|L{_sJx2XLNm8u5)q;Kes-^iWwU2MHBu zdm!N(qCJrFjks_D#~)}C3tT^gCfRo4o6jXQ9wID=}<3S6< zR=^ZXyx0aiZ2bh%jIHF0`AEW`t~}TjsTUnc!l0%#wCG2fofU!2&Wb}AIF4oq6%VkZ z*+KQ`Yu1;7pza5FREM#K6Ec|1RLA=A7pP4D9%+EjM>_Jns;L0AvK%O1u?|le% z(3j>40j5$b(A^VXx;-ocd#8fhe?cIVyL~yj14aH{g6zDUCJn0hLB=50`>)MF=Pckm zG(8ThK8RD`4Fl-paTs`k8psaNd;v3fsaiL9Gd#4V;Goj!BftS!uLX4mXvzSj1Ec~n zG~~j;(di<_^77xm|Da|V%J7f0G$_{LEs2<4ECMfni$k+Mq$Lp}25L!wa;^277Yn2y zg#hHNw-k_aXj`J-*YIvjV5yD>3W3Wz{N*ue?Sl`$LFb=~LE{JBKH!ps#0sbY`0*Q3 zUxD%i%OB#(Wtd06?j_JZfG(yw2s(h9ru+L$B~aT3suB=S!W@f*2D=}Bc$3sVNcamn z|40NqxMzz)Tmo(%Wc-DMH>iD3@|U*Z4GDWDq=V3z4?dD0ysixvR3wEDynVn@!rFWS zw*4^^JPHZh{`e2H|4$e_e5%Ee!l&aOB7CO&qki}d-2OJ${y+5d;b;735qPmp2t8C% zMIoUAZ9gsek7z%w`A=N9fa4Ez;5oScQ~_EKw}>j|Nu3lyw4^qPf~y2jOX>_-OKOn_ zxFux+o%VRqj!=34O=&qqDf`QM7SOe8koDo9@(EOvW-+{22x<1%`i2At!57>2Km{2f z7xK8kPAn04Q3R2J^xr{7K)TL>FCrllwxE_-3F}Kim==*2_7EA!EEGaZ^Ff8c7tWCL zC-|}5rlT16LIp`0RF@*_RtkKz(!3W$f^X9SF~GO!fEYNMY~XeY zbd??GY>U^dFa1ER7x-;D4xlzGxCsNlP3NNkD1wk$YBC@-@JouC59$QIaDp^gLBli9 z;T_P@kmiFbfiJd0T2^RdI}mA&z!w|{ouGjoJ{NU{MMK&B}pBkRXn*2z=2DXVr51dwUmT2c*3VI=-xXDu@qi%_1$4 z0SiGURzdAuFc*D^4A%CpHaPFV+q*ujtO75%d7(u$q`jNN4QlU#N?GeSFE;Q)3T;Sx zHw2^{+TKlIWfe%v%t_5l%uQv0Rj{KpO+x@&|KV@nk=CAeUB$cKS9o=B}5@=6@mZJG`@NWyG_5OsXJgDvIt2_`-;)yY^ z`|*c2N$u$k9IOH_=5V41w>Q)!;P&(m4oG-|+S5lkXc69nZM^LSC#%4VHV*VqG3AED z5462_fs<9>_y7O@L22?1Cvo8djz0!w1_p3@kpa|R1f@n?`zMaOf{xQ;IPSUzRGA%j zT>zm#C&@7!cLg0?#Q-0Y1JzJirraC2Kn+Q-UN0^x`FZ>`Us)5fxWiDZT znFNz!ePN6wB~-%t(j6wn_Cf+lilv10r4CF==tVBXA!(hi7x=fkUa$qlL}}^q)|&tS z|BHg#D=(T~ur>eCsfh-;FiYaaYKXVK-;h4={YIzj5wNh#izyJ{PS+`50fiUMFo88- z0Tp=r*tG*Jpz$IRreeWM(8>ac{VWU&{H?3O%bY+}CMbHr%2i$%L6qCN`FT2mT4)>r zSsE{7A%dOYW&_08Vi0F*gN4A3w}3ic<;6RQcTpX$@!~o}80L7L7sp@%5XT$5*a{PX zINs#N5}3e(*D?^7vobK0f{sD_|Np-@Xk!ZN%OkJ>SAiF-kXBq;XKMs_vWz1ji~U6d z#PR(5PIUV2=yp94(Cxb;@WobEP?|()JJ-UD;d!A4u@!k8GW7gDkPv9U%9n26DX^`g z9i1MaR_$>I9?(tD&9ytQj!J@ZE4Z}?it|nnNZZ!}v}=WbJJ_|It)Ogq8%*AvYXBLd zyY0Yocdo*}|Nrl@N+hxg-0200-`NThX@0|TS4QQ<0yeNe?#>ketKtBuS_)>*1udJo z%ladMP2ld_4}bsvzuO8DxzmcoUJ7F0I|()GHpHwuYr*Qag5>VbeE`-8BJc3NNMIA_ z{sK|`Uv$f7Hi70N9M)f6OlJH0|HXTjzyH%ZTMPb!YyzwA1(UotaOjE!>Dmd=1v<+T zG+^ohnqUQ&8klQWblE_Qu}^?{+j~JILn-Ua&*}RtOB4AWMO1r_`^TiHpSDd889hueGICB!S%5N=zeDd#P|(p&H;TrkO4Dl zqfLPs66M&v05%_gdyTaAae@%5z>C-a|NM`LijRwiw~uErL0kbU-7aC0rPr@9Fg$BDHe|VGBKE5E#D)6G_A9`?WLtO&S=Qo5Q z;SFjZKM|%ycn`Mr@e2`Fffs3i(L+U)0TMsZ_VEW1R(SjPj|g$$0**h>iYIV>)Bxp2 zGvxf3p^?ZY0BRxq7d-;6_2&Nn^S{&eM|15DhEmY2>t>Mq)j0yYLw^LlfQ*mxbh^H2 zu6@H$DhA5bKLY-X9suiSvHtQR_Wz&%-L7xI`3YpV^_v%7AR+uqAF!l8==x-k893aZ z#n|mC5b$5r0e&OEgMSFevl}0Hxd~J~e#tOlWMIf*L{_*RtPtV}DVQf*z~+EFG2`E# z|HcPimvy_oInH1p&ME+6IIvuhg0eUgq@gUH1u&KXoFyV41C^C9favJ<60SVhT%?AwvU%dML=Rat43^nZd{{8t+VA%-Pu)`(@P7gTCqvl!; zh7z9US{{ZHw&q$9hH_Bs$AQk{^%b!8P^hu)b`@ZD6#-8ZD|GvEFbAqwA1YVvb`=42 zl)6I&v;!5oT{)NoG=jQ)c>-TV{Q>!hr`uKJHTanJZeNkW?ofdske^>Tg6CNTz^Me} zBI`FVRQ{6cQ?P&jFhKi%ETHslk4WFgU4KA&03zMKJRlFGce{#odnj~=iZFYrSo-o5 zhk*oqd9*zgI(;92*d8j{z7INm-*mga3F!6}=?>Ij4t)Tg9DmURjvbzE*B{KTZ#rFn zbh`>@gBSwct~_879+2NbA{@=N0u20Z%!~{S$6ZfAop9Vi1EEDCaRQ{-_e7_MO1J9?Yu78qs@<+9 zpuU87apf;)g#BQ4JpuOOkJrxKu2)bLwIC_F0#+oT?Rurt6;zHegBTp(0J+lX%JcFw zxVirW9Lb<)vVQZz{x_+Sj4dIPDF#k2pwtE~Pq4O6Kw*hon)Uzs^B)w*9Niuof&WDj zB}5raA^=%5;n$!4VDEx#v3~O+0HliOl8=!4vY0@rhXdk9M9O*n6YfTt!2hBbz!48B z#V-9sbkm->6;yC?G{0c9bp26V2(D0mSi8QdO@q`T0?fWY z0$(fzo5|7PdYylt>-FXzyrt$4=^x#p0=+I=i~%p2AWFbvSzM(O$6X(Q+UH1igPQKI zA!YNAF5l}N951WEJyITK*B{3~^Kn0{T{%hvAm&1>)q|ONq4^hYsVPJXVI@CI`b6_j zu2M1VR>FN$%8%w4aK-TeoTfn`YW?Pg$v0XTh2Z$Zoqw_1x47UdYKbx7D?T@Z&BxzA zK&;2axxed$JgEKq38VcBwHns`l}Bp-%9GIk#p{1aK7!mk0BXjFbPIwOz=3Mbsb5fo zqV)^Dpa5qhaCqQsuR_}+s9B-g_lLEIM6ougnHBn@+e6^;Bj!+n&d@g?0S^!GHYc0z z&^O(jojena50qYieQ*aTZR0C;!EON&VE5qk|Bhe(|AQ(k+^tKneo(~?&j0A`t8QPO z=9i3M*Ia(k>G}YV|M;7ifLk=6TGZN?r^o`VtJ|07@`L6Vpd_N~r~_)vxN>v{=zxS@ zb-QwO2IznTK||Y@r#qCR(@W#EFtn5oe6bPSe&pzMy<&WzbXjxl6^2^YZr3ZXUAjSS zkT=E$N+*IeBM0e;Zr3;3t`ETNR}T>BY13VLqFbb?Q)Hv@fzk^vL03M29R|*&Ab(rG zdC~WYV6=mRnkWnoPta9p;PB)Dm8Z7I3=oK>^ze;`~=>?NDJAfR@9@U9W(4)4c>;83GCk4+YTm8r@C? z0WV4+^XdHCPIUS{fT{y4F=#%>2o7n3mv=$Ng0A8~Xj=y@0JlT6ffhi(v@t=oEyL8t zj%*uPJocdmLo5H^ zK|Bd_EEXEukg%ue`b&2R_#wM{NKJARM&;;V967yxp#tj#>iNLC{fUKR_KVj!xGl5JxQmHyxI| z_ULw90&&qIkU_|9nE@KG<7u4%8ZHHGJO{VSf^51=XLPf4bh2zRK2Un*<R6rSv_zYNBadLikZprd?YjyeHJC?~)P!o`1**1r*-aZ(gXqpnpOE$2TbE!0l0z$~zXy%DYcru*df%aOs2+-xQX2(O?tl zRNhI$yoFZY-3GTmDKGDsiXb(JPV+9lI|8z`lNeWK?p!^3;|0I=nx{zdrQ85x(-hKKA zjS{r-4w6t%(mz?{9cn^>mUjdbN({_ZpaO4Ob1i0phmlaA1s-NXK`!uiV=M4XAJaXd zfa5y=R=;fk)o&q0)^GffJqYB+H`52~@x2#ZjH1Lhh2>ou*hD&&ciQiv-a;$yo`G`* z<>eh}TN+y45o&Z!dk1wCsJPn>F77zGU6;HJ1Um}a!~?gb`CDg!3uerw28jKH=ZfmY>05@J5Ui)>sHbC5ko|mVVfSXHix_MeRpqKkw!E&&+?y;9Q{~$ME zKv~NA&5PvwbkEV`mi*-D1D7A+_*^=Dy}rTiePzCg`r(E5T< zM$?5k3RGQe2Ui#1*=ujGqo7S>0vV0Sj^v?NQ2(P9G@vObL`M>oHIOsf23#3!15!rw z15Z+8W;AGNLolPM!<+^xZb)ifVdOHD?&LOXtt*B*Ln(_nP(au<;bS_Ahonhk6Sw8$gHso?3(AA6 z;5@kSF*ImFCBwGnTG&V{8`xZE$uJL6A4Z&I6KHWUHYJ#XCq|B`V^>EhLn~}uS-E3WFwZK6sm~f-X-0oSFjsl zgl+_+tqvdmn*o~Cg;{?2Wj{*a6BIetZ(i)YLie-*YH?B}eXt|aM?F&dU`I_K5H2Wv zu!GY_<3r-p#|c>aU;@uyfYJv@2$nvWI(?z(10o7ZA55LT!zX>ryfkp>12ka|9*=qh z8lP|_a(sdToXse=(DZ>Qn!#=PwcwsCv@H)UKMGDm z%MVs~`Tz;R(g!OzeV~p&?7@-E_uwokFtRzud=OFrarq_a6f4B!3n&b&-@LeVfws{I z&d>PP`~3g^|9?hD5}Uw_&*wlZ^;o*UWJUZJT>)MW2wI_OZ~?Sr5WF0)l%w1A$IC>} zO7#fPGS4>wFQm?bH1U9Tkb!qy!d5HsART@D?);zs-M()+9TmD=-!xY!fc6o(f`&5x zzl4+B+?F@QYba+*og_@vcsLZuV z$6eom7OsQD-+;wIiIut519LXKx%LNhtzNh5n}ZKnm|cH#`#w1Mkc0VPcj%k!OU%rn zAc5?Y%-JWInJ;#-Oa-+#ULStF@^wE}n^|$#%!uay~9A^auCn)O>wKfk|njl3S9KWC@4LE+$ z=kFlXu@Xg)l~FpN7QlZ7*zz)+gD)jeTMQ5`s73(q)_CE66IvsHmL6;dEj<9u-M@M1 z3>gUrl{p?9#s^A4&9BA^j_DfA3?*DUK;_Cy1&EU73Jne<+Zh-b!1V=aJ;cG69H_QK zxFFlXSK7X~cmrxXr~|VZu^{3oWE`#A_d%xz57hSN3LZw7)k`7r%@rB~NLK#`Sq+&d z);ai60M%*;7i2YP4@1CVt}yt@wdBB;vUj2J$91g^?K8!(Iyl+NyU{c-St0BF07qYTL1phJr|nk!@&N}++h z8LS*s^JDlJ-g$snjngG5FqeQj51SF42hiF)a51_ERE(C+1f?ho#$u?&RuGGigU+&N z07+p9b4aC4ILseigNDTh;{&Cen`<|K2huly_x6Kbu%Xj~1rg>fh&C`k(l`ZVX&>C1 z5H2XdLE8%gUev-YK^vzi0o$;o(?h`cK0u-yp2ap$uXq~`Uijz_z3~jaG@(i@@ z7F?d8uQ!I)M9sAlOr>1it^yZdbh@5+&9wt`YRF4tNMZ!9k`1s9lqmx3>yU#AdiXRy zWGvMJcZ5114I#)ji@D(KAKyW1iEAH#liY)s(37^nCYfjlhIEGh=yv^K?Ruh?tsAr$ z7m~dLn0-%lhjLhZ$&~SflMhFCfQ)uvKxZgOzS)AYObBFx>j~pa-wnH6PiP%H!zvfV!sBD*$3R#BrToAs{Yj$!v&qph+p%p`ft%2P#Osd|<0t zK_PDa=Eahu^iGA~_*Q_;$36h{cRUdN9gy2mT+4CX0W@6;Eo)HA0C+(I$@K8-3E_gW zC!`Fhyo6NHYy%fG63w+6ewK3WnEU_#|CjFIB(veAJ%sLb{b78dv=34yV3e=$DFOoJ zD+|n0P{FeqJR>R5T)PBr=_PQxdkJ*g-xA0wz;1ANrrY-iXmS0UfeT%$07}6P+v*yIoH(yFLJAkgLaCuYg)5-L4P5-v9}4cDthJ zt(WO`z4HAAD7glDbo-v@VRSxy6-L89HgZ6p`ym$%8 zPSChI30c?Z19m#NgagH{^_v$Shv}WRu$6@1^ak2}11?|C_cLL(`ar${ja-TFH!lW9 z5vZ0$9iM|YDj)-L@N@^^g3=vie2(z~G~Iz372Cj#3ZdrOD?dxw!RhX`H)!*M8+`M^ z6wt=69|7IIZ$PW|gFt;9p4JDTQ-&@=j%WUU5Y%x5wb8-#%Y)ZkFJ1p5&&h(kY5nHK z`GZspcyRcEViX*HSn_Lgg#hUI5=iFZXs!_8EaQYGKhWL{j$I5K3=E*2<*(*fOr4>S zz>|Qr3T--lH-J-4>jD0j-;eeq9@g=xL`{UvR z@Lp6{kZlO+cHI;3LK~bqL7TTPKIrz{(<{>08M+6Whq_%ibh<79<)jnfoOA-bE%ryT zbhqo0ZVvEHh$Wp|ppf@n0@k?X^_Aw@H;iSV{x7KRdDHER!`dz2?1E

qFhH53F6U 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 bQC@0}u~B>?%o*VEKX6zhA=8nK(7d*a0AFs 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

Hn!01Xy% zSc3*5!S$jqPj_KR>$g(&*ZQFI1@3{;9$$AHOW+HE3@pX@?{si{wt@=tSe|a@fYt-0 zp`eyWD93R(NMY>;F08wqR65-xx}7vS-DJ9*bUH!xsYdI8lHhJ9mDU3#+}%z(pw5>B z$YZ`&jyrOIlHKbNM12($)Lrbu_#vR%+a>VDk#taN)2GwfrP~=?NgO)v45=i7eO@G4ebVMLwCD^3ZBjgpWqjZK}tbmBX^EFfrGiz z3EY_WV*wpE#M52p((UBYd8n6#8EQ4-uTD3R<(*=kH@d?-AlCbIyMc-`sP+CJGs8T( z>jD_Bcf+l(!)Cn-NNFhOmI8$JpfNK?kM2U3&O?l!x=Zi$vM_hYUg>o7==Njjyxu7c z8sq&13Ix{+-JzgqisP=}89q<~Jah2}XnpD-(9Va@7ob7e&<~*YTz4U;Y0mheJJ18P zT*{;s6pGEyet`QRjy`oh-Hsp+fU4Upju(BYppGBNRo#IejDZ2&f#5I~{3%Jj5L6(#yiuT?%%%D^I70e76`VhgGO_`@UfO+3g0J&giz0 z`g8ClQ@4r4=cS-AWnZ3d3s9d>u-il)bi&3Bw@wzR&e9v*ptH_zSjMsN_k*{4fre-m zS`U;cSUVZiOLzP7fQMd=JAt+X{6Frf11d#da)XA3VjpzZzUdA|bon)pcY@|jz#91b zo`c4%N}mJ=hj;S@zDNTN?Ye?1vH%gyU!4IW-Jy57oj?t1(_RyBqtoyV%ZKsj=B zi_8eQP3p)ZYZvwZ11nnbpgn(@6!CU!63%oj^`c z*8I^4V(|A(1jS`6N4K*Gw0Gq{FX(1SB^YR;5<(1>k z9N;jr{PX{R=P$4VgjJV*|NjpS%a_TZi5~EME8y}O)E?}P2m!VBZkMvW*6I8VDkGS? zi&+9*SR^wtpqxq4DWmd2IT=!}eJi~Ja;sASsBi*J`Eb>vta_aV zn*Xu$w}M6kK~fGZ`#?qEZV(ahLI>$e|&YD!L5!ghybG1u`-Df zG%5|PvjYRWi@>F5luPi7x+Hi5$jhhG$)(#V;J6dG7-c-z>E-hhw4}ZB^XrMw$#10d zGdV!#IJ#$a$7^)^8+0>(hN#_Hx(j4Lvv(Jua|ahXPaXWhqosRLWAj0l)&r${PL`iaKN%i~iUc=c z!089d?!4SBhUO;5gD8H8o(ytOFUzKYpclG{j11k)AeEZnS^&)KZU%X=^*{xO=8sM=ySsS< z0|Nty2cl8hi{RD}sI}G$N;AAOLEQ^yQ2Rdt)VXkW2zZeRVFd)dh))3ZO@b4GUW7u# z3IbkugIUd>QRjdcb`TDz-Vb2%`(9RkY+9(6nJ z#sZROyl~u&12img@keJH$nRM!kn5L@#4|EHCv142 zJ51#!OA}~bOQzky@WfL=F&@bH_lCjwr~Uikn2P4=7a95+Cx!-G;o6Da)e@ZLB8 zx)STAJIjp|cX%IwF7-Kh^W=>a_YU54J;C2Pmx+PlW)mpRZXCKf2~^hJJauyth~FK` za}zujb0ek6B|2JahibaUKL{Qx?UkQWrsH&nlX z;+LiWrb|D|jT1Ld8eR$lyEgVnx9bsAkP*1`hCTp=8fyvb-5WPuA9S9&aq<3xi@&}d zfduP;n=;dHsQv)id63ESX3Z?nfF+0F$(!%GgIJEc-T`@|GxUJrH&9Ld;ot)nYu^LC zA`<*PZj1~Jy)55uI`JHQ09p#bc;Vhj&{n$$m(E*W{2ieA`kSCLa-XywsEfSG`scu{ zG{ciOSs4!AN_*`Hso%O?_uOQeaP!oSOAr_G-@S43;LVe-IicfyH%~%jTua&R-ne=4 zHOt*wH%~fR`#vd=@Txr2d`R&1UWmaEV{e{*&2;lL=yXSsSe!DvfxEaj z4}rW5^0d(1+u-Z64&FQsrcb_Rx_Ro}>+aASH;>$K*~D`5^o`s1AKbkKYQA%JyWVL& z!P@D12P5&_dkE6uvPt2_qnju1-Gq1mqMoVK^^RNfKel@B&JW$890wn;bY3<*+3h00 z(&>7j6B>p$-+@B0cNb^^QL6I<Hr;w>XgxK z&^--Q-E{kLKx(F+-Ju+v$2)&_2Z?lE=nOpqs=a=89_$VH)A^(M!++2UsUPx+hkG5F ztih!=fB!2+1_sO62axk#dU?Pz$Dos&<1{*bKY-4wZ3AU~hfXln{6nIS>o}Mx0jh@O zK)Ilm5j67xoenqr9|&qt`Q8DI(}Z#GuRjG^73O*;pz}vBPgnOeP!Yv=!8xGu_y=&S z_Cx?Eh;O_o0yO|bpKu-m^`1hXSjyFJ@7@P0wz_>kd~R42elE8 zyI8V-XwWQT=#%CLOwEr#r_)J-+UdS`T2CHlVFyWYZ-a56uTyxoNbe`^J zX#_1rbG-l>khRu4)IDzl0|SHQ<=TSIU*Of82Va1fU7TS2)$Mx$wD6+#1*9(yTHnj~ z1GK>56sXI7q0{w^<&Cb%u?1Jw2boBRD|H%oi#ff82B*cUZP z-EE*KXFRQW!tzG_rQXypphb#t@v(;?26VfAIPPKr4y>1Ap!QAb7jQ!e+$8D*$9mAg z2TVZ$5ar=7!XqHn7Pyvp`2jSyJP*`lLG;bx4aCsSr`@g`vE3}K0tauU9R{r*1hiSNm?x%9aDv<;2|Bzh^hN2%<|7i|Sm<^Y>GqX5_yBY?U+3{o z-#ag_gH|7d&#!NOBXE~h;@GXU8@?Pj58O~yICd-TcIY2a>G3DvCQGZpky~k?YyDn< zYFCz4kt4U#Zah4B@6^46htoju(fmf>CaVfW{|!}*W4F?J7WEu zD@W{2mevc0pz#ehUk7GB!gZm4S}#?oH2#WbVPL420F_3p%@5>3IuG7TyTLQn;NY#a zlZS7nMYp-{^E+22Byzde9H69C3%&yFc;{!oZr=xY z*>AoJYktXbn?_YU1leM6Uvk`GxGT~8f}{0P{R`0e){}1E7og?k zuQ{4uvNXTq=!|^=T0t86ruAE$d$;QY(3T|E2jI2)V0XQ`%j$sSE?52*&~D4Sx4>O< z(6Ve8Mk=5XW6Oy64~N7jsJ$87{6+>EpD$i)3}j^JEm7fbe)ggDQk?+ktnU{$S(@(3 z90Ruzdu`@Jr+PbUKeU2oRC=rbcZNQxOYC<2V0iK-!_9YhSvnzP0GdjCQ$PRaJCJvd!7biL8b(+Ua@&>Z)P7s~?}89Glu({^X*ix<-ZAW6OR zMDwE$ouN-&w4w?;cu@isfL>bK{OCh>tw3k!o$k;V7yoyAsQl2TAk!(l?g>AlG3u|7Wa|11&F!XY6I!1zFwi@Z$!9)6Iw< zAbW0=f)0yr{>ONe6;!I+;J7JKXV4w`W+$jO*Bit112kTJqw~{Eh8qbSUNRO_D@gt$n_$@;`T=4>JY#PN(~r*3E8VVFI)6b*Ib3F0-YmTd zx^DGTx9f`+?Z5y32TkNPp8&1b0vF(|-|8elixpTl8D6^S@aKkt6Ev`{m3{y%2{#6{ zB0`_^vh0G$gFFci%eJmAHx08r(v(E6=T8I(mH++=CGdEmy$?ogf^x(1;9`RnG%o1bsW z9CEPyP4wwyVe;+lXVg(zt>i_4o&d?7xbHVr8rgggB>vjb#$nh||1S+q)eI=lk8P7ySHS`8lnZ1Ek zW;bD#7^qfz-F$=vRF~b90iBN{Q@XD^Rsd93Zvjold#?H_O zy(||xeXoGl{hUdg5Znvd4*=?Q``!TUHw}FNalpNk2>U_ho$HHE78P98X}7Bc*b%G= zpb!MzCh+*)Nzg$BkDCv0c-=cy`nKB@H0RKA4b%vBJ#&-c#^ZY@LEX9=CvKj)apLBS zdk;Yd^oG6(2x@-AaaTs=g`z(w=45X0g6d|_{Rk(ZwKF)igU;T*9SU+-=!>A6EK@=C z^G#QU8$95O7ZfsYnvaOwWSI)CsUO`tbMy4QgZDtSO{&TbUQl&>?;%Wo>!pf1NIhH^ z*6n)XCX2<*cfD?m-M&1%B8{)vZnCuBJm~j5k1zWPy}@4?etD>&?gjTgGv+ z)Ad71vEe09!3x^>3_6Qvnv>-%(2gdF)&q4u-L4#l-wgkQYwZ{jDuKC#qP#dN6 z!;8CKpv%lfK&zOVAASJcknO_w3A9M_mSv~_f8Te|DyR#fqh)XO+JKI{yZP=W`wb4K z=Ho2j7No$vgP;u)Z@fEifvfK3-=MO*6m))fcc@6~rMnFLeWw{1816c7+&l?sNjUJg z9t1TkPTqU~S{>GUyG|N(ofyk4NdCObaEIrjQ}YWB%UkzemVUhPvGa!Ee^7(^#>F44 z2kwd()+zLg+`P;3^RCkmP|bN)=I4!*?suGi+>HXYYAlbJKK^!?v4sETfg7v^$3WY( ze%|4@D{sQw-9bC)x3G~=7X2%|NsBL`R=9if6!j2 z?oyt+EC+AOfR;6jlzxFl1gJ65?JLq<%X9D{li>l-?9AuYy{TVrz5|!XurviLuW~@M zf4&^Sy|GIIyGs=^8o(u&O7M%_-i!ovu@E#x8iB8y0+DN97Lhg=3&mJ&xu#9Nn&S z?#ifStT=WnE#O6mH)xhh2DAj`WJz7OtH4c`9iSU$pWJ_N_r|v)4kcbUS#N-}z5$&) z>JHMl<{0Sac7KR-nh!HJUt_SY72$7L04`o6S`U=kb-PY!Jy6;j4rzJ5?t-M}Zr2%x zm%yV((4nV0AcK!^+)#aR>{ixi z2gG6p`Ss=j@HOP0Z}1)fi5gCKWMJP zbxy#GgZSg_|Nmd}!lD*T!}Lpl<|pDaj=M*In(xQmV<1!li0XFcIqseUVg;AJ;%rHO>+NFWx~|G6651fLX-~VJ~i7V_=Bv4ps?zaRDsm ztP$|y7=)!0@L~^yWf1UU(>0LECUJo;R$K#{Y!UEc9z@nA;KdXO%OT)J7noJ-6856u z8Uw?^Ejw?eb=s)>4*<<#b{=azP|DsN%hP%ryzZj&1IXWp!Sg(y&Vr|lS`U=4?*pw6 ze|^9C4Nq@8OYn;ow?T{Oc{-Uu^H|;>jxSGlxCv<7#F3@jU8mELr`z42(@~%^P^8=4 zqC4CMI@=D~*B2=BdKx$+Aq1rV1)A9nkZHDZsAq3J@xS$CsZi@lSSPHr3AA1uyf3Om z4KzOj?*BW;bT@#+4`ap;X!*GcXp2=SM|Y7-cK}OJw?uGn?33UZ{I?kxq9U^xgI|c= z0DEp%<$rL?inBNM2WaI=?BQ-V4#P{$KN#!yAnE(!52xlIjP*YP0)m2H+`kUd1v-+r z`N#i~liewKfH-BL8i?Umwg*70D)j+L)It;WJ2IR2#SkOvE*Eih`Isw5i!Xb)4PAC8^ zmUq+Wc4<=RX6OVh^(eJH?gknfV>s>x-qZ}L`Hx(FRp>T-RY*_P`Ys!$n)T1xlrmK z4Q&1eU;g7E)9L#n?1k|SR4+H*gn79WVmvG^(7gNv;^h>GqE6R0;KeFGK;@F}i%yWw z8(}`@Zv}M{2>Ra50^)Jd))qHVV1QP$xTyqy&J*l*0x!M~dy#S(bV=lgPPT4G(0WkN zRv1IjF_ztIy)qzM7(h!$-MigXKvUddFHA3kd?(P!+#UPDvYMs-2Ba?wvchGeLU#a9 zcgsZ3xKuY!D<}hYw@g+5ZHsf|=`7{w_7s4YS^pmf27&^-{3cZT%L={8$mtX-*z2-2$zbZo16m zx#?g~7v1f^bJH=W+hm4!NyOcohPPi!LdM@=BjpBnZ`_ob?`(Ow#NZ~&JaBJ~=jNds zEHiGNyumUPIy7H$`sT^kXCe9R?oEjL(hHyp7wi_p+ugoAH(BO^G+YD?GJt1qZXW3N z1>JPXG81MOXoly&O_}-Kz6v)~X5J8;a27Hq;aci+mvzS3TWL2=-#mGPb-~$NY4=Xv zU|n+dRvM&VBLV#gx6=G z86R;zL@=oA@nGq8(CCho=@w~*PfLO3q;5NM-1`Zt{kki-85nN3a@-Kz0d*(T86a+S zEb91FHv?pZ>gGcb>*hn)bOG+MD%A5TK~*GZEf2?C)&n44O5N}>xC!b(xqjNh1F8XU z=6<*x`{riuC(s&X-#6V1y&{mUj}O>1FED=S-T-L`2y{2JurM%mf({9-^8+>2G(UiR z)ybm*>LGk=KEh)8xlR|{7TpS}0K0j18D3&M(fKjR5!53B)%#AMz6q#r-F$$>@@DBX zck9|0r6=#+Xgr zD-9Gu(OtU3@IbGKe0S`gPL^q%ER(xkZ@7bcGN6ed z*E`JzKhv`_XYtMALKHzTwdAvLJhGncy-9F3M3;ccaKrP(T2i>lBZnE8cc$49# z>j~(DEPpHLSfrZ=Za%!}dIB;R=E~o?4%C;p0h&%c(p`E0bW_oZZW+N&*DKv3e4r7= zQW?w3-7al^I$dYnWMSm*=>>)DJ;MW>A2e@u$L@iae4Q8WojmwM-tds-h2{hDorjt~ z{Xh6iUhzVA=#`r+ts9QtO1p9L-ocwv$62^RY4#@5&Du{lSx%X#N(^*g9wq_2oyqYgt-EwbckCX7VC9^MoN z2i(b<2XFA60Tp1-c|+GyyBoY0KmyV?*=|0#DfcoCkG z4U7y7cV68*byNE0$(wRFnP0EJd*h`Js7C1yeQ=ZM=0n(os%wcrcj%p)OgB%0raE8x zfTkK_@4!8E2|CNk-=YdK9->Gc)OmjgO5bgu1OV#UECyBAuHbuV!NbZ2?#u(7`vEG< z8Tng5B@HOo#wvi8*VJ_XF+9om>$McPebMbYr}+@e%>#F4z%;OyMszb-yXw?>Te@DT zck3?Q(JRw-lNnl^-3(oF0~~cYBCSO9hAOD!?{;0H3R*M53mQl4WOf9dOfngipH_el zvrxEnq`EkEmA$GGg&2 zrup#)(9r-lIztb<_+Z7z(0KzsY`f>heJkj&?G5m-?T#1cPzAQU*o!K#;l&y&MuwZN zJU1BO#;m#d;^s+coy*_yixsrD1Tx^ar#p5>cj=aH*9|v#LAj^7_6Xz61NTnd6zUFL zb5r={yPIM+Pu&!_dFrMRf8PmK1_sbfJ$McJ&CoM9V^7?C@jB)14X|0Udq5efo_h@(+7VG@ON6U zGBEIOzj*KwQ+Mf}UdXOy!~frJ++-2E30lOt13JYB;>WH43vB?gL2_##jGOPeT@T!h zeRK0HxQJZx+6`h6%-A(hV-be#foSY5g&Va4Bmy@7=9!!4ApW>_?B;2xR{rf5yM4FZ z$Xx+4Vl@I3%8k#E zA_lUQF$dBk1|g7Y)P@13Q0+&ixwe8AKz0-o*%m(>zC zRHV9Ncid!QzM&%A9lHg_*Z^a!fiP|!ym9*G!5e46_bWj?b@LQa-iqY_FVwp!BL(t3 zE2tpoJgf@33!^s-IT?JCge`h>p|bnHDOKtPqd zFX*g@?${lmd|$c&6qSNESr~7!2;XF3zR4oi?YqYC|4kOQn=FFer7w;{Zp^tE``{)E zBWMMJ?-PgKIL7a{Zoa#D4s=gr=$x0}lK_0LfOh!ZJO#Q;)%Qkc>4)a`pwp2$??EEd zq0{wB>q-7jP($PHt-Ckw-UO9Fp=%fqcV1xpanohipYG5(pas+dV5=r{yY6B9!R$H* zye?5y?N^9>6@o|9YGUK z_l|>-F?hGy_Z!`zTkgHN$-;DlWz)@*pmooo9QQyMtmZzrdFaL|c%+|$q~x2Y?t!BJ z#JxA5Byr>5jW0J+d2WO>{Q=c0to-1UYVY2-dFmzTz*$H*-v!N>fs5$w(ifcvZ@vTP zrIXO@Tb89q`1`Ja5-=nrT%UBuegMs~#4t00mJ-HZ=#3Fz1YMA5)AZUDoStvW-#iUk z!f~9%q4Qp+>j%r&BancFEMJBOsVnFfR|n@#*9*}3FxWOc&|R84ZnALPP~qzK-ExzK z?S_gNINvkgP!a6*T>}xh$pYenJP8j1kjKy5dxezl58gO)9fksqs9=Q49<|)Jf zutGBQ&C9F5VJEM_=l8+wd+_?{TApqLq#d^gCZKUlj@}p*{%%)+pytOPx&tM${&)V& zU|`^J4(R;w;@=NYohtykFnJjR0|RJcNdUC`Nu}wgOfzV{=~K5aM?kkDOLw3|=gn^L z*;fJGt^!#MAl(OkfW~{9k3h6E!?n0_fHvu}+(hmmy;gwqPj{(<2D4kH2QV@)++gVj z4R6YHI9i^o^XU#1fHoRgx)9x|&^OJ$)ay@nUTFUC|KJaK#Y3+Tft^$s4_OT1 zFLWUuf{q73)>DLs1^3GIf@fpj=z#0@C!IGsLmzbd-g&`mj8dcDc=5*wA^=*1aI!P> z3V&ZRXuHoV4)|>u&@RA*=GqsG{C!EFV#)VSckB~T5mbBS;3KA+EZsL>caaGj(zx>s+67{_5q~0Xp)TWxG=+XuY@PtdZe_SYH(s#J?_}ZXh8)oN5_AvE zUC{j+-JqLa-`tcD?Dl=p$ztW$>HFd(Xn_6h&DRe>`3xs_L9lb15!D;5fhZoNc7#X@tIY6^M-El0SIep(Vt(R^(v(!n0n_nRR`Eqn#IPNn2 z4}*=&F(*q$jrtFu%bri(aFu|>7b}0uS7rv#UUcxS-O`|*r>lVBrEWign=BJ=9CU)* z5Ey!*^uyg7puut16E~YdXY_T~bF?1lti8bBcNE+o1&zGlbQS3iQt5UOx%aX&bkD_K z&`YdAE!WU3oyS3SmFtzx&kmr|RDF3s{XN$c-8S-;u2*idaCg?es7>q+JMuCqQ*_%?6HA_0G$nzV?Zm zE*n_j?O4!~i*8pWef1}9vR(mq0J~iUZpbi$lLvn*X#Wg2pkH)*DO~>1{6m1hPYblj zM*y@u8L}z;=D`~WLE~k$M{cOz01dYA$ahD`Kns%_ym!vtN<$xW34MboADVx$*Rk#b z?Lz9Vz0l2K-pw-MrUMJOK)C_xeKLTUq2QsK+BcT9H~9NfnHU%}Z+3_73B1jsa@!Sj zS2k#z<%a5mv$xW2yY9IM>fD0HcUFMLcR(Ha6^xgAMRs(%?&-Vx$L`b(cXG zhaLnq`USwDRI>N(4T%2w1E8KeI2y#eYmdBC1)UJ_t@QwZ=f!{j|G&HpKCipmcSpDD zneNa%F9boIoKlYNGLi0Dj?U5}pg@%CF5PqSUw6GsXXzfz-=Guk7&>bYXrAtLJprv$ z_Jf8(tZPs3_kIHv6s32%L(d!p-6DUa+xN&#mRa3AhTS0sES|) z@HQoun+^&$58ePTymjSo`1hr%~^omThbX`;9agzx#N(btSgQ@^% z7s!>rWj6x@147<`zjYO;1#z=Gc0=s?&uCZVHtXdzjrCfrLG5h zd6+GIAMp2210^2F0+-hU-K9r*omi}S#A;+aueo;~>UI@iJa$729JHlOH^n+@?^xEJ zsK0UdhC9gDJzW3){|6;W-!q`SU``sAr6+E>H2&#!73h`OP|y5Y%>4$q#&#`bx+&Zp z%F%q7#nP(&6`~<@_r}XWP?@p?w4jaQ=E;|!s~GOyc=;I|J>XfhyEk95fjho;Z@kn7 z3xmSXQ>D{)&r2K7I0I&R1g_5oIz!)d2e5R{0*!g~vcQ-0hwCshbWZ}Ui3LqicZPmw ze)hpK^i5rU=k;C|YtVH@u5W6&yJO#I{_YjA?hFML;L+WoJmA$Voh;LwKtqSOO21}Y zm8Y?phwrAC3oqFm*D4RvX+becfIA z!m{>F{bX2~jWCB7WKQi1&^EQ&H~js1|NsAgeX|!lvV+=Q(SaT?2b$(}X6fz#k93?Y z3gI3 zfL!x~4=;?g85uwqAV5~2b+?0z=mc#vt()ELdgr(+c*qlyeL?#%o`5!F1-w|Z3zQsQ zbo)L4O~--mlX3+gK|CKcvmg5bx?-*Mc3n(&=o`b6-L)d1wXZJQ|8$pLVY~p!;VgZQ zmN!dZBEsY+D7IWdMs}C9{{gMgJ0j3s)A$E8N&~JA`yDkuAO-Kc*CH^@pevzX?9>6z z%Yv3nxZYsA2RhfO^aH3&`OxY6M)QWH>mB}n(4s+51H|=(6X-OJPytJDkn#5`f|55P zOhM~Q!Rz z4JZaa1cbfN-3bc*C!NPYtNxD&wEpijX{yUHJo#D@+JC%p0=h}$*G-u|N6VijzM#|j zLSNiu>A1<#1?h^r^0%%97co$7$*G$MZa#nv$$>W&@VA0`*&u^J_}BHNJoZ{)0>Xah=7TIZ<(dzHE|Rd0eZb!WDwS?B-eiK>T3QNQ z!r@wS63qc6J3tnL@V$dKf8BiWdJ{}7D}O8KW~Q45Z$5z3u6J*O+K(-uA_k-$guxDe z@bWikybG}kg z`Jm<=e7y`B@V$uh$%4B{lM)Q9c{#MW~RnX** zGe^LSjS%r}XV6g;Mj%m!fERNhnn9z`M5hH}Km z$G+UH&d3lMk363i28#dgVwr$|ER`(A7pK%gJN;Q2kAXL}1h5=u05yR-3pjdHe?-T@ zH6q*#E`Kx(Z+E+Lbc5%34uWPtc7Td;(Av(VG`T%r|=^4;0lj|GC z51@F1m%>>te0-Y;q zfHX4$9`L`x2rkiJfhPs>WbBpFN6kkxzym&zTKuN#g`2gXAX5Yo6WqX2;3@#xKJo8n z=mkXZ3*2PBapK-f{?_}T<|^p?+q*X`zw`Hj8c5(FHxb4U-LV3_B8}ZlZlI>czvC>R zbM+bcTR@w5Ucc!0^Ie8QhBLY~9iD z|39Mt);V=c!~g#;6qOkndiM(a`2QcgBJmAR^Men)TLl{b|Ic#iY~27-@=gVm^?7=y zfrWb20p z&{gPP8vg%Z5PvJ}cq>CAXmk{^0%2-T!~g%?V4?1*Ac=zySir}N^>)~txs}%ZE1bW- z4^(kEez_s4a1J{A&ff~!8+-RgZxLu!^toGU&HuvdD{eaefYcA*$*up~pq^!~6I1h# z@cPP|j?lpeu-qM}9CP!J@Vcs-2X4r|fTl^;(i+gbJ%|gc%jV1lZ6|kb{%uiG()kJG znm*7Sl{Z;I3VMqeoBxH^b=(jI@gS|~ewc2E#dYn-l6?qCkj?dNHyI%vVORdvaIlkZ z!Yn+<()`<^w8!9fcP}U?ySIXZuXl>%0r36~- zC_U5N3epnUqK(Hvdcabhdsj64{~s3q;xs6YK;mF8C=Lw29elvu zd_>^jbB@l|84dsc-*n{x)!?8hN>=_>Wo`!0{0&G16q+sDxfmEaKXraM_=t5kKLcnA zoI~?M_f(KZ&0mZcAStJph3N)EuLsLbSAiS6pkCy?gEu8QLHpvtQ$d{<3~zXAUI0z} z-|!Uxt(QIs-hI^k`$p+ax8{Ew{H^7n9>rErS~dI+Nh{sGphSI>^$n<3%`&m`NArIs z{+@eW3=9F?;8X`%AHe(J?5(t38MfvlEa1Cu?j5|zeB6tWV>W3fy|9AI-BBXZ~ z=wuD>Aq*gsHvMsH{s%T`^Pd|bo4_WqmOj6G10-Df5`2geNZrgo&dtBU>Sq195i%2@ z4kTRqvhfhe!p4Ij(i)uWN~b~cokJ%i>cNSIl>v03BbW&ZLZ|>J4|lhM5+N%njdg;V z&EV7`$lq%H=l}nkFK)VW-1~XF^+E$Ad*7Y=qXE2%a4jIsl>CL})Z{FzzIql|JkeN6C z+*}K??8+2B;M=92ubrC%|}?!jlZD^3J8!D*c^HX zZbkE65L=**>v$`e0jfTyg6x0<@4-hLy?a5W_rV9;-C$cm*%M?t=;~3BI)~1^FB<;; zKlq5_cfeHXF!$2NjXM_?zx~U z1=K}kv1`3uCt-M?dn%{~0j)4UQ0d}e-3pQiUGD{Qq$SuP{Qaxg85p|3mUd4C8~lK^ zyBB03$kpJQNb^v4E68rm6OcsGy%*&4&Z$el6&h3L-YX6N|1%zgrj0E;om-zY{QsZU z2~HcJyOluly>r0<@QB0k|Ls{%S9a}dzoGlO5F?Am7{Ll@q z=%F(OA39q*8vg&cyimv1ITg(61(E#yJ6RbR+(Fk@{kPx;-_LmWhGj3qqQvRpo2QWC z^dOd)qeqPPf$j~4#1wxY=&sA|t)RTvE7Et9`Gydvt-{LRdI>!4h7?-8AQ6bJ`s?uY zaO&Ux{}91Ce5nCcg4}Go!_L5fD>XpMq+W2r4=y*lO(q&%x(kkj8>|NBZl!h0*!6mI zfQwv2280y%x50%wXvfn{SY`uHj3WXYOHj9hGEeIP{tg{x1_n!T#^CQ$0L>Zf1qDYp zOM9owWDck1UlyfZcW>NeG`Ms_)&$~pr2wapEEDE}b=%%9tT$Bwg3fh8y(@_R4$_^Ht1vXa! zF3JHG1+DM9>8Ju1<@|QUwWR2#qXt}r3nY?o(@_U5!VMDfyXj~E7vTYk*xYn9fs62h zM6_-?TEIp4Kq3-19c^GDAp55tFuc@psQD0o&@OWZ28P?<{lqt=U$c2N{}L<_yy-F- z9%!IrEM5jd>XO?mD(;|t-_b1Hb3uuy6I{bUnz)@{k!G+62Y+h~=(fJ8pnTs6PE5_e z1o>NMeg}0SK&c8gQgip_OZhMV|KGj&^3P`wh1#sBMZ)iHFnYrqtmj^Oef|HR z5|iIS`vs+PcWO1$piDg9(tl$=_%F>;HeuY+ho3QXuw<{(|M^ z`rGg<&iV8I|Cb!U{{IIJqujmm`rL7s$s7y^DvyA&27fE~0A0|wO-Kz4uWF%{>`NDr z&ER$pq;iH&AD4?Y2B{xKn+6IXCT&1P^I}1Jo)ve+m++qN636RsPT9+ z_Zeu+7lR#G~eUcdHC|3Z#_7(}_fFkBauc*;=;KXRP|NSm$(xW?>Z_Zl@145Mbnn&8 zlQ&^jbcep^43z2iRB*ifppyl(j2X1=3T#&M8;*Nt?z*l3?RC6)^5$8PZ||MC_ZqaZ z5~1Jqg@fjWPG^m7R}s(Vl`c6f`{D=?L0N+8N2xY1rwg1HMtE!QQq%m4Si3Uyhl90W1RA4JL83_8lk~4gcQ_ zJ#oVpw0LO?kKygKPS-aeVMsW?7PE{M;qRXfnu5A<_eS&oaLAp&?kH6$qyQ&eR^K>q z$9Kn#laS#OcpSll&iBPlmc2S>Zlzh?taHD~ve)1Y=n#j_6PhCqd^r$Qyq9{u6XG%JJi_N9O+j{~z43>h_d?j^KCtZUK!qh4S#PKXBXiPC&Qo z5m3i~*9BB-c~vl;0IgF$b`w%19RPPUKHuQ=03~TwACSX9iv+9_c*DzyA7-m#_J{U5_|AF#ZDF9(ArRwDUp`|N29q6B@uN=?2(FP;p6y zRgif}#?rZWZ-4@^rxw&xaOLUz*d0&T9Yc7)}|DQLL@@2x?)Q=oks zpp~Sc+$J;mX6`#D>rj!>&96N{=>&WkS7WV2{uBm=dj9TEj^j=S*B2Mqzr6V8|Nq8X zi4B`Umj!}W>~@2WR5UO)UTptzD`*}Q=0cFWLV1F_y=1ywc>E6B*ue3+%X z_CO~yNU-@ZNBD~fur6?3X9g`*0&g2|-Erdp$X%|WPCi3-0ZVrU&t2COH*4SB`v}g? zpnVx{UV>T)pphuhC=4hRLP5o1ckBbu$_UpNprE|>vNwRSn;#U(FK#@%dEiD*8%Wd5 zmT4gB#%a)1P?BKb6QC62&vLV68i)mzxzW?c18O6k?Dprl(K8Li?hX|JYwC`D;M^Je zz%ukfiPvq{2arqMdQII1+%~etNc&en6R55{t(Pi9g95rkIqvJIbUU#$AK{3-?Z9#G z=i!^IGtS*ggWZ}I+W8c8p9Dwix03R1H;&c=b>-b+hPS&}X0;wD;RBz&zLKAjp7Sq%6Zt_yZvx$Jpi`VcLIE%8U_ziN6NpeYL65XqS^th8s>16`nLHE&rXmcP~G}@bw&Um z_--5pki$bkb1I!qGTpU*PD18i!1EE{`SuDK&{6ZQp#GRU$m=qOx4T{DgAP@NxP3hz z*oV%R@f`KfxC1SQi%lUCJ@kau{S*3EZ~i5L6AFIoGs&d>aTaZ z3$z}9>0n`CfazdnU;xb~L9caz>@0P*j2EcC-d!#Nx`qN`2OB~M=-6bi9iUrWg5Wwt z>aTalOSImua|CS_hs@tYt|NiZzUj1r$D+I2K{uE{qm=POz>AhE4Q|5zjX9;>?@f5s@5Ond%bMV&Jc8F?F=!2ud@BnDW>kD`q z0dv18IQ%ubV|jvKE!FhB(=9Tg z^<-!0gStTI_#>!2=w@Adqr{;*^g;6*9{znUV*dkPtmI{6=se87&&BS4CyUC9SrE@z z9xk~IU3=E;`oz-pMd>oc;W*u)Z!ALvN@PH1&OoMVAeRV()bY21&MbX>3AAo6^bX?% zSUVmvzXIDIEdtuyyaUMfJRrsFAeB)8-N78)%-t*#0$yC>0nOoYbTd1F zhO~k?jFV-WX;D&??It zFE(&8GJqDJ1~fnZ5D*spq5z~+M&(5Z4jMjUe{{@FATsA z;ORV`#gWAv{K9YnC`t2Vab%SRzfgg5@`GQ9!#PF4FSy{Gq~I5S=fm`52EX_K=M)FO zcnswzga^O44rU9q{x6X<{1%YK!N1Q%@0wdc@QZyA3Cn+_FS|oe1Y{|It}Y6Gv3x#g zsl$opBLdBp91Q#|o#1PDK~r7OC6&;-6G8W}gr4a3z0l3nZNt&}zoa4zWCTk$4@Y3| zi$stq5NS~PEzm8((d~Pp^-?z@NCyi?iB#vYUK;`aeQa()SsVeuFAU(WdEM=L#sPGZ zF!(0p?$9&fI|@%&25{8(1!OUTw#hQjX8^@F^c3QNECtXk^t*YW;1GCy0Bydl`Hc-| z_BMb8bVPpWg--C+q!wm2a6#5v`XKCu$wH8qFM!VbjFbVLEiJ;#zz~qdk;NGHVg}e$ zaKwbY=!SFh!(P2|%41v=$F zAnb)UR3!8QC@47s!d^&1MSMXbjywTjFW8|Xt{@Qyfq<|VU+026&eILnRV5N0_Tuqe z2FRTYpfwBkn7|jQU1tJaqz1kstMfu&7E3_bi#;G^;Dt#bb?YJOR)E!k%VVfw(1p}t zFZv<2fFdC5MH5J;?-@{tIU;Vgu;Bn_s%G$g1G5=G_b|Nh-~jcA&U89CfbMJInhkNP z?-|fC;ec*OhkzH)AS$|j1-hLaIvGLA9?xQ6=nfS)?gSdUVL0vtt~@)PSdKdhfGXGH zP9hKrvi03b2E+sD>z)eI$J6=YMd2TCF%LRt+Z|Lz`kv_qpY0B*AttjU99ljL;?Vi* zP=~sJOiG*ub7*(%i-7R%NSELjwlIf^bUV2~9BKu2sK{|APz8?9p`ecJafCx3O#!F4 z?nv;#9k=;g7J+6BvpBL?!(OP(0b30!3c_AU!a4b2FL>abqOceLAwikNk(Cto;uD;c z8TR5SoKqb3;s%Ve=Pth&)qGnCHVWcGB7X% z1cY_B>;_#T7Vsi04dfos${En15MeLA&17KM1@f=qfj`}~0-YB>ukO6qT`K~iBtEb1 z4h1I+Cq%+fW&?*e=yqTy#QEmDP*G6aATB-m&I(cMdgizT=g9BfgvF5h3_l|hR6tzv8)UXU`s*w^+Im9 z3v&Mta+GDYNd0NBaXcX7q`}644)16^P-g=-juC9!znP$T;Q^V)2r{o{H>hO?x>z03 zoC|ahf||)we++CU2guChGZ{cDk{}@v0y2}a+hw;xH^_ynAx35ifJGcYWyA~=ArFqg zuotaRAr6o#_wE3mps*K(U@-y9YL5DK;6gg=MI6YY&@q`4ex*#5-i~81(y+j zra`iv3JYlO$C*w?4^Y;7HVy1ANCDw`rrW_I;Kd=33eZMP3D89p;4)(WG*DibAe{9; zV{%AY&wM&)?@03zftTCF9Z3Ob_@2Oy~ zc7qP?0^Lb=8zf_*^5XGS28QF#pghLV>CAH68C?DycZL*x&XB^-Spr<9ID-p6=#4zk zb4`%?Q{eWhPIoD&k0c$?8+)VMjU}L)Eg<;Cdr(>F2I^pd?%_e4z8Vma#S#4C;UtjD z1UyQg9d~^PDqaK9j=O#W*NVX}j!a@;h>Y)WeFsvxeG&shZ|S=Z*Y^=oApUZw;OCy-3TBnF24edlha{poQ1yc2XD$>(MKlMe7t2OY_4aR_$73iR+1 z$a-a1d(#JeOj{}c&T2?m(0Kyf@(b^Ez0qCF64qP#uA4hB;05ng28M{J-q0Ia96>Jx zCNVI?ce);k=yko3#nD;1B>?I%h`(NZn8?5o*&BKzE{mhX^xFAh(Hdn@e4wuuZ3@g1(8B0w@LC!%|+yL8LvW&G0*@lQIiv*tfISy&w6 zZ*>JRYY#B9j%>inQh=Z7}9NhsNp!04yLA(f= zjrAZY(1A$3p*I2ovJ`?|=ucz-?fYmxBCr$GW^X;v$p%@>6c7ORa=;7TiJ+54Sb9Tm z#7BU1{G9;eb414Vmfpxx2z&8%0w_mubb>EaRS0`=7seNej0ee|h4DoqqOw@RUhDUZ_l9U~m9+4%|UUwHX@T4hzdN$zptQ=05{NC!~)V6$uIz(ES6S3{ux%vjx;& zKfvEo0w6)xJEmPBB1<6bg;pOZ6I|$YX6cUEt^msGQCR{3FNFIT z7E<-`r#DSX7*`N)NApe81%RHzB$3fGa#-KVo zpx2!-i!tDZ%U_UpK-D_<7M@Ngo)TGD+TsX%k=hHA2KB%?ScIJ|f0sTD3xj4+FR&Cy zXX}AZCl3CO+YAg04#B}$ECDax{Q>!%r;{xzGK;0#jl&_}#qB?!91h|%9|7H5+&39C zB;|SpRG>q9bCA@e5b)xC4x0p6UGD?Znb)W6;e6Is^&ofo70Zp*)?; z-Ao{Z|97((l*n`*?zORiWDt(97YlkA7&@52x61x5ecA1Lq`UTvL-TPK&|xZ|lQoZY z)}FBp;Nb5EmEjQoF^0X!f;htPqz8YC@-J}p3?6F{dV^FhaQy<^f(t6t7z18dAat~D z`~Cm_%Qv8lu2Jg?(0EOEEl2Q+-JtM*581qd4%uw|$pAjfIiUH`hk(w|JHbIOivEC3 zZF9X7@S+3kRnT2VX~$UvY#E^AG~MnTovsf+skI9<&}t7okG>OhXLR#1rq0?A-8K_I z7tEA`ZdMP54BD`P2W;FRqcwK_177_84T|YI-~k&k@PN(B-{4q)4A?wz=mc%odSL1L zq(lug4ix$XVruJw`nBDVy@cJaNUBP2b-TWRjnRP5ivsn0Il5hWV!H*p8N0bOPk+c(0YTm)Z%D}+L-zUY$z;N944!Ds58TW>U(Q8T2=A}>`x6V?? zntqT5{=Vm+a16Zza!Stx&{_MSqisYwIxndHuV-MeJXCrTw9j+{$fE9^4i{zy2LAQe zIG`2N4s^+M}6{tnQoEuDwJ`%HYVfHt)HzOg)5 z#|#?h0u6gTsTJw=eF9oy&C+#~;Res#1)zB$iEiH~j+VY}>O49>fXP2=nfUpJl4z7Wq9eeBy;Qw&0lcMjyEMhr)T=UspV$;WO=>rA#?17*AGE= z?ZtlR^nC)}p57h$z%ukoonp7I$W0comAxzzLF=^{Zk&W|t-MnD@$L=q{AcqK6>#&$ zqto@pOEb`Us0X`iMGih>>UI@?oJ?tW;PoxguotX-FiXl8dUPiN?c&#OTJ z8_LmX0J=-rRlxF44U0#oD~Dw%2Y-(;6XiWkH=lNfJ%s75sB{D4UC7u zOQ(5`yY2u99(UaXp$%W8i3p(Pg zA%ca0;RZ8o>dKYB1#}TZx9b+h6P>PGK&J@(=ycuDd4hlaLH_kW8C~~uyB+{7M?cW* zdW7)@xHLN9(CK;twAiNkFpH%x2Y+u0sFCFgKF0iDx9f>OhubVF-LYpnSyZ}Rw{(|Y zU_1;m_ZVnDlM`$L53dccD(~SZ7K8!2^KQe8dHuM)rdOZ6D(geukHzb?n`)XPOVOFrEPK z^FPz=dI99)3y8qD((QT!x+WjA+ne#9gJUOXZ@~j_FvNmZvVQ^1^4)lO7qnaF-Obuh zpu}K!atn{)ZP0Q~&=I)M)IwDHcmhc@paqHypfvCjbdfm5cpVQYt(FS3e(RnAE*n}V zfyxF~&|#@9?TFn@;o$+@z8rxsmNtW1)t$#%Z`UP)Pj>*Vte5Bx{a|=f^APxEUXgB* zj&4_p#z&yCgn#{oZk9f9vBJOJ^+Rt96GH<7!@(Z{oh1fZCf!1Ufr7 zK!tqk8Blvrs&fLU$OlckgKnQUykvM1G*s>~jm4>ZPa9|{KjTl!Tcz*1!OD9hnObjm zLZYM(6qAORdbfT6nd8gT+cFVUB!l*ATHdPpn4xeVx><7t$bMHIR*)>Xm)hBS1f-=G z>;RT&-Frb?%^#pWg)I|7<-U{Ut(s?sm%6utRkTb4iFHnC104wkl6q@+sT-oX6m-xc zNVdDB4P<;L%S4cZSD=PV6R4hO{=rn50x_rgHB;x@3;+KAZ@qoIjfWL-fmnSm)ML=$ zq}|}5f(B5U1F>GpfLeO3ARof~6Y%23XK;9e27q98l+5Apw_#*p@F*34xa@c%$Oce| zB3WBE8RRZ-K<)#Xe!LZQ@iizvbT@#aq_+#~ht?CI!=Vm$@A6@0VCd`x1y1)=5NUYw zc{gJX?h2mfW1ua#p!;s-g8YQ+W{|@`K5zZT-!BK+c00ZK2Xl#B z^A8sOR?tBt-BUqvf4m74jG!^Vm!KPsAaQlP0VEj4z`*cwKB%{`4P*{_d#3YPH|QX} zPS*#W7Y;sP?ex9Uda2um?Fr~0p1wJtD&zxdwPbk7@W0_n!*AUY98Qe)yCZlQZ+1rr zFy8BqkYJ3x(H$Yf7<;GrfP!`C1yGyiO1A*$_K|Ma2aFd%W&Z>I^#?#Fdp`h`EUq^g zFM#%lL2vwt<>(fMD1O3t5vuM9L|u366UGaS_mLEXw(pioLC(SfwOkk&j)Rg41FQ)E zTGse!A^?<2LxZsnej6c?(N-CSk_0P7vd#MmpK%^NRo z*eem_xpD5^%Nr+ep1ybH=1I_zN}w~!K&vp;TmqdX@BnmT6nukJ?z`I( zH*-JTc6|a_5e410mirF8cnfrMK_^qAHK_Wj<2cR?qPv-FK~%j;cj%RFrq%-$_MmA( zX3&uUI{*Lwhg^~g^BH*F9Hjj9MMzAb#?Q<4fB*kO!s7K#jQYX_RA0nG+poRBETG9F zXNS(v6WtD=ORTyZK=a30jGeAmf?jYmfE(BzC0vLhuWnzSfPn5sP`(GP>I!}lTnoBM zlm`?u&7kDgd_=(Tl1B+EctQlU{r5yrz>9tLp#B!<40*70CtEi-+oLO+4pJ6-qq`I| zC=TkF+JO$U1P%2ZcfA0L-Q%vHlQS4VgX69r4F7ktG=VnF&1nKPu)2GiK&5b}?}N_R zC#|>nTS5DFyL}(Do~)|{Hx9depIm<6(Or50ysPd;cjz6^N$@foK*ydOdCl(z4dufu z)};?hyt-XqbcY^M{L$@uhVer8ltu?e1_qD`|64CrTmkzlpqFJ*FN;%m=#^fUrhpex zQQ*+(WOm?h0cAK&)pp&cK zfZ9`_o$xJ_|A1B#n>02)1J(JRCXL-KlNmrlHjRzX!9q5Tofkl7$bh>dZ!DWYcJudL z1-CWcfVNVX-sp}!)7{bp($?v^r@N&KZ04M1aM5Vf*6q3nYEEb!5Ewy4LOpkcBy2DI{00n|$j<>+nzwGpydySchU zc>+6KUj)6F)d-rW0u2&(GlDw1;3Ip^L6+cw&LGHQ>1LS`(Cx|-@FE|i6ue-in`M^e zv0A3iW1v-gH=HdQ>#w+VmOcQjh63HD*m>UYTX!f&Ko)a%%O+6j_JA0m*9b}$Jl(z= zSxnt?HiDDCFHdmb3sI2Ct{mM{Hh{!H0}hw?Tjd!UAos)vWN~!2%m>xK4iIymH83!A zyK;2i0j7U!AD56{x4zaj(y<`?c}!JF5&Jj zed2cUb!X|5(yyT9vYf3a>r%kYQw9dmFiIGh6ln~$-)0Nrj1I0{791LzdjH%_4AH$piqnd;ZT z1^_w_fx~7KC4Kd1*`c;F>Js1*dRW+DB{ z#y5LFy?@YUJUpP~TD2mOfrHlnovkULMC$0!JqeVTx*b?Lr)Gde9Ar9Mb3lw4ppv+A zZo$9*|M^?qg9aTh@%No$1KsHNTGp$S`QU%1#)qKRcz37>=lM>XSZ z~;D6@V^SYTjTQ`7QMf*Wz^6Oa33;ZqM^>L*F z-F=`sK=UAE=Z@wf{*KSApboR3<;6PYUKXLwmc3x(S|dP)_JYE$duk6T>j}7bOEx|R zl?T>fD>^0lTR^vzgXX$JMY^|wgR5mH1L(ksIXhWEExx%fpjHjftnMw~Hf=9UQzyhk z&Q6H=5|9E0Vr=JDhkyV7Yu@af3%2h>_gs*X2Y<+SgC$_a&u&mU()`f96=XQL_}L5+ z>7EPLeWUX*c%kk0->oP4I}AYUZ?}SsV+5azA+j^A^%8&Q8<5{(MZn#m-Nzw51~t9h zAwJ`8)%gGae-LPO0QlIG#9Gk3^`I%u?q(TQ28Qm*pfGgk?v?=cKEOhT2fRwy9WK5q z{mpowyHtSjgyE&mHjs2TxPcC@M}xY-u>~q_0$y-}%mwX31)WBPTHgkB?*&C>cy}pB z*o%iX3=ELK0JYSmK|P#Fpiz#}E5}gojvUVhwqyUwi}Y=YrQ z&`yRaOrZMqwM_R`P+n+0#M0f;2AX0ACiA`k*r=r-SOLsUW{}yKd=hodI&x|K2H6K}iuj+}JtQ1Ki)K)9h{qvAP8e z4_HqHspIdd1szXt;5C7357f#^bMNcZ1W5=CRHXFHeGo%|ivcXNiC&y}N5U!n?PE3=8Y-1&1Xx z&G&%{rCvz0pcPacfLjLLt_+}cAB;CZlQ&Hu6T0VuECWR!XtQ~DFWA3xK_(r1%xw6- zcS|qGznyafK(}}BxHlhTvEB>PQIgc{v-e7OD@dI2M0YPZULg&h)=L%Fds!xRgG-@q zzFromUY2HS50=`4-Jt>?6S`-CQehBiLMkxe#djA_6(|696U6M!Mv#2zyzZ%>^aDv{ zkTm1e2^O+suG8oSC$nyFSTTO+-V07(V6m6eKzClcY`yTZ7nG-5MWCt9SHSRFw?y|Y zP}#=6{(kdLP#MYyDU^=4&VeRX(5UEE5a)Pn3p6zxZ|#7xUMqEj6*_c+DY#n84Is1l z`(A_6OwR^zpSe_|Tci&$x_S&+x?&Enf=$=F*Ew|os7ON^X6*$z;QRm1R?rSX&|oWQ zq8K#TI&}ibW4$0(b-PM*%5*qdg4NcABgRv~nox&SC169UV$5?vCOB&T>I4m@LN!Z) z$5Wp$&jnfMh$K`0tQ%~6_gt_G!S;erwCdgpav`Yd3{-&*Vqg4Wd8}5x+f|~MX9MUa z7)iJ0gDl+vNYWqbpD$E+a4XGWF^KFh{|KVATS)f_kuon&$prp>zT`TdY+ernK-VYvpDGxd+ zN#x?sgAbVwzGV8mx?2|H2Ezl+onQv6Vn?0dZ+tU{7u4e60gW&C@<1x%?n$6Ah3-yJ zymz)1eER>tb7~2Q?5+6p|9|Vrx@yA%6OOllM-)JZT{u{`f+R}c7#=v@(t73Z|Nm&B zy;Cpz`TrlZWf(N$WC>PX|H1G;@6C}RFJ8?u5SW*eLr~hwt|d1?)m}btK+V3 zK-7z~@BjY?HMGEi&y}TDnxhvoztr6e z5&)g(($ftZp6cvv`1JpO_nux*P<6NTf*DhvM^oz(F|&hEdecv z{PCZ^Wi}fFL+9b{R*)T3sTTM6~so`PJOZQ7igTIj&&!9>YfU+z8h>k|N2Al37XDdnx{HjH+=g4 zpMU+OZfFLW19DQRz)kR+!Oa6VSfp;Ax^e6N1JJQmt|hkN-BUr40NT+5zT)EM!5d8; zpv4JCSfKlJ_*=tSL07%|fX4D)L2fQ!JAkM24{I8$SVHMW3Au#TLnP{Q)>-0sJp=|SW$WR zMt3VHGj&e|WlhlDbPx~J8uNY936_Br4c&V|;(?4mdVOCUcYOgWAC9{|flv=1)EyA@ zV#e$L{~?BTZw2Mg&I_8?APxi#G=hbCL+|wZKImm(4(gr?Qt~1NtOt~HBfDK+M7Lfl zW$OeNI^BE01;|{GRCnkT(5;+P_JVS1XUkkr4(;sO3!=LBg7PtFdZ`60>(AdJ%naIK z!QUYX3UY9<<5^+Z-3sz#_Z)D+V?7t7sdq{%s1z#Udo7(dp&N8LFpK4lQhtcVo}E>H znt%Q;eclZ=!O;?2In-If%>k8T)?nB5PH6>kN_bw&bUSf?Hu2pk6@r-J*jdE_(OLhb z8(c&>bb_gFa3x_0X7jh62hZ9=#6Y8L;BLaJ%>Vy8!4cLC4iHf1{s4bR0jLi$73B3+ zSQ*tl6%@gpOx@se8MLG#46F!LRwESkf)qgu?M_D){=RpAK}Q_zfR@{@^}6?h*ige* zc6GOcx!_XXp%cup1gqe0*#c_F&IL=?@^nKI<&^oLK3aFnd~lC#F37UZsWG5Z1=3ZA zn$9!1o23~%zXa*4X&&rsO#l^`C%VDK{J|gc=smN&AXC6SGjMUQ`2nR*<^$?*?*$pr zD`L^z3wBfscxWCJ5K17~o?dWpodgx>j2C~j9;o23JjCD11I|%k4PfVjhL1$LUxEhk z@7{o9`kUZF?l!n+xY-l{%Il|YoVf83R5F4#kGD((ZE0@;m3cQ#-1`VQ$q7_sGV-^A z24uRYf=U=j4{|T4a06{rgUrV^A7KF<2-sQyx>y#R4v?B0NbQW5NB;i*58CE;_r^;f zklH=qitME|s4dk3uB z=$IL390s&lrxB`xWuE2nTBgq9oj05<+3Fv-ch=qkHH5x`*Xe+#NxOY{f`hY|17G-M zf?A9(96DR3fkukJ+hVeq0$!Mb#C<^nR?R;cI$Qccal#MYLCW9i2TB^gFS=X6{jJsm z6`9?kPpq9JY7@JAzzU%QW3313in?82fVb9y3P&5Z*Gg#DfYp_diFff2tyUN~xuDpd6&fT>y zxw|7^$bznu06VA4 z_rc`{;4wAOkOXu<9W;6$`k|X;T6Yh4Did_^(TPsiHLPmQ>;sK}ycV){y}{ob z@c;jR(3X4a+BYSj@mG+?9s~rwxSbBM(3zw4K;>2NC^bk5?C1UI;OGGRdK#!V`*JcU zWrcp|cKzUF$<`VAp}qm(xXw1v*lOp8*DxOo6{=g>{iwVxmn)-#}G zA)rn8r$J&DF5ODIcj)Hn8@yLQtb_M{-gdnLIwRl)?+wsgl@sjz{(C1u4N6zg)_Len zPM~wLZ-9=-23<9CgZB>D^dle=z8Cxih{yT>WFvepIM_z;UhpSi8*iLKo(Th;SMUjR zge{xpp&I7ifdAdKPr6+%blb3Z)}HAU>36jDy;9l=DxN@dU$qxNO>o~Q-7J>JSwP3u zfzNPuz0&D24;05QO+e|U4zz!|_QLDypoJ}%tYUVG?M&G*7oDc$uo}n@-;s zttab>4FA6t1ogL>8IN~+vUK{su>4sk0~+II4hZXI*%c7{;)fO3;SQxYUb=zq<2+es z+bwK(`{ujWOLfZKu5WsIW*8oT_OEU--ZdYBf1?B8-r6XgPjZtTF}v|VG!=0&imjYK+t~C z&RCA#RL~)*FD);FcBX-tp#6Zz>p`RfvJybs)Y31bEC%5KSsDB1 zz$}F<#uu_6m5008K$C`U9G%P&QJuviSu9yhFPK3x&LBHGZy+683i2Ol=b;3seyZi^ zc97|G{g9RL;>aZihRC?i!&w~RFF2Axi)JIDvIN3k{7GV9=yYa@j017rgE<@#QCV!^ zFCKw8JdtrAEmy%D0nnoF@E0eN7#O;Z!K2!V5?JB{){?NrA z-GMBY7wT9$FMxy(bz5rwYQ0qF(Rm^8;4k^W@3k+wecyDtUg-^C{10iv`~H%L{VAt1>`Ib&|>#j&Bs`v zE8RLvFMw}vuQToTePHGb_jf44jILANW9Q)lRd?$8IIEs&dD_jbp=F#N{9{{DpS&<~&$m@X6lfEF=|Z0L5G zC<3Yqf2?3EaRy~WN0DydJKZc3xFr@b`hP%?7!y`(-Ssnhpicn7dvG=ynnac=5#= zq*tI5RIc#1yaE+xzC7KIG9bsXfLz&npwngIAO2QQ*Y73h)GEk&DnxvOZe`@?_7!RU z#^2`(9-B72)NIqp*nI0h=w_EMpkUGkwPjp+K=J*eJAk7*f~Pa|NoVYXZh`Iy7R}3@ zw>obe{3ZXr_6h&`d!4Q~0t2&H!e4a8{{P>3tJC!kXkF-y@3l{QWk5I3F+@ZKhrh^) z1s&jhr_=RH=gmKzOx?9t3=e=#*8~r}#lGlvz0rE0TbRF31~kWfp*t322y_DP`#(_3 zNPBg4HByY>mF;Wi5tm%eYhLqYXvXX%;F^W9Q6-!b05dEh2H=qk?};7d(e z`CC9ILEOF3{ErdB+yxpqd(D0K#?6yXmY+%#Z=URq73gM}e3OL(aX}wz>3z^Oflij6 zO7C~OzG*(r0=bg$O}FbA(3-|G-L7XeKUlgxsgt^S@^v3{$z`|e9avR=^WDt@-L4l5 zPqrSY(*s}Sa$`ydXqX**kVAP11kCkLx3`94r?&>ouHG_+yEj4pYXzN}dGq8;FHpML0={?vrG9IC1L|{h zw(j};|9>}QXYUTsm3OUIK)e8sZV#T$sW(9EsbKNmJ0Ny1Sk_6PJCLPYqMK3kPzLxw z<_lR2pcJqdq`tFt3us)j^~>M?{{vn??ziUYZT<55|9`OJEQWv=cg`{}bc4-pJ|b|u z^}=t+U`@9ZcpE|ssA~;21=NZU0r94SloJgAbz z0S)Rf^s?*))t8;U4}OEXp`e~PsOi_)x&fpaJaXFYE71I#v72RL_f(LgZWDnzz3yI+ ze6I+{PEe}oZUy<7fBlDE7E4R8d+J!anHY~jCx;$De9-MAU|GPz-=7ca6@v!=96P~O zw=a(+m{HmXnnr10Vqmb`3kn!cr99n& zjG%SZeILNb$uf2Kf=$V8DYuz8n%H9ul3DTjKj7cA){(hUi6mX2-~&}P&KP<;$GFN+}{ z5HyJnafQf6#tQ-6;M5fGKU4%_Nb?beZZ8GKgPmRq-Mt_eb_;g*f;`$S!qwd~6_iLA z4|YNr-C#$%fmU&s@<9B<-)aOZ^m;+T0SU0~sh|LIWIWW}3Ni*XMFy62?*vP9f<>+8 zf;8~=f##86VGd$M+u3{I z_y7NaL16(e4r($mbZ-T5ArZj%0n|})QhAy1_y2!rSoH4&b@jnns2iN?9XcT#Flp(? z!QWr==RatXEp($ltiAxR_kzyZ^x6n?yDD7#&%gdSsNU}OH45_BWUpzbeSu3VLp-w)I3=DLe^g^z^27|Wdtt%2Gz`< z5bG`#G5im`S)@BurkiJ1>&X&}?obI(6%8sxK!prw$iLfFqMNTB2 zG&xw_DE$QL4Y-PQ@=O4&SOHD9TGuL+ZtVuOe@gPe!PV`m6431mYRiit1=xAe*v}Dx zPS+3JuAl((1g$*>xqxL;>wyyG*4uS*AS**fx_LHqv+Odwlr{l$SCz_yn=+tf!KI(v z-Kbs$?kfd&e}8G?i!u0JNWxHfQsq>p3Z}v z7rZY1=$7n^z0w(apw|Z6K>N;!)^$$v zYYxz*(R(^Wr@U6`cAe52{O6{_mzyV>U$At#P61f~8X;umZvkx#>AdV&di(AT(B1Ak zx??*;z#2fJgp^s+P=UYc-|`Gx}Mx}clVpk<1nX4#g~*Wg~l zhHhVx@UY;(7n-V|QJXd0wGS8%b-S(r_hVdFfDbn73|#|ScxCO9?j0=s&|JIWe~A`k0QcJw*HXc|H#&VcI9h%z;p?uQ!1(L+&bv1qEkA;~ z+Aq67Zn*jS{>^uGVC(?ZyG> zpE(JD4klm#tx|PTx%i_y4AduM>b%f-sGCpo6ezj90v%d?0n~o0ebODu(dl{waVf$J zp+gJ|y*?`Z%@04cUh4EcP-g~O%IbT>@OEzq2ejW-`vRJEx?L{>1%(H^=nVu_1E3at zC(A5n>sXG`r=T^fj-b=B>bqSpK#N;&)a>bwJpwAZz^hDLA3#?hgRh$hHFX%k<@AHr z1Erv4NUaCzJPmKZmIs?A)9rhpTVz5v%gkb9PnO(jQx>*FeMJ&2q zriokz^%3pC9uNTy;lcWdI^er5-UM{J?g;>GayrrNd*a{&CT5nI0YU#mK^spU_*?8j zMP!K@1IU}Dv%oj>ym1Cy8+WMN_eN*z9Y^q5#5wyyXZkEZNEZvTv&d=M{lO?j9 zz8uG0c^uqtrh#je51lvTqe0tpUY3DR1c{CVaSlT|nkfB^<~J1BS73&)4`RhjHn4qB zk+|*i>GqZAjuio|+L8mGu5;WKG?LEHZ8Ev_TZsVZs*~CS-7M2OS@yYi)*f)OJOw&X z;s9uY1n3?a(6E9;cQ8*kH|R!~U>40&-NhV`I_O`g>mE=VI{qHpn zKuFsUmu{tXyB=shBGP)`X6%tVw{G7((ApnVvG_hY_>!s9cMHgbC!mBK@FLO=lxMDV z`=0pI$uhC?c(?Bs&;XZHcP%&{gCgwz78bZs1FD@syCZghS`(1|yg;|_g`4lXc{*-F_Lg<}ZrH+NcF9R7(doOUQ-rbG^@2lp=z&hx3znf5_*+Fm#kA`KhfdcA zpep7AxPIAV>H2`b6;#H9*0nfkICMH`bi1BFG)h2KCIgZPsOx?A#_Nfo-up|?GE3C; zKh1AKvUIW-U%cA~s@izKTN*jKqd>Pjfkyx@fHz-X=!{_L6zJ{;jqP@N@N_!~Ku3FB zkMxR6>_{r58j>!I*S%Q{^xe_Md@$L(g(H7ouv;zdr(4;fZ8suCpr&zJBfrd9u5bc8DR#p z&G$+tb9XGLeCe*~7BRdHUJudvqvIyHpt1$s0P1_9+exIGg`*pEN$3vHX5cA}BB0F$ z&>agGKpU94K>lMq0csSn%6Y%;Bi+F)(0f0vL$C0IkD$HndZ+mf z$6XnfAkdlEZ&>cisJz$)a!>6MNV+X0@`15XGX0qquzebMbG1M13FvK)NO)ERq* z@i1t;_X~l&pmADIcLcO^zs?VQkIOIl?${UK|AWt@HT>2cB-0tX0Xpv0U3=vF&ra7Z zou~NMA3XR=Uh{D0iSP9+-Ju)0YtM8Z>}Ij*4&Blzvcb)|^iJt%(9E0f5zx$AccFxJ z=?nh;VsKJD0!xM9@CTL8prh_U1rexG+U?BJdZ11fwCoZ*jMMEb(#^61eq5vN9&iok zZduJz{{-YEXOVyx8hb!P>Y#vVJy0iQ_`lm3>|2%{?g1}&AQ~*ICF);*)O*Wx-Vc27 zZ8rnMpPk&G_4WrouLgx6e02TxZusars6U3j-%^AfvR{&A4+HXk%cZ*+aPGGRpN}H| zY9rS2WJz?31%RH-Uig7a0Kz z4Bc*^gbZrBf@UZUZ^QZ-KJ!3zKnv)&!p;+hmnMLB6Ey!~=I;ZY_ZyJK92ovW18N*& z7GwAeX()%a+hv}}!5_>4;V(GALINNG&@f&JZ|9-T3(XH084q53Rrk72_hNbkY#+)y$dwW4Vqm5O)b2Mh{}=xZ-dzE#lXLv1=OB)W9b!X1z-96=tJj)7oWB<0;isPK2Yv4HLmKhPO^rmnu*^@-taP!V?M z;;Vx%m^(vXG(TeMbUnb|3OW`LG^J2`r`u&FOZSvU78cMkaosJ`6+k1SwGX;^S{LlR zmDcTU06L|!+m$2Wf1n7cALo0ayB4&As1tN7FaOj7s{cVPeU_Qs?0>p#W_0@=Fg)P= zd9`I6OZ|LMOQ!*HQD>c>;Ym>a7<-|+r3-W;XRk8-=fCEz~E#V#!~+lWSQ?BP~kLXz6)s8X6*y#?v{z5&DGsJtt&tt zc3lJ7*%r|4dLy9Q-2^mG%Q7J#{C^$kPO>&!>ZT zqKQoC24B#fd)yVYCx_v+3hZi5SN_(ej0_C-UUs|gxf#>+r`vUpL#OK=%h)|7po^YC zw+7#IY5D_KUUCf1MuP2$|Rv59Gc&=fL2q4zTt081XUhx zpvs{N)XC@RMoA^`G{ON(BkZ6~4S3_&nQoRD&HiIS z-0ixi+xH46@3?L_&H@@fU;qtDb9Vaf=(d^I?R&$i(}ttlb&Z2%7)z(?8vg#izyJTg zob&hpf6%PUo|_>};Gk~&^AfaY0bKuf*RJVyy#nsyZ#d2ZI$M^Z^T+Fz2=xzd#x(wU zsQ_9?f~`L6;DOYKU$&sshf}xUtq&XDfXDejhZ;F_S7mh8wsd=d&rWr1=yp=+4rJ+c z?Etl33S~NbL3`*rw}Or}>vfWAe(>Q%<|atF11fcTbN+)4>Injs1uqz!K&!I~{{R0U z9oM}Tq_5kJ1>9=^9pUiE5!7p$5CIX3g7ihsf&^PjAZhESJ4-JMq{KTSa5Hua$g)2h z85p|#IY2igf-bv$@Sz**6i~aUH3QVgWbthN#n@fj(7k0E=xoH!&>6ifjgpr-OXoCy z`rln{aqt0C^P>#L58YsofcB4abh<9+cAWugl1H+D1_V@iK-V#J+^}W14C+gDbcc3; zGHq=K;|2eVKMcQhy50cC`JHap22jVn)#d;H|2JdbfR^wub<1oB2C6si3uK_YU5S zT@nbo0JhsfBA~k!6yO2fV5} z_6{g$0$)VigOcHjh;G+A&@||24~jNWas@R+UDtF6g1bSitf0ey+>Z?F2c3yPv1%+2cw@d$@fNs|*0o|^k>T5?p zx9fs{7qe?YYaV36x@)(DcgOAs&SLELT@%?@4g!yO&*?60fHuFn-4K2`u;c&# zPG^p8SCHQBnD##z+j0>$;&E;}$lj?SdpkiV4?(my{mJm0gs>OI!7zXNfi$8xSfCr^ z;M>~}_JW4!aX6SC>|hZj2j|{qVCXKE3G3z#?8f3?kqMBR7lVV?*&+aJITk1LOb7&R27D2-9TdhYFgxL447C%Bn_)I9 zfoz5bvIa~)ERaDqW4IY+=ZkIV$wCM0W=JSQZN}nen9VD;f!u5Wv$OqA1~`~uc4Bce zEJ5aN1LY2dPG=KH^$1GKfh^s=FB~l|bo##F?_v54x`1{{cWFy6&s1<<#aV(uD zUL>z#VCX#2TcX0>{Om*L)`+#rR^nHj(rRe)L- zB8K4drTGV=1eB-(x?4f%EdW$>x|wvFNQ8k74*MSj zp85c{89{!U(g*I=iA-Iw^Hy3wH)wTRD_D0H157`t{xIogVFuS>-L6Lh{s&2Pm(Bro z^X&Nh!RMZo_H@TS==Oc$2H70dS=!SX`v7$E-zrddq4YvGc(wV#XH4BwLGjSb!Us9& zr(0xJ>!lL5Ye)bbce&E930z>C%UJA<2$Ik z738LXZdXt(eE>2G#14t!Zg2((?=I~Ldl8%lDjE!4>izo<+S1xxC=u2jdnEWpwk;^L z@MJN92Gsl%0=q+x1ic6Y3ktmC0Bxs8{nC8mKX}jtsk;VleRn&8GlK_cO^9m;cnABz z2TT`V^hU@vKmO3Y7u3q?ywUBm{m%=QWeg0EeBT?Q!r%PpLubhLKLJ63-L(tCU!+%p zk~kJPsB2wHCOhNrs~WK8#5P_hBFN)|L82Ic>7Nb|3!8ssen(3}dm z%>-_oe6Iwx2@ilK#K0*%_{G!|P>~F>0hDUOSzdyUeeHJb==KG54H!>=mc~On1uy4+ z{r?~1ydoaZA#1e)&326Zec_;kVL`_xgul?WfrK7QHydbRQO<^ep}P;1c|bkVll*-i zj0_B*vW7AI1rt;$2c&!iDSvOxzyRTalpmwgt3| z1U>*+YYIJC8C=JKY68$g0MJcp{~_Ismc^ivvI`#kEudwkhR}!$2m&98Yi|mwZa6wy z_JLxt^DyX~3s7X2{PkSJOE1$v zr+SDCv)7DFMv4*!_YrsQR8Dxs@ht8IHF5vyU z0@jWq{Jo%?$($|a>I}ofvp};*fiHd=gHDLg0v(VW@Zy~@C_q7)K#2}CBJ3nkv*sl) z=&ZXBFF_mWVB_IBAg_3UP9^Wl1y$yuBA_)qprs3z(BXhXovwG956Lxy2WLYUq72Sn zdEv4Ua^NsXI`l$!=nc^N2hh#R(8GgXM}y8s3g|8V-|ZyBzt4sFKX{S$i!(;xNB~XI zhhAy^_rKGmiNB=|G|lSE0a{*R*&Qjszy5o-?~Ps-&=M?$?$RfWH#%81xpkI4u{_7$ zk_%E>dZpX6wKYp3%NXkVc|NVS_nx6Fjr+x(rG zpgPEvqx0UufBcZcXSy9YAct#d-sp6F0a}j`D-aM69{j?@fPtYCbdLYQSMn{F_*+56 zN#~)1hXgJP!@2M z;orw%VELn7JSYgf{AEJ(e@6bkeg*~x|Cfs3p{#CKf$)GAu8`(rcj$xTOrT{s%_l%> z6v34mDD!^n_T=dFeev=gDCw7SbenaSerWwx=LQ;q{tr5u4z#SiPOVo4v|5g#+xLv& zrS8%Tp#0j+GR^5G;|&%G@SYdz&>N+1K?CTncNh=3cZQy^uKiGY$ne1HNiCO3n_jNQ zz5WKY!38vMZJfmz9{i$A7@TT4T|usp!YfcBGihw)fDvD9$(rv3me$c#MZ|78jQo9|rIy|P9Nw8S1N0;^Q2EvE4>tTKBY$5!69WUdJpvt| zf6eJ;`H{b`0+jW`Ibc~$hN;_y=}%|uht9*6t{>{|y!^<>z)&(3WEBIrX!8RVN>Ec7 z`1=e%xhtH*@Ibdw>$g&YmueusOcQ9XRT_LA&xz6x2+e{Z&F&y4wH^S^VnJNYGQ-&; zpu3bO?8OITa4cKKv(!Hh%VOz{=LrT+wA}!eYVM%<$mSmm{4EjTLbp5U=suo+7rjssmTq?mXh>B-g&4cbWx~L5 zmw{v-BY(>U&@k2yrc&!}^KO3@{`DVQzt!m*-iFLC26ekj1a!MAbc@XBW|?vDm%KCR zY;8ycD}YTFu>4$l6VX!S2X8I`)$5F4&;2%HVCW79hsq`XK2}iG|LwIjBGhg}3QRZ4 zau)u+XP|?%Ag57)A{(@}u;dCzEhHtZ2djmq1QwVFXM#lqUhnBev|O9t@Pxm(AO;Ta z&SNhT`(;3B<_%A`>l@93&Veu1@q<+G1ayAr4t=9}0pcxBh1tSzgY!*e{**! z&!5ikpI0Au10^;Fa4rjf!KMpxmw+uOyOpYT`*H*aX9)zpc&`JR!vzhsa`~E4bly zxx@6AT!o0S2D~tah=EU(1ohau!#Er|S)^X?Z9eheiywTyFvOp%fiKuW{yYqET_=mm zi{-N+?sEetqXYbXpz9}`J7ZsfFOJl_5%A(EF9Sn-w=YLjK;Vm$+K^yzeE_!XG3bP? z19b-0aV)i2-EJJvb-;!vJCAp|K6%XzIw&EIrOqF`KlFv8b0>?qweN${7u{|wmN)7w zx0J8|ATY4E2yCh>Z)cb1iawa2KiF}5)TT2FaB#WfKo)K8~8St@E7kv z{7?>uPB)3j=q$#d7x%OvUUicJP0IgZgj@yK{DY~)u=x#77Q>5N@ZDMhoo)(-2VTDT z`~QE5V7Hq>cj$-a8m2%0`CE>G7skCj2kQ6Qb-S_fum90m`vyFn^#Pp7KLotcgqzV^ z`-Y)zui^i0Hw9?b2-$A?#53d)a zua5#PxCd>E25rrg1Z`F-5a3^b)9_L+i&QsDTPMqOC(Bc%pSpc{T2EH+ftnFcptF>$ z16XRf5M@v2yA3;+H-L)dnTP0fm*N4444O-I#K6U`qFq7#m{*TlIJgEVWl;(f``CCFkHHIrk zH%E7b0RQ@ry&~W?ALFgoll=WrAi2;NmZ2j2kcHf#9Nj@0ouO}ng1~JZXnU_q4Qw2w zy_W~lQ_2B~Lr{~ivZ3<>a%-;w*4n!t5YQd_Cb-*IAn=8!8fsGyG<8U;re5a{NK4NY z6h)wx-Um=i?*opO-YLZsn%5bRK{eH10ec(V#ItsN!`~0eDnUVz#!87gI21sE+6rn` zA(!>FZy5Q(*QRv4zVYaEee?1^C^MG6=yv7l1s${74QgF8gKiEuSNgfz^#$nKffwD7 zkne8;RXM3&K&_?t*u&kWpf#=UK@O2@y;dl|2KQfOK>ZW&EjE3uphillK)0_<=LKjY z1NBpCK^qx5U7s+Xf~+I073p++@Y)_d!AS(XhyXd|hyW;TT9QEtq?V(bzuO%-!5so6 zxD1e7=mX2pC;Yt=z--I}ClT;MQUx5;kOT)hEeteL1npzsPH<5F!qS~Y;ERjOsOj!9 zsHaS$E(SCS)xmohAE53bFZo%zzTxiyHCRE(uT~=b#aBp}fP%PnE+{6Eni}Bb2fmF5 zn*4r%&Uw7u4N8DdKnosgd6-$YyLFbnxXEyXW!6oJZdVb@VPkp4UII!Pz8u|-kX~hlaX>(~qfBo#yolooc=1dbtO0bW znKDQ@XkbdBn`H;A)zNvs+mYkoe`qIE^F|}&G-ua06F|3Cf|iPHQAAA~pgT%vRVabl zVLwp%pNLY)5=Z~@4dZc8|MLw@FH-;0!tz7CH7H?##!>D-g6`!6=^$@<`zT1?;-U!fcr0~5v|+n|L6=&-PE(5d(Q>p#Kz zM#Tb*A3)b@iGx;9xqh&872)p#-3$aS$Td1cAE4GsU*y3l08&V3f%L?3bUQCD=zIouMy4{bx}5@Pdr$=>dPgBQpa-P|!53uL*4=Tue+3|mt~%FXY3tN;lp)PqPzBv zWvvK*e>5af!t1>|-L*WsK|7&$g3jIT1s7N#Jxn(x5F8e%UdT=;N7{)Ve8>c{5ae9p z&d;5tcWz36uT(O;4PM3qx|ph#=Vb<{BZ(pcniWA+1DZ!b6#-45ql$p02v9{p^A63m z4;cCTKo`PwyFT#fbbavB9n?Zb9a=+8(N7>L`i=}J1%pl~fQ+kcqC=%;4olH*(k6h? zGp>O(+|4aZ*C+fvkmlCQZqSvhwNDuN`yh4N6OT^UCod&IIlA;icP)?M?OvYkpdqjs z&fqaH%gd!7yJJ5vUha(j@bb{_|NlWno;hSwFl-_TRJMKVuH<-m3Dh$4 zYFROKg9eOayBWF#EHCm;hb(Bdya*p@)Vu)Qb_6S5L0vFVtIvU_+Y+=YC_tk#^aN#Q*$#QJ`EGdIEJ%a<>ytw@~LnkBdJ$UH5eQe&`0D(bO4w2ejVI_rXmTLC`@V zoxX1lK4fA%)#>}<`;E>}&|c8)P=Q|e|NQF@ftH>6p6E4c0$qG|2y|A@A&ySp4V|uQ zIzv~0?i*vf0XvRj6?jSN2hb$Meo)Ep`k*`X&W#X(KcMwito$vjK!UMrxOtH=TamJP9)A?#<>`EWO@;KqtPnfW|gEPyhE_QhFb>@e|Su0&SKF zz0mE!(d~MMfBnU7-wlv^-k)^yNHQK{JY`vXrW3Sn26X?{-5a1ahQ3?69XY`J{p(7* zT`x2r34jc2B90-M*l8u}ds{m(<(@ZN6M`@G%p3f7;y}FMUDD(v{=5>jls#Z+8GocZ5J^ z=n>FhJt+5g`)&b+Gz-Y942IxQU)KW%A2D_M-Z<`h1*D}jbO~r@=0?!Y%+~*P#oeJi zh9_^nyUEghL&>q*bqV7k%b%d7aiwpYYp?t-v4%Jjv@=um?v2jUD{j`MM@odcT@Q5o zg3dnLdiN$sr1ah08{MH-IzulYg~;8Tug`(p|KjCz(8kRh-LVhA$4lRQ_j)mCg)?Xz zj^X7RP}N_e2EYHI`NaRur=Se(#nXDSgcH=I4dv-(nGkyz+`b6ydkPKYteft7iDk`N5G3r7{`Mr@I_1~14FmF3Zx@;+yPXfF&uXQU(~<9Z4aq?=zW``q>>Hkd7hPZ*c{*FcyW+u<=NT;wpjE{IFXnZCPn`zOHbaK9 zkAqiPfCB)$QUS#3o(fu?04n`tCbr&&oMzs=XD%oMHUE~c=L7HYdI4G&;}6QrV13twpYp<#Hk+hhmm_J>cGUo}5sbmTl_d9(C= zH|W~B62I2lC0r0?ogzEjyXS(8>vrXF?gXmg7@;5 z6cDuH0i-wJ#ez1_0oEWk$XlSvVz4h@mc#NpV*J3O+kqv#)Ab2>BWb|pTWQU2c<#oi zaNKr%0@@`vp>S3G9ypZH|K+mgoAS^?#j8uLmP|j2k?iVtC1kfBg;q^&c&Nm43C1 zeNrpp(fYss4nl!t?30=|mZeW>m>pgpgt-({F(cADXs7rE)&KwH89;kEn~$)xUaDle z`JnL;1H*&*gTF+3o8J8S{~siG^W@FHcW*WyVF49xkYk7-`^P|68M<=Zd;+fNO4x5c z*v-Je&~RHf;qtAto3+1gvW9>d2XCId`7y2A_17*?*4_fz5BLMb1@8m=cJt89lQ&O+ zlz^^y`~ljh`s-%yx7)EFZsz{#_WhuFDyX*+bd3<`(k`$=4n7dQ!I}dyITu}dC}`aZ z=LOCi(Xr5m1j4`I`0;_QkqQM(V|P38cr^cDEaUEWy#NcO?jV6qQi26s%!@#^+>AZZ z$pX4w3>=*N9iU-)+yVNAK_b)sdysbq}bm;R(uYkj>E0xo=1Y5&%_7z6U@Rj!Z}E?UD?T10`B-*F}I% zI;&6s-E2^L;HK-DUXhN@6WzWX{Odn=d&=;yKYY{m1n9P;Q=r1cR{+F32x?sUUg#BR zG(6eMV(56ArTykZ@ZDxopyBzOrLRC6Y~lCl9&qS%1+Dh61nqjt1GyFvtT!LL{0z!r zf}o`fp;wyU2;6qPa>EvsJ3xnS_}+kIkQ<;3lHWpF1_6!eTxmT}XV4qQ2=0u4^MT<3 z2mbZv_}AaEcD+*i#nSgiEwkV2YnHJ$YDBtSueh}ysK0HC1c71H!VBxg`emKK7y zilfEj=^Kac9lR+7iOClr6Yt)5sSg??gSe?X6m$pRFZu7NPU#lxb_Mwg%3W<65KobF{|?hd`+Y#n}h06sW%hDUrYpv_IXo z9FU8KL5nx}`y41LVSdVqgEq{HOIc--<-DQKTe>;FzK7SOKlDvoZ( zPA2|7Nzg!3c()@9bRsCA^Io?jNAoecfES+ML96kubbe@l04gOrW6!+!R?EQ9>!QNn z{NMv<&8+JcP&;NGXw=B}is9{U#)Ah0Kub(G4!+=Md<0r}q6%JjatO2-h2`KY7FE!) zlg3Bjbte~~(?|zjFf~2`Ej&>LuRA%^%OZ5~l`3f2N#i5%x|0jtp(i>SJ9%a~Hy>oN z{9QUDqrm58S{6%q(2H&L3=GZBz^?o7A`*08k?R@I!sq5UJk8HO1iUZiy3uuGANMAQgcX#X-$4-{XmOo41 zfLf8RR{~y~ssj}=p!1r-!UJC10UeiJ%K^Ho*j*qZ_{Etz(6kg!r#om%o#BCQFVK=& zo$e|Q!;^-$J8O4zyYA>_>1aJr#|v5)Dl*Tx+g+lQXF|6tkE5jrOZ|h+8_l3bU@O=d zP*npy5db_O*y$t#Ua(oGZFn2B)Wn^mn`cJr$vR=s#el9Hpu59a_PKZPfNw%~<#D!* zV5z?jDt(+dS`U=C8Y0%Gb^CJkM*V62&C(gEQfJ)!o1@O6yO!g)y9%gX{aU9xmZQ^~ z<+wA5$I#8t$&9$R@wk)9A8;%3d&^Q&KhXtN4JMcz~xlXocjgPY1@}Uu@K79 zT?>vCCxzoq8lbWfbchA`JT@3gK}6lkTDF9-iV8v)Bojav53 zN(~UZ+x3Oz?@reT{5=~%mVzqbC!nsANJr;Q&7V6!_FsMgs@*`>7K6tdyJI;HK0sUe z)E%wBd7(4*04Qw|yZp)UQm+YU0n{^4N`x$cI@bBK^TOo^oFBSl4}i9+_#WxBY3_D? z;>5oXwB3-SJ3U6TC(ZbdeKu5e)RS55sTWwH!MYK;aPkM)P2Iy~5?kowvZA z#_%zTOT9!uK7EAn>7ibc>7Ai_KsRLZx6T9E=zFKT_RhhFOs_d1;|ra&cib&&Khz0= z6Pif33nL3CcOEW&W?A~7&Jt9^d5C}xj5kpQ zd9afkv`e=3f&*xaZ0#HV7FW<1UnocC^=>B>@Uc$dEX)z`V*7{x{~^mNUMhoDNP~N} zz57Aw6FeRTE?)(}F%cH)}y>alhNb(iwXs zt<&{QTDR-Fo4Id54di#=rt_cP;3S+*i#eh0x~pP3eNTW2 zhPR*;=E~9S02-oT>vqcEU;hKN^E!0TP1cgjx6)ji7 zU2oj`*d4m3+jmFv8=iY7?;X4wRB!_vJurj7o`eVUMxKBdb=(XL2Oltl_cfjX2W~>^ zfx77K+B255Cu)N`e{|P^yyYBG>E7$c*!+W!zyCVOJE1#zV>a=09(&CR-s13&zeF9B zmc3a5UuZ*&?DpLQu8Gfdhn{FYBA|J}(lMgqQrZNNCDkdd|Le-SYcE*Vo~X;~4vy&d zJ<)kV^9QIcb;P<66p5f~!aVppj)R(+wL5xawu3Aa=q+RLYktiFo~2j=x>Df{Pj~g7 z@E6;;z~1Qgy#TgzPj@ZI&hCJS&I_6+x_yr@{(zWTe{e$UH~x-nu&H}M>ni;tI=^e4 zYCgo?dEwv>`GYTHdu0R;{$_6e$5+R?pAQ`Ud%8nGA=-Jbv!bTkWfxDt3lA;^2F+uj zL62{BGKROieRqIYt#`ZZB0eXP)kaAt7}c%jP)jtS5XfPcJor(S|ix&hf290AIrt`|V5 zq#qQ)j3+cftA2mUAABX-E5p?7y650;=I+oP#~o@w#a_1)Pr!=@9FUMa%-;(+1aC(` zKrhQ(kbFRQB~SPZdr(@8-4WLv%@h1$6KL0I?HW)2Q8GE8Osk?Shcj$?3_Xy1!j2AlHBfu*wKu1l* zY~)Fs0P=wIAHRSXpw$HBWW3fD5BMK|$ctFQiz2pSVP=L;71BKUXczD(9dwm@g zAkGn%u2*VxS}v8ufnwPAgysjv6P;jD{yqs%2ebA{XLZC&UeHkP&6h%d{{L?|S)u|; zv$f!>j`uMB=yU`b!r%K6RIkKd>5Pncc@M;_-P7%Q1?2JzAfD?U&`5DW#LGkAjzG6p z1!ySuB!BBOkgP9<;ek%CikCP4{{P>3>}4#-)sX6Ek2)xzLwAA(H9Mag9{3XuZrZ~~ zUeW6(5wJ>7wOh*br#ngpwCb?&_k&NMi^Z;ia#A-a-a+%1pu?@YomslQI64n?TZ2yJ zc75>u|Hc2EZW6~q0}Tw}@cXwQNBB1@@G>ymto?N3BAN-9U{QhU0E33=A?3 zx0^xkzS9k=Pe8h1V_BVU9G##AgCgMR2<+?4c)CF~d@D_XDH=3nR-y*F zpMZdRg)3<4L2a%8j?Ms{V@wPv$l>=M5GtNA}iovR__K32_-UCxY`A8;OO{x48xV0d6B zXgD4u$OI9TsFOB4uoJYp6eP$D5mcySYyDQr4=N8nC|>M55e1G^!vo-EZI?5P=0}ja z*AIJH&Vq79ugLZ0lm9Ib@%NSg|NsB>d2H@41n{LvdF=;*I(3i;N0&3i*|i@e>O>6>bpGsehB&$Q zgF+ok>;F>a?pU6Ep!BMFuk&)}hl@Wt4qkrU>&JNU=jGR(Hy|exLPG}RkDr%+a2|Sn z8kEjX|L+yK0QC^aE1)Uw*JobyLQ@8W0*{ZL{twF5Ox8{Uwfx;qJchTsy;!;=F8^+R z%-9JYp+uffI`zNvDR@SR+1gp4R;=5Z$MDilP}=Si=yqn&JP1D7yYm8QU=xy_K;!D6 zJl&3<*+gh9%y^;s5&OX(%$2%`ht{6T5X_f3~z z=f}&xKs{BzZr?YC2f7>?!8d_G(n<4gfjTp&I1@DefznU&Z;3iNs5mn;2|~mn>CX_B z{%&-K^MGz}Hb3}6mhndOV{ll+voIcFJk}Y`(`nv$0(#aY)G!usI)zyNdJi;Cdqplo z6DjDHmDj7l<1euJXbwMeX4>XlHc6#x2b2)-i3Mlz_v2-zjkEpu*qxk{j z>vO2{4Z+Pw`9TbvA0X*lqT30SzCqcd8#O^ft#Rmd;^}5`=wt%t8d!XE`*Or~2eKeF zLK!b~3m*Kz%y{AO1W^Ahlq0sAsoRUCm*wE$(9Wmm=@-5H>~`gd?RMaR&)>$reubJ} zTsgW!c{&4lIs-VmLj_QZ+xG3SS1$R1;_#5^}#y?CV`9?g8gN&;}#Wbr)>iVFJwuSS&B__ku@OTzSAr zyYqNA%Un=Rq5MIxcq{Hsrfg1T?k0jji>pbKbrRq`2qh)pgw^fFqj~Z2^Uhx#0W6(2y7@pk zF^mT}E5@-f9%MY!$=4ai1FKh|;|Bo&y-lF)+X3Bm9N{nWvOx>(IlBD>y4kwJI2sRv zq!=%NIstwHoo+lYWk7>hZal{vSQuVU0VT809iY0r^C{?r+E9*eFBZ)cpi+(FBy<`m zFd&N|=*2P6#NH8sli>70ApE*{zya5JyxWaO@qD)*OXn}f)0ZD{2!O&YxjPJ+nJ#v_ z@jwCu9By792~gx|A|$|JX9$u2*PaLo1WQ=s|d#@ldB&XB{F4 zOVk(;;pfH?@Io&O5`Jz1te}wVuH)!*6X<4R`~eCB3kSm%l0 zgFob(-+-Lh8TzKzhU4IW=3bV+pp>n7u-lEL)AvK`fs)YH|8-J^w*#^`xE1(tL=e|7UQ zp6YdCw00Aybqxv!AAIk|6Y#>Hx5@DyC0B9X)97phrCm9S3-F%&Hpy_|c6P<26uct%8s}sDwBb2AxSKzoS4`|@> zxGTqj+?#2!FCRee%L29EVDg~wIPS{9kPnhS0Fj552ZW1(3{V`tu!7#;=giUR%yWzZ zTtwC5c8$z z@=OHeSy1E+Pj)^9=P(w-+ug1lhW|n5eSGNh;Oz?F;a_r^S@>paN$oAYCL=?9Qz!vltw4nE}Qa^vW{-+7Mn80YnF z*AM(lzH=OW#$kA}%Y)tUcISuAU)`l2I8SiiGCbMk$7XmNWaPmI9Gtf}Pe59QkoY&e z1Wp05-5j6_p1&(l;NT+xkh%+om%0M^IKh@DwH$`G4NrF4ch-LBuKmz?9NyzfQNifWz=4bUgWn;iZEw zB)UWl4KFwzd<{8gtRCNr zqvH;s(wPCTdKqv&b^vu77>+xrfO!orpv(^%_6NHKA_ls37QzZ)WMBX_u8ucEz}3aT zSqX4f3Y3MgAJiELegQdLn5VNjfDyEHAG|CH(jEZkE`iSD-4QCCp)U*%boxHAj#uFC zeFTccaDi@?S)HzLz8zuVZv{;|b-RLA3blZ`Vf@=%-+*pzJJ$FRboY}jIHUP~DAntA zW(3Vcvw@l!&Y;s`8Tq$e_;!S;gdKFEEE59*wddLbH{PyBy<9FmGc!BhX>MA03}6AM}12hKUr^aU!vASHP0%YN+p z#X;90)^c>S2fV0D0-d`IYJq^3mVugW;MHZw=7FthJy2qR(rzR&L4wQoV9^_FS;2}*PPeGfr3UNb0n?F0#crmG);76PAyE(CTKF#HcXSn|Pf*B9Vi=lTXj zz2*g-A%Cp#AAHFlkvxa|qdhju49fo7hx(wZ}5574tGM2I&bJk_--VAa|>$g&t25()a?ruMhSuMlg0y;#tEA+*2uyaAVyCYZ++~EOVy6}R3%>|Bwzc`@&?QoIQaD)mq|Kuxu z-wn?2yFh0db~u|I{K3)TBBkMU@CQfpFQL-U&AY+n3V(|%I6y$04ri<00LFtqI65bT zxVwZI7#I+G#7aMR{xtk{%-N3Nn6o{@F=q#cW6q8Y9o|l@|LY_SE`iU%n%LnYmDa&$Y(X#VJQmI*re zfT=t5K|n9du7IEyXW~JLj0Y61&N2rdFbDLq{0azqu{EB7q1&5>@gt}w<;@fHBIGCh zR$UQTyUy@H>&cQ&-QaKot!@PE+HO5rm)IRF0A7R98Tz2X>VK(_;s4j1-JuT}Ywo|MA8!VQ2B<84dF9{#|L$l?Ktsk2-nuL=gFs`)pyY$90JO&d zbj4Y>w*ctwCgeob>H7dY{0nIhKo$f0@^m+W6TyKJ*={G$^p_ZmsPo?JdyhECCAqpn$*^rg5NaNd+Rhoh70`q23KTM_wTg6c+-W&LZI2 z1Lj_sc`P9FI4lp=OZB!0f^KII>U3ra0-d(_;#n+2Co@>b2 z=?(@>rTQM}1l{4VC-_AbXxdaprPKAqi+&jM%!?&3=7kqKVazKp&Ow=>cRF2fyjbw< z|Nl-ImCoZYj(z+8zdLph=+tgMo~W*9sn(MnvAetDR7!-q-8eK)bh>f09w;q7?gs8P zx85%C>vof|yisD%9VVa&I!7unpqFJ?MqvTy|iy?77<4yBi+piU|1 zQ0e;fU9P*q`Ka?yr|S!+&JQm@OG-g^f=>gb#*)zPIEBue)^Rems@-)0(4Fs{wOhJt zw>a`|V-fGJ<7hs_qIulXPo}euqy9x_oJ{jRkk0=lQr&I>ovvGsv&;ZR6{ubVJJ+Gp zO`+TMOzVLX`EEDRS$TasLCt_TfzH@1jWx}GK#KWWmV!>D`rqw)1hlvhv}oA6_62`0 zAE*rR-P7$R&>bdn98zNT%J92`u0#mk@LHksLTBh3ht6M}ZZe&23eN7(C6wR`YCyJh zc}sVP$#k6P@Lk^Ry9MHJmWkb z;M0|wYv24Y5$=wC(_Om(bhWncolcSaoj&(jx?``j-Y!w-4wE_F2FlK$(!2Fi9e=l* zK=TWhZk`DZXPLmOeV#aUwt?cs@W9L4plPAdBb^^!EC8LuCI-4Y-1i9RVB`bAfk6Q; ztfE0lkfS>kbU6s)g-$n)mvx{5>17sZ%hZ3EyW&Cn49XZncQrONG(a;M=s0xH0tOG3 z&J*8Xb)H~6b?_Ja!5{LPhdM*wfNm4*4&!OPR3Zz?6Ci^@g(m1!i0)7xXx8ZVV(C29 z`QZgC$Z4S;IzPNv4Z1ecm!})#&Tz&H-H|N8-JF2|FD6GZFo0Gig>iJdvoId&cKrap zojwfIi|Bg~ijX>iZZ{FoBB&>zy7Fdsoebm8?$9To6*O(2_Uv(%E>PX<+&vA{rnQcJ z)5&taGvqu=>E&+MH=qL;dAj{%z}{m#-3{_mckK(PuYSlM{Kc*bUS7rlI#ltA=D|*$ zS)jA?9R<1rMLI+7vvjiD?*v=Z2{yjlO{P0cpgT^cm!+xOqVYVa720Xh?fQZ7aB~}| zt;yIt4b<3V=!}!;_5^L!;6g+xVo680Sa3k+g>F9{#uEWSFZd%N8F~+>P6!j|_7gEY z0J<>O_r*)l5zL@&GOT}P18SczcYAYy?(K5s=?=Z12^!(@Jp)>96D-ntsWi3ur&K-C z>JdmOx+CGrt+bt>p}#-frF%M$e_qDl`WY0up?eHZb~#CP9PB*R>3gL4khEp!nVN$w z2TCNnizN(CcGvDPJkaH0DecI3%+mKr>HE%NiOyh=3EkBajK4rir-5=p=$_^SV!fr{ zMSV_Uovt5_JBfj+K=94x4?10+fNm0c(d{hJ>H4PE^+CXkvmgKe{{wbTckPMK%lM}s z;-7RN&f-vM2q^G{yPbJJw=&KFIk1+emxZZ2SfrD^Gn}QDg$ZqoI&R5$ zp*xs|@z8N+(0Xr%&S0M7&fvZktbzwEw{ZQ?=_J<8-RXM)stl?opxgC~M?jW8=+ymy z7o`#4m;h~OEfMc7z0i3<^8@&--94I!6|SKdx~n-Df4#on9W3&)?EnA&kp58^r~}nq z$^)+N0s_KYPzx66k`>Q3g)Vis^6+MD`=@lbT73NSFdco_FfcNN zzwiLnNWwv2UKV4(|H&Z5%|{eEkF_4C;|T}|3x9F+9cZ>&~YuDkULpk>((di5Y-B@=Vv_qKzwDyPreCc02M|U|- z<6)3vny)c5|6{0;tc$WP=c#3HKKZ}%#Ov^SPV0D%vQMD$v^VrgKtND8XkqTcUtl*i z|6r(*FSYLc$a%BmeCLlBzd)Jy2SbT`?be+Q|Nnyw5Cbof*L3HQ4Ci@0zxg*q*^bxq z4G+MJ8GjD2g6?=8#uI|KI^8)y(_$w&Z#94T*Zk=}=b@6zt+)9*K+DaW-|+OhJ_&fi z`WkF^>w%IT-Jzf*yxqQcdR?D@?y-E(Z5Z%^^$l3Q^Kk3862)%c2cFG8|CdNuvy}vP zetON-?Zg6FOnAh3 z&^qHg-M*khJv*7Y1v_IV{CNppaT9t6v|h6WvNupB2vVlF-stwd106yD6fy|bvi zV1DxNf3I5ws61Km{{R2(I8gHew5O}N&V+%#6||YT+sy_(eBlxZ@t2zmT*we6)2zUX$KjTJs7$_q;GhP7s=9B|C>Mi3;>Mwy-Gr4&L zyl4wxV2J2;^9guS69D$dO9fDDlz`WJfb%QpzQpE=2*!HhouIO*`SkzJTb(E3;-lk0 zr`iOtv|cKC)*WEdUCYxM`o{8C-Obkj72@3v7NGsdJ{LH;V=nM$^IVXQxxn)J7-;Ev z>!rGV-3}Ip-$18ieR$0bS~KqQoufPCJC8QYcj=JtEQ|*QFS}WnzA1h3dJ0;4a0M+y z?+!5OjrwnSxz?@u*Z(>l%ZoK4-C%bZwBD}J>2`4FW|D-1$04B>&XgxnQ}Uv@E&_Ixo|_41tr_T&D8t*YxtuNIO!)gitD3rfc>)4D zZybEU8rU7?!FVCy#RoQUOtc;-xd}GDWMMbhv{@k2>Od7eZwsT?PKh`5eTv@ivem~Biy>%VC(o>^gtawkd^!` z%Ag9aE`kZg+W!xbt!2b!?Q76Bo7?DCiNUNYbpi!I{r#7RLEV88H3q{2FZY59Kv1>= zWwn48vrsIV^9p>M57c`v*MVBDprGe(X#_LDM;VuaOh9*R5Q;e=udsxX9ahI?vO=Sw zlpE?;F|bu0piwz)FcWMm12$Xl+(!rLHxQB%mmvy@6Z4L7-_!>#nu{Zwx(gVbs{r*2-|_J0{hh%%mmx2fz4JH6kFM_ z+4|u(Hor<^*m?qd3`G`0*o*bQp;b}y5rLQ6euMW!|qf9JM z*D1E1tWZDrkfpoGrSn90kO$+3=(yPX863SVoVQ&BIPU#Ce3Ny`jazA;?gr?duI?h2 zZZD6U?+h;)9)Ps6?&lbA+;(x~xcAek`GA1st$PPc-@LwX^WEz+5P4Yt(+3&^{C&$n zqc{;Porgdx_n&}zY6T{s72kccK?CI9_*+0Lzo8e8!giqC2CYd9e6jxD|No4xH@aOp z1Vit17nnH5Ti%PRe+;U(>cEHkMS<>fYUKyrZ3cFC=XZbpj(m`Xv7idB+dH5;*rhu< zq|^67XY3P@KK{NUP=nyZ!3Qk8GEAKx4nAN7-81zDk9Y9Ux3d?_WC4oVp`w4uv+}BaL?ZU-z?wPYz4hC-+{~r9u4P`QzXN*4HZC z9s%7EAs{osHlum(z|D7^p;sUyJDQ;nBz>QB`(C-9`{1?ocstk`bUnh|*c~r!fl38mj=Qcqx(iJr?j4M>yjTD5<)MH7|3mD8S`SSL z$6arLlJIfYJD~ZBm$N}5*RD4}eRgPEHJ|@~^Bp+BadbNcbbEqMzv=wZ9Td_Dx;c%t zGxW(z;s5{tAAH8r%VN~+@uNH9&kfcYH*TeA`reR?z0)0g2ec(zqFxu`uOdFsbg8FD zr|*@Q8~*+O@8A4Fp!xs*(xZ@8V5jR9$k8&f9Np0#ov~NIr#gch>hSg@xP21?Sr6A- zAHi7X* zbi179=ngr}(;d4+o8`20$Y~b-C5M;~K44~ay&xER1$0XD&HK3*8fwoo@V9OPwPFAL z=kHs|0NQiH-vU}S1&YAeOgB#khu@9e;e0oC#S76t|Nlqcb=`6AV4P*V$z9hK^$%~J zd|lV=Zqe;;(;aeyr`zQQhc?Si>5!W++ky^0W(nvHcj>&rc%eJo|*u6Iz=3e14ldvCsb z{pserm*88%op@Rg)QNTniGU7SSqW-3urOWx@e;I-zxl*}@YyDyh(YvE!#j_IZYZ_s z3_a2v4mx@hbpChfnci>-(72xKiO$eH-Qu7fL<*q5Z$AQVQuDV=XJlY#bUgu@)ou}mwI-Y~SU7ZoM=MULA zFF|XSEnQ#mw}Gy->yCZVUHV4zu;evRA6S*Y4|LKe<6%KCSFEnYvYdy%U;6+5|23SJ z@f`fk0?-4~kAN=`c`*^vCk6F~txEksPU3HQ`|tn%&L1zHy$2mv%fR1q_uv2jwHuDR zUI6usk3){o0bObmdIgqrz&&ATSGhfH0;sb*`*mw~I7hcXPiH7(PYJW@g-+iqo$egM zp;x+HFM#9gO7o}x%^w;#50$KMJ;~ou@(*;68E9WSC?kg6dFcge-Th|ZZ_@{zZm0&1 z63|8k2Iz@QFG1TSntwC!w;zQZ)aeTH){}r2yIz5t86a(ruAFJW9xE}`g=93*6{-6*N?k{ zP7wWn+#S?w_#YJ1?H|+YUJ=;YssZxp3(I@||MyM@HP$;tR63{n{QLj^h3mn8|GULO zTc9rSL(T++Cs@#tv{?*c!SK8TnrCf(!_!&L(;3gvTP_jSxfL{v^uqA&|Njx)?lDmT zy{!>oo8G_v|G#%Ch}|io^1|^h=oA){fB!+F@C?UW4d5&bC=0aBs2f)ic|Q|&oWpz-&`fbzdT z3uu%$5X5vh0Uf{G=gI^+I>iBM@9|a_D618;mg#nI_zRP7|Nk?#f)qpuP6f$2M_I<3 z)IaS8i**22L)s+C}IL$cwheazqcLMRrJ04@Ba?a9tF_0ZFg{&@g-=x5JYQO zSa0cpuz(la?}CE|)NkDeN{#Lb-SOa&!W-QlGN7QC47zp(G|1cg1Kd69JPf)VA{mtC zT0xNk3UzA`uNM?ao%dQ#mdJE(1+lxQf+Db&#klj{!5>VFhdRN0NS5ww-qrH zOJ8&y9H^b(0D2h$oi9HQP7mNF5;zfos*RV|K~1c!Ad>?EK>Y;uJOBT8-UD?KE`#y~ z)NNS|0WWy({QqzG4J5M@P3H4$uyrrL{sFlcIYYk$bs@XM6S~V?IxlyF!};K2md>dn zpkN0Fe&<%5fB*k$vlvT<7_)R9?7ZB1sgeaWO4Hp6Qq+2&PQmaJ_^gD^W8JMFwah+j z9KtbdJWkeNV@e-&w}Rpsl4K7`Uheb{=!_3}DexDx`zr#}Jv#tCF%}X_-SII&FPb3X zV|lp510-7dAnb+zHLxFA50sdKYFcQDuDpPpqN{KH1H}hu@B@;FL1E2y2duFfoEkte z_wp??ydnLI#y8+&!D_*~JVFIJTO~jPuTy0}xvD;bk-u*yIIn}dgU`WCljE%(|NsAo zL=@=8Gf+fh1+uVc82ZgulrOq{`i- z^N?5PRM5;De@7Pw14HMv?r@ib&saJ`moy*Z=$xtoY7m4j>Gl!h=#CNN(FALjoC`9x z8*I2G*rNK%8outSAcHNZf-EV{Jotd6`GrDfE9ion?pCldQ$cLT3*B2m*7P z&VT-v9c&Ds0}LZrAXap51u2GD)EoAp6Ra0vWAh6Eh^72}_dxjw?D}qZi-V7tJEwAh z#t1{0Ko>Iyv2=nD`RWAUmew6^(cKD?Wjxf))D4mY9Xiz=x}>uebZS*Mi&%Gv7)vMk z2&`^!Txf$syAyP+*8fiM8DrgGzezTz3anDF|hQOt%Ev&)=U0YToqv zfgKCBtQREPITdseXJ;?y@Xc=i9iSE$s9dvUXJ9}ywY1nlBdd^`!GgQNI)VbhqplA8 zExaJ5VEv$^36|{i=jrvA=nUuR^qms;BIz1>#%n$z5D?G{xpFmg5-+=TZ z4)C|!WdYSkpfmvPT7j=O0I>`~brER1nh_kJg5cnD2DSMk>YsvYxVlZ<@!(Fd<=_AR zcY|642!r{1&VmXeq@=~)%mr$6Yy$~{qs|f>zx-_r{{8>Y+zUR^417?V@LbS=Ii0jdBU*Ev-Ll;pu?LJo=32HPSHHnS7F z7_xJ!4k(xYV&Lxs9~}%<0686w71Va`?gcHG>~w8_-0RkS>AyBOwRDEIKyF5q1}By7 zxgcY}XN{fuz7(W|@n$#JLA@e^kPC#h!Tym3`vknw;et7MES%A`K@emZC>>dbw$!WE zaCi5Dl9r`!L%9URpAZK%A7E_0#L(&50J0q1<=6{4g9hF-n$HMMV6iR1-M$To&P4}w z2X$yew{J^#D=17riOQcR;05m$aH0WSRx%e1KxQP$CfQ-Mdk&%G`)Fkh_1?nrD{*UQW>(Cbd{j^ z+@b#E33#D!8RA)R?8EXiwKG;N1+dPfGwGMPv?g!2r{4Jn+nL2;G$bSsYd1atL>;>&-*bT~kki6H7 z-rfp(@$MvYRrKL9xG{7b+OCTF^Z)+@NDT;S*@Mnp2lW`*Ks~*eg`ny-9y*g(&ck>^ z@Dp?pRBMQF3;|&j}S@9zL!vFu>;SSy4tkZl%z?y}NzZG<; zBdFp8Eqe$%4>}U51Jpoq?dS~c0kxxAwty@Q?Xd(GlKefOy)5f)zy3oLAGG*r2W^gjS@P@u{|USQfx26Xpy6gv=gao*|Nk$I zK}VN?%P&xob{t-~y=?sfG6+<^?E`J}>-PB29r5L5`p^IWYq)Je-30#jJD}x2;Ik1S zF6j(y==5!QnFmVQNJU5U0mg3M7I0==(HXkN@)UpnQ?N1Jp$(Q7_?vHlj!|;wffP!H zhd}pAflDdF6P$~As)Xc+ zm#_c){}0X|FXKV0T|qeoR!^aJOkN)R^Z!3`PWTFnI9%=c*PzA`xM5)#p1|L76mlb&2PX7d?mN`pDr#q~u@S^5Cq;Y;B zs2eOE@Pg|aI1GDzH-HNYkm7(BS1*7CL0xxqQ1=7WKX1Ln-vJ&n@&zs0>pY=&!=V&( zOCdw|T#%;V7Yz_iueWrEwsgBTKw3cEzCGQc9gucV=TuOA*a<$)^Ch@&bx!~_`5v%n z^9V@C2(Un!$*s35`Hs5>fD^lW2#D$ir+!EijM+UvI6MT>cZ9UXYPjl!EWypDVlHs} zybJ_gZ3=G4%7Jnyr2i@mVnX|`?BJoD86dNdyUqbotp`fP!L5a==b%CJ8G@m6oFgpb zO`_^wcY|BEmcDap7S?k^+Gm!oGm55wx~hh^L7mm`oKE)wP(L;8`~UyDLAn3sIZ!4? zw5;xRqP3%ux3zKI2$ykz6T@$Zp4MX5ZeH*DPG2cPT4pON!l;xfHD!N`0G6UlJDF9 z|FHRH@OZRJcPPhQSMZ!nJ^$Ss;IW+MBP!qqV7C_wbS$To>+TJhC}(VPFWj9ZD*FFKw zbFg&#Sa5X5Snvdcc&vflwJ*RE85SJ(el{QBxN-32sT-F-#}6@83 z?1kHDun9a-0bwt0UHt#QH}pVsL}%!Nps*L+XP~<4Kv$x5`z{E4F+&F`#NP^~JK*mMircq!RgyZX5622f#)WDru}`??1-M!N2G z57vQ{&J&oZJUCcE@d`=}r{wkf`D$~+aGupJlIy+rAv>qs3 z)*CKy+!b_SHUsoX&d$&|pa@$K5cVPmQiQY~D6w_mZvh=q7Ys@x-Jwf@z$V#1Oahe> z;G2G3*En>#u4%4a!&tZHxGU&tMuwNKL9LAjg1G&zyi4GLQ}gC?+&Yty^!G@OA!p zQGNp)2PI6kyN|nW0JS(@o&$}Q3JWovtrHrv?A#ZvpjrK#RIS zOS?grK4&q6|Gx&#_)lPKrh;F*(*~Va{-Lw^45-cF`lhoPw7{x!GiXkz+x10nu|%hJ zCwMJlr-{l7fs>#)f(M{c?gJ${pg`pa2z#*$9HKnkwH)Eyz7GNeUTEroR+@7}M1_aF zussI$L38bs|0V3lomoI$Jnn1)q5=c66tWm!cx!`Jt9nF4WeIdUn*_YD2J?O5BYK@H zvi=9Wczxyn|HxkFn7D3lpYC9fEQWy28!y;E_4^Tl&SR|yDrAp4gVuvHbbf%98pmCq zfU7c4#}U+N0gY8M1iuix`Tsxo{&Sc*(6m`7=x70vZda9VUxk3~P?>I5i9pa5Xd>Od z0s)}KTCN-~I{y9t4?AxFtX`$tRU{+e_RX|zUxADTw{E6&hw@}RXup}3;c)wAT0l4G z%*{U_`QxrXK+?xuzkp7p zw}|E+Ec`8*peEoCM*cqVm~!X@Pyt`d%)roFCjlvB!e6*tgakBbGzHYN;co$-G35vC zU&TRIO1g1$hVg)kh|{3vi0c#ZRwB2E+bk+~+%lSvur&W*xf_?k-wL`q3{+kFKIo2% z34HPV5ZG|b!;tAzkWB1@;1?SXf`vf|8L~wNbdG5WNEW%QBCO(707lP(bjD z3H!jU9*`ucq6KB3o`B#NH~0Pn&w7BSB-|ocK%H{8jLxu}PPc;2uoCcw7SOQSgYGbo zfL^zlfNnpZ&JQn`e}DrYw1S?$6*MT&?Uvxs>6Xx37s1Tm4_c1E-&zi8@j}+K6@f|` zw}fs#kAn|bA#P$k5gs1!G8HtQ&@u_MI_lC(Rgfy*DWIW16_DQADZOzOubF#m4+I5; z2fvsPDY-zyzAa{;)h7q|`{Y6D!UekhMZo?E?+jfK(CNG6#p4H1&z2s9SO*%)4}LLc z8CZB1s2c?e2+-1fu*QJk7XqvP{g1rsRuGZJ5PUaw#*2bw|NeJ}E&-iXf5&x3w>t}D zJ$tw70>uk=;|gG@R>T36W?R5{!<`3YC};*3ymXMibtWhtLzi^BF6eaK&>6a=^-?7t zv|fQ$R)K+_eXT4YyL>lv9_o(W0-B2ijoJG)bjG%T#tfB(CEcYqwe2gTvtaW0*)Ye17|w>xii`>r|ofTcTxgQMGrgNHG+LD09w z*?KPMex}lgFF|8PyFh+>xdY?8JMem}<~KIr1Ic+nn*e?HfZEcaPSbJFasdX0Ue^!Z zv3tV80)k)cT>_3?P?69K4tbt#-xHdrIzt~=9;##RbbSEY%vH(K`oGSyJM=-f?}>wt zm_TEqp*Ol?Z-7?3yk;`I1X`+6d*x5J$pp}TpYNSFyGbBf+kk_qClCg zl&3rP#KC7w-L5Az?}6h0bd}L(keRM$z8?ck>y+w&mh{w~`2)JN8)PtOFZ%amATO0L zA7f|e_C3&f!O7B*rT+R$HjtUV9NlQD(~h$aRY7g?A(T~8c$eNgxR|NqvLC1TBQcmiK^-U8(?9*0g>P}8S7&|^PX z`cesh^BbO^7g@K!Nxrv&u{-uiw=+vGORF4cfce3P7x@aHMJ_7*&Cfn`mhOQRG~7a< zgC!%Px_lpiJayvozknCt1wq?kIXZt{{?T|C92BmgW3VIRK^c74l7Ig@k4Hp-RPP9Q zu^Pm6J=5)a1XMDC7T4A3_lj%QT%7YIFhMfWL(*379_DJUmM@wgx z`Uk(UE#Y~8hIK!<#~-T;+*;F{L;3OMb9_@I?M-L89Dzjen<_yf9G%V)x$I%U}U$(tAVy2y8}*i!zE}ABoIwR_=$&4fu5RJh zZ*^jZ2SDvTu>Ko7O*dtlK$<={HXmlO_PtVi`=#*T|Np@nxj0p(ns6ih}YgX!+fdm%ShfSDtPM572Jm z6EBy5DvgsbLAQm12If)M+sW($4Z^^(4kLdbXr)o_Zct+AE&cFX36YaJZ)7pPIQkV_ z`#1miS5nY=pe~^soZ(7uf;azIK%5IM#*TycJe7bq2)KUeWbC|V9V$@o0an*A|KI=4 zPX~X=GZqI328VRJia?t79NnQJ-OdS}OrRDOWb07pF$CN28-m?kD)4$UWF)E=c0L-o z{HQtZ`r_QLxBt3JIl5e5bhvH?HS0i4*aM)2f#5b#Z|$4cpiYtDC2+#+{E)@?;_Vlh zzxZ1~^EIFZQ3z^bfLm~-7dvC81O$W!zX+WNj*-rT%|94QcJuf7g4EQpfUe@m0Wrfo zx~o{aLnZjvU+)Z^(;X@RxqG8_PN(Yw%M<)P`k=n8?}O%A2}b^w5YT*6tqh~&$;O8a z4GatowVVI(Pk~&?(CNDZbTwxS=%&o>P|zB@7SP1+&DsxX-Ju`S8c+TIoYooo>1OVy zZr=~RG4}t`I(_dz>&4F4j@JKmDWKdC3%Y;E@MNd!7SMU4p<8aUF1T?kt(&Fe29Ln) z&=+@abi2N=WoY>Szm|0ehyow0UI#f=y*qS;BjcgY3mw6XpyMK#n-4Qt{w&=N+Q1px z(d#40)alCuw&Q_Ar|SvJ*b}9l-Jy4&t_ld~u6+>R9XloX#l*RwocW;JR{`8UW^@Y> z3=09p_{kEE?ofqpw}eh6P~93jhkre2r6#y3jkJ~4_W|fq9to?fa=W{(oAh@1o3g6fw!PE!NasON5F|ERBH-BHiLz`*3%?$qJ<-_i0{=`rw0yG8=l?m>Q<>_`kx{iom)^@_-yQm<({;~rSMWu5ouL!DeJ^yoPUx2D0A18A;$e6a z;^rGX-LN3U<>0hVCdY2qJ&cE}eIJyb>~;m6;eWxh_Co2J?$8_1lm>1T;|MvBqkM1G zmG#QlgZ7HY?tm`v?R1^c?K=UqDm<2_TV!Il@0HHbHN7I<-LWeSPjttV$#)0DjfcB^uQ+!4Ua_pbQaU%SJMk5!XI-m)1-!-7d z2l!&i6^s`^SD=6f1R31}1j9qR;{&?OLjnS_7`y#F0$=Rm{Qti@6j{{`!B5Rc1S~_B z@b`eme)#)1LA&_^K+T6a0Wa=s`~N?>*Y`kNU^i%yhVLbC4}A)#+Mf{cqHhkU#|2&^ z8Vc(9bhUO!vi|~LqKbPeuCOkpi{={ zlnhTo$E!L|fOLgO@N~OKa6o+EXz8C&|Ge9GMW^o?aMP2&WDh7H`CA=8Mfi^wyN^J|?$~OtgX(wCoD3vZkmqGOV`o6!13CxZ zJ-{+_Nxf(-XlpF=K3+@L1!W&W`n!D>bjL2y1b6>7bjEH84hGFg&Io+*c>2HpouEVR z5B`(yJZxFIrG~wp-_mtMF;}3tgN8@@9AJgn)o~w{R{r}R4bC=fo52o%jhut7 z7(|`0eE9{miR#B+{?=?zgAp`?5B5q)bzmSUGlhe4KO~(pUI++&QMv|fVC#WW=YRmn za@By~7yDO3JOpw*rk`Gx{{H_zEG&xwT+%RahWMu*w5JNR!u90_&|-s@e9*3}123B( z%Ol-AAeIKa?(UAAfaDg&3jr?|L(Z=Rx8Ly2w-rI>+rAB^`8LbaDn@}P;L$}-o)n^w#?RQYWnB!$QC=-AitR=cgIsQWy!wX)>;`mP23#|t#Z-Y9q z*TARe@V6>~HGu{OT0!MoH>gK(;JE7@XkSwR+}Hef`rm&C@F4yjP}j|qrPKEWXc(wF z_CWB9jm-c5cOHgpk?r!m)9HF8>hkYM&??#TX`o{LMCb8dmZ_kQBIKg57Z(H>7(c1S!>5G7X;BMCq z0i7SZeXn$f9(ZvDT$J&2yY2yZAjAHLZUMXVLhFH2ujV>Xj~-Nlp#{gk7vMzOdZ6+S zC@ikG9w?RS293>@xPqFMb@tt`t~uj{*QTJOSP&NvLTYi4GX6d(aNr^L;t#w$@DDU7 z>j656#`g@U?;Y@>p9$9YzLUjp`Cqs1mB1I#Q~&+%bUhN$>-q*%30?_!F>?~Ao%{yu z{2P{^`TIfl8Fhosf8y^0?SSZZJ+luq_yX#ifJ(yd&<&tF25)!!Z2Hq3vf)pitl^tsu$Kp zy;1tXvH2K_weOkI`$(5rTKb-;Z%5*T23Ns{EZ9th79{*F6F{Xrbi**H2YTS;T2PO) z_DJVv@cMbflP^KNTxi9J*gpiC_3#zwcIAMaZMN&e3ee%U%%BCt;Q3~Bd50q)`NyD< zL$Ex!{P5{K*6k1h8M=h-frDg@C~#DPhlkKJ#|O~D&m#hzpm70s<^YWmw1Tf!1P^4l zYJ>EHGRK|cu2)bp$HNn_%y9*@4G5GujzBWUo!}Q!7?3l^l}^_)u*?xP8I(DWpl6QF zd?=Y?OPwxi=GfBdx(0lI%$gS+Af?Fp;|Mf=YyszwGu@$gUTgtpeB}HAI(ZoERXq9Q z-c!=@$Bk~+8?Yu6{`_$VyzRW(4U#`jK=Mcae^46-G&Xewl0VJ_zObGI${z<{`QuE$ zi^_gP{0g^vXpyiJ(pfZlc{BZ=7KTg2%#|47<;{+&wz&#JjU+qYN0m&a{ z0$#}U;mjX*UakTyNBP`cdjNm_0G}6s+?7LN4tNGI_9Z(gZ@|Y-LBrRfJjY!*4E96i zpM&xSraZ%RsQhshd2s$gtmgntUT}2!uIY4L(CsVI9V*c6x&*Xb4{N*3epu6t^%Tr}9z>}FXyui~QXSze@bcSx}4BZ1-cMMWGrQ3Bwcjy*v*9Fp{ zOF%0c`wT#>ch?2op-Y%uHwcGr>Aco?8PwMOZ20ZqYkAPNHvToA887~WtlV=4sfMoH zEAd6z-&EoNn$~lj(izXuS>2_UU>AHcx9bA%% zA9n?<<75D@18cohvK_XZy<|mq>7H&-O%1w(i2>QgeIOTy?f_lU70%J=&(rHJ5%6O1 z^8f#PeP8s3z5(sW1G(;q0C<~EYa*z`2DxBPjVNf1!2(Oy8D-qvp)Xo5@wZxnilBGj;?fM3O z1PTY_#w^fgRLF`+5ra-21D2Pd{m8J5eV{uMf5|h0u9Z6i-q?4f+w}l=W8V?j#yMzUxAuTgK460dT7j%~{d3guKbiD)W zMjt%*Qy#Pt^H8Vn63{TC>jFVgYCgaSN@hm{LzlcX`UhQ7`4W7vgsVcJL$@!e2{9+A zJM;}`B7R19=#GGHcb6D?%d1oTKyP)F(tDC6{lmO+3fKS6s`vzS0b+}+|q|1U&z zvj_a24wCFV)afn&x}gcQ3{|8voCh=rA1>1EE&vYo|2sjgK+Z!Y*}b7RI)A*#I|8b8 zIFyB$7GsGD=yvxBcu@`(^Z|=8f%Yf4fdw4E0^lRcOu+&+U;!48 z3KfXqo$fB(?%)Gt)IpmV{VR^Uc0jtopb;X?JNy>o@*ZPf!6B?f}}( z?H_>rMq;7HVdD02p>x)b7wGUSw*+&l%W6qHZ!{8eHd?m65;x9;Ksu1256Yd2y~YSut0*eA5>t#gS3$Ww7CNw zq$QwLFp!|?_MH&;B5WaO)pfVK4`^IF6l7f%1LMK&c!zG+4#rQtEX|;j%@DG%5i|-2 ziuUfYntvt_Tba0L5cC_^hXpz2KnjJlMP!oC`|C zA&Z@RSp?wYo#1^&kUeUz7lQ`&UW!3o6?-E1MbTVXTH%&$FgAbw|Hr)FD=Zi`7uQ@J!C1oEoB9KEP#*L=zhai- z&ftB+t=~$848I+B1~2&O`~W=!tMkT-%AcTKX6u2HV@Qk7ra;EFUT?x?A2<=JbeHl3 zbbjh~RS4*Il?mu}l?do|6$$7Dcg0??fR-p8Q2@0-O1YcsA{a|Vq1)hoblw0RHv`R| z-EJ(16;`0dR-naioi|{v`|#rS4^XBBt(gV6jtx{0g}wN;5gb>qH-he00v#S9bKLa{ zXaQSyDbI1&50Eu%Zy;;fUVzrHWq>5XOWzRd-nxB7IzI(M-5Ubl%}RuO!{F|{REo{L z+SuIdhU{K&ds(IV-2d)co{TQgw2&)Dz>8#NaP0&Nu#z~CS6x4V+3fvprM7%r?H247{K?v?A&nU zR$AxN*CLSqTz4Q#H)Hcb4#p-1h8t;(KS8oZuVN2_)Pite=fmcM9JZj7NQ(p-UxMgn zP6k~N{raWm!Ddc|&Ig@mx;eTXSpGkN+;<2GKj<=ZQ1r!$bl37g*P3^ia)6dZA9sBK za%k&+{*DEpgH>+xcYsb>=`4NG>G}q=L%Q={>!ng5%O7QS-L5Y>e|`VhdC>5{Yt9Ll zzsiCPPl7J7xB*%-HEFr>kP+T zL1+2=|9&5|iaQ9jH@8HM0puB|#ot38ytD=#`2)K412k85yxaAO=JC!Ooj?)=#qdgbzq&QBo0N1PWre|CQAbiHu-)%VgXofkWgeSh3}-11_P zq~)m+&d!g92VR02SlzBKK*}Fj9xr>{>-XRAz{_v{{{IKX5(58My&`ZsZNdal=z{Qn z)fZ^|A87m=XnYPqRQ-3*1RQcKY}KI0+s(CwC@hIOB6zb;*{RF=l0Ds zn4J;~6;?iO+%})i9Iz?*V{IGeIm`BA>=WA`i)HP$JomFRo7-gPcW1uc!FBuW99!<$ ztv&S5ZdWS5{SO9td)b$|_CIf1+v_g!uwNh;Vz0&@XRp_vW?wKh*M6OGvHkq^a(ky8 zRrW_d)!2Kd*V!L&t+)TUtKRkaMeDlP11YTMh#^t;;E&-b=p8Xjn$u_eqta&xpjM{t7upGhh98;djSyS`=H zACt|u&wW#9Z&+gCrWw-@|UZ$IyMz5VTf_4c>^*V{8NG}yE9R9F}_b6b_|I%xIiw5_$; z`8n3z3a_lcrYYOlr$pN9sPDG17GG!czUYcgLeD=NT|F_|qPKdsv+F%=@7zzdt!8Pm zo&Rg1t^4^!wrcfTY}c|Kw-rdbWozI2&i2beM!TI0cJ1m+S*R3 z#KW#PKh!RJSCU!#RsNzbuMS-jY;zR4wV*;QwM_GF#?Z-#pNX$JN7ev$R|XRGV&x6P=xU%sK<-tSP+Z(skd-ro9Gz5TvF_4XnE>g^r=*W2&>88<)dzEtxfB!d84mdpSk_tI$BcP=9iv<%^_WHn>ivG zHhP84HV;otw%IAR)P^x+yUo|eQ#Qxu-?N#$=CjT5%Ph86-34ra8OqqMo2X%%nr3R- zyWYvRCnv!6;G8(yR{LCA&5#<~KW|!XrC#*f@=8y$&1;=!dqr)z?WKR~ZNKvDv^^1U z$oAsN)3%e!uiAD;-nTW*e`(9Kli8{I3#jN(WlhX{c`@Ac{t{@@aPD3)yZq<_~`L4usfa9Vkh;b-7d4Y+pa>d-;VA2B)iLP)9mKh&a#vJJ=acn|3W*<&ZTzl zkt^+f>aDe7<=SYc@@k76@A(~er91Z62`xKdH*@+CyL~+;>`YqE*sX84VE3@@id}8} z4Lg&jJ9azT9@y>dd1Ci+@(a5kv)|ZFTk^rKbnO>A=WRdiHtqXkXPL}kKQoQVJ}8sL z-X@#P-XMp=o-K#VetH&<{ho9_d%t7>d-Yf$d&N)@dr@yO`+Ig0_TdIn_A&A@_Q$#9 z>`TAO+dJJ+wC6dXY`m~O7^rj zd*o%G5$$6yc;44u+1B5F;?e+nAC4e<@6=%Xrad9{&w0b_iz37ArRGQ2-?|rRzeXb3 zzRM@ZzOX9RK6X)@z2A{|d*=rU_Ez5#?akPd?JWdS?43nY?PG+}>|43g?T`IQw^x0c zVZY*hrhVjwEPIFUZ2Po?9Qzykx%Tsa=Gvd!n`fU`lW$*UT3|2!vcNuYdZE3kLy`TJ z$3^zGO~v-j(k1pg)|c47vn#c?I9Y1H+ONz$>U^1fly|xPfkWl?i%cu*MVD0A8}L=y zbCgutZ@XG)?{8dX|GKBje$k^U`)-qJ`~6MT_MvC1?bAeR>^UQ9>?3B>*k@g>v5(-d zwYPGswb!hwwYOVcYu|sf*4~V@&fZ(E&i+YAoxOBrojv>PI{SUQ>g*$K)Y-rJTxUOl zx86QlwcbA2y54?|f4zNeQoa4o;(Gh`=6d^|6YK3&=GWUxt**C!x3%7W^Zt7KsuT70 zp%?1yL$24`cigSFXLww1f983;{m<9+_S4?i+i(0-Zy)-#-hRUOdi&g;_4eO>)!Uo> zskb-(TW`Hm8BFaPW9|NO7F{}0Xkpz_~_ zr^4)S8@Gk<$%7U@p4(bZ`8vn4xa^hXyIsmwg+C*$6n=MGCEQqNr8MQL6|*>l^~E4@ zYsXpxYtd=m)*N#)tY4mJwidCPVts4jQfmQ*9o8Kor>zC%-?uKi|Hb-H7pqN!f}qV! z16i9jyEScYA273Vc5tydWEo^*vNpk{cvikm1Y^C;y@Ga|U32?wwAg3ZNUmLAQ_#QC zMtt2Sn{OO@Y(CFFYV)<|yv@VLn>KUKJhtHqerLlc`qRdZlgW1DQg++j@w~Qy=EAmV zI+C`}?Bs0^=c(Gh+^ucvu4ZI=YORHBVvxP0#GV|GGoE5N3 zm@91OUo2*)7TKMyDYaYsrNZuGL5*G4$9g-H-Hmqp>YMGN-CFHf z_}lF^-0ZN6T-IgxwWPdFGn+Nl?m_W%J2(HCcCk9M?c}-V z+BLnNXIFoAfgSh8MRxMjme_5qS!TB@Wrdx--zqy!%Qbd(s_X2I32m^O#<cANL^wyWB_*UoFzemluU2kq|8I&9ZB<*1!f|8cv%u9J4B+fLh^ zZ9Z$)(|F$QZ~a9(iTcZSm+G$CDb`=N`%{0@E~4?aoo@48yMosHcH$im?IgP&+vW5< zwPT(1-0t?&mv&EPzP1yc_tq|L(R;ho%Rbs!ul{VecKug7(JkNYvUmKnTe9c3-PQwt z?WP_1ZzuPJ!T$VHM*E28O!nJeFxx+R$zp%~6|4QE*KGDYZ`kdf-f-CKzTvb#^_t6G z_%*jZ%PSuH=`VQgPdwwZpZJ8|{{2G%`#bjp?L%%0*#}-1w!d&m#QxM-QG44HV)jah z#O+IWOV}H2k+ct8BV~Vmv9$fRSu*x-Cdk^Cw#nK1R?FMxRZE}>@6%C2sI`-{5$)rT7P@6T%5tL)UWFI=o`f3Zi$-l0_2eou^^y}h%( z{c#Ngdp}-7`^z5;?E@|w*&p6wY_C4m#J;M;)P6^hnf)DobNi><7WU_!S=diKU}?dSjXw!gl^$9_$buf2@6 zpS{{6Kl|g;{q6sH2iTwd7htcxA<$kdA;^9jU$Fg>-NE+u=^^&%f}!?OyF%^562t6e z*u(8JSBKl%`9;{zcpqV3(I07lS2xQ3*r_OcqqJyyMTQvr$unZ?+w^1Ye;$4udk5cqd#%;^_FLHt z>>nl-*l*lZV6P@xXz!d;XwP-1(7sx%$bNQak$u+gBKud|#rE>i#rB*li|yBZEw<-$ zEU{PaF0ub}xx{|DbgBK<#8P{y<)!uXzAiRp-rNu6^0g_-5{ zAxq2cpWH9E50$L2UlCYg|EQzFo_T+Ty}*|Wdv1+N`|nYe_SbtV?bq(Dw6A?zY40gh zWiR4YW&fzG%6{vjD*Fj%tL)3ZSJ`JPRNEJLRNHsuSKIHJT5Zp|yV^eYezpBqrW*SN zsx|h7?ltx~88!BkJ8JA-F0ZjKI#y$E@TA6Gjj`4~QnuFqq(!ZLO>nJ!ac-^srnXvp zoB6f&!rN=@ZO+x&?|4#c-~FrBeg}V@y^~6vy^ckleT8?Oy>?uky<0(@{h7u(`$LoJ z>@^qH*|Th}vkyB|XRmy*&OY~koxS+Pq=*W0se*V}WM)!Q#{ zsJB1sRc}8jq~88hY`y*aw0isA{CfLy<@NSk>+9{E+w1LX`s(eIrqfy}*xp`+q;`?XUf;x1as1-rnbTz5Sct_4YM?>h1shskhJjTW^2)Z@s+SzS+xy7%KB(>o;nn;VrV{Pk<_}LEG|zr%Ytit1j>Yb(R~8cc zl`XF_L|Ixe_E{AUtNmJEt)^^ewXO*jv=+#hwf1DuvX&P$x9(c#V%@kh$oh{?qV-4Z z0_%un_141Y+O1czO|X7hGsF6f!9r_)rB&8hft#(R_U*9_%Q$8&6>z~izVw#0{Ea8p z!4>bVzl8p>uG_(6voVFkW}-fyjijWAjhmvBjj)G;OYO$+k9T{XJd3a)aErytc_G`ip{Re**3>Aifyc9s%_ZI8*LQxTW!+HI&H4>^x9-@ znrNf=e5%cFtywmoYvL86u8``_~L4t;|UvVwEu6hnYCu8jd12Zn@J{zZAAD_ z*i8L##zy$#MVrna*KEG>-LVNad1$jBD>uK)HX*ypcAH(DZ9h+= zt>@n++pdo-w*D{MY^Ocxu#J1%WxM=ok8SSjKHK$QCfMdOPPSblIMp^-b-HbZ%}iUt z@Y%LCZOQUAwznRvvt1;+(e`ZYX4~+E zTW#%LY`1MP+GVTIu*X*H;y&9X)q}Q7wTErLUO#GUX?DW)^z>7sY?pCNKDIYiIw<*7o5a+t{}MwtnJ_c7Jl1>@1Ej+x?eewF@j~v(vrIZa2|@ z)2_Ck%kJHKZo4OeymoP0`RpR41njOg2-;nGA!O$pBx2{fSJZBYrnud*=@NFl>{51b z%BAfbU&+{U$I01wUY57}<*8^Vb4bZWj47WfpBG^&rM>V^^GAjah_RVB+Eq-fw%ZU;Yxh^6-cB#G z!7kOS(N0CD$u5(x+0Nu+vt84b7Q2ugt#&KtwAs}+w%c7z>#$qx(`onLsLSr6WVf9H zV~^d-7d>`*7klmA?Ci5sTHJ4Up=W~Km$Hd=eTkFo=J-suleL&)C#W*ju1sK>ozLHC zb`xGrw{yNR!!G&QOuP46X4ySkJloEF@*F$C=DBvx#q;cLC(pOL6|%t2#%-Y;v&AAi zZLP(2TV-6<@(R~~2j{dr?x6=>WVfV*-r=6hN zF1s9u-FDp8d+gqu?zIy$+-Fy(v)@il4d1wtwul+W)oN?D)@avGaes!%7VHYZo)v_o*=2r!8f)H&tV@ z|Fw+Cev3M@eew!sdsa;r``Ig5>{YZ_?dPvzwdc`hv(H@3X1`sV-TupJc6$XK4twi0 z9QH0coc300IPGP0xa?oA=CWU+&28_wn%n+{7LR?vDjxfdn!NVESMb{FXz=T69p?zy$4d#@$ITG7w-pny|1(*{ezu^f zy+psLeF=}4{n}13`@?MF_S>4p?OPcn?Dc9T>^J|Euoo(mwD@W$*e*%APGv z+J62+X?wm{8T*hMGWPkwvi9-kWbIWvP0@bR zd`0_b5=!=5la%cLaw*&IYgV@R{iAHZvP8xH@*5TV6Dg|pU3XON#X{8V^G>VT_dBWE zSM5}{*Ei6xU$acZ{-cbh{l7_?_Ln%c>~re0?9YDIvj3c+ZGZo+wtat)jy>~n9eZnQ zU3;_jy7pg`^z2Kf>Dh1N)VJSRqidt+>`5o=;EcGkpxzm2KA${JI9CuuW#=`J(-bwAAPf2Nt+|GQ#tzuU>e zUVnpyeYC8ly?vLZ{mpNd_L|97_6Fyz?B7^f+s7`mwr>)&v5&2>v48!{#$G4T)?RV9 zt^G+AJA36mJ9~rgcJ}Y$?d{`E*xT0`IM@fwaInAl-@%?a-O>KZSx5U)6DRwvvz+V~ zGdSBjq&eGnpLVuyHgK`moa$m<^V7w?I@Z-*{h+ITy^5QCOS_xB@hdm`J|B1cDeK(r zT?9Pr=NEd|FS+DlA8hPtzh<(h{kqSd_L0F}_G>qJ*{>Azw)ZXYwx4y*+rD4N$6mY3 z$3E}5kA0+zul=h9zV=FgeeD?{{p?$}_}OpZ_qT7z^0)tX#NS>>KEVD`MS#7sOZ?_J$ z7nl%g&+{bIewBHc{p+qU`*U~0?1K%$?JJwY?VYZK+pkfLu-{P@VV`N7*0!7-e5=A8miBC))nx&1m~XwHW(ZMKSip`(o_ha>m-T zhsN3;njdQ~`zqF6!X(aqb8Vdc`(ttTr}^XUJtE@mQx?SAE53-guhUPkuP#flm)M(N zAIh9)Z|s?9zp*dT{`}=c`(BA8`!_L3_OBNt*>^ojvOlGsY`-ci*cL7Kh#x-|RCuhZ-mG}G<* z)6(tdFG{z+crV?4iByKYR9J?+;lvF4*QYb=-PtnjT^%y*pH*hsYi-W77kHCtKT{>k z{%A~={gf$L_Uvb}>}8p=?XOv8+nW?*+nX-Sw!d{d+g?R5$6m-S$9_pwj{Ti=Ircjq z<=9(_<=Q8B=GyDjNyqahKf;Hd1&otlu zc1phe#mV{hd57}tH-E^tUm#atZ{|~AUs_pUAG@r;{{5u_d(Hm^_I%of_H)7t?XNZ# z+V5CXXzzBt(7v9r$Ua%S$o_Lkk-c7Bk-g~hBKwu+i|k*1FS5TTUu<9KUTnW3uh@R= z)MER9J;nBm9u?a!^znfZWZ@i<_Uh7t={pH`K_6D+L_6~Ms_RR5R_Eq&|_RHp%*|+U4vzNYKW}o`6 z%sy4N++NzI+`c`k+tD_^{ce+NUyZ7XsEPTompu=VPmEJ z&Xbk)3m;b6d;F}lUnfvye?`5@ey3fPeL`rJ{juyS`*)31_BW7S!0!X{fQUnNVY|zM#f_ z-ufE*NBe5*znrbHzkH|0zTtI^{qLVO_O2YY_Hkmh_UnyLcms($E|8!fOec!%1d$D76_BChg>+Gj~sI#~JUT1&!Z=JmkOTB#=SH1mWfqMJRV)gb*W$Nv#mFn$H zH0tdy>DJo^8`s-=7D;9sl)a5K1b{A^N-itH=V4vZ$DjcUw5|NKJ9$Hz2n7td%nx{_Ghou z+c#XRw^zGSZ@>R$y}i%vdiyhX>g^rx)!VPSUvJOxu--oUQN8`*$MyCPp48h5KdZO5 zeqL`M^`hQB?`6Gx)vJ2@n%DLAC2#8OQ{L9wd%vr<*Lq)X&-kI<{``k}`>7x6?L$7* z+w**`x8L)*-ahq9y*>NadizCR>+Q|I)!QHYR&Ve3z25%f_j-HZANBS}e$?BW{j9fN z^t0Zc^H;rn&aZm=lfUZim44UTm;J7{KlZ!cUg%G~edM2d`?-JW?eG4nx0m``Zy)@( z-oE2+z5VXL_4cp+*4vAL=GXq!+o%7lx9|Q}Z@>0mz5SVg_4cp+)!VcFueX=`UvF>v zzuw;Kf4zO&|9bm^|Mm6_|Lg7h|JU2k{a9-_UV=Sol0yXYqLHRg2@w43;ZW z#4X#V8dzp*^R{$2o?*%Uq}ehvW{TzhGfOSmOm|p1PCadz`S!kLh3!|%9fw%0mL&;V zwbjX51&V1|acY@ct=Z{fWp*^kYN=16)i3`7EB*8JR!UFXt!61qu=+o9hE+h|LaT1K zRaWaNH(Tv`wa04p%wtxKZ5OPpHr}$jBKg$H|G;~z)@lt)=P4%tZx}PT7MSzuzoM?Z+*rt%(|-~)>`dhiuJ;T z9P6L|imi3`R9nlQX|$ervemlqTBr4%PrcTKa+9nlMozPqS~AO;=ifZ*wDiT+8V{CR z2V|_VzW0BF^~Ggdtu!6lj=R=tEFW2C zRz0_FKJ~`>r{*W?Q!~C>e--;{Z4<<3vr2)*=EyfTo6akoHa~ar*a$D@x4AJ}$i{Vs zs7=fq2^*;u(l(8|yf9C*vG|;6 zqr5HGW>rI>&8eVLn`WI#n`^waHVM@YHVccJY}Vzs*tF%h*=Q7Z*i5bJvN_w@V{>jw zpUsTr6Kr($O|t2@F~w%>w`n%BBxc(9+0C{&l|I*ocj|l_@nZ{Zp8r~GQ)|4;=4Sp1 zo1g1f+1&rU#-`JHz0LQwjW!zBHrvQ*ZnL>szr!Zr)-IbKi@i2ov-aC~F&wfvm3hR5 z`}#2(9*>hYXZM`8@ijeX)3fn{O{d{y8`rH@ZT8ySu=#xamd&%UyEao_-nU_Bcx0n4 z_0)!A$8(z{k*{oi{d;4>x#GRerI1fH!K`0xdUt-esVn?tqpthcrtQstn{(lewkEro zY)chbY$vp{+O~dRvki&nu>E_S)3(8k+xGS{9$NuPK3mydep_Z{LED2>Lbl;wgl&)J zi`sI%6|+^(k+79|D{1>AU)r|ii;V5>DmhzsW(C{KUPapkNo8BzwMeX_IQJ(t&E1Xt>Z-- zTZXciE!K8QbG+@uphVjU$WEXc6+ ztH`ot49c;s*3Gls!&P8=^kt##lvBmFnrlmKTPK#=E-SCJ?TN3pHTSHwU1m~m`*uQu zZDvQK?XiX?Th^*(Th)>lTlM@_Th8n@+cW9ywgssjwqKGvZ6lJqZ09C-+a65mu|1O3 zYr8zN&o(Q!-*f^B#CMB7)jlWa9wC)+yrPO-I}Hq};S!8F^GtESt=Y@1{nSR_pIv+n2oaZCm6Q*#0tHXzSy;$hInSv29b{65G_4rMAkmm)Y*w zwA@zz^a|UWCo63i{aa}JsYu7>BQ_l|B z<_jOOed%!2);#~1ZREV;wtnYM*oyx@X}j6rw5@XT8QaupXKgD_owH5&f8JKo^rG#O z>`S%`i!a;i-o9e1BXZ65x9@e^SsgcQxsKel^tBijvo9^0n6xun`*YifGcRnNgkIVHjCgHZv*3;G=@)NppBcWlJyZR` zw)WUZ+n<7;ZSCW}*!r*jYOD40o9#LGAGS8rf7%v3|7BZb@yFJx>#yypJO6A2B^c}! z4>8zH&0)055ofYnc8JN&C6C$8Rf@%K#W5DU{9;zS847H6%IDbZ1Z&vslC(JNL~e4} zX>@Sf%{Aw;D}Byow{|+Wox2B*ozqVqyLqd4?V@A&>?-*9?Y+SqPyzKPuw6H~jxKTYjC_nXe>MF!d1y^waWJM+}R zj&*~h-J~ifyJA;oyA=X1c7}Ic?D$r=+S!%3*&T9lx0}K1VR!JBhn?*TPdlD6FFPF< zZ@c+IK6WV&ee9|>_}V?J_p_Vj?{Bw6KEUq(`vALD2LkPuO$@U8loV{&YZ78t$rft2 z~c@X z+s$8?U?*3RX!p`D$&OJi*)HX8vYqhN6g$4Psdgc)X?9Oz)9ntLW!OFE&$NqpnQ13{ zILl6AZnj-|d5+!xz+AfrI(c^79Qk&2kMr%U_7~XM%`UX-E-$i^4=J|$ZBSw-&sS>K z^}5u~`ed1%$?|f$;?@egAIX(=N1Uqct}0gB=`hyVop?}Vx9UKx-Gv2pcGivcc3%w| z?D7{j*l`Or+MR4_v|I7H(Qai*liiuCO?Le5&32_bn(cmTw%9G2-C~!`+iDk5-)a~8 zvDL04xy|m<)iyg@k9NBgyV~tabUW<$Xgw7b|f)9w%BEIX&lS$2y*%(9cum~FT9{%pI{@Hut{ z=jYgoy3e%}*+17#*LIWhc{`Wcbs8_X>t4IuZi)H| zyQ>RV*h$N*w5y!9((bLmD!cOTRdy0=tL@G;thSr|d$nC{*&4gjk8A9ja@N`{eZJQ2 zZqhnCt$XY2dLq}`FMeEw8e8qQF4=0QtGLZ>$J}jpp;FuJSf_8dJ1)G#Zq9@qc1^rH?W((W+O@Lp zvRl})%kCWGZad!k-FC5mcH8Z%++%0(eUIIylD&3rpZ40l%-?4>_w7Err0o56W-s^K zNu?jK<9m9*PB8hPoyx<5c5d;9?8@&RvfB}T*pB_yVY`%wBX$?B9kKHcJ!*I5@=?3& zpksCd7mwK;_CIdda_+cYknagQ-7_cbM7>Yiai2PA$Lo2@PWHqpI}7*Ic8SMM+f8*n zV|VSy89ODHvv$>o&)VI0I%ns9=$zdt$Mbf92hZC*a=2huf8c_hn!`oA8~ZQXO|idZ z7rpF9V^?tKj@=ulyLJVK@7n!xzGv5c zwUWeNAKIExIM7rJO03Kulqy0;u8<;^gJKgy+8TLZmZX0yZY0Q?fiY7*r}X- zV)xhgsom{!Pwn>kKeJnM;h9}u;B&j$OV91{gJ0OCTzO#^8~V~N^4d$g$naNo(KlY% zB}Bfq%eeL0t| z(mvWnKL2P}lJUuI;>%BVYqLJvoqGM*?pe+kJLY#^?Bw&m+F5`2Y8O`c&930nH@nW_ z?{*8ne7D@=AF+sU^4w`*r&u>a@8U|-zKVE^negMAnaqy14AMtj3nM*G=E8SRc+XSRRn&TMbd!EE1qg4zBa2aCOqCyRY~CyV|5lPvbkT&(sk zUaa;_U99$dPO;j5;$pK`@n*9R?q;*EJI!Xll$+iDxHr4~vu<{K#xv~p;yfJonm!!% zW<4DC_GdWkoq0Izoqag%?Rq%vP0n!ItMYK!3;A%_|Lo?nzkQm^eg`+V{RD4r`=oAe zd;Qbg_TRX8?00za*q3zi*lVBSvA@m9Yv1O{Yp>nOYk%qluYD2+pZ!;NKKsUYK701# zeD>{Z{PqlP{Psny{Py>b@Y_4H2-q)l7O?->Bw+7(NWgwFqoDm&2SIzm20?q*{et#I z{{-!)+X~rltr4<6y<5os)-NIZhnB+j4=aT2Z)_K~Kk-f2euJrqeSe9Fefnk*d$Ug> z_J0jT?f2x1+83=8wO4p6YJXH)%sweg%>LU7G5f~nV)o2x;`X&E;`VPBiQ9)f6t~|b zFJaFfCt)8vN5X#UEeZQ`5|Z|R!zAsMr%Kw}UzW5F5|px!@|UuY?3J?jJ1u2z$ti6w z=`L;mp+(w$&mn31ItCegGdmgk$JH|SZ98S`<-W_?g|0+wX~yx4%78-v0eHdHe6e3ie+D6zre%D%hVsrC`65UD3YS zMbX~0QPKYOUPb$9zZC6F%$4kq6)V|$Z&0#7`bNp#NK@HBdBe^-do$=q)pp?)d6jLf#2HpnWj4SoAPz+->lTJ7k{E- zZ!D*4?+~GDZ#zlXUi*x$Jr|pv{VjVv`&pHG_FkLy>|ejpv#(LpxBnNfZ(lG|-~Q4i zeR~xi1N$^r1N#|u2KKwQ8`z)uU|@e%)6jl@lA-;A*@pIoR}Ae9d5!EJx*FLx)EU|H zZ#S~EbJRkTiA;;S=!IGu(apRx3te$YH7dowx#_SK`VP14=a14IxBnAEmrnw zudM7@6s+yfhg#dWcU#-*9<;VU@XgxZLC3~^ZK91m`*a(7zcV)WO^mkoi_L89H)h+~ zuU=qlKk2HieHxdYy}G@f{gq-n`@9u)_FwMU*{2KI+aGhaw->CkxA$CUZ=d_f-o8%E z!M@7N!9Kap!QNt%gZ+=E4)#kW9qsLW9qkV{INFHe{dyR{|>pBXYcG4VY%lu;;|t>|f>k*{_-F zXCHCe&;H#HKl>atfBUP!{`P8({`QIM{O#Lr``b_E2(a%m4Y1En3a~fn53ql}JHWpA zMSwkrXrO($W1#)H+(3K&S%LPJ#{%trJ_Xvl%LUo%cm>)2Dh;yVxG=~*@NAI%tsg=5 zJ}SZX%lw1wUsVO$i!BSb*SQ#Muk|O`UQj*6{y|`f{mhyWd#mLk_D3#;*qi+cv7e+C zYJV*t)Sjt2)Lvp~sJ+Q<(iO>2Uj} zF5&h+a>MPvObfTau|M2?>5FjtD8UH(AC?jJbx9HSZ@MDvoi|6=H{Fh~U&$P4zf(KX zeq(T?{lw}>`>4f{_S~ltV!yK~#olUhiv5zqDfV90q}uzXq}pq?q}sn( zoN7P)aH_rb<5c_QOlkJqN@@1tj%oJY32F8#>eKAk%}cYNy*JIi@J^b&{_iyVYm({q zsTS$>cf!)`txMDGTPCO5Z`qh`fA)O3{kga4_B*&U?7K8G>|Nb6>|ds2*q1bA*uR{g zVeh&(!@m1ghW*a(8TRKzGVRYBX4-G_%d~IL&a`*v$h3dBB-1|UV5a^3yP5XZzcTIX z#j@ls z?Xw*7?FAz9?H3m0+skz1+c(V5w?Drv-=6(kzP;Ade0#G$`S!ZP1@?Se1@<=`3hevB z3+(ms3hZ~Z6xeIeF0k*~SYUtYc!53Zy#jmXF9r5mT!r?s3WfGRO$+T0dKcOkB^KKA zmlxVk>nXHnUsPzHyuHwV)tN&3I}Z!(e|{^pXW%Ka|D;f4f8Mmne!5qYy=Q!p{qy1? z`+|-l`^R&N?433i+4meRvOjpU$o}EmBKtRt#rBUyi|vnU7TZsA2B8N z_4y_C9~(>T1E!SN&stVue_=<7{ijnU_KbH+?0>&2v46x+YQI&e)V@Te)L!1K)PB2r zsl9b%sr~A#QhSb?Qv1N(Qv3FKrS>b=m)h?*P-?&VVyXS?N2T@!pG)nHSjy}lh?Ln^ ztCra_o0ZvDxRu%83@fwONH4QbDKE3{X)m*1G`-Az>GCrBsoTr!i;kDs+g>lT|N5-V ze%7}#dmXlN`!%BF_EM_l_N6A}_IsVn?LP;V+lwWY+iMh-+p9N}+Y9%X+rOJzZoh3! zxqZ&=a(jVO<@Sqil-nykFSnoYwcP#htHC5Pe?XR%+pIc#neN~0M-;N6VEk`TtIWAY&`#h+yuX|fzKkrwC{W|ta z`?VsK_Olf$?aTEl?VYVF?f*rM=tyO8c7C zmG%p_SK4nqTxq}Se5L)`+m-ecpI6$ae6F_oNwgNxPnZ*EoFzj|D4f9p-P{hqJY_7nb9+lR5&*z*b0*zc66u@6(Mv45snW1nGE zV}Hl0#@^Yv#(s`>js1(@8hiDa8vBTp8vB}@8vDs5HTH9BYV2pW)Yy0S)YxZFsj+vQ zQ)AD$q{jZ}>Kgl!%{BI7yKC&%9ICN5IaOo7;bM)w!p$1{<_9(QH=ozoE5EO?PyAM6 zKk09c{dSgG`wQH)_IHJ9?e9v~+Fw+twcn{;Yd=k|);`U&)?Uk|*8Z_mt$n{|t-V1& zt^LukT6@3PTKhA}wf1&dwf0L3YV8@yYwZJSYwf2r*V>=$thN8$Uu!Qrt=8UTPOZJe zqFQ^$6}9%}>uT+lw$$1)?W(oEzQ5Lf;n7SB?F&BD+TZ$KYj5?p*1n&q&i*!goxKcioqdo{oqfG{o&7?YI{RIUb@nIJ>g>;G z*V!L8sI%X0T4z7cs?NUJzRupyrOsa5v(EmyZ=HQ_P@TP1c%A*-=sNqdggSe+)H?g# z%sP9nygK{3qB{GRWp(!6)phnu>g()3H`m!)cGTII_te?1o=|6hZAzW}&lz?0LUZfv zl^538>nyFa*Irp?ue7$#USMOL{kJW3_Lq0m*)QKyXJ34v&ffe;o&D$Ib@t0n*VzZ2 zue1Mrsm{LdTAjVZtvdVFckAqRAJ*9~e^O^J^`g$c<#nC?^LKUjPM_-Rr+%%ofAFKu zUgb}neZv1b`zcKI_6J$(?VoYf+q3Z0+e`D;+iMBc+Z&12+Z##L+iOeL+sn$;+jA(^ z+rLq+w?C;?Z$D47-ac2S-riKd-u|0mz5RNVdi!MadV7AWdi$+5_4dK`_4aQZ>+Ne@ z>g_q)>+O3z>+QLH>g}8T>g~S-)Z51g*V`Wst+!WV|szDNXhE6)pAlVQuyH`W^N5OkMT%7rX22XZF_H$M)CT%S^1dzdEVjzH>^w zz2&re`^VGk?K@`H+iT3Ow?8tc-acwxz5Sc{_4btu>+KmA*W0%&skdidR&QUsyx#uP zihBFxRrU7gSJ&H{udTPAwXWX&=lXj4kd5{Bt2Wi!|K410@42+RhS)Z1qtthetuRBylHaJ~J(BlY&zj@H{hKUQ!5 z^?1Gg{}c80tf%Vj*-zKovz@88XFOYP|MP6U{o8Z(_V>=$+n>HrZ@=|oz5Sd^_4f6b z>+R#O)Z1HMt+yAsR&W36TD|?=>-F}%H|p)9Zr0l?->SENd8^)j?d^K|+&lI5+IQ>i zpWdyvpL4I?KJb3MJ@bQl`%Mq(?c*NS+p|Baw_o?D-ahDYz5VCM_4bpV)Z6Plt+zk^ zwBA1MS-t(IXZ7|i&+F}lU)0+#cu{Y!^|Ic6)605$i&ypbyIZ{PB+-v0Budi#X;_4a4p*V~(ZsJEZ6kz5UB?_4c~o>+SQu*V}LWUT^>5d%eB>k9zx@ANBUjf7IJQ{84W& z^|RhS=x4os$Ip8EJwNO1Km4q>SNc_NAN;G{zWGSS?Z=d+P z-oER1z5S-&_4YS^*W3U9U2m`Qr{3P?eG1qxBvRL-k#@Qy}jbUdV8~f_4Z!> z>g{9y)!P^RtG93ZS8qS%U%ma(fA#iT|JBO&;7sN zUgCefy~_W3d;S0Q_SXOF?Op%Z+x!2ow~zc^Z=d|X-ahAly?x35di$FH_4Y0Q>+O5~ z*V|A2UvEF_f4%*J|Mm9E{@2^D`Co6p>3_Zb_W$+vd;ZtkAN*f$fAoL7{i*-;_UHcB z+h6=&Z-4cFz5R{<_4arE*W2I!UvK~Lf4%*a|Mm9I{@2^T{9kYX`hUIsTj+fKhyV5V zpOEJ5zx}Vb|Bf_&4_c!Sn!^WS(EdCS2F>Mz@IUC zI{m~!(}0(@X4}8dG1IGgWj6DGviTRLD02(u9`naf)|qcycGWybg~4J{s<_3;X$BTT zJG?CdPi9!eJ#Ds-jhkZe^xRU5<>osq8fKif2>p29LdEH;Mcq+W%Xg`QmdQ=Bmgl9k zEbaBpEjRCXv6MR#WZ4^%X!$v!z%uS;z2)Oq?Uq976D%DT&aljkTxdDTf0gCd=FOJZ zzwWX8y7ZVO-;@iMN(XLP>S;Z-w7m4*(q_jmOX+t^R$}uxta$VJtQg`%tlno!S>2kU zV0GY$n$<#oU8|a###X^iR#vKBj#eKGJgl~v`CFAlhgs>)kF~nTm}=G0oMWY>Qet)F zakZ7s!$zx*_gk$D-*sBOyxt>!Ddz>tyF!UF=wFmB+los;zg8m4y06 zE0qgdtyXsIvRWCi-%3&Ah?Ow^Nvk^6b5=>*m#y|I+_0MBde`b<*clxkc_o}d4`>=3XAA8MX{reWb_3Mj5)>AKtTK~Q#VJ-Dk z+WN~cIqMDyCF|?9s@C_jG^`iS*S40uqh}qgU}Wu-V`}|szlF7rw2gIooxQd7ODF5& z(Qei}*F3GcB7Ch6J`AunC=Rg>+sWU*2gY(SPS0ivNnI!V{QJY&ss=mqV;j@ z$=2bXQ>_nWO}A#7Fw67=e@{UwPlHQ+ks`)2N+gbUvXJ&eXwV( zb?1%s)|widtQS{rvHp5#o3*0ePHVN^-PSB0_FC@>J7Dd3@R0RJ{iD{O79O|ek~n4k zd*T`EBmC#B(nPou*3tWJTN?-8vwr;gfpvDrW9yR|&#eESd11{{ z`r7(~!aM8L7d}|qwtTi;YW>an$+sWYzqbCiep>O*`pSF;8wFM-oA4ZFo64&!Hf;`U zHg#*+Z4zWSZFGCNY@Yt-w&^J0wGn;IXVaT3VDtX2ppA8uuuaho5u3>oVm9+`iQ7z$ zle8&*B4uNfBV+U7tE^3Lqr8m>zoJd+JSCe4`YJXmhgEHYBGhd%-)q=pb!gdyDC^j0 z9MH9S8mDj5{olYwYLSu6BsUYA&u>g^Y^R#r6xdtZ^t`sRnK;wNrq0vOCgiuhjnH~W zo1H1nHXbsrHV3Y{*~m}yuu1pxvYF27W3&F8ug!*u{x&nh0&UV|gKgxWh1l%d5N6|A z8)38AJIaPrCdS77U93&^p?I6}8HqMo1<5upUa2;$YUws>nKNx{9%tEXI+A0v`CFj6nmY`h2QlyVm}*f%)U0-cztTJ3HZ=# z|#1xU5`f!*y=G&B4zbY%--b*)Tb6w&~8=V#79Nt4-m)Z8m3LZnu#V+i4T- zyvwGwaJS9k1$%5ZUf651k#WDx0^9Z%&e&X@cGiaZ$~hY)p$j&KffsEICSJ0UyL8#+kMLESlVR6vT4!Ci zF}#1n=8VcMo3QNLHWxPCv9b7l*JgsteVc224{UgDJ+v`Udu-!e{KUrf;8Pnjf#)`& z2`_9OZ+L05fa$f3cjz0NCoA6CHB zA2ynYf7g`^RS4oxe7rHverZ{TOWR|1;QDZ(y|5OJcH(5Mj3cag5oPzlz0n zjxMY1!iTK3($m;%dA!+eOBgt8gSK(lF3;h#EmY>R-F%D7Hfs{M?F=s-TN`Fx+weWS zw$DrXY~Shg+h)Jww~bpWV0%14&~}-OknQgqLbk`I3fr;=i`ecH5Vd`EPSm!ySIl;) zkGQP~kA$to8425sJ(9KyeWh&K_@!+hT#&Xkm@H%aEmYRlP*TqJ(H%Kkj)n5JOHvhV zw`wWcT7OWqHQ%OWyP`(fw$E9`_9d69?XF9zw*P0T+3reKw|%9fVcY*r!*<01Oe#aE(zU(are~`bqHp_L(ZE*bgMsa_eTKGAdyQ->VvTL3vqVR+Fr4&!pMdUbeQi^%u0WwR>)7 zyKt|)ZN(G^+r!z8woT4Xwp*p0ZDYPT+m@Ymv1M8AYRlH>W?K{OZkuZ6VS7l>({|EZ zPupuJy=;4zdE4%2_OT61^tH{f_p^N?>u>w?kH2leod8?CJ%P3jbAoJLYlCfT<3emT z971hfmBMVVv4q>+dLC{Ycsjz?YJH^bw8>GnsTI+-%VT3~qn%@In>6EWWd!1FHNMB& zF29#xJL6cQ?eBF-wil--+e$X3*j~v>wPgrRvz>3BZo5G%!`4_V(^iuy%XY%MEZfZ6 z*|u9w6{Tf^W6+wJEXY)icwZL^Ox z+Rk!nvSr-gWV^t+*|uUwvu%fIi|xftEw+IMt+rh2T5W%8x7n($YO`(AXtz~Z-fsIz zwZrz$k`7xtl}_6oi#u(zl)G$07I)c}DRltF5`j_Sxnowm0mS+A^G4Y8xNA%=YVpWwr-%mfIfrvE24w z%L>~(!Iicm^H$n^)LLcBvSXF4pX+MdbC*`zwkE8xEqu4ec52O9+jm^+Z0lyOvvt;3 zZ)?AOy={@(2HRU#H`rFBZnX9Ny3sbGb(8H3(apB}%QoBYHrrx5@AwwmZ4p~-Szc|m z?X2Er>&&~|)@c5A+X%xQwwn*{uyqOBY0Ld`r!9NUE?Z0f-L?xB?Y6Zw+hZ$mYLBf% z++N$zPkU`owC%Gkklt_Ww_(3+qU!5P*FW9bVx@h}W_L6P-&P%qU zp_grce7J1O*L%e_QuC_qjiXm>dy=l%7XQCy+dt>J?S0D|w#nCT*h-h)v}G5*WvjOF zmTi^)ZCj>yw{7?K+_7D&eb@HFsk^r7S@&!=ao)ErSb5(z$@772$IAz{k2)XP=4(B& z)j$2nRypUftrzbT+okKC*qQ`9wf*|>sqL%D&uoRwp4;Z#cy9Z*>V@ro*_XCk4!pFz zoBYbwg8jAa@l~&FJN(|*)_!_pyJXs1+y7SYYml!8Y~W2iv{HA8kD) zKiRVH|780;<+H66_ZQoOjbChkgnzZ&{O_ynf~DVV5BPky75ehscKYlew!Y3kZOvc* zv<;g4%XYr?Z(I2%zilt}{IT6?`q%dKy}!1?9sg{54gcF(-u`df(}%h3BxHE(YD;+Rex2d5o1n^TXIIB-$8w$5 z?y)|f-OUa@yB81n?D(zu?fj(d>4;F~o ziT)9@OAHscJGx2S&Vf(D?sBGtUENU$I|oHcJE>YpJMNp3b|R)yb|w?0>~h{p+3og} zwo_UrZMT3)#?CZe#_rK>8M|c?vUZK7vUVkxWbNwoz2UIjY=X+^tN6^eGZuPNF+F;TK(o~&eN^-;;L-Cx=6^;%`SbRHGEpIIt) zi%zQ8C26SIS+uL#sXbG*({fd_b6uilSI(?%cOXgKPX3U(-Bd*lJH@?CKme z?fe&L+LEj*?An$vMW;1w%gpGZO8pk+pf}4$L{Y!9lIG!x^|w)x^@CbbnV`$ z=-EAL)w6s1OwW$jL*LG2rM}%nE(5!-*#>rbXASKB=^5HBo?vJf|H;tKFvQ4Ca+{Hz zxP-Btc9pSR=pAFbDRw4yuNIitg)y7j-AFaH%RgaiC!=j=cB{9U z+Z~m(u=`qLVQ2lo!fu+gr5*cnOS@h!D?80RE4$klt?U+=THDplw6-hwYi(DNXk$0^ zsEyrmOz4Mz1hJoSi;dRzt+)i z!6Qez=k88+PHUa)HVZl1SynjPUB2sV*X-}WfwYteQ^4l#CjSH;-Hh{oEzuaC8x@+#KOH#E*p>Oh>`Ppx>nH&f&7J~1TNapxr1 znO{$^D|bq?JGC~^PG2&~ZbeIyoymtJyGzl@b}h$~?L3WB>=fpw*l}~G+HsVp+DSZ4 zwX^n5vn$-4X17Z{-A;5$x?M9vh8=TmhTZg=8Fn^qnRZ_{W!fE(&$64_lV#WYGs|v5 zTDINN%h`5k9CGZ~*5%j*N$1*a=*YEG{FZCCBstH{@?xIdL%V#tS!?p`(xeLPTsjKu zOuiM^nWq%md0#5DD|9HbTe+^t?z2p>T|jrS-M*j2cD5NMcIU5^*cH2$+G%VlwR^8r zW_My@ncZfFa=Z2U<#v1TmD}C*t+3dJRh1prt17!Ck=1qq zC#&svEo8kCOgSbO?JDrn(fk( zo9!g#G}~Ri(rh=4x5X~Wt;No?zQs;(M~mIp4=r|&G+XViCAHdJp51D9<4UXDQ{Fba zUv6!7;tg$fwmaMGvOcxhEzoYayPMK(r#!FSuHbsR-7$d~g+! z*uB*6w9C)zwEMHD({AFOPCGrZF1ySAU3T@IU3MmiyX-#v>9X5m)@|2N&}|p8s@qQg zNw=MlT#wz~@E*JO6MO7lp6;=G&Dv}C)xOt`t*X~feoL>N{kvYfbd5f{X-R!{XXo_U z@m%k-3li+NoA2Fk_qDa(F7QCV-PT|Ic8aDG>?Y?=u;W`b!LI+w1UpIjiFPX^C)znq znP~Um+(f%J&PjGAE|ctD)=jcox^t3U=9fu!Ci;`@*s>Co}C% z%g?gQi=JgCF@2WZiA%HW>iK5d*?P^kV``giclO|HyLo?S+m&0+u?sDoV`sf_j-C43 zId+nobM1su=h_J^oNFg>cdng^F=9w zm;Y}t0xv9tZS#EwO8sojOFrFM&! zFSVGMp>y^xRh1xizn_ zOF6K@uH)|tyNy;W?e3Sav=iC7($4SGO1obDRd$ziR@up}T4k5}e3ji{mDP6gNvrMZ z=dZSVc4xI+pwt?>L*Z-eET^uq+j?n@oteN|yS=_^?L52J+TA*_)~=9kogJ^sI=gj^ z>+C}Jud`$LyUuQ-)q1=1iuHEN+t%AX{=D99rQrs@?Hph1v^%A?%Pt~y zm)+~dyX+bt?Xr_m+-NE zAGRypb=Yq1&%<_SERNXyD?egqvi*o%-nS!mt4)vEy(u|rXSn64UFGMac1Mhk*$EdN zvrF4}%x=$zV|Jnj$L)&pkK0{ZcihhG-Eq6Qx+m<|b5Gcnt~p`%?DYw|DD9JW7qd>< z`K&r=ck1OyJ8#WXb{8^E*+r~4W%ua$DZ2vo({_yMr|qULJ8h@??6lo+)iZV}sb}n1 zmY%U&@#Ku1pUPRgAIWF!mMlJN7yS6F9jo#=yIo1=?1~nhv(tTa&hC}sdArq#=k4+q zp0_i3c;4=>!Uek%2^Z|9Ex2Hp{@{Y0wZcU^!Gw!;ujXI0J9ht~-4gjrcCGQ3>@wzG zvh%xt$Kpziy{B|GJ(1{p)t&@;B@X;&0e>&%a@} z^8O9G6Y@9hUd7+E<6Cgk&iKJiyJ&@5cC87w>^3a8Wq0qvEjwPt+jjPex9y4+-nLu* z@V4DO#XEN5Nq6jm7TvMydvwR{jM7~@p5(iBev9wgO?rIS?z-|lJK2y+5@}3vl_%r4mQx!tM4=XQ>pp4;vG^xV$K z_=Vk?;um&mTVB{L`trg~-t?v2oYI$eQrlkI&HVP#PSX69-OTb=c2YZD+0FU!%1++$ zwcVo1*LG^VUfZqu_1aF~`iNj@Qd*0X``t!!l)Ap_1#oD)ak^A1-J^J_7F5CW{ z-PihecJ&9|*>N$xx0~wt-cF(Ez1`|V@9oT)KiC~{{$Ll-^1<%zkq>rRtRL;ZyMDB5 zY5Qm=bo`^;0`^aKx*nhGc6WTT^E&y-?gr;)yEL!Qc3-+a+cls5Y$wR`#csaO7dyS) zFLry*ezEi7`)YT?@2g!}|5v*&=fB!D3VgHU5Bz2~XW}BK6#vqr0W(v<((JxKm<7q#TS-Q_3$?Uo8L*grI4u$K;Iun#L{ zu%9rQ!T#iC279I}4E9!E80?Eg80}Y@Fxo!|VYC-3WwiI1%4pxXmC=6dRYv=lUm5LX z#F*^;%$V#O!kFwgl`+{rn#N==w4KS`@j8=z!FMM6x#G?JK(?Cm32>{BaQ>^o<&*stBmVt?T#i~Z-HEcPN&to9~W zto9*MtoFrKto9RUvD&ZQ#cF@*7OVZ!U##~3rP%Bxtl8`hqS@>{s@d%0X0zFs>}Ip? zxXori`!}2YI%#(M{nqUE7oyqi?^m}~gO*gM?euy_8$VecZtY42jgY3~%nY41?OX>T)!)82d!r@i4FPJ7Ki zoc4+`T=wENT=qOMT=xH~x$Hm9=CXgho6G+4Z7%zRzq#z!NpsuJvgWpLjpnw`tLC;3 zo6T)+vzyyq@iwu+xR=TbcOC#-nvS48pHw^i}jC(Yuqx7)>IFMf;1{=-im`{Rmrt;gfY~{D#afRPL>kGfVw1|NHDPsZq zieLeIm0|(=bCU$@%Qgwv%Ulw$Klo9=K1EQ_p3P9uerbT9y>o$}{r!GH`^xo#_JZdH z?U%n3w720CvOlLQWFPMjf9j8@y{wFweXg~b{hlZ>dyXnG z`=FU(_A_^g+26k|X0P;J%sxd-+aj;`SYz#O-%q6t{o-LEK(O zK*HWrU&6lFPr`n7u7v%;9try=t0nB&PD|LUypphYc9*p8NRzam-70Cn zdWod{&cl-SM;}SrpJSA=zp5Z*f74#d{&t*{{jFLl`|ES0>@V$>vOjf8%6|V(Df>+l z()NqYrR^t#N!wSKO53MQk+%2REN!oMN!p(OqqO~7ei{3ddNTHld}Zt_b7bs&yJhU< zSIOAFJt1Si^SO+DGn=fvm#VBipNp*h`6OBUzD8MluLZL9%==~Sciok>&-){5FE1@; zf7VjYzA{42Ua4Hp{=`%{`|K@p_B@y6>{or1vv(Dcx4)|=Z(rmqZ_k<|Z$G6=-d=H~ zy#4Cq^7cm0`#6>Cc{P;mBi)qj7o{lKzi3jj*IuY( zpS@qne)(M``-i`k>?Nd>?Y%9O?W@C-?N^j2+h3lfZ2xnEvc2qiWqZ4~%J$LRD)wcX zD)znZD)tLgRqQu5tJv>fsA7L|zl!~ZyDIiqeyiADl~lFAWUgv|CREk_aIvcW_KB+Y z%h#*gPdTe_cy<*(?4~vwtb7 zZokf0-M%1D-Ci$W-Tq~dy8VJx>h>Wg)a_ZGsoQU2*07IO)Uao?*RWp_qhaq{rD1=6 zx`utlRt)0zM>exHg>Db55*0HbHp<~~7RmXn* zCms8>{JQo#bad_adFt99Ow+aB->hrDYk{u)#=W}sOK<7gPx-EE-youApKhpU@9n2& zubr)D&)%VD|6qxp{g#7z_AU4H>;r%6*-J_2+ut+Mx1S%VZy%GVZ!g-dZ+~jJzJ2u( zeS3|E`t}$9>f4t|8Q6=P8`y6NHn8_CFtC5rV_;vr(!ieKn1OxgBLjQB{|5Gb(uVfj z7KZjMA%^xp3JmQtdkyWctu(Z^J7#FV=#im4(|<$zcxfa1ZRSSyTp>pGQ3Xc!%X*CL z->xvSH#ll!pa0Ove$`(i`-hUo_QGby_D(^@_BnaR_LI7d?YAs5w!e7D*#6Z$V|#|* z#`Xf@Cib$%CibfSCia@yCia@`Cibd}P3&d%o7nT;HnIQv&BXqNkg5GSJyZJ)UZ(cF zX{PpRO{VtN^GxlzcbVE>ziMhf|D&mW60e!PqNbVs9TzkENeO25E;VNMAE%qy&)RHe zZ-3s*{{Aa7`)W3Gdm$xr`=z$#_9l_$_WMfA?VTr>+aFnNZtr;9+!?=Js?B{>CvhNeJwy)5&wvY3$wzp5VwwJE6w*NfC+WzQfYx^nZtnFi8TH7nJ*w{ak zv$3CRX=5J}Vq?#mZ)3ly)5bn}iH-fgeKz)UZ`#^*1O*-zYR zXMg3qoxSiYJ9{4%d;11Cd;1L*_V%}f?ClwH?d=uY?d@$B+S`Zhwzp5aYHwfs-rl~N z)4{%8*}=Zn*1^6k+`&Gp(7`^c+ri#tse`@Neg}K5n-2C*KRMX%;c>L@RdckDa&WX) zjB>PpQtW8Iu-DN(a=D{D??FfV-M1X=Q@%LbbMQIYFIRW6cXV{JzZT_WpH|{z|FPG} zzI?fp{f`4q_QkiH>|cF$vXACq zaJDb}=xo29%fPn2UW$zKi|L4j20!3tj9l?Q*eycG<=L+Zz{q1~ylF zR(V%@Rtr~qhCo;QubHm)&zfBAFV1$g-?qioe)?Hg`=V#A_8$LT?Ik7L?4KIA*{}9= zv(HI#v)8D0v%fdl&Axw)o4xf>H~U9--Rzscx!KF}yW4M5cei(UaJRo4;cg#Q=x%?f z)7?H|k-Po*UGDY{m)-5xymq%2X7R8uk@2vZ0r z&SM_-`|o+!fB5EMFT?L?@1*W&pKR}GUmxyiKQ-Ueep$Px{l@v8_S?66+HXJaX}{^Y zr~Qimp7t}uz3iLyz3emGz3e^Wz3i3Bz3jjDdD$Od=4C%|pO<~;H7|RScV71ASiS9= zWWDVTO}*`J`FPvcrFh%R)Og!(o$PJzvD(}I>LG9Y*jwKA4?cR^$8!4EUsdq2cen7d z-|X*WFO}|NUsLB}e`BhTz1~_M`}!k3_NQ+9*b992u@B(#weME+wLf6tYyZLD*Ip{! z*WRwq*FJWtuYK7XU;EC(zV_2^`Pwh|=xe{2!_R(!yr2DaGe7%IUqAb@6hHgeYCn6s zNq+W{EB)->@AtDmaLv!Y>#d)?Ka0OTzqG&oNkf18S`UAF?RbCtE2aMS`lW1?C0kO*t4_**eA~lu;05Oz+T{Z zfPLKE0Q=>i1MFXN2HLAB1lq@%1={!f1lsRT3bcP%5opiYA80SLG|=8)cc8t)#Xx({ z=YjUVe*^8kg@f#!HG}L;?St%_PFO&?nSJe-;zvL2ZUl|o_FI^C9zr8is-gkDe{k;vr_8G^5?cd%Gw$J$(Z2ycc z#6D6c#QwNph`pYBi2cNv5c{`Jzb`w?zM~<`-e+o0p?8`2P*(<*Yvp@YO%sxjj+@4)6 z+eX0FWmm>r*M0H_6YkH=?MGF z`VsarE)n+e5fS!taw6<6H$>R8OpUPDUm0N^x;MhUDML#3#*Yif&Z&!@8 z-)S0YztuC+esyf5{p`X>`?l6d`>dIf_8w~^?G+D3+JC+hX@B5Fq<#CJNPBmID0?QA zDEsZ^QTA!xQTF`tQTCgPqU`|f ze?=z7{+)h|J(F{cy+Bxuy+me=y;Mz%y?B3&J@29z`@dUa>|Y#@u|IPw#(wqN82e_1 zSo<*HSbHV4So@b2vGyyyW9?JoV(ldgW9^SO$J!T6i?tV88Ee0OcdWhJxmf$_4`S^T zKgZfXV~w*C8C$meq0gXZOb03tWh^ z_k9#+-|{8Sek)tN{R4@3dsgjudllPwdt3i_`+&rF``F@m`_$HW`?Trt_K7Rw?ZbA* z+q<5Px7WKLZ!h#Q-u^vPg8ea(1pDb~3HC`A3HBOZ3HHyU6YLk{CfJA6C)hJiOt4?E zD8b%yOM?B=qY3s^*AwiyUMAR2{*_=a#*=72MK;l%TR+jh)*;dUMPQ=6Z*rpj+LAvM-pCWS_D!$v$XTlD*aGBzu`VN%r60B-x++n`A$iFWEj_KG|N| zAld$U{q3$4dzslO_Tj5j?0a^n*zY=> zV*mJdiapz#6no`ADfU)8srKG7srF$ysrJz}srJ!6srDf;srK$UsrIHdsrE8GsrLV7 zr`q3Kooc^+cdC8e=~R1<+o|?EuT$+${YtfO;!3kOkxH|FpqXahW|?NM=9y-HFe1%9 zG$YOaae113PJ5dDyJ>0m*~`-GA8k#u4?db^zwb(#z4DVZ`=-xn_P3eR?e&Dx?Q0a% z?GGEI+p{{P+dKHD+n2?q+b_#ax4%%6ZvUk_-Ck&Ry1mw_bbH&K>Gqx{((MDTr`rcS zOSkv_nr`pFl3}keoMA7alwtqdAjAHqeTMx8zYP1P*bIBWoD6%B>J0lUof-ChGcxR* zmS@<1*qUKK^GJrh&E*XHn-4SW3qEAnGyc!8@8Qj~7nI4gpQx2-&uy7$U+=;VV3>I`YikTy;=6{v$O28R%Y3|ZO^io zJ(^|z?oyWht_NB6_3yIm?f+!i|K!ZJUn`z%AFY~g&tjZyzuY0)-o-E5{&sY>eQsv9 z{m-&&`}&q_`~MTO?W^Wz+rL|rZ6CKQ+y40RYE7-{+reUmlZd zua%i=f4wx5fUa>#de(&sD`;Zm6_D{Fu+7}+owf}xL*S`E#uKlNHx%TOwbM3GF z&$V~p$+KS~k!R1Wnr9zvm}kGXQkI(1Xzq_4h|M_{I{pZhl_HX~^*+1gWx4$T!Z@)`9-+rEc zzJ0BAzI~{BzP)B}zWw*OeEa=b`Swj^`S$ir`S#y?^X*s8%(o9)ns5JiL%#j|J^A+5 zC-UttUCy^pzMpUZ{#Cwx>9>6QZ;S=@MZ5*}&m{`%BUB3P59=4$YgiZ9ce)kWKMpLg zw}>sU@5m^yzf@dcFJ50@AKq19KXGb-{m}&l_Fq;P*voA%uy;CCV4rxlz`puMfqnnu z0{gk|3hbBvEU;hAQfR-DztDb>RH6Me)k6CggF^dU>q7fLw?cdUz(RYDm_qy8X@&Ny z3JdLvY6|Vm+6(Q!Of0ltJEzb-VR@lF-=;$Q?RyICqmLKb|GZdeKj}`Pz3THq`^_H< z?QQ-P+8GQ)C~$t;oLmK#~3IQ$_aMt`ymyzE@;_`$ducvrk3# zum2R;zhNu3e=bmLe^;v5{+vp&{Vu&?`vn%o_DxR3_HjPN_NHOQ_UsA8_E$2C?PnJk z+sD-w+e^0>+h3kgY~MDk*xqDGvHjh(#r6%`i|yqP7TfPQRc!BjrP%(?-D3N+=f(D~ zKNQ<%|0=eB##~|_!&_p1My$l%LZQTdzGjI%gK>#{tWAmi7S|GcHvba)kcbldIf*6q z_p?guWlKuz!)r_IyW2|aclDRpKbcWt&$+0?UUPMcy~~yo`{=zT_BqE&>?_Wf*w^1E zv2T1>VqgEN#J>D^UUM?86kx z?B{Ei**`WcvsbbzvyX8qv!CQuW`8)S%>I2;nY~zYnZ0FpnSEGsnSDWZnSD!hnf;XR zGW&Ux%j}oVF0)^@xXga>>N5M;o6GF`c9+@L9xk&_KV4?;bGgi3_jZ{*=i@T_2d~QP zH+?FzZ}?Sa@5NMZ&&O46e@?L6zEiT?-a)b4{*y+z{Q`q>dk>3p`?vPx_C4<9_UiuS z_WQ!h?fv7*?eCy<|*_3>v4s>@v92^;~y&QBfeMIKlxi>pTkmV|ADL0 zK3}lX{*`#8eWF~Y{biL(dnfHm`!$A@_Cgkw_9b?e_7`0$?X|os?dt<8?JtB^+RMgO z+NY*e+ONv0w0~7lX|GmZX&+l#X+N>K(*9s)rTv@!N_*jHmG)+HD(yoTRoWMrAEnj!TvHn{HIvueeufKkG@Qefz6Q`@#>E_Tk?u z?JfRP+KVw&*}rG6vOmgOWj{^0%05N1%3fE#%Ko!TmHig2D*Hl%Dtm3SD*Ff4RrZq{ ztL*LFtL$I;RN40hRoNRvRN0@4t+G!~uCo7|QDxtsS7k3-Qf0rqvdUh!zRG@mOO?HD zSC##W{wjO9sa5t9XI0t%pI>F4wY19q;;JfplMPk&lebpczu#45?{=Wde%8?{`&Xx` z?9DDz+1FjIvOjdI%AWZ_mA%8$D*MV;Rrc%NSJ~hHQf1HktIFQ|f0cbKOSOGHXSMxY zzH0j&!qxWYC93To%U0WeQmVH9r(SK(rdw^#WmIj?ZC-89VN-3-=vZz4-L=~OrB}86 zb^mJngCW)SD1zAg=d0~iu2kEvx>0Sfd$-zt&BJPY^=H-g^Iuil3%{?nZ~0tp|LJ?ReaxR~ z`@;-1_G+v(_N|;X_K$dL?5%`q>?erT*gul0u{V&fv9DIHu|KR{W6!QrWA9;5W8Y>{ zV}HP+#{RoajlGs*jeV4BjeWakjr|7S8vAR3HTFM4YwRVWYV1woYV3WJYV4EJYV1q0 zYV4cyYV7-pYV4<#)!5Ijs1lHJ2%$Y$8D{#*WX!V|94M~{qX}e_Weg{?1N9#*o&O0 zvA=x2#=iG*jlJvj8v9?jYV23vtFe!IRAbNjtj2!r%NqNjw>9=(KGfJx{!(MF_oK%C z`0pC~*#9;5@0n`t>)C4Uxw&fXr|{O=OAFT8&l9P&my@WqpDkT$FDhSa-=kD(&!ARo zU!+-U|3IhK-rJzoezS3{y@YwKeU(+M{Y~3ido#yc`+k>N`={=;_7>i?_MLvU_SXVy z?G;07?K2{3?bk-v+P{yhwbx6kwa-eewO^c3YkxDl)}AN7*50b8GGQFQ~OY zw7Ay((6U+E?tZwNKtxYwvZi*52Sqt-a9k zTKkVDYwgdSskL8uzSh3sQmuXH)mnS?8@2Y|Z`Il#xm#=B_n_83^l`1d)U#UqJ1=VO z=e(}9k9=2aFZ{9A{`BWs`-X3|_QpSJ?H~WHwV&{>*4~=2&i*lToqZ=;oxKico&6c^ zI{PfXI(s(3I{SITb@rxWb@nGD>g=PW>+E01*4dXR)Y<=2s#sk8rNR%f4TS!aLEy3XFkuFiggL!G^pbDe#oYn}Zw_d0tIuR8k` zK6Uo2{&n^VfpzvfgX`@1!|LplBkJt8M%CG~#Mapd#@E@;POP(koLpzGnO0|?lTl~C zHmlD5O-`M?Mt+@rQemC_tl~QR3#E1T%oTO^##MFpNi}u$eRXyAI~wZjA2ik3v$odR zYqZzddv?~@XLQ%uxAfN8&+o6Z-#)R<{>_1MgvuBu9XU{vQ&R$|(oxQ?> zI(xN6b@p0I>g;uv)!FN;sI%8xRcEidrp{h&U7fw?hB|w$O?CEvH`m#}+gfLTXM3If z$(?ofn|IgQ&)!>S-?+cdKJ{Roz5C%hd-bDr_N>S2>>r${v)^^9&VJ&VI{Wlg;(g)!E;^TxY-HYMp)Y^*Vdon|1aqx9jXr-l?>j%=Px)S?cY(+3M}(IO^@!bJpA2ao5|Q=Bc+2R;b>-K&0OOlW4ttv3R}xM~Qm-JgIv7m(un2NwW3!H|6T>{S@l$4=L8$ zn<&@YFHxzt7gDRYuUD_Pf2C1xAFNexze~H`UO~6szFDu{{+WKgy_;dZ{ZgZPdnS{5 z`&iR@`)y|R_Iwug_9>S2_B*ZW?RjkK?PG20?bq1V+yAn!w|8@_x1Z=#Z-3Ld-d@qQ z-agH(-hP#Pz5N@HdV5{3dixyjdi#|=_4ZGF>+R+J>+K@~>h1dj>+O#O)!Y9FuD90; zt+$U3tGDk8ueaY3QE&ewvfiFAy58PArrtg-w%)!auHJrSe7*hYgnIk8iS_n8$@TVH zDfRa5srB|rY4!Fs>Gk$gGV1MDXV%*v$f~!$l3j2AET`W7dv3iwTYkO0NI|{5Vqv|# zPEozRX>q;1ZArboOKH8mXIZ_yZ+X4Fe?`50KxMssKvliHUv<5`cTK&$TW!6)LtVYS zWqrN9K|{U0T4TMvbW^=OUvs@ZLrcB=hn9N#`>pl%XWQ!ScedBtFX^ba@9V6$FYBte zkL|9vckZdT*XXUc=kBYwf7@4Yf40Bge(i*M`|gSL_UV)A?VTsr+sjU=xBoV!-u~>= zdiy2Q>g_A1*W3HfsJEA&S#SSwX1)EvS@rf4X4l)t&Z)Q8npDe*U6*`=rJ7_9{#2?Vl{Ew_m)p-actry}kVMdi&eU>+PqmsJHiD zS#Qt2s@{Izs(Sm<)%EsTYwGRquBo@5u(sabX+K!3)!RSWR&U?7z2079N4@=t9rgCg|&b*W158TyI}}q~4zWXubW!qxJUE$Lj4DAFH?5K3;FX>3F@p z#ff_Ry(jAJ9Z%NVA30fX?{=!*{`jeSd-v1z_Qy}x+q<5rw?BNQ-rnJCz5VX9_4a1x z>g_k4tGCxWUvIzYe7(KYg?jr57wYZVF4o&uU#z!(f3e;^=~BJ@)l2pEZkOxrw_mQe zSHDtkKkZ7rJ+K_N)Y~7pQE#t) zv);bvX1)E#oAvggx9aV8+^V;izFlu$bGzRD?(KSe+dK94bMMsK|GraiA9=Ule*4{e zd*OTa_WAef?N8mSw^zAeZ(n!6-v0XidVBo`_4aKK>h147sJAzMSa09?u-^Xe!+Lwe zNA>otkLvBOKdQIad|Yo|^|;>t^y7Ma=_mE}Sx@TicRs1NXMb96AM&)`e&N%4`?pW) z?Jb_w+c!U}w?F%=-d_B9y?w&-dixd6>+Rn^ueUdQQEy-SqTc@Si+X#Gm-Y5OFYE0m zysWps^0MAu{8hbu>+PG~*4yuSTW|mEZN0tzyL$VKclGuQ-qqXRcvo-F|GwVd^?kj4 z_4|7JjqmI2pS`cQm;O+1@Bg9RzUf1~{k9MF_Afrv+e>|{xA*y2Z(sYd-hSQ3di#4H z>+ShI)!W;Cs<+SiRBu1)Q@#C(Pxba+Kh@hSeXh6n|6Ffh{kh(L+2?xui=XT5|9q~u zSNl?LAMmB#zVb`G{h}}R_NTwp+kgI2Z!i6|-rnhJy?y4_di(yb_4Zr8*4y9yT5r$r zt=?YsTfM#Kw|e{BZ}s*Qzt!7s`Bra#{ad~LuW$ACGT-a%?Y`IB$A7Q4Z}?tszuZ*TXb-aht6y?ynMdixna>g~7vsJFlTqu&0*k9vEapY`?{ zKkMyXe%9N^|E#yK`dM#3^=G~P`k(dor+(JkKmJ*7|MzFTz1XjMd;MSa_U^yx?Gt|0 z+gJRmx9|T|Z@&z5-|(+``zycd?O*?@w`craZ!iA4-d^W-y}i@#di(I-_4YZx>+KtU z*V|9|U2nhQcfI|d-}Uwve%ISS{#|eX?RULB$Dew8=|A=Mx_|2J?f=x<2mYzIPx@1D zU;L-uzU5E7{nS78_DlcN+i&|*Z-4Ahz5Ufc_4ZHy)Z2ggQ*Y1wx87dpZ@s2JM#|KEE1*?;TpSNyHF-}<-S{@~ww`?G)R z?Qj0Aw}0}t-u}bidi&ph>+RY8)!PgHtGAc=S8uQOuioD9U%kEczj}MufA#kM|LW}{ z|JBg{j*tGB=ZuipOIzk2((|LX0({HwSB{jc7h>3_XF$NzeJzW??1qW|md zrT^F4EB>#ySN~sculv8=-spe5y~Y1}d)xo@_Rjz7?LGe2+xz~nw-5SXZy)}@-ah7k zy?w&}di&J>_4b+n>+SRY*V`BUueUGzUvFRazuvy?f4zOv|9bnj|Mm7=|Lg7h{@2@2 z{9kWB^?$wnjQ{oav;WuI&;MUHq8PSO2fKU-!S>e#8HI`_2FB?YI4} zx8L!<-hTK0di%Zq>+KKxueU$+zux}H|9bml|Lg5f{;#(`{lDJ+?EiZE^Zy}x<}dxP zx4-hg-u@bN@BGdG_4c>_L-x?$L)u6G2zur{=+0Wue){Lo^Y33m@3sT&tp}Zj587Y< z4r!15$N!Lf?_hiFLHFH)FzBrOZ~r0p;eAKid;jBqz5P!p2JOLzVbDH&7zXXdhhflu zd}RC&X>UF<8-0&HEwmU;yE!LktX)4lyuv9b#bUfa118 z3=BO`JmC-n!<0h|4ATxVFwBGE1&0_ImK|bX*l>t}Vb>uBh7*Sv815WmI8b?nW|+a@ z5Ch3LR? zP_YPTx(E3Ygh6o)if532LGcR0pm+uObywIFo68};2;CTkAskSwK>GVAOpp)c-A?@zyJ~l`85UVUr>C5Feq+8 z@eRtuHPE~Y@;}Jmurv*dYmmP|aSTe&>kct6Y&pchu;&m111O#^9AaR2MqE5IFo5EO z2&{0Bfx+M)149ASzo2;kaFBt4;}FEJAU4R)usG&{rfE=|g3`7DG<}2O8iYZ92gQBP zAqECeT!Z`$!pMFH#W~E+ptuI*Wmx(K`5zSLur!YB|5MPkeg|4UfXpEUgTfnzLH2^& z0Lo*a@)E=cVVGNBWhcljptt~~y-m>a^ANNQy+pfm6r7GgX^9vNiVIMFq?GOXQKB#|h9AaR2L0tMHRJSk) z9AY4dVdbmJAqECeI)nKWmX<(y3Y5=4egAC$L1Whg9eLH-4?L4F4L6%@xH|APDq z!l3j9i(imm4?z7&Vcar+$_hdll(#_TCJ3_}VqgH}Es$Sb4lyu*@)C#!#Xrd3APmY^ zpm+xP8RSP$odNPUh;D$k2|)gZ`4!|}m|sD03MxZkWy+323=A;8UL(E!0GExR@(~vX zm76OLGBE6b))64Tg8T=HcaR@Jbs{KEL1hT2`~-=CFsKX#`4yCwLG>lb&mbC9PlEgk zihEEz!_qaV`~>A;P#lBuE+}1t;uYjym|sC{9#EbIl^-C#J|Ucj83Yb8;KiUa)8QZk z0|jxg2EnDW`g_+N^9p1F)%zLoX*JhA1F@{!k}~m z%15B`0+fG1G>8xKC#d`Y`5A;kX#nJJ5C-`j|N)V2hb4WRN7gh6~zxd9Rbm64!w5mbJF$_|hm zsJsDT5FZpCAb*1V4GIqs4U2b>-$C&W@;?lN%1{sn#WyJ4K^PS0p!x%rpJC++a$5jT zTNGUXf!fRmpzUW+*$Bd*@)6XQ1eKAXG7(fqg8C338iqmj1jrwtvJ+HZ!qkKGfH26P zCWjapKw$x5gTe*G2l*R>L4F3sH7M>uY>@v!Y!C*e15nt3%2QaL0MVed0LmAjuz{rm zP&k0nJt%L3;vZCxfchO*h)e6BJ~jiW9Rbn<3O7)>3<^h(d7yj*G8>l8Kx|N21IdBX z8>lRS(I7pra^)Ivc9UDKVAF@;50G0xZUea<w`51{7wXJOsj^@&lB9VB(;(1(Jv5 zEl`>Q)z2Wmf@qLmLE#H(UxP3xoI(8^P}otJ&#?IiB!&_%F#mw!1QZ{jvL56I5C)Z# zpmGs}L1_boLG>X>97My?3`ict2jwY{K9Ju*7?g%UVF5B16kZ@dgTfBxUr;*?lr}(V zgogZLnKfiQ>- zaxbV(0Qmt_c7n=HP?-p7Ys1P<5Dmj1H6Xu()PvN4Fvtv$d7yF>#0L2p#D`&!|3Mfe z4#KeT1%*E-3_$(|r2$ZS2l*M6&OvbwifOWEXNg<7sn| z>MxjjoOL0{T_87t{08z5D9?k+AW+!>qCw>Z2!qNV5DgLoVNlr#@+$~~!UR-ig7kwh z$p0V=igQr>gJ@9w0kQ`amLNMpVF3yUP#OZoI|X@}px;3DgWLm(D^OVqDicBFC#W6( zm6M<{6I4Ee_#knR7^uw&@-L|F0F{@Z@Br~a^#_O#VuR`%SlJ1pVQBzl52#)Og$2m} zpsDfKs~tO1z?s((Ob1}Hs&(iSLuLHP<)_JH^xaZno*R!4!-+cD@^ z>nr-VH(}`#9}SLIWdDKu0ZKcdbOZ`dP+9`zEf5VVgFy12FaU)G$giM$4D&B2je)|O z2J(e}sLTNQ9mEEi z0}2CJIsnBz2!rea`5)wGP}vEJcaS?keg}(B zl_Q`u2lE@qy`ZuXR7QfzOb`Z*eS$EkEea|_L1iXL4JaHy{sx5s$lo9u6yKn-5)=j? z8iqk?L2{rlK=wZ<3_utZ4xn-zbw0>En4dvu4P*zX z`~-=C;u#dypfUwyCn%giVGZiPg2J1I6O@KP z`3gjXFsM#~`4c%^f&2;z8&G-xnFUH8pmq|O;f>F|q{w0T4Hj>pdeK>i2$6%-aA42oNjpFw7T{0Yj}pz>pY{ECqeL1_+@_CRS7F;H6vqz2??kpDp#R)4_CQIJ_6f5R{+zk|vVP+9?{8BqELO6G{052>P&or~C&*8r@&Z&gfXWY0c>?YQ{s5J!AV0&{pt2U!W(A3Z>JpGzP1S=mv`4LoJfbt3mgUS>T29-e| z|AWd?P+bBlLqL2``2h+8P<+Gu4a(!7xCdd79iXxl7Uv*0(4cLA(RKlaKgdlW_ksKd zDi1*Z0nwoH0aQ+a$_J1bs1FOmptc;SJON=)c>xLsPJv~J0Hu3S z+=KiM%IlzV92DQ6dV&h&2`H|?WhrvJf&2!t6O{fyZUMOyR6c^rK~R|pqCss-keiX^ zKw=;{kQxvM=>dtsXi(UI{0_pP@BxW~Xiyk{{0hnkAb*1L1t|T1(h(?KgUT%`#VG@* z?FdREpt1qf_5kG}kbgmC3MegsFsM8Mm7Sol28GK2=POVg5sSfXHBj0Br4dk`0Qm)! zUqI;yRE~h^MNnM<5(D`gl%_y_1(hQpzfv)*iFGqE>cIIA)W-zH8>l`7`3;osL4E-F z1=L>wl^39L1I7mBO;FhZid#^+0%4GUL2(WWACP(XNb9!|<5qIiVD%p;4}km!DnmhK z1E`DyfW$x;BnI*~s5}9QgUU}3289DiEeM0c z2jqWHS_jn)pmGG1PC)4eWIw1aK!foaqWlLc=RoBi$bTUBgZu<4J3%za?I3xOI7lAk zR}c+qgM##c%2HVS6(kOl2k8U(7t~e&rEyUFg2EK$Ur;^)m2;r-j!I=Ga=HemS5SEY zice5DgTfnRKPXN?X$-kMp+T4t_l#W4a zK;ZxiYtR~68q6h7-G88R50n={X$2N{pgaglOQ8G%s*6E+2vqKX%2rUkg33&gUtxW9 zP+qz>u;ZP$!Ua4I3d-}K_yM^c6nCIDC8(VNDlb56kUv3f8;}^N+ywa@6u%%pgUU@% zT?s0iKK#E66Y51@1c%7>sj z4pc6H@*yZKfiS4-1f?lZSpq6|KVL)DnCJGBFJx`G87~RDq}$HGf)`>Dr-RHCa5d{ z)gPcT6BO^D@)MM{LGcYr6QFbr@;9iirBjJY-E2eKDrKgfR|H-X#-@&jlL0^~nX zyBXw1kRL!8XJs`h>)Pmw3)K3SQ3o5ff=^2z(KxGxkub?=l zQ+p3whJw;6$giMq2bC+J_yoBNgpu6_%5NaI4T1I}u=oK`_)1;}5p@)H!7Fbv9T zAURN*1XLD*)D9tkg7#N}_s)Xi43wroWeF(XfiS3!2BkHSUqR&xC_X{)4Du%^|H9H5 z4f-~qu%{G*_9=k(1cTfQs?$M!0hK49ya&o}pu7YsTR<4(S5O-aRHlOB6jbJd!UPnz zAPn+1sGR`vH>h6%ieu226toRasawg>4^EpPH-X9+P`wWF6R2zil^dY;8K}Gf(V%h# z)Q<&WP~RQqUr>1qO4Fcn6Qm#HUr@OTDwjd!2`DXt$`nw&0csaeaUCxq|ANQqL3V?} z9TXp+cmb9FApgMn-=H!P#0Sx!wkK!}J!tJc2!s3zDnmiyAoU=1pzs0JouKp#s&7DP z8dPS1(lsc3tQ(kdC~z4HDnCH}1l9AP^ae_^ptJ_cV}r1bLMZ-_<>CGVg*ym?{0K_3 zu(|={Pf(r$<)Yp$0Qnb`enD{yDnCGN15nv9Nd1fAKT!DqDjPxN z1*n_=VUS-z{sxtmp!x%pZb4-Rs9b{OQCOVPv5kqGzi_d^egnk;DE)!TJ5c!vDi1;B zBFL|xwlm0opn4EgZ-6i;4THh})RzFIVNjg_st-Wz*+CYU;QAd@W`Ob)$c>=#9F_(_ z{szenp|&P+Jc9P4gZsIlx))S-fbtV4K0x&~D35{aX^=Qb9@M5D;65F)+lgUg^&hBS z0F^5se}du?RHlIP8_2Jq{02&cpt58L#3|@J3ve3-RIh>BQlK~k`3+Q#fbt!v9t71D zAU}fQ6jWD$+90qp1?0~`T4sXc7hJZ0+z3j8ptK2ULxI}Rpt1vmL1ib%uOJ#!euCPV zpfUv%4j{E44AKV*8&J7I$F?QN{rE80Z=iSsr8iKz1H}y}J%Y+fP&*RTz6O<*pne3% zuOJ%K#s*OoLkg3=)6VC@!AS_ENGS_IV}pgIoJ zM!hgJ`~&kBj0V?-Ape2NPf)uB)F%MtIS>tsTaX+mkM0`c{sZMTP#+KEM^K#&i%*bW zL2ZClL)d?y`W=)9LH+~LAPg#FKxHbZ%mHB#J7Q@05nP6X#$Z9|5Y*-Z`2&VQV-=vW zL0G>RRIVrtLH~j3Z&14h)b<3Gkg$2>9O&$x;o?6~{DIoip#C~2?m*=TXpHd1Fo{1<-3_YGL2(BZ>BLw-%MkWyP1|Cix4-ExS8ev5<`<;AaOG-K=5YT0def| z2RLu0ec->D_JRFo+6JSWX#plT(*#s+rUj_pOuL|fFdyu`oww2+?6{Stu=7@$!_Hf2 z2|I74HSD|vcN9}QhIV$e6e0iP7Xu7S6O^eYI1UA$=HKYOsKy@aky$ZthX2Pl1jfuX@c^!?#|am_jQqVEseeP%JWk894^4_3{< zz`(-5z`(@7z`)GFz`)AD!0?&HbU#Q90|UbW1_p-x*Eip_zrH!v{xi!~5Z-^A|D*%t z3~q=C`P%h!mxRo;hl;`NpEVN%PTHq|!84G&?ZFierUmNuE({C>jtmS8jt%~Yk2m-q zc88b*Aq5`XOq&404{xSTcziQ$!t%eN=VhZ8l- zT6SD9-D}=v${(+3n!o$1iS+F@6Ej^c6NrmZNd>Js`;v|-dx0-y_D6Gy?UO#`+i!2l zv7fG-X@B`#s=ZxXlKmRbc>9kMG4>BXN7x753bmI!6J*bK(%+u_qL2NZ$Da17jPCZ; znlAP~q8;tG&akuZyKikDV_<3jr_0RV>%FnPVyvNk;uSsnry)A_J@+*2O$*iS_w%UQ zb8b`ug|qu-7E@4|x_@Tb>c+s(;P#ot)Qy3G!R<54R#ygw2G`FlrmhSO46dJ9wz@Dd zG`M_bF?C^JU~u`&velV^p~3kxi>WgM1B3HtmaR?<3=K}7SxlW67#N&Bvut%_U}$js z%wh_Tzt1dNL21F^Gm9xGO*(+m2q+yu(+?=U*fB6PfYO{D0|SHIXO^wD3=9pnpIJ<8 z85kIBKeKGLVPI&m`OIQ!!@$5`^O(4A(tr!>@tUj}tS}`y% zSbb*MYRSORVELKF)RKXL!SXZ9RtpA(28+)urWOng3>KeRwwg0AG?=5t2r3Wc#w^E8 z_Q7-4+vkX_wO_qzmAz@i3j283W%i4HEViHhVxc|DoB8&e8Rywg)0ktwDSno{{IVJL zY`>@3FN&RNZ*_LEy{hLV`@nFYv3D0Kw&&n1w4Zk)50tm-^fn4 zk6e{vKjUbkJ?p+Wd#NeW_Q4(z_J+4Z>}`Dm?V0BL+6!Iuv}b+k0Yf@upvU zn;pdVEfUb*cj&15KH->zeP_;B?3>)zvCnY9lzmTUE!cOZX3ah=mmT{+W!8h`zfzN>8ikKl^^bB|Z< z-zQSNU&Fd){~D{>{VKwB`*V-f?a%eA-_O6Xe!ugZ`uz+H4dAjl?%1P3gLoHEz5=Bg zaQn+yaHP%$!sP)iebL)if>!Q2u6M zsB#76>vu2b8EMAwJM{l?w3;>V%>Lly6`^tmrDC8BaQdXf9A4p zV^{b-BkSyaMlb94Ej`e+Pw3m!eIQTn>tOTtSoX(jiS=8r69?~kv1ncNT9bCfYeCiy zuN#_cy>84{b<$4u7iu2mx5$M&>?Bcbe)xt}|S=VdE z1|=_p!xCN}3i!P=Hn4d$eE8$((D>HVf%(2?L;6KehXqGGH!RrUxgch(XTym_o*Qn? z@O;qP@5yka%`-u?)>B|fuIB~icu$44Ku?9eE}j>5TX+hT>3SwSQ1TS`AmPa{o8R-m zbvDlhR)0Mn9DD20;Bw#N!IFy}47ZMWJh-;QqoIGThr^FW9t~_WJrp+ddo;Xm^EeP+ z>v7;^u7^Wvyhp>~K#v38Ts#;)S$Ht4)b(%>Q1)PumGp2p%J1RupUs1z^{;ya&pUU9 zw)^f4k1o152p@G<4!8QCt&(hCxf3_^%-Iy`R zeU^c%yRU|&`?K4+?hFpf?$10W-F@HlyFXK7cTYS2*KJnNJGWWK@4GQ5TymS`d( zd8b?2*R^g85sTf@5@x!ku}p9~Yt`z5R8>-S@KyDs_9wR*-o*BH(RuCrn)3sV-o$H(S#jY{E zGhKJ+O>j+1YIo(buXAnPo#$$+mEc-k6XaUG#MSlN6iZhTCq38e^Oaq%FP3z@?kwPH zTgL8Mo$}8m?cO^VWA6tp#bZP4uk7;ef~1RSo`4I>Ja(5~>;5^pJNG`H=^WBL!THU`cIWCVbh?Y z5#&5s!p)h7$;!ESg`P75gNn21KS}4wGX$I;A7yvG{qvtweb#%Yo97-lafx4c>N7p& zC?e=PRtTZoYsrXayqtlg433p?M{mF^-h<2^PP6QPjLEf8tk+<$jxb?g_Tp! zZ9OMN0~M!0Z7HW8hXkC~yk&Qqs%hC151jogU9gbpI^^Q7M@*O7_COW<@4t9Lrwm4lm;zC+Ul6^GlcQVxs~f)0hY91elE{@c&C z{b0{L^`X7W#mn~APmbAZAKYbsHF~}M!4*sFE9T6ySJs_qKO?XMR1erQFd)yzg654t zV}hW5E@-YAH2#?by|)82_6r&l1&xn_=9WP7E1>aiP@f+(UIXeMgT^;N{YcP!J!m`* zG+qT-vjAGR2b#YDjS+yxu0Z4Bpz(iDzjFoB9Uq`^1khMH2!rOnK^QbY02==SVbEON zF6g}&pm}xB{3Hm2*0O-s$bm3u9sz_;KeGZ~Uh9I>Jdp?NAXj-q@0oKXDz<}JJvtG5sp5Z_x zsBLbSalX=F%ku_@jPtb)3=AHJ85qEIm?Hzj2`BV=800QoI3lwkL(jh`T_GnkDJ;Jz zDYIC?Q^ClruD>@qV`-Hm3)H|#Nc^7(`rBl9)0gx8PFNGEDo@D-v zV~+Vgon_|kKR1|HR_-zXx8sDl`;n{WlU6)7|55zO{D2gr#pF6pi=Vkd7HprSEs{jk zEW+*^Slo!Uv6wX5!{XDDPz&SsWQ)9jB8$uHjTYHiofb_IlPt7u&$i(Fv(zHv=mraG zr#%*$btfzqv|hEinfln`h0Z67mtPnx-NHC6`J9C;1CK~sZhfq3S-;xAa*>*i<t1~>URBXtJAZVTHT1Jw zSUIiZ-U?dtXG&YQG^twubvCe0-(hW?_}bmt_hpE6?EWO{In{;M_0t-xcYW-z{&{_( zwR_NPYsajm*6LattRKzUZ7p=}xV8AHE7l709$A}4e6(KH%wV(pE{DyGLxMI<*3veN zL8>+(0tPmTjn+0NHn`h7T@_;Uq9)1aibk_ zW$v~Ub3$xet&(h&-WAwtc{kYBFYK`GXqss2@qLzU1m{xQPlwjq{?OZP%N%*!HrMxx zZH(k2+l!|@*hX70*p>Hk*cs;v+D&*MWvBj8#ZGUfzFoVpwcROecROFb5Igf9iFPf^ z3+(z;8|;cJJM12XPqe#pa+clC8%ykR``6n^|JY?WRqnW*G5-}i@#_!mY+F9q9TQ@( zFG}UGpX?-Puf18y{@ei-`;Ddg_M7flfyW(WKLp$V-kNCtJD~tt-!#}SXp?T%zlg9CCu0bJ~g zT(d7ww?D$bz+gYo^JZGP=gqVwUN_SwdEHEF@Vc3n=XEnJ#_ML9m)Fg-<(_EcbqwJC z4YXa4TAqT;gJAIZ6T~?T3=E(<-$3JE>fPsPG0|NuY4+aK? zKMV{E|3GfTt_3dYpPn8J=ip#$mp#amXWhhkQ_Y$8P8o}EcJ@*6O}=eXtO4$FJKl1r z@qaj}bnRM~e&T6w?UdO(rkC5!8geb@v)Q}X-=g5QpwIDR7d+%1Om{?+tj*ZmqN~5w*x=pD zS7K|I#B%2>n2>99MZMtjg@0ii?s|F`-t>_+JN}#P`(Y)8E$61%mY&jRu=+HA?(c7I zyLbHlxUBO3mv43tonQZdI_vD77rGZ}-;@`$nHee1>n_G6-@I9CFK}?2I(w3bef9K;4co$MGAD=@ z-s`W4JHg2Yvwg4VMtSmbOST$-WwL~|Fbq>w`#ZYwn@_-ZPM3X+cm>1r_WJ9zxf;Q zyY|nqD`&bmWXzqLraeKc`qh-@vRfVmFqA&&R5N>NXZ`)Hb@qnOJ!OU8Lj#O{J@Wnh zFaE=xV=vy;9x^;_cfRe~|I^KFJFc3{uDtkmuhpHX1;1~+d%%+!`S)yY!|lEV^JD%g zM$<&-7~8ai5l`Z(g|*-3uZZ3gWMZ3rnd8$niS&LqS<7*-$>u#4_r3c{MqgxWBa*+ zb{!2Dta>j@SFt)9rttW+sBXx&E1H#RE03PD&NwJ8t9@nx!>bcZ1J+&>^3Az)I$QsK zP1(EK2Tw12Ty`zt`T7sauO!|+dMCSg>4#MdQoa`^f~Z zi=HzuFo3Ye2PTFipP3jEzB4f>OkiMW=wo15;KRre5X{K%A%u~^A%u~EA%u}(!A>TI z03SvMhd@S#EjyVQR_tVAaHwQpcu>i}aG;!lA)uat;Xnlg!-kCv3U;ybaXJl}wVPpuX zW@Jz(Wn@@T%E(~Q%*e2zoRQ%{IU_>>h;CwJaA;&?_)x;gaG`{e;X@`PgFzM}14Aw& z!-pJ328CQkh6x#r3==@&*^CSYIgAVmxr_`4(is^JNlNBZB})T{IJ7V_eCT9kFaU|KXJjx~&&c3#m65^W2qQzn2}XtsD;OCZPB1bY=x1bb=x1bL zkYi*>kY!{rkYHqBkY;3X0P*D+85T$|G6V=RG8_LY7BZC4cjqPM& zNC4pp3=9_v7#I>V85k5UFfa(@GcY7%F)$RwGcqKkGBQj^V`OMZWn^%OXJjZSV_=w& z&%n^&&&ZJA&&c55&&bf=%E;j0&d9LAfsvuWjFCaWnUNvEl955dfssMLl98byl9Ay- z93w-+Sq27$a|{d&rx+L}oMK=oIK#l8aF2nZ;Ti*jLo)+ILJkANgJuSX3nv*EHk@Q& z_;8AW;lL>dh6~LM3=Pc;3?F(J7z{wToq^#(Cj$e+BnAeC07eFZKt_fGmW&Jnwu}q~ zlNlH;#4s>yn8?8JU?Kyev7_xsdF|_<-Vwn1qiDB_iCWg&FnHcu`WMVkB;5Vq%c^&BUPgn~A~lHxq;VZzhJ2-%Jd-znK`?elsyl|INg( zA0cFfp|JVPfd}!^ANE4->ly;Qg10A?_~|L+)QDhPuB@41Ir@7#96yV%YwdiQ(*DCWiZenHWC(Wny6d z$HXA}kBLF|9}|PkKPCp>e@qO~|CktZ{xLDs{bOS2{l~;G=N}Wp%707@+y5~!9R0_{ zaOEEp!;61R4B!4SF|ht;Vi5k%#Gv$_iNWMQ6NB@ACWfH@ObluNnHZ}6Gcol3XJT0J zpNV11elaioEVrH0vMPX z;ux423K^IgS{RrarZF%xtYBbf*v-JqaEyVO;U)t!!y^V}hPMpN3_lr|8JHNE8Tc5P z8Dtol8B`dV8FUz#8SEID8N3*o8KM}O8L}Cf85$Uw8G0C*8D=svGc09fX4uNe%y5vA znc*BGGs87TW`-w>%nTnGnHdIa4m>Gnbm>E==m>GKMum>B|?m>H6om>DXV zm>F7`m>DKBF*7V;VrJOL#LTddiJ9R96EnjlCT50vOw0@~nV1>AF)=eRGcz;rF*7qr zGcz-2Ff%jQF*7rSFf%h`F*7q%F*7qvW@cts#mvlbgqfM)CNnd`duC<^b{1v^85U*+ za~5U>Zx&{TBo=0dQWj>0b{1xanJmlef8JgLc8D_FEGpuG~X4u2V%y5y7nc)!|GsAZ_W(F>HW(FB{W(EUxW(E&- zW`+cIW`-(uW`>FE%nYm8nHhGoGc#OaXJ&ZE&dk8Y!OWn-!OURC!ORfC!OW1u!OYOY z!OSp=gPCD72Q$Mt4p6U-k%5VUnSq6Ym4S_coq>aalYxtYn}LUcmw}IgpFw~@kU@w+ zm_dX=ltGL^oI!#?l0k|=nn8v^mO+j|o^lR=9?n?Z*` zmqCv~pTU5^kim$-n8Ad>l);R_oWX*@lEI3>n!$#_mcfp}p22~^k->?{m%)$0pCN!DkRga6m?4BAlp%~EoFRfCk|ByAnjwZEmLZNIo*{uD zks*m8nIVNCl_8BGogsrElOc;Cn<0lGmm!ZKpP_)EkfDg7n4yHBl%b5FoS}lDlA(&B znxTfFmZ6TJo}q!Ek)es9nW2TDm7$HHouPxFlc9^Do1urHm!XfLpJ4*SM21NWlNqKk zOl6qHFr8rr!%T)*46_;LFwA9`$1tB^0mDLuMGT7>mM|=3SjMoNVFklVhE)u!8P+hY zWmw0so?!#SMutrcn;Et+Y-QNSu$^HC!%l`>47(ZjFzjX6$FQH_0K-9sLkx!*jxZc$ zIL2_C;RM4;hEoiu8O|`AWjM!hp5X$+MTScZml>`wTxGb%aGl`>!%c=;47VBXFx+Lh z$8ewF0mDOvM+}b{o-jORc*c;EnFJZ4ge;dy%uCFvEY2*B&o3=0C@o=#M-zxo%qdT- zEM|yLN-Zv7h)>GT&yLScEGVfgNHvTvEKSTSDND=&NrNOx^S~mRRjCZ|X*v0cCB{ba z1&PVo2wrI(oS$D5AHWcwnUkN+5TBcvof==BUzAb|Viy!-=B0xqi&Bd-Q%X}o%(B$@ z)V#9Pocw~+_~e|_#3F`xWTDKw%o0?Q+{B`6RFUG;#G>R3G_j1#G?2#3`1FF}%J{UR z)KrG}vdnlS4tP8_KCz%6r!u}gGcP5-oFN_(g7HZ?`N`Swi8(p>$!KClnFY!DMJaGm zh{pKzRFGu_@rk(wxrr6=DXGbcl??G^1@X!Gr3E=4s|(`ObMliCb6`$^^KkHW&U z0PJmOP!>R9H?t}g>bUsa)ZBcq9#|y9B;d9crRL_BrGlb99~3_Y@g@0rsbJgTsS4zv zN`{o8w37Iw#N_Pq#G(`k58?>0L|T3kLLBUzw4D6>B7^wUih}&2lBCkSl$=xsu$WCKRU@WhUkziXa!qkb zQEFl?l3SqyDXGOJMfsIrW1vDXr$D)BIiveam3hhWNu_CNsYMX;L3~IgfNd-qHgqxmP zg5-3F7`Q0NPfthikW4E|O$4VNh$M)ICJFNxOaV0fAl&kzOk`JsxrsTM>EJj-QUVV> zWU>4LaB@KsLbVHQT1io9UNX${$iV_)!<`zB94PT9VFD^d(Sjr%IYhu5gh8MXfLjOR zph_XTFdiO-ATPv&oeS3r=Ai@yL;*@jK!uP30wRK93)m!RFqDBjT9gP1b2u|TGq1QL zF|ULnzYLZw%i@#sb8}OnVnzAI#W{%uAo;ZXg48?^BO@^<4Q39E9S>HLnU|IiQUOy5 zqT`bjb89PElfc zJS3Zx#lzSzO&~r@6POLx1Wv+b@u1iORVInxpa2<@n3R(WvICmEOLLPzS-LD9lJ~)$ zDFL-p^2_2uG^#hjA|T&`Oeo3BO@+G*&Ve}%Apr6vih2}(gVn+O0O5c=QIuM20ItE~ z!J&`ff)gs3o0$hHg;N>89E30^}`>s5OOFzd_qrhNzV*RMZGn6x!^8Rp!vSZbXw2+#UiIlV}QI*%e(lBQ-H4wFsLA zaE3uw4k=QhqDh%0p!6P}n34jv7Ume3I3!=9DF#wgB%i{ zl30=mvlAp(P?VaInGE+ONT?(~KBu?D8cR?QBFTUZg;{_k3@yuG>MQd~GE$2(i{UC^0ua|^!m~*+Tmn|7VQPWN#KV1y zqzhcYU^6c>1(FCb%|nhCgh@Gx1xV!-LcAb37ppj^?!q*?D7CmGu?QYf2xCf$5|gv@ z^K#&c7}8+`O=*l`0wLfa02-r$D4HR}%y2}2nIQm4OhlNO;R+HTq7p&62r@H72qMhL z5oBhl5oBiQ5M*YUBFM}zN06Ceg&;G-7C~l)J%Y>(Cj^-pE(kI++z@1Dcp%8k@IsK8 z;e#ME!yiFr1`Z)+1`#1<1_dEz1|1=01`8o(1_vQ#1`i=-h7ciUh6EvIh8!Vgh6*8O zh87`&odfNLKt}h}65srk(wtO}L{RtIk%1uxBo%U`hkmzaX{+6Qt#8 z$&^-5l$loo+6-pLlm^Z<_8>Zyfx!_(R}?TfGo^vrehjWmY2c<-5mPQ?$c2G{p^Pav zH8(k<2xMjjm|ai_VpoFLpuq?R28JpS8`R5TU|^_aDgakvAT@PN1^ML+3=FMIh2Rm4 z4yK}1n8A~ois9~>&Qx4dl$;3iF2igv8)C;{4cY6hkTjs`Og4jNoA z;4%S4F4I58|fH%8?hL38M_*n8h06gH)b(W zG+AVlXpw1AZn4$ku*G+aU6#iz8LVurf~~e%?Y9!QQM8$3v%=;lXyugx1A_`^_k%&S zL7Kr%qa#Mr#%jh7Eni!{wXU;qwXFi}&N5(N5MW?n=rCMqXk`RhZOQ{mkDy&|0T8(; z^GoKTpp{+;5dJdLm!{^n6Koj@7#Iu~7#LEl#I1F$t*x_c%5AROu-Wq4irPxsI@x;L z2HIBH-m!gRYief=+8Nfsz|h0M!0^gY)5yli!#LPD*|^BK!+4_cOyiZtJB)7`zcBu2 zEMg*U5@uR%`p)#cnY%@&MTBLhWuN6%%X^lhRti=IR_0dItQJ^pvN~vW!Aiwi-`dpL z(>mBX$-3P7ll4#QKeqgKGwfE_U9fv=_s>ql-rT;?zRP~D{Tlmi_IvD4*rK2Z`YaY&@K{D#Ra(8XHnZ`v zZMS9Ez`&5fz`(G_D8P7v@i$`)6ED+p(@xX*rcX>in~InznHiedoB5dqnJ+ZoZ_Z}H zZ{crQWI5S#wIz?0m{qn_sa3VrE$eUA>^8hMqBiz6S8Si!zP9~rD`}T*UvA%I-(f$? z{yoS&2S8;V0|T>xq=CMHt3k9up+URBT!YO9M-8qUyfpZ2z-uUP=x3N@oMGH$yx#ba zv4Dw$iHFH66M0h&Q$14?Q#aFa(<0Ma(-o$&X1Zq9W{zh5W|3z7W;4u|nXNI~Wp>0& zz+BQ?-CWn)+T7K=-F&_IF7qSir_3*zYg*i}h_y_$%(pDHthM}N>1|zWz217U-3Cy+ zUtnO60F{F#$4#V651P-gIBR8WJ=>b$0Rw{!0|P^_!32Y22B1_w+cewE%rXMB>+b_Z zPo!DA*<-UeX4@>!S>CaFVg*{or@+9#aM<{&@onRm#-EK@OpHw|P25dBB=bk+K~`^URqYuH7{U1~%&^SR#-!MUp#j2gG~8s;1d6i>5Hqa|gbeEp zdkmi$)*J6IK48qS03x1cUu0ipUvJ-KKhb`M{d{|d4G{5IiyDiS)-P?UZT0OgfWr6y zBZCMiEG>#Ha;$r-*MN3bUSMR%VPIhJHVZY2F-tbfFv~S7GAlP@Fqbh`HrFyYG`BLh zH+M1jG{0p2%KU@*Cd)&XmnuqdH@M07Epn(fr%l7fq~(H#S@Dc7H=#*SbVYgVZma_ zVaa1DU@2lLVX0!NVX0$jU}RZ=VHsnYV3}f>VVPrDU|C{WVOe9@ zVA*2XVcBCj!E%A+63Z2qYb-ZdZUM!`0VZ%f3mA$RN*Kx*Dj2F5Y8dJmGF)H+$AyBi Xim`^Vj^1JvLws4+R+`;H`Rxu z3Hd9`CcN8XF(G4x*#xHTHWMC07)(EY)g^4|2;8WygWMg1RU|?YIf{6C#GB7X* zFfcF_fcXMoHWMU#Kq8=U0?`Z?pn=A~z`z6+5P;|dX#nYm8ndB_fgyl_f#E|jgl1U4 z!0x1_lQPh68#<#YM>sP`@r< zU|^77U|^_2QUp=wpjVWdlb_7Ma1P}610aVoFfdHRQ0IgyGRmV?2!wXO$@-s>QOF>W z(U8R;kg^bDa6n3@Du`}=!xJ19-kJKs_*-Y`AInmX66q{~jEF)8f&Zl(FU+GD7@Cjp zv>qs7?RMpO&18Ha?0+dwz<<$-UIu|q*C(%qvKS){cc;GScI9bSVA#Rxz|hd_`{#eR z?}wC5UXc0manUCazhGrxV0Z~iZW#f+3ZfY_nkZ<^l-1c!J3><+g$_=>st7fWa82mbz@3=9m-zZm&@HZU+S7~i&x<>Bu; z%)r3V?aC9@ocf2Mx!#1KGxi66TO&x&m!sE&yZe-9iKS#HyFMbK({@4wgMjsqBKEA52(eKY*g(g~q@CphWRv9jLrehj2g%OcdZ1LS^;-#F_qi8w|Ns9FdvQISfg#fP+iRZxrUu|7DNw*5 z@S^wc|Nq^`;*cE_*8MTOyH26?e~D1{`4@`+|NjqvF)N&bp*c-~A+p;|r}aRIcDJ9# zw}TEP+}{o=l(Kbm1pE*5=yuZy=;rtz$kCjp!|-2Jq<}$Su}3e1K)0Jg>wyw3up*A; zGy{h2b1!;%pfR!&6c?=rN(8Nsm2mWW$aFi%y#CPbCez6nA9pyk`%N&&G2h%Y6iV2Q z54_w6O3r>3-L*UiUo!Kr_cQ4}ZhYzc$L?5;&R7oZUoW=&`TxIpA1HA$)Fgg$)8r^o zZT98(-|Nbe#Sjo4+Ax-mprz=OZFVFv8SDt_@hVbrl zpg?T~E8}VY@xMf}o3A^r!1xmL&2GOE;Zrl2ZwR02j0@=W3xTSgB*DPY?N(v!=20w- z60}Bt{{PQnjEIkmjy=S~&|NFgV9!wcvisZ%OZ!P)%|G%XyNH2d&#{d8S7wYsf2v{F3;eo_|r!0tXAv>jkL7+q&l1j8$LCM5+ z2R8!)f13$N4@f&CEp>v8dMWq+|Nm}YkPEF(mk4x!e9`>}l%!cg85km8Kf`LrLXaWI z7K8XN=KcErKhF3-^dS~lJ_{?2%ec@0Dxx(C7zA1mEC%Ji61Q$sl>!EVj6Dqu0s;T8 zwH{auD*sDlGM0dpnu64TMQcEwmsMm1$^M53iz*Z_2sEpLlrR__h&#N2G460+@C%7w z|Np<}_z#LJOIZ<+wm?f+kfIXL;Nak3h(|lYvCshy(+=4ja5gmoWh79J?R8OM2?!3( zcqPIh5FGqp)S!StAd5d>G03q0qB@`$+5hwZ|LDlW!N#{CcJQ~fF)%P##Her_V+EPU zSRw?8s1mL$W=Ohw{VwbnD<}>bVQ~v87qb5UH-(rhQ@|hqVRxHafY{d{>N>%m_jw_K2_zw<%PFYZpbjpGPs1xkZ=)+;%AHTV2IFv|03K2nYk^q$(Sq$LV zHt9b1qL_n$0i5%*{%2I+s=yT>6?peYP)XbErqj*Q8+s?GH}pYJ!2du2a3Sb>$I|yf zF}t?!gYJW`IlA3kv|S%CAMA9?==O8z^u5x3@!~7%LuD+@X&DUNbp_pVC0PuC!Qn3s z1u-yKyFMsm)pmXGnycIQini|q<`dlqJKZWERZ6Gt1>;NFKcsI3hrie=#lY~tOsCuT z!i#Ka28P$%(53;z0VwSOP_}Nc1w{b^s6zW#qSfuDvBIH*YlT87TXUTbL#Z;fu-^C+ zl(Myg7#JcqFuuGBs_E-=82DRGGB7ZJ3PS$Y{h(e=nMe1z7jH!w7%slBWCdkeXcYwx zVD|2FFLr{;ia3pLhaE~ay4gT}^eZvG#QdY%O-1l7GD*_uzY zbjE3PpL-#|&cM*^r_g$`M5B8j52)IC%EiE7eY{+<+fO0Td z;8s%ixfhiJpgK3A+pVC}Euq`3q%$n0(=DahPs8CglkxxNG>zY2AD!!V)9DTU(^>l` z2yCj#H`hN*C7iH2C!o3Z4{Hf8ioKBddch?FD)V-O`hxra|Nj5KRHHRcql71mvHRQ$ zR}KaS#X5~|ZW2!Uu-=dd6px4bHOCUU;)Ah{@Pk&fzR}5TUwjL-E1BWk1vnr^(WN5YpQ>A6y zrEfAo%%w}0F5L$*CG5qtFaQ4=|Bti;D~arMeN*b*>-*qEIzIzLSg-Gc&e}gOcJnhZ zSk^u`?)nGRo7=IYkwKu8bw^1fsIC2`+m|EY#c3f122g$h>CE6~V0gKonSr6Zl%vx& z1Jrh4>vXp1cH`*ww&`>>>2_mjJ=y7O!QVHF8B~Mv_e}yR4mN4M#NXG>%)oH)1vCHp zL;ULxHrGC3=yY}{W$UiC=&XHW{NJ+nLn(7-=m*Q%7p2UdzAw_cgH1YJ*K|8uq;=MA zIrxG(jeq^2v`*IzX<#AOP2FxWX~$icFfycdhA!*2X`Ru)AONmsS`T#kt|$>}umy!U zLn$vLxQq`h232g9U{{yef&()g;)nlbkh)Kz`$y~lT3N6ZxVVFbad?J6BZI)p{Y(rD zU>l%DmxLIfv_4oGWPG5v_QG-3J)psbEr{h7-L4-x!ImxtnceOBVll|zZa0bMA1TGGSt${(xpyvTV`Q*CSjNw!+!H~hWL3=9mtrAvBicPw4n?aHyV+d*V$+S0V<)Kd&; z$6a^)``>yX?YQd+F@{dpGo`ZK&L+)2SV}pMyPh#-U|@L7)BJ<2l>NBt8G8l>hJ6f; z3JTpT!XH;+PKuL$|X|^AVojsUWe=tsoK-2Rz?e z3;zHA&r!nC;H@c;aRStIKK%WwzGQ*~rAK$MMYp%d!FSC3>x)gg4;o+k z{;m6<_Mz?*oz5N?Uos!GbXF;5?sQi9U#!#H4eD0Cs1;#g=sx|Tf`Ne{i!tK0;Q!J$ z8Fv~O1iH_?_|3<_V0@t4_X}zVDYW}dVBk$xjvKr)3K;|f1MkYH+-02rW4>VaVPLo$ z`{TANPxBEDuv`aR?zuMu!yVrr%|`@YJo08>IC=P`12+RhSa|nGZydj1;rZodNS6UA(uZUvoTAm?=Z zX>`X~bl15wJ_L=beZMJvvio@RL#EE!7YAQ6^RJIHX+FqoeChHF?H}F8zklv_tI+;s z{iBRU`v<5(Z2ezi`pr$lr9`kh_D^@12lEZu>CKDZ z+zbqsv0u7>l!#cy{wU%9U-|I9yql_gkpf0I>w_8ECUx~I`gtT9b@qg_@;nL@`SONoH zZ1-ef=>E}tin%U9*e}KSfVQ3V3GKRq?!(f4C7|{Y2dF(%#?<{A(){6n@rDr;2sfzBf0^^g~7rNa_ zdiQ}+tMtL{^8rCG>;xDX?zVvjEB=3=DVO3ye=fGMDQQFdg_h z^4k%Xl9+BcT&8{ChnW@_csKM1XvhR=>WjtP3=E*A`S};mg}{b`jl2srIw+v~Jh-w? zYfRI)|1-YZPa&@LWC;hT|NQ3P|Nk$H-v0j&8XN(|pw!#{|3S^HQVmdJw?yf#iwZ}0 zAjDgN-RJMhsJy7)hqR{8zmOAPV1OCNch^OQ1#It&E&u=je{uKC|Nn$5Nl(Jab zm8A1?+ zfg$om^y~ls=id!gbe0Md0pyP~rr!0t36x_ihJy z1eC5yR776*b3)S8xfhc`$=Iy`Z0%ha6^X#W?sIo#RDuFt2=Ov7y!i48Yz;J6ZoT^d zzq>|-r}cj+H@IQl_2>Wp*9nlU$`$_Nz`y_hL7fs%NI8_U^C)z>X}or9IK$St50phZ z-891Qw!L6rV7NOEe4;bCBSkq2=F3q#n8@K^u;gGX76zkzeI zgN)njZ!dg74m%ciI5;#c{J$xvBi8-#MHUAn7UD9DFB$(geye>``aSbu;j7GU1@XdR zC2_IQ;1UCrh#6mjN;AtgP*a}2XAuJfgQZ&tf6q(?28Mc0OSb_2ran*?A-wzCikIYSH7wRYi&MMfLc09|tZ#uL+4_7jOZTnUOx-`NZ`9b;vs%{`l$m$S z1^*Y_Q@|h)+3ETx7?g?w*+7NHi!*Et44?w=T=@UeKQB(RGBErv{qtY+07&U;-tKcR zRGrE&=7W}I zFZ4kQ4}l)UXYY;+u)a~o*69Ws zoC6hjw~S9}-{?Nx85bdaurn;7(+$)vcrhDnB6u|7Me~dQ{~KylI2cOUn*B5cUb8f( zX}pIB@PhiCrJ$bln^*t;zes%n%A_oy&f3QpJ}>_N2bE*|Qx1dKU5DeqG1~k_2GqO1 z`9d4yOy`R3>Voc44&#&BKf0Yuqz`tV?sWar?QGM@*6nQ3>BiFSY|`n*(e3Qg>BjTF z*yV*B8z^sdx(WO*cKKiWC;Wwp6GT7+Bv4%PzqsIqq7$gUEYZ!}?Onlqu={jCr<=@+ zr>r1Bg>Gk&PB)cqX9-ZJoVn9Yr<>XMB(rmYuy;wPn?bkhpUygqPCt`QH=AZ#P)~uO zw=RHx>VXco1aOZI)V1r~4a%(D=U<5Ng1cee=kLZjypZE%V7MFSktJe$z|vVKzC6Q-NoVa7Xv?$P^+l&!it&Nh%$;s2maHJFN|d2mgq@(h98jYbLsLe# zv&O*}tSXEhZiz2GJp)C3G^h%BaqHRt|J^PsEQ`U-GZz((#h~`t%k$6v{|^oef3X`R zZ3~u@1xY{#I9tD!fSROYpxU%dhWUr^t=Df}%mFDq9^ZXAE*hLLLBkdnB@vc&CMCg^ zbv7k_FY-Vtkn78E>4V*V7SL)xFd*o~8b=0(@QfGC3=Ba5FXBO*|7A8o0WYRFGB9+1 z=>GM>9Aw0??(45vj1L%JijO-Ca(h_#K2XQG`v)kXCVUjP5!oX*0q5H#G@Th7vYptJN(33spWpTLY|S_}gJFLb;90nNCub+UIKj|b=7 zLYCHVCDP&l%UHVYAh|y5#b$d@hWy_8KeF^Wq(TGrxes)*l_+EhG#}vjU!uYj@Iu%g zHfq4u&DPEE`rZb{*GxtSKy^X}$iXj;{Qv*|aC40c3#gv%c4O&eD^YAcP@)K~7}@?8 zu>2QY0V-u$4@8!5fQ;y5dwm~aNH=3x>w)mz0uE>Zbc0F=Xs8`x0r?s{WMX{V`ZH9; z|5Abfr95FTK*eVB5uTOw(A`Max)@5*dhcP(ww8 zfq|jxMzALY^-{b%PyADU61SPKSpS|up0WUI{K#39@Sh86XFRs}#Fjyas zEaB~x=!{_Lj1cII5P8jHe4zUSqzM5cU+iOKV6gsN!rU1r((TRyX1Rez@tHddL^{h^ zEaN#!nLEot$x?)oJw7h_5C=F`x??$-Q^Ae1@ZLI(ZvNJjC7#W-JPaif|4Vs-U#w$f zV9<2sVRYqSzR}IzT*1Lmdb`(+B^*>IJ!Axp=#;QDCx|d~`|*Hg2s=GM(~HcVjv}3I zJg+x`4dMsQgp>&czc>vJ44!URj(ANr&!lLrPA8FW zN0v@Up5{arhUP>LhGs>E!@*(QvY?6%G__g|$_Pr`ZUU{}I^9`H1iRT<50tP3{J$I- z_F|C@C_{i$l-}zu=V|>`BH8UG(CN;Dtf&^G==FnmNF~tt2DEkp|FMLCu>YbvK=TGiWL}HH1pk+Ez=e6@K+`?{ z3mw444k#b~7quy15IDrb01+v4KoJDZn|0Ty2!PyK${7x60lXHpu45_V4-e?9WBD(- zrGP;oGP08`{C|mxz<;wBUDlvEJ|58YcV`_(d>o{i9S$+2+mD0UjmP?D8B_Pq@BnZk ziLz#3(5&NNtm6S?p5tH*-61M0-Atefy>3wKb#j%kG$)EMG$#l!9AaVU4pHF%%gT0p zh_s%B$OOk*>nhOvg5hpt0e_1mBLjm6 ze+ww1d+@jJVPs&q%le`aHl*On0d7vd*lf+fa7Xn)A%j5k5so{&Hwqa9?#6Q5brrb7 zd!dj);Epbc1a&%Q*f21F=sO^TTsiI?yc_!iq>L4$7or#>T?kdSm63trjw{Dq*B_BL zZbpK}XF=?{u^g|N?}l>RN&WFs7h({^^1#45o*dXMmWP^{3{j8E;vd!!_t_A%cnhd; z3-doO$kZEmT?Ign2RrG;U004fvL_%R0&=+cU6|rNP+;*MCk1jUc@YNEp$iJ4$jCdQAVWbWLV7hX>_L(+<2df#xXZc$WT2}6#CniQ z?wbd0KDc}HH8aSCAa{YRy#HWcF$cu<*8*_Yf|Rq~e0MjN#EO?%p_gNP+>>i$vHj4&p*m%0w#$hC5K#9){QsF8uGZ zg1mLtmE*?E`w!-oSi)F$ZCE%OL@VZbygiK$p9Y9-WQ`%q}V{cOwPvItFw)TJ$<<+>KNKbt?mU9VG$+ z13LpvghNy$jxjQVhSFSAWI#eTAXhE@^Z)-L2?kJWq|?!%+eL+=)6oTz&tE)b0!@^Z zXxw!x=ytOR)OK?KkJ7oQ2m}Up``JkQx!jde2@L2y_oC?k|NpNQ?z$E9x&;LEx_JbE zgA%C^_rmrMsI?5P30`!<%ym)WKsMMd1KnIHh`BB*9H<6^Rf774FP{E}mOi@$wZYZ@EDezcDCp z#eTT!CIJdjRWR?tT{i^~&j-wVao0@)#Ipkp&LFwvZtM;13(`M3LqQILxa6+ugFC4o zz)k}@>fXstSC9+u{k-G)0c3_Vs4akOMw|!4j1S#m7M-w4o(>I=9TA3$b+ z#6f1f0GXll_y7O9aRHH$uT_i>Si0HN$kwx3x>*#7-F1^__Otlk>}T^I;`I(TkeA&& z?!-lO*K&XozVux;kGpXZcilW7#b~$uix@KohJf(@!8Ui@0`9~mKvf0YjY|LtfD7Ah z`4?tTRSuw0yhAL|90^g22;AGELzWU1$=Ve4kFW-Mj_ zP2L(G0J)0iPGSZ)Nx#T7V_>+SqrwvzdGF+l6jKIgALEyy)W6=6Au<%P}&iK9D9oa|VGIZ4gZ$;g_Hq6|!m#Y|{jgrV}7d9sLXfFBXF} zC4)2tLNtMdUxL4m z%wT9{5ZHMFq+=mihk*ryz>5}$4v_H6>2Mt~pcw*DhXMwHgD>P&7%>n84fanEDzKn+Jh1#Y7vdsfzn=x3&Jdh4Chz^kOOHFhgIv^bmprB&}>$m{Y z@x%}u5Fp`~-$8?_2p=(ISb%hRfTHI-CnyYc?m=4k*3()}*erbTJgDK+(NXHA14qLE}lOP?h z^}(J83BUaJ2gUPT88<*WG(bAI!8(3}bnJxa013Z51J?mwg4zLINW=hIQktP|4O;aF zR+|A42QNX*a>z(%VGzi8(##+L?hlB16fy`L4%-J(6ZT&ev^MpHvKR3=41cF$i$8-sxiyC=q_K z?A8DOtq01uvKXO@k>0-0eFvJ`TnsY4Qxs&?3%%R_|3|*KtE;C$sokQW zGBvE*6jaD|2C#G*bb4@f^UeU-!aE0K3(H2(=)}nm4}or8mnH^*@ZJi8eIE`{=3zGlR%OFr9f6T#=v77e?$QaQJpgBm>ihc%x&H|TC50B0OpKjiWeg=U! zZr&KMwGh)fJQTWlEkMdVB0zOza{h(M2hr}8r9=b~fjBi_??vPzDfkA+O z>H+K1ov}YUT>o{r{x7Kue(@eOj17*k7gDeP|8F@^A`H>@qLhh&p;HzVcdx^`T{)~- zK>=N=-|fm{%?gTuQWa}cP!yEP?6jE5An@WBE2tx1&$m-zI)lKAH(*{J-$IZ95Mw%B ze?W}3KF#0S1sa=k<>>95@$dhCa7Eee%F_}1zY}aGxYB%4$H>6Y+X_+;@Phf@|Nk)d z;Vb|DM_M0_TnsY1G_u?GhxO?a))z+@85p`+e}EMBf=JNPUgd)&B3S|%87-jhw<#zU z{0FD+a7fB+KJovhFsP=T{__9-7X@q#44SM8{R{$o}`H z6N3P#*M6JzMIVDeU?9XZcX&C97{J}F#HauNzc~B+|NrJ6jNm{hXWh91lvy6IfCgf$ zKbM$U#QrNagy{rNxV*Ujj2Z+E(}1oXNY1P2^v0~L?Q-8ewoL^|VmI^qO6;u1RJLOSDA zIzUULMUJ~k++k&4IPN9`YJY%>j+^hAkMJCGb6~s~7tj&s*cs>38RyX%=h6|UaNI3| zivgrM2DHAV`xt0&w)&^!=83bOKftD44 zb3?$3v?u@nLlSNnB=bN*2IRnSXaNc;8=F-@fydCS3UUEMvn?oC8A@2Q7~@`NK`iPn zQ4s)7VVx|MegWD=0ucsHnYR8fVQKwV%3}QOwQX>>EGRpH*8<3bGFbO9<4fN^M>Dd5 zVy#&e6l)B|2U`D^2(*5y;|U9Yaq{y2|KD#&A8_dY0Cf$g%aNZ@2KzP4Vt zqmMxV!sTY&)5jnXRwDAE;2|jHz(q}wrq+c9QG$8-jPQs!Pqj&28m!^Q{D8VD{b9JXnH|Nk%X>gENPvAm!% zw!{Wv#bQuF+j_D@_qK})$HIUK3<81NtRWx@UNV;OWPo;6y(oJ4|Nm>&7nARUR;XiZ ziy#%@CF&64L4zNyCl`at@DdS_6@h_>#6B0U|PSGsAMrf26Rn9s{fmUw7&SQ z2AT*A3krB)s18~m4VqPogXJiw%NlG!1vf(p|BLmYZ1jQI6l4u(V+eBUhvq`4o)@4N zc=v~Jh+2qaK*{tl)UZ-kkWGif!e4+oI52;nc{SpJK;fR?H=MjYZ{*kRGcAaFPs(ylbR4Q*LMOm00{ zBK2bSBT)0BR1h?p4H5o#_{D-p@R$Y7&m4x9bD)A3#s-ynplLRaFlcV+{`lgEA}GIT z!1GI3_eXHs7Bt>nq9X8O30U3)D$fJ$VS?5HhJ|M_?(=12V2B4-;o(^fVHpi=3<4Py zZ43f0e3Tg&z(Oe?p@=pH0Z0vR0u%QDiQ9n0!EGWLka&1lh7L$r0VE8rW>}%Z0w7@y zkT5t&y;EXfh>ts*anX%I;KgHQa6bSnp~1kw0LjO4AQsqYPy|9O=K_g=8eQNX^Nw|( zMaGAf85lt8k~&L2^!j-~M@wETmuFyTNd3dm>!8$o&c1*o5RIHTB|LEwcW#DyT?mmwcedMXSV3qU#!%wQ0Bq4WFy|HBze zK|1&$IzYlNl~8pUWh?>d5SYjy@B-9NJe+YIq~opVhh9SAi@hk2wC85+())?PL5cIZO-;x_m4Q4E!y6 zAm)?*3=I6OOw6DbX2hTW|1&_VLjp3sGJ_UFaQqk50nOC-zIid}5va)TwlyeZ5Qq!Q zFk=DBcb5M7f4y7Qq!84sybM~!St^mC(8(Z>!3|OHU(}+ILEz;kPz~G)GQZdNO~8vs zkR;BY!PChg@cMGE>w|#aR?uddfNs|}%?CIFUPwL$Pw2HAC}q#M)4?F{dYxryOSdU# z-iUv?D}O^RKSQZ#Z)*f-Z`g$n27!PVSCttUA|qdm|1WKUi2pC0kg*0N_5WJ)5rO8~ zH4J5v|4TRYwnl*GqSjhKOeLfP`LjfsNwd=K8>+#MPt3(xXJzqeRi8MAV~% z^SG-(3&=et$6W;)Kn(5Ut^y?>hSG6YfgBJ+^0=!&3Wyl23#1_99Q=aYb0FkywAHXRHCJ1jaF1Uh{|i?m%|K-4>wFm)gNUnX8-9G(JM3|R~r9~r>iOdHTdiSM8Py}oZ=Tzv5V|I7QJWnADW#F|9FG67i( zpgHABjNoegwFJ3X z3T6R@9dAHIPLUh~L-QMz;IME+838h++Z2>yjBf`AXLy5_jdr@e_w!|f;A5_z8UL5Q3IAXE;{Ua7*9ZT> z!N}RoV12mL^+9PT$R3X1V2FHh##d%Wh73WlBRKwFgCwm7FYez3?OjD)!VT(4bR!qC zk&Fxs9wph$FPQmT-541dvcCK;75Oi!QOF>m`<tRAZb$zQ0q08Blv|c69Yr=i?vMPuz)1i{j8v3*p#CmwDmVU z1LUsY|DgSA6CeVhO+mr`uLZx*1Pz0mfV~F_4@uCP!xvFtaxpkIcwjqO!K;oM z-+-2hfeTEK9&pJ1FXi|z3Mz^MdR-ebOgcfOFg%yKHUwn+hZIAQI`JeZMZt{O0Wu_u zAs~RD8H|u{L^5L`C>gaLDD@8r$N(7w4koxcovs{#w_P~`@9-8t22<{`g64=Jvpc=g zpt;|SBG4)Ufjg|AH32W`r5P9&gN%f%0SW|d^H2T5(CPXk@P6)(K(N#u-Uf(aFH&Vd zCRBiUu|FV2gQlJQK*F^@A|s)OYDqIN1Y|L0fRZDs`%WGX4(-lS;Ry>5eWCyV|NqFH z|LYl`+hX{)f9SRa1?X;2^dEdC5SGOl3=Znh|JT86kbgt}Uyp|_D1`(kDA_*w_y2z+ zu6X!|B_2S{9+dpe!U}FgeFKeI`3md+HJPkW@V9p{ftpV5L4D+d9{epo89=I9)$o|NlSWg&`}by%P*tRMP~}2bBSdG(tqcYos_b zW*LCr|6vNpe@FrfarAP>5LWG*U`ct5d6PX z1Zo@4e^F2k(rwp$qT7*UW~aM^@qx~88H-4kZadHjK&QI}NWjJ-k`*k_Tr0phv(r7I zGd!l0J@CaZaR!FS|E?m<$5wYK&L3E z?~iB~fX3-NMM2~AFF!IdFu?rtUlimAcy)&vnMXjyFs{gKJ<#ncz(4h1hX+dlG`?P> zGm{gOFAe|w|KIrYFEb+pe@hZ00|SW7#K7MIS_jkk^B*$cEZihqCU_hs<2qYN_ z@b`eKCulMRr@Y|c3{Y0-{sBr0qM-P-h-d9|=iqOB0B+BN5@LA3i{+qNEi(9jsXzuO zC4#j={RR>PrA4q}Ksg@laZm{au8QH24hcK3OPYWD z4=$-eahmag;C-MrqD4F_|C9p(VTf`cWK!_|at?5?g3VSbWDxjo4yrF~FzX9mk!Gc3lq+MyS2sZ3}7_?gMo;!r+!)56ghra6LGSEyJM*v@4b4 z#Z7R1Ct!Tw z0?3C8LHP?ZwuV$WLqaJaECZG^ucPL%PFI2Bt|FjfqT5yEzrp`ffft~ogqmGNSRxy1 zML?N6vgir&d>W#)9vl#s0nOe2uS05X(6K7uWitX{;Taj75Wfb4d|1l!-z?yT2e>sZ z&``(1(EX#7KO?4-K_L7EXu3W!^0jJ19VWPM}?z{u?2LtONa`~e-{-N#}1~~Z$YzmkZK=P-Gqf_@x1U52F;0dyYfVK zb9C}`dq{NpaddlFaC_L4KplV6UKtc-d@1t#$ADfJ6^V=vM0hqI5$JVM5eUfm4N6fZDmsvs&Pz}~ zq1#18$D_p2!=uDjSDl5Cfxi{BvJc$na0mIfM8yVDiFkmzehvXyEEy4?G+m-%@PY-r zLRjGCZ%~BisHi|H2jkn2USn{01_uiRLnx&55B`25IDBS?GDu`GXk4~a6f`c2kjwyC zH#0*EtN=7H+bIefm;HY&ICy4;C|DFc5h}U`JnsxDIcGNi;93ltBkdI3)6XDK%a_H~ zDGOpnfJL)XBCQYB@pOWxQ6Un+!QmM{nNb`CZr{z!00ndCV$c+ArzmKK7Hn^LhBnw@ z&{S=w=p1n48x#znE-q-kwo?=|Uu%5eWizVm2O>7MDcGs z04oMT;S&D;D%i8(kW>OG2QwNv83Z65xPVR<6_fwhGD_eg|4UR1{$I<;K@$l651t{; z0QCT&N>UgY8G!v*$WaEAiw?Ej{qFoU*EA+A~o3S4ehP~ak) z3NB;=!oblI{{Jd?Odc{MkE|*n44ib(>|$2R@Yd4b-qK;q~y~ZwX^$V0gI&)EspcF#d0SoWE^3XjQ=vCjK^1 zv1lvI!oX0HYAeVBs`z_Y7#PCCGX!BZ2q+15f3W_}-&X|E^pC5SHH$0mHTMnybp{6O z4|Po4AF>!hg@hvtB6h zfttP`jkzF=rCauc3%Nk127$Y-YXSp%TS18dw0zig3AnQy0EzMdXmmniI-s`|6uc;r3yM1a z_24-EU)uA(wBvv2gn;1xr4t}CvjM%WpfLVl+VH=$C7`zz6czusg2Fifw3!?n7oa^J zrEfsZWl$)=VhJ?Z8wSp4|F?qN`+qBF$oxMztz_)!WDp4ZFFK=uL7?#nXl$avwqZJh z07GO6m84r*pncZIhw2b`%+Klxj;|{vajw_(l%DMw2@xSy#K-hn% znILW8aC?(+0;Wj-w8Z$Z@c~G%HotLzMt+Ii!Ua?9i87#@*Msrpw ztTg@uJ}`{G1++sKG6(nf!TswvEzJWRHzM)k^CQqvaL5CZFWx)?Z_Wj`^>x5w zI?XTq!ueaom>C#!4>5qoZ;pdnvHY!tpmNn!z=OX9H1g>ISwio@-vU~Lqbmj;WA$TZ zV1Qbkv84y>f5^(I<{xbQtp>~t3@-{mPA~-}_6$yF<#?^rRRGj801d#1z5!K*;0AiH z>j&f80l^s>!k|HKf&bT!yK+>tG6;0La)A3c|E~pSF@Z;;13F!K{$B^hv*?Ec27zW* z4w1%MjytUk0!5czY-VO)=#1sqSJMg_K`G+^*SPwuJZG;O5hfE0kcjah4Cerxt z0m# zW2_C+83Y(#3wFqY7?8qmF{sc(wXoUu#eYacw$qj8xa$?rva8P68=bLtI%A)7#=hx{ z71-YZiW~M$*9X0>R{}upVh2YY&;M)xT?Lwti!}a!0t%Zu!T(J`A(&wRlZM1S&wp^- zgE+7_=lOrFGgbg8=6L>75OV_7tRQ=_#GC*)@F6h=8V?2S8#&IRvZjYY06swmo|*+6 zUz6WhD*%eq(v)sjk;V#+n}7fRFOBGC0Qao8g&7zEKx2{M;km^i`;7mCqx`=aDB*!) z&)OCw4su82YbN89fv_p1V3<;yWb1C^;bvQ( zSquUUrIo>9yIDXj?QYwU0tSJ7E2c9D1czlY{J$RdVh?E0l=+zTu_BHJ3%wF%kJn!u zGJf=c8mLo2Qu_p^F$hEkhe0#b^{kk%|DqiQ3<99Nv!yKE$6hl!Wa$Mg2HEsqv541Iu9tQUYrD-$_82#1wJl7qSH;F(@&<;PXrWJJPh5A5}l3$-HtMyjv}C8hUPa3 zpbfR%A3+V$GLipf0{=xp4OUPe+jT((C}6T20zk9x|I0Z3n?gJlQ2?qY76kkkZ7Bdn zhd^X!m`EJ7CIFw-)-4M%1iZhpPN3UO#JWzRG|bvfrZlkE_eK_1U_ki)%OERSLCs2p zEjI$tZ0U9r>8=y#bp6u{RtdGy`bT6bt7Yh)5{+)xKfS&?kPLL)0X7ZUoR|UzNaY7E z?FGO`6lDqY#_NTI>{k@{kC_ng6O+3K#^=oH=vmzv>N8t!0}s3shtBK-NH2fU?WsjD%SX0vTY5 z5*3~ob)W-(kMJA@DFL4+0~)i4{C>mZ@PE}ipsGss0jP`hKLC1$HE1h5^c?HX92K74 z92K5`!)N}hJ^`z}0JT3j+!%CPf&lk{S`qi|5EY*9H@@F$zQNGxq9V{4qQcYdq9Vb4 zpjNm$L`4K4CD9q8BEo&3RJz+oMWowBMF4!lk&6n?_mAC&j4%0D`n?YBz5$jDQ4s*S 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 S3_J{cKq^5+(kP~52mk;Y@V|io diff --git a/Externals/MusicMod/Data/win32/libmpg123-0.dll b/Externals/MusicMod/Data/win32/libmpg123-0.dll deleted file mode 100644 index 6cd0781aea9da7ebde6bb86c0a64c267de68b1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202213 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 bQC@0}u~B>?%o*VEKX6zhA=8nK(7d*a0AFs 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

Hn!01Xy% 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%0D0h;Xe?E&<0`ED^oI!$x}X&)ARj^(WJBl$ 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 Gg#ZBH;>HjF diff --git a/Externals/MusicMod/Data/x64/PluginsMusic/out_wave_gpl.dll b/Externals/MusicMod/Data/x64/PluginsMusic/out_wave_gpl.dll deleted file mode 100644 index da0ccab700ab8be3018e49fe122c2a8890f59cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55296 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 diff --git a/Externals/MusicMod/Data/x64/libmpg123-0.dll b/Externals/MusicMod/Data/x64/libmpg123-0.dll deleted file mode 100644 index 6cd0781aea9da7ebde6bb86c0a64c267de68b1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202213 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 bQC@0}u~B>?%o*VEKX6zhA=8nK(7d*a0AFs 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

Hn!01Xy% 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 Xim`^Vj - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Externals/MusicMod/Main/Src/Frame.cpp b/Externals/MusicMod/Main/Src/Frame.cpp deleted file mode 100644 index 9de36c4fab..0000000000 --- a/Externals/MusicMod/Main/Src/Frame.cpp +++ /dev/null @@ -1,464 +0,0 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻ -#include // System - -#include "Core.h" // Core - -#include "IniFile.h" // Common -#include "Log.h" -#include "Setup.h" - -#include "../../../../Source/Core/DolphinWX/Src/Globals.h" // DolphinWX -#include "../../../../Source/Core/DolphinWX/Src/Frame.h" - -#include "../../../../Source/Core/DolphinWX/resources/toolbar_plugin_dsp.c" // Icons -#include "../../../../Source/Core/DolphinWX/resources/Boomy.h" -#include "../../../../Source/Core/DolphinWX/resources/Vista.h" -#include "../../../../Source/Core/DolphinWX/resources/KDE.h" -#include "../../../../Source/Core/DolphinWX/resources/X-Plastik.h" - -#include "../../Player/Src/PlayerExport.h" // Player -////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -namespace MusicMod -{ - bool GlobalMute = false; - bool GlobalPause = false; - bool bShowConsole = false; - int GlobalVolume = 125; - extern bool dllloaded; - - void ShowConsole(bool); - void Init(); -} -////////////////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Change the brightness of a wxBitmap -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -wxBitmap SetBrightness(wxBitmap _Bitmap, int _Brightness, bool Gray) -{ - wxImage _Image = _Bitmap.ConvertToImage(); - wxImage _Image2 = _Bitmap.ConvertToImage(); - - wxString Tmp; - - if(_Brightness < 0) _Brightness = 0; // Limits - if(_Brightness > 255) _Brightness = 255; - - _Brightness = 255 - _Brightness; // Make big values brighter - - // Remove the alpha layer first - for(int y = 0; y < _Bitmap.GetWidth(); y++) - { - for(int x = 0; x < _Bitmap.GetHeight(); x++) - _Image.SetAlpha(x, y, 255); - } - - for(int y = 0; y < _Bitmap.GetWidth(); y++) - { - //Tmp += wxString::Format("\n %i: ", y); - - for(int x = 0; x < _Bitmap.GetHeight(); x++) - { - u8 R = _Image.GetRed(x, y); // Get colors - u8 G = _Image.GetGreen(x, y); - u8 B = _Image.GetBlue(x, y); - - //if((x == 5 | x == 6) && y == 15) Tmp += wxString::Format("%03i %03i %03i", R, G, B); - - if(_Brightness > 128) - { - int Bright = _Brightness - 128; - R = R - Bright * (R - 0) / 128; - G = G - Bright * (G - 0) / 128; - B = B - Bright * (B - 0) / 128; - - // 118 - 72 * 118 / 128 = 118 - 66.3 = 52 - // 119 - = 119 - 66.9 = 52 - } - else - { - int Bright = 128 - _Brightness; - R = R - Bright * (R - 255) / 128; - G = G - Bright * (G - 255) / 128; - B = B - Bright * (B - 255) / 128; - } - - //if((x == 5 | x == 6) && y == 15) Tmp += wxString::Format(" %03i %03i %03i | ", R, G, B); - - _Image.SetRGB(x, y, R, G, B); - } - } - // Return the alpha - _Image.SetAlpha(_Image2.GetAlpha(), true); - - // Update the bitmap - if(Gray) - return wxBitmap(_Image.ConvertToGreyscale()); - else - return wxBitmap(_Image); - - //wxMessageBox(Tmp); -} -////////////////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Create bitmaps -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -#ifdef MUSICMOD -void -CFrame::MM_InitBitmaps(int Theme) -{ - // Define the log bitmaps - switch (Theme) - { - case BOOMY: - m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log_png); - break; - case VISTA: - m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log1_png); - break; - case XPLASTIK: - m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log2_png); - break; - case KDE: - m_Bitmaps[Toolbar_Log] = wxGetBitmapFromMemory(Toolbar_Log3_png); - break; - default: PanicAlert("Theme selection went wrong"); - } - - // Create a gray version - m_Bitmaps[Toolbar_PluginDSP_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_PluginDSP], 165, true)); - m_Bitmaps[Toolbar_Log_Dis] = wxBitmap(SetBrightness(m_Bitmaps[Toolbar_Log], 165, true)); - - // Update in case the bitmap has been updated - //if (GetToolBar() != NULL) TheToolBar->FindById(Toolbar_Log)->SetNormalBitmap(m_Bitmaps[Toolbar_Log]); -} -////////////////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Create GUI controls -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void CFrame::MM_PopulateGUI() -{ - wxToolBar* toolBar = TheToolBar; // Shortcut - - toolBar->AddSeparator(); - - // ------------------------------------------------------------ - // Draw a rotated music label - // --------------------- - /* - wxBitmap m_RotatedText(30, 15); - wxMemoryDC dc; - dc.SelectObject(m_RotatedText); - wxBrush BackgroundGrayBrush(_T("#ece9d8")); // The right color in windows - - // Set outline and fill colors - dc.SetBackground(BackgroundGrayBrush); - dc.Clear(); - // Set font style and color - wxFont m_font(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD); - dc.SetFont(m_font); - dc.SetTextForeground(wxColour(*wxLIGHT_GREY)); - - dc.DrawText(wxT("Music"), 0, 0); - m_RotatedText = wxBitmap(m_RotatedText.ConvertToImage().Rotate90(false)); - - wxStaticBitmap * m_StaticBitmap = new wxStaticBitmap(toolBar, wxID_ANY, m_RotatedText); - - toolBar->AddControl(m_StaticBitmap); - */ - // ------------------------------------------------------------ - - - mm_ToolMute = toolBar->AddTool(IDM_MUTE, _T("Mute"), m_Bitmaps[Toolbar_PluginDSP], _T("Mute music")); - mm_ToolPlay = toolBar->AddTool(IDM_MUSIC_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play], _T("Play or pause music without pausing the game")); - - // This cause the disabled tool bitmap to become some kind of monochrome version - /* - mm_ToolMute = new wxToolBarToolBase(toolBar, IDM_MUTE, _T("Mute"), m_Bitmaps[Toolbar_PluginDSP], - m_Bitmaps[Toolbar_PluginDSP], wxITEM_CHECK, 0, _T("Mute music")); - toolBar->AddTool(mm_ToolMute); - - mm_ToolPlay = new wxToolBarToolBase(toolBar, IDM_MUSIC_PLAY, _T("Play"), m_Bitmaps[Toolbar_Play], - m_Bitmaps[Toolbar_Play], wxITEM_NORMAL, 0, _T("Play or pause music without pausing the game")); - toolBar->AddTool(mm_ToolPlay); - */ - - - // --------------------------------------------------------- - /* Lots of code to get a label for the slider, in 2.9.0 AddControl accepts a label so then - this code can be simplified a lot */ - // --------- - wxPanel * mm_SliderPanel = new wxPanel(toolBar, IDM_VOLUME_PANEL, wxDefaultPosition, wxDefaultSize); - mm_Slider = new wxSlider(mm_SliderPanel, IDM_VOLUME, 125, 0, 255, wxDefaultPosition, wxDefaultSize); - //mm_Slider->SetToolTip("Change the music volume"); - mm_Slider->SetValue(MusicMod::GlobalVolume); - // --------------------------------------------------------- - - wxStaticText * mm_SliderText = new wxStaticText(mm_SliderPanel, IDM_VOLUME_LABEL, _T("Volume"), wxDefaultPosition, wxDefaultSize); - wxBoxSizer * mm_VolSizer = new wxBoxSizer(wxVERTICAL); - mm_VolSizer->Add(mm_Slider, 0, wxEXPAND | wxALL, 0); - mm_VolSizer->Add(mm_SliderText, 0, wxCENTER | wxALL, 0); - - mm_SliderPanel->SetSizer(mm_VolSizer); - mm_SliderPanel->SetSize(mm_VolSizer->GetMinSize().GetWidth(), mm_VolSizer->GetMinSize().GetHeight()); - - toolBar->AddControl((wxControl*)mm_SliderPanel); - // --------- - - // Console button disabled - //mm_ToolLog = toolBar->AddTool(IDM_LOG, _T("Log"), m_Bitmaps[Toolbar_Log], - // wxT("Show or hide log. Enable the log window and restart Dolphin to show the DLL status.")); -} -////////////////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Update GUI -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void -CFrame::MM_UpdateGUI() -{ - if(MusicMod::GlobalMute) - { - mm_ToolMute->SetLabel("Unmute"); - mm_ToolMute->SetNormalBitmap(m_Bitmaps[Toolbar_PluginDSP_Dis]); - } - else - { - mm_ToolMute->SetLabel("Mute"); - mm_ToolMute->SetNormalBitmap(m_Bitmaps[Toolbar_PluginDSP]); - } - - if(MusicMod::GlobalPause) - { - mm_ToolPlay->SetLabel("Play"); - mm_ToolPlay->SetNormalBitmap(m_Bitmaps[Toolbar_Play]); - } - else - { - mm_ToolPlay->SetLabel("Pause"); - mm_ToolPlay->SetNormalBitmap(m_Bitmaps[Toolbar_Pause]); - } - - /* - if(MusicMod::bShowConsole) - { - mm_ToolLog->SetNormalBitmap(m_Bitmaps[Toolbar_Log]); - } - else - { - mm_ToolLog->SetNormalBitmap(m_Bitmaps[Toolbar_Log_Dis]); - } - */ -} -////////////////////////////////// - - - -////////////////////////////////////////////////////////////////////////////////////////// -// Play and stop music -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void -CFrame::MM_OnPlay() -{ - //NOTICE_LOG(AUDIO,"\nCFrame::OnPlayMusicMod > Begin\n"); - - // Save the volume - MusicMod::GlobalVolume = mm_Slider->GetValue(); - - IniFile file; - file.Load("Plainamp.ini"); - file.Set("Plainamp", "Volume", MusicMod::GlobalVolume); - file.Save("Plainamp.ini"); - - if (Core::GetState() != Core::CORE_UNINITIALIZED) - { - if (Core::GetState() == Core::CORE_RUN) - { - //NOTICE_LOG(AUDIO,"CFrame::OnPlayMusicMod > Pause\n"); - if(!MusicMod::GlobalPause) // we may has set this elsewhere - { - MusicMod::GlobalPause = true; - if (MusicMod::dllloaded) - { - Player_Pause(); - } - } - } - else - { - //NOTICE_LOG(AUDIO,"CFrame::OnPlayMusicMod > Play\n"); - if(MusicMod::GlobalPause) // we may has set this elsewhere - { - MusicMod::GlobalPause = false; - if (MusicMod::dllloaded) - { - Player_Unpause(); - } - } - } - } -} - -void -CFrame::MM_OnStop() -{ - Player_Stop(); - MusicMod::GlobalPause = false; -} -// ======================================================================================= - - -// ======================================================================================= -// Mute music -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void -CFrame::MM_OnMute(wxCommandEvent& WXUNUSED (event)) -{ - //NOTICE_LOG(AUDIO,"CFrame::OnMute > Begin\n"); - //MessageBox(0, "", "", 0); - - if(!MusicMod::GlobalMute) - { - if(MusicMod::dllloaded) // avoid crash - { - Player_Mute(MusicMod::GlobalVolume); - } - - MusicMod::GlobalMute = true; - UpdateGUI(); - } - else - { - if(MusicMod::dllloaded) // avoid crash - { - Player_Mute(MusicMod::GlobalVolume); - } - MusicMod::GlobalMute = false; - UpdateGUI(); - } -} -// ======================================================================================= - - -// ======================================================================================= -// Pause music -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void -CFrame::MM_OnPause(wxCommandEvent& WXUNUSED (event)) -{ - NOTICE_LOG(AUDIO,"CFrame::OnPause > Begin\n"); - //MessageBox(0, "", "", 0); - - if(!MusicMod::GlobalPause) - { - if(MusicMod::dllloaded) // avoid crash - { - Player_Pause(); - } - MusicMod::GlobalPause = true; - UpdateGUI(); - } - else - { - if(MusicMod::dllloaded) // avoid crash - { - Player_Pause(); - } - MusicMod::GlobalPause = false; - UpdateGUI(); - } -} - - -// ======================================================================================= -// Change volume -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void CFrame::MM_OnVolume(wxScrollEvent& event) -{ - //NOTICE_LOG(AUDIO,"CFrame::OnVolume > Begin <%i>\n", event.GetPosition()); - //MessageBox(0, "", "", 0); - - //if(event.GetEventType() == wxEVT_SCROLL_PAGEUP || event.GetEventType() == wxEVT_SCROLL_PAGEDOWN) - // return; - - if(MusicMod::dllloaded) // avoid crash - { - - Player_Volume(event.GetPosition()); - MusicMod::GlobalVolume = event.GetPosition(); - - MusicMod::GlobalMute = false; // Unmute to - mm_ToolMute->Toggle(false); - - - if(event.GetEventType() == wxEVT_SCROLL_CHANGED) - { - // Only update this on release, to avoid major flickering when changing volume - UpdateGUI(); - - /* Use this to avoid that the focus get stuck on the slider when the main - window has been replaced */ - this->SetFocus();} - } -} -//======================================================================================= - - -// ======================================================================================= -// Show log -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -void CFrame::MM_OnLog(bool Show) -{ - //NOTICE_LOG(AUDIO, "CFrame::OnLog > Begin\n"); - //MessageBox(0, "", "", 0); - //NOTICE_LOG(AUDIO, "MM_OnLog: %i", MusicMod::dllloaded); - - // Check that Init() was run - if(!MusicMod::dllloaded) MusicMod::Init(); - // Check that it succeeded - if(!MusicMod::dllloaded) return; - - MusicMod::bShowConsole = Show; - MusicMod::ShowConsole(MusicMod::bShowConsole); - - IniFile file; - file.Load("Plainamp.ini"); - file.Set("Interface", "ShowConsole", MusicMod::bShowConsole); - file.Save("Plainamp.ini"); - - //UpdateGUI(); -} -//======================================================================================= - -#endif // MUSICMOD diff --git a/Externals/MusicMod/Main/Src/Main.cpp b/Externals/MusicMod/Main/Src/Main.cpp deleted file mode 100644 index 0f5207ea7b..0000000000 --- a/Externals/MusicMod/Main/Src/Main.cpp +++ /dev/null @@ -1,366 +0,0 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻ -#include -#include -#include -#include - -#include "Common.h" // Common -#include "IniFile.h" -#include "Log.h" - -#include "PowerPC/PowerPc.h" // Core - -#include "../../../../Source/Core/DiscIO/Src/FileSystemGCWii.h" // This file has #include "Filesystem.h" -#include "../../../../Source/Core/DiscIO/Src/VolumeCreator.h" - -#include "../../Player/Src/PlayerExport.h" // Local player -////////////////////////////////// - - - -////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻ -namespace MusicMod -{ - -struct MyFilesStructure -{ - std::string path; - int offset; // Is int enough, how high does offset go? -}; - -std::vector MyFiles; -void StructSort (std::vector &MyFiles); - - -// Playback -std::string CurrentFile; -std::string CurrentPlayFile; -std::string CurrentPlayFilePath; -std::string unique_gameid; - -std::string MusicPath; - -DiscIO::CFileSystemGCWii* my_pFileSystem; - -int WritingFile = false; -bool dllloaded = false; - -extern bool bShowConsole; // Externally define -extern int GlobalVolume; -////////////////////////////////// - - -// ======================================================================================= -// Supported music files -// --------------------------------------------------------------------------------------- -bool CheckFileEnding(std::string FileName) -{ - if ( - (FileName.find(".adp") != std::string::npos) // 1080 Avalanche, Crash Bandicoot etc - || (FileName.find(".afc") != std::string::npos) // Zelda WW - || (FileName.find(".ast") != std::string::npos) // Zelda TP, Mario Kart - || (FileName.find(".dsp") != std::string::npos) // Metroid Prime - || (FileName.find(".hps") != std::string::npos) // SSB Melee - ) - return true; - - return false; -} -// ======================================================================================= - - -// ======================================================================================= -// A function to sort the filelist table after offset -// ------------------------ -void StructSort (std::vector &MyFiles) -{ - MyFilesStructure temp; - - //NOTICE_LOG(AUDIO,"StructSort > Begin\n"); - - for(int i = 0; i < MyFiles.size() - 1; i++) - { - for (int j = i + 1; j < MyFiles.size(); j++) - { - if (MyFiles[ i ].offset > MyFiles[ j ].offset) //comparing cost - { - temp = MyFiles[ i ]; // Swapping entire struct - MyFiles[ i ] = MyFiles[ j ]; - MyFiles[ j ] = temp; - } - } - } - - - for (long i=1; i<(long)MyFiles.size(); ++i) - { - std::cout << i << " " << MyFiles[i].path.c_str() << "#" << MyFiles[i].offset << "\n"; - } - - //NOTICE_LOG(AUDIO,"StructSort > Done\n"); -} -// ============================ - - -// ======================================================================================= -/* Run these things once when Dolphin starts */ -// ------------------------ -void ShowConsole(bool Show) -{ - if (Show) - { - /* What we do here is run StartConsoleWin() in Common directly after each - other first in the exe then in the DLL, sometimes this would give me a rampant memory - usage increase until the exe crashed at 700 MB memory usage or something like that. - For that reason I'm trying to sleep for a moment between them here. */ - Sleep(100); - Player_Console(true); - } - else - { - Player_Console(false); - } -// Console::Open(100, 2000, "MusicMod", true); // Give room for 2000 rows -} - -void Init() -{ - // These things below will not need to be updated after a new game is started - if (dllloaded) return; - - // --------------------------------------- - // Load config - // --------------------- - IniFile file; - file.Load("Plainamp.ini"); - file.Get("Interface", "ShowConsole", &MusicMod::bShowConsole, false); - file.Get("Plainamp", "Volume", &MusicMod::GlobalVolume, 125); - // ------- - - // --------------------------------------- - // Make a debugging window - // --------------------- - //if(MusicMod::bShowConsole) ShowConsole(); - - // Write version - #ifdef _M_X64 - NOTICE_LOG(AUDIO,"64 bit version\n"); - #else - NOTICE_LOG(AUDIO,"32 bit version\n"); - #endif - // ----------- - - // Set volume - Player_Volume(MusicMod::GlobalVolume); - - // Show DLL status - Player_Main(MusicMod::bShowConsole); - //play_file("c:\\demo36_02.ast"); - //NOTICE_LOG(AUDIO,"DLL loaded\n"); - - dllloaded = true; // Do this once -} -// ============================ - - -// ======================================================================================= -/* Function: Read the GC file system when a game is booted - Called from: BootManager.cpp */ -// ------------------------ -void Main(std::string FileName) -{ - // - DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(FileName); - // - my_pFileSystem = new DiscIO::CFileSystemGCWii(pVolume); - // Check that it worked - if (my_pFileSystem->m_FileInfoVector.size() == 0) NOTICE_LOG(AUDIO, "Volume creation failed") - - /* We have to sort the files according to offset so that out scan in Blob.cpp works. - Because StructSort() only works for MyFilesStructure I copy the offset and filenames - to a new vetor first. */ - MyFiles.resize(my_pFileSystem->m_FileInfoVector.size()); // Set size - for (size_t i = 0; i < my_pFileSystem->m_FileInfoVector.size(); i++) - { - MyFiles.at(i).offset = my_pFileSystem->m_FileInfoVector.at(i).m_Offset; - MyFiles.at(i).path = my_pFileSystem->m_FileInfoVector.at(i).m_FullPath; - } - - // Sort the files by offset - StructSort(MyFiles); - - // --------------------------------------------------------------------------------------- - // Make Music directory - // ------------------------- - LPSECURITY_ATTRIBUTES attr; - attr = NULL; - MusicPath = "Music\\"; - NOTICE_LOG(AUDIO,"Created a Music directory\n"); - CreateDirectory(MusicPath.c_str(), attr); - // ---------------------------------------------------------------------------------------- -} - - -// ======================================================================================= -// Check if we should play this file -// --------------------------------------------------------------------------------------- -void CheckFile(std::string File, int FileNumber) -{ - // Do nothing if we found the same file again - if (CurrentFile == File) return; - - // Check if it's a music file - if (CheckFileEnding(File.c_str())) - { - /* Don't restart the playback if we find the same music file again. If the game is playing - a streaming music file it may read from it once in a while, after it has read other - files in between, if did not do this check we would restart the playback in those cases */ - if (CurrentPlayFile == File) return; - - // Notify the user - NOTICE_LOG(AUDIO,"\n >>> (%i/%i) Match %s\n", FileNumber, MyFiles.size(), File.c_str()); - - // Save the matched file - CurrentPlayFile = File; - - // --------------------------------------------------------------------------------------- - // We will now save the file to the PC hard drive - // ------------------ - // Get the filename - std::size_t pointer = File.find_last_of("/"); - std::string fragment = File.substr (0, (pointer-0)); - int compare = File.length() - fragment.length(); // Get the length of the filename - fragment = File.substr ((pointer+1), compare); // Now we have the filename - - // Create the target file path - std::string FilePath = (MusicPath + fragment); - - WritingFile = true; // Avoid detecting the file we are writing - NOTICE_LOG(AUDIO, "Writing '%s' to '%s'", File.c_str(), FilePath.c_str()); - if (!my_pFileSystem->ExportFile(File.c_str(), FilePath.c_str())) - NOTICE_LOG(AUDIO, "ERROR: ExportFile failed"); - WritingFile = false; - // ------------------------------------------------------ - - // --------------------------------------------------------------------------------------- - // Play the file we found - // ------------------ - if(dllloaded) - { - Player_Play((char*)FilePath.c_str()); // retype it from const char* to char* - } else { - NOTICE_LOG(AUDIO, "Warning > Music DLL is not loaded"); - } - // ------------------------------------------------------ - - // --------------------------------------------------------------------------------------- - // Remove the last file, if any - // ------------------ - if(CurrentPlayFilePath.length() > 0) - { - if(!remove(CurrentPlayFilePath.c_str())) - { - NOTICE_LOG(AUDIO,"The program failed to remove '%s'", CurrentPlayFilePath.c_str()); - } else { - NOTICE_LOG(AUDIO,"The program removed '%s'", CurrentPlayFilePath.c_str()); - } - } - // ------------------------------------------------------ - - // --------------------------------------------------------------------------------------- - // Save the current playing file - // ------------------ - CurrentPlayFilePath = FilePath; // Save the filename so we can remove it later - } - - // Tell the user about the files we ignored - NOTICE_LOG(AUDIO,"(%i/%i) Ignored '%s'\n", FileNumber, MyFiles.size(), File.c_str()); - - // Update the current file - CurrentFile = File; -} - - -////////////////////////////////////////////////////////////////////////////////////////// -// Find the current filename for a certain offset on the GC fileystem -// ŻŻŻŻŻŻŻŻŻŻŻŻŻ -void FindFilename(u64 offset, u64 size) -{ - // ======================================================================================= - /* Only do this test: - 1. After boot, not on ISO scan - 2. Not if offset = 0. - 3. Not when WritingFile. We will lead to calls back to here (Read) and it will mess - upp the scanning */ - if(PowerPC::GetState() == PowerPC::CPUState::CPU_RUNNING && offset != 0 && !WritingFile) - { - ////////////////////////////////////////////////////////////////////////////////////////// - /* Get the filename. Here we go through all files until we come to the file that has - the matching offset. Before MyFiles has data this loop will go nowhere. We have to - specify (MyFiles.size() - 1) because we will be reading MyFiles.at(i + 1). - MyFiles.size() is the amount of files on the disc, and the last file is - MyFiles.at(MyFiles.size() - 1) */ - // --------------------------------------------------------------------------------------- - for (int i = 0; i < (int)(MyFiles.size() - 1); ++i) - { - // Log - //NOTICE_LOG(AUDIO, ">>> Comparing %s [#%i, Size: %i, Location: %u] with %u", MyFiles[i].path.c_str(), i, size, MyFiles[i].offset, offset); - - // --------------------------------------------------------------------------------------- - /* If we assume that myoffset is the begginning of every file this works. - Suppose there are three files - 1 is 0 to 149 - 2 is 150 to 170 - 3 is 171 to 200 - If the offset is 160 the game is reading file number two, for example - myoffset = 150: (myoffset >= offset) == false - myoffset = 171: (myoffset >= offset) == true, break - - However if the offset is 195 the game is reading the last file and we will get - myoffset = 171: (myoffset >= offset) == false - we therefore need to add the condition (offset > MyFiles[MyFiles.size() - 1].offset) - to. */ - if (MyFiles[i + 1].offset >= offset || offset > MyFiles[MyFiles.size() - 1].offset) - { - // Now we know that the game is reading from MyFiles[i].path - CheckFile(MyFiles[i].path, i); - - // Stop checking - break; - } - - // If the file check failed - if (i == (int)(MyFiles.size() - 1) - 1) - { - NOTICE_LOG(AUDIO, "ERROR: GC filename search failed"); - } - } - } // This ends the entire filescan - // ======================================================================================= -} -///////////////////////////////// - - -} // end of namespace diff --git a/Externals/MusicMod/Main/Src/Main.h b/Externals/MusicMod/Main/Src/Main.h deleted file mode 100644 index 92ea473507..0000000000 --- a/Externals/MusicMod/Main/Src/Main.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#include // System: For std - -#include "Common.h" // Common: For u64 - - -namespace MusicMod -{ - -void Main(std::string FileName); -void FindFilename(u64 offset, u64 size); -void CheckFile(std::string File, int FileNumber = 0); - -} \ No newline at end of file diff --git a/Externals/MusicMod/Player/Lib/fftw3.lib b/Externals/MusicMod/Player/Lib/fftw3.lib deleted file mode 100644 index 0fe0789d9a1bc375cffca840cdb5e769af047f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31296 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 Rhi~o&v;`Y#8|I`Z7XX%#*hv5Y diff --git a/Externals/MusicMod/Player/Lib/libzlib1.lib b/Externals/MusicMod/Player/Lib/libzlib1.lib deleted file mode 100644 index e58100e82252c12b8ec2bbd8ba70c84b7501e4a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37266 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 diff --git a/Externals/MusicMod/Player/Player.vcproj b/Externals/MusicMod/Player/Player.vcproj deleted file mode 100644 index a9d38bb8b0..0000000000 --- a/Externals/MusicMod/Player/Player.vcproj +++ /dev/null @@ -1,925 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Externals/MusicMod/Player/Src/AddDirectory.cpp b/Externals/MusicMod/Player/Src/AddDirectory.cpp deleted file mode 100644 index 17dd6de1d8..0000000000 --- a/Externals/MusicMod/Player/Src/AddDirectory.cpp +++ /dev/null @@ -1,364 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "AddDirectory.h" -#include "Playlist.h" -#include "Main.h" -#include "InputPlugin.h" -#include -#include -#include -#include - -using namespace std; - - - -HWND WindowBrowse = NULL; - - - -void SearchFolder( TCHAR * szPath ); - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -LPITEMIDLIST GetCurrentFolder() -{ -/* - How To Convert a File Path to an ITEMIDLIST - http://support.microsoft.com/default.aspx?scid=kb;en-us;132750 -*/ - LPITEMIDLIST pidl; - LPSHELLFOLDER pDesktopFolder; - TCHAR szPath[ MAX_PATH ]; -#ifndef PA_UNICODE - OLECHAR olePath[ MAX_PATH ]; -#endif - ULONG chEaten; - ULONG dwAttributes; - HRESULT hr; - - // - // Get the path we need to convert. - // - GetCurrentDirectory( MAX_PATH, szPath ); - - // - // Get a pointer to the Desktop's IShellFolder interface. - // - if( SUCCEEDED( SHGetDesktopFolder( &pDesktopFolder ) ) ) - { - - // - // IShellFolder::ParseDisplayName requires the file name be in - // Unicode. - // -#ifndef PA_UNICODE - MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szPath, -1, olePath, MAX_PATH ); -#endif - // - // Convert the path to an ITEMIDLIST. - // - // hr = pDesktopFolder->lpVtbl->ParseDisplayName( - hr = pDesktopFolder->ParseDisplayName( - ( HWND__ * )pDesktopFolder, - NULL, -#ifndef PA_UNICODE - olePath, -#else - szPath, -#endif - &chEaten, - &pidl, - &dwAttributes - ); - - if( FAILED( hr ) ) - { - // Handle error. - return NULL; - } - - // - // pidl now contains a pointer to an ITEMIDLIST for .\readme.txt. - // This ITEMIDLIST needs to be freed using the IMalloc allocator - // returned from SHGetMalloc(). - // - - // release the desktop folder object - // pDesktopFolder->lpVtbl->Release(); - pDesktopFolder->Release(); - - return pidl; - } - else - { - return NULL; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lp ) -{ - TCHAR szClassName[ 8 ] = TEXT( "\0" ); - HWND * hFirstFoundStatic = ( ( HWND * )lp ); - - if( GetClassName( hwnd, szClassName, 7 ) ) - { - if( !_tcscmp( szClassName, TEXT( "Static" ) ) ) - { - if( *hFirstFoundStatic ) - { - // Both found - RECT r1; - GetWindowRect( *hFirstFoundStatic, &r1 ); - - RECT r2; - GetWindowRect( hwnd, &r2 ); - - // First must be taller one - if( r1.bottom - r1.top < r2.bottom - r2.top ) - { - // Swap - RECT r = r1; - HWND h = *hFirstFoundStatic; - - r1 = r2; - *hFirstFoundStatic = hwnd; - - r2 = r; - hwnd = h; - } - - POINT xy2 = { r2.left, r2.top }; - ScreenToClient( WindowBrowse, &xy2 ); - - SetWindowPos( - *hFirstFoundStatic, - NULL, - 0, - 0, - r2.right - r2.left, - r2.bottom - r2.top, - SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER - ); - - SetWindowPos( - hwnd, - NULL, - xy2.x, - xy2.y + ( r2.bottom - r2.top ) - ( r1.bottom - r1.top ), - r1.right - r1.left, - r1.bottom - r1.top, - SWP_NOOWNERZORDER | SWP_NOZORDER - ); - - - return FALSE; // Stop - } - else - { - // First found - *hFirstFoundStatic = hwnd; - } - } - } - - return TRUE; // Continue -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -int CALLBACK BrowseCallbackProc( HWND hwnd, UINT message, LPARAM lp, LPARAM wp ) -{ - switch( message ) - { - case BFFM_INITIALIZED: - { - WindowBrowse = hwnd; - - // Init with curdir - SendMessage( hwnd, BFFM_SETSELECTION, FALSE, ( LPARAM )GetCurrentFolder() ); - - // Swap static dimensions - HWND hFirstFoundStatic = NULL; - EnumChildWindows( hwnd, EnumChildProc, ( LPARAM )&hFirstFoundStatic ); - - break; - } - - case BFFM_SELCHANGED: - { - TCHAR szPath[ MAX_PATH ] = TEXT( "\0" ); - SHGetPathFromIDList( ( LPITEMIDLIST )lp, szPath ); - SendMessage( hwnd, BFFM_SETSTATUSTEXT, 0, ( LPARAM )szPath ); - - break; - } - - case BFFM_VALIDATEFAILED: - return TRUE; - - } - - return 0; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Shows a Browse-For-Folder dialog and recursively adds supported files -/// to the playlist. Files are sorted by full filaname before being added. -//////////////////////////////////////////////////////////////////////////////// -void AddDirectory() -{ - TCHAR szPath[ MAX_PATH ]; - BROWSEINFO bi = { 0 }; - bi.hwndOwner = WindowMain; - bi.pidlRoot = NULL; // Desktop folder - bi.lpszTitle = TEXT( "Please select a directory:" ); - bi.ulFlags = BIF_VALIDATE | BIF_STATUSTEXT; - bi.lpfn = BrowseCallbackProc; - - LPITEMIDLIST pidl = SHBrowseForFolder( &bi ); - if( !pidl ) return; - - // Get path - SHGetPathFromIDList( pidl, szPath ); - - - // Search - SearchFolder( szPath ); - - - // Stay here - SetCurrentDirectory( szPath ); - - - // Free memory used - IMalloc * imalloc = 0; - if( SUCCEEDED( SHGetMalloc( &imalloc ) ) ) - { - imalloc->Free( pidl ); - imalloc->Release(); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/* Warning: There is SetCurrentDirectory() here, be aware of it. We don't really - want to use that. */ -//////////////////////////////////////////////////////////////////////////////// -void SearchFolder( TCHAR * szPath ) -{ - // Remove trailing backslash - int iPathLen = ( int )_tcslen( szPath ); - if( iPathLen < 1 ) return; - if( szPath[ iPathLen - 1 ] == TEXT( '\\' ) ) - { - iPathLen--; - } - - // Init working buffer - TCHAR szFullpath[ MAX_PATH ]; - memcpy( szFullpath, szPath, iPathLen * sizeof( TCHAR ) ); - szFullpath[ iPathLen ] = TEXT( '\\' ); - szFullpath[ iPathLen + 1 ] = TEXT( '\0' ); - - // Make pattern - _tcscpy( szFullpath + iPathLen + 1, TEXT( "*" ) ); - - // Find - vector Files; - vector Dirs; - WIN32_FIND_DATA FindFileData; - HANDLE hFind; - hFind = FindFirstFile( szFullpath, &FindFileData ); - if( hFind == INVALID_HANDLE_VALUE ) return; - - do - { - // Skip "." and ".." - if( !_tcscmp( FindFileData.cFileName, TEXT( "." ) ) || - !_tcscmp( FindFileData.cFileName, TEXT( ".." ) ) ) continue; - - // Make full path - _tcscpy( szFullpath + iPathLen + 1, FindFileData.cFileName ); - - // Is directory? - TCHAR * szPartname = new TCHAR[ MAX_PATH ]; - _tcscpy( szPartname, FindFileData.cFileName ); - if( SetCurrentDirectory( szFullpath ) ) - { - // New dir - Dirs.push_back( szPartname ); - continue; - } - - // Search "." - const int iFilenameLen = ( int )_tcslen( FindFileData.cFileName ); - TCHAR * szExt = FindFileData.cFileName + iFilenameLen - 1; - while( ( szExt > FindFileData.cFileName ) && ( *szExt != TEXT( '.' ) ) ) szExt--; - if( *szExt != TEXT( '.' ) ) continue; - szExt++; - - // Check extension - map ::iterator iter = ext_map.find( szExt ); - if( iter == ext_map.end() ) continue; - - // New file - Files.push_back( szPartname ); - } - while( FindNextFile( hFind, &FindFileData ) ); - - FindClose( hFind ); - vector ::iterator iter; - - // Sort and recurse directories - sort( Dirs.begin(), Dirs.end(), TextCompare() ); - iter = Dirs.begin(); - while( iter != Dirs.end() ) - { - TCHAR * szWalk = *iter; - - _tcscpy( szFullpath + iPathLen + 1, szWalk ); - SearchFolder( szFullpath ); - - iter++; - } - - // Sort and add files - sort( Files.begin(), Files.end(), TextCompare() ); - iter = Files.begin(); - while( iter != Files.end() ) - { - TCHAR * szWalk = *iter; - - TCHAR * szKeep = new TCHAR[ MAX_PATH ]; - memcpy( szKeep, szFullpath, ( iPathLen + 1 ) * sizeof( TCHAR ) ); - _tcscpy( szKeep + iPathLen + 1, szWalk ); - playlist->PushBack( szKeep ); - - iter++; - } -} diff --git a/Externals/MusicMod/Player/Src/AddDirectory.h b/Externals/MusicMod/Player/Src/AddDirectory.h deleted file mode 100644 index 8c819cbd63..0000000000 --- a/Externals/MusicMod/Player/Src/AddDirectory.h +++ /dev/null @@ -1,26 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_ADD_DIRECTORY_H -#define PA_ADD_DIRECTORY_H - - - -#include "Global.h" - - - -void AddDirectory(); - - - -#endif // PA_ADD_DIRECTORY_H diff --git a/Externals/MusicMod/Player/Src/AddFiles.cpp b/Externals/MusicMod/Player/Src/AddFiles.cpp deleted file mode 100644 index d8367894b2..0000000000 --- a/Externals/MusicMod/Player/Src/AddFiles.cpp +++ /dev/null @@ -1,181 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "AddFiles.h" -#include "InputPlugin.h" -#include "Main.h" -#include "Playlist.h" -#include - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -void AddFiles() -{ - int total = 0; - - int iFilterLen = 0; - - InputPlugin * input; - vector ::iterator iter; - - // Get len -// if( input_plugins.empty() ) return; - iter = input_plugins.begin(); - while( iter != input_plugins.end() ) - { - input = *iter; - if( !input ) iter++; - iFilterLen += input->iFiltersLen; - iter++; - } - -// if( !iFilterLen ) return; - - iFilterLen += 40 + 29 + ( int )ext_map.size() * ( 2 + 4 + 1 ) + 7; - - TCHAR * szFilters = new TCHAR[ iFilterLen ]; - TCHAR * walk = szFilters; - - // ..................1.........1....\....\.1.........1........\.1... - memcpy( walk, TEXT( "All files (*.*)\0*.*\0All supported types\0" ), 40 * sizeof( TCHAR ) ); - walk += 40; - - // Add all extensions as ";*.ext" -// if( ext_map.empty() ) return; - map ::iterator iter_ext = ext_map.begin(); - bool bFirst = true; - while( iter_ext != ext_map.end() ) - { - if( !bFirst ) - { - memcpy( walk, TEXT( ";*." ), 3 * sizeof( TCHAR ) ); - walk += 3; - } - else - { - memcpy( walk, TEXT( "*." ), 2 * sizeof( TCHAR ) ); - walk += 2; - bFirst = false; - } - - TCHAR * szExt = iter_ext->first; - int uLen = ( int )_tcslen( szExt ); - memcpy( walk, szExt, uLen * sizeof( TCHAR ) ); - walk += uLen; - - iter_ext++; - } - - // *walk = TEXT( '\0' ); - // walk++; - - // ..................1..........1... - memcpy( walk, TEXT( ";*.m3u\0" ), 7 * sizeof( TCHAR ) ); - walk += 7; - - // ..................1.........1.........1...........1... - memcpy( walk, TEXT( "Playlist files (*.M3U)\0*.m3u\0" ), 29 * sizeof( TCHAR ) ); - walk += 29; - - // Copy filters - iter = input_plugins.begin(); - while( iter != input_plugins.end() ) - { - input = *iter; - if( !input ) iter++; - memcpy( walk, input->szFilters, input->iFiltersLen * sizeof( TCHAR ) ); - walk += input->iFiltersLen; - iter++; - } - - *walk = TEXT( '\0' ); - walk++; - - -//////////////////////////////////////////////////////////////////////////////// - - static TCHAR szFilenames[ 20001 ]; - *szFilenames = TEXT( '\0' ); // Each time! - - OPENFILENAME ofn; - memset( &ofn, 0, sizeof( OPENFILENAME ) ); - ofn.lStructSize = sizeof( OPENFILENAME ); - ofn.hwndOwner = WindowMain; - ofn.hInstance = g_hInstance; - ofn.lpstrFilter = szFilters; // "MPEG Layer 3\0*.mp3\0"; - ofn.lpstrCustomFilter = NULL; - ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 2; - ofn.lpstrFile = szFilenames; - ofn.nMaxFile = 20000; - ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; - ofn.nMaxFileTitle = 0, // NULL; - ofn.lpstrInitialDir = NULL; - ofn.lpstrTitle = TEXT( "Add files" ); - - if( !GetOpenFileName( &ofn ) ) return; - - int uDirLen = ( int )_tcslen( szFilenames ); - TCHAR * szDir = szFilenames; - - TCHAR * szFileWalk = szDir + uDirLen + 1; - if( *szFileWalk == TEXT( '\0' ) ) // "\0\0" or just "\0"? - { - // \0\0 -> Single file - if( !_tcsncmp( szDir + uDirLen - 3, TEXT( "m3u" ), 3 ) ) - { - // Playlist file - Playlist::AppendPlaylistFile( szDir ); - } - else - { - // Music file - TCHAR * szKeep = new TCHAR[ uDirLen + 1 ]; - memcpy( szKeep, szDir, uDirLen * sizeof( TCHAR ) ); - szKeep[ uDirLen ] = TEXT( '\0' ); - playlist->PushBack( szKeep ); - } - } - else - { - // \0 -> Several files - int iFileLen; - while( *szFileWalk != TEXT( '\0' ) ) - { - iFileLen = ( int )_tcslen( szFileWalk ); - if( !iFileLen ) return; - - TCHAR * szKeep = new TCHAR[ uDirLen + 1 + iFileLen + 1 ]; - memcpy( szKeep, szDir, uDirLen * sizeof( TCHAR ) ); - szKeep[ uDirLen ] = TEXT( '\\' ); - memcpy( szKeep + uDirLen + 1, szFileWalk, iFileLen * sizeof( TCHAR ) ); - szKeep[ uDirLen + 1 + iFileLen ] = TEXT( '\0' ); - - if( !_tcsncmp( szKeep + uDirLen + 1 + iFileLen - 3, TEXT( "m3u" ), 3 ) ) - { - // Playlist file - Playlist::AppendPlaylistFile( szKeep ); - delete [] szKeep; - } - else - { - // Music file - playlist->PushBack( szKeep ); - } - - szFileWalk += iFileLen + 1; - } - } -} diff --git a/Externals/MusicMod/Player/Src/AddFiles.h b/Externals/MusicMod/Player/Src/AddFiles.h deleted file mode 100644 index 387242ce1a..0000000000 --- a/Externals/MusicMod/Player/Src/AddFiles.h +++ /dev/null @@ -1,26 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_ADD_FILES_H -#define PA_ADD_FILES_H - - - -#include "Global.h" - - - -void AddFiles(); - - - -#endif // PA_ADD_FILES_H diff --git a/Externals/MusicMod/Player/Src/Config.cpp b/Externals/MusicMod/Player/Src/Config.cpp deleted file mode 100644 index 49465c88b5..0000000000 --- a/Externals/MusicMod/Player/Src/Config.cpp +++ /dev/null @@ -1,687 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////////////////// -/// Include and declarations, definitions -//////////////////////////////////////////////////////////////////////////////// -#include "Config.h" -#include "Console.h" -#include - -using namespace std; - -map * conf_map = NULL; - -TCHAR * szIniPath = NULL; -const TCHAR * SECTION = TEXT( "Plainamp" ); -// ============================================================================ - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfVar::ConfVar( TCHAR * szKey, ConfMode mode ) -{ - // MessageBox( 0, TEXT( "no const @ ConfVar" ), TEXT( "" ), 0 ); - //NOTICE_LOG(AUDIO,"ConfVar::ConfVar(TCHAR) > Got <%s>\n", szKey); - - // Init - const int iLen = ( int )_tcslen( szKey ); - m_szKey = new TCHAR[ iLen + 1 ]; - memcpy( m_szKey, szKey, iLen * sizeof( TCHAR ) ); - m_szKey[ iLen ] = TEXT( '\0' ); - - m_bCopyKey = true; - m_Mode = mode; - - m_bRead = false; - - // Register - if( !conf_map ) conf_map = new map; - conf_map->insert( pair( m_szKey, this ) ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfVar::ConfVar( const TCHAR * szKey, ConfMode mode ) -{ - //NOTICE_LOG(AUDIO,"ConfVar::ConfVar(const TCHAR) > Got <%s>\n", szKey); - - // Init - m_szKey = ( TCHAR * )szKey; - - m_bCopyKey = false; - m_Mode = mode; - - m_bRead = false; - - // Register - if( !conf_map ) conf_map = new map; - conf_map->insert( pair( m_szKey, this ) ); - - //NOTICE_LOG(AUDIO,"ConfVar::ConfVar(const TCHAR) > Insert <%s>\n", ConfVar::m_szKey); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfVar::~ConfVar() -{ - if( m_bCopyKey && m_szKey ) delete [] m_szKey; -} - - - -// ======================================================================================= -// The line name is collected in ConfVar, then ConfBool gets the boolean -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfBool::ConfBool( bool * pbData, TCHAR * szKey, ConfMode mode, bool bDefault ) : ConfVar( szKey, mode ) -{ - // MessageBox( 0, TEXT( "no const @ ConfBool" ), TEXT( "" ), 0 ); - //NOTICE_LOG(AUDIO,"ConfBool(TCHAR) > Get <%s>\n", szKey); - - m_pbData = pbData; - m_bDefault = bDefault; - - // *pbData = bDefault; -} -// ======================================================================================= - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfBool::ConfBool( bool * pbData, const TCHAR * szKey, ConfMode mode, bool bDefault ) : ConfVar( szKey, mode ) -{ - //NOTICE_LOG(AUDIO,"ConfBool(TCHAR) > Get <%s>\n", szKey); - - m_pbData = pbData; - m_bDefault = bDefault; - - // *pbData = bDefault; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfBool::Read() -{ - //NOTICE_LOG(AUDIO,"ConfBool::Read() > Begin and \n", m_bRead, szIniPath); - - if( m_bRead || !szIniPath ) return; - - *m_pbData = ( GetPrivateProfileInt( SECTION, m_szKey, ( int )m_bDefault, szIniPath ) != 0 ); - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfBool::Write() -{ - WritePrivateProfileString( SECTION, m_szKey, *m_pbData ? TEXT( "1" ) : TEXT( "0" ), szIniPath ); - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfInt::ConfInt( int * piData, TCHAR * szKey, ConfMode mode, int iDefault ) : ConfVar( szKey, mode ) -{ - MessageBox( 0, TEXT( "no const" ), TEXT( "" ), 0 ); - - m_piData = piData; - m_iDefault = iDefault; - - // *piData = iDefault; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfInt::ConfInt( int * piData, const TCHAR * szKey, ConfMode mode, int iDefault ) : ConfVar( szKey, mode ) -{ - m_piData = piData; - m_iDefault = iDefault; - - // *piData = iDefault; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfInt::Read() -{ - if( m_bRead || !szIniPath ) return; - - *m_piData = GetPrivateProfileInt( SECTION, m_szKey, m_iDefault, szIniPath ); - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfInt::Write() -{ - TCHAR szNumber[ 12 ] = TEXT( "" ); - _stprintf( szNumber, TEXT( "%i" ), *m_piData ); - WritePrivateProfileString( SECTION, m_szKey, szNumber, szIniPath ); - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfIntMinMax::ConfIntMinMax( int * piData, TCHAR * szKey, ConfMode mode, int iDefault, int iMin, int iMax ) : ConfInt( piData, szKey, mode, iDefault ) -{ - MessageBox( 0, TEXT( "no const" ), TEXT( "" ), 0 ); - - m_iMin = iMin; - m_iMax = iMax; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfIntMinMax::ConfIntMinMax( int * piData, const TCHAR * szKey, ConfMode mode, int iDefault, int iMin, int iMax ) : ConfInt( piData, szKey, mode, iDefault ) -{ - m_iMin = iMin; - m_iMax = iMax; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfWinPlaceCallback::ConfWinPlaceCallback( WINDOWPLACEMENT * pwpData, TCHAR * szKey, RECT * prDefault, ConfCallback fpCallback ) : ConfVar( szKey, CONF_MODE_INTERNAL ) -{ - MessageBox( 0, TEXT( "no const" ), TEXT( "" ), 0 ); - - m_pwpData = pwpData; - m_prDefault = prDefault; - m_fpCallback = fpCallback; - - pwpData->length = sizeof( WINDOWPLACEMENT ); - pwpData->flags = 0; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfWinPlaceCallback::ConfWinPlaceCallback( WINDOWPLACEMENT * pwpData, const TCHAR * szKey, RECT * prDefault, ConfCallback fpCallback ) : ConfVar( szKey, CONF_MODE_INTERNAL ) -{ - m_pwpData = pwpData; - m_prDefault = prDefault; - m_fpCallback = fpCallback; - - pwpData->length = sizeof( WINDOWPLACEMENT ); - pwpData->flags = 0; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfWinPlaceCallback::Read() -{ - if( m_bRead || !szIniPath ) return; - - POINT ptMinPosition = { -1, -1 }; - POINT ptMaxPosition = { -GetSystemMetrics( SM_CXBORDER ), -GetSystemMetrics( SM_CYBORDER ) }; - - m_pwpData->length = sizeof( WINDOWPLACEMENT ); - m_pwpData->flags = 0; - m_pwpData->ptMinPosition = ptMinPosition; - m_pwpData->ptMaxPosition = ptMaxPosition; - - - TCHAR szOut[ 111 ] = TEXT( "" ); - int iChars = GetPrivateProfileString( SECTION, m_szKey, TEXT( "" ), szOut, 110, szIniPath ); - bool bApplyDefault = true; - if( iChars ) - { - int iFields = _stscanf( - szOut, - TEXT( "(%u,(%i,%i,%i,%i))" ), - &m_pwpData->showCmd, - &m_pwpData->rcNormalPosition.left, - &m_pwpData->rcNormalPosition.top, - &m_pwpData->rcNormalPosition.right, - &m_pwpData->rcNormalPosition.bottom - ); - if( iFields == 5 ) - { - bApplyDefault = false; - } - } - - if( bApplyDefault ) - { - m_pwpData->showCmd = SW_SHOWNORMAL; - m_pwpData->rcNormalPosition = *m_prDefault; - } - - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfWinPlaceCallback::Write() -{ - // Refresh data - if( m_fpCallback ) m_fpCallback( this ); - - TCHAR szData[ 111 ] = TEXT( "" ); - _stprintf( - szData, - TEXT( "(%u,(%i,%i,%i,%i))" ), - m_pwpData->showCmd, - m_pwpData->rcNormalPosition.left, - m_pwpData->rcNormalPosition.top, - m_pwpData->rcNormalPosition.right, - m_pwpData->rcNormalPosition.bottom - ); - WritePrivateProfileString( SECTION, m_szKey, szData, szIniPath ); - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfBandInfoCallback::ConfBandInfoCallback( BandInfo * pbiData, TCHAR * szKey, BandInfo * pbiDefault, ConfCallback fpCallback ) : ConfVar( szKey, CONF_MODE_INTERNAL ) -{ - MessageBox( 0, TEXT( "no const" ), TEXT( "" ), 0 ); - - m_pbiData = pbiData; - m_pbiDefault = pbiDefault; - m_fpCallback = fpCallback; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfBandInfoCallback::ConfBandInfoCallback( BandInfo * pbiData, const TCHAR * szKey, BandInfo * pbiDefault, ConfCallback fpCallback ) : ConfVar( szKey, CONF_MODE_INTERNAL ) -{ - m_pbiData = pbiData; - m_pbiDefault = pbiDefault; - m_fpCallback = fpCallback; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfBandInfoCallback::Read() -{ - if( m_bRead || !szIniPath ) return; - - int iBreak; - int iVisible; - - TCHAR szOut[ 91 ] = TEXT( "" ); - int iChars = GetPrivateProfileString( SECTION, m_szKey, TEXT( "" ), szOut, 90, szIniPath ); - bool bApplyDefault = true; - if( iChars ) - { - int iFields = _stscanf( - szOut, - TEXT( "(%i,%i,%i,%i)" ), - &m_pbiData->m_iIndex, - &m_pbiData->m_iWidth, - &iBreak, - &iVisible - ); - if( iFields == 4 ) - { - m_pbiData->m_bBreak = ( iBreak != 0 ); - m_pbiData->m_bVisible = ( iVisible != 0 ); - - bApplyDefault = false; - } - } - - if( bApplyDefault ) - { - *m_pbiData = *m_pbiDefault; - } - - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfBandInfoCallback::Write() -{ - // Refresh data - if( m_fpCallback ) m_fpCallback( this ); - - TCHAR szData[ 91 ] = TEXT( "" ); - _stprintf( - szData, - TEXT( "(%i,%i,%i,%i)" ), - m_pbiData->m_iIndex, - m_pbiData->m_iWidth, - ( int )m_pbiData->m_bBreak, - ( int )m_pbiData->m_bVisible - ); - WritePrivateProfileString( SECTION, m_szKey, szData, szIniPath ); - m_bRead = true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool ConfBandInfoCallback::Apply( HWND hRebar, int iBandId ) -{ - const int iOldIndex = ( int )SendMessage( hRebar, RB_IDTOINDEX, iBandId, 0 ); - if( iOldIndex == -1 ) return false; - - int & iNewIndex = m_pbiData->m_iIndex; - if( iOldIndex != iNewIndex ) - { - // Move band - if( !SendMessage( hRebar, RB_MOVEBAND, iOldIndex, iNewIndex ) ) - { - return false; - } - } - - REBARBANDINFO rbbi; - rbbi.cbSize = sizeof( REBARBANDINFO ); - rbbi.fMask = RBBIM_STYLE; - - // Get current info - if( !SendMessage( hRebar, RB_GETBANDINFO, iNewIndex, ( LPARAM )&rbbi ) ) - { - return false; - } - - rbbi.fMask = RBBIM_SIZE | RBBIM_STYLE; - rbbi.cx = m_pbiData->m_iWidth; - if( ( rbbi.fStyle & RBBS_BREAK ) == RBBS_BREAK ) - { - if( !m_pbiData->m_bBreak ) rbbi.fStyle -= RBBS_BREAK; - } - else - { - if( m_pbiData->m_bBreak ) rbbi.fStyle |= RBBS_BREAK; - } - - // Update info - if( !SendMessage( hRebar, RB_SETBANDINFO, iNewIndex, ( LPARAM )&rbbi ) ) - { - return false; - } - - // Show/hide band - if( !SendMessage( hRebar, RB_SHOWBAND, iNewIndex, m_pbiData->m_bVisible ? TRUE : FALSE ) ) - { - return false; - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfString::ConfString( TCHAR * szData, TCHAR * szKey, ConfMode mode, TCHAR * szDefault, int iMaxLen ) : ConfVar( szKey, mode ) -{ - MessageBox( 0, TEXT( "no const" ), TEXT( "" ), 0 ); - - m_szData = szData; - m_szDefault = szDefault; - m_iMaxLen = iMaxLen; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfString::ConfString( TCHAR * szData, const TCHAR * szKey, ConfMode mode, TCHAR * szDefault, int iMaxLen ) : ConfVar( szKey, mode ) -{ - m_szData = szData; - m_szDefault = szDefault; - m_iMaxLen = iMaxLen; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfString::Read() -{ - //NOTICE_LOG(AUDIO, "ConfString::Read() > Begin\n"); - - if( m_bRead || !szIniPath ) return; - - GetPrivateProfileString( SECTION, m_szKey, m_szDefault, m_szData, m_iMaxLen, szIniPath ); - - //NOTICE_LOG(AUDIO, "ConfString::Read() > GetPrivateProfileString <%s> <%s> <%s>\n", m_szKey, m_szData, szIniPath); - - m_bRead = true; -} - - -// ======================================================================================= -// I don't use this -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfString::Write() -{ - /* - WritePrivateProfileString( SECTION, m_szKey, m_szData, szIniPath ); - m_bRead = true; - */ -} -// ======================================================================================= - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfCurDir::ConfCurDir( TCHAR * szData, TCHAR * szKey ) : ConfString( szData, szKey, - CONF_MODE_INTERNAL, TEXT( "C:\\" ), MAX_PATH ) -{ - -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -ConfCurDir::ConfCurDir( TCHAR * szData, const TCHAR * szKey ) : ConfString( szData, szKey, - CONF_MODE_INTERNAL, TEXT( "C:\\" ), MAX_PATH ) -{ - -} - - -//////////////////////////////////////////////////////////////////////////////// -/* IMPORTANT: This SetCurrentDirectory() has to be disabled or we change the relative paths - for the entire application */ -//////////////////////////////////////////////////////////////////////////////// -void ConfCurDir::Read() -{ - ConfString::Read(); - - // Apply - //SetCurrentDirectory( m_szData ); - - //NOTICE_LOG(AUDIO,"ConfCurDir::Read > End <%s>\n", m_szData); -} -// ============================================================================== - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ConfCurDir::Write() -{ - // Refresh - GetCurrentDirectory( MAX_PATH, m_szData ); // Note: without trailing slash - - // MessageBox( 0, m_szData, TEXT( "CurDir" ), 0 ); - //NOTICE_LOG(AUDIO,"ConfCurDir::Read <%s>\n", m_szData); - - ConfString::Write(); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Conf::Init() -{ - if( szIniPath ) return; - - // ======================================================================================= - // Find the right ini file - // Long filename - - szIniPath = new TCHAR[ _MAX_PATH ]; - - TCHAR szFull[ _MAX_PATH ] = TEXT( "" ); - TCHAR szDrive[ _MAX_DRIVE ] = TEXT( "" ); - TCHAR szDir[ _MAX_DIR ] = TEXT( "" ); - - - // --------------------------------------------------------------------------------------- - // We place the full path in szFull - //GetModuleFileName( hInstance, szFull, _MAX_PATH ); - GetModuleFileName( NULL, szFull, _MAX_PATH ); // No don't use that - // --------------------------------------------------------------------------------------- - - _tsplitpath( szFull, szDrive, szDir, NULL, NULL ); - - - // Convert short to long path - GetLongPathName( szDir, szDir, _MAX_DIR ); - - - // --------------------------------------------------------------------------------------- - // We place information about the file in fd - // --------------------------------------------------------------------------------------- - // Convert short to long file - WIN32_FIND_DATA fd; - HANDLE h = FindFirstFile( szFull, &fd ); - // --------------------------------------------------------------------------------------- - - // --------------------------------------------------------------------------------------- - // Convert File.exe to File.ini - // --------------------------------------------------------------------------------------- - // Search last dot - TCHAR * szSearch = fd.cFileName + _tcslen( fd.cFileName ) - 1; - while( ( *szSearch != TEXT( '.' ) ) && ( szSearch > fd.cFileName ) ) - { - szSearch--; - } - // --------------------------------------------------------------------------------------- - // Replace extension - _tcscpy( szSearch, TEXT( ".ini" ) ); - // --------------------------------------------------------------------------------------- - - // Copy full filename - //_sntprintf( szIniPath, _MAX_PATH, TEXT( "%s%s%s" ), szDrive, szDir, fd.cFileName ); - _sntprintf( szIniPath, _MAX_PATH, TEXT( "%s%s%s" ), szDrive, szDir, TEXT( "Plainamp.ini" ) ); - - NOTICE_LOG(AUDIO,"DLL > Ini path <%s>\n", szIniPath); - // ======================================================================================= - - - // --------------------------------------------------------------------------------------- - // Read all settings in it - // --------------------------------------------------------------------------------------- - // Read all (original comment) - map::iterator iter = conf_map->begin(); - - // ======================================================================================= - // This will lead us to the Read() function earlier in this file. For example ConfBool::Read() - while( iter != conf_map->end() ) - { - /* By default there was a SetCurrentDirectory() here that would affect the entire process, - exe and everything. It is disabled now. */ - iter->second->Read(); - iter++; - } - // ======================================================================================= - // --------------------------------------------------------------------------------------- - -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Conf::Write() -{ - if( !szIniPath ) return; - - map::iterator iter = conf_map->begin(); - while( iter != conf_map->end() ) - { - iter->second->Write(); - iter++; - } -} diff --git a/Externals/MusicMod/Player/Src/Config.h b/Externals/MusicMod/Player/Src/Config.h deleted file mode 100644 index c139c120af..0000000000 --- a/Externals/MusicMod/Player/Src/Config.h +++ /dev/null @@ -1,239 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_CONFIG_H -#define PA_CONFIG_H - - - -#include "Global.h" -#include "OutputPlugin.h" - - - -namespace Conf -{ - //void Init( HINSTANCE hInstance ); - void Init( ); - void Write(); -}; - - - -enum ConfMode -{ - CONF_MODE_INTERNAL, // Will not be shown to the user - CONF_MODE_PUBLIC -}; - -class ConfVar; -typedef void ( * ConfCallback )( ConfVar * var ); - -struct BandInfo -{ - int m_iIndex; - int m_iWidth; - bool m_bBreak; - bool m_bVisible; -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Config container -//////////////////////////////////////////////////////////////////////////////// -class ConfVar -{ -public: - ConfVar( TCHAR * szKey, ConfMode mode ); - ConfVar( const TCHAR * szKey, ConfMode mode ); - ~ConfVar(); - -protected: - TCHAR * m_szKey; ///< Unique identifier - ConfMode m_Mode; ///< Mode/visibility - bool m_bRead; ///< Initilization flag - - virtual void Read() = 0; - virtual void Write() = 0; - - // virtual void Backup() = 0; ///< Creates a backup and deletes old backup if it exists - // virtual void Restore() = 0; ///< Restores settings from backup and destroys the backup - -private: - bool m_bCopyKey; ///< Keyname is copy (has to be freed on destruction) - - //friend void Conf::Init( HINSTANCE hInstance ); - friend void Conf::Init( ); - - friend void Conf::Write(); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Boolean config container -//////////////////////////////////////////////////////////////////////////////// -class ConfBool : public ConfVar -{ -public: - ConfBool( bool * pbData, TCHAR * szKey, ConfMode mode, bool bDefault ); - ConfBool( bool * pbData, const TCHAR * szKey, ConfMode mode, bool bDefault ); - -private: - bool * m_pbData; ///< Target - bool m_bDefault; ///< Default value - - void Read(); - void Write(); - - - friend OutputPlugin::OutputPlugin( TCHAR * szDllpath, bool bKeepLoaded ); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Integer config container -//////////////////////////////////////////////////////////////////////////////// -class ConfInt : public ConfVar -{ -public: - ConfInt( int * piData, TCHAR * szKey, ConfMode mode, int iDefault ); - ConfInt( int * piData, const TCHAR * szKey, ConfMode mode, int iDefault ); - -protected: - int * m_piData; - int m_iDefault; - - void Read(); - void Write(); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Integer config container with restricted range -//////////////////////////////////////////////////////////////////////////////// -class ConfIntMinMax : public ConfInt -{ -public: - ConfIntMinMax( int * piData, TCHAR * szKey, ConfMode mode, int iDefault, int iMin, int iMax ); - ConfIntMinMax( int * piData, const TCHAR * szKey, ConfMode mode, int iDefault, int iMin, int iMax ); - -// bool IsValid() { return ( ( *m_piData >= m_iMin ) && ( *m_piData <= m_iMax ) ); } - inline bool IsMin() { return ( *m_piData == m_iMin ); } - inline bool IsMax() { return ( *m_piData == m_iMax ); } - - inline void MakeValidDefault() { if( ( *m_piData < m_iMin ) || ( *m_piData > m_iMax ) ) *m_piData = m_iDefault; } - inline void MakeValidPull() { if( *m_piData < m_iMin ) *m_piData = m_iMin; else if( *m_piData > m_iMax ) *m_piData = m_iMax; } - -private: - int m_iMin; - int m_iMax; - - void Read() { ConfInt::Read(); MakeValidPull(); } -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Window placement config container -/// -/// The callback funtion is called on write() -/// so the data written is up to date. -//////////////////////////////////////////////////////////////////////////////// -class ConfWinPlaceCallback : public ConfVar -{ -public: - ConfWinPlaceCallback( WINDOWPLACEMENT * pwpData, TCHAR * szKey, RECT * prDefault, ConfCallback fpCallback ); - ConfWinPlaceCallback( WINDOWPLACEMENT * pwpData, const TCHAR * szKey, RECT * prDefault, ConfCallback fpCallback ); - - inline void TriggerCallback() { if( m_fpCallback ) m_fpCallback( this ); } - inline void RemoveCallback() { m_fpCallback = NULL; } - -private: - WINDOWPLACEMENT * m_pwpData; - RECT * m_prDefault; - ConfCallback m_fpCallback; - - void Read(); - void Write(); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Rebar band info config container -/// -/// The callback funtion is called on write() -/// so the data written is up to date. -//////////////////////////////////////////////////////////////////////////////// -class ConfBandInfoCallback : public ConfVar -{ -public: - ConfBandInfoCallback( BandInfo * pbiData, TCHAR * szKey, BandInfo * pbiDefault, ConfCallback fpCallback ); - ConfBandInfoCallback( BandInfo * pbiData, const TCHAR * szKey, BandInfo * pbiDefault, ConfCallback fpCallback ); - - inline void TriggerCallback() { if( m_fpCallback ) m_fpCallback( this ); } - inline void RemoveCallback() { m_fpCallback = NULL; } - - bool Apply( HWND hRebar, int iBandId ); - -private: - BandInfo * m_pbiData; - BandInfo * m_pbiDefault; - ConfCallback m_fpCallback; - - void Read(); - void Write(); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// String config container -//////////////////////////////////////////////////////////////////////////////// -class ConfString : public ConfVar -{ -public: - ConfString( TCHAR * szData, TCHAR * szKey, ConfMode mode, TCHAR * szDefault, int iMaxLen ); - ConfString( TCHAR * szData, const TCHAR * szKey, ConfMode mode, TCHAR * szDefault, int iMaxLen ); - -protected: - TCHAR * m_szData; - int m_iMaxLen; - TCHAR * m_szDefault; - - void Read(); - void Write(); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Current directory config container -//////////////////////////////////////////////////////////////////////////////// -class ConfCurDir : public ConfString -{ -public: - ConfCurDir( TCHAR * szData, TCHAR * szKey ); - ConfCurDir( TCHAR * szData, const TCHAR * szKey ); - -private: - void Read(); - void Write(); -}; - - - -#endif // PA_CONFIG_H diff --git a/Externals/MusicMod/Player/Src/Console.cpp b/Externals/MusicMod/Player/Src/Console.cpp deleted file mode 100644 index 08868156d4..0000000000 --- a/Externals/MusicMod/Player/Src/Console.cpp +++ /dev/null @@ -1,228 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Console.h" -#include "Font.h" -#include "Main.h" -#include "Config.h" -#include - - - -HWND WindowConsole = NULL; // extern -int iNext = 0; - -const int iMaxEntries = 10000; - - - -WNDPROC WndprocConsoleBackup = NULL; -LRESULT CALLBACK WndprocConsole( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - -bool bConsoleVisible; -WINDOWPLACEMENT WinPlaceConsole; - -void WinPlaceConsoleCallback( ConfVar * var ) -{ - if( !IsWindow( WindowConsole ) ) return; - - GetWindowPlacement( WindowConsole, &WinPlaceConsole ); - - // MSDN: If the window identified by the hWnd parameter - // is maximized, the showCmd member is SW_SHOWMAXIMIZED. - // If the window is minimized, showCmd is SW_SHOWMINIMIZED. - // Otherwise, it is SW_SHOWNORMAL. - if( !bConsoleVisible ) - { - WinPlaceConsole.showCmd = SW_HIDE; - } -} - -RECT rConsoleDefault = { 50, 400, 450, 700 }; - -ConfWinPlaceCallback cwpcWinPlaceConsole( - &WinPlaceConsole, - TEXT( "WinPlaceConsole" ), - &rConsoleDefault, - WinPlaceConsoleCallback -); - - - -//////////////////////////////////////////////////////////////////////////////// -/// Creates the console window. -/// Size and visibility is used from config. -/// -/// @return Success flag -//////////////////////////////////////////////////////////////////////////////// -bool Console::Create() -{ - WindowConsole = CreateWindowEx( - WS_EX_TOOLWINDOW | // DWORD dwExStyle - WS_EX_CLIENTEDGE, // - TEXT( "LISTBOX" ), // LPCTSTR lpClassName - TEXT( "Console" ), // LPCTSTR lpWindowName - WS_VSCROLL | // DWORD dwStyle - LBS_DISABLENOSCROLL | // - LBS_EXTENDEDSEL | // - LBS_HASSTRINGS | // - LBS_NOTIFY | // - LBS_NOINTEGRALHEIGHT | // - WS_POPUP | // - WS_OVERLAPPEDWINDOW, // - rConsoleDefault.left, // int x - rConsoleDefault.top, // int y - rConsoleDefault.right - rConsoleDefault.left, // int nWidth - rConsoleDefault.bottom - rConsoleDefault.top, // int nHeight - WindowMain, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - if( !WindowConsole ) return false; - - // A blank line at the bottom will give us more space - SendMessage( WindowConsole, LB_INSERTSTRING, 0, ( LPARAM )TEXT( "" ) ); - - Font::Apply( WindowConsole ); - - bConsoleVisible = ( WinPlaceConsole.showCmd != SW_HIDE ); - SetWindowPlacement( WindowConsole, &WinPlaceConsole ); - - // Exchange window procedure - WndprocConsoleBackup = ( WNDPROC )GetWindowLong( WindowConsole, GWL_WNDPROC ); - if( WndprocConsoleBackup != NULL ) - { - SetWindowLong( WindowConsole, GWL_WNDPROC, ( LONG )WndprocConsole ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Destroys the console window. -/// -/// @return Success flag -//////////////////////////////////////////////////////////////////////////////// -bool Console::Destroy() -{ - if( !WindowConsole ) return false; - DestroyWindow( WindowConsole ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Pops up the console window. -/// -/// @return Success flag -//////////////////////////////////////////////////////////////////////////////// -bool Console::Popup() -{ - if( !WindowConsole ) return false; - if( !IsWindowVisible( WindowConsole ) ) - { - ShowWindow( WindowConsole, SW_SHOW ); - } - - SetActiveWindow( WindowConsole ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Adds a new entry at the end/bottom -/// -/// @param szText Log entry -/// @return Success flag -//////////////////////////////////////////////////////////////////////////////// -bool Console::Append( TCHAR * szText ) -{ - if( !WindowConsole ) return false; - if( iNext > iMaxEntries - 1 ) - { - SendMessage( - WindowConsole, - LB_DELETESTRING, - 0, - 0 - ); - iNext--; - } - - const int uTextLen = ( int )_tcslen( szText ); - TCHAR * szBuffer = new TCHAR[ 11 + uTextLen + 1 ]; - time_t now_time_t = time( NULL ); - struct tm * now_tm = localtime( &now_time_t ); - _tcsftime( szBuffer, 12, TEXT( "%H:%M:%S " ), now_tm ); - memcpy( szBuffer + 11, szText, uTextLen * sizeof( TCHAR ) ); - szBuffer[ 11 + uTextLen ] = TEXT( '\0' ); - - SendMessage( WindowConsole, LB_INSERTSTRING, iNext, ( LPARAM )szBuffer ); - SendMessage( WindowConsole, LB_SETSEL, FALSE, -1 ); - SendMessage( WindowConsole, LB_SETSEL, TRUE, iNext ); - SendMessage( WindowConsole, LB_SETTOPINDEX, iNext, 0 ); - iNext++; - - delete [] szBuffer; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocConsole( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - switch( message ) - { -/* - case WM_CTLCOLORLISTBOX: - if( ( HWND )lp == WindowConsole ) - { - SetBkColor (( HDC )wp, GetSysColor(COLOR_3DFACE)); - return ( LRESULT )GetSysColorBrush(COLOR_3DFACE); - } - break; -*/ - - case WM_SYSCOMMAND: - // Hide instead of closing - if( ( wp & 0xFFF0 ) == SC_CLOSE ) - { - ShowWindow( hwnd, SW_HIDE ); - return 0; - } - break; - - case WM_DESTROY: - cwpcWinPlaceConsole.TriggerCallback(); - cwpcWinPlaceConsole.RemoveCallback(); - break; - - case WM_SHOWWINDOW: - bConsoleVisible = ( wp == TRUE ); - break; - - } - return CallWindowProc( WndprocConsoleBackup, hwnd, message, wp, lp ); -} diff --git a/Externals/MusicMod/Player/Src/Console.h b/Externals/MusicMod/Player/Src/Console.h deleted file mode 100644 index 28386af265..0000000000 --- a/Externals/MusicMod/Player/Src/Console.h +++ /dev/null @@ -1,40 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_CONSOLE_H -#define PA_CONSOLE_H - - - -#include "Global.h" - - - -extern HWND WindowConsole; - - -//////////////////////////////////////////////////////////////////////////////// -/// Logging console window -//////////////////////////////////////////////////////////////////////////////// -namespace Console -{ - bool Create(); - bool Destroy(); - - bool Popup(); - - bool Append( TCHAR * szText ); -} - - - -#endif // PA_CONSOLE_H diff --git a/Externals/MusicMod/Player/Src/DspModule.cpp b/Externals/MusicMod/Player/Src/DspModule.cpp deleted file mode 100644 index 5a49715d1e..0000000000 --- a/Externals/MusicMod/Player/Src/DspModule.cpp +++ /dev/null @@ -1,136 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "DspModule.h" -#include "Unicode.h" - - - -DspModule ** active_dsp_mods = NULL; // extern -int active_dsp_count = 0; // extern - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -DspModule::DspModule( char * szName, int iIndex, winampDSPModule * mod, DspPlugin * plugin ) -{ - iArrayIndex = -1; - - iNameLen = ( int )strlen( szName ); - this->szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( this->szName, szName, iNameLen ); - this->szName[ iNameLen ] = TEXT( '\0' ); - - this->iIndex = iIndex; - this->mod = mod; - this->plugin = plugin; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool DspModule::Start( int iIndex ) -{ - if( !mod ) return false; - if( iArrayIndex != -1 ) return false; - if( !mod->Init ) return false; - if( mod->Init( mod ) != 0 ) return false; - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - if( !active_dsp_count ) - { - active_dsp_mods = new DspModule * [ 1 ]; - active_dsp_mods[ 0 ] = this; - iArrayIndex = 0; - } - else - { - if( iIndex < 0 ) - iIndex = 0; - else if( iIndex > active_dsp_count ) - iIndex = active_dsp_count; - - DspModule ** new_active_dsp_mods = new DspModule * [ active_dsp_count + 1 ]; - memcpy( new_active_dsp_mods, active_dsp_mods, iIndex * sizeof( DspModule * ) ); - memcpy( new_active_dsp_mods + iIndex + 1, active_dsp_mods + iIndex, ( active_dsp_count - iIndex ) * sizeof( DspModule * ) ); - for( int i = iIndex + 1; i < active_dsp_count + 1; i++ ) - { - new_active_dsp_mods[ i ]->iArrayIndex = i; - } - new_active_dsp_mods[ iIndex ] = this; - iArrayIndex = iIndex; - delete [] active_dsp_mods; - active_dsp_mods = new_active_dsp_mods; - } - active_dsp_count++; - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool DspModule::Stop() -{ - if( !mod ) return false; - if( iArrayIndex == -1 ) return false; - if( !mod->Quit ) return true; - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - for( int i = iArrayIndex; i < active_dsp_count - 1; i++ ) - { - active_dsp_mods[ i ] = active_dsp_mods[ i + 1 ]; - active_dsp_mods[ i ]->iArrayIndex = i; - } - active_dsp_count--; - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - mod->Quit( mod ); - - iArrayIndex = -1; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool DspModule::Config() -{ - if( !mod ) return false; - if( iArrayIndex == -1 ) return false; - if( !mod->Config ) return false; - - mod->Config( mod ); - - return true; -} diff --git a/Externals/MusicMod/Player/Src/DspModule.h b/Externals/MusicMod/Player/Src/DspModule.h deleted file mode 100644 index 5b69b177b1..0000000000 --- a/Externals/MusicMod/Player/Src/DspModule.h +++ /dev/null @@ -1,67 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_DSP_MODULE_H -#define PA_DSP_MODULE_H - - - -#include "Global.h" -#include "DspPlugin.h" -#include "Winamp/Dsp.h" - - - -class DspModule; -class DspPlugin; - -extern DspModule ** active_dsp_mods; -extern int active_dsp_count; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp DSP module wrapper -//////////////////////////////////////////////////////////////////////////////// -class DspModule -{ -public: - inline bool IsActive() { return ( iArrayIndex != -1 ); } - - inline TCHAR * GetName() { return szName; } - inline int GetNameLen() { return iNameLen; } - - DspModule( char * szName, int iIndex, winampDSPModule * mod, DspPlugin * plugin ); -// DspModule( wchar_t * szName, int iIndex, winampVisModule * mod, VisPlugin * plugin ); - - bool Start( int iIndex ); - bool Stop(); - - bool Config(); - -private: - int iArrayIndex; - - TCHAR * szName; - int iNameLen; - - int iIndex; - winampDSPModule * mod; - DspPlugin * plugin; - - - friend int dsp_dosamples( short int * samples, int numsamples, int bps, int nch, int srate ); -}; - - - -#endif // PA_DSP_MODULE_H diff --git a/Externals/MusicMod/Player/Src/DspPlugin.cpp b/Externals/MusicMod/Player/Src/DspPlugin.cpp deleted file mode 100644 index 1026124591..0000000000 --- a/Externals/MusicMod/Player/Src/DspPlugin.cpp +++ /dev/null @@ -1,186 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "DspPlugin.h" -#include "Main.h" -#include "Unicode.h" -#include "Console.h" - - - -vector dsp_plugins; // extern -Lock DspLock = Lock( TEXT( "PLAINAMP_DSP_LOCK" ) ); // extern - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -DspPlugin::DspPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllpath ) -{ - header = NULL; - - if( !Load() ) - { - return; - } - - if( !bKeepLoaded ) - { - Unload(); - } - - dsp_plugins.push_back( this ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool DspPlugin::Load() -{ - if( IsLoaded() ) return true; - - // (1) Load DLL - hDLL = LoadLibrary( GetFullpath() ); - if( !hDLL ) return false; - - // (2) Find export - WINAMP_DSP_GETTER winampGetDSPHeader2 = - ( WINAMP_DSP_GETTER )GetProcAddress( hDLL, "winampDSPGetHeader2" ); - if( winampGetDSPHeader2 == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (3) Get header - header = winampGetDSPHeader2(); - if( header == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - -//////////////////////////////////////////////////////////////////////////////// - // Forget old modules or we get them twice - if( !modules.empty() ) - { - modules.clear(); - } -//////////////////////////////////////////////////////////////////////////////// - - if( !szName ) - { - // Note: The prefix is not removed to hide their - // origin at Nullsoft! It just reads easier. - if( !_strnicmp( header->description, "nullsoft ", 9 ) ) - { - header->description += 9; - } - iNameLen = ( int )strlen( header->description ); - szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( szName, header->description, iNameLen ); - szName[ iNameLen ] = TEXT( '\0' ); - } - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName ); - Console::Append( szBuffer ); - - // (4) Get modules - winampDSPModule * mod; - int iFound = 0; - while( true ) - { - mod = header->getModule( iFound ); - if( !mod ) break; - - // (4a) Modify module - mod->hDllInstance = hDLL; - mod->hwndParent = WindowMain; - - // (4b) Add module to list - DspModule * dspmod = new DspModule( - mod->description, // char * szName - iFound, // UINT uIndex - mod, // winampDspModule * mod - this // DspPlugin * plugin - ); - modules.push_back( dspmod ); - iFound++; - - _stprintf( szBuffer, TEXT( " %s" ), dspmod->GetName() ); - Console::Append( szBuffer ); - } - - Console::Append( TEXT( " " ) ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool DspPlugin::Unload() -{ - if( !IsLoaded() ) return true; - if( IsActive() ) return false; - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - printf( ">>>Unloading <%s>\n" , GetFilename() ); - - header = NULL; - - /* - TODO - DspModule * walk; - vector ::iterator iter = modules.begin(); - while( iter != modules.end() ) - { - walk = *iter; - delete [] walk->szName; - delete walk; - - iter++; - } - */ - - FreeLibrary( hDLL ); - hDLL = NULL; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool DspPlugin::IsActive() -{ - vector ::iterator iter = modules.begin(); - while( iter != modules.end() ) - { - if( ( *iter )->IsActive() ) return true; - iter++; - } - return false; -} diff --git a/Externals/MusicMod/Player/Src/DspPlugin.h b/Externals/MusicMod/Player/Src/DspPlugin.h deleted file mode 100644 index afd299a60c..0000000000 --- a/Externals/MusicMod/Player/Src/DspPlugin.h +++ /dev/null @@ -1,69 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_DSP_PLUGIN_H -#define PA_DSP_PLUGIN_H - - - -#include "Global.h" -#include "Plugin.h" -#include "Winamp/Dsp.h" -#include "Lock.h" -#include "DspModule.h" -#include - -using namespace std; - - - -typedef winampDSPHeader * ( * WINAMP_DSP_GETTER )( void ); - - - -class DspModule; -class DspPlugin; - -extern vector dsp_plugins; -extern Lock DspLock; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp DSP plugin wrapper -//////////////////////////////////////////////////////////////////////////////// -class DspPlugin : public Plugin -{ -public: - DspPlugin( TCHAR * szDllpath, bool bKeepLoaded ); - - bool Load(); - bool Unload(); - - TCHAR * GetTypeString() { return TEXT( "DSP" ); } - int GetTypeStringLen() { return 3; } - PluginType GetType() { return PLUGIN_TYPE_DSP; } - - bool IsActive(); - -private: - winampDSPHeader * header; - vector modules; - - - friend class DspModule; - friend void ContextMenuDsp( DspPlugin * dsp, POINT * p ); -}; - - - -#endif // PA_DSP_PLUGIN_H diff --git a/Externals/MusicMod/Player/Src/Emabox/Emabox.cpp b/Externals/MusicMod/Player/Src/Emabox/Emabox.cpp deleted file mode 100644 index 1f1d2bf032..0000000000 --- a/Externals/MusicMod/Player/Src/Emabox/Emabox.cpp +++ /dev/null @@ -1,455 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////// -// ExtraMessageBox -// -// Copyright İ 2006 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////*/ - - -/* -TODO -* realign/recenter after height change -* tab stop order when adding buttons -* offer extra callback? -* auto click timer (one button after XXX seconds) -* allow several checkboxes? radio buttons? - -MB_YESNO -MB_YESNOCANCEL ---> MB_YESNOALL ---> MB_YESNOCANCELALL ---> MB_DEFBUTTON5 ---> IDNOALL ---> IDYESALL -*/ - - -#include "Emabox.h" - - - -#define FUNCTION_NORMAL 0 -#define FUNCTION_EXTENDED 1 -#define FUNCTION_INDIRECT 2 - - - -const int SPACE_UNDER_CHECKBOX = 10; -const int SPACE_EXTRA_BOTTOM = 4; - -TCHAR * const szNeverAgain = TEXT( "Do not show again" ); -TCHAR * const szRememberChoice = TEXT( "Remember my choice" ); - -DWORD dwTlsSlot = TLS_OUT_OF_INDEXES; - -#ifdef EMA_AUTOINIT -int bEmaInitDone = 0; -#endif - - - -struct StructEmaBoxData -{ - int * bCheckState; - HHOOK hCBT; /* CBT hook handle */ - WNDPROC WndprocMsgBoxBackup; /* Old wndproc */ - UINT uType; /* Message box type */ - HWND hCheck; /* Checkbox handle */ -}; - -typedef struct StructEmaBoxData EmaBoxData; - - - -void RectScreenToClient( const HWND h, RECT * const r ) -{ - POINT p; - RECT after; - - p.x = r->left; - p.y = r->top; - ScreenToClient( h, &p ); - - after.left = p.x; - after.right = p.x + r->right - r->left; - after.top = p.y; - after.bottom = p.y + r->bottom - r->top; - - memcpy( r, &after, sizeof( RECT ) ); -} - - - -LRESULT CALLBACK WndprocMsgBox( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - /* Find data */ - EmaBoxData * const data = ( EmaBoxData * )TlsGetValue( dwTlsSlot ); - - switch( message ) - { - case WM_COMMAND: - if( HIWORD( wp ) == BN_CLICKED ) - { - if( !data->hCheck || ( ( HWND )lp != data->hCheck ) ) break; - - { - const LRESULT res = SendMessage( ( HWND )lp, BM_GETSTATE, 0, 0 ); - const int bCheckedAfter = ( ( res & BST_CHECKED ) == 0 ); - - /* Update external variable */ - *( data->bCheckState ) = bCheckedAfter ? 1 : 0; - - SendMessage( ( HWND )lp, BM_SETCHECK, ( bCheckedAfter ) ? BST_CHECKED : 0, 0 ); - } - } - break; - - case WM_INITDIALOG: - { - /* Add checkbox */ - if( ( data->uType & MB_CHECKMASC ) != 0 ) - { - int SPACE_OVER_CHECKBOX; - HDC hdc; - RECT rw; /* Window rect */ - RECT rc; /* Client rect */ - HWND hText; /* Message handle */ - RECT rt; /* Message rect */ - int iLabelHeight; - TCHAR * szCheckboxLabel; /* Checkbox label */ - - int iWindowWidthBefore; - int iWindowHeightBefore; - int iClientWidthBefore; - int iClientHeightBefore; - int iNeverAgainWidth; - int iNeverAgainHeight; - - - - /* Get original window dimensions */ - GetWindowRect( hwnd, &rw ); - iWindowWidthBefore = rw.right - rw.left; - iWindowHeightBefore = rw.bottom - rw.top; - - GetClientRect( hwnd, &rc ); - iClientWidthBefore = rc.right - rc.left; - iClientHeightBefore = rc.bottom - rc.top; - - - - { - /* Find handle of the text label */ - HWND hFirstStatic; - HWND hSecondStatic; - - hFirstStatic = FindWindowEx( hwnd, NULL, TEXT( "STATIC" ), NULL ); - if( !hFirstStatic ) break; - - hSecondStatic = FindWindowEx( hwnd, hFirstStatic, TEXT( "STATIC" ), NULL ); - if( !hSecondStatic ) - { - /* Only one static means no icon. */ - /* So hFirstStatic must be the text window. */ - hText = hFirstStatic; - } - else - { - TCHAR szBuf[ 2 ] = TEXT( "" ); - if( !GetWindowText( hSecondStatic, szBuf, 2 ) ) break; - - if( *szBuf != TEXT( '\0' ) ) - { - /* Has text so it must be the label */ - hText = hSecondStatic; - } - else - { - hText = hFirstStatic; - } - } - } - - GetWindowRect( hText, &rt ); - RectScreenToClient( hwnd, &rt ); - - iLabelHeight = rt.bottom - rt.top; - - { - /* Get distance between label and the buttons */ - HWND hAnyButton; - RECT rab; - - hAnyButton = FindWindowEx( hwnd, NULL, TEXT( "BUTTON" ), NULL ); - if( !hAnyButton ) break; - - GetWindowRect( hAnyButton, &rab ); - RectScreenToClient( hwnd, &rab ); - - SPACE_OVER_CHECKBOX = rab.top - rt.bottom; - } - - szCheckboxLabel = ( data->uType & MB_CHECKNEVERAGAIN ) - ? EMA_TEXT_NEVER_AGAIN - : EMA_TEXT_REMEMBER_CHOICE; - - /* Add checkbox */ - data->hCheck = CreateWindow( - TEXT( "BUTTON" ), - szCheckboxLabel, - WS_CHILD | - WS_VISIBLE | - WS_TABSTOP | - BS_VCENTER | - BS_CHECKBOX, - CW_USEDEFAULT, - CW_USEDEFAULT, - CW_USEDEFAULT, - CW_USEDEFAULT, - hwnd, - NULL, - GetModuleHandle( NULL ), - NULL - ); - - - /* Set initial check state */ - SendMessage( data->hCheck, BM_SETCHECK, *( data->bCheckState ) ? BST_CHECKED : 0, 0 ); - - { - /* Apply default font */ - const int cyMenuSize = GetSystemMetrics( SM_CYMENUSIZE ); - const int cxMenuSize = GetSystemMetrics( SM_CXMENUSIZE ); - const HFONT hNewFont = ( HFONT )GetStockObject( DEFAULT_GUI_FONT ); - HFONT hOldFont; - SIZE size; - - SendMessage( data->hCheck, WM_SETFONT, ( WPARAM )hNewFont, ( LPARAM )TRUE ); - - hdc = GetDC( data->hCheck ); - hOldFont = ( HFONT )SelectObject( hdc, GetStockObject( DEFAULT_GUI_FONT ) ); - GetTextExtentPoint32( hdc, szCheckboxLabel, _tcslen( szCheckboxLabel ), &size ); - SelectObject( hdc, hOldFont ); - ReleaseDC( data->hCheck, hdc ); - - iNeverAgainWidth = cxMenuSize + size.cx + 1; - iNeverAgainHeight = ( cyMenuSize > size.cy ) ? cyMenuSize : size.cy; - } - - MoveWindow( - data->hCheck, - ( iClientWidthBefore - ( iNeverAgainWidth ) ) / 2, - rt.top + iLabelHeight + SPACE_OVER_CHECKBOX, - iNeverAgainWidth, - iNeverAgainHeight, - FALSE - ); - - { - /* Move all buttons down (except the checkbox) */ - const int iDistance = iNeverAgainHeight + SPACE_UNDER_CHECKBOX; - HWND hLastButton = NULL; - RECT rb; - for( ; ; ) - { - hLastButton = FindWindowEx( hwnd, hLastButton, TEXT( "BUTTON" ), NULL ); - if( !hLastButton ) break; - if( hLastButton == data->hCheck ) continue; - - GetWindowRect( hLastButton, &rb ); - RectScreenToClient( hwnd, &rb ); - - MoveWindow( hLastButton, rb.left, rb.top + iDistance, rb.right - rb.left, rb.bottom - rb.top, FALSE ); - } - - - /* Enlarge dialog */ - MoveWindow( hwnd, rw.left, rw.top, iWindowWidthBefore, iWindowHeightBefore + iDistance + SPACE_EXTRA_BOTTOM, FALSE ); - } - } - else - { - data->hCheck = NULL; - } - - /* Modify close button */ - switch( data->uType & MB_CLOSEMASK ) - { - case MB_DISABLECLOSE: - { - const HMENU hSysMenu = GetSystemMenu( hwnd, FALSE ); - EnableMenuItem( hSysMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED ); - } - break; - - case MB_NOCLOSE: - { - const LONG style = GetWindowLong( hwnd, GWL_STYLE ); - if( ( style & WS_SYSMENU ) == 0 ) break; - SetWindowLong( hwnd, GWL_STYLE, ( LONG )( style - WS_SYSMENU ) ); - } - break; - - } - } - break; - - } - return CallWindowProc( data->WndprocMsgBoxBackup, hwnd, message, wp, lp ); -} - - - -/* int bFound = 0; */ - -LRESULT CALLBACK HookprocMsgBox( int code, WPARAM wp, LPARAM lp ) -{ - /* Get hook handle */ - EmaBoxData * const data = ( EmaBoxData * )TlsGetValue( dwTlsSlot ); - - if( code == HCBT_CREATEWND ) - { - /* MSDN says WE CANNOT TRUST "CBT_CREATEWND" */ - /* so we use only the window handle */ - /* and get the class name using "GetClassName". (-> Q106079) */ - HWND hwnd = ( HWND )wp; - - /* Check windowclass */ - TCHAR szClass[ 7 ] = TEXT( "" ); - GetClassName( hwnd, szClass, 7 ); - if( !_tcscmp( szClass, TEXT( "#32770" ) ) ) - { -/* - if( bFound ) - { - return CallNextHookEx( hCBT, code, wp, lp ); - } - - bFound = 1; -*/ - /* Exchange window procedure */ - data->WndprocMsgBoxBackup = ( WNDPROC )GetWindowLong( hwnd, GWL_WNDPROC ); - if( data->WndprocMsgBoxBackup != NULL ) - { - SetWindowLong( hwnd, GWL_WNDPROC, ( LONG )WndprocMsgBox ); - } - } - } - return CallNextHookEx( data->hCBT, code, wp, lp ); -} - - - -int ExtraAllTheSame( const HWND hWnd, const LPCTSTR lpText, const LPCTSTR lpCaption, const UINT uType, const WORD wLanguageId, const LPMSGBOXPARAMS lpMsgBoxParams, int * const pbCheckRes, const int iFunction ) -{ - EmaBoxData * data; - HHOOK hCBT; - int res; - -#ifdef EMA_AUTOINIT - if( !bEmaInitDone ) - { - EmaBoxLive(); - bEmaInitDone = 1; - } -#endif - - /* Create thread data */ - data = ( EmaBoxData * )LocalAlloc( NONZEROLPTR, sizeof( EmaBoxData ) ); - TlsSetValue( dwTlsSlot, data ); - data->bCheckState = pbCheckRes; - data->uType = ( iFunction != FUNCTION_INDIRECT ) ? uType : lpMsgBoxParams->dwStyle; - - /* Setup this-thread-only hook */ - hCBT = SetWindowsHookEx( WH_CBT, &HookprocMsgBox, GetModuleHandle( NULL ), GetCurrentThreadId() ); - - switch( iFunction ) - { - case FUNCTION_NORMAL: - res = MessageBox( hWnd, lpText, lpCaption, uType ); - break; - - case FUNCTION_EXTENDED: - res = MessageBoxEx( hWnd, lpText, lpCaption, uType, wLanguageId ); - break; - - case FUNCTION_INDIRECT: - res = MessageBoxIndirect( lpMsgBoxParams ); - break; - - } - - /* Remove hook */ - if( hCBT != NULL ) UnhookWindowsHookEx( hCBT ); - - /* Destroy thread data */ - LocalFree( ( HLOCAL )data ); - - return res; -} - - - -int EmaBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType, int * pbCheckRes ) -{ - /* Check extra flags */ - if( ( uType & MB_EXTRAMASC ) == 0 ) - { - /* No extra */ - return MessageBox( hWnd, lpText, lpCaption, uType ); - } - - return ExtraAllTheSame( hWnd, lpText, lpCaption, uType, 0, NULL, pbCheckRes, FUNCTION_NORMAL ); -} - - - -int EmaBoxEx( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType, WORD wLanguageId, int * pbCheckRes ) -{ - /* Check extra flags */ - if( ( uType & MB_EXTRAMASC ) == 0 ) - { - /* No extra */ - return MessageBoxEx( hWnd, lpText, lpCaption, uType, wLanguageId ); - } - - return ExtraAllTheSame( hWnd, lpText, lpCaption, uType, wLanguageId, NULL, pbCheckRes, FUNCTION_EXTENDED ); -} - - - -int EmaBoxIndirect( const LPMSGBOXPARAMS lpMsgBoxParams, int * pbCheckRes ) -{ - /* Check extra flags */ - if( ( lpMsgBoxParams->dwStyle & MB_EXTRAMASC ) == 0 ) - { - /* No extra */ - return MessageBoxIndirect( lpMsgBoxParams ); - } - - return ExtraAllTheSame( NULL, NULL, NULL, 0, 0, lpMsgBoxParams, pbCheckRes, FUNCTION_INDIRECT ); -} - - - -int EmaBoxLive() -{ - dwTlsSlot = TlsAlloc(); - if( dwTlsSlot == TLS_OUT_OF_INDEXES ) return 0; - - return 1; -} - - - -int EmaBoxDie() -{ - if( dwTlsSlot == TLS_OUT_OF_INDEXES ) return 0; - - TlsFree( dwTlsSlot ); - return 1; -} diff --git a/Externals/MusicMod/Player/Src/Emabox/Emabox.h b/Externals/MusicMod/Player/Src/Emabox/Emabox.h deleted file mode 100644 index 873ec62f0c..0000000000 --- a/Externals/MusicMod/Player/Src/Emabox/Emabox.h +++ /dev/null @@ -1,141 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////// -// ExtraMessageBox -// -// Copyright İ 2006 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////*/ - - -#ifndef EXTRA_MESSAGE_BOX_H -#define EXTRA_MESSAGE_BOX_H 1 - -#include "EmaboxConfig.h" -#include -#include - -// ======================================================================================= -// Global declarations -#include "../Global.h" -// ======================================================================================= - -/* -== TYPE ============================================================================= -#define MB_TYPEMASK 15 1111 -#define MB_OK 0 0000 -#define MB_OKCANCEL 1 0001 -#define MB_ABORTRETRYIGNORE 2 0010 -#define MB_YESNOCANCEL 3 0011 -#define MB_YESNO 4 0100 -#define MB_RETRYCANCEL 5 0101 -#define MB_CANCELTRYCONTINUE 6 0110 -*/ - -#define MB_YESNOCANCELALL 7 /* 0111 */ -#define MB_YESNOALL 8 /* 1000 */ - -/* -== ICON ============================================================================= -#define MB_ICONMASK 240 11110000 -#define MB_ICONERROR 16 00010000 -#define MB_ICONHAND 16 00010000 -#define MB_ICONSTOP 16 00010000 -#define MB_ICONQUESTION 32 00100000 -#define MB_ICONEXCLAMATION 0x30 00110000 -#define MB_ICONWARNING 0x30 00110000 -#define MB_ICONINFORMATION 64 01000000 -#define MB_ICONASTERISK 64 01000000 -#define MB_USERICON 128 10000000 - -== DEFAULT BUTTON =================================================================== -#define MB_DEFMASK 3840 111100000000 -#define MB_DEFBUTTON1 0 000000000000 -#define MB_DEFBUTTON2 256 000100000000 -#define MB_DEFBUTTON3 512 001000000000 -#define MB_DEFBUTTON4 0x300 001100000000 -*/ - -#define MB_DEFBUTTON5 1024 /* 010000000000 */ -#define MB_DEFBUTTON6 1280 /* 010100000000 */ - -/* -== MODE ============================================================================= -#define MB_MODEMASK 0x00003000 11000000000000 -#define MB_APPLMODAL 0 00000000000000 -#define MB_SYSTEMMODAL 4096 01000000000000 -#define MB_TASKMODAL 0x2000 10000000000000 - -== MISC ============================================================================= -#define MB_MISCMASK 0x0000C000 1100000000000000 -#define MB_HELP 0x4000 0100000000000000 -#define MB_NOFOCUS 0x00008000 1000000000000000 - -== FLAGS ============================================================================ -#define MB_SETFOREGROUND 0x10000 10000000000000000 -#define MB_DEFAULT_DESKTOP_ONLY 0x20000 100000000000000000 -#define MB_TOPMOST 0x40000 1000000000000000000 -#define MB_SERVICE_NOTIFICATION_NT3X 0x00040000 1000000000000000000 -#define MB_SERVICE_NOTIFICATION 0x00040000 1000000000000000000 -#define MB_TOPMOST 0x40000 1000000000000000000 -#define MB_RIGHT 0x80000 10000000000000000000 -#define MB_RTLREADING 0x100000 100000000000000000000 -#define MB_SERVICE_NOTIFICATION 0x00200000 1000000000000000000000 - -== EXTRA FLAGS ====================================================================== -*/ - -#define MB_EXTRAMASC 0xF0000000 /* 11110000000000000000000000000000 */ - -#define MB_CHECKMASC 0xC0000000 /* 11000000000000000000000000000000 */ -#define MB_CHECKNONE 0 /* 00000000000000000000000000000000 */ -#define MB_CHECKNEVERAGAIN 0x40000000 /* 01000000000000000000000000000000 */ -#define MB_CHECKREMEMBERCHOICE 0x80000000 /* 10000000000000000000000000000000 */ - -#define MB_CLOSEMASK 0x30000000 /* 00110000000000000000000000000000 */ -#define MB_NORMALCLOSE 0 /* 00000000000000000000000000000000 */ -#define MB_DISABLECLOSE 0x10000000 /* 00010000000000000000000000000000 */ -#define MB_NOCLOSE 0x20000000 /* 00100000000000000000000000000000 */ - - - -/* Function aliases */ -#define ExtraMessageBoxLive EmaBoxLive -#define ExtraMessageBoxDie EmaBoxDie -#define ExtraMessageBox EmaBox -#define ExtraMessageBoxEx EmaBoxEx -#define ExtraMessageBoxIndirect EmaBoxIndirect - - - -int EmaBoxLive(); - -int EmaBoxDie(); - -int EmaBox( - HWND hWnd, - LPCTSTR lpText, - LPCTSTR lpCaption, - UINT uType, - int * pbCheckRes -); - -int EmaBoxEx( - HWND hWnd, - LPCTSTR lpText, - LPCTSTR lpCaption, - UINT uType, - WORD wLanguageId, - int * pbCheckRes -); - -int EmaBoxIndirect( - const LPMSGBOXPARAMS lpMsgBoxParams, - int * pbCheckRes -); - - - -#endif /* EXTRA_MESSAGE_BOX_H */ diff --git a/Externals/MusicMod/Player/Src/Emabox/EmaboxConfig.h b/Externals/MusicMod/Player/Src/Emabox/EmaboxConfig.h deleted file mode 100644 index c7730335cd..0000000000 --- a/Externals/MusicMod/Player/Src/Emabox/EmaboxConfig.h +++ /dev/null @@ -1,32 +0,0 @@ -/*////////////////////////////////////////////////////////////////////////////// -// ExtraMessageBox -// -// Copyright İ 2006 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////*/ - - -#ifndef EXTRA_MESSAGE_BOX_CONFIG_H -#define EXTRA_MESSAGE_BOX_CONFIG_H 1 - - - -/* Allow laziness */ -#define EMA_AUTOINIT - -/* Allow overwriting message text */ -#ifndef EMA_TEXT_NEVER_AGAIN -# define EMA_TEXT_NEVER_AGAIN szNeverAgain -#endif - -#ifndef EMA_TEXT_REMEMBER_CHOICE -# define EMA_TEXT_REMEMBER_CHOICE szRememberChoice -#endif - - - -#endif /* EXTRA_MESSAGE_BOX_CONFIG_H */ diff --git a/Externals/MusicMod/Player/Src/Embed.cpp b/Externals/MusicMod/Player/Src/Embed.cpp deleted file mode 100644 index fdfb456e2e..0000000000 --- a/Externals/MusicMod/Player/Src/Embed.cpp +++ /dev/null @@ -1,233 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Embed.h" -#include "Console.h" - - - -#define CLASSNAME_EMBED TEXT( "Winamp Gen" ) -#define TITLE_EMBED TEXT( "Embed target" ) - -#define EMBED_WIDTH 320 -#define EMBED_HEIGHT 240 - - - -const TCHAR * const szEmbedTitle = TITLE_EMBED; -bool bEmbedClassRegistered = false; - - -LRESULT CALLBACK WndprocEmbed( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - -//////////////////////////////////////////////////////////////////////////////// -/// Creates a new embed window. -/// -/// @param ews Embed window state -/// @return New embed window handle -//////////////////////////////////////////////////////////////////////////////// -HWND Embed::Embed( embedWindowState * ews ) -{ - // Register class - if ( !bEmbedClassRegistered ) - { - WNDCLASS wc = { - 0, // UINT style - WndprocEmbed, // WNDPROC lpfnWndProc - 0, // int cbClsExtra - 0, // int cbWndExtra - g_hInstance, // HINSTANCE hInstance - NULL, // HICON hIcon - LoadCursor( NULL, IDC_ARROW ), // HCURSOR hCursor - ( HBRUSH )COLOR_WINDOW, // HBRUSH hbrBackground - NULL, // LPCTSTR lpszMenuName - CLASSNAME_EMBED // LPCTSTR lpszClassName - }; - - if( !RegisterClass( &wc ) ) return NULL; - - bEmbedClassRegistered = true; - } - - // Create window - HWND WindowEmbed = CreateWindowEx( - WS_EX_WINDOWEDGE | // DWORD dwExStyle - WS_EX_TOOLWINDOW, // - CLASSNAME_EMBED, // LPCTSTR lpClassName - szEmbedTitle, // LPCTSTR lpWindowName - WS_OVERLAPPED | // DWORD dwStyle - WS_CLIPCHILDREN | // - WS_BORDER | // - WS_CAPTION | // - WS_SYSMENU | // - WS_THICKFRAME | // - WS_MINIMIZEBOX | // - WS_MAXIMIZEBOX, // - 10, // int x - 10, // int y - EMBED_WIDTH, // int nWidth - EMBED_HEIGHT, // int nHeight - NULL, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - Console::Append( TEXT( "Embed window born" ) ); - Console::Append( TEXT( " " ) ); - - if( !ews || !ews->me ) return WindowEmbed; - - SetParent( ews->me, WindowEmbed ); - - return WindowEmbed; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -inline bool SameThread( HWND hOther ) -{ - const DWORD dwOtherThreadId = GetWindowThreadProcessId( hOther, NULL ); - const DWORD dwThisThreadId = GetCurrentThreadId(); - return ( dwOtherThreadId == dwThisThreadId ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocEmbed( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ -// static bool bAllowSizeMove = false; - - switch( message ) - { - - case WM_PARENTNOTIFY: - switch( LOWORD( wp ) ) - { - case WM_DESTROY: - { - const HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( !SameThread( hChild ) ) - { - // Vis plugin - DestroyWindow( hwnd ); - } - break; - } - - } - break; - - case WM_SIZE: - { - const HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( !hChild ) break; - MoveWindow( hChild, 0, 0, LOWORD( lp ), HIWORD( lp ), TRUE ); - break; - } - -/* - case WM_ENTERSIZEMOVE: - bAllowSizeMove = true; - break; - - case WM_EXITSIZEMOVE: - bAllowSizeMove = false; - break; - - case WM_WINDOWPOSCHANGING: - { - WINDOWPOS * pos = ( WINDOWPOS * )lp; - - // Update child - if( IsWindow( WindowEmbedChild = GetWindow( WindowEmbed, GW_CHILD ) ) ) - { - RECT r; - GetClientRect( WindowEmbed, &r ); - MoveWindow( WindowEmbedChild, 0, 0, r.right, r.bottom, TRUE ); - } - - if( !bAllowSizeMove ) - { - // Force SWP_NOMOVE - if( ( pos->flags & SWP_NOMOVE ) == 0 ) - { - pos->flags |= SWP_NOMOVE; - } - - // Force SWP_NOSIZE - if( ( pos->flags & SWP_NOSIZE ) == 0 ) - { - pos->flags |= SWP_NOSIZE; - } - - return 0; - } - - break; - } -*/ - case WM_SHOWWINDOW: - { - const HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( wp ) // Shown - { - // Update child size - RECT r; - GetClientRect( hwnd, &r ); - MoveWindow( hChild, 0, 0, r.right, r.bottom, TRUE ); - } - else // Hidden - { - ShowWindow( hChild, SW_HIDE ); - DestroyWindow( hChild ); - } - break; - } - - case WM_SYSCOMMAND: - if( ( wp & 0xFFF0 ) == SC_CLOSE ) - { - const HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( SameThread( hChild ) ) - { - // Not a vis plugin - ShowWindow( hwnd, SW_HIDE ); - return 0; - } - } - break; - - case WM_DESTROY: - { - const HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( hChild && SameThread( hChild ) ) - { - DestroyWindow( hChild ); - } - - Console::Append( TEXT( "Embed window dead" ) ); - Console::Append( TEXT( " " ) ); - break; - } - - } - return DefWindowProc( hwnd, message, wp, lp ); -} diff --git a/Externals/MusicMod/Player/Src/Embed.h b/Externals/MusicMod/Player/Src/Embed.h deleted file mode 100644 index fc1a7d8611..0000000000 --- a/Externals/MusicMod/Player/Src/Embed.h +++ /dev/null @@ -1,36 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_EMBED_H -#define PA_EMBED_H - - - -#include "Global.h" -#include "Winamp/wa_ipc.h" - - - -//////////////////////////////////////////////////////////////////////////////// -/// Embed window service. -/// Winamp provides embed windows so plugins don't have to take care -/// of window skinning. A plugin let's Winamp create an embed window -/// and uses this new window as parent for its own window. -//////////////////////////////////////////////////////////////////////////////// -namespace Embed -{ - HWND Embed( embedWindowState * ews ); -}; - - - -#endif // PA_EMBED_H diff --git a/Externals/MusicMod/Player/Src/Font.cpp b/Externals/MusicMod/Player/Src/Font.cpp deleted file mode 100644 index a47b217bb9..0000000000 --- a/Externals/MusicMod/Player/Src/Font.cpp +++ /dev/null @@ -1,83 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Font.h" - - - -HFONT hFont = NULL; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Font::Create() -{ - hFont = CreateFont( - -11, // int nHeight - 0, // int nWidth - 0, // int nEscapement - 0, // int nOrientation - FW_REGULAR, // int fnWeight - FALSE, // DWORD fdwItalic - FALSE, // DWORD fdwUnderline - FALSE, // DWORD fdwStrikeOut - ANSI_CHARSET, // DWORD fdwCharSet - OUT_TT_PRECIS, // DWORD fdwOutputPrecision - CLIP_DEFAULT_PRECIS, // DWORD fdwClipPrecision - ANTIALIASED_QUALITY, // DWORD fdwQuality - FF_DONTCARE | DEFAULT_PITCH, // DWORD fdwPitchAndFamily - TEXT( "Verdana" ) // LPCTSTR lpszFace - ); - - return ( hFont != NULL ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Font::Destroy() -{ - if( !hFont ) return false; - DeleteObject( hFont ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Font::Apply( HWND hwnd ) -{ - if( !hFont ) return false; - SendMessage( - hwnd, - WM_SETFONT, - ( WPARAM )hFont, - FALSE - ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -HFONT Font::Get() -{ - return hFont; -} diff --git a/Externals/MusicMod/Player/Src/Font.h b/Externals/MusicMod/Player/Src/Font.h deleted file mode 100644 index d32bec237e..0000000000 --- a/Externals/MusicMod/Player/Src/Font.h +++ /dev/null @@ -1,34 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_FONT_H -#define PA_FONT_H - - - -#include "Global.h" - - - -namespace Font -{ - bool Create(); - bool Destroy(); - - bool Apply( HWND hwnd ); - HFONT Get(); -}; - - - -#endif // PA_FONT_H - diff --git a/Externals/MusicMod/Player/Src/GenPlugin.cpp b/Externals/MusicMod/Player/Src/GenPlugin.cpp deleted file mode 100644 index 9404237340..0000000000 --- a/Externals/MusicMod/Player/Src/GenPlugin.cpp +++ /dev/null @@ -1,199 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "GenPlugin.h" -#include "Main.h" -#include "Unicode.h" -#include "Console.h" -#include - - - -vector gen_plugins; // extern - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -GenPlugin::GenPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllpath ) -{ - iHookerIndex = -1; - plugin = NULL; - - if( !Load() ) - { - return; - } - - gen_plugins.push_back( this ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool GenPlugin::Load() -{ - if( IsLoaded() ) return true; - - // (1) Load DLL - hDLL = LoadLibrary( GetFullpath() ); - if( !hDLL ) return false; - - // (2) Find export - WINAMP_GEN_GETTER winampGetGeneralPurposePlugin = - ( WINAMP_GEN_GETTER )GetProcAddress( hDLL, "winampGetGeneralPurposePlugin" ); - if( winampGetGeneralPurposePlugin == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (3) Get module - plugin = winampGetGeneralPurposePlugin(); - if( !plugin ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (4) Process module - plugin->hDllInstance = hDLL; - plugin->hwndParent = WindowMain; - - // Note: Some plugins (mainly old ones) set description in init. - // Therefore we init first and copy the name after. - - - // (5) Init - if( plugin->init ) - { - const WNDPROC WndprocBefore = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC ); - plugin->init(); - const WNDPROC WndprocAfter = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC ); - - if( WndprocBefore != WndprocAfter ) - { - WndprocBackup = WndprocBefore; - iHookerIndex = iWndprocHookCounter++; - } - } - - - if( !szName ) - { - // Note: The prefix is not removed to hide their - // origin at Nullsoft! It just reads easier. - if( !_strnicmp( plugin->description, "nullsoft ", 9 ) ) - { - plugin->description += 9; - } - - // Get rid of " (xxx.dll)" postfix - char * walk = plugin->description + strlen( plugin->description ) - 5; - while( true ) - { - if( ( walk <= plugin->description ) || _strnicmp( walk, ".dll)", 5 ) ) break; - while( ( walk > plugin->description ) && ( *walk != '(' ) ) walk--; - if( walk <= plugin->description ) break; - walk--; - if( ( walk <= plugin->description ) || ( *walk != ' ' ) ) break; - *walk = '\0'; - } - - iNameLen = ( int )strlen( plugin->description ); - szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( szName, plugin->description, iNameLen ); - szName[ iNameLen ] = TEXT( '\0' ); - } - - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - - - // Note: Plugins that use a wndproc hook need - // to be unloaded in the inverse loading order. - // This is due to the nature of wndproc hooking. - if( iHookerIndex != -1 ) - { - Console::Append( TEXT( "Wndproc hook added (by plugin)" ) ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool GenPlugin::Unload() -{ - if( !IsLoaded() ) return true; - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - printf( ">>>Unloading <%s>\n" , GetFilename() ); - - - // Quit - if( plugin ) - { - if( plugin->quit ) plugin->quit(); - plugin = NULL; - } - - - // Remove wndproc hook - if( ( iHookerIndex != -1 ) && ( iHookerIndex == iWndprocHookCounter - 1 ) ) - { - // If we don't restore it the plugins wndproc will - // still be called which is not there anymore -> crash - SetWindowLong( WindowMain, GWL_WNDPROC, ( LONG )WndprocBackup ); - Console::Append( TEXT( "Wndproc hook removed (by host)" ) ); - Console::Append( TEXT( " " ) ); - - iHookerIndex = -1; - iWndprocHookCounter--; - } - - - FreeLibrary( hDLL ); - hDLL = NULL; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool GenPlugin::Config() -{ - if( !IsLoaded() ) return false; - if( !plugin ) return false; - if( !plugin->config ) return false; - - plugin->config(); - - return true; -} diff --git a/Externals/MusicMod/Player/Src/GenPlugin.h b/Externals/MusicMod/Player/Src/GenPlugin.h deleted file mode 100644 index b32f49536a..0000000000 --- a/Externals/MusicMod/Player/Src/GenPlugin.h +++ /dev/null @@ -1,64 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_GEN_PLUGIN_H -#define PA_GEN_PLUGIN_H - - - -#include "Global.h" -#include "Plugin.h" -#include "Winamp/Gen.h" -#include - -using namespace std; - - - -typedef winampGeneralPurposePlugin * ( * WINAMP_GEN_GETTER )( void ); - - - -class GenPlugin; - -extern vector gen_plugins; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp general purpose plugin wrapper -//////////////////////////////////////////////////////////////////////////////// -class GenPlugin : public Plugin -{ -public: - GenPlugin( TCHAR * szDllpath, bool bKeepLoaded ); - - bool Load(); - bool Unload(); - - TCHAR * GetTypeString() { return TEXT( "General" ); } - int GetTypeStringLen() { return 7; } - PluginType GetType() { return PLUGIN_TYPE_GEN; } - - inline bool IsActive() { return IsLoaded(); } - - bool Config(); - - inline bool AllowRuntimeUnload() { return ( iHookerIndex == -1 ) || ( iHookerIndex == iWndprocHookCounter - 1 ); } - -private: - winampGeneralPurposePlugin * plugin; -}; - - - -#endif // PA_GEN_PLUGIN_H diff --git a/Externals/MusicMod/Player/Src/Global.h b/Externals/MusicMod/Player/Src/Global.h deleted file mode 100644 index 684774048d..0000000000 --- a/Externals/MusicMod/Player/Src/Global.h +++ /dev/null @@ -1,151 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Settings -// ŻŻŻŻŻŻŻŻŻŻ -/* This will build Plainamp without the GUI. Todo: Fix this, I disabled a little to much - to make the regular GUI version build */ -#define NOGUI -//////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻ -#include "../../../../Source/Core/Common/Src/Log.h" // Global common -///////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻ - -// ======================================================================================= -// Because there are undefined in 64 bit it's easy to redefine them in case we use 64 bit -// --------------------- -#ifdef _M_X64 - #define GWL_WNDPROC (-4) - #define GetWindowLong GetWindowLongPtrA // or GetWindowLongPtr -#endif -// ======================================================================================= - -//////////////////////////////////// - - -// ======================================================================================= -// Back to Plainamp code -// --------------------- -#ifndef PA_GLOBAL_H -#define PA_GLOBAL_H - - -// #include "ide_devcpp/Plainamp_Private.h" - - -#ifdef UNICODE -# define PA_UNICODE -#else -# ifdef _UNICODE -# define PA_UNICODE -# endif -#endif - - -// For GetLongPathName -#if _WIN32_WINDOWS < 0x0410 -# undef _WIN32_WINDOWS -# define _WIN32_WINDOWS 0x0410 -#endif - - -#define WIN32_LEAN_AND_MEAN - -/* -#ifndef WINVER -# define WINVER 0x0500 -#else -# if (WINVER < 0x0500) -# undef WINVER -# define WINVER 0x0500 -# endif -#endif -*/ - -#include -#include -#include - - - -#ifndef _WIN32_IE -# define _WIN32_IE 0x0400 -#else -# if (_WIN32_IE < 0x0400) -# undef _WIN32_IE -# define _WIN32_IE 0x0400 -# endif -#endif - -#include - - - - - -extern HINSTANCE g_hInstance; - -extern TCHAR * szHomeDir; -extern int iHomeDirLen; - -extern TCHAR * szPluginDir; -extern int iPluginDirLen; - - - -/* -inline int abs( int x ) -{ - return ( x < 0 ) ? -x : x; -} -*/ - -inline int MIN( int a, int b ) -{ - return ( a < b ) ? a : b; -} - -inline int MAX( int a, int b ) -{ - return ( a > b ) ? a : b; -} - - - - -// Typo help -#define UNIT UINT -#define UINT_PRT UINT_PTR - - - -struct TextCompare -{ - bool operator()( const TCHAR * a, const TCHAR * b ) const - { - return _tcscmp( a, b ) < 0; - } -}; - - -#endif // PA_GLOBAL_H - diff --git a/Externals/MusicMod/Player/Src/GlobalVersion.h b/Externals/MusicMod/Player/Src/GlobalVersion.h deleted file mode 100644 index 9b38065f34..0000000000 --- a/Externals/MusicMod/Player/Src/GlobalVersion.h +++ /dev/null @@ -1,28 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_GLOBAL_VERSION_H -#define PA_GLOBAL_VERSION_H - - - -#define FILE_DESCRIPTION "Plainamp" -#define VER_STRING "0.2.3.1" - - -#define PLAINAMP_TITLE TEXT( FILE_DESCRIPTION ) -#define PLAINAMP_VERSION TEXT( VER_STRING ) -#define PLAINAMP_LONG_TITLE PLAINAMP_TITLE TEXT( " " ) PLAINAMP_VERSION - - - -#endif // PA_GLOBAL_VERSION_H diff --git a/Externals/MusicMod/Player/Src/Input.cpp b/Externals/MusicMod/Player/Src/Input.cpp deleted file mode 100644 index 9054b3d86f..0000000000 --- a/Externals/MusicMod/Player/Src/Input.cpp +++ /dev/null @@ -1,483 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Input.h" -#include "Console.h" -#include "Status.h" -#include "Playback.h" -#include "InputPlugin.h" -#include "VisPlugin.h" -#include "DspPlugin.h" -#include "VisCache.h" -#include "Output.h" - -/* -#define FIXED_POINT 16 -#include "kiss_fft/kiss_fftr.h" -*/ - -// ======================================================================================= -//#include "fftw3/fftw3.h" -// ======================================================================================= -#include - - -// #define SKIPPY -#ifndef SKIPPY -# define MAX_DATA_FPS ( 1000 / 12 ) // in_mp3 gives new vis data every 13 ms, so 12 leaves a little space -#else -# define MAX_DATA_FPS ( 1000 / 24 ) // will skip every second frame -#endif - - -#ifdef SKIPPY -bool bLastSkipped = true; -#endif - -int iSpecChannels = 2; -int iWaveChannels = 2; - - -/* -kiss_fft_cfg kiss = { 0 }; -bool bKissInitDone = false; -*/ - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int dsp_isactive() -{ -//////////////////////////////////////////////////////////////////////////////// - DspLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - int res = ( active_dsp_count > 0 ); - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - return res; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int dsp_dosamples( short int * samples, int numsamples, int bps, int nch, int srate ) -{ - int num = numsamples; - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - for( int i = 0; i < active_dsp_count; i++ ) - { - // Process - num = active_dsp_mods[ i ]->mod->ModifySamples( - active_dsp_mods[ i ]->mod, - samples, - numsamples, - bps, - nch, - srate - ); - } - -//////////////////////////////////////////////////////////////////////////////// - DspLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - return num; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void SAVSAInit( int maxlatency_in_ms, int srate ) -{ -//////////////////////////////////////////////////////////////////////////////// - VisCache::Create(); - VisCache::EnsureLatency( maxlatency_in_ms ); - VisCache::EnsureDataFps( MAX_DATA_FPS ); - VisCache::Clean(); -//////////////////////////////////////////////////////////////////////////////// -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void SAVSADeInit() -{ - // TODO - // Console::Append( TEXT( "SAVSADeInit" ) ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void SAAddPCMData( void * PCMData, int nch, int bps, int timestamp ) -{ - // TODO - // Console::Append( TEXT( "SAAddPCMData" ) ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int SAGetMode() -{ - // TODO - // Console::Append( TEXT( "SAGetMode" ) ); - return 0; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void SAAdd( void * data, int timestamp, int csa ) -{ - // TODO - // Console::Append( TEXT( "SAAdd" ) ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VSAAddPCMData( void * PCMData, int nch, int bps, int timestamp ) -{ - // TODO - // Console::Append( TEXT( "VSAAddPCMData" ) ); - - - #ifdef SKIPPY - if( bLastSkipped ) - bLastSkipped = false; - else - { - // Skip - bLastSkipped = true; - return; - } - #endif - - -//////////////////////////////////////////////////////////////////////////////// - bool bVisLockLeft = false; - VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - if( active_vis_count ) - { -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); - bVisLockLeft = true; -//////////////////////////////////////////////////////////////////////////////// - - VisCache::NextFrame(); - VisCache::SetWriteTime( timestamp ); - VisCache::SetReadTime( active_input_plugin->plugin->GetOutputTime() ); - - short * source = ( short * )PCMData; - - // Waveform - static unsigned char wave_left[ 576 ]; - static unsigned char wave_right[ 576 ]; - if( nch < 2 ) - { - // Mono - for( int i = 0; i < 576; i++ ) - { - wave_left[ i ] = ( source[ i ] >> 8 ); - } - - VisCache::PutWaveLeft( wave_left ); - } - else - { - int i; - - // Stereo or more - for( i = 0; i < 576; i++ ) - { - wave_left [ i ] = ( source[ i * nch ] >> 8 ); - wave_right[ i ] = ( source[ i * nch + 1 ] >> 8 ); - } - - VisCache::PutWaveLeft( wave_left ); - VisCache::PutWaveRight( wave_right ); - } - - - // TODO: Much to optimize! - - // ======================================================================================= - /* - // Spectrum - static unsigned char spec_left[ 576 ]; - static unsigned char spec_right[ 576 ]; - static fftw_complex * in = NULL; - static fftw_complex * out = NULL; - - if( !in ) - { - in = ( fftw_complex * )fftw_malloc( 576 * sizeof( fftw_complex ) ); - out = ( fftw_complex * )fftw_malloc( 576 * sizeof( fftw_complex ) ); - } - - static const double factor = 1.0 / 65536.0 / sqrt( 2.0 ); - - - // Put left - int index = 0; - for( int i = 0; i < 576; i++ ) - { - in[ i ][ 0 ] = source[ index += nch ]; - in[ i ][ 1 ] = 0.0; - } - - - // Init FFT - fftw_plan p = fftw_plan_dft_1d( 576, in, out, FFTW_FORWARD, FFTW_ESTIMATE ); - - - // Run left - fftw_execute( p ); - - // Get left - for( int i = 0; i < 576; i++ ) - { - if( i & 1 ) - { - spec_left [ i ] = spec_left [ i - 1 ]; - continue; - } - const double re = out[ i >> 1 ][ 0 ]; - const double im = out[ i >> 1 ][ 1 ]; - const double root = sqrt( re*re + im*im ); - const double final = 160.0 * log10( 1.0 + root * factor ); - spec_left[ i ] = ( final < 255.0 ) ? ( unsigned char )final : 255; - } - VisCache::PutSpecLeft( spec_left ); - - - if( nch > 1 ) - { - // Put right - index = 1; - for( int i = 0; i < 576; i++ ) - { - in[ i ][ 0 ] = source[ index += nch ]; - } - - // Run right - fftw_execute( p ); - - // Get right - for( int i = 0; i < 576; i++ ) - { - if( i & 1 ) - { - spec_right[ i ] = spec_right[ i - 1 ]; - continue; - } - const double re = out[ i >> 1 ][ 0 ]; - const double im = out[ i >> 1 ][ 1 ]; - const double root = sqrt( re*re + im*im ); - const double final = 160.0 * log10( 1.0 + root * factor ); - spec_right[ i ] = ( final < 255.0 ) ? ( unsigned char )final : 255; - } - VisCache::PutSpecRight( spec_right ); - } - // ======================================================================================= - */ - - // Cleanup FFT - // ======================================================================================= - //fftw_destroy_plan( p ); - // ======================================================================================= - - // fftw_free(in); - // fftw_free(out); - } - -//////////////////////////////////////////////////////////////////////////////// - if( bVisLockLeft ) VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - for( int i = 0; i < active_vis_count; i++ ) - { - active_vis_mods[ i ]->bAllowRender = true; - } - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int VSAGetMode( int * specNch, int * waveNch ) -{ - iSpecChannels = 0; - iWaveChannels = 0; - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - for( int i = 0; i < active_vis_count; i++ ) - { - const int iSpec = active_vis_mods[ i ]->mod->spectrumNch; - const int iWave = active_vis_mods[ i ]->mod->waveformNch; - - if( iSpec > iSpecChannels ) iSpecChannels = iSpec; - if( iWave > iWaveChannels ) iWaveChannels = iWave; - } - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - *specNch = iSpecChannels; - *waveNch = iWaveChannels; - - return 1; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VSAAdd( void * data, int timestamp ) -{ - #ifdef SKIPPY - if( bLastSkipped ) - bLastSkipped = false; - else - { - // Skip - bLastSkipped = true; - return; - } - #endif - - -//////////////////////////////////////////////////////////////////////////////// - bool bVisLockLeft = false; - VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - if( active_vis_count ) - { -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); - bVisLockLeft = true; -//////////////////////////////////////////////////////////////////////////////// - - VisCache::NextFrame(); - VisCache::SetWriteTime( timestamp ); - VisCache::SetReadTime( active_input_plugin->plugin->GetOutputTime() ); - - unsigned char * source = ( unsigned char * )data; - if( iSpecChannels > 0 ) - { - VisCache::PutSpecLeft( source ); - source += 576; - } - if( iSpecChannels > 1 ) - { - VisCache::PutSpecRight( source ); - source += 576; - } - if( iWaveChannels > 0 ) - { - VisCache::PutWaveLeft( source ); - source += 576; - } - if( iWaveChannels > 1 ) - { - VisCache::PutWaveRight( source ); - } - } - -//////////////////////////////////////////////////////////////////////////////// - if( bVisLockLeft ) VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - for( int i = 0; i < active_vis_count; i++ ) - { - active_vis_mods[ i ]->bAllowRender = true; - } - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VSASetInfo( int nch, int srate ) -{ - // TODO - -//////////////////////////////////////////////////////////////////////////////// - VisCache::Create(); - VisCache::EnsureDataFps( MAX_DATA_FPS ); - VisCache::Clean(); -//////////////////////////////////////////////////////////////////////////////// -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void SetInfo( int bitrate, int srate, int stereo, int synched ) -{ - // TODO - static int last_valid_srate = 0; - - if( bitrate < 0 ) return; - - if( srate < 0 ) - srate = last_valid_srate; - else - last_valid_srate = srate; - - TCHAR szBuffer[ 5000 ] = TEXT( "" ); - _stprintf( szBuffer, TEXT( " %i kbps, %i kHz" ), bitrate, srate ); - StatusUpdate( szBuffer ); -} diff --git a/Externals/MusicMod/Player/Src/Input.h b/Externals/MusicMod/Player/Src/Input.h deleted file mode 100644 index f139df901f..0000000000 --- a/Externals/MusicMod/Player/Src/Input.h +++ /dev/null @@ -1,28 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Global.h" - - - -int dsp_isactive(); -int dsp_dosamples( short int * samples, int numsamples, int bps, int nch, int srate ); -void SAVSAInit( int maxlatency_in_ms, int srate ); -void SAVSADeInit(); -void SAAddPCMData( void * PCMData, int nch, int bps, int timestamp ); -int SAGetMode(); -void SAAdd(void * data, int timestamp, int csa ); -void VSAAddPCMData( void * PCMData, int nch, int bps, int timestamp ); -int VSAGetMode( int * specNch, int * waveNch ); -void VSAAdd( void * data, int timestamp ); -void VSASetInfo( int nch, int srate ); -void SetInfo( int bitrate, int srate, int stereo, int synched ); diff --git a/Externals/MusicMod/Player/Src/InputPlugin.cpp b/Externals/MusicMod/Player/Src/InputPlugin.cpp deleted file mode 100644 index ac294749f6..0000000000 --- a/Externals/MusicMod/Player/Src/InputPlugin.cpp +++ /dev/null @@ -1,389 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - -// ======================================================================================= -#include "Global.h" -// ======================================================================================= - -#include "InputPlugin.h" -#include "Console.h" -#include "Main.h" -#include "Input.h" -#include "Unicode.h" - - - -map ext_map; // extern -vector input_plugins; // extern -InputPlugin * active_input_plugin = NULL; // extern - - - -// ======================================================================================= -// The InputPlugin class is inherited from the Plugin class -InputPlugin::InputPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllpath ) -{ - iHookerIndex = -1; - - szFilters = NULL; - iFiltersLen = 0; - plugin = NULL; - - //NOTICE_LOG(AUDIO,"\InputPlugin::InputPlugin > Begin\n"); - - if( !Load() ) - { - return; - } - - if( !bKeepLoaded ) - { - Unload(); - } - - input_plugins.push_back( this ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -InputPlugin::~InputPlugin() -{ - if( szFilters ) delete [] szFilters; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool InputPlugin::Load() -{ - printf("InputPlugin::Load() was called. IsLoaded: %i\n", IsLoaded()); - - if( IsLoaded() ) return true; - - - // (1) Load DLL - hDLL = LoadLibrary( GetFullpath() ); - if( !hDLL ) return false; - - // (2) Find export - WINAMP_INPUT_GETTER winampGetInModule2 = - ( WINAMP_INPUT_GETTER )GetProcAddress( hDLL, "winampGetInModule2" ); - if( winampGetInModule2 == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (3) Get module - plugin = winampGetInModule2(); - if( plugin == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (4) Process module - plugin->hDllInstance = hDLL; - plugin->hMainWindow = WindowMain; - - plugin->SAVSAInit = SAVSAInit; - plugin->SAVSADeInit = SAVSADeInit; - plugin->SAAddPCMData = SAAddPCMData; - plugin->SAGetMode = SAGetMode; - plugin->SAAdd = SAAdd; - plugin->VSAAddPCMData = VSAAddPCMData; - plugin->VSAGetMode = VSAGetMode; - plugin->VSAAdd = VSAAdd; - plugin->VSASetInfo = VSASetInfo; - - plugin->dsp_dosamples = dsp_dosamples; - plugin->dsp_isactive = dsp_isactive; - - plugin->SetInfo = SetInfo; - - - if( !szName ) - { - // Note: The prefix is not removed to hide their - // origin at Nullsoft! It just reads easier. - if( !_strnicmp( plugin->description, "nullsoft ", 9 ) ) - { - plugin->description += 9; - if( !_strnicmp( plugin->description, "mpeg(layer1-3/ct aac+/dolby aac) ", 33 ) ) - { - plugin->description += ( 33 - 5 ); - memcpy( plugin->description, "MPEG", 4 * sizeof( char ) ); - } - } - iNameLen = ( int )strlen( plugin->description ); - szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( szName, plugin->description, iNameLen ); - szName[ iNameLen ] = TEXT( '\0' ); - } - - - - // (5) Init - const WNDPROC WndprocBefore = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC ); - plugin->Init(); - const WNDPROC WndprocAfter = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC ); - - if( WndprocBefore != WndprocAfter ) - { - WndprocBackup = WndprocBefore; - iHookerIndex = iWndprocHookCounter++; - } - - -#ifdef NOGUI - printf( "Loading <%s>, %s\n" , GetFilename(), szName ); -#else - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName ); - Console::Append( szBuffer ); -#endif - - Integrate(); // This function is just below - - - // Note: Plugins that use a wndproc hook need - // to be unloaded in the inverse loading order. - // This is due to the nature of wndproc hooking. - if( iHookerIndex != -1 ) - { - Console::Append( TEXT( "Wndproc hook added (by plugin)" ) ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool InputPlugin::Integrate() -{ - if( !IsLoaded() ) return false; - - // (6) Build filter - - // (6a) First pass: get needed buffer length - int needed = 0; - int len = 0; - bool even = false; - char * walk = plugin->FileExtensions; - while( ( len = ( int )strlen( walk ) ) > 0 ) - { - len++; // For '\0' - if( even ) - { - // Extensions e.g. "mp3;mp2;mp1" - // Worst case "a;b;c" (5) --> "*.a;*.b;*.c" (11) - needed += ( 3 * len ); - } - else - { - // Filter name e.g. "MPEG audio files" - needed += len; - } - even = !even; - walk += len; - } - szFilters = new TCHAR[ needed + 1 ]; - TCHAR * walk_out = szFilters; - - // (6b) Once again with copy - walk = plugin->FileExtensions; - even = false; - while( true ) - { - // Check extensions - char * start_filter = walk; - const int len_filter = ( int )strlen( walk ); - if( len_filter == 0 ) - { - // End reached - break; - } - walk += len_filter + 1; - - // Check filter name - char * start_display = walk; - int len_display = ( int )strlen( walk ); - if( len_display == 0 ) - { - break; - } - walk += ++len_display; - - // Append filter name - ToTchar( walk_out, start_display, len_display ); - - // ======================================================================================= - // Print used filetypes - TCHAR szBuffer[ 5000 ]; - *(walk_out + len_display) = TEXT( '\0' ); - _stprintf( szBuffer, TEXT( " %s" ), walk_out ); - Console::Append( szBuffer ); - //printf( szBuffer, TEXT( " %s\n" ), walk_out ); - // ======================================================================================= - walk_out += len_display; - - // Convert and append extensions - char * walk_filter = start_filter; - char * last_filter = start_filter; - int len; - while( true ) - { - if( ( *walk_filter == ';' ) || ( *walk_filter == '\0' ) ) - { - len = ( walk_filter - last_filter ); - if( len < 1 ) - { - break; - } - - // Add extension to map - TCHAR * szExt = new TCHAR[ len + 1 ]; - ToTchar( szExt, last_filter, len ); - szExt[ len ] = TEXT( '\0' ); - _tcslwr( szExt ); - - ext_map.insert( pair( szExt, this ) ); - - // Append extension as "*.ext[;\0]" - len++; // Also copy ';' and '\0' - memcpy( walk_out, TEXT( "*." ), 2 * sizeof( TCHAR ) ); - walk_out += 2; - ToTchar( walk_out, last_filter, len ); - walk_out += len; - - // Any more extensions? - if( *walk_filter == '\0' ) - { - break; - } - last_filter = walk_filter + 1; - } - walk_filter++; - } - - if( *walk == '\0' ) - { - *walk_out = TEXT( '\0' ); - iFiltersLen = walk_out - szFilters; - - break; - } - } - - Console::Append( TEXT( " " ) ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool InputPlugin::DisIntegrate() -{ - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool InputPlugin::Unload() -{ - if( !IsLoaded() ) return true; - - DisIntegrate(); - - #ifndef NOGUI - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Unloading '%s'" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - #else - printf( ">>> Unloading '%s'\n" , GetFilename() ); - #endif - - // Quit - if( plugin ) - { - if( plugin->Quit ) plugin->Quit(); - plugin->outMod = NULL; - plugin = NULL; - } - - // Remove wndproc hook - if( ( iHookerIndex != -1 ) && ( iHookerIndex == iWndprocHookCounter - 1 ) ) - { - // If we don't restore it the plugins wndproc will - // still be called which is not there anymore -> crash - SetWindowLong( WindowMain, GWL_WNDPROC, ( LONG )WndprocBackup ); - Console::Append( TEXT( "Wndproc hook removed (by host)" ) ); - Console::Append( TEXT( " " ) ); - - iHookerIndex = -1; - iWndprocHookCounter--; - } - - FreeLibrary( hDLL ); - hDLL = NULL; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool InputPlugin::About( HWND hParent ) -{ - if( !plugin ) return false; - if( !plugin->About ) return false; - - plugin->About( hParent ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool InputPlugin::Config( HWND hParent ) -{ - if( !plugin ) return false; - if( !plugin->Config ) return false; - - plugin->Config( hParent ); - - // TODO: File extension could have changed (e.g. in_mp3) - // So we have to process ext_map here... - - return true; -} diff --git a/Externals/MusicMod/Player/Src/InputPlugin.h b/Externals/MusicMod/Player/Src/InputPlugin.h deleted file mode 100644 index 2702fbe767..0000000000 --- a/Externals/MusicMod/Player/Src/InputPlugin.h +++ /dev/null @@ -1,96 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_INPUT_PLUGIN_H -#define PA_INPUT_PLUGIN_H - - - -#include "Global.h" -#include "Plugin.h" -#include "Playback.h" -#include "Playlist.h" -#include "Winamp/In2.h" -#include -#include - -using namespace std; - - - -typedef In_Module * ( * WINAMP_INPUT_GETTER )( void ); - - - -class InputPlugin; - -extern map ext_map; -extern vector input_plugins; -extern InputPlugin * active_input_plugin; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp input plugin wrapper -//////////////////////////////////////////////////////////////////////////////// -class InputPlugin : public Plugin -{ -public: - InputPlugin( TCHAR * szDllpath, bool bKeepLoaded ); - ~InputPlugin(); - - bool Load(); - bool Unload(); - - TCHAR * GetTypeString() { return TEXT( "Input" ); } - int GetTypeStringLen() { return 5; } - PluginType GetType() { return PLUGIN_TYPE_INPUT; } - - inline bool IsActive() { return false; } - - bool About( HWND hParent ); - bool Config( HWND hParent ); - - In_Module * plugin; // I moved this from private to public - -private: - TCHAR * szFilters; - int iFiltersLen; - - - bool Integrate(); - bool DisIntegrate(); - - - // TODO - friend bool OpenPlay( TCHAR * szFilename, int iNumber ); - friend bool Playback_PrevOrNext( bool bPrevOrNext ); - friend bool Playback::Play(); - friend bool Playback::Pause(); - friend bool Playback::Stop(); - friend bool Playback::UpdateSeek(); // this one calls some plugin-> members - friend int Playback::PercentToMs( float fPercent ); - friend bool Playback::SeekPercent( float fPercent ); - friend bool SeekRelative( int ms ); - friend void Playback_Volume_Set( int iVol ); - friend bool Playback::Pan::Set( int iPan ); - friend void Playback_Eq_Set( int iPresetIndex ); - - friend void AddFiles(); - friend void VSAAdd( void * data, int timestamp ); - friend void VSAAddPCMData( void * PCMData, int nch, int bps, int timestamp ); - friend int Playlist::GetTitle( int iIndex, char * szAnsiTitle, int iChars ); -}; - - - -#endif // PA_INPUT_PLUGIN_H diff --git a/Externals/MusicMod/Player/Src/Lock.cpp b/Externals/MusicMod/Player/Src/Lock.cpp deleted file mode 100644 index 8590b944d0..0000000000 --- a/Externals/MusicMod/Player/Src/Lock.cpp +++ /dev/null @@ -1,16 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -// #include "Lock.h" - - -// Code moved to for inlining! diff --git a/Externals/MusicMod/Player/Src/Lock.h b/Externals/MusicMod/Player/Src/Lock.h deleted file mode 100644 index 113c93f50e..0000000000 --- a/Externals/MusicMod/Player/Src/Lock.h +++ /dev/null @@ -1,111 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_LOCK_H -#define PA_LOCK_H - - - -#include "Global.h" - - - -// INFO: http://www.devarticles.com/c/a/Cplusplus/Multithreading-in-C/3/ - - -// #define LOCK_USES_MUTEX - - - -//////////////////////////////////////////////////////////////////////////////// -/// Lock for thread synchronization -//////////////////////////////////////////////////////////////////////////////// -class Lock -{ -public: - Lock( TCHAR * szName ); - ~Lock(); - - void Enter(); - void Leave(); - -private: -#ifndef LOCK_USES_MUTEX - CRITICAL_SECTION * m_pCrit; -#else - HANDLE hLock; -#endif -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Creates a new named lock. -/// Note: Don't use the same name for several locks -//////////////////////////////////////////////////////////////////////////////// -inline Lock::Lock( TCHAR * szName ) -{ -#ifndef LOCK_USES_MUTEX - m_pCrit = new CRITICAL_SECTION; - InitializeCriticalSection( m_pCrit ); -#else - hLock = CreateMutex( NULL, TRUE, szName ); - ReleaseMutex( hLock ); -#endif -} - - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -inline Lock::~Lock() -{ -#ifndef LOCK_USES_MUTEX - DeleteCriticalSection( m_pCrit ); - delete [] m_pCrit; -#else - CloseHandle( hLock ); -#endif -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Closes lock. -//////////////////////////////////////////////////////////////////////////////// -inline void Lock::Enter() -{ -#ifndef LOCK_USES_MUTEX - EnterCriticalSection( m_pCrit ); -#else - WaitForSingleObject( hLock, INFINITE ); -#endif -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Opens lock. -//////////////////////////////////////////////////////////////////////////////// -inline void Lock::Leave() -{ -#ifndef LOCK_USES_MUTEX - LeaveCriticalSection( m_pCrit ); -#else - ReleaseMutex( hLock ); -#endif -} - - - -#endif // PA_LOCK_H diff --git a/Externals/MusicMod/Player/Src/Main.cpp b/Externals/MusicMod/Player/Src/Main.cpp deleted file mode 100644 index 5b8a16a4e8..0000000000 --- a/Externals/MusicMod/Player/Src/Main.cpp +++ /dev/null @@ -1,816 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Documentation -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ - -/* ---- The Seekbar ---- - Rebar.cpp handle the progress (playback position) bar. WndprocMain() is called every - second during playback. And several times a second when the cursor is moving over the - main window. If WM_TIMER called WndprocMain it calls Playback::UpdateSeek(); */ - - -/////////////////////////////////// - - -#include "Main.h" -#include "GlobalVersion.h" -#include "Playlist.h" -#include "Console.h" -#include "Status.h" -#include "Rebar.h" -#include "Playback.h" -#include "PluginManager.h" -#include "DspModule.h" -#include "VisModule.h" -#include "InputPlugin.h" -#include "OutputPlugin.h" -#include "InputPlugin.h" -#include "AddDirectory.h" -#include "AddFiles.h" -#include "Winamp.h" -#include "Winamp/wa_ipc.h" -#include "Config.h" -#include - -#define CLASSNAME_MAIN TEXT( "Winamp v1.x" ) -#define MAIN_TITLE PLAINAMP_LONG_TITLE - -#define MAIN_WIDTH 731 -#define MAIN_HEIGHT 562 - - - -HWND WindowMain = NULL; // extern -HMENU main_context_menu = NULL; // extern -HMENU play_context_menu = NULL; -HMENU opts_context_menu = NULL; -HMENU playback_context_menu = NULL; - - - -LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - -WINDOWPLACEMENT WinPlaceMain; - -void WinPlaceMainCallback( ConfVar * var ) -{ - if( !IsWindow( WindowMain ) ) return; - GetWindowPlacement( WindowMain, &WinPlaceMain ); -} - -const int cxScreen = GetSystemMetrics( SM_CXFULLSCREEN ); -const int cyScreen = GetSystemMetrics( SM_CYFULLSCREEN ); - -RECT rMainDefault = { - ( cxScreen - MAIN_WIDTH ) / 2, - ( cyScreen - MAIN_HEIGHT ) / 2, - ( cxScreen - MAIN_WIDTH ) / 2 + MAIN_WIDTH, - ( cyScreen - MAIN_HEIGHT ) / 2 + MAIN_HEIGHT -}; - -ConfWinPlaceCallback cwpcWinPlaceMain( - &WinPlaceMain, - TEXT( "WinPlaceMain" ), - &rMainDefault, - WinPlaceMainCallback -); - - -bool bMinimizeToTray; -ConfBool cbMinimizeToTray( &bMinimizeToTray, TEXT( "MinimizeToTray" ), CONF_MODE_PUBLIC, true ); - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool BuildMainWindow() -{ - - //#ifndef NOGUI - - // ======================================================================================= - /* Disabling this window creation cause continuous "Error setting DirectSound cooperative level" - messages for some reason. So I leave it here for now. */ - - // Register class - WNDCLASS wc = { - 0, // UINT style - WndprocMain, // WNDPROC lpfnWndProc - 0, // int cbClsExtra - 0, // int cbWndExtra - g_hInstance, // HINSTANCE hInstance - LoadIcon( g_hInstance, TEXT( "IDI_ICON1" ) ), // HICON hIcon - LoadCursor( NULL, IDC_ARROW ), // HCURSOR hCursor - ( HBRUSH )COLOR_WINDOW, // HBRUSH hbrBackground - NULL, // LPCTSTR lpszMenuName - CLASSNAME_MAIN // LPCTSTR lpszClassName - }; - - if( !RegisterClass( &wc ) ) return false; - - - // Create WindowMain - WindowMain = CreateWindowEx( - WS_EX_WINDOWEDGE, // DWORD dwExStyle - CLASSNAME_MAIN, // LPCTSTR lpClassName - MAIN_TITLE, // LPCTSTR lpWindowName - WS_OVERLAPPED | // DWORD dwStyle - // WS_VISIBLE | // - WS_CLIPCHILDREN | // - WS_BORDER | // - WS_SYSMENU | // - WS_THICKFRAME | // - WS_MINIMIZEBOX | // - WS_MAXIMIZEBOX, // - rMainDefault.left, // int x - rMainDefault.top, // int y - rMainDefault.right - rMainDefault.left, // int nWidth - rMainDefault.bottom - rMainDefault.top, // int nHeight - NULL, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - // ======================================================================================= - - //#endif - - // ======================================================================================= - #ifdef NOGUI - - // If this is not called a crash occurs - PlaylistView::Create(); - - // We have now done what we wanted so we skip the rest of the file - return true; - - #else - // ======================================================================================= - - - if( !WindowMain ) - { - UnregisterClass( CLASSNAME_MAIN, g_hInstance ); - return false; - } - - - - - // Build context menu - HMENU main_menu = CreateMenu(); - HMENU plainamp_menu = CreatePopupMenu(); - HMENU playback_menu = CreatePopupMenu(); - HMENU playlist_menu = CreatePopupMenu(); - HMENU windows_menu = CreatePopupMenu(); - - - // Plainamp - AppendMenu( plainamp_menu, MF_STRING, WINAMP_OPTIONS_PREFS, TEXT( "Preferences \tCtrl+P" ) ); - AppendMenu( plainamp_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - AppendMenu( plainamp_menu, MF_STRING, WINAMP_HELP_ABOUT, TEXT( "&About\tCtrl+F1" ) ); - AppendMenu( plainamp_menu, MF_STRING, WINAMP_FILE_QUIT, TEXT( "&Exit \tAlt+F4" ) ); - - // Playback - AppendMenu( playback_menu, MF_STRING, WINAMP_BUTTON1, TEXT( "Pre&vious \tZ" ) ); - AppendMenu( playback_menu, MF_STRING, WINAMP_BUTTON2, TEXT( "&Play\tX" ) ); - AppendMenu( playback_menu, MF_STRING, WINAMP_BUTTON3, TEXT( "P&ause\tC" ) ); - AppendMenu( playback_menu, MF_STRING, WINAMP_BUTTON4, TEXT( "&Stop\tV" ) ); - AppendMenu( playback_menu, MF_STRING, WINAMP_BUTTON5, TEXT( "&Next\tB" ) ); - - // Playlist - AppendMenu( playlist_menu, MF_STRING, ID_PE_OPEN, TEXT( "&Open\tCtrl+O" ) ); - AppendMenu( playlist_menu, MF_STRING, ID_PE_SAVEAS, TEXT( "&Save as\tCtrl+S" ) ); - AppendMenu( playlist_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - AppendMenu( playlist_menu, MF_STRING, WINAMP_FILE_PLAY, TEXT( "Add &files\tL" ) ); - AppendMenu( playlist_menu, MF_STRING, WINAMP_FILE_DIR, TEXT( "Add &directory\tShift+L" ) ); - AppendMenu( playlist_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - AppendMenu( playlist_menu, MF_STRING, PLAINAMP_PL_REM_SEL, TEXT( "Remove selected\tDel" ) ); - AppendMenu( playlist_menu, MF_STRING, PLAINAMP_PL_REM_CROP, TEXT( "Remove unselected \tCtrl+Del" ) ); - AppendMenu( playlist_menu, MF_STRING, ID_PE_CLEAR, TEXT( "Remove all\tCtrl+Shift+Del" ) ); - AppendMenu( playlist_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - AppendMenu( playlist_menu, MF_STRING, ID_PE_SELECTALL, TEXT( "Select &all\tCtrl+A" ) ); - AppendMenu( playlist_menu, MF_STRING, ID_PE_NONE, TEXT( "Select &zero\tCtrl+Shift+A" ) ); - AppendMenu( playlist_menu, MF_STRING, ID_PE_INVERT, TEXT( "Select &invert\tCtrl+I" ) ); - - // Windows - AppendMenu( windows_menu, MF_STRING, MENU_MAIN_WINDOWS_CONSOLE, TEXT( "&Console" ) ); - AppendMenu( windows_menu, MF_STRING, MENU_MAIN_WINDOWS_MANAGER, TEXT( "Plugin &Manager" ) ); - - // Main - AppendMenu( main_menu, MF_STRING | MF_POPUP, ( UINT_PTR )plainamp_menu, TEXT( "&Plainamp" ) ); - AppendMenu( main_menu, MF_STRING | MF_POPUP, ( UINT_PTR )playback_menu, TEXT( "Play&back" ) ); - AppendMenu( main_menu, MF_STRING | MF_POPUP, ( UINT_PTR )playlist_menu, TEXT( "Play&list" ) ); - AppendMenu( main_menu, MF_STRING | MF_POPUP, ( UINT_PTR )windows_menu, TEXT( "&Windows" ) ); - - SetMenu( WindowMain, main_menu ); - - //////////////////////////////////////////////////////////////////////////////// - - main_context_menu = CreatePopupMenu(); - AppendMenu( main_context_menu, MF_STRING, WINAMP_HELP_ABOUT, TEXT( "Plainamp" ) ); - - AppendMenu( main_context_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - - play_context_menu = CreatePopupMenu(); - AppendMenu( play_context_menu, MF_STRING, WINAMP_FILE_PLAY, TEXT( "Files \tL" ) ); - AppendMenu( play_context_menu, MF_STRING, WINAMP_FILE_DIR, TEXT( "Folder \tShift+L" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_POPUP, ( UINT_PTR )play_context_menu, TEXT( "Play" ) ); - - AppendMenu( main_context_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - - AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED | MF_CHECKED, WINAMP_MAIN_WINDOW, TEXT( "Main Window\tAlt+W" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED | MF_CHECKED, WINAMP_OPTIONS_PLEDIT, TEXT( "Playlist Editor\tAlt+E" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED, WINAMP_OPTIONS_EQ, TEXT( "Equalizer\tAlt+G" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED, WINAMP_OPTIONS_VIDEO, TEXT( "Video\tAlt+V" ) ); - AppendMenu( main_context_menu, MF_STRING, PLAINAMP_TOGGLE_CONSOLE, TEXT( "Console" ) ); - AppendMenu( main_context_menu, MF_STRING, PLAINAMP_TOGGLE_MANAGER, TEXT( "Plugin Manager" ) ); - - - /* - AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MAIN_CONTEXT_MANAGER, TEXT( "Plugin Manager" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_DISABLED | MF_GRAYED, MENU_MAIN_CONTEXT_CONSOLE, TEXT( "Console" ) ); - */ - - AppendMenu( main_context_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - - opts_context_menu = CreatePopupMenu(); - AppendMenu( opts_context_menu, MF_STRING, WINAMP_OPTIONS_PREFS, TEXT( "Preferences \tCtrl+P" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_POPUP, ( UINT_PTR )opts_context_menu, TEXT( "Options" ) ); - - playback_context_menu = CreatePopupMenu(); - AppendMenu( playback_context_menu, MF_STRING, WINAMP_BUTTON1, TEXT( "Previous \tZ" ) ); - AppendMenu( playback_context_menu, MF_STRING, WINAMP_BUTTON2, TEXT( "Play\tX" ) ); - AppendMenu( playback_context_menu, MF_STRING, WINAMP_BUTTON3, TEXT( "Pause\tC" ) ); - AppendMenu( playback_context_menu, MF_STRING, WINAMP_BUTTON4, TEXT( "Stop\tV" ) ); - AppendMenu( playback_context_menu, MF_STRING, WINAMP_BUTTON5, TEXT( "Next\tB" ) ); - AppendMenu( main_context_menu, MF_STRING | MF_POPUP, ( UINT_PTR )playback_context_menu, TEXT( "Playback" ) ); - - AppendMenu( main_context_menu, MF_SEPARATOR | MF_DISABLED | MF_GRAYED, ( UINT_PTR )-1, NULL ); - - AppendMenu( main_context_menu, MF_STRING, WINAMP_FILE_QUIT, TEXT( "Exit" ) ); - - - Toolbar::Create(); // This removes all buttons and status bars - //BuildMainStatus(); - - - // ======================================================================================= - // If this is not created a crash occurs - PlaylistView::Create(); - - Playlist::Create(); - - - SetWindowPlacement( WindowMain, &WinPlaceMain ); - - - return true; -#endif -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void About( HWND hParent ) -{ - // For info goto - // http://predef.sourceforge.net/precomp.html - - TCHAR szBuildDetails[ 1000 ] = ""; - -#ifdef __GNUC__ - _stprintf( szBuildDetails, - TEXT( "\n\n\nGNU GCC " __VERSION__ "\n" __DATE__ ) - ); -#else -# ifdef _MSC_VER - _stprintf( - szBuildDetails, - TEXT( "\n\n\nMicrosoft Visual C++ %i.%i\n" __DATE__ ), - _MSC_VER / 100 - 6, - ( _MSC_VER % 100 ) / 10 - ); -# endif -#endif - - TCHAR szBuffer[ 1000 ]; - _stprintf( - szBuffer, - PLAINAMP_LONG_TITLE TEXT( "\n" - "\n" - "Copyright İ 2005 Sebastian Pipping \n" - "\n" - "\n" - "--> http://www.hartwork.org" - "%s" - ), - szBuildDetails - ); - - MessageBox( - hParent, - szBuffer, - TEXT( "About" ), - MB_ICONINFORMATION - ); -} - -#define TRAY_MAIN_ID 13 -#define TRAY_MSG ( WM_USER + 1 ) - - - -NOTIFYICONDATA nid; - -bool AddTrayIcon( HWND hwnd ) -{ - ZeroMemory( &nid, sizeof( NOTIFYICONDATA ) ); - nid.cbSize = sizeof( NOTIFYICONDATA ); - nid.hWnd = hwnd; - nid.uID = TRAY_MAIN_ID; - nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; - nid.uCallbackMessage = TRAY_MSG; - nid.hIcon = LoadIcon( g_hInstance, TEXT( "IDI_ICON1" ) ); - _tcscpy( nid.szTip, TEXT( "Plainamp" ) ); - - return ( Shell_NotifyIcon( NIM_ADD, &nid ) != 0 ); -} - -void RemoveTrayIcon() -{ - Shell_NotifyIcon( NIM_DELETE, &nid ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - // Tool windows are hidden on minimize/re-shown on restore - static bool bConsoleTodo = false; - static bool bManagerTodo = false; - static bool bRemoveIcon = false; - - #ifdef NOGUI - //NOTICE_LOG(AUDIO,"DLL > Main.cpp:WndprocMain() was called. But nothing will be done. \n"); - #else - Console::Append( TEXT( "Main.cpp:WndprocMain was called" ) ); - #endif - - - switch( message ) - { - - #ifdef NOGUI - //printf(" > WndprocMain message: %i\n", message); - #else - - case WM_SETFOCUS: - // To re-"blue" - SetFocus( WindowPlaylist ); - break; - - case WM_CREATE: - // Note: [WindowMain] is not valid yet but [hwnd] is! - Console::Create(); // make the console window - PluginManager::Build(); // make the plugin window - break; - - case WM_NOTIFY: - { - NMHDR * hdr = ( NMHDR * )lp; - - switch( hdr->code ) - { - case LVN_GETDISPINFO: - { - LV_DISPINFO * lpdi = ( LV_DISPINFO * )lp; - playlist->Fill( lpdi->item ); - } - return 0; -/* - case LVN_ODCACHEHINT: - { - LPNMLVCACHEHINT lpCacheHint = (LPNMLVCACHEHINT)lParam; - / - This sample doesn't use this notification, but this is sent when the - ListView is about to ask for a range of items. On this notification, - you should load the specified items into your local cache. It is still - possible to get an LVN_GETDISPINFO for an item that has not been cached, - therefore, your application must take into account the chance of this - occurring. - / - } - return 0; - - case LVN_ODFINDITEM: - { - LPNMLVFINDITEM lpFindItem = (LPNMLVFINDITEM)lParam; - / - This sample doesn't use this notification, but this is sent when the - ListView needs a particular item. Return -1 if the item is not found. - / - } - return 0; -*/ - case NM_CUSTOMDRAW: - { - NMLVCUSTOMDRAW * custom = ( NMLVCUSTOMDRAW * )lp; - - switch( custom->nmcd.dwDrawStage ) - { - case CDDS_PREPAINT: - return CDRF_NOTIFYITEMDRAW; - - case CDDS_ITEMPREPAINT: - return CDRF_NOTIFYSUBITEMDRAW; - - case ( CDDS_SUBITEM | CDDS_ITEMPREPAINT ): - { - // This is the prepaint stage for an item. Here's where we set the - // item's text color. Our return value will tell Windows to draw the - // item itself, but it will use the new color we set here. - // We'll cycle the colors through red, green, and light blue. - - if( custom->nmcd.dwItemSpec == playlist->GetCurIndex() ) - { - custom->clrTextBk = RGB( 225, 225, 225 ); - } - else - { - if( custom->nmcd.dwItemSpec & 1 ) - custom->clrTextBk = RGB( 245, 248, 250 ); - else - custom->clrTextBk = RGB( 255, 255, 255 ); - } - - if( custom->iSubItem == 0 ) - custom->clrText = RGB( 255, 0, 0 ); - else - custom->clrText = RGB( 0, 0, 0 ); - - -/* - if ( (custom->nmcd.dwItemSpec % 3) == 0 ) - crText = RGB(255,0,0); - else if ( (custom->nmcd.dwItemSpec % 3) == 1 ) - crText = RGB(0,255,0); - else - crText = RGB(128,128,255); - - // Store the color back in the NMLVCUSTOMDRAW struct. - custom->clrText = crText; -*/ - // Tell Windows to paint the control itself. - } - /* - custom->clrText = RGB( 190, 190, 190 ); - custom->clrTextBk = RGB( 255, 0, 0 );*/ - return CDRF_DODEFAULT; - - - } - break; - - } - - /* - case RBN_CHILDSIZE: - { - NMREBARCHILDSIZE * chs = ( NMREBARCHILDSIZE * )lp; - const int width_client = chs->rcChild.right - chs->rcChild.left; - int diff = width_client - 120; - if( diff > 0 ) - { - const int width_band = chs->rcBand.right - chs->rcBand.left; - // chs->rcChild.right = chs->rcChild.left + 120; - - DEBUGF( 1000, "CHILDSIZE [%i] [%i]", chs->uBand, width_band ); - - const int client_band_diff = width_band - width_client; - chs->rcBand.right = chs->rcBand.left + 120 + client_band_diff; - // chs->uBand - - - REBARBANDINFO rbbi; - rbbi.cbSize = sizeof( REBARBANDINFO ); - rbbi.fMask = RBBIM_SIZE; - rbbi.cx = 154; //width_band + diff; - LRESULT lResult = SendMessage( - rebar, - RB_SETBANDINFO, - chs->uBand, - ( LPARAM )( REBARBANDINFO * )&rbbi - ); - - } - break; - } - */ - case RBN_HEIGHTCHANGE: - { - const int iRebarHeightBefore = iRebarHeight; - RECT r; - GetWindowRect( WindowRebar, &r ); - iRebarHeight = r.bottom - r.top; - - InvalidateRect( WindowRebar, NULL, TRUE ); - InvalidateRect( WindowPlaylist, NULL, TRUE ); - - RECT client; - GetClientRect( WindowMain, &client ); - PostMessage( - hwnd, - WM_SIZE, - SIZE_RESTORED, - ( client.right - client.left ) << 16 | - ( client.bottom - client.top ) - ); - - break; - } - } - break; - } - - case WM_SYSKEYDOWN: - switch( wp ) // [Alt]+[...] - { - case VK_UP: - case VK_DOWN: - SetFocus( WindowPlaylist ); - SendMessage( WindowPlaylist, message, wp, lp ); - break; - } - break; - - case WM_KEYDOWN: - case WM_KEYUP: - SetFocus( WindowPlaylist ); - SendMessage( WindowPlaylist, message, wp, lp ); - break; - - case WM_COMMAND: - { - const int code = HIWORD( wp ); - switch( code ) - { - case 1: // also == CBN_SELCHANGE - { - if( ( HWND )lp == WindowOrder ) - { - LRESULT res = SendMessage( WindowOrder, CB_GETCURSEL, 0, 0 ); - if( res == CB_ERR ) break; - Playback::Order::SetMode( ( int )res ); - } - else if( ( HWND )lp == WindowEq ) - { - LRESULT res = SendMessage( WindowEq, CB_GETCURSEL, 0, 0 ); - if( res == CB_ERR ) break; - Playback::Eq::SetIndex( ( int )( res - 1 ) ); - } - - return WndprocWinamp( hwnd, message, wp, lp ); - } - - case 0: - { - // Menu - const int id = LOWORD( wp ); - switch( id ) - { - case MENU_MAIN_WINDOWS_CONSOLE: - Console::Popup(); - break; - - case MENU_MAIN_WINDOWS_MANAGER: - PluginManager::Popup(); - break; - - } -/* - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "default 1 id = <%i>" ), id ); - MessageBox( 0, szBuffer, "", 0 ); -*/ - return WndprocWinamp( hwnd, message, wp, lp ); - } - - default: - return WndprocWinamp( hwnd, message, wp, lp ); - } - break; - } - - case WM_GETMINMAXINFO: - { - MINMAXINFO * mmi = ( MINMAXINFO * )lp; - mmi->ptMinTrackSize.x = 400; - mmi->ptMinTrackSize.y = 300; - return 0; - } - - case WM_SIZE: - { - // Resize children - RECT client; - GetClientRect( WindowMain, &client ); - - const int iClientWidth = client.right - client.left; - const int iClientHeight = client.bottom - client.top; - const int iPlaylistHeight = iClientHeight - iRebarHeight - iStatusHeight; - - if( WindowRebar ) - MoveWindow( WindowRebar, 0, 0, iClientWidth, iRebarHeight, TRUE ); - if( WindowPlaylist ) - { - MoveWindow( WindowPlaylist, 0, iRebarHeight, iClientWidth, iPlaylistHeight, TRUE ); - playlist->Resize( WindowMain ); - } - if( WindowStatus ) - MoveWindow( WindowStatus, 0, iRebarHeight + iPlaylistHeight, iClientWidth, iStatusHeight, TRUE ); - break; - } - - case WM_TIMER: - Playback::UpdateSeek(); - break; - - case WM_CONTEXTMENU: - PostMessage( hwnd, WM_COMMAND, WINAMP_MAINMENU, 0 ); - break; - - case WM_CLOSE: - { - // Clean shutdown - - // Stop - Playback::Stop(); - - // Dsp - DspLock.Enter(); - for( int d = active_dsp_count - 1; d >= 0; d-- ) - { - DspLock.Leave(); - active_dsp_mods[ d ]->Stop(); - DspLock.Enter(); - } - DspLock.Leave(); - - - // Vis - VisLock.Enter(); - for( int v = active_vis_count - 1; v >= 0; v-- ) - { - VisLock.Leave(); - active_vis_mods[ v ]->Stop(); - VisLock.Enter(); - } - VisLock.Leave(); - } - break; - - case WM_DESTROY: - { - // ======================================================================================= - // Save playlist - /* - TCHAR * szPlaylistMind = new TCHAR[ iHomeDirLen + 12 + 1 ]; - memcpy( szPlaylistMind, szHomeDir, iHomeDirLen * sizeof( TCHAR ) ); - memcpy( szPlaylistMind + iHomeDirLen, TEXT( "Plainamp.m3u" ), 12 * sizeof( TCHAR ) ); - szPlaylistMind[ iHomeDirLen + 12 ] = TEXT( '\0' ); - - Playlist::ExportPlaylistFile( szPlaylistMind ); - - delete [] szPlaylistMind; - */ - // ======================================================================================= - - cwpcWinPlaceMain.TriggerCallback(); - cwpcWinPlaceMain.RemoveCallback(); - - Console::Destroy(); - PluginManager::Destroy(); - - if( bRemoveIcon ) - { - RemoveTrayIcon(); - bRemoveIcon = false; - } - - PostQuitMessage( 0 ); - return 0; - } - - case WM_ACTIVATEAPP: - { - if( wp != TRUE ) break; - - // Also bring console/manager to front - const bool bConsoleVisible = ( IsWindowVisible( WindowConsole ) == TRUE ); - const bool bManagerVisible = ( IsWindowVisible( WindowManager ) == TRUE ); - const bool bMainTodo = ( bConsoleVisible || bManagerVisible ); - - if( bConsoleVisible ) BringWindowToTop( WindowConsole ); - if( bManagerVisible ) BringWindowToTop( WindowManager ); - if( bMainTodo ) BringWindowToTop( WindowMain ); - - break; - } - - case WM_SYSCOMMAND: - switch( ( wp & 0xFFF0 ) ) - { - case SC_CLOSE: - if( !SendMessage( WindowMain, WM_WA_IPC, 0, IPC_HOOK_OKTOQUIT ) ) - { - return 0; - } - break; - - case SC_MINIMIZE: - { - // Hide console/manager on minimize - bConsoleTodo = ( IsWindowVisible( WindowConsole ) == TRUE ); - if( bConsoleTodo ) ShowWindow( WindowConsole, SW_HIDE ); - - bManagerTodo = ( IsWindowVisible( WindowManager ) == TRUE ); - if( bManagerTodo ) ShowWindow( WindowManager, SW_HIDE ); - - if( bMinimizeToTray ) - { - if( !bRemoveIcon ) - { - bRemoveIcon = AddTrayIcon( hwnd ); - } - - ShowWindow( hwnd, FALSE ); - return 0; - } - - break; - } - - case SC_RESTORE: - { - const LRESULT res = DefWindowProc( hwnd, message, wp, lp ); - - // Unhide console/manager - const bool bMainTodo = ( bConsoleTodo || bManagerTodo ); - if( bConsoleTodo ) ShowWindow( WindowConsole, SW_SHOW ); - if( bManagerTodo ) ShowWindow( WindowManager, SW_SHOW ); - if( bMainTodo ) BringWindowToTop( WindowMain ); - - return res; - } - } - break; - - case TRAY_MSG: - switch( lp ) - { - case WM_RBUTTONDOWN: // TODO: context menu instead - case WM_LBUTTONDOWN: - if( IsWindowVisible( hwnd ) == FALSE ) - { - ShowWindow( hwnd, TRUE ); - } - break; - - case WM_RBUTTONUP: // TODO: context menu instead - case WM_LBUTTONUP: - if( bRemoveIcon ) - { - RemoveTrayIcon(); - bRemoveIcon = false; - } - break; - - } - return 0; - #endif - default: - return WndprocWinamp( hwnd, message, wp, lp ); - } - return DefWindowProc( hwnd, message, wp, lp ); - -} diff --git a/Externals/MusicMod/Player/Src/Main.h b/Externals/MusicMod/Player/Src/Main.h deleted file mode 100644 index c8a2b4309c..0000000000 --- a/Externals/MusicMod/Player/Src/Main.h +++ /dev/null @@ -1,51 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_MAIN_H -#define PA_MAIN_H - - - -#include "Global.h" -#include "Winamp/wa_msgids.h" - - - -// TODO - - - -#define MENU_MAIN_WINDOWS_CONSOLE 41 -#define MENU_MAIN_WINDOWS_MANAGER 42 - -#define MENU_MAIN_CONTEXT_MANAGER WINAMP_MAIN_WINDOW // first window, for gen_dl -#define MENU_MAIN_CONTEXT_CONSOLE WINAMP_OPTIONS_VIDEO // last window, for gen_template - - -#define PLAINAMP_TOGGLE_CONSOLE 50001 -#define PLAINAMP_TOGGLE_MANAGER 50002 - - - - -extern HWND WindowMain; -extern HMENU main_context_menu; - - - -bool BuildMainWindow(); -void About( HWND hParent ); -LRESULT CALLBACK WndprocMain( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - -#endif // PA_MAIN_H diff --git a/Externals/MusicMod/Player/Src/Output.cpp b/Externals/MusicMod/Player/Src/Output.cpp deleted file mode 100644 index 5f88e5ff8a..0000000000 --- a/Externals/MusicMod/Player/Src/Output.cpp +++ /dev/null @@ -1,382 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Output.h" -#include "OutputPlugin.h" -#include "Console.h" -#include - - - -int iNullSampleRate; -int iNullSumBytesPerSample; -int iNullWrittenMillis; -bool bNullPlaying; -int bNullPaused; -DWORD dwNullOpenTimestamp; -DWORD dwNullPauseTimestamp; - -const int NULL_DEFAULT_LATENCY = 1000; - - -int Output_Open( int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms ); -void Output_Close(); -int Output_Write( char * buf, int len ); -int Output_CanWrite(); -int Output_IsPlaying(); -int Output_Pause( int pause ); -void Output_SetVolume( int volume ); -void Output_SetPan( int pan ); -void Output_Flush( int t ); -int Output_GetOutputTime(); -int Output_GetWrittenTime(); - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -Out_Module output_server = { - OUT_VER, // int version - "Plainamp Output Server", // char * description; - 0x7fffffff, // int id - NULL, // HWND hMainWindow - NULL, // HINSTANCE hDllInstance - NULL, // void (*Config)(HWND hwndParent); - NULL, // void (*About)(HWND hwndParent); - NULL, // void (*Init)(); - NULL, // void (*Quit)(); - Output_Open, // int (*Open)(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms); - Output_Close, // void (*Close)(); - Output_Write, // int (*Write)(char *buf, int len); - Output_CanWrite, // int (*CanWrite)(); - Output_IsPlaying, // int (*IsPlaying)(); - Output_Pause, // int (*Pause)(int pause); - Output_SetVolume, // void (*SetVolume)(int volume); - Output_SetPan, // void (*SetPan)(int pan); - Output_Flush, // void (*Flush)(int t); - Output_GetOutputTime, // int (*GetOutputTime)(); - Output_GetWrittenTime, // int (*GetWrittenTime)(); -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Output_Open( int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms ) -{ - if( active_output_count > 0 ) - { - // Maximum - int res = 0; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->Open( samplerate, numchannels, bitspersamp, bufferlenms, prebufferms ); - if( res_temp > res ) res = res_temp; - } - return res; - } - else - { - iNullSampleRate = samplerate; - iNullSumBytesPerSample = numchannels * ( bitspersamp / 8 ); - iNullWrittenMillis = 0; - bNullPlaying = false; - bNullPaused = 0; - dwNullOpenTimestamp = GetTickCount(); - - return NULL_DEFAULT_LATENCY; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Output_Close() -{ - if( active_output_count > 0 ) - { - for( int i = 0; i < active_output_count; i++ ) - { - active_output_plugins[ i ]->plugin->Close(); - } - } - else - { - bNullPlaying = false; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Output_Write( char * buf, int len ) -{ - if( active_output_count > 0 ) - { - // Maximum - int res = 0; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->Write( buf, len ); - if( res_temp > res ) res = res_temp; - } - return res; - } - else - { - if( iNullWrittenMillis == 0 ) - { - dwNullOpenTimestamp = GetTickCount(); - bNullPlaying = true; - } - - iNullWrittenMillis += ( len / iNullSumBytesPerSample ) * 1000 / iNullSampleRate; - return 0; // 0 == Success - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Output_CanWrite() -{ - if( active_output_count > 0 ) - { - // Minimum - int res = 0x7fffffff; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->CanWrite(); - if( res_temp < res ) res = res_temp; - } - return res; - } - else - { - const int diff = Output_GetWrittenTime() - Output_GetOutputTime(); - if( diff >= NULL_DEFAULT_LATENCY ) - { - return 0; - } - else - { - return ( NULL_DEFAULT_LATENCY - diff ) * iNullSumBytesPerSample * iNullSampleRate / 1000; - } - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Output_IsPlaying() -{ - if( active_output_count > 0 ) - { - // Maximum - int res = 0; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->IsPlaying(); - if( res_temp > res ) res = res_temp; - } - return res; - } - else - { - return ( Output_GetOutputTime() < Output_GetWrittenTime() ) ? 1 : 0; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Output_Pause( int pause ) -{ - if( active_output_count > 0 ) - { - // Maximum - int res = 0; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->Pause( pause ); - if( res_temp > res ) res = res_temp; - } - return res; - } - else - { - int res = bNullPaused; - if( pause && !bNullPaused ) - { - // Playback should be paused - dwNullPauseTimestamp = GetTickCount(); - bNullPaused = 1; - } - else if( !pause && bNullPaused ) - { - // Playback should be continued - // Add the gap length to the open timestamp like no gap exists - dwNullOpenTimestamp += ( GetTickCount() - dwNullPauseTimestamp ); - bNullPaused = 0; - } - return res; // Previous state - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Output_SetVolume( int volume ) -{ - /* There was a call here with the volume value -666 that I could not see the source of, - so I added this check to see that we got a positive volume. */ - if(volume >= 0) - { - // ======================================================================================= - // The volume goes from 0 to 255 - //TCHAR szBuffer[ 5000 ]; - //_stprintf( szBuffer, TEXT( "DLL > Output_SetVolume <%i>" ), volume ); - //Console::Append( szBuffer ); - //Console::Append( TEXT( " " ) ); - //NOTICE_LOG(AUDIO, "DLL > Output_SetVolume <%i>\n", volume ); - // ======================================================================================= - - for( int i = 0; i < active_output_count; i++ ) - { - active_output_plugins[ i ]->plugin->SetVolume( volume ); - } - } - -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Output_SetPan( int pan ) -{ - for( int i = 0; i < active_output_count; i++ ) - { - active_output_plugins[ i ]->plugin->SetPan( pan ); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Output_Flush( int t ) -{ - if( active_output_count > 0 ) - { - for( int i = 0; i < active_output_count; i++ ) - { - active_output_plugins[ i ]->plugin->Flush( t ); - } - } - else - { - dwNullOpenTimestamp = GetTickCount() - t; - iNullWrittenMillis = t; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Returns the number of milliseconds the song would be at -/// if we had zero latency. This value is never bigger than -/// the one returned by Output_GetWrittenTime(). -//////////////////////////////////////////////////////////////////////////////// -int Output_GetOutputTime() // <= GetWrittenTime() -{ - if( active_output_count > 0 ) - { - // Minimum - int res = 0x7fffffff; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->GetOutputTime(); - if( res_temp < res ) res = res_temp; - } - return res; - } - else - { - if( bNullPlaying ) - { - int res; - if( bNullPaused ) - { - res = dwNullPauseTimestamp - dwNullOpenTimestamp; - } - else - { - res = GetTickCount() - dwNullOpenTimestamp; - } - return MIN( res, iNullWrittenMillis ); - } - else - { - return 0; - } - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Returns the number of milliseconds already written. -/// Due to latency this value is always bigger than -/// the value returned by Output_GetOutputTime(). -//////////////////////////////////////////////////////////////////////////////// -int Output_GetWrittenTime() -{ - if( active_output_count > 0 ) - { - // Maximum - int res = 0; - int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->GetWrittenTime(); - if( res_temp > res ) res = res_temp; - } - return res; - } - else - { - return iNullWrittenMillis; - } -} diff --git a/Externals/MusicMod/Player/Src/Output.h b/Externals/MusicMod/Player/Src/Output.h deleted file mode 100644 index 21723f3e73..0000000000 --- a/Externals/MusicMod/Player/Src/Output.h +++ /dev/null @@ -1,27 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_OUTPUT_H -#define PA_OUTPUT_H - - - -#include "Global.h" -#include "Winamp/Out.h" - - - -extern Out_Module output_server; - - - -#endif // PA_OUTPUT_H diff --git a/Externals/MusicMod/Player/Src/OutputPlugin.cpp b/Externals/MusicMod/Player/Src/OutputPlugin.cpp deleted file mode 100644 index 30653d9ed4..0000000000 --- a/Externals/MusicMod/Player/Src/OutputPlugin.cpp +++ /dev/null @@ -1,316 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "OutputPlugin.h" -#include "Main.h" -#include "Unicode.h" -#include "Console.h" -#include "Config.h" -#include "Playback.h" - - - -vector output_plugins; // extern -OutputPlugin ** active_output_plugins = NULL; // extern -int active_output_count = 0; // extern - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -OutputPlugin::OutputPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllpath ) -{ - iHookerIndex = -1; - - bActive = false; - iArrayIndex = -1; - plugin = NULL; - - if( !Load() ) - { - return; - } - - //////////////////////////////////////////////////////////////////////////////// - - // Quick hack!!! - TCHAR * szBuffer = new TCHAR[ 500 ]; // NOT LOCAL!!! - _stprintf( szBuffer, TEXT( "OutputPluginActive___%s" ), GetFilename() ); - ConfBool * cbActive = new ConfBool( &bActive, szBuffer, CONF_MODE_INTERNAL, false ); - cbActive->Read(); - printf("OutputPlugin > GetFilename() returned <%s>\n", szBuffer ); - - printf("OutputPlugin > We now have and \n", bActive, bKeepLoaded ); - - if( bActive ) - { - bActive = false; - Start(); - } - else - { - if( !bKeepLoaded ) - { - // Note: out_ds seems to do weird things - // when unloaded here!? - // So out_ds keeps loaded for now. - if( _tcscmp( GetFilename(), TEXT( "out_ds.dll" ) ) ) - { - printf("OutputPlugin > Unload called from OutputPlugin::OutputPlugin\n"); - Unload(); - } - } - } - // Quick hack!!! - //////////////////////////////////////////////////////////////////////////////// - - - output_plugins.push_back( this ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool OutputPlugin::Load() -{ - if( IsLoaded() ) return true; - - // (1) Load DLL - hDLL = LoadLibrary( GetFullpath() ); - if( !hDLL ) return false; - - // (2) Find export - WINAMP_OUTPUT_GETTER winampGetOutModule = - ( WINAMP_OUTPUT_GETTER )GetProcAddress( hDLL, "winampGetOutModule" ); - if( winampGetOutModule == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (3) Get module - plugin = winampGetOutModule(); - if( !plugin ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (4) Process module - plugin->hDllInstance = hDLL; - plugin->hMainWindow = WindowMain; - - if( !szName ) - { - // Note: The prefix is not removed to hide their - // origin at Nullsoft! It just reads easier. - if( !_strnicmp( plugin->description, "nullsoft ", 9 ) ) - { - plugin->description += 9; - } - iNameLen = ( int )strlen( plugin->description ); - szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( szName, plugin->description, iNameLen ); - szName[ iNameLen ] = TEXT( '\0' ); - } - - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - printf( ">>>Loading <%s>, %s\n" , GetFilename(), szName ); - - if( plugin->Init ) - { - // We remove the WNDPROC things -#ifdef NOGUI - plugin->Init(); -#else - - // Init - const WNDPROC WndprocBefore = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC ); - plugin->Init(); - const WNDPROC WndprocAfter = ( WNDPROC )GetWindowLong( WindowMain, GWL_WNDPROC ); - - if( WndprocBefore != WndprocAfter ) - { - WndprocBackup = WndprocBefore; - iHookerIndex = iWndprocHookCounter++; - } - - - // Note: Plugins that use a wndproc hook need - // to be unloaded in the inverse loading order. - // This is due to the nature of wndproc hooking. - if( iHookerIndex != -1 ) - { - Console::Append( TEXT( "Wndproc hook added (by plugin)" ) ); - } -#endif - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool OutputPlugin::Unload() -{ - if( !IsLoaded() ) return true; - if( bActive && Playback::IsPlaying() ) return false; - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - printf( ">>>Unloading <%s>\n" , GetFilename() ); - - // Quit - if( plugin ) - { - if( plugin->Quit ) plugin->Quit(); - plugin = NULL; - } - - // Remove wndproc hook - if( ( iHookerIndex != -1 ) && ( iHookerIndex == iWndprocHookCounter - 1 ) ) - { - // If we don't restore it the plugins wndproc will - // still be called which is not there anymore -> crash - SetWindowLong( WindowMain, GWL_WNDPROC, ( LONG )WndprocBackup ); - Console::Append( TEXT( "Wndproc hook removed (by host)" ) ); - Console::Append( TEXT( " " ) ); - - iHookerIndex = -1; - iWndprocHookCounter--; - } - - FreeLibrary( hDLL ); - hDLL = NULL; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool OutputPlugin::About( HWND hParent ) -{ - if( !IsLoaded() ) return false; - if( !plugin ) return false; - if( !plugin->About ) return false; - - plugin->About( hParent ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool OutputPlugin::Config( HWND hParent ) -{ - if( !IsLoaded() ) return false; - if( !plugin ) return false; - if( !plugin->Config ) return false; - - plugin->Config( hParent ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool OutputPlugin::Start() -{ - //NOTICE_LOG(AUDIO, "OutputPlugin::Start() > Begin \n", - // IsLoaded(), bActive, active_output_count ); - - if( !IsLoaded() ) return false; - if( bActive ) return true; - - if( active_output_count ) - { - active_output_plugins = ( OutputPlugin ** )realloc( active_output_plugins, ( active_output_count + 1 ) * sizeof( OutputPlugin * ) ); - active_output_plugins[ active_output_count ] = this; - iArrayIndex = active_output_count; - active_output_count++; - } - else - { - active_output_plugins = ( OutputPlugin ** )malloc( sizeof( OutputPlugin * ) ); - active_output_plugins[ 0 ] = this; - iArrayIndex = 0; - active_output_count = 1; - } - - #ifndef NOGUI - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Output plugin <%s> activated" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - #else - NOTICE_LOG(AUDIO, "\n >>> Output plugin '%s' activated\n\n" , GetFilename() ); - #endif - - bActive = true; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool OutputPlugin::Stop() -{ - if( !IsLoaded() ) return true; - if( !bActive ) return true; - - const int iMaxIndex = active_output_count - 1; - if( iArrayIndex < iMaxIndex ) - { - active_output_plugins[ iArrayIndex ] = active_output_plugins[ iMaxIndex ]; - active_output_plugins[ iArrayIndex ]->iArrayIndex = iArrayIndex; - } - iArrayIndex = -1; - active_output_count--; - - // TODO Flush? - // TODO Close? - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Output plugin <%s> deactivated" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - - bActive = false; - - return true; -} diff --git a/Externals/MusicMod/Player/Src/OutputPlugin.h b/Externals/MusicMod/Player/Src/OutputPlugin.h deleted file mode 100644 index 6dc4ca0cb9..0000000000 --- a/Externals/MusicMod/Player/Src/OutputPlugin.h +++ /dev/null @@ -1,87 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_OUTPUT_PLUGIN_H -#define PA_OUTPUT_PLUGIN_H - - - -#include "Global.h" -#include "Plugin.h" -#include "Winamp/Out.h" -#include - -using namespace std; - - - -typedef Out_Module * ( * WINAMP_OUTPUT_GETTER )( void ); - - -class OutputPlugin; - -extern vector output_plugins; -extern OutputPlugin ** active_output_plugins; -extern int active_output_count; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp output plugin wrapper -//////////////////////////////////////////////////////////////////////////////// -class OutputPlugin : public Plugin -{ -public: - OutputPlugin( TCHAR * szDllpath, bool bKeepLoaded ); - - bool Load(); - bool Unload(); - - TCHAR * GetTypeString() { return TEXT( "Output" ); } - int GetTypeStringLen() { return 6; } - PluginType GetType() { return PLUGIN_TYPE_OUTPUT; } - - inline bool IsActive() { return bActive; } - - bool About( HWND hParent ); - bool Config( HWND hParent ); - - bool Start(); - bool Stop(); - - Out_Module * plugin; // Moved to public - -private: - bool bActive; - int iArrayIndex; - - - - // TODO - friend bool OpenPlay( TCHAR * szFilename, int iNumber ); - - friend int Output_Open( int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms ); - friend void Output_Close(); - friend int Output_Write( char * buf, int len ); - friend int Output_CanWrite(); - friend int Output_IsPlaying(); - friend int Output_Pause( int pause ); - friend void Output_SetVolume( int volume ); - friend void Output_SetPan( int pan ); - friend void Output_Flush( int t ); - friend int Output_GetOutputTime(); - friend int Output_GetWrittenTime(); -}; - - - -#endif // PA_OUTPUT_PLUGIN_H diff --git a/Externals/MusicMod/Player/Src/Path.cpp b/Externals/MusicMod/Player/Src/Path.cpp deleted file mode 100644 index 956489bccc..0000000000 --- a/Externals/MusicMod/Player/Src/Path.cpp +++ /dev/null @@ -1,243 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Path.h" -#include -#include - -using namespace std; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Applies a virtual root to a filename -/// -/// Example: -/// Rootpath: "C:\111\222\333\" -/// Filename before: "C:\111\444\test.mp3" -/// Filename after: "..\..\444\test.mp3" -//////////////////////////////////////////////////////////////////////////////// -bool ApplyRootToFilename( TCHAR * szRootpath, TCHAR * szFilename ) -{ - // returns modified flag - - int iFilenameLen = ( int )_tcslen( szFilename ); - int iRootLen = ( int )_tcslen( szRootpath ); - - // Too short? - if( ( iRootLen < 2 ) || ( iFilenameLen < 4 ) ) - { - return false; - } - - // Ensure trailing backslash - bool bDelOnRet = false; - TCHAR * szFinalRoot; - TCHAR * szFinalRootBackup; - if( szRootpath[ iRootLen - 1 ] != TEXT( '\\' ) ) - { - szFinalRoot = new TCHAR[ iRootLen + 2 ]; - memcpy( szFinalRoot, szRootpath, iRootLen * sizeof( TCHAR ) ); - memcpy( szFinalRoot + iRootLen, TEXT( "\\\0" ), 2 * sizeof( TCHAR ) ); - iRootLen++; - szFinalRootBackup = szFinalRoot; - bDelOnRet = true; - } - else - { - szFinalRoot = szRootpath; - szFinalRootBackup = NULL; - bDelOnRet = false; - } - - - // Different drives? - if( _totlower( *szFilename ) != _totlower( *szFinalRoot ) ) - { - if( bDelOnRet ) delete [] szFinalRootBackup; - return false; - } - - - // Skip drive - if( _tcsnicmp( szFilename, szFinalRoot, 3 ) ) - { - szFinalRoot += 3; - iRootLen -= 3; - - memmove( szFilename, szFilename + 3, ( iFilenameLen - 2 ) * sizeof( TCHAR ) ); // Plus \0 - iFilenameLen -=3; - } - - - int iBackslashLast = -1; - - int iCompLen; // Maximum chars to compare - if( iRootLen > iFilenameLen ) - iCompLen = iFilenameLen; - else - iCompLen = iRootLen; - - - // Walk while equal - int i = 0; - while( i < iCompLen ) - { - if( ( szFilename[ i ] == TEXT( '\\' ) ) && ( szFinalRoot[ i ] == TEXT( '\\' ) ) ) - { - iBackslashLast = i; - i++; - } - else if( _totlower( szFilename[ i ] ) == _totlower( szFinalRoot[ i ] ) ) - { - i++; - } - else - { - break; - } - } - - - // Does the filename contain the full root? - int iLevelDiff = 0; - if( i != iCompLen ) - { - // Calculate level difference - for( i = iBackslashLast + 1; i < iRootLen; i++ ) - { - if( szFinalRoot[ i ] == TEXT( '\\' ) ) - { - iLevelDiff++; - } - } - } - - - if( iBackslashLast == -1 ) - { - if( bDelOnRet ) delete [] szFinalRootBackup; - return false; - } - - - TCHAR * szSource = szFilename + iBackslashLast + 1; - if( iLevelDiff > 0 ) - { - const int iExtraCharsForPrefix = ( 3 * iLevelDiff ) - iBackslashLast - 1; - const int iCharsToMove = iFilenameLen - iBackslashLast; // One more for '\0' - memmove( szSource + iExtraCharsForPrefix, szSource, sizeof( TCHAR ) * iCharsToMove ); - - TCHAR * szWalk = szFilename; - while( iLevelDiff-- ) - { - memcpy( szWalk, TEXT( "..\\" ), 3 * sizeof( TCHAR ) ); - szWalk += 3; - } - } - else - { - const int iCharsToMove = iFilenameLen - iBackslashLast; // One more for '\0' - memmove( szFilename, szSource, sizeof( TCHAR ) * iCharsToMove ); - } - - - if( bDelOnRet ) delete [] szFinalRootBackup; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Compresses filenames (inplace) -/// -/// Example: -/// Before "C:\111\222\..\333\.\444\..\..\test.mp3" -/// After "C:\111\test.mp3" -//////////////////////////////////////////////////////////////////////////////// -bool UnbloatFilename( TCHAR * szFullpath, bool bFixTooDeep ) -{ - int iLen = ( int )_tcslen( szFullpath ); - bool bModified = false; - - // Exclude drive letter from conversion "C:\" - if( ( iLen > 3 ) && !_tcsnicmp( szFullpath + 1, TEXT( ":\\" ), 2 ) ) - { - szFullpath += 3; - iLen -= 3; - } - - vector< TCHAR * > after_backslash; - TCHAR * end = szFullpath + iLen; - TCHAR * szWalk = szFullpath; - - while( true ) - { - if( !_tcsnicmp( szWalk, TEXT( "..\\" ), 3 ) ) - { - TCHAR * szAfterBackslashLast; - - if( after_backslash.empty() ) - { - // Getting here means we go deeper than root level e.g. "../test" - if( bFixTooDeep ) - { - szAfterBackslashLast = szWalk; - } - else - { - break; - } - } - else - { - szAfterBackslashLast = after_backslash.back(); - after_backslash.pop_back(); - } - - const int iBytesToCopy = end - szWalk - ( 3 * sizeof( TCHAR ) ); - const int iBytesLess = szWalk + ( 3 * sizeof( TCHAR ) ) - szAfterBackslashLast; - - memmove( szAfterBackslashLast, szWalk + 3, iBytesToCopy ); - - char * byte_end = ( char * )end; - byte_end -= iBytesLess; - end = byte_end; - *end = TEXT( '\0' ); - - szWalk = szAfterBackslashLast; - - bModified = true; - } - else if( !_tcsnicmp( szWalk, TEXT( ".\\" ), 2 ) ) - { - const int iBytesToCopy = end - szWalk - ( 2 * sizeof( TCHAR ) ); - memmove( szWalk, szWalk + 2, iBytesToCopy ); - end -= 2; - *end = TEXT( '\0' ); - - bModified = true; - } - else - { - - if( szWalk >= end ) break; - after_backslash.push_back( szWalk ); - - // Jump after next backslash - while( ( szWalk < end ) && ( *szWalk != TEXT( '\\' ) ) ) szWalk++; - szWalk++; - } - } - - return bModified; -} diff --git a/Externals/MusicMod/Player/Src/Path.h b/Externals/MusicMod/Player/Src/Path.h deleted file mode 100644 index 63b510dd48..0000000000 --- a/Externals/MusicMod/Player/Src/Path.h +++ /dev/null @@ -1,31 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_PATH_H -#define PA_PATH_H - - - -#ifndef PLAINAMP_TESTING -# include "Global.h" -#else -# include "../Testing/GlobalTest.h" -#endif - - - -bool ApplyRootToFilename( TCHAR * szRootpath, TCHAR * szFilename ); -bool UnbloatFilename( TCHAR * szFullpath, bool bFixTooDeep ); - - - -#endif // PA_PATH_H diff --git a/Externals/MusicMod/Player/Src/Playback.cpp b/Externals/MusicMod/Player/Src/Playback.cpp deleted file mode 100644 index 41a6be7298..0000000000 --- a/Externals/MusicMod/Player/Src/Playback.cpp +++ /dev/null @@ -1,804 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Playback.h" -#include "InputPlugin.h" -#include "Output.h" -#include "Playlist.h" -#include "Console.h" -#include "Unicode.h" -#include "Rebar.h" -#include "Main.h" -#include "Config.h" -#include "Status.h" - - - -int iCurVol = 255; -ConfIntMinMax ciCurVol( &iCurVol, TEXT( "Volume" ), CONF_MODE_INTERNAL, 255, 0, 255 ); - -int iCurPan = 0; -ConfIntMinMax ciCurPan( &iCurPan, TEXT( "Panning" ), CONF_MODE_INTERNAL, 0, -127, 127 ); - - - -#define VOLUME_STEP ( 255 / 10 ) - - - -bool bPlaying = false; -bool bPaused = false; - -bool bTimerRunning = false; - - - -// Only for reference comparison!!! -TCHAR * szCurrentFilename = NULL; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -// ======================================================================================= -// The timer that calls WndprocMain every second -void EnableTimer( bool bEnabled ) -{ - // Return if the timer is already activated - if( bEnabled == bTimerRunning ) return; - - if( bEnabled ) - { - SetTimer( WindowMain, TIMER_SEEK_UPDATE, 1000, NULL ); - NOTICE_LOG(AUDIO, "EnableTimer > Activated\n" ); - } - else - { - KillTimer( WindowMain, TIMER_SEEK_UPDATE ); - StatusReset(); - - NOTICE_LOG(AUDIO, "EnableTimer > Killed\n" ); - } - - bTimerRunning = bEnabled; -} -// ======================================================================================= - - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -bool OpenPlay( TCHAR * szFilename, int iNumber ) -{ - // ======================================================================================= - #ifdef NOGUI - //NOTICE_LOG(AUDIO, "Playback.cpp: OpenPlay > Begin <%i> <%s>\n" , iNumber, szFilename ); - #else - TCHAR sszBuffer[ 5000 ]; - _stprintf( sszBuffer, TEXT( "Playback.cpp: OpenPlay was called <%i> <%s>" ), iNumber, szFilename ); - Console::Append( sszBuffer ); - #endif - // ======================================================================================= - - - // ======================================================================================= - // Get the right input plugin - // --------------------------------------------------------------------------------------- - if( !szFilename ) return false; - szCurrentFilename = szFilename; - - // --------------------------------------------------------------------------------------- - // TODO: non-file support - // --------------------------------------------------------------------------------------- - // Get file extension - const int iLen = ( int )_tcslen( szFilename ); - TCHAR * walk = szFilename + iLen - 1; - while( ( walk >= szFilename ) && ( *walk != TEXT( '.' ) ) ) walk--; - walk++; - - // --------------------------------------------------------------------------------------- - const int iExtLen = ( int )_tcslen( walk ); - TCHAR * szExt = new TCHAR[ iExtLen + 1 ]; - memcpy( szExt, walk, iExtLen * sizeof( TCHAR ) ); - szExt[ iExtLen ] = TEXT( '\0' ); - - // --------------------------------------------------------------------------------------- - // Compare the extension to the supported extension by the current input plugins - map ::iterator iter = - ext_map.find( szExt ); - delete [] szExt; - if( iter == ext_map.end() ) - { - Console::Append( TEXT( "ERROR: Extension not supported" ) ); - Console::Append( " " ); - NOTICE_LOG(AUDIO,"OpenPlay > ERROR: Extension not supported\n"); - return false; - } - // --------------------------------------------------------------------------------------- - // Now that we know which input pugin to use we set that one as active - InputPlugin * old_input = active_input_plugin; // Save the last one, if any - active_input_plugin = iter->second; - NOTICE_LOG(AUDIO,"OpenPlay > Input plugin '%s' activated\n", active_input_plugin->GetFilename()); - // ======================================================================================= - - if( old_input ) - { - // if( active_input_plugin != old_input ) ----> TODO unload old plugin - - // Some output plugins require a call to Close() before each - // call to Open(). Calling Input::Stop() will make the input plugin - // call Output::Close() and thus solve this problem. - old_input->plugin->Stop(); - } - - if( !active_input_plugin->plugin ) - { - Console::Append( TEXT( "ERROR: Input plugin is NULL" ) ); - Console::Append( " " ); - NOTICE_LOG(AUDIO,"OpenPlay > ERROR: Input plugin is NULL\n"); - return false; - } - - // Connect - //NOTICE_LOG(AUDIO, "OpenPlay > OutMod\n" ); - active_input_plugin->plugin->outMod = &output_server; // output->plugin; - - // ======================================================================================= - // Re-apply volume and panning - //active_input_plugin->plugin->SetVolume( iCurVol ); - //active_input_plugin->plugin->SetPan( iCurPan ); - //Playback::Eq::Reapply(); - // ======================================================================================= - - // Play - -#ifdef PA_UNICODE - // Filename - const int iFilenameLen = _tcslen( szFilename ); - char * szTemp = new char[ iFilenameLen + 1 ]; - ToAnsi( szTemp, szFilename, iFilenameLen ); - szTemp[ iFilenameLen ] = '\0'; - - // Ansi Title - char szAnsiTitle[ 2000 ] = "\0"; - int length_in_ms; - active_input_plugin->plugin->GetFileInfo( szTemp, szAnsiTitle, &length_in_ms ); - const int iAnsiTitleLen = strlen( szAnsiTitle ); - - // Unicode title - TCHAR szTitle[ 2000 ]; - ToTchar( szTitle, szAnsiTitle, iFilenameLen, iAnsiTitleLen ); - szTitle[ iAnsiTitleLen ] = TEXT( "\0" ); - - active_input_plugin->plugin->Play( szTemp ); - delete [] szTemp; -#else - // ======================================================================================= - // Play the file - // --------------------------------------------------------------------------------------- - // Title - TCHAR szTitle[ 2000 ] = TEXT( "\0" ); - int length_in_ms; - - //NOTICE_LOG(AUDIO, "OpenPlay > GetFileInfo\n" ); - active_input_plugin->plugin->GetFileInfo( szFilename, szTitle, &length_in_ms ); - - //NOTICE_LOG(AUDIO, "OpenPlay > Play\n" ); - active_input_plugin->plugin->Play( szFilename ); - // ======================================================================================= -#endif - - bPlaying = true; - bPaused = false; - - // ======================================================================================= - // Title - - //TCHAR szBuffer[ 5000 ]; - //_stprintf( szBuffer, TEXT( "%i. %s - Plainamp" ), iNumber, szTitle ); - //SetWindowText( WindowMain, szBuffer ); - // ======================================================================================= - - /* - TCHAR * szBasename = szFilename + uLen - 1; - while( ( szBasename > szFilename ) && ( *szBasename != TEXT( '\\' ) ) ) szBasename--; - szBasename++; - */ - - // Timer ON - //EnableTimer( true ); - - //NOTICE_LOG(AUDIO, "OpenPlay > End\n" ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback_PrevOrNext( bool bPrevOrNext ) -{ - // todo: prev/next in pause mode? - - if( !active_input_plugin ) return false; - if( !active_input_plugin->plugin ) return false; - - int iNextIndex = playlist->GetCurIndex(); - int iMaxIndex = playlist->GetMaxIndex(); - if( iMaxIndex < 0 || iNextIndex < 0 ) return false; - - bool res; - if( bPrevOrNext ) - res = Playback::Order::Prev( iNextIndex, iMaxIndex ); - else - res = Playback::Order::Next( iNextIndex, iMaxIndex ); - - if( res ) - { - if( bPlaying ) - { - // NOT TWICE active_input_plugin->plugin->Stop(); - bPlaying = false; - bPaused = false; - - // Timer OFF - EnableTimer( false ); - } - - TCHAR * szFilename = Playlist::GetFilename( iNextIndex ); - if( !szFilename ) return false; - - playlist->SetCurIndex( iNextIndex ); - - return OpenPlay( szFilename, iNextIndex + 1 ); - } - else - { - return false; - } - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Prev() -{ - return Playback_PrevOrNext( true ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -// Play the file -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Play() -{ - static int iLastIndex = -1; - - // --------------------------------------------------------------------------------------- - - #ifndef NOGUI - TCHAR sszBuffer[ 5000 ]; - _stprintf( sszBuffer, TEXT( "Playback::Play() with bPlaying <%i>\n" ), bPlaying ); - Console::Append( sszBuffer ); - Console::Append( TEXT( " " ) ); - #else - //NOTICE_LOG(AUDIO, "Playback::Play() > Begin <%i>\n" , bPlaying ); - #endif - // --------------------------------------------------------------------------------------- - - // --------------------------------------------------------------------------------------- - if( bPlaying ) // If we are currently playing a file - { - if( !active_input_plugin ) return false; - if( !active_input_plugin->plugin ) return false; - - const int iIndex = playlist->GetCurIndex(); - if( iIndex < 0 ) return false; - - /* - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "OLD [%i] NEW [%i]" ), iLastIndex, iIndex ); - SetWindowText( WindowMain, szBuffer ); - */ - - // If we are not playing the same track/file as before - TCHAR * szFilename = Playlist::GetFilename( iIndex ); - if( szFilename != szCurrentFilename ) - { - // New track! - - // Stop - // NOT TWICE active_input_plugin->plugin->Stop(); - - // Timer OFF - //EnableTimer( false ); - - // Get filename - if( !szFilename ) - { - Console::Append( TEXT( "ERROR: Could not resolve filename" ) ); - Console::Append( " " ); - return false; - } - - // Play - iLastIndex = iIndex; - bPlaying = OpenPlay( szFilename, iIndex + 1 ); - bPaused = false; - } - else - { - // Same track! - if( bPaused ) - { - // Unpause - active_input_plugin->plugin->UnPause(); - bPaused = false; - - // Timer ON - //EnableTimer( true ); - } - else - { - // Restart at beginning - active_input_plugin->plugin->SetOutputTime( 0 ); - } - } - } - // ======================================================================================= - else // we are not currently playing - { - const int iIndex = playlist->GetCurIndex(); - if( iIndex < 0 ) return false; - - // Get filename - TCHAR * szFilename = Playlist::GetFilename( iIndex ); - - // ======================================================================================= - - - //bool bPlaying = false; - //TCHAR * szFilename = TEXT("C:\Files\Spel och spelfusk\Console\Gamecube\Code\vgmstream (isolate ast)\Music\demo36_02.ast"); - //bPlaying = OpenPlay( szFilename, 1 ); - //bPlaying = OpenPlay( szFilename, iIndex + 1 ); - //Console::Append( TEXT( "Playback.cpp:Playback::Play() called OpenPlay" ) ); - - // ======================================================================================= - - if( !szFilename ) - { - Console::Append( TEXT( "ERROR: Could not resolve filename" ) ); - Console::Append( " " ); - return false; - } - #ifndef NOGUI - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Playback.cpp: Play() got the filename <%s>" ), szFilename); - Console::Append( szBuffer ); - //Console::Append( TEXT( " " ) ); - #else - //NOTICE_LOG(AUDIO, "Playback::Play() > Filename <%s>\n", szFilename); - #endif - - // Play - iLastIndex = iIndex; - bPlaying = OpenPlay( szFilename, iIndex + 1 ); - bPaused = false; - } - return true; -} -// ======================================================================================= - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Pause() -{ - if( !bPlaying ) return false; - if( !active_input_plugin ) return false; - if( !active_input_plugin->plugin ) return false; - - if( bPaused ) - { - // Unpause - active_input_plugin->plugin->UnPause(); - bPaused = false; - - // Timer ON - //EnableTimer( true ); - } - else - { - // Pause - active_input_plugin->plugin->Pause(); - bPaused = true; - - // Timer OFF - //EnableTimer( false ); - } - -// Console::Append( TEXT( "Playback::Pause" ) ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Stop() -{ - if( !bPlaying ) return false; - - // --------------------------------------------------------------------------------------- - // Stop - if( active_input_plugin && active_input_plugin->plugin ) - { - active_input_plugin->plugin->Stop(); - } - active_input_plugin = NULL; // QUICK FIX - // --------------------------------------------------------------------------------------- - - bPlaying = false; - bPaused = false; - - // Timer OFF > It was never turned on - //EnableTimer( false ); - - // Reset seekbar > We don't need this - //Playback::UpdateSeek(); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Next() -{ - return Playback_PrevOrNext( false ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::IsPlaying() -{ - return bPlaying; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::IsPaused() -{ - return bPaused; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -//int getlength(); -//int getoutputtime(); - -bool Playback::UpdateSeek() -{ -#ifdef NOGUI - printf( "Playback::UpdateSeek > Begin\n" ); - if( active_input_plugin ) - { - printf( "GetLength() > Begin\n" ); - const int ms_len = active_input_plugin->plugin->GetLength(); - //const int ms_cur = active_input_plugin->plugin->GetOutputTime(); - - //const int ms_len = getlength(); - //const int ms_cur = getoutputtime(); - - //printf( "Current position is <%i of %i>\n", ms_cur, ms_len ); - } - return true; -#else - static bool bSliderEnabledBefore = false; - bool bSliderEnabledAfter; - - - //if( !WindowSeek ) return false; - - int iVal = 0; - - // If it has not been set - if( !active_input_plugin || !active_input_plugin->plugin ) - { - if( bSliderEnabledBefore ) - { - // Update slider - PostMessage( WindowSeek, TBM_SETPOS, ( WPARAM )( TRUE ), iVal ); - - // Disable slider - EnableWindow( WindowSeek, FALSE ); - bSliderEnabledBefore = false; - } - } - else - { - const int ms_len = active_input_plugin->plugin->GetLength(); - if( ms_len ) - { - const int ms_cur = active_input_plugin->plugin->GetOutputTime(); - iVal = ( ms_cur * 1000 ) / ms_len; - - if( iVal > 1000 ) iVal = 0; - - // ======================================================================================= - //TCHAR szBuffer[ 5000 ]; - //_stprintf( szBuffer, TEXT( "Current position is <%i of %i>" ), ms_cur, ms_len ); - //Console::Append( szBuffer ); - //Console::Append( TEXT( " " ) ); - printf( "Current position is <%i of %i>\n", ms_cur, ms_len ); - // ======================================================================================= - } - - - - if( !bSliderEnabledBefore ) - { - EnableWindow( WindowSeek, TRUE ); - bSliderEnabledBefore = true; - } - - // Update slider - PostMessage( WindowSeek, TBM_SETPOS, ( WPARAM )( TRUE ), iVal ); - } - - return true; -#endif -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playback::PercentToMs( float fPercent ) -{ - if( !active_input_plugin ) return -1; - if( !active_input_plugin->plugin ) return -1; - - const int ms_len = active_input_plugin->plugin->GetLength(); - const int ms_res = ( int )( ms_len * fPercent / 100.0f ); - return ms_res; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::SeekPercent( float fPercent ) -{ - // TODO update slider, NOT HERE!!! - - if( !bPlaying ) return false; - if( bPaused ) return false; // TODO: apply seek when unpausing - if( !active_input_plugin ) return false; - if( !active_input_plugin->plugin ) return false; - - if( fPercent < 0.0f ) - fPercent = 0.0f; - else if( fPercent > 100.0f ) - fPercent = 100.0f; - - const int ms_len = active_input_plugin->plugin->GetLength(); - const int ms_cur = ( int )( ms_len * fPercent / 100.0f ); - active_input_plugin->plugin->SetOutputTime( ms_cur ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool SeekRelative( int ms ) -{ - if( !bPlaying ) return false; - if( bPaused ) return false; // TODO: apply seek when unpausing - if( !active_input_plugin ) return false; - if( !active_input_plugin->plugin ) return false; - - const int ms_len = active_input_plugin->plugin->GetLength(); - const int ms_old = active_input_plugin->plugin->GetOutputTime(); - int ms_new = ms_old + ms; - - if( ms_new < 0 ) - ms_new = 0; - else if( ms_new > ms_len ) - ms_new = ms_len; - - if( ms_new == ms_old ) return true; - active_input_plugin->plugin->SetOutputTime( ms_new ); - - /* - // PROGRESS - // PostMessage( hwnd, PBM_SETPOS , ( WPARAM )( iVal ), 0 ); - // TARCKBAR - PostMessage( wnd_pos, TBM_SETPOS, ( WPARAM )( TRUE ), ms_cur * 1000 / ms_len ); - */ - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Forward() -{ - return SeekRelative( 5000 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Rewind() -{ - return SeekRelative( -5000 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void Playback::NotifyTrackEnd() -{ - bPlaying = false; - bPaused = false; - - // Timer - EnableTimer( false ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playback::Volume::Get() -{ - return iCurVol; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline void Playback_Volume_Set( int iVol ) -{ - if( active_input_plugin && active_input_plugin->plugin ) - { - active_input_plugin->plugin->SetVolume( iVol ); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Volume::Set( int iVol ) -{ - const int iCurVolBackup = iCurVol; - iCurVol = iVol; - ciCurVol.MakeValidPull(); - - if( iCurVol != iCurVolBackup ) - { - Playback_Volume_Set( iCurVol ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Volume::Up() -{ - if( ciCurVol.IsMax() ) return true; - - const int iCurVolBackup = iCurVol; - iCurVol += VOLUME_STEP; - ciCurVol.MakeValidPull(); - - if( iCurVol != iCurVolBackup ) - { - Console::Append( TEXT( "Volume UP" ) ); - Playback_Volume_Set( iCurVol ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Volume::Down() -{ - if( ciCurVol.IsMin() ) return true; - - const int iCurVolBackup = iCurVol; - iCurVol -= VOLUME_STEP; - ciCurVol.MakeValidPull(); - - if( iCurVol != iCurVolBackup ) - { - Console::Append( TEXT( "Volume DOWN" ) ); - Playback_Volume_Set( iCurVol ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playback::Pan::Get() -{ - return iCurPan; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Pan::Set( int iPan ) -{ - const int iCurPanBackup = iCurPan; - iCurPan = iPan; - ciCurPan.MakeValidPull(); - - if( ( iCurPan != iCurPanBackup ) && active_input_plugin && active_input_plugin->plugin ) - { - active_input_plugin->plugin->SetPan( iCurPan ); - } - - return true; -} diff --git a/Externals/MusicMod/Player/Src/Playback.h b/Externals/MusicMod/Player/Src/Playback.h deleted file mode 100644 index 558b191d1d..0000000000 --- a/Externals/MusicMod/Player/Src/Playback.h +++ /dev/null @@ -1,106 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_PLAYBACK_H -#define PA_PLAYBACK_H - - - -#include "Global.h" - - - -#define ORDER_SINGLE 0 -#define ORDER_SINGLE_REPEAT 1 -#define ORDER_NORMAL 2 -#define ORDER_NORMAL_REPEAT 3 -#define ORDER_INVERSE 4 -#define ORDER_INVERSE_REPEAT 5 -#define ORDER_RANDOM 6 - -#define ORDER_FIRST ORDER_SINGLE -#define ORDER_LAST ORDER_RANDOM - -#define ORDER_DEFAULT ORDER_NORMAL_REPEAT - - -#define TIMER_SEEK_UPDATE 1 - - - -typedef bool ( * PresetCallback )( TCHAR * ); - - -namespace Playback -{ - bool Prev(); - bool Play(); - bool Pause(); - bool Stop(); - bool Next(); - - bool IsPlaying(); - bool IsPaused(); - - bool UpdateSeek(); - int PercentToMs( float fPercent ); - bool SeekPercent( float fPercent ); - bool Forward(); - bool Rewind(); - - void NotifyTrackEnd(); - - namespace Volume - { - int Get(); - bool Set( int iVol ); - bool Up(); - bool Down(); - }; - - namespace Pan - { - int Get(); - bool Set( int iPan ); - }; - - namespace Order - { - int GetCurMode(); - bool SetMode( int iMode ); - - TCHAR * GetModeName( int iMode ); -// int GetModeNameLen( int iMode ); - - bool Next( int & iCur, int iMax ); - bool Prev( int & iCur, int iMax ); - }; - - namespace Eq - { - // 63 -> -12db - // 31 -> 0 - // 0 -> +12db - // bool Get( char * eq_data ); - // bool Set( bool bOn, char * pData, int iPreamp ); - int GetCurIndex(); - bool SetIndex( int iPresetIndex ); - - bool Reapply(); - - bool ReadPresets( PresetCallback AddPreset ); - }; -}; - - - -#endif // PA_PLAYBACK_H diff --git a/Externals/MusicMod/Player/Src/PlaybackEq.cpp b/Externals/MusicMod/Player/Src/PlaybackEq.cpp deleted file mode 100644 index ee779e5545..0000000000 --- a/Externals/MusicMod/Player/Src/PlaybackEq.cpp +++ /dev/null @@ -1,223 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Playback.h" -#include "InputPlugin.h" -#include "Console.h" -#include "Config.h" -#include - -using namespace std; - - - -vector eq_vec; - - - -// Note: CurPresetFixed will be renamed to CurPreset when -// custom presets are implemented. This hopefully avoids -// migration trouble. - -int iCurPreset; // -1 means EQ off -ConfInt ciCurPreset( &iCurPreset, TEXT( "CurPresetFixed" ), CONF_MODE_INTERNAL, -1 ); - -bool bPreventDistortion; // Automatic preamp adjustment -ConfBool cbPreventDistortion( &bPreventDistortion, TEXT( "PreventDistortion" ), CONF_MODE_PUBLIC, true ); - - - -//////////////////////////////////////////////////////////////////////////////// -// PRE valid index -//////////////////////////////////////////////////////////////////////////////// -void Playback_Eq_Set( int iPresetIndex ) -{ - if( active_input_plugin && active_input_plugin->plugin ) - { - if( iPresetIndex == -1 ) // == EQ disabled - { - char data[ 10 ] = { 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 }; - active_input_plugin->plugin->EQSet( 0, data, 31 ); - } - else - { - char data[ 10 ]; - memcpy( data, eq_vec[ iPresetIndex ], sizeof( char ) * 10 ); - - if( bPreventDistortion ) - { - // Search minimum (most amplifying band) - int iMin = 63; - int i; - for( i = 0; i < 10; i++ ) - { - if( data[ i ] < iMin ) iMin = data[ i ]; - } - - if( iMin < 31 ) // Possible distortion - { - // Adjust preamp to prevent distortion - active_input_plugin->plugin->EQSet( 1, data, 31 + ( 31 - iMin ) ); - } - else - { - if( iMin > 31 ) // Lower than necessary - { - // Push to zero level so we get - // more volume without distortion - const int iSub = iMin - 31; - for( i = 0; i < 10; i++ ) - { - data[ i ] -= iSub; - } - } - active_input_plugin->plugin->EQSet( 1, data, 31 ); - } - } - else - { - active_input_plugin->plugin->EQSet( 1, data, 31 ); - } - } - } -} - - - -/* -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Eq::Set( bool bOn, char * pData, int iPreamp ) -{ - if( active_input_plugin && active_input_plugin->plugin ) - { - char data[ 10 ]; - memcpy( data, pData, sizeof( char ) * 10 ); - active_input_plugin->plugin->EQSet( bOn ? 1 : 0, data, iPreamp ); - } - return true; -} -*/ - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playback::Eq::GetCurIndex() -{ - return iCurPreset; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Eq::SetIndex( int iPresetIndex ) -{ - if( iPresetIndex >= ( int )eq_vec.size() ) return false; - Playback_Eq_Set( iPresetIndex ); - iCurPreset = iPresetIndex; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Eq::Reapply() -{ - Playback_Eq_Set( iCurPreset ); - return true; -} - - - -// Note: Most of these are the exact presets used in Winamp. -// I do not expect any legal trouble with this but -// in case I am wrong please let me know and I will -// remove them. - -char eq_classical [ 10 ] = { 31, 31, 31, 31, 31, 31, 44, 44, 44, 48 }; -char eq_club [ 10 ] = { 31, 31, 26, 22, 22, 22, 26, 31, 31, 31 }; -char eq_dance [ 10 ] = { 16, 20, 28, 32, 32, 42, 44, 44, 32, 32 }; -char eq_full_bass [ 10 ] = { 16, 16, 16, 22, 29, 39, 46, 49, 50, 50 }; -char eq_full_bass_treble[ 10 ] = { 20, 22, 31, 44, 40, 29, 18, 14, 12, 12 }; -char eq_full_treble [ 10 ] = { 48, 48, 48, 39, 27, 14, 6, 6, 6, 4 }; -char eq_headphones [ 10 ] = { 24, 14, 23, 38, 36, 29, 24, 16, 11, 8 }; -char eq_laptop [ 10 ] = { 24, 14, 23, 38, 36, 29, 24, 16, 11, 8 }; -char eq_large_hall [ 10 ] = { 15, 15, 22, 22, 31, 40, 40, 40, 31, 31 }; -char eq_live [ 10 ] = { 40, 31, 25, 23, 22, 22, 25, 27, 27, 28 }; -char eq_more_bass [ 10 ] = { 22, 22, 22, 22, 22, 22, 26, 31, 31, 31 }; -char eq_party [ 10 ] = { 20, 20, 31, 31, 31, 31, 31, 31, 20, 20 }; -char eq_pop [ 10 ] = { 35, 24, 20, 19, 23, 34, 36, 36, 35, 35 }; -char eq_reggae [ 10 ] = { 31, 31, 33, 42, 31, 21, 21, 31, 31, 31 }; -char eq_rock [ 10 ] = { 19, 24, 41, 45, 38, 25, 17, 14, 14, 14 }; -char eq_ska [ 10 ] = { 36, 40, 39, 33, 25, 22, 17, 16, 14, 16 }; -char eq_soft [ 10 ] = { 24, 29, 34, 36, 34, 25, 18, 16, 14, 12 }; -char eq_soft_rock [ 10 ] = { 25, 25, 28, 33, 39, 41, 38, 33, 27, 17 }; -char eq_techno [ 10 ] = { 19, 22, 31, 41, 40, 31, 19, 16, 16, 17 }; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Eq::ReadPresets( PresetCallback AddPreset ) -{ - if( AddPreset == NULL ) return false; - - eq_vec.push_back( eq_classical ); AddPreset( TEXT( "Classical" ) ); - eq_vec.push_back( eq_club ); AddPreset( TEXT( "Club" ) ); - eq_vec.push_back( eq_dance ); AddPreset( TEXT( "Dance" ) ); - eq_vec.push_back( eq_full_bass ); AddPreset( TEXT( "Full Bass" ) ); - eq_vec.push_back( eq_full_bass_treble ); AddPreset( TEXT( "Full Bass & Treble" ) ); - eq_vec.push_back( eq_full_treble ); AddPreset( TEXT( "Full Treble" ) ); - eq_vec.push_back( eq_headphones ); AddPreset( TEXT( "Headphones" ) ); - eq_vec.push_back( eq_laptop ); AddPreset( TEXT( "Laptop Speakers" ) ); - eq_vec.push_back( eq_large_hall ); AddPreset( TEXT( "Large Hall" ) ); - eq_vec.push_back( eq_live ); AddPreset( TEXT( "Live" ) ); - eq_vec.push_back( eq_more_bass ); AddPreset( TEXT( "More Bass" ) ); - eq_vec.push_back( eq_party ); AddPreset( TEXT( "Party" ) ); - eq_vec.push_back( eq_pop ); AddPreset( TEXT( "Pop" ) ); - eq_vec.push_back( eq_reggae ); AddPreset( TEXT( "Reggae" ) ); - eq_vec.push_back( eq_rock ); AddPreset( TEXT( "Rock" ) ); - eq_vec.push_back( eq_ska ); AddPreset( TEXT( "Ska" ) ); - eq_vec.push_back( eq_soft ); AddPreset( TEXT( "Soft" ) ); - eq_vec.push_back( eq_soft_rock ); AddPreset( TEXT( "Soft Rock" ) ); - eq_vec.push_back( eq_techno ); AddPreset( TEXT( "Techno" ) ); - - // Fix invalid indices - if( iCurPreset < -1 ) - { - iCurPreset = -1; - } - else - { - const int iLen = ( int )eq_vec.size(); - if( iCurPreset >= iLen ) - { - iCurPreset = iLen - 1; - } - } - - // TODO load/save eqf files - // GPL eqf loading from koders.com - // equalizer.c / xmms2 A Gtk2 port of xmms.(xmms2) - // equalizer.c / Digital Disco System(dds) - - return true; -} diff --git a/Externals/MusicMod/Player/Src/PlaybackOrder.cpp b/Externals/MusicMod/Player/Src/PlaybackOrder.cpp deleted file mode 100644 index 50e09a5da2..0000000000 --- a/Externals/MusicMod/Player/Src/PlaybackOrder.cpp +++ /dev/null @@ -1,205 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - - -#include "Playback.h" -#include "Config.h" -#include -#include - - - -int iCurOrder = ORDER_DEFAULT; -ConfIntMinMax ciCurOrder( &iCurOrder, TEXT( "Order" ), CONF_MODE_INTERNAL, ORDER_DEFAULT, ORDER_FIRST, ORDER_LAST ); - -bool bRandomReady = false; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playback::Order::GetCurMode() -{ - return iCurOrder; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Order::SetMode( int iMode ) -{ - iCurOrder = iMode; - ciCurOrder.MakeValidDefault(); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -TCHAR * Playback::Order::GetModeName( int iMode ) -{ - switch( iMode ) - { - case ORDER_SINGLE: return TEXT( " Single" ); - case ORDER_SINGLE_REPEAT: return TEXT( " Single + Repeat" ); - case ORDER_NORMAL: return TEXT( " Normal" ); - case ORDER_NORMAL_REPEAT: return TEXT( " Normal + Repeat" ); - case ORDER_INVERSE: return TEXT( " Inverse" ); - case ORDER_INVERSE_REPEAT: return TEXT( " Inverse + Repeat" ); - case ORDER_RANDOM: return TEXT( " Random" ); - default: return NULL; - } -} - -/* -int Playback::Order::GetModeNameLen( int iMode ) -{ - switch( uMode ) - { - case ORDER_SINGLE: return 7; - case ORDER_SINGLE_REPEAT: return 16; - case ORDER_NORMAL: return 7; - case ORDER_NORMAL_REPEAT: return 16; - case ORDER_INVERSE: return 8; - case ORDER_INVERSE_REPEAT: return 17; - case ORDER_RANDOM: return 7; - default: return 0; - } -} -*/ - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool NextNormal( int & iCur, int iMax ) -{ - if( iCur >= iMax ) return false; - iCur++; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool NextNormalRepeat( int & iCur, int iMax ) -{ - if( iCur >= iMax ) - iCur = 0; - else - iCur++; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool NextInverse( int & iCur, int iMax ) -{ - if( iCur <= 0 ) return false; - iCur--; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool NextInverseRepeat( int & iCur, int iMax ) -{ - if( iCur <= 0 ) - iCur = iMax; - else - iCur--; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool NextRandom( int & iCur, int iMax ) -{ - if( iMax < 2 ) return false; - - if( !bRandomReady ) - { - srand( ( unsigned )time( NULL ) ); - bRandomReady = true; - } - - const int iNew = ( int )( rand() / ( float )RAND_MAX * iMax ); - if( iNew != iCur ) - iCur = iNew; - else - { - if( iCur >= iMax ) - iCur = 0; - else - iCur++; - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Order::Next( int & iCur, int iMax ) -{ - switch( iCurOrder ) - { - case ORDER_SINGLE: return false; - case ORDER_SINGLE_REPEAT: return true; - case ORDER_NORMAL: return NextNormal( iCur, iMax ); - case ORDER_NORMAL_REPEAT: return NextNormalRepeat( iCur, iMax ); - case ORDER_INVERSE: return NextInverse( iCur, iMax ); - case ORDER_INVERSE_REPEAT: return NextInverseRepeat( iCur, iMax ); - case ORDER_RANDOM: return NextRandom( iCur, iMax ); - default: return false; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playback::Order::Prev( int & iCur, int iMax ) -{ - switch( iCurOrder ) - { - case ORDER_SINGLE: return false; - case ORDER_SINGLE_REPEAT: return true; - case ORDER_NORMAL: return NextInverse( iCur, iMax ); - case ORDER_NORMAL_REPEAT: return NextInverseRepeat( iCur, iMax ); - case ORDER_INVERSE: return NextNormal( iCur, iMax ); - case ORDER_INVERSE_REPEAT: return NextNormalRepeat( iCur, iMax ); - case ORDER_RANDOM: return NextRandom( iCur, iMax ); - default: return false; - } -} - diff --git a/Externals/MusicMod/Player/Src/Player.cpp b/Externals/MusicMod/Player/Src/Player.cpp deleted file mode 100644 index 03be5a7cd7..0000000000 --- a/Externals/MusicMod/Player/Src/Player.cpp +++ /dev/null @@ -1,380 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - - -////////////////////////////////////////////////////////////////////////////////////////// -// Usage instructions -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ - -// ======================================================================================= -// Plugins -// --------------------------------------------------------------------------------------- -// Plainamp setup > The output plugin must be manually loaded and activated the first time it's used. -// After that the ini saves OutputPluginActive___out_wave_gpl.dll=1. Input plugins are automatically -// found, loaded and activated. -// ======================================================================================= - - -// ======================================================================================= -// The ini path szIniPath -// --------------------------------------------------------------------------------------- -/* We will get problems if the program can't find the ini settings. Plugins will not be loaded, - or loadedand then unloaded before activated, or not working. */ -// ======================================================================================= - -/////////////////////////////////// - - - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻ -#include -//#include "Unicode.h" -//#include "Output.h" -#include -#include - -#include "Global.h" // Local -#include "Font.h" -#include "InputPlugin.h" -#include "OutputPlugin.h" -#include "VisPlugin.h" -#include "DspPlugin.h" -#include "GenPlugin.h" -#include "Main.h" -#include "Rebar.h" -#include "Playlist.h" -#include "Status.h" -#include "PluginManager.h" -#include "Prefs.h" -#include "Config.h" -#include "Emabox/Emabox.h" -#include "Console.h" - -#include "PlayerExport.h" // DLL Player -///////////////////////// - - - -////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻ - - -// ------------------------- -// Keys -// --------- -#define PLUS_ALT ( FVIRTKEY | FALT ) -#define PLUS_CONTROL ( FVIRTKEY | FCONTROL ) -#define PLUS_CONTROL_ALT ( FVIRTKEY | FCONTROL | FALT ) -#define PLUS_CONTROL_SHIFT ( FVIRTKEY | FCONTROL | FSHIFT ) -#define PLUS_SHIFT ( FVIRTKEY | FSHIFT ) -// ------------- - - -HINSTANCE g_hInstance = NULL; // extern -HINSTANCE hInstance = NULL; // extern - -TCHAR * szHomeDir = NULL; // extern -int iHomeDirLen = 0; // extern - -TCHAR * szPluginDir = NULL; // extern -int iPluginDirLen = 0; // extern - - -// ------------------------- -/* Read global settings from the ini file. They are read from the ini file through Config.h. - Usage: ( &where to place it, the option name, public or private, default value) */ -// --------- -TCHAR szCurDir[ MAX_PATH + 1 ] = TEXT( "" ); -ConfCurDir ccdCurDir( szCurDir, TEXT( "CurDir" ) ); -// ------------------------- - -bool bWarnPluginsMissing; -ConfBool cbWarnPluginsMissing( &bWarnPluginsMissing, TEXT( "WarnPluginsMissing" ), CONF_MODE_PUBLIC, false ); - -bool bLoop; -ConfBool cbLoop( &bLoop, TEXT( "Loop" ), CONF_MODE_PUBLIC, false ); -///////////////////////// - - - -//////////////////////////////////////////////////////////////////////////////// -// The first function that is called by the exe -//////////////////////////////////////////////////////////////////////////////// -void Player_Main(bool Console) -{ - // ======================================================================================= - // Set variables - //g_hInstance = hInstance; - // ======================================================================================= - - //printf( "DLL > main_dll() opened" ); - - if (Console) Player_Console(true); - - //MessageBox(0, "main() opened", "", 0); - //printf( "main() opened\n" ); - NOTICE_LOG(AUDIO,"\n=========================================================\n\n\n" ); - //NOTICE_LOG(AUDIO, "DLL > Player_Main() > Begin\n" ); - NOTICE_LOG(AUDIO, "DLL > Settings:", bLoop); - - - // ======================================================================================= - // Load full config from ini file - //Conf::Init( hInstance ); - Conf::Init( ); - - // --------------------------------------------------------------------------------------- - - NOTICE_LOG(AUDIO, "DLL > Loop: %i", bLoop); - NOTICE_LOG(AUDIO, "DLL > WarnPluginsMissing: %i", bWarnPluginsMissing); - // --------------------------------------------------------------------------------------- - - // ======================================================================================= - - - // ======================================================================================= - /* Get home dir. We use the TCHAR type for the dirname to insure us against foreign letters - in the dirnames */ - szHomeDir = new TCHAR[ MAX_PATH + 1 ]; - iHomeDirLen = GetModuleFileName( NULL, szHomeDir, MAX_PATH ); - //if( !iHomeDirLen ) return 1; - - // --------------------------------------------------------------------------------------- - // Walk through the pathname and look for backslashes - TCHAR * walk = szHomeDir + iHomeDirLen - 1; - while( ( walk > szHomeDir ) && ( *walk != TEXT( '\\' ) ) ) walk--; - // --------------------------------------------------------------------------------------- - - walk++; - *walk = TEXT( '\0' ); - iHomeDirLen = walk - szHomeDir; - // ======================================================================================= - - - // ======================================================================================= - /* Get plugins dir. Notice to change the number 8 in two places below if the dir name - is changed */ - szPluginDir = new TCHAR[ MAX_PATH + 1 ]; - memcpy( szPluginDir, szHomeDir, iHomeDirLen * sizeof( TCHAR ) ); - memcpy( szPluginDir + iHomeDirLen, TEXT( "PluginsMusic" ), 12 * sizeof( TCHAR ) ); - szPluginDir[ iHomeDirLen + 12 ] = TEXT( '\0' ); - NOTICE_LOG(AUDIO,"DLL > Plugindir: %s", szPluginDir); - // ======================================================================================= - #ifndef NOGUI - Font::Create(); - //Console::Append( TEXT( "Winmain.cpp called Font::Create()" ) ); - #endif - - - // --------------------------------------------------------------------------------------- - // Set volume. This must probably be done after the dll is loaded. - //GlobalVolume = Playback::Volume::Get(); // Don't bother with this for now - //GlobalCurrentVolume = GlobalVolume; - //Output_SetVolume( GlobalVolume ); - NOTICE_LOG(AUDIO,"DLL > Volume: %i\n", GlobalVolume); - // --------------------------------------------------------------------------------------- - - - // ======================================================================================= - // The only thing this function currently does is creating the Playlist. - // ======================================================================================= - BuildMainWindow(); - - //addfiletoplaylist("c:\\zelda\\demo37_01.ast"); - //addfiletoplaylist("c:\\zelda\\demo36_02.ast"); - //Console::Append( TEXT( "Winmain.cpp called BuildMainWindow()" ) ); - - //Prefs::Create(); // This creates windows preferences - //Console::Append( TEXT( "Winmain.cpp called Prefs::Create()" ) ); - - // Find plugins - Plugin::FindAll ( szPluginDir, TEXT( "in_*.dll" ), true ); - Plugin::FindAll( szPluginDir, TEXT( "out_*.dll" ), false ); - Plugin::FindAll ( szPluginDir, TEXT( "vis_*.dll" ), false ); - Plugin::FindAll ( szPluginDir, TEXT( "dsp_*.dll" ), false ); - Plugin::FindAll ( szPluginDir, TEXT( "gen_*.dll" ), true ); - - //NOTICE_LOG(AUDIO, "Winmain.cpp > PluginManager::Fill()\n" ); - PluginManager::Fill(); - - //NOTICE_LOG(AUDIO, "Winmain.cpp > PluginManager::Fill()\n" ); - - - - // ======================================================================================= - - // Check plugin presence - // ======================================================================================= - - - // ======================================================================================= - - // Todo: all the rest... - // ACCEL accels[] = { - - // ======================================================================================= - - - - // ======================================================================================= - - //Playback::Play(); - //play_file("C:\\opening.hps"); - //play_file("C:\\Files\\Spel och spelfusk\\Console\\Gamecube\\Code\\Dolphin\\Binary\\win32\\evt_x_event_00.dsp"); - //printf("Winmain.cpp called Playback.cpp:Playback::Play()\n"); - - // ======================================================================================= - // ---- Set volume and get current location ---- - // Somehow we don't have access to active_input_plugin->plugin->GetLength() from here so - // we have to call it in Playback::UpdateSeek() instead - //Sleep(1000); - - //Playback::UpdateSeek(); - //Output_SetVolume( 100 ); // volume is better set from the ini file - // --------------------------------------------------------------------------------------- - // ======================================================================================= - - - // ======================================================================================= - // Check the plugins - if( input_plugins.empty() ) - { - NOTICE_LOG(AUDIO,"\n *** Warning: No valid input plugins found\n"); - } - else - { - NOTICE_LOG(AUDIO," >>> These valid input plugins were found:"); - for(int i = 0; i < input_plugins.size(); i++) - NOTICE_LOG(AUDIO," %i: %s", (i + 1), input_plugins.at(i)->GetFilename()); - NOTICE_LOG(AUDIO,"\n"); - } - - // The input plugins are never activated here, they are activate for each file - if( !active_input_plugin || !active_input_plugin->plugin ) - { - // NOTICE_LOG(AUDIO,"The input plugin is not activated yet\n"); - } - else - { - //const int ms_len = active_input_plugin->plugin->GetLength(); - //const int ms_cur = active_input_plugin->plugin->GetOutputTime(); - //NOTICE_LOG(AUDIO,"We are at <%i of %i>\n", ms_cur, ms_len); - } - // --------------------------------------------------------------------------------------- - if( active_output_count > 0 ) - { - // Show current playback progress - /*int res_temp; - for( int i = 0; i < active_output_count; i++ ) - { - res_temp = active_output_plugins[ i ]->plugin->GetOutputTime(); - } - NOTICE_LOG(AUDIO,"Playback progress <%i>\n", res_temp);*/ - } - else - { - NOTICE_LOG(AUDIO,"\n *** Warning: The output plugin is not working\n\n"); - } - // ======================================================================================= - - // ======================================================================================= - // Start the timer - if(!TimerCreated && bLoop) // Only create this the first time - { - //NOTICE_LOG(AUDIO,"Created the timer\n"); - MakeTime(); - TimerCreated = true; - } - // ======================================================================================= - - NOTICE_LOG(AUDIO, "\n=========================================================\n\n" ); - //NOTICE_LOG(AUDIO, "DLL > main_dll() > End\n\n\n" ); - - //std::cin.get(); -} - - - - - - -// ======================================================================================= -// Should I use this? -void close() -{ - - printf( "The Winmain.cpp message loop was reached\n" ); - - // Message loop - //std::cin.get(); - - Playback::Stop(); // If we don't call this before we unload the dll we get a crash - - printf("We are now past the message loop\n" ); - - //DestroyAcceleratorTable( hAccel ); - - - // ======================================================================================= - // Input - vector ::iterator iter_input = input_plugins.begin(); - while( iter_input != input_plugins.end() ) - { - ( *iter_input )->Unload(); - iter_input++; - } - - // Output - vector ::iterator iter_output = output_plugins.begin(); - while( iter_output != output_plugins.end() ) - { - ( *iter_output )->Unload(); - iter_output++; - } - - // General - vector ::iterator iter_gen = gen_plugins.begin(); - while( iter_gen != gen_plugins.end() ) - { - ( *iter_gen )->Unload(); - iter_gen++; - } - // ======================================================================================= - - - // TODO: create main::destroy - // UnregisterClass( PA_CLASSNAME, g_hInstance ); - - //Prefs::Destroy(); - - //Font::Destroy(); - -/* - delete [] szPluginDir; - delete [] szHomeDir; -*/ - - // --------------------------------------------------------------------------------------- - // We don't save any changes - //Conf::Write(); - - //printf("Winmain.cpp called Conf::Write(), the last function\n"); - // --------------------------------------------------------------------------------------- - - //std::cin.get(); // Let use see all messages - - //return 0; -} -// ======================================================================================= diff --git a/Externals/MusicMod/Player/Src/PlayerExport.cpp b/Externals/MusicMod/Player/Src/PlayerExport.cpp deleted file mode 100644 index acf23993f0..0000000000 --- a/Externals/MusicMod/Player/Src/PlayerExport.cpp +++ /dev/null @@ -1,183 +0,0 @@ - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻ -#include // System - -#include "Common.h" // Global common -#include "Log.h" - -//#include "../../Common/Src/Console.h" // Local common - -#include "OutputPlugin.h" // Local -#include "Playback.h" -#include "Playlist.h" - -#define _DLL_PLAYER_H_ -#include "PlayerExport.h" // DLL Player -////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻ -std::string CurrentlyPlayingFile; -int GlobalVolume = -1; -bool GlobalMute = false; -bool GlobalPause; -bool TimerCreated = false; -bool Initialized = false; -///////////////////////////////// - - -// ------------------------- -/* We keep the file in the playlist, even though we currently only ever have one file here - at a time */ -// --------- -void AddFileToPlaylist(char * a) -{ - //playlist->RemoveAll(); - - #include "unicode.h" - const int iLen = strlen(a); // I can't do this because I don't - - printf( "iLen <%i>\n", iLen ); - - // --------------------------------------------------------------------------------------- - // Do some string conversion - TCHAR * szKeep; - szKeep = new TCHAR[ iLen + 1 ]; - ToTchar( szKeep, a, iLen ); - szKeep[ iLen ] = TEXT( '\0' ); - playlist->PushBack( szKeep ); - // --------------------------------------------------------------------------------------- - - // If we added a second file the current index = -1 so we have to change that back - playlist->SetCurIndex( 0 ); -} - - - -void Player_Play(char * FileName) -{ - NOTICE_LOG(AUDIO,"Play file '%s'", FileName); - - // Check if the file exists - if(GetFileAttributes(FileName) == INVALID_FILE_ATTRIBUTES) - { - NOTICE_LOG(AUDIO,"Warning: The file '%s' does not exist. Something is wrong.", FileName); - return; - } - - Playback::Stop(); - //NOTICE_LOG(AUDIO,"Stop\n"); - playlist->RemoveAll(); - //NOTICE_LOG(AUDIO,"RemoveAll\n"); - AddFileToPlaylist(FileName); - //NOTICE_LOG(AUDIO,"addfiletoplaylist\n"); - - // Play the file - Playback::Play(); - - CurrentlyPlayingFile = FileName; - - // --------------------------------------------------------------------------------------- - // Set volume. This must probably be done after the dll is loaded. - //Output_SetVolume( Playback::Volume::Get() ); - //NOTICE_LOG(AUDIO,"Volume(%i)\n", Playback::Volume::Get()); - // --------------------------------------------------------------------------------------- - - GlobalPause = false; -} - -void Player_Stop() -{ - Playback::Stop(); - //NOTICE_LOG(AUDIO,"Stop\n"); - playlist->RemoveAll(); - - CurrentlyPlayingFile = ""; - - GlobalPause = false; -} - - -void Player_Pause() -{ - if (!GlobalPause) - { - NOTICE_LOG(AUDIO,"DLL > Pause\n"); - Playback::Pause(); - GlobalPause = true; - } - else - { - NOTICE_LOG(AUDIO,"DLL > UnPause from Pause\n"); - Player_Unpause(); - GlobalPause = false; - } -} - -void Player_Unpause() -{ - NOTICE_LOG(AUDIO,"DLL > UnPause\n"); - Playback::Play(); - GlobalPause = false; -} - - -////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻŻŻŻ -/* About the volume: The colume is normally update for the output plugin in Output.cpp and for the - inout plugin (why?) in Playback.cpp with Playback::Volume::Set(). But I don't know how that works - so I only use GlobalVolume to keep track of the volume */ -// ------------------------------ -void Player_Mute(int Vol) -{ - if(GlobalVolume == -1) GlobalVolume = Vol; - NOTICE_LOG(AUDIO,"DLL > Mute <%i> <%i>\n", GlobalVolume, GlobalMute); - - GlobalMute = !GlobalMute; - - // Set volume - if(GlobalMute) - { - Output_SetVolume( 0 ); - NOTICE_LOG(AUDIO,"DLL > Volume <%i>\n", GlobalMute); - } - else - { - Output_SetVolume( GlobalVolume ); - NOTICE_LOG(AUDIO,"DLL > Volume <%i>\n", GlobalMute); - } - - //NOTICE_LOG(AUDIO,"Volume(%i)\n", Playback::Volume::Get()); -} -/////////////////////////////////////// - - -void Player_Volume(int Vol) -{ - GlobalVolume = Vol; - Output_SetVolume( GlobalVolume ); - //NOTICE_LOG(AUDIO,"DLL > Volume <%i> <%i>\n", GlobalVolume, GlobalCurrentVolume); -} - -void ShowConsole() -{ - ConsoleListener *console = LogManager::GetInstance()->getConsoleListener(); - console->Open(100, 2000, "MusicMod"); -// Console::Open(100, 2000, "MusicMod", true); // give room for 2000 rows -} - - -void Player_Console(bool Console) -{ - if(Console) - ShowConsole(); - else - #if defined (_WIN32) - FreeConsole(); - #endif -} diff --git a/Externals/MusicMod/Player/Src/PlayerExport.h b/Externals/MusicMod/Player/Src/PlayerExport.h deleted file mode 100644 index 54ed9fba31..0000000000 --- a/Externals/MusicMod/Player/Src/PlayerExport.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - - -////////////////////////////////////////////////////////////////////////////////////////// -// Include -// ŻŻŻŻŻŻŻŻŻŻ - -////////////////////////////////// - - -// ------------------------- -// DLL Player -// --------- -void MakeTime(); -#ifndef _DLL_PLAYER_H_ - extern int GlobalVolume; - extern int GlobalCurrentVolume; - extern bool GlobalPause; - extern bool TimerCreated; -#endif - - -// Dll export -#define EXPORT __declspec(dllexport) -EXPORT void Player_Main(bool Console); -EXPORT void Player_Console(bool Console); -EXPORT void Player_Play(char *); -EXPORT void Player_Stop(); -EXPORT void Player_Pause(); -EXPORT void Player_Unpause(); -EXPORT void Player_Mute(int Vol); -EXPORT void Player_Volume(int Vol); - diff --git a/Externals/MusicMod/Player/Src/Playlist.cpp b/Externals/MusicMod/Player/Src/Playlist.cpp deleted file mode 100644 index 68060b72b4..0000000000 --- a/Externals/MusicMod/Player/Src/Playlist.cpp +++ /dev/null @@ -1,1383 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Playlist.h" -#include "AddDirectory.h" -#include "Rebar.h" -#include "Main.h" -#include "Status.h" -#include "Console.h" -#include "Font.h" -#include "Playback.h" -#include "InputPlugin.h" -#include "Prefs.h" -#include "Config.h" -#include "Unicode.h" -#include "Path.h" -#include "commdlg.h" - - - - - - - - -HWND WindowPlaylist = NULL; // extern -// WNDPROC WndprocPlaylistBackup = NULL; - -// int iCurIndex = -1; -// int iMaxIndex = -1; - - - -// LRESULT CALLBACK WndprocPlaylist( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); -void Playlist_SelectSingle( int iIndex ); - - -struct PlaylistEntry -{ - TCHAR * szFilename; - // More to come -}; - -/* -/////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playlist::GetCurIndex() -{ - return iCurIndex; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playlist::GetMaxIndex() -{ - return iMaxIndex; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::SetCurIndex( int iIndex ) -{ - if( iIndex < 0 || iIndex > iMaxIndex ) return false; - - iCurIndex = iIndex; - if( bPlaylistFollow ) - { - Playlist_SelectSingle( iCurIndex ); - } - - return true; -} -*/ - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::Create() -{ - if( WindowPlaylist ) return false; - - // If this is not called a crash occurs - PlaylistView::Create(); - - - #ifndef NOGUI - - RECT ClientMain; - GetClientRect( WindowMain, &ClientMain ); - - const int iClientHeight = ClientMain.bottom - ClientMain.top; - const int iClientWidth = ClientMain.right - ClientMain.left; - const int iPlaylistHeight = iClientHeight - iRebarHeight - iStatusHeight; - - WindowPlaylist = CreateWindowEx( - WS_EX_CLIENTEDGE, - TEXT( "LISTBOX" ), - NULL, - WS_VSCROLL | - LBS_DISABLENOSCROLL | - LBS_EXTENDEDSEL | - LBS_HASSTRINGS | - LBS_NOTIFY | - LBS_NOINTEGRALHEIGHT | - WS_CHILD | - WS_VISIBLE, // - 0, - iRebarHeight, // + -2, - iClientWidth, - iPlaylistHeight, - WindowMain, - NULL, - g_hInstance, - NULL - ); - - // Exchange window procedure - WndprocPlaylistBackup = ( WNDPROC )GetWindowLong( WindowPlaylist, GWL_WNDPROC ); - if( WndprocPlaylistBackup != NULL ) - { - SetWindowLong( WindowPlaylist, GWL_WNDPROC, ( LONG )WndprocPlaylist ); - } - - Font::Apply( WindowPlaylist ); - - #endif NOGUI - - - - TCHAR * szPlaylistMind = new TCHAR[ iHomeDirLen + 12 + 1 ]; - memcpy( szPlaylistMind, szHomeDir, iHomeDirLen * sizeof( TCHAR ) ); - memcpy( szPlaylistMind + iHomeDirLen, TEXT( "Plainamp.m3u" ), 12 * sizeof( TCHAR ) ); - - - - szPlaylistMind[ iHomeDirLen + 12 ] = TEXT( '\0' ); - - - Playlist::AppendPlaylistFile( szPlaylistMind ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline void Playlist_SelectSingle( int iIndex ) -{ - SendMessage( - WindowPlaylist, - LB_SETSEL, - FALSE, - -1 - ); - - SendMessage( - WindowPlaylist, - LB_SETSEL, - TRUE, - iIndex - ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline bool Playlist_IsSelected( int iIndex ) -{ - return ( 0 != SendMessage( - WindowPlaylist, - LB_GETSEL, - ( WPARAM )iIndex, - 0 - ) ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline bool Playlist_SelectModify( int iIndex, bool bSelected ) -{ - return ( LB_ERR != SendMessage( - WindowPlaylist, - LB_SETSEL, - ( WPARAM )( bSelected ? TRUE : FALSE ), - iIndex - ) ); -} - - -/* -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist_Remove( int iIndex ) -{ - if( iIndex < 0 || iIndex > iMaxIndex ) return false; - - // Get entry data - PlaylistEntry * entry = ( PlaylistEntry * )SendMessage( - WindowPlaylist, - LB_GETITEMDATA, - iIndex, - 0 - ); - - // Free data - if( entry ) - { - if( entry->szFilename ) delete [] entry->szFilename; - delete entry; - } - - SendMessage( - WindowPlaylist, - LB_DELETESTRING, - iIndex, - 0 - ); - - if( iIndex < iCurIndex ) - iCurIndex--; - if( ( iIndex == iCurIndex ) && ( iCurIndex == iMaxIndex ) ) - iCurIndex = iMaxIndex - 1; - iMaxIndex--; - - return true; -} -*/ - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline int Playlist_GetCount() -{ - return ( int )SendMessage( - WindowPlaylist, - LB_GETCOUNT, - 0, - 0 - ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline int Playlist_GetCaretIndex() -{ - return ( int )SendMessage( - WindowPlaylist, - LB_GETCARETINDEX, - 0, - 0 - ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline bool Playlist_SetCaretIndex( int iIndex ) -{ - return ( LB_OKAY == SendMessage( - WindowPlaylist, - LB_SETCARETINDEX, - ( WPARAM )iIndex, - FALSE - ) ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -inline int Playlist_GetSelCount() -{ - return ( int )SendMessage( - WindowPlaylist, - LB_GETSELCOUNT, - 0, - 0 - ); -} - - -/* -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playlist_MouseToIndex() -{ - POINT p; - GetCursorPos( &p ); - ScreenToClient( WindowPlaylist, &p ); - - int iIndex = ( int )SendMessage( - WindowPlaylist, - LB_ITEMFROMPOINT, - 0, - p.x | ( p.y << 16 ) - ); - - if( ( iIndex < 0 ) || ( iIndex > iMaxIndex ) ) - return -1; - else - return iIndex; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::Clear() -{ - if( iMaxIndex < 0 ) return false; - - int iCount = iMaxIndex + 1; - while( iCount-- ) - { - Playlist_Remove( iCount ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::RemoveSelected() -{ - int iSelCount = Playlist_GetSelCount(); - if( iSelCount < 0 ) return false; - - // Which items are selected? - int * sel = new int[ iSelCount ]; - LRESULT lResult = SendMessage( - WindowPlaylist, - LB_GETSELITEMS, - ( WPARAM )iSelCount, - ( LPARAM )sel - ); - - // Remove - if( lResult > 0 ) - { - while( lResult-- ) - { - int iIndex = sel[ lResult ]; - Playlist_Remove( iIndex ); - } - } - - delete [] sel; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::Crop() -{ - int iAllCount = Playlist_GetCount(); - if( iAllCount < 1 ) return false; - - int iSelCount = Playlist_GetSelCount(); - if( iSelCount < 0 ) - { - return false; - } - else if( iSelCount == 0 ) - { - // None selected - return Clear(); - } - - // Which items are selected? - int * sel = new int[ iSelCount ]; - LRESULT lResult = SendMessage( - WindowPlaylist, - LB_GETSELITEMS, - ( WPARAM )iSelCount, - ( LPARAM )sel - ); - - int iLowerEqualIndex = iSelCount - 1; - for( int i = iAllCount - 1; i >= 0; i-- ) - { - while( ( sel[ iLowerEqualIndex ] > i ) && ( iLowerEqualIndex > 0 ) ) - { - iLowerEqualIndex--; - } - - if( i != sel[ iLowerEqualIndex ] ) - { - // Not selected -> remove - Playlist_Remove( i ); - } - } - - delete [] sel; - return true; -} -*/ - -/* -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist_MoveSel( bool bUpOrDown ) -{ - static bool bMoving = false; - if( bMoving ) return false; - - bMoving = true; - - const int iSelCount = Playlist_GetSelCount(); - if( iSelCount < 0 ) - { - // No items selected - bMoving = false; - return false; - } - - // Which items are selected? - int * sel = new int[ iSelCount ]; - LRESULT lResult = SendMessage( - WindowPlaylist, - LB_GETSELITEMS, - ( WPARAM )iSelCount, - ( LPARAM )sel - ); - - if( lResult <= 0 ) - { - // Nothing to move - delete [] sel; - bMoving = false; - return false; - } - - if( ( bUpOrDown && ( sel[ 0 ] == 0 ) ) || - ( !bUpOrDown && ( sel[ iSelCount - 1 ] == iMaxIndex ) ) ) - { - // Cannot move - delete [] sel; - bMoving = false; - return false; - } - - const int iOldTop = ( int )SendMessage( - WindowPlaylist, - LB_GETTOPINDEX, - 0, - 0 - ); - - // 1 _2_[3][4][5] 6 7 [8] 9 - // --> 1 [3][4][5]_2_ 6 [8]_7_ 9 - - // Redrawing OFF - // SendMessage( WindowPlaylist, WM_SETREDRAW, ( WPARAM )FALSE, 0 ); - - int i = ( bUpOrDown ? 0 : iSelCount - 1 ); - do - { - // Backup the jumper - PlaylistEntry * entry_old = ( PlaylistEntry * )SendMessage( - WindowPlaylist, - LB_GETITEMDATA, - sel[ i ] + ( bUpOrDown ? -1 : 1 ), - 0 - ); - - do - { - // Copy on - PlaylistEntry * entry_new = ( PlaylistEntry * )SendMessage( - WindowPlaylist, - LB_GETITEMDATA, - sel[ i ], - 0 - ); - - int iDest = sel[ i ] + ( bUpOrDown ? -1 : 1 ); - - // Update entry display == delete, insert, set data - SendMessage( - WindowPlaylist, - LB_DELETESTRING, - iDest, - 0 - ); - iDest = ( int )SendMessage( - WindowPlaylist, - LB_INSERTSTRING, - iDest, - ( LPARAM )entry_new->szFilename - ); - SendMessage( - WindowPlaylist, - LB_SETITEMDATA, - iDest, - ( LPARAM )entry_new - ); - - if( sel[ i ] == iCurIndex ) - { - iCurIndex += ( bUpOrDown ? -1 : 1 ); - } - - i += ( bUpOrDown ? 1 : -1 ); - } while( bUpOrDown - ? - ( i < iSelCount ) && ( sel[ i - 1 ] + 1 == sel[ i ] ) - : - ( i >= 0 ) && ( sel[ i + 1 ] - 1 == sel[ i ] ) - ); - - // Place the jumper - int iLast = ( bUpOrDown ? sel[ i - 1 ] : sel[ i + 1 ] ); - - // Update entry display == delete, insert, set data - SendMessage( - WindowPlaylist, - LB_DELETESTRING, - iLast, - 0 - ); - iLast = ( int )SendMessage( - WindowPlaylist, - LB_INSERTSTRING, - iLast, - ( LPARAM )entry_old->szFilename - ); - SendMessage( - WindowPlaylist, - LB_SETITEMDATA, - iLast, - ( LPARAM )entry_old - ); - } while( bUpOrDown - ? - ( i < iSelCount ) - : - ( i >= 0 ) - ); - - // Select new indices (old selection went away on insert/delete - if( bUpOrDown ) - { - for( i = 0; i < iSelCount; i++ ) - SendMessage( WindowPlaylist, LB_SETSEL, TRUE, sel[ i ] - 1 ); - } - else - { - for( i = 0; i < iSelCount; i++ ) - SendMessage( WindowPlaylist, LB_SETSEL, TRUE, sel[ i ] + 1 ); - } - - // Prevent scrolling - SendMessage( - WindowPlaylist, - LB_SETTOPINDEX, - ( WPARAM )iOldTop, - 0 - ); - - // Redrawing ON - // SendMessage( WindowPlaylist, WM_SETREDRAW, ( WPARAM )TRUE, 0 ); - - - delete [] sel; - bMoving = false; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocPlaylist( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - - static bool bDragging = false; - static bool bMoveLock = false; - static int iDragStartY; - static int iItemHeight = 0x7fffffff; - - switch( message ) - { - case WM_MOUSEMOVE: - { - if( !bDragging || bMoveLock ) break; - bMoveLock = true; - - const int y = HIWORD( lp ); - const int diff = y - iDragStartY; - if( abs( diff ) > iItemHeight / 2 ) - { - iDragStartY += ( ( diff > 0 ) ? iItemHeight : -iItemHeight ); - Playlist_MoveSel( diff < 0 ); - } - - bMoveLock = false; - break; - } - - case WM_LBUTTONDOWN: - { - if( GetKeyState( VK_MENU ) >= 0 ) break; - - // Dragging ON - iDragStartY = HIWORD( lp ); - iItemHeight = ( int )SendMessage( - WindowPlaylist, - LB_GETITEMHEIGHT, - 0, - 0 - ); - bDragging = true; - - return 0; - } - - case WM_LBUTTONUP: - // Dragging OFF - bDragging = false; - break; - - case WM_SYSKEYDOWN: - switch( wp ) // [Alt]+[...] - { - case VK_UP: - Playlist_MoveSel( true ); - break; - - case VK_DOWN: - Playlist_MoveSel( false ); - break; - } - break; - - case WM_CHAR: - case WM_KEYUP: - // SMALL LETTERS!!!!!! - switch( wp ) - { - case 'z': - case 'y': - case 'x': - case 'c': - case 'v': - case 'b': - case 'l': - return 0; - } - break; - - case WM_KEYDOWN: - { - const bool bShift = ( ( GetKeyState( VK_SHIFT ) & 0x8000 ) != 0 ); - const bool bControl = ( ( GetKeyState( VK_CONTROL ) & 0x8000 ) != 0 ); - // const bool bAlt = ( ( GetKeyState( VK_MENU ) & 0x8000 ) != 0 ); - - - switch( wp ) - { - case VK_LEFT: - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_REW5S, 0 ); - return 0; - - case VK_RIGHT: - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_FFWD5S, 0 ); - return 0; - - case VK_UP: - if( bControl && !bShift ) - { - // Move caret not selection - const int iCaretBefore = Playlist_GetCaretIndex(); - if( iCaretBefore > 0 ) - { - Playlist_SetCaretIndex( iCaretBefore - 1 ); - } - else if( ( iCaretBefore == 0 ) && bInfinitePlaylist ) - { - Playlist_SetCaretIndex( iMaxIndex ); - } - return 0; - } - else - { - if( bInfinitePlaylist ) - { - if( Playlist_GetCaretIndex() != 0 ) break; - Playlist_SelectSingle( iMaxIndex ); - return 0; // Or it will increase one more - } - } - break; - - case VK_DOWN: - if( bControl && !bShift ) - { - // Move caret not selection - const int iCaretBefore = Playlist_GetCaretIndex(); - if( ( iCaretBefore < iMaxIndex ) && ( iCaretBefore >= 0 ) ) - { - Playlist_SetCaretIndex( iCaretBefore + 1 ); - } - else if( ( iCaretBefore == iMaxIndex ) && bInfinitePlaylist ) - { - Playlist_SetCaretIndex( 0 ); - } - return 0; - } - else - { - if( bInfinitePlaylist ) - { - if( Playlist_GetCaretIndex() != iMaxIndex ) break; - Playlist_SelectSingle( 0 ); - return 0; // Or it will increase one more - } - } - break; - - case VK_SPACE: - if( bControl && !bShift ) - { - const int iCaret = Playlist_GetCaretIndex(); - if( iCaret == -1 ) return 0; - bool bSelected = Playlist_IsSelected( iCaret ); - Playlist_SelectModify( iCaret, !bSelected ); - } - return 0; - - case VK_DELETE: - { - if( bShift ) break; - - if( bControl ) - playlist->RemoveSelected( false ); - else - playlist->RemoveSelected( true ); - - break; - } - - case VK_RETURN: - iCurIndex = Playlist_GetCaretIndex(); - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON2, 0 ); - return 0; - - case 'Y': - case 'Z': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON1, 0 ); - return 0; - - case 'X': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON2, 0 ); - return 0; - - case 'C': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON3, 0 ); - return 0; - - case 'V': - // Todo modifiers pressed? -> fadeout/... - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON4, 0 ); - return 0; - - case 'B': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON5, 0 ); - return 0; - / - case 'J': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_JUMPFILE, 0 ); - return 0; - / - case 'L': - if( bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, bShift ? WINAMP_FILE_DIR : WINAMP_FILE_PLAY, 0 ); - return 0; - } - break; - } - - case WM_LBUTTONDBLCLK: - iCurIndex = Playlist_MouseToIndex(); - if( iCurIndex < 0 ) break; - Playback::Play(); - Playback::UpdateSeek(); - break; - - } - return CallWindowProc( WndprocPlaylistBackup, hwnd, message, wp, lp ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::Add( int iIndex, TCHAR * szDisplay, TCHAR * szFilename ) -{ - iMaxIndex++; - if( iIndex < 0 || iIndex > iMaxIndex ) iIndex = iMaxIndex; - if( iIndex <= iCurIndex ) - { - iCurIndex++; - } - - // Create entry data - PlaylistEntry * new_entry = new PlaylistEntry; - new_entry->szFilename = szFilename; - - iIndex = ( int )SendMessage( - WindowPlaylist, - LB_INSERTSTRING, // LB_ADDSTRING, - iIndex, - ( LPARAM )szDisplay - ); - - // Associate data - SendMessage( - WindowPlaylist, - LB_SETITEMDATA, - iIndex, - ( LPARAM )new_entry - ); - - return true; -} -*/ - - -//////////////////////////////////////////////////////////////////////////////// -/// Opens a dialog box and loads the playlist if is [true], -/// or saves the playlist if it is [false]. -//////////////////////////////////////////////////////////////////////////////// -bool Playlist_DialogBoth( bool bOpenOrSave ) -{ - TCHAR szFilters[] = TEXT( - "All files (*.*)\0*.*\0" - "Playlist files (*.M3U)\0*.m3u\0" - "\0" - ); - TCHAR szFilename[ MAX_PATH ] = TEXT( "\0" ); - - OPENFILENAME ofn; - memset( &ofn, 0, sizeof( OPENFILENAME ) ); - ofn.lStructSize = sizeof( OPENFILENAME ); - ofn.hwndOwner = WindowMain; - ofn.hInstance = g_hInstance; - ofn.lpstrFilter = szFilters; - ofn.lpstrCustomFilter = NULL; - ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 2; - ofn.lpstrFile = szFilename; - ofn.nMaxFile = MAX_PATH; - ofn.Flags = OFN_EXPLORER | - OFN_ENABLESIZING | - ( bOpenOrSave ? OFN_FILEMUSTEXIST : OFN_OVERWRITEPROMPT ) | - OFN_PATHMUSTEXIST | - OFN_HIDEREADONLY; - ofn.nMaxFileTitle = 0, - ofn.lpstrInitialDir = NULL; - ofn.lpstrTitle = ( bOpenOrSave ? TEXT( "Open playlist" ) : TEXT( "Save playlist" ) ); - - if( bOpenOrSave ) - { - if( !GetOpenFileName( &ofn ) ) return false; - } - else - { - if( !GetSaveFileName( &ofn ) ) return false; - } - - if( bOpenOrSave ) - { - // Open - const int iFilenameLen = ( int )_tcslen( szFilename ); - if( !_tcsncmp( szFilename + iFilenameLen - 3, TEXT( "m3u" ), 3 ) ) - { - // Playlist file - playlist->RemoveAll(); - Playlist::AppendPlaylistFile( szFilename ); - Playback::Play(); - - - Console::Append( TEXT( "Playlist.cpp:Playlist_DialogBoth() called Playback::Play()" ) ); - Console::Append( TEXT( " " ) ); - } - } - else - { - // TODO: Check extension, ask for appending if missing - - // Save - Playlist::ExportPlaylistFile( szFilename ); - } - - return true; - -} - - -//////////////////////////////////////////////////////////////////////////////// -/// Opens a dialog box and loads the selected playlist -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::DialogOpen() -{ - return Playlist_DialogBoth( true ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// Opens a dialog box and saves the playlist to the filename selected -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::DialogSaveAs() -{ - return Playlist_DialogBoth( false ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::AppendPlaylistFile( TCHAR * szFilename ) -{ - - - - // Open playlist file - HANDLE hFile = CreateFile( - szFilename, // LPCTSTR lpFileName - FILE_READ_DATA, // DWORD dwDesiredAccess - FILE_SHARE_READ, // DWORD dwShareMode - NULL, // LPSECURITY_ATTRIBUTES lpSecurityAttributes - OPEN_EXISTING, // DWORD dwCreationDisposition - FILE_ATTRIBUTE_NORMAL, // DWORD dwFlagsAndAttributes - NULL // HANDLE hTemplateFile - ); - - // This will happen if there is no Playlist.m3u - /* - if( hFile == INVALID_HANDLE_VALUE ) - { - // MessageBox( 0, TEXT( "Could not read playlist file" ), TEXT( "Error" ), MB_ICONERROR ); - //Console::Append( "We got INVALID_HANDLE_VALUE" ); - return false; - } - */ - // Disable this - //const bool bEmptyBefore = ( playlist->GetSize() == 0 ); - - -// ======================================================================================= - // Remove filename from so we can - // use it as relative directory root - TCHAR * szWalk = szFilename + _tcslen( szFilename ) - 1; - while( ( szWalk > szFilename ) && ( *szWalk != TEXT( '\\' ) ) ) szWalk--; - szWalk++; - *szWalk = TEXT( '\0' ); - - TCHAR * szBaseDir = szFilename; - const int iBaseDirLen = ( int )_tcslen( szBaseDir ); - - - DWORD iSizeBytes = GetFileSize( hFile, NULL ); - if( iSizeBytes <= 0 ) - { - CloseHandle( hFile ); - return false; - } - - // Allocate - char * rawdata = new char[ iSizeBytes + 1 ]; // One more so we can write '\0' on EOF - DWORD iBytesRead; - - // ======================================================================================= - // Read whole file - ReadFile( - hFile, // HANDLE hFile - rawdata, // LPVOID lpBuffer - iSizeBytes, // DWORD nNumberOfBytesToRead - &iBytesRead, // LPDWORD lpNumberOfBytesRead - NULL // LPOVERLAPPED lpOverlapped - ); - - if( iBytesRead < iSizeBytes ) - { - delete [] rawdata; - CloseHandle( hFile ); - - MessageBox( 0, TEXT( "Could not read whole file" ), TEXT( "Error" ), MB_ICONERROR ); - return false; - } - - // Parse file content - - // File must be - // * M3U - // * ANSI - - char * walk = rawdata; - const char * eof = rawdata + iSizeBytes; - - char * beg = rawdata; - char * end; - - while( true ) - { - // Find newline or eof - while( ( walk < eof ) && ( *walk != '\015' ) && ( *walk != '\012' ) ) walk++; - end = walk; - - if( ( end - beg > 2 ) && ( *beg != '#' ) ) - { - - TCHAR * szKeep; - if( beg[ 1 ] == ':' ) - { - // TODO: Better detection, network path? - - // Absolute path, skip this - /* - const int iLen = end - beg; - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "iLen <%i>" ), iLen ); - Console::Append( szBuffer ); - - szKeep = new TCHAR[ iLen + 1 ]; - ToTchar( szKeep, beg, iLen ); - szKeep[ iLen ] = TEXT( '\0' ); - */ - - } - else - { - // Skip initial so we don't get a double backslash in between - - - - while( ( beg[ 0 ] == '\\' ) && ( beg < end ) ) beg++; - - // Relative path - const int iSecondLen = end - beg; - szKeep = new TCHAR[ iBaseDirLen + iSecondLen + 1 ]; - memcpy( szKeep, szBaseDir, iBaseDirLen * sizeof( TCHAR ) ); - ToTchar( szKeep + iBaseDirLen, beg, iSecondLen ); - - szKeep[ iBaseDirLen + iSecondLen ] = TEXT( '\0' ); - - UnbloatFilename( szKeep, false ); - } - - // if( !Add( iMaxIndex + 1, szKeep, szKeep ) ) break; - playlist->PushBack( szKeep ); - } - - // Skip newlines - while( ( walk < eof ) && ( ( *walk == '\015' ) || ( *walk == '\012' ) ) ) walk++; - if( walk == eof ) - { - break; - } - - beg = walk; - } - - delete [] rawdata; - CloseHandle( hFile ); -/* - if( bEmptyBefore ) - { - iCurIndex = 0; - } -*/ - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::ExportPlaylistFile( TCHAR * szFilename ) -{ - // Open playlist file - HANDLE hFile = CreateFile( - szFilename, // LPCTSTR lpFileName - FILE_WRITE_DATA, // DWORD dwDesiredAccess - 0, // DWORD dwShareMode - NULL, // LPSECURITY_ATTRIBUTES lpSecurityAttributes - CREATE_ALWAYS, // DWORD dwCreationDisposition - FILE_ATTRIBUTE_NORMAL, // DWORD dwFlagsAndAttributes - NULL // HANDLE hTemplateFile - ); - - if( hFile == INVALID_HANDLE_VALUE ) - { - MessageBox( 0, TEXT( "Could not write playlist file" ), TEXT( "Error" ), MB_ICONERROR ); - return false; - } - - - // Remove filename from so we can - // use it as relative directory root - TCHAR * szWalk = szFilename + _tcslen( szFilename ) - 1; - while( ( szWalk > szFilename ) && ( *szWalk != TEXT( '\\' ) ) ) szWalk--; - szWalk++; - *szWalk = TEXT( '\0' ); - - TCHAR * szBaseDir = szFilename; - const int iBaseDirLen = ( int )_tcslen( szBaseDir ); - - - char * rawdata = new char[ ( playlist->GetMaxIndex() + 1 ) * ( MAX_PATH + 2 ) ]; - char * walk = rawdata; - - // Write playlist to buffer - const int iMaxMax = playlist->GetMaxIndex(); - for( int i = 0; i <= iMaxMax; i++ ) - { - // Get - TCHAR * szEntry = GetFilename( i ); - if( !szEntry ) break; - int iEntryLen = ( int )_tcslen( szEntry ); - - // Copy - TCHAR * szTemp = new TCHAR[ iEntryLen + 1 ]; - memcpy( szTemp, szEntry, iEntryLen * sizeof( TCHAR ) ); - szTemp[ iEntryLen ] = TEXT( '\0' ); - - // Convert - if( ApplyRootToFilename( szBaseDir, szTemp ) ) - { - // Update length or we are writing too much - iEntryLen = ( int )_tcslen( szTemp ); - } - - // Copy -#ifdef PA_UNICODE - ToAnsi( walk, szTemp, iEntryLen ); -#else - memcpy( walk, szTemp, iEntryLen ); -#endif - - delete [] szTemp; - - walk += iEntryLen; - memcpy( walk, "\015\012", 2 ); - walk += 2; - } - - const DWORD iSizeBytes = walk - rawdata; - DWORD iBytesRead; - WriteFile( - hFile, // HANDLE hFile, - rawdata, // LPCVOID lpBuffer, - iSizeBytes, // DWORD nNumberOfBytesToWrite, - &iBytesRead, // LPDWORD lpNumberOfBytesWritten, - NULL // LPOVERLAPPED lpOverlapped - ); - - if( iBytesRead < iSizeBytes ) - { - delete [] rawdata; - CloseHandle( hFile ); - - MessageBox( 0, TEXT( "Could not write whole file" ), TEXT( "Error" ), MB_ICONERROR ); - return false; - } - - delete [] rawdata; - CloseHandle( hFile ); - - return true; -} - - -/* -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::Append( TCHAR * szDisplay, TCHAR * szFilename ) -{ - return Add( iMaxIndex + 1, szDisplay, szFilename ); -} -*/ - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -TCHAR * Playlist::GetFilename( int iIndex ) -{ - // if( iIndex < 0 || iIndex > iMaxIndex ) return NULL; - -/* - PlaylistEntry * entry = ( PlaylistEntry * )SendMessage( - WindowPlaylist, - LB_GETITEMDATA, - iIndex, - 0 - ); - - return ( entry ? entry->szFilename : NULL ); - */ - //TCHAR * szFilename = "C:\Files\Spel och spelfusk\Console\Gamecube\Code\vgmstream (isolate ast)\Music\demo36_02.ast"; - //return szFilename; - return ( TCHAR * )playlist->Get( iIndex ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playlist::GetFilename( int iIndex, char * szAnsiFilename, int iChars ) -{ - // if( iIndex < 0 || iIndex > iMaxIndex ) return 0; - /* - PlaylistEntry * entry = ( PlaylistEntry * )SendMessage( - WindowPlaylist, - LB_GETITEMDATA, - iIndex, - 0 - ); - if( !entry || !entry->szFilename ) return 0; - - TCHAR * & szFilename = entry->szFilename; - */ - TCHAR * szFilename = ( TCHAR * )playlist->Get( iIndex ); - - const int iFilenameLen = ( int )_tcslen( szFilename ); - const int iCopyLen = ( iFilenameLen < iChars ) ? iFilenameLen : iChars; - -#ifdef PA_UNICODE - ToAnsi( szAnsiFilename, szFilename, iCopyLen ); -#else - memcpy( szAnsiFilename, szFilename, iCopyLen ); -#endif - - szAnsiFilename[ iCopyLen ] = '\0'; - return iCopyLen; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int Playlist::GetTitle( int iIndex, char * szAnsiTitle, int iChars ) -{ - // if( iIndex < 0 || iIndex > iMaxIndex ) return 0; - /* - TCHAR * szFilename = ( TCHAR * )SendMessage( - WindowPlaylist, - LB_GETITEMDATA, - iIndex, - 0 - ); - if( !szFilename ) return 0; - */ - TCHAR * szFilename = ( TCHAR * )playlist->Get( iIndex ); - - // Get extension - const int iFilenameLen = ( int )_tcslen( szFilename ); - TCHAR * szExt = szFilename + iFilenameLen - 1; - while( ( szExt > szFilename ) && ( *szExt != TEXT( '.' ) ) ) szExt--; - szExt++; - - // Get plugin for extension - map ::iterator iter = ext_map.find( szExt ); - if( iter == ext_map.end() ) return 0; - InputPlugin * input_plugin = iter->second; - -#ifdef PA_UNICODE - // Filename - char * szTemp = new char[ iFilenameLen + 1 ]; - ToAnsi( szTemp, szFilename, iFilenameLen ); - szTemp[ iFilenameLen ] = '\0'; - - // Ansi Title - char szTitle[ 2000 ] = "\0"; - int length_in_ms; - input_plugin->plugin->GetFileInfo( szTemp, szTitle, &length_in_ms ); - const int iTitleLen = strlen( szTitle ); - memcpy( szAnsiTitle, szTitle, iChars * sizeof( char ) ); - szTitle[ iChars ] = '\0'; -#else - char szTitle[ 2000 ] = "\0"; - int length_in_ms; - input_plugin->plugin->GetFileInfo( szFilename, szTitle, &length_in_ms ); - const int iTitleLen = ( int )strlen( szAnsiTitle ); - memcpy( szAnsiTitle, szTitle, iChars * sizeof( char ) ); - szTitle[ iChars ] = '\0'; -#endif - - return ( iTitleLen < iChars ) ? iTitleLen : iChars; -} - - -/* -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::SelectZero() -{ - SendMessage( - WindowPlaylist, - LB_SETSEL, - FALSE, - -1 - ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Playlist::SelectAll() -{ - SendMessage( - WindowPlaylist, - LB_SETSEL, - TRUE, - -1 - ); - return true; -} -*/ diff --git a/Externals/MusicMod/Player/Src/Playlist.h b/Externals/MusicMod/Player/Src/Playlist.h deleted file mode 100644 index 82aaab7952..0000000000 --- a/Externals/MusicMod/Player/Src/Playlist.h +++ /dev/null @@ -1,65 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_PLAYLIST_H -#define PA_PLAYLIST_H - - - -#include "Global.h" -#include "PlaylistControler.h" -#include "PlaylistView.h" - - -#define PLAINAMP_PL_REM_SEL 50004 -#define PLAINAMP_PL_REM_CROP 50005 - - - -extern HWND WindowPlaylist; - -extern PlaylistControler * playlist; - -namespace Playlist -{ - bool Create(); -/* - int GetCurIndex(); - int GetMaxIndex(); - bool SetCurIndex( int iIndex ); -*/ - TCHAR * GetFilename( int iIndex ); - - int GetFilename( int iIndex, char * szAnsiFilename, int iChars ); - int GetTitle( int iIndex, char * szAnsiTitle, int iChars ); - - bool DialogOpen(); - bool DialogSaveAs(); - - bool AppendPlaylistFile( TCHAR * szFilename ); - bool ExportPlaylistFile( TCHAR * szFilename ); -/* - bool Append( TCHAR * szDisplay, TCHAR * szFilename ); - bool Add( int iIndex, TCHAR * szDisplay, TCHAR * szFilename ); - - bool Clear(); // aka RemoveAll() - bool RemoveSelected(); - bool Crop(); // aka RemoveUnselected - - bool SelectZero(); - bool SelectAll(); -*/ -}; - - - -#endif // PA_PLAYLIST_H diff --git a/Externals/MusicMod/Player/Src/PlaylistControler.cpp b/Externals/MusicMod/Player/Src/PlaylistControler.cpp deleted file mode 100644 index a3b0f17a68..0000000000 --- a/Externals/MusicMod/Player/Src/PlaylistControler.cpp +++ /dev/null @@ -1,467 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "PlaylistControler.h" -#include "Config.h" -#include "Font.h" -#include "Console.h" - -bool bPlaylistFollow; -ConfBool cbPlaylistFollow( &bPlaylistFollow, TEXT( "PlaylistFollow" ), CONF_MODE_PUBLIC, true ); - - -void PlaylistControler::MoveSelected( int iDistance ) -{ - if( iDistance == -1 ) - { - if( ListView_GetItemState( _hView, 0, LVIS_SELECTED ) ) - { - // Cannot move upwards - return; - } - } - else if( iDistance == 1 ) - { - if( ListView_GetItemState( _hView, _database.GetMaxIndex(), LVIS_SELECTED ) ) - { - // Cannot move downwards - return; - } - } - else - { - // More distance maybe later - return; - } - - const int iFocus = ListView_GetNextItem( _hView, ( UINT )-1, LVIS_FOCUSED ); - - // Negative is to the top - LRESULT iBefore = 0; - LRESULT iAfter = -2; // Extra value to check after big for-loop - - for( ; ; ) - { - // Count - LRESULT iAfter = ListView_GetNextItem( _hView, iBefore - 1, LVNI_SELECTED ); - if( iAfter == -1 ) break; // No more selections selected - - LRESULT iFirst = iAfter; - - // Search end of selection block - iBefore = iAfter + 1; - for( ; ; ) - { - iAfter = ListView_GetNextItem( _hView, iBefore - 1, LVNI_SELECTED ); - if( iAfter == iBefore ) - { - // Keep searching - iBefore++; - } - else - { - // End found (iBefore is the first not selected) - const int iSelSize = iBefore - iFirst; - if( iDistance == -1 ) - { - // Updwards - const int iOldIndex = iFirst - 1; - const int iNewIndex = iOldIndex + iSelSize; - - TCHAR * szData = ( TCHAR * )_database.Get( iOldIndex ); - _database.Erase( iOldIndex ); - _database.Insert( iNewIndex, szData ); - - ListView_SetItemState( _hView, iOldIndex, LVIS_SELECTED, LVIS_SELECTED ); - ListView_SetItemState( _hView, iNewIndex, 0, LVIS_SELECTED ); - ListView_RedrawItems( _hView, iOldIndex, iNewIndex ); - } - else - { - // Downwards - const int iOldIndex = iFirst + iSelSize; - const int iNewIndex = iFirst; - - TCHAR * szData = ( TCHAR * )_database.Get( iOldIndex ); - _database.Erase( iOldIndex ); - _database.Insert( iNewIndex, szData ); - - ListView_SetItemState( _hView, iOldIndex, LVIS_SELECTED, LVIS_SELECTED ); - ListView_SetItemState( _hView, iNewIndex, 0, LVIS_SELECTED ); - ListView_RedrawItems( _hView, iNewIndex, iOldIndex ); - } - - iBefore++; - break; - } - } - } - - if( iAfter != -2 ) return; // Nothing was selected so nothing was moved - ListView_SetItemState( _hView, iFocus + iDistance, LVIS_FOCUSED, LVIS_FOCUSED ); - - Refresh(); -} - -int PlaylistControler::GetCurIndex() -{ - return _database.GetCurIndex(); -} - -int PlaylistControler::GetMaxIndex() -{ - return _database.GetMaxIndex(); -} - -int PlaylistControler::GetSize() -{ - return _database.GetSize(); -} - -void PlaylistControler::SetCurIndex( int iIndex ) -{ - const int iCurIndexBefore = _database.GetCurIndex(); - _database.SetCurIndex( iIndex ); - - // --------------------------------------------------------------------------------------- - // We disable the windows management - /* - if( bPlaylistFollow ) - { - ListView_SetItemState( _hView, ( UINT )-1, 0, LVIS_SELECTED | LVIS_FOCUSED ); - ListView_SetItemState( _hView, iIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - } - - if( iCurIndexBefore != -1 ) - ListView_RedrawItems( _hView, iCurIndexBefore, iCurIndexBefore ); - ListView_RedrawItems( _hView, iIndex, iIndex ); - */ - // --------------------------------------------------------------------------------------- -} - -// Returns on digit count change -bool PlaylistControler::FixDigitsMore() -{ - const int iCountAfter = _database.GetSize(); - const int iDigitsBefore = _iDigits; - while( iCountAfter > _iDigitMax ) - { - _iDigitMin *= 10; // 10 -> 100 - _iDigitMax = _iDigitMax * 10 + 9; // 99 -> 999 - _iDigits++; // 2 -> 3 - } - - - return ( ( _iDigits != iDigitsBefore ) - || ( iCountAfter == 1 ) ); // Force update when first item is inserted -} - -// Returns on digit count change -bool PlaylistControler::FixDigitsLess() -{ - const int iCountAfter = _database.GetSize(); - const int iDigitsBefore = _iDigits; - while( ( iCountAfter < _iDigitMin ) && ( _iDigits > 1 ) ) - { - _iDigitMin /= 10; // 999 -> 99 - _iDigitMax /= 10; // 100 -> 10 - _iDigits--; // 3 -> 2 - } - - return ( _iDigits != iDigitsBefore ); -} - - -void PlaylistControler::Refresh() -{ - AutosizeColumns(); - - const int iFirst = ListView_GetTopIndex( _hView ); - const int iLast = iFirst + ListView_GetCountPerPage( _hView ); - - ListView_RedrawItems( _hView, iFirst, iLast ); -} - -PlaylistControler::PlaylistControler( HWND hView, bool bEnableZeroPadding, int * piIndexSlave ) -{ - _hView = hView; - - _bZeroPadding = bEnableZeroPadding; - _iDigits = 1; - _iDigitMin = 1; - _iDigitMax = 9; - - _database.SetCurIndexSlave( piIndexSlave ); - - printf("PlaylistControler::PlaylistControler was called\n"); - - Refresh(); - - // TODO clear list view here??? -} - - -void PlaylistControler::PushBack( TCHAR * szText ) -{ - const int iSize = _database.GetMaxIndex(); - - _database.PushBack( szText ); - - // --------------------------------------------------------------------------------------- - // Disabled windows function - //ListView_SetItemCount( _hView, _database.GetSize() ); - - //if( FixDigitsMore() ) Refresh(); - // --------------------------------------------------------------------------------------- -} - -void PlaylistControler::Insert( int i, TCHAR * szText ) -{ - const int iSize = _database.GetMaxIndex(); - - _database.Insert( i, szText ); - ListView_SetItemCount( _hView, _database.GetSize() ); - - if( FixDigitsMore() ) Refresh(); -} - -void PlaylistControler::RemoveAll() -{ - _database.Clear(); - - // This is for the windows playlist, we don't use that - //ListView_DeleteAllItems( _hView ); - - if( FixDigitsLess() ) Refresh(); -} - -void PlaylistControler::RemoveSelected( bool bPositive ) -{ - SendMessage( _hView, WM_SETREDRAW, FALSE, 0 ); - - if( bPositive ) - { - LRESULT iWalk = 0; - for( ; ; ) - { - // MSDN: The specified item itself is excluded from the search. - iWalk = ListView_GetNextItem( _hView, iWalk - 1, LVNI_SELECTED ); - if( iWalk != -1 ) - { - _database.Erase( iWalk ); - ListView_DeleteItem( _hView, iWalk ); - } - else - { - break; - } - } - } - else - { - LRESULT iBefore = 0; - LRESULT iAfter = 0; - for( ; ; ) - { - // MSDN: The specified item itself is excluded from the search. - iAfter = ListView_GetNextItem( _hView, iBefore - 1, LVNI_SELECTED ); - if( iAfter != -1 ) - { - // is the first selected - // so we delete all before and restart - // at the beginning - const int iDelIndex = iBefore; - for( int i = iBefore; i < iAfter; i++ ) - { - _database.Erase( iDelIndex ); - ListView_DeleteItem( _hView, iDelIndex ); - } - - iBefore++; // Exclude the one we found selected right before - } - else - { - if( iBefore == 0 ) - { - // All selected - _database.Clear(); - ListView_DeleteAllItems( _hView ); - } - else - { - const int iSize = _database.GetSize(); - const int iDelIndex = iBefore; - for( int i = iBefore; i < iSize; i++ ) - { - _database.Erase( iDelIndex ); - ListView_DeleteItem( _hView, iDelIndex ); - } - } - - break; - } - } - } - - bool bRefresh = FixDigitsLess(); - - SendMessage( _hView, WM_SETREDRAW, TRUE, 0 ); - - if( bRefresh ) Refresh(); -} - -void PlaylistControler::SelectAll( bool bPositive ) -{ - ListView_SetItemState( _hView, ( UINT )-1, bPositive ? LVIS_SELECTED : 0, LVIS_SELECTED ); -} - -void PlaylistControler::SelectInvert() -{ - SendMessage( _hView, WM_SETREDRAW, FALSE, 0 ); - - const int iOneTooMuch = _database.GetSize(); - for( int i = 0; i < iOneTooMuch; i++ ) - { - ListView_SetItemState( - _hView, - i, - ( ListView_GetItemState( _hView, i, LVIS_SELECTED ) == LVIS_SELECTED ) - ? 0 - : LVIS_SELECTED, - LVIS_SELECTED - ); - - } - - SendMessage( _hView, WM_SETREDRAW, TRUE, 0 ); -} - -const TCHAR * PlaylistControler::Get( int i ) -{ - Console::Append( TEXT("We are in PlaylistControler::Get()") ); - - return _database.Get( i ); -} - -void PlaylistControler::Fill( LVITEM & request ) -{ - if( ( request.mask & LVIF_TEXT ) == 0 ) return; - if( request.iSubItem ) - { - // Text - _sntprintf( request.pszText, request.cchTextMax, TEXT( "%s" ), _database.Get( request.iItem ) ); - } - else - { - // Number - if( _bZeroPadding ) - { - TCHAR szFormat[ 6 ]; - _stprintf( szFormat, TEXT( "%%0%dd" ), _iDigits ); - _sntprintf( request.pszText, request.cchTextMax, szFormat, request.iItem + 1 ); - } - else - { - _sntprintf( request.pszText, request.cchTextMax, TEXT( "%d" ), request.iItem + 1 ); - } - } -} - -void PlaylistControler::EnableZeroPadding( bool bActive ) -{ - if( bActive == _bZeroPadding ) return; - - LVCOLUMN col; - memset( &col, 0, sizeof( LVCOLUMN ) ); - col.mask = LVCF_FMT; - - if( bActive ) - { - // TODO recalculation yes/no? - /* - int iSize = _database.GetSize(); - if( iSize != 0 ) - { - int iDigits = 0; - while( iSize > 0 ) - { - iSize /= 10; - iDigits++; - } - - _iDigits = iSize; - _iDigitMin = 1; - _iDigitMax = 9; - while( iSize-- > 0 ) - { - _iDigitMin *= 10; - _iDigitMax = _iDigitMax * 10 + 9; - } - } - else - { - _iDigits = 1; - _iDigitMin = 1; - _iDigitMax = 9; - } - */ - - col.fmt = LVCFMT_LEFT; - ListView_SetColumn( _hView, 0, &col ); - - Refresh(); - } - else - { - col.fmt = LVCFMT_RIGHT; - ListView_SetColumn( _hView, 0, &col ); - - Refresh(); - } - _bZeroPadding = bActive; -} - -void PlaylistControler::AutosizeColumns() -{ - RECT r; - if( !GetClientRect( _hView, &r ) ) return; - - if( _bZeroPadding ) - { - ListView_SetColumnWidth( _hView, 0, LVSCW_AUTOSIZE ); - const int iWidth = ListView_GetColumnWidth( _hView, 0 ); - ListView_SetColumnWidth( _hView, 1, r.right - r.left - iWidth ); - } - else - { - HDC hdc = GetDC( _hView ); - const HFONT hOldFont = ( HFONT )SelectObject( hdc, Font::Get() ); - SIZE size; - BOOL res = GetTextExtentPoint32( hdc, TEXT( "0" ), 1, &size ); - SelectObject( hdc, hOldFont ); - ReleaseDC( _hView, hdc ); - const int iWidth = res ? ( int )( size.cx * ( _iDigits + 0.25f ) ) : 120; - ListView_SetColumnWidth( _hView, 0, iWidth ); - ListView_SetColumnWidth( _hView, 1, r.right - r.left - iWidth ); - } -} - -void PlaylistControler::Resize( HWND hParent ) -{ - /* - RECT rc; - GetClientRect( hParent, &rc ); - MoveWindow( _hView, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE ); - */ - - AutosizeColumns(); -} diff --git a/Externals/MusicMod/Player/Src/PlaylistControler.h b/Externals/MusicMod/Player/Src/PlaylistControler.h deleted file mode 100644 index cc85f5e317..0000000000 --- a/Externals/MusicMod/Player/Src/PlaylistControler.h +++ /dev/null @@ -1,65 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PLAYLIST_CONTROLER_H -#define PLAYLIST_CONTROLER_H 1 - -#include -#include -#include -#include "PlaylistModel.h" - - - -// TODO: column width update on scrollbar show/hide - -class PlaylistControler -{ - PlaylistModel _database; - HWND _hView; - - bool _bZeroPadding; - int _iDigits; // 3 - int _iDigitMin; // 100 - int _iDigitMax; // 999 - -private: - bool FixDigitsMore(); - bool FixDigitsLess(); - void Refresh(); - void AutosizeColumns(); - -public: - PlaylistControler( HWND hView, bool bEnableZeroPadding, int * piIndexSlave ); - - void MoveSelected( int iDistance ); - - int GetCurIndex(); - int GetMaxIndex(); - int GetSize(); - void SetCurIndex( int iIndex ); - - void PushBack( TCHAR * szText ); - void Insert( int i, TCHAR * szText ); - void RemoveAll(); - void RemoveSelected( bool bPositive ); - void SelectAll( bool bPositive ); - void SelectInvert(); - - const TCHAR * Get( int i ); - - void Fill( LVITEM & request ); - void EnableZeroPadding( bool bActive ); - void Resize( HWND hParent ); -}; - -#endif // PLAYLIST_CONTROLER_H diff --git a/Externals/MusicMod/Player/Src/PlaylistModel.h b/Externals/MusicMod/Player/Src/PlaylistModel.h deleted file mode 100644 index 275d1a9f07..0000000000 --- a/Externals/MusicMod/Player/Src/PlaylistModel.h +++ /dev/null @@ -1,122 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - -// ======================================================================================= -#include "Console.h" -#include "Global.h" -// ======================================================================================= - - -#ifndef PLAYLIST_MODEL_H -#define PLAYLIST_MODEL_H 1 - -#include -#include -#include -using namespace std; - - -class PlaylistModel -{ - vector _database; - int _iCurIndex; - int * _piCurIndex; - -public: - PlaylistModel() - { - _piCurIndex = &_iCurIndex; - } - - PlaylistModel( int * piIndexSlave ) - { - _piCurIndex = piIndexSlave; - } - - void SetCurIndexSlave( int * piIndexSlave ) - { - // *piIndexSlave = *_piCurIndex; - _piCurIndex = piIndexSlave; - } - - // ======================================================================================= - // This is where the _database is populated - // ======================================================================================= - void PushBack( TCHAR * szText ) - { - Console::Append( TEXT( "PlaylistModel.h:_database.PushBack() was called " ) ); - - _database.push_back( szText ); // this is a API call - } - - void Insert( int i, TCHAR * szText ) - { - Console::Append( TEXT( "PlaylistModel.h:_database.Insert() was called " ) ); - - if( i <= *_piCurIndex ) ( *_piCurIndex )++; - _database.insert( _database.begin() + i, szText ); - } - - void Erase( int i ) - { - if( i < *_piCurIndex ) ( *_piCurIndex )--; - _database.erase( _database.begin() + i ); - } - - const TCHAR * Get( int i ) - { - //Console::Append( TEXT( "PlaylistModel.h:_database.Get() was called " ) ); - - if( 0 > i || i >= ( int )_database.size() ) - { - static const TCHAR * szError = TEXT( "INDEX OUT OF RANGE" ); - return szError; - } - - return _database[ i ]; - } - - void Clear() - { - _database.clear(); - *_piCurIndex = -1; - } - - int GetMaxIndex() - { - return _database.size() - 1; - } - - int GetCurIndex() - { - return *_piCurIndex; - } - - void SetCurIndex( int iIndex ) - { - - if( 0 > iIndex || iIndex >= ( int )_database.size() ) - { - NOTICE_LOG(AUDIO,"SetCurIndex > Return"); - return; - } - - *_piCurIndex = iIndex; - } - - int GetSize() - { - return _database.size(); - } -}; - - -#endif // PLAYLIST_MODEL_H diff --git a/Externals/MusicMod/Player/Src/PlaylistView.cpp b/Externals/MusicMod/Player/Src/PlaylistView.cpp deleted file mode 100644 index f2ba322d8d..0000000000 --- a/Externals/MusicMod/Player/Src/PlaylistView.cpp +++ /dev/null @@ -1,782 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - -// ======================================================================================= -#include "Playlist.h" -#include "Main.h" -#include "Status.h" -#include "Rebar.h" -#include "Playback.h" -#include "Config.h" -#include "Util.h" - -WNDPROC WndprocPlaylistBackup = NULL; -LRESULT CALLBACK WndprocPlaylist( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); -// ======================================================================================= - - -// ======================================================================================= -// This gives the values from the ini file. -// ConfBool = class -PlaylistControler * playlist = NULL; // extern - -bool bPlaylistEntryNumberZeroPadding; -ConfBool cbPlaylistEntryNumberZeroPadding( &bPlaylistEntryNumberZeroPadding, TEXT( "PlaylistEntryNumberZeroPadding" ), CONF_MODE_PUBLIC, true ); - -int iCurPlaylistPosition; -ConfInt ciCurPlaylistPosition( &iCurPlaylistPosition, TEXT( "CurPlaylistPosition" ), CONF_MODE_INTERNAL, -1 ); - -bool bInfinitePlaylist; -ConfBool cbInfinitePlaylist( &bInfinitePlaylist, TEXT( "InfinitePlaylist" ), CONF_MODE_PUBLIC, false ); -// ======================================================================================= - - -// ======================================================================================= - -void PlaylistView::Create() -{ - #ifndef NOGUI - - RECT ClientMain; - GetClientRect( WindowMain, &ClientMain ); - - const int iClientHeight = ClientMain.bottom - ClientMain.top; - const int iClientWidth = ClientMain.right - ClientMain.left; - const int iPlaylistHeight = iClientHeight - iRebarHeight - iStatusHeight; - - - //LoadCommonControls(); - - - DWORD dwStyle; - // HWND WindowPlaylist; - BOOL bSuccess = TRUE; - - dwStyle = WS_TABSTOP | - WS_CHILD | - WS_BORDER | - WS_VISIBLE | - LVS_AUTOARRANGE | // TODO - LVS_REPORT | - LVS_OWNERDATA | - LVS_NOCOLUMNHEADER ; - - WindowPlaylist = CreateWindowEx( WS_EX_CLIENTEDGE, // ex style - WC_LISTVIEW, // class name - defined in commctrl.h - TEXT( "" ), // dummy text - dwStyle, // style - 0, - iRebarHeight, // + -2, - iClientWidth, - iPlaylistHeight, - WindowMain, // parent - NULL, // ID - g_hInstance, // instance - NULL); // no extra data - - if(!WindowPlaylist) return; // TODO - - // This calls PlaylistControler::PlaylistControler() - playlist = new PlaylistControler( WindowPlaylist, bPlaylistEntryNumberZeroPadding, &iCurPlaylistPosition ); - - #else - - HWND WindowPlaylist = NULL; - playlist = new PlaylistControler( WindowPlaylist, bPlaylistEntryNumberZeroPadding, &iCurPlaylistPosition ); - - #endif - - // Exchange window procedure - //WndprocPlaylistBackup = ( WNDPROC )GetWindowLong( WindowPlaylist, GWL_WNDPROC ); - //if( WndprocPlaylistBackup != NULL ) - //{ - // SetWindowLong( WindowPlaylist, GWL_WNDPROC, ( LONG )WndprocPlaylist ); - //} - - - //ListView_SetExtendedListViewStyle( WindowPlaylist, LVS_EX_FULLROWSELECT ); // | LVS_EX_GRIDLINES ); - //playlist->Resize( WindowMain ); - - /* - * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp - * - * Remarks: - * If a column is added to a list-view control with index 0 (the leftmost column) - * and with LVCFMT_RIGHT or LVCFMT_CENTER specified, the text is not right-aligned - * or centered. The text in the index 0 column is left-aligned. Therefore if you - * keep inserting columns with index 0, the text in all columns are left-aligned. - * If you want the first column to be right-aligned or centered you can make a dummy - * column, then insert one or more columns with index 1 or higher and specify the - * alignment you require. Finally delete the dummy column. - */ - - //LV_COLUMN lvColumn; - //memset( &lvColumn, 0, sizeof( LV_COLUMN ) ); - //lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT; - // - //// Number column (with dummy hack) - //lvColumn.fmt = LVCFMT_LEFT; - //lvColumn.cx = 0; - //lvColumn.pszText = TEXT( "" ); - //ListView_InsertColumn( WindowPlaylist, 0, &lvColumn ); - //lvColumn.fmt = LVCFMT_RIGHT; - //lvColumn.cx = 120; - //lvColumn.pszText = TEXT( "" ); - //ListView_InsertColumn( WindowPlaylist, 1, &lvColumn ); - //ListView_DeleteColumn( WindowPlaylist, 0 ); - - // Entry - //lvColumn.fmt = LVCFMT_LEFT; - //lvColumn.cx = 120; - //lvColumn.pszText = TEXT( "Filename" ); - //ListView_InsertColumn(WindowPlaylist, 1, &lvColumn); - - - - /* - stupid test code - - SCROLLINFO scrollinfo; - ZeroMemory( &scrollinfo, sizeof( SCROLLINFO ) ); - scrollinfo.cbSize = sizeof( SCROLLINFO ); - scrollinfo.fMask = 0; // SIF_DISABLENOSCROLL; - - if( !GetScrollInfo( WindowPlaylist, SB_VERT, &scrollinfo ) ) - { - MessageBox( 0, "ERROR", "", 0 ); - } - else - { - MessageBox( 0, "OKAY", "", 0 ); - scrollinfo.fMask = SIF_DISABLENOSCROLL; - SetScrollInfo( WindowPlaylist, SB_VERT, &scrollinfo, TRUE ); - } - - if( !ShowScrollBar( WindowPlaylist, SB_VERT, TRUE ) ) - { - MessageBox( 0, "ERROR ShowScrollBar", "", 0 ); - } - - - SCROLLBARINFO scrollbarinfo; - scrollbarinfo.cbSize = sizeof( SCROLLBARINFO ); - if( !GetScrollBarInfo( WindowPlaylist, OBJID_VSCROLL, &scrollbarinfo ) ) - { - MessageBox( 0, "ERROR GetScrollBarInfo", "", 0 ); - } - */ - -} - - - - - -// Dragging -static int iItemHeight = 15; -static int iDragStartY = 0; -static bool bDragging = false; - -// Liquid selection -static bool bLiquidSelecting = false; -static int iLastTouched = -1; - -// Liquid or range selection -static int iSelAnchor = -1; - -LRESULT CALLBACK WndprocPlaylist( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - /* - * Click, click and click - * - * [Alt] [Ctrl] [Shift] Action - * -------+---------+---------+----------------------- - * X | X | X | - * X | X | | - * X | | X | - * X | | | - * | X | X | Range selection - * | X | | Toggle selection - * | | X | Range selection - * | | | Single selection - * - * - * Click, hold and move - * - * [Alt] [Ctrl] [Shift] Action - * -------+---------+---------+----------------------- - * X | X | X | Selection move - * X | X | | Selection move - * X | | X | Selection move - * X | | | Selection move - * | X | X | - * | X | | - * | | X | - * | | | Liquid selection - */ - - static bool bCapturing = true; - - switch( message ) - { -/* - case WM_CAPTURECHANGED: - if( bCapturing && ( GetCapture() != WindowPlaylist ) ) - { - MessageBox( 0, TEXT( "Capture stolen" ), TEXT( "" ), 0 ); - } - break; -*/ - case WM_MOUSEMOVE: - if( bLiquidSelecting ) - { - LVHITTESTINFO hittest; - memset( &hittest, 0, sizeof( LVHITTESTINFO ) ); - hittest.pt.x = LOWORD( lp ); - hittest.pt.y = HIWORD( lp ); - const int iIndex = ( int )ListView_HitTest( WindowPlaylist, &hittest ); - if( iIndex == -1 ) return 0; - if( iIndex == iLastTouched ) return 0; - - // Note: Update this as early as possible! - // We cannot be sure this code is - // not called two or three times at the - // same time without losing much speed - // but this at least lowers the chance - const int iLastTouchedBackup = iLastTouched; - iLastTouched = iIndex; - - const bool bControl = ( ( GetKeyState( VK_CONTROL ) & 0x8000 ) != 0 ); - - - - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVIS_FOCUSED ); - ListView_SetItemState( WindowPlaylist, iIndex, LVIS_FOCUSED, LVIS_FOCUSED ); - - // Below anchor? - if( iIndex > iSelAnchor ) - { - if( iIndex > iLastTouchedBackup ) - { - // iSelAnchor - // .. - // iLastTouchedBackup - // .. - // >> iIndex << - if( iLastTouchedBackup > iSelAnchor ) - { - // Select downwards - for( int i = iLastTouchedBackup + 1; i <= iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - - // iLastTouchedBackup - // .. - // iSelAnchor - // .. - // >> iIndex << - else - { - // Unselect downwards - for( int i = iLastTouchedBackup; i < iSelAnchor; i++ ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - - // Select downwards - for( int i = iSelAnchor + 1; i <= iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - } - else // iIndex < iLastTouchedBackup - { - // iSelAnchor - // .. - // >> iIndex << - // .. - // iLastTouchedBackup - - // Unselect upwards - for( int i = iLastTouchedBackup; i > iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - - // Above anchor? - else if( iIndex < iSelAnchor ) - { - if( iIndex < iLastTouchedBackup ) - { - // >> iIndex << - // .. - // iSelAnchor - // .. - // iLastTouchedBackup - if( iIndex < iLastTouchedBackup ) - { - // Unselect upwards - for( int i = iLastTouchedBackup; i > iSelAnchor; i-- ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - - // Select upwards - for( int i = iSelAnchor - 1; i >= iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - - // >> iIndex << - // .. - // iLastTouchedBackup - // .. - // iSelAnchor - else // iIndex < iLastTouchedBackup - { - // Select upwards - for( int i = iLastTouchedBackup - 1; i >= iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - } - else // iIndex > iLastTouchedBackup - { - // iLastTouchedBackup - // .. - // >> iIndex << - // .. - // iSelAnchor - - // Unselect downwards - for( int i = iLastTouchedBackup; i < iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - - // At anchor - else // iIndex == iSelAnchor - { - if( iIndex < iLastTouchedBackup ) - { - // iSelAnchor / >> iIndex << - // .. - // iLastTouchedBackup - - // Unselect upwards - for( int i = iLastTouchedBackup; i > iSelAnchor; i-- ) - { - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - else // iIndex > iLastTouchedBackup - { - // iLastTouchedBackup - // .. - // iSelAnchor / >> iIndex << - - // Unselect downwards - for( int i = iLastTouchedBackup; i < iSelAnchor; i++ ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - } - else if( bDragging ) - { - static bool bMoveLock = false; - - if( bMoveLock ) return 0; - bMoveLock = true; - - const int y = HIWORD( lp ); - const int diff = y - iDragStartY; - if( abs( diff ) > iItemHeight / 2 ) - { - iDragStartY += ( ( diff > 0 ) ? iItemHeight : -iItemHeight ); - playlist->MoveSelected( ( diff > 0 ) ? +1 : -1 ); - } - - bMoveLock = false; - } - return 0; - - case WM_LBUTTONDOWN: - { - static int iLastClicked = -1; - static bool bLastClickNoneOrShift = true; - - - SetFocus( hwnd ); // TODO monitor focus loss - - LVHITTESTINFO hittest; - memset( &hittest, 0, sizeof( LVHITTESTINFO ) ); - GetCursorPos( &hittest.pt ); - ScreenToClient( hwnd, &hittest.pt ); - const int iIndex = ( int )ListView_HitTest( WindowPlaylist, &hittest ); - if( iIndex == -1 ) return 0; - - const bool bShift = ( ( GetKeyState( VK_SHIFT ) & 0x8000 ) != 0 ); - const bool bControl = ( ( GetKeyState( VK_CONTROL ) & 0x8000 ) != 0 ); - const bool bAlt = ( ( GetKeyState( VK_MENU ) & 0x8000 ) != 0 ); - - // [Shift] or [Shift]+[Ctrl]? - if( bShift ) - { - if( bAlt ) return 0; - - // Last click usable as selection anchor? - if( !bLastClickNoneOrShift ) - { - // Treat as normal click - iSelAnchor = iIndex; - iLastClicked = iIndex; - - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVIS_SELECTED | LVIS_FOCUSED ); - ListView_SetItemState( WindowPlaylist, iIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - - bLiquidSelecting = true; - bLastClickNoneOrShift = true; - - return 0; - } - - if( iIndex != iLastClicked ) - { - // Below anchor? - if( iIndex > iSelAnchor ) - { - // Below last click? - if( iIndex > iLastClicked ) - { - // Other side of anchor? - if( iLastClicked < iSelAnchor ) - { - // Unselect downwards - for( int i = iLastClicked; i < iSelAnchor; i++ ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - - // Select downwards - for( int i = iSelAnchor; i <= iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - - // Same side of anchor? - else - { - // Select downwards - for( int i = iLastClicked + 1; i <= iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - } - - // Above last click? - else // iIndex < iLastClicked - { - // Unselect upwards - for( int i = iLastClicked; i > iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - - // Above anchor? - else if( iIndex < iSelAnchor ) - { - // Above last clicked? - if( iIndex < iLastClicked ) - { - // Other side of anchor? - if( iLastClicked > iSelAnchor ) - { - // Unselect upwards - for( int i = iLastClicked; i > iSelAnchor; i-- ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - - // Select upwards - for( int i = iSelAnchor; i >= iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - - // Same side of anchor? - else - { - // Select upwards - for( int i = iLastClicked - 1; i >= iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, LVIS_SELECTED, LVIS_SELECTED ); - } - } - - // Below last clicked? - else // iIndex > iLastClicked - { - // Unselect downwards - for( int i = iLastClicked; i < iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - - // At anchor - else // iIndex == iSelAnchor - { - if( iLastClicked < iSelAnchor ) - { - // Unselect downwards - for( int i = iLastClicked; i < iIndex; i++ ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - else if( iLastClicked > iSelAnchor ) - { - // Unselect upwards - for( int i = iLastClicked; i > iIndex; i-- ) - ListView_SetItemState( WindowPlaylist, i, 0, LVIS_SELECTED ); - } - } - - iLastClicked = iIndex; - - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVIS_FOCUSED ); - ListView_SetItemState( WindowPlaylist, iIndex, LVIS_FOCUSED, LVIS_FOCUSED ); - } - - bLastClickNoneOrShift = true; - } - - // [Ctrl]? - else if( bControl ) - { - if( bAlt ) return 0; - - iLastTouched = iIndex; - - // Toggle selection - const bool bSelected = ( ListView_GetItemState( WindowPlaylist, iIndex, LVIS_SELECTED ) == LVIS_SELECTED ); - ListView_SetItemState( WindowPlaylist, iIndex, bSelected ? 0 : LVIS_SELECTED, LVIS_SELECTED ); - - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVIS_FOCUSED ); - ListView_SetItemState( WindowPlaylist, iIndex, LVIS_FOCUSED, LVIS_FOCUSED ); - - bLastClickNoneOrShift = false; - } - - // [Alt]? - else if( bAlt ) - { - // Update item height - RECT rc; - GetClientRect( WindowPlaylist, &rc ); - const int iItemsPerPage = ListView_GetCountPerPage( WindowPlaylist ); - iItemHeight = ( rc.bottom - rc.top ) / iItemsPerPage; - - iDragStartY = hittest.pt.y; - bDragging = true; - - bCapturing = true; - SetCapture( WindowPlaylist ); - } - - // No modifiers? - else - { - iSelAnchor = iIndex; - iLastClicked = iIndex; - - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVIS_SELECTED | LVIS_FOCUSED ); - ListView_SetItemState( WindowPlaylist, iIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED ); - - bLiquidSelecting = true; - bLastClickNoneOrShift = true; - - bCapturing = true; - SetCapture( WindowPlaylist ); - } - } - return 0; - - case WM_LBUTTONUP: - bLiquidSelecting = false; - bDragging = false; - - bCapturing = false; - ReleaseCapture(); - - return 0; - - case WM_SYSKEYDOWN: - switch( wp ) // [Alt]+[...] - { - case VK_UP: - playlist->MoveSelected( -1 ); - break; - - case VK_DOWN: - playlist->MoveSelected( +1 ); - break; - - } - break; - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - case WM_CHAR: - case WM_KEYUP: - // SMALL LETTERS!!!!!! - switch( wp ) - { - case 'z': - case 'y': - case 'x': - case 'c': - case 'v': - case 'b': - case 'l': - return 0; - } - break; - - case WM_KEYDOWN: - { - const bool bShift = ( ( GetKeyState( VK_SHIFT ) & 0x8000 ) != 0 ); - const bool bControl = ( ( GetKeyState( VK_CONTROL ) & 0x8000 ) != 0 ); - - // Note: [Alt] goes to WM_SYSKEYDOWN instead - // const bool bAlt = ( ( GetKeyState( VK_MENU ) & 0x8000 ) != 0 ); - - - switch( wp ) - { - case VK_LEFT: - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_REW5S, 0 ); - return 0; - - case VK_RIGHT: - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_FFWD5S, 0 ); - return 0; - - case VK_UP: - if( bInfinitePlaylist ) - { - // First item has focus? - if( ListView_GetNextItem( WindowPlaylist, ( UINT )-1, LVNI_FOCUSED ) != 0 ) break; - - if( bControl && !bShift ) - { - // Move caret only - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVNI_FOCUSED ); - ListView_SetItemState( WindowPlaylist, playlist->GetMaxIndex(), LVNI_FOCUSED, LVNI_FOCUSED ); - return 0; - } - else - { - // Move Caret and selection - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVNI_FOCUSED ); - ListView_SetItemState( WindowPlaylist, playlist->GetMaxIndex() - 1, LVNI_FOCUSED, LVNI_FOCUSED ); - wp = VK_DOWN; - } - } - break; - - case VK_DOWN: - if( bInfinitePlaylist ) - { - // Last item has focus? - if( ListView_GetNextItem( WindowPlaylist, playlist->GetMaxIndex() - 1, LVNI_FOCUSED ) == -1 ) break; - - if( bControl && !bShift ) - { - // Move caret only - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVNI_FOCUSED ); - ListView_SetItemState( WindowPlaylist, 0, LVNI_FOCUSED, LVNI_FOCUSED ); - return 0; - } - else - { - // Workaround - ListView_SetItemState( WindowPlaylist, ( UINT )-1, 0, LVNI_FOCUSED ); - ListView_SetItemState( WindowPlaylist, 1, LVNI_FOCUSED, LVNI_FOCUSED ); - wp = VK_UP; - } - } - break; - - case VK_DELETE: - { - if( bShift ) break; - - if( bControl ) - playlist->RemoveSelected( false ); - else - playlist->RemoveSelected( true ); - - break; - } - - case VK_RETURN: - playlist->SetCurIndex( ListView_GetNextItem( WindowPlaylist, ( UINT )-1, LVIS_FOCUSED ) ); - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON2, 0 ); - return 0; - - case 'Y': - case 'Z': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON1, 0 ); - return 0; - - case 'X': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON2, 0 ); - return 0; - - case 'C': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON3, 0 ); - return 0; - - case 'V': - // Todo modifiers pressed? -> fadeout/... - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON4, 0 ); - return 0; - - case 'B': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_BUTTON5, 0 ); - return 0; - /* - case 'J': - if( bShift || bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, WINAMP_JUMPFILE, 0 ); - return 0; - */ - case 'L': - if( bControl ) return 0; - SendMessage( WindowMain, WM_COMMAND, bShift ? WINAMP_FILE_DIR : WINAMP_FILE_PLAY, 0 ); - return 0; - } - break; - } - - case WM_LBUTTONDBLCLK: - // iCurIndex = Playlist_MouseToIndex(); - - LVHITTESTINFO hittest; - memset( &hittest, 0, sizeof( LVHITTESTINFO ) ); - GetCursorPos( &hittest.pt ); - ScreenToClient( hwnd, &hittest.pt ); - const int iIndex = ( int )ListView_HitTest( WindowPlaylist, &hittest ); - if( iIndex == -1 ) break; - - playlist->SetCurIndex( iIndex ); - - Playback::Play(); - Playback::UpdateSeek(); - - break; - - } - - return CallWindowProc( WndprocPlaylistBackup, hwnd, message, wp, lp ); -} diff --git a/Externals/MusicMod/Player/Src/PlaylistView.h b/Externals/MusicMod/Player/Src/PlaylistView.h deleted file mode 100644 index 5783ef9075..0000000000 --- a/Externals/MusicMod/Player/Src/PlaylistView.h +++ /dev/null @@ -1,27 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PLAYLIST_VIEW_H -#define PLAYLIST_VIEW_H 1 - - -#include "Global.h" - -namespace PlaylistView -{ - void Create(); - - -}; - - -#endif // PLAYLIST_VIEW_H diff --git a/Externals/MusicMod/Player/Src/Plugin.cpp b/Externals/MusicMod/Player/Src/Plugin.cpp deleted file mode 100644 index fcad94bb74..0000000000 --- a/Externals/MusicMod/Player/Src/Plugin.cpp +++ /dev/null @@ -1,63 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Plugin.h" -#include "InputPlugin.h" -#include "OutputPlugin.h" -#include "VisPlugin.h" -#include "DspPlugin.h" -#include "GenPlugin.h" - - - -vector plugins; // extern - -int Plugin::iWndprocHookCounter = 0; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -Plugin::Plugin( TCHAR * szDllpath ) -{ - hDLL = NULL; - szName = NULL; - iNameLen = 0; - - - iFullpathLen = ( int )_tcslen( szDllpath ); - szFullpath = new TCHAR[ iFullpathLen + 1 ]; - memcpy( szFullpath, szDllpath, iFullpathLen * sizeof( TCHAR ) ); - szFullpath[ iFullpathLen ] = TEXT( '\0' ); - - TCHAR * walk = szFullpath + iFullpathLen - 1; - while( ( *walk != TEXT( '\\') ) && ( walk >= szFullpath ) ) walk--; - if( *walk == TEXT( '\\') ) walk++; - - szFilename = walk; - iFilenameLen = iFullpathLen - ( walk - szFullpath ); - _tcslwr( szFilename ); - - plugins.push_back( this ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -Plugin::~Plugin() -{ - if( szFullpath ) delete [] szFullpath; - if( szName ) delete [] szName; -} diff --git a/Externals/MusicMod/Player/Src/Plugin.h b/Externals/MusicMod/Player/Src/Plugin.h deleted file mode 100644 index eab9cff84c..0000000000 --- a/Externals/MusicMod/Player/Src/Plugin.h +++ /dev/null @@ -1,142 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_PLUGIN_H -#define PA_PLUGIN_H - - - -#include "Global.h" -#include - -using namespace std; - - -class Plugin; -extern vector plugins; - - - -enum PluginType -{ - PLUGIN_TYPE_INPUT, - PLUGIN_TYPE_OUTPUT, - PLUGIN_TYPE_VIS, - PLUGIN_TYPE_DSP, - PLUGIN_TYPE_GEN -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp plugin wrapper -//////////////////////////////////////////////////////////////////////////////// -class Plugin -{ -public: - Plugin( TCHAR * szDllpath ); - ~Plugin(); - - virtual bool Load() = 0; - virtual bool Unload() = 0; - - virtual TCHAR * GetTypeString() = 0; - virtual int GetTypeStringLen() = 0; - virtual PluginType GetType() = 0; - -// void AllowUnload( bool bAllow ) { bAllowUnload = bAllow; } - inline bool IsLoaded() { return ( hDLL != NULL ); } - virtual bool IsActive() = 0; - - inline TCHAR * GetFullpath() { return szFullpath; } - // inline int GetFullpathLen() { return iFilenameLen; } - - inline TCHAR * GetFilename() { return szFilename; } - inline int GetFilenameLen() { return iFilenameLen; } - inline TCHAR * GetName() { return szName; } - inline int GetNameLen() { return iNameLen; } - - template< class PluginKind > - static bool FindAll( TCHAR * szPath, TCHAR * szPattern, bool bKeepLoaded ); - -protected: - HINSTANCE hDLL; ///< Library handle - TCHAR * szName; ///< Name - int iNameLen; ///< Length of name (in characters) - - BOOL iHookerIndex; ///< Window hook index (0..HC-1). Only last can be unloaded - WNDPROC WndprocBackup; ///< Window procedure backup. Is restored when unloading. Only valid for - static int iWndprocHookCounter; ///< Number of window hooks (=HC) - -private: - TCHAR * szFullpath; ///< Full path e.g. "C:\test.dll" - TCHAR * szFilename; ///< Filename e.g. "test.dll" - int iFullpathLen; ///< Length of full path (in characters) - int iFilenameLen; ///< Length of filename (in characters) -}; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -template< class PluginKind > -bool Plugin::FindAll( TCHAR * szPath, TCHAR * szPattern, bool bKeepLoaded ) -{ - const int uPathLen = ( int )_tcslen( szPath ); - const int uPatternLen = ( int )_tcslen( szPattern ); - - TCHAR * szFullPattern = new TCHAR[ uPathLen + 1 + uPatternLen + 1 ]; - memcpy( szFullPattern, szPath, uPathLen * sizeof( TCHAR ) ); - szFullPattern[ uPathLen ] = TEXT( '\\' ); - memcpy( szFullPattern + uPathLen + 1, szPattern, uPatternLen * sizeof( TCHAR ) ); - szFullPattern[ uPathLen + 1 + uPatternLen ] = TEXT( '\0' ); - - - WIN32_FIND_DATA fd; - HANDLE hFind = FindFirstFile( szFullPattern, &fd ); - if( hFind == INVALID_HANDLE_VALUE ) - { - delete [] szFullPattern; - return false; - } - - do - { - const int iFilenameLen = ( int )_tcslen( fd.cFileName ); - - TCHAR * szFullpath = new TCHAR[ uPathLen + 1 + iFilenameLen + 1 ]; - memcpy( szFullpath, szPath, uPathLen * sizeof( TCHAR ) ); - szFullpath[ uPathLen ] = TEXT( '\\' ); - memcpy( szFullpath + uPathLen + 1, fd.cFileName, iFilenameLen * sizeof( TCHAR ) ); - szFullpath[ uPathLen + 1 + iFilenameLen ] = TEXT( '\0' ); - - -//////////////////////////////////////////////////////////////////////////////// - new PluginKind( szFullpath, bKeepLoaded ); -//////////////////////////////////////////////////////////////////////////////// - - - delete [] szFullpath; - } - while( FindNextFile( hFind, &fd ) ); - - FindClose( hFind ); - - - delete [] szFullPattern; - return true; -} - - - -#endif // PA_PLUGIN_H diff --git a/Externals/MusicMod/Player/Src/PluginManager.cpp b/Externals/MusicMod/Player/Src/PluginManager.cpp deleted file mode 100644 index ab5ac603fe..0000000000 --- a/Externals/MusicMod/Player/Src/PluginManager.cpp +++ /dev/null @@ -1,1143 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "PluginManager.h" -#include "Plugin.h" -#include "InputPlugin.h" -#include "OutputPlugin.h" -#include "VisPlugin.h" -#include "DspPlugin.h" -#include "GenPlugin.h" -#include "Console.h" -#include "Main.h" -#include "Util.h" -#include "Config.h" - - - -#define MENU_INPUT_CONFIG 1 -#define MENU_INPUT_ABOUT 2 - -#define MENU_OUTPUT_CONFIG 1 -#define MENU_OUTPUT_ABOUT 2 -#define MENU_OUTPUT_SEP 3 -#define MENU_OUTPUT_ACTIVE 4 -#define MENU_OUTPUT_LOAD 5 - -#define MENU_GEN_CONFIG 1 -#define MENU_GEN_SEP 2 -#define MENU_GEN_LOAD 3 - - - -HWND WindowManager = NULL; // extern -HWND WindowListView = NULL; - - -WNDPROC WndprocListViewBackup = NULL; -LRESULT CALLBACK WndprocListView( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - -LRESULT CALLBACK WndprocManager( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - -HMENU input_menu = NULL; -HMENU output_menu = NULL; -HMENU gen_menu = NULL; - - - -bool bManagerGrid; -ConfBool cbManagerGrid( &bManagerGrid, "ManagerGrid", CONF_MODE_PUBLIC, true ); - -bool bManagerVisible; -WINDOWPLACEMENT WinPlaceManager; - -void WinPlaceManagerCallback( ConfVar * var ) -{ - if( !IsWindow( WindowManager ) ) return; - - GetWindowPlacement( WindowManager, &WinPlaceManager ); - - // MSDN: If the window identified by the hWnd parameter - // is maximized, the showCmd member is SW_SHOWMAXIMIZED. - // If the window is minimized, showCmd is SW_SHOWMINIMIZED. - // Otherwise, it is SW_SHOWNORMAL. - if( !bManagerVisible ) - { - WinPlaceManager.showCmd = SW_HIDE; - } -} - -RECT rManagerDefault = { 500, 400, 1000, 700 }; - -ConfWinPlaceCallback cwpcWinPlaceManager( - &WinPlaceManager, - TEXT( "WinPlaceManager" ), - &rManagerDefault, - WinPlaceManagerCallback -); - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -#define CLASSNAME_PAPMC TEXT( "PLAINAMP_PMC" ) -#define PAPMC_TITLE TEXT( "Plugin Manager" ) - -bool PluginManager::Build() -{ - LoadCommonControls(); - - // Register class - WNDCLASS wc = { - 0, // UINT style - WndprocManager, // WNDPROC lpfnWndProc - 0, // int cbClsExtra - 0, // int cbWndExtra - g_hInstance, // HINSTANCE hInstance - NULL, // HICON hIcon - LoadCursor( NULL, IDC_ARROW ), // HCURSOR hCursor - ( HBRUSH )COLOR_WINDOW, // HBRUSH hbrBackground - NULL, // LPCTSTR lpszMenuName - CLASSNAME_PAPMC // LPCTSTR lpszClassName - }; - - if( !RegisterClass( &wc ) ) return false; - - WindowManager = CreateWindowEx( - WS_EX_TOOLWINDOW, // DWORD dwExStyle - CLASSNAME_PAPMC, // LPCTSTR lpClassName - PAPMC_TITLE, // LPCTSTR lpWindowName - WS_OVERLAPPEDWINDOW | // DWORD dwStyle - WS_CLIPCHILDREN, // - rManagerDefault.left, // int x - rManagerDefault.top, // int y - rManagerDefault.right - rManagerDefault.left, // int nWidth - rManagerDefault.bottom - rManagerDefault.top, // int nHeight - NULL, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - RECT r; - GetClientRect( WindowManager, &r ); - - WindowListView = CreateWindowEx( - WS_EX_CLIENTEDGE, // DWORD dwExStyle - WC_LISTVIEW, // LPCTSTR lpClassName - NULL, // LPCTSTR lpWindowName - WS_VSCROLL | // DWORD dwStyle - LVS_REPORT | // - LVS_SORTASCENDING | // - LVS_SINGLESEL | // - WS_CHILD | // - WS_VISIBLE, // - 0, // int x - 0, // int y - r.right - r.left, // int nWidth - r.bottom - r.top, // int nHeight - WindowManager, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - if( !WindowListView ) return false; - - ListView_SetExtendedListViewStyle( - WindowListView, - LVS_EX_FULLROWSELECT | - ( bManagerGrid ? LVS_EX_GRIDLINES : 0 ) | - LVS_EX_HEADERDRAGDROP - ); - - // (0) File - LVCOLUMN lvc = { - LVCF_TEXT | LVCF_WIDTH | LVCF_FMT, // UINT mask; - LVCFMT_LEFT, // int fmt; - 100, // int cx; - TEXT( "File" ), // LPTSTR pszText; - 5, // int cchTextMax; - 0, // int iSubItem; - 0, // int iOrder; - 0 // int iImage; - }; - ListView_InsertColumn( WindowListView, 0, &lvc ); - - // (1) Status - lvc.pszText = TEXT( "Status" ); - lvc.cchTextMax = 7; - ListView_InsertColumn( WindowListView, 1, &lvc ); - - // (2) Name - lvc.cx = 220; - lvc.pszText = TEXT( "Name" ); - lvc.cchTextMax = 5; - ListView_InsertColumn( WindowListView, 2, &lvc ); - - - // (3) Type - lvc.pszText = TEXT( "Type" ); - lvc.cchTextMax = 5; - ListView_InsertColumn( WindowListView, 3, &lvc ); - - - bManagerVisible = ( WinPlaceManager.showCmd != SW_HIDE ); - SetWindowPlacement( WindowManager, &WinPlaceManager ); - - - // Exchange window procedure - WndprocListViewBackup = ( WNDPROC )GetWindowLong( WindowListView, GWL_WNDPROC ); - if( WndprocListViewBackup != NULL ) - { - SetWindowLong( WindowListView, GWL_WNDPROC, ( LONG )WndprocListView ); - } - - - // Build context menu - input_menu = CreatePopupMenu(); - AppendMenu( input_menu, MF_STRING, MENU_INPUT_CONFIG, TEXT( "Config" ) ); - AppendMenu( input_menu, MF_STRING, MENU_INPUT_ABOUT, TEXT( "About" ) ); - - output_menu = CreatePopupMenu(); - AppendMenu( output_menu, MF_STRING, MENU_OUTPUT_CONFIG, TEXT( "Config" ) ); - AppendMenu( output_menu, MF_STRING, MENU_OUTPUT_ABOUT, TEXT( "About" ) ); - AppendMenu( output_menu, MF_SEPARATOR | MF_GRAYED | MF_DISABLED, MENU_OUTPUT_SEP, NULL ); - AppendMenu( output_menu, MF_STRING, MENU_OUTPUT_ACTIVE, TEXT( "Active" ) ); - AppendMenu( output_menu, MF_STRING, MENU_OUTPUT_LOAD, TEXT( " " ) ); - - gen_menu = CreatePopupMenu(); - AppendMenu( gen_menu, MF_STRING, MENU_GEN_CONFIG, TEXT( "Config" ) ); - AppendMenu( gen_menu, MF_SEPARATOR | MF_GRAYED | MF_DISABLED, MENU_GEN_SEP, NULL ); - AppendMenu( gen_menu, MF_STRING, MENU_GEN_LOAD, TEXT( " " ) ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool PluginManager::Fill() -{ - if( !WindowListView ) return false; - - LVITEM lvi; - memset( &lvi, 0, sizeof( LVITEM ) ); - lvi.mask = LVIF_TEXT | LVIF_PARAM; - - Plugin * plugin; - int iIndex; - vector::iterator iter = plugins.begin(); - while( iter != plugins.end() ) - { -lvi.mask = LVIF_TEXT | LVIF_PARAM; - - plugin = *iter; - lvi.iItem = 0; - lvi.lParam = ( LPARAM )plugin; - - // (0) File - - lvi.iSubItem = 0; - lvi.pszText = plugin->GetFilename(); - lvi.cchTextMax = plugin->GetFilenameLen() + 1; - iIndex = ListView_InsertItem( WindowListView, &lvi ); - lvi.iItem = iIndex; -lvi.mask = LVIF_TEXT; - - // (1) Status - lvi.iSubItem = 1; - if( plugin->IsLoaded() ) - { - if( plugin->IsActive() ) - { - lvi.pszText = TEXT( "Active" ); - } - else - { - lvi.pszText = TEXT( "Loaded" ); - } - lvi.cchTextMax = 7; - } - else - { - lvi.pszText = TEXT( "Not loaded" ); - lvi.cchTextMax = 11; - } - ListView_SetItem( WindowListView, &lvi ); - - // (2) Name - lvi.iSubItem = 2; - lvi.pszText = plugin->GetName(); - lvi.cchTextMax = plugin->GetNameLen() + 1; - ListView_SetItem( WindowListView, &lvi ); - - // (3) Type - lvi.iSubItem = 3; - lvi.pszText = plugin->GetTypeString(); - lvi.cchTextMax = plugin->GetTypeStringLen() + 1; - ListView_SetItem( WindowListView, &lvi ); - - iter++; - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool PluginManager::Destroy() -{ - if( !WindowListView ) return false; - - DestroyWindow( WindowManager ); - DestroyMenu( input_menu ); - DestroyMenu( output_menu ); - DestroyMenu( gen_menu ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool PluginManager::Popup() -{ - if( !WindowListView ) return false; - if( !IsWindowVisible( WindowManager ) ) - ShowWindow( WindowManager, SW_SHOW ); - - SetActiveWindow( WindowManager ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void UpdatePluginStatus( Plugin * plugin, bool bLoaded, bool bActive ) -{ - LVFINDINFO lvfi = { - LVFI_PARAM, // UINT flags - NULL, // LPCTSTR psz - ( LPARAM )plugin, // LPARAM lParam - POINT(), // POINT pt - 0 // UINT vkDirection - }; - - int iIndex = ListView_FindItem( WindowListView, -1, &lvfi ); - if( iIndex != -1 ) - { - LVITEM lvi; - memset( &lvi, 0, sizeof( LVITEM ) ); - lvi.mask = LVIF_TEXT; - lvi.iItem = iIndex; - lvi.iSubItem = 1; - if( bLoaded ) - { - if( bActive ) - { - lvi.pszText = TEXT( "Active" ); - } - else - { - lvi.pszText = TEXT( "Loaded" ); - } - lvi.cchTextMax = 7; - } - else - { - lvi.pszText = TEXT( "Not loaded" ); - lvi.cchTextMax = 11; - } - ListView_SetItem( WindowListView, &lvi ); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenuInput( InputPlugin * input, POINT * p ) -{ - BOOL iIndex = TrackPopupMenu( - input_menu, - TPM_LEFTALIGN | - TPM_TOPALIGN | - TPM_NONOTIFY | - TPM_RETURNCMD | - TPM_RIGHTBUTTON, - p->x, - p->y, - 0, - WindowManager, - NULL - ); - - switch( iIndex ) - { - case MENU_INPUT_ABOUT: - input->About( WindowManager ); - break; - - case MENU_INPUT_CONFIG: - input->Config( WindowManager ); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenuOutput( OutputPlugin * output, POINT * p ) -{ - const bool bLoaded = output->IsLoaded(); - const bool bActive = output->IsActive(); - - EnableMenuItem( - output_menu, - MENU_OUTPUT_CONFIG, - bLoaded ? MF_ENABLED : MF_GRAYED | MF_DISABLED - ); - EnableMenuItem( - output_menu, - MENU_OUTPUT_ABOUT, - bLoaded ? MF_ENABLED : MF_GRAYED | MF_DISABLED - ); - EnableMenuItem( - output_menu, - MENU_OUTPUT_ACTIVE, - bLoaded ? MF_ENABLED : MF_GRAYED | MF_DISABLED - ); - CheckMenuItem( - output_menu, - MENU_OUTPUT_ACTIVE, - bActive ? MF_CHECKED : MF_UNCHECKED - ); - - - MENUITEMINFO mii = { 0 }; - mii.cbSize = sizeof( MENUITEMINFO ); - mii.fMask = MIIM_STATE | MIIM_STRING; - mii.fState = bActive ? MFS_GRAYED | MFS_DISABLED : MFS_ENABLED; - mii.dwTypeData = ( LPTSTR )( bLoaded ? TEXT( "Unload" ) : TEXT( "Load" ) ); - mii.cch = bLoaded ? 7 : 5; - - SetMenuItemInfo( - output_menu, // HMENU hMenu - MENU_OUTPUT_LOAD, // UINT uItem - FALSE, // BOOL fByPosition, - &mii // LPMENUITEMINFO lpmii - ); - - - BOOL iIndex = TrackPopupMenu( - output_menu, - TPM_LEFTALIGN | - TPM_TOPALIGN | - TPM_NONOTIFY | - TPM_RETURNCMD | - TPM_RIGHTBUTTON, - p->x, - p->y, - 0, - WindowManager, - NULL - ); - - switch( iIndex ) - { - case MENU_OUTPUT_CONFIG: - output->Config( WindowManager ); - break; - - case MENU_OUTPUT_ABOUT: - output->About( WindowManager ); - break; - - case MENU_OUTPUT_ACTIVE: - { - if( Playback::IsPlaying() ) - { - MessageBox( WindowManager, TEXT( "Cannot do this while playing!" ), TEXT( "Error" ), MB_ICONERROR ); - break; - } - - if( bActive ) - output->Stop(); - else - output->Start(); - - const bool bActiveNew = output->IsActive(); - if( bActiveNew != bActive ) - { - UpdatePluginStatus( output, bLoaded, bActiveNew ); - } - - break; - } - - case MENU_OUTPUT_LOAD: - { - if( bLoaded ) - output->Unload(); - else - output->Load(); - - const bool bLoadedNew = output->IsLoaded(); - if( bLoadedNew != bLoaded ) - { - UpdatePluginStatus( output, bLoadedNew, bActive ); - } - - break; - } - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenuVis( VisPlugin * vis, POINT * p ) -{ - HMENU vis_menu = CreatePopupMenu(); - - const bool bLoaded = vis->IsLoaded(); - const bool bPluginActive = vis->IsActive(); - - VisModule * mod; - HMENU * menus = NULL; - - const int iModCount = ( int )vis->modules.size(); - if( iModCount == 1 ) - { - // Single module - mod = vis->modules[ 0 ]; - const UINT uFlagsActive = MF_STRING | - ( mod->IsActive() ? MF_CHECKED : MF_UNCHECKED ) | - ( bLoaded ? MF_ENABLED : MF_DISABLED | MF_GRAYED ); - const UINT uFlagsConfig = MF_STRING | - ( bLoaded ? MF_ENABLED : MF_DISABLED | MF_GRAYED ); - AppendMenu( vis_menu, uFlagsActive, 1, TEXT( "Active" ) ); - AppendMenu( vis_menu, uFlagsConfig, 2, TEXT( "Config" ) ); - } - else - { - // Two or more - menus = new HMENU[ iModCount ]; - int iIndex = 0; - vector ::iterator iter = vis->modules.begin(); - while( iter != vis->modules.end() ) - { - mod = *iter; - - menus[ iIndex ] = CreatePopupMenu(); - UINT uFlags = MF_STRING | ( mod->IsActive() ? MF_CHECKED : MF_UNCHECKED ); - AppendMenu( menus[ iIndex ], uFlags, iIndex * 2 + 1, TEXT( "Active" ) ); - AppendMenu( menus[ iIndex ], MF_STRING, iIndex * 2 + 2, TEXT( "Config" ) ); - - uFlags = MF_STRING | MF_POPUP | ( ( !bLoaded || ( bPluginActive && !mod->IsActive() ) ) ? MF_GRAYED | MF_DISABLED : 0 ); - AppendMenu( vis_menu, uFlags, ( UINT_PTR )menus[ iIndex ], mod->GetName() ); - - iIndex++; - iter++; - } - } - - - - const int iPos = ( int )vis->modules.size() * 2 + 1; - AppendMenu( vis_menu, MF_SEPARATOR | MF_GRAYED | MF_DISABLED, iPos, NULL ); - - AppendMenu( - vis_menu, - MF_STRING | ( bPluginActive ? MF_DISABLED | MF_GRAYED : MF_ENABLED ), - iPos + 1, - bLoaded ? TEXT( "Unload" ) : TEXT( "Load" ) - ); - - - BOOL iIndex = TrackPopupMenu( - vis_menu, // HMENU hMenu - TPM_LEFTALIGN | // UINT uFlags - TPM_TOPALIGN | // . - TPM_NONOTIFY | // . - TPM_RETURNCMD | // . - TPM_RIGHTBUTTON, // . - p->x, // int x - p->y, // int y - 0, // int nReserved - WindowManager, // HWND hWnd - NULL // HWND prcRect - ); - - if( iIndex ) - { - if( iIndex >= iPos ) - { - // Load/unload - if( bLoaded ) - vis->Unload(); - else - vis->Load(); - - const bool bLoadedNew = vis->IsLoaded(); - - if( bLoadedNew != bLoaded ) - UpdatePluginStatus( vis, bLoadedNew, FALSE ); - } - else - { - int iWhich = ( iIndex - 1 ) / 2; - if( iIndex & 1 ) - { - // Active - const bool bPluginActive = vis->IsActive(); - - if( !vis->modules[ iWhich ]->IsActive() ) - vis->modules[ iWhich ]->Start(); - else - vis->modules[ iWhich ]->Stop(); - - const bool bPluginActiveNew = vis->IsActive(); - - if( bPluginActiveNew && ( bPluginActiveNew != bPluginActive ) ) - UpdatePluginStatus( vis, TRUE, bPluginActiveNew ); - } - else - { - // Config - vis->modules[ iWhich ]->Config(); - } - } - } - - DestroyMenu( vis_menu ); - if( iModCount > 1 ) - { - for( int i = 0; i < iModCount; i++ ) - DestroyMenu( menus[ i ] ); - delete [] menus; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenuDsp( DspPlugin * dsp, POINT * p ) -{ - HMENU context_menu = CreatePopupMenu(); - - const bool bLoaded = dsp->IsLoaded(); - const bool bPluginActive = dsp->IsActive(); - - DspModule * mod; - - HMENU * menus = NULL; - - HMENU * add_rem_menus = NULL; - - const int iEach = ( 3 * active_dsp_count + 2 ); - - const int iModCount = ( int )dsp->modules.size(); - if( iModCount == 1 ) - { - // Single module - mod = dsp->modules[ 0 ]; - - add_rem_menus = new HMENU[ 2 ]; - add_rem_menus[ 0 ] = CreatePopupMenu(); - add_rem_menus[ 1 ] = CreatePopupMenu(); - - int i; - TCHAR szHere[ 12 ]; - for( i = 0; i < active_dsp_count; i++ ) - { - TCHAR * szName = active_dsp_mods[ i ]->GetName(); - - // Entry for "Add" - _stprintf( szHere, TEXT( "Here (%i)" ), i + 1 ); - AppendMenu( - add_rem_menus[ 0 ], - MF_STRING, - 2 * i + 1, - szHere - ); - AppendMenu( - add_rem_menus[ 0 ], - MF_STRING | MF_DISABLED | MF_GRAYED, - 2 * i + 2, - szName - ); - - // Entry for "Remove" - AppendMenu( - add_rem_menus[ 1 ], - MF_STRING, - 2 * active_dsp_count + 2 + i, - szName - ); - } - _stprintf( szHere, TEXT( "Here (%i)" ), i + 1 ); - AppendMenu( - add_rem_menus[ 0 ], - MF_STRING, - 2 * i + 1, - szHere - ); - - - // Main entries - const UINT uFlagsAdd = MF_STRING | MF_POPUP | - ( ( bLoaded && !mod->IsActive() ) ? 0 : MF_DISABLED | MF_GRAYED ); - const UINT uFlagsRemove = MF_STRING | MF_POPUP | - ( ( bLoaded && active_dsp_count ) ? 0 : MF_GRAYED | MF_DISABLED ); - const UINT uFlagsConfig = MF_STRING | - ( ( bLoaded && mod->IsActive() ) ? 0 : MF_DISABLED | MF_GRAYED ); - - AppendMenu( - context_menu, - uFlagsAdd, - ( UINT_PTR )add_rem_menus[ 0 ], - TEXT( "Add" ) - ); - AppendMenu( - context_menu, - uFlagsRemove, - ( UINT_PTR )add_rem_menus[ 1 ], - TEXT( "Remove" ) - ); - AppendMenu( - context_menu, - uFlagsConfig, - 3 * active_dsp_count + 1 + 1, - TEXT( "Config" ) - ); - } - else - { - // Two or more - menus = new HMENU[ iModCount ]; - add_rem_menus = new HMENU[ 2 * iModCount ]; - - int iIndex = 0; - vector ::iterator iter = dsp->modules.begin(); - while( iter != dsp->modules.end() ) - { - mod = *iter; - - menus[ iIndex ] = CreatePopupMenu(); - - add_rem_menus[ 2 * iIndex ] = CreatePopupMenu(); - add_rem_menus[ 2 * iIndex + 1 ] = CreatePopupMenu(); - - int i; - TCHAR szHere[ 12 ]; - for( i = 0; i < active_dsp_count; i++ ) - { - TCHAR * szName = active_dsp_mods[ i ]->GetName(); - - // Entry for "Add" - _stprintf( szHere, TEXT( "Here (%i)" ), i + 1 ); - AppendMenu( - add_rem_menus[ 2 * iIndex ], - MF_STRING, - ( iIndex * iEach ) + ( 2 * i + 1 ), - szHere - ); - AppendMenu( - add_rem_menus[ 2 * iIndex ], - MF_STRING | MF_DISABLED | MF_GRAYED, - ( iIndex * iEach ) + ( 2 * i + 2 ), - szName - ); - - // Entry for "Remove" - AppendMenu( - add_rem_menus[ 2 * iIndex + 1 ], - MF_STRING, - ( iIndex * iEach ) + ( 2 * active_dsp_count + 2 + i ), - szName - ); - } - _stprintf( szHere, TEXT( "Here (%i)" ), i + 1 ); - AppendMenu( - add_rem_menus[ 2 * iIndex ], - MF_STRING, - ( iIndex * iEach ) + ( 2 * i + 1 ), - szHere - ); - - AppendMenu( - menus[ iIndex ], - MF_STRING | MF_POPUP | ( mod->IsActive() ? MF_DISABLED | MF_GRAYED : 0 ), - ( UINT_PTR )add_rem_menus[ 2 * iIndex ], - TEXT( "Add" ) - ); - AppendMenu( - menus[ iIndex ], - MF_STRING | MF_POPUP | ( active_dsp_count ? 0 : MF_GRAYED | MF_DISABLED ), - ( UINT_PTR )add_rem_menus[ 2 * iIndex + 1 ], - TEXT( "Remove" ) - ); - AppendMenu( - menus[ iIndex ], - MF_STRING | ( mod->IsActive() ? 0 : MF_DISABLED | MF_GRAYED ), - ( iIndex * iEach ) + ( 3 * active_dsp_count + 1 + 1 ), - TEXT( "Config" ) - ); - AppendMenu( context_menu, MF_STRING | MF_POPUP | ( bLoaded ? 0 : ( MF_DISABLED | MF_GRAYED ) ), ( UINT_PTR )menus[ iIndex ], mod->GetName() ); - - iIndex++; - iter++; - } - } - - - const int iPos = ( int )dsp->modules.size() * ( 3 * active_dsp_count + 1 + 1 ) + 1; - AppendMenu( context_menu, MF_SEPARATOR | MF_GRAYED | MF_DISABLED, iPos, NULL ); - - UINT uFlags = MF_STRING; - - AppendMenu( - context_menu, - uFlags | ( bPluginActive ? MF_DISABLED | MF_GRAYED : MF_ENABLED ), - iPos + 1, - bLoaded ? TEXT( "Unload" ) : TEXT( "Load" ) - ); - - - BOOL iIndex = TrackPopupMenu( - context_menu, // HMENU hMenu - TPM_LEFTALIGN | // UINT uFlags - TPM_TOPALIGN | // . - TPM_NONOTIFY | // . - TPM_RETURNCMD | // . - TPM_RIGHTBUTTON, // . - p->x, // int x - p->y, // int y - 0, // int nReserved - WindowManager, // HWND hWnd - NULL // HWND prcRect - ); - - /* - - Example menu - - Mod1 - Add - Here [ 1] - Active1 [ 2] - Here [ 3] - Active2 [ 4] - Here [ 5] - Remove - Active1 [ 6] - Active2 [ 7] - Config [ 8] - Mod2 - Add - Here [ 9] - Active1 [10] - ... - --- - Load/Unload [11] - - */ - - - if( iIndex ) - { - if( iIndex >= iPos ) - { - // Load/unload - if( bLoaded ) - dsp->Unload(); - else - dsp->Load(); - - const bool bLoadedNew = dsp->IsLoaded(); - - if( bLoadedNew != bLoaded ) - UpdatePluginStatus( dsp, bLoadedNew, FALSE ); - } - else - { - int iWhichMod = ( iIndex - 1 ) / iEach; - int iRem = iIndex % iEach; - if( iRem == 0 ) - { - // Config - dsp->modules[ iWhichMod ]->Config(); - - } - else if( iRem < 2 * active_dsp_count + 2 ) - { - // Add module - const bool bPluginActive = dsp->IsActive(); - - dsp->modules[ iWhichMod ]->Start( iRem / 2 ); - - const bool bPluginActiveNew = dsp->IsActive(); - if( bPluginActiveNew != bPluginActive ) - { - UpdatePluginStatus( dsp, TRUE, bPluginActiveNew ); - } - } - else - { - // Remove module - const bool bPluginActive = dsp->IsActive(); - - iWhichMod = iRem - ( 2 * active_dsp_count + 2 ); -/* - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "REM <%i> <%i>" ), iIndex, iWhichMod ); - Console::Append( szBuffer ); -*/ - active_dsp_mods[ iWhichMod ]->Stop(); - - const bool bPluginActiveNew = dsp->IsActive(); - if( bPluginActiveNew != bPluginActive ) - { - UpdatePluginStatus( dsp, TRUE, bPluginActiveNew ); - } - } - } - } - - DestroyMenu( context_menu ); - if( iModCount > 1 ) - { - for( int i = 0; i < iModCount; i++ ) - DestroyMenu( menus[ i ] ); - delete [] menus; - } - - for( int j = 0; j < iModCount; j++ ) - DestroyMenu( add_rem_menus[ j ] ); - delete [] add_rem_menus; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenuGen( GenPlugin * gen, POINT * p ) -{ - const bool bLoaded = gen->IsLoaded(); - - EnableMenuItem( - gen_menu, - MENU_GEN_CONFIG, - bLoaded ? MF_ENABLED : MF_GRAYED | MF_DISABLED - ); - - - MENUITEMINFO mii = { 0 }; - mii.cbSize = sizeof( MENUITEMINFO ); - mii.fMask = MIIM_STATE | MIIM_STRING; - mii.fState = gen->AllowRuntimeUnload() ? MFS_ENABLED : MFS_GRAYED | MFS_DISABLED; - mii.dwTypeData = ( LPTSTR )( bLoaded ? TEXT( "Unload" ) : TEXT( "Load and activate" ) ); - mii.cch = bLoaded ? 7 : 18; - - SetMenuItemInfo( - gen_menu, // HMENU hMenu - MENU_GEN_LOAD, // UINT uItem - FALSE, // BOOL fByPosition, - &mii // LPMENUITEMINFO lpmii - ); - - - BOOL iIndex = TrackPopupMenu( - gen_menu, - TPM_LEFTALIGN | - TPM_TOPALIGN | - TPM_NONOTIFY | - TPM_RETURNCMD | - TPM_RIGHTBUTTON, - p->x, - p->y, - 0, - WindowManager, - NULL - ); - - switch( iIndex ) - { - case MENU_GEN_CONFIG: - gen->Config(); - break; - - case MENU_GEN_LOAD: - { - if( bLoaded ) - gen->Unload(); - else - gen->Load(); - - const bool bLoadedNew = gen->IsLoaded(); - if( bLoadedNew != bLoaded ) - { - UpdatePluginStatus( gen, bLoadedNew, bLoadedNew ); - } - - break; - } - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenu( Plugin * plugin, POINT * p ) -{ - if( !plugin ) return; - - switch( plugin->GetType() ) - { - case PLUGIN_TYPE_INPUT: - ContextMenuInput( ( InputPlugin * )plugin, p ); - break; - - case PLUGIN_TYPE_OUTPUT: - ContextMenuOutput( ( OutputPlugin * )plugin, p ); - break; - - case PLUGIN_TYPE_VIS: - ContextMenuVis( ( VisPlugin * )plugin, p ); - break; - - case PLUGIN_TYPE_DSP: - ContextMenuDsp( ( DspPlugin * )plugin, p ); - break; - - case PLUGIN_TYPE_GEN: - ContextMenuGen( ( GenPlugin * )plugin, p ); - break; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocListView( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - static bool bContextOpen = false; - - switch( message ) - { - case WM_CONTEXTMENU: - { - if( ( HWND )wp != WindowListView ) break; - if( bContextOpen ) break; - bContextOpen = true; -//////////////////////////////////////////////////////////////////////////////// - - POINT p = { LOWORD( lp ), HIWORD( lp ) }; - ScreenToClient( WindowListView, &p ); - - // Which item? - LVHITTESTINFO hti; - memset( &hti, 0, sizeof( LVHITTESTINFO ) ); - hti.pt = p; - ListView_HitTest( WindowListView, &hti ); - - // Which plugin? - LVITEM lvi; - memset( &lvi, 0, sizeof( LVITEM ) ); - lvi.mask = LVIF_PARAM; - lvi.iItem = hti.iItem; - lvi.iSubItem = 0; - - if( !ListView_GetItem( WindowListView, &lvi ) ) - { - bContextOpen = false; - break; - } - Plugin * plugin = ( Plugin * )lvi.lParam; - - // Context menu - p.x = LOWORD( lp ); - p.y = HIWORD( lp ); - ContextMenu( plugin, &p ); - -//////////////////////////////////////////////////////////////////////////////// - bContextOpen = false; - break; - } - } - return CallWindowProc( WndprocListViewBackup, hwnd, message, wp, lp ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocManager( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - switch( message ) - { - case WM_SIZE: - { - // Resize children - RECT client; - GetClientRect( WindowManager, &client ); - - if( WindowListView ) - MoveWindow( WindowListView, 0, 0, client.right - client.left, client.bottom - client.top, TRUE ); - break; - } - - case WM_SYSCOMMAND: - if( ( wp & 0xFFF0 ) == SC_CLOSE ) - { - ShowWindow( hwnd, SW_HIDE ); - return 0; - } - break; - - case WM_DESTROY: - cwpcWinPlaceManager.TriggerCallback(); - cwpcWinPlaceManager.RemoveCallback(); - break; - - case WM_SHOWWINDOW: - bManagerVisible = ( wp == TRUE ); - break; - } - return DefWindowProc( hwnd, message, wp, lp ); -} diff --git a/Externals/MusicMod/Player/Src/PluginManager.h b/Externals/MusicMod/Player/Src/PluginManager.h deleted file mode 100644 index e68fb6d311..0000000000 --- a/Externals/MusicMod/Player/Src/PluginManager.h +++ /dev/null @@ -1,42 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_PLUGIN_MANAGER_H -#define PA_PLUGIN_MANAGER_H - - - -#include "Global.h" -#include "Plugin.h" - - - -extern HWND WindowManager; - - - -void UpdatePluginStatus( Plugin * plugin, bool bLoaded, bool bActive ); - - - -namespace PluginManager -{ - bool Build(); - bool Fill(); - bool Destroy(); - - bool Popup(); -}; - - - -#endif // PA_PLUGIN_MANAGER_H diff --git a/Externals/MusicMod/Player/Src/Prefs.cpp b/Externals/MusicMod/Player/Src/Prefs.cpp deleted file mode 100644 index 359fa40b5f..0000000000 --- a/Externals/MusicMod/Player/Src/Prefs.cpp +++ /dev/null @@ -1,565 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Prefs.h" -#include "Util.h" -#include "Font.h" -#include "Console.h" -#include - -using namespace std; - - -#define CLASSNAME_PREFS TEXT( "CLASSNAME_PREFS" ) -#define TITLE_PREFS TEXT( "Preferences" ) - - -#define PAGE_WIDTH 409 -#define PAGE_HEIGHT 400 - - -#define GAP_LEFT 4 -#define GAP_RIGHT 5 -#define GAP_TOP 4 -#define GAP_BOTTOM 5 -#define SPLITTER_WIDTH 6 -#define SPLITTER_HEIGHT 6 - -#define BOTTOM_SPACE 36 - -#define BUTTON_WIDTH 80 - - -#define PREFS_WIDTH 606 -#define PREFS_HEIGHT ( GAP_TOP + PAGE_HEIGHT + BOTTOM_SPACE ) - - - -struct PrefRecCompare -{ - bool operator()( const prefsDlgRec * a, const prefsDlgRec * b ) const - { - if( a->hInst < b->hInst ) return true; - if( a->dlgID < b->dlgID ) return true; - return strcmp( a->name, b->name ) < 0; - } -}; - - -map rec_to_item; - - -struct AllWeNeed -{ - prefsDlgRec * PageData; - HWND hwnd; -}; - - - -HWND WindowPrefs = NULL; -HWND WindowPage = NULL; -HWND WindowTree = NULL; -HWND ButtonClose = NULL; - -HTREEITEM root = NULL; - -HWND hCurrentPage = NULL; -// bool bKeepFocus = false; - - -LRESULT CALLBACK WndprocPrefs( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); -LRESULT CALLBACK WndprocTree( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); -WNDPROC WndprocTreeBackup = NULL; - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Prefs::Create() -{ - if( WindowPrefs ) return false; - - // Register class - WNDCLASS wc = { - 0, // UINT style - WndprocPrefs, // WNDPROC lpfnWndProc - 0, // int cbClsExtra - 0, // int cbWndExtra - g_hInstance, // HINSTANCE hInstance - NULL, // HICON hIcon - LoadCursor( NULL, IDC_ARROW ), // HCURSOR hCursor - ( HBRUSH )COLOR_WINDOW, // HBRUSH hbrBackground - NULL, // LPCTSTR lpszMenuName - CLASSNAME_PREFS // LPCTSTR lpszClassName - }; - - if( !RegisterClass( &wc ) ) return false; - - const int cxScreen = GetSystemMetrics( SM_CXFULLSCREEN ); - const int cyScreen = GetSystemMetrics( SM_CYFULLSCREEN ); - - // Create window - WindowPrefs = CreateWindowEx( - WS_EX_WINDOWEDGE | // DWORD dwExStyle - WS_EX_TOOLWINDOW, // - CLASSNAME_PREFS, // LPCTSTR lpClassName - TITLE_PREFS, // LPCTSTR lpWindowName - WS_OVERLAPPED | // DWORD dwStyle -// WS_VISIBLE | // - WS_CLIPCHILDREN | // - WS_SYSMENU, // - ( cxScreen - PREFS_WIDTH ) / 2, // int x - ( cyScreen - PREFS_HEIGHT ) / 2, // int y - PREFS_WIDTH, // int nWidth - PREFS_HEIGHT, // int nHeight - NULL, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - - if( !WindowPrefs ) - { - UnregisterClass( CLASSNAME_PREFS, g_hInstance ); - return false; - } - - - RECT r; - GetClientRect( WindowPrefs, &r ); - - -//////////////////////////////////////////////////////////////////////////////// - const int iWidth = PREFS_WIDTH * 2 - r.right; - const int iHeight = PREFS_HEIGHT * 2 - r.bottom; - SetWindowPos( - WindowPrefs, - NULL, - ( cxScreen - iWidth ) / 2, - ( cyScreen - iHeight ) / 2, - iWidth, - iHeight, - SWP_NOZORDER - ); - GetClientRect( WindowPrefs, &r ); -//////////////////////////////////////////////////////////////////////////////// - - - LoadCommonControls(); - - const int iTreeWidth = ( r.right - r.left ) - PAGE_WIDTH - GAP_LEFT - GAP_RIGHT - SPLITTER_WIDTH; - - WindowTree = CreateWindowEx( - WS_EX_CLIENTEDGE, // DWORD dwExStyle - WC_TREEVIEW, // LPCTSTR lpClassName - NULL, // LPCTSTR lpWindowName - WS_VSCROLL | // DWORD dwStyle - WS_VISIBLE | // - WS_CHILD | // - WS_TABSTOP | // - TVS_HASLINES | // - TVS_LINESATROOT | // - TVS_HASBUTTONS | // - TVS_SHOWSELALWAYS | // - TVS_DISABLEDRAGDROP | // - TVS_NONEVENHEIGHT, // - GAP_LEFT, // int x - GAP_TOP, // int y - iTreeWidth, // int nWidth - PAGE_HEIGHT, // int nHeight - WindowPrefs, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - if( !WindowTree ) - { - ; //... - } - - Font::Apply( WindowTree ); - - // Exchange window procedure - WndprocTreeBackup = ( WNDPROC )GetWindowLong( WindowTree, GWL_WNDPROC ); - if( WndprocTreeBackup != NULL ) - { - SetWindowLong( WindowTree, GWL_WNDPROC, ( LONG )WndprocTree ); - } - - - const int iPageLeft = GAP_LEFT + iTreeWidth + SPLITTER_WIDTH; - - WindowPage = CreateWindowEx( - 0, // DWORD dwExStyle - TEXT( "Static" ), // LPCTSTR lpClassName - TEXT( "Nothing to see here" ), // LPCTSTR lpWindowName - WS_TABSTOP | // DWORD dwStyle - WS_VISIBLE | // - WS_CHILD | // - SS_CENTER | // - SS_CENTERIMAGE, // - iPageLeft, // int x - GAP_TOP, // int y - PAGE_WIDTH, // int nWidth - PAGE_HEIGHT, // int nHeight - WindowPrefs, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - if( !WindowPage ) - { - ; //... - } - - Font::Apply( WindowPage ); - - - const int iButtonLeft = ( r.right - r.left ) - GAP_RIGHT - BUTTON_WIDTH - 1; - const int iButtonTop = ( r.bottom - r.top ) - BOTTOM_SPACE + SPLITTER_HEIGHT; - - - ButtonClose = CreateWindowEx( - 0, // DWORD dwExStyle - TEXT( "Button" ), // LPCTSTR lpClassName - TEXT( "Close" ), // LPCTSTR lpWindowName - WS_TABSTOP | // DWORD dwStyle - WS_VISIBLE | // - WS_CHILD | // - BS_PUSHBUTTON | // - BS_TEXT | // - BS_VCENTER, // - iButtonLeft, // int x - iButtonTop, // int y - BUTTON_WIDTH, // int nWidth - BOTTOM_SPACE - SPLITTER_HEIGHT - GAP_BOTTOM, // int nHeight - WindowPrefs, // HWND hWndParent - NULL, // HMENU hMenu - g_hInstance, // HINSTANCE hInstance - NULL // LPVOID lpParam - ); - - Font::Apply( ButtonClose ); - - AllWeNeed * awn_root = new AllWeNeed; -// memset( &awn_root->PageData, 0, sizeof( prefsDlgRec ) ); - awn_root->PageData = NULL; - awn_root->hwnd = NULL; - - TV_INSERTSTRUCT tvi = { - root, // HTREEITEM hParent - TVI_SORT, // HTREEITEM hInsertAfter - { - TVIF_PARAM | TVIF_STATE | TVIF_TEXT, // UINT mask - NULL, // HTREEITEM hItem - TVIS_EXPANDED | TVIS_SELECTED, // UINT state - 0, // UINT stateMask - TEXT( "General" ), // LPSTR pszText - 8, // int cchTextMax - 0, // int iImage - 0, // int iSelectedImage - 0, // int cChildren - ( LPARAM )awn_root // LPARAM lParam - } - }; - - root = TreeView_InsertItem( WindowTree, &tvi ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Prefs::Destroy() -{ - if( !WindowPrefs ) return false; - - DestroyWindow( WindowPrefs ); - UnregisterClass( CLASSNAME_PREFS, g_hInstance ); - WindowPrefs = NULL; - - DestroyWindow( WindowTree ); - WindowTree = NULL; - - DestroyWindow( WindowPage ); - WindowPage = NULL; - - DestroyWindow( ButtonClose ); - ButtonClose = NULL; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Prefs_Show( HTREEITEM item ) -{ - if( !WindowPrefs ) return false; - - // Select and load associated page - TreeView_SelectItem( WindowTree, item ); - - if( !IsWindowVisible( WindowPrefs ) ) - { - ShowWindow( WindowPrefs, SW_SHOW ); - } - - SetActiveWindow( WindowPrefs ); - SetFocus( WindowTree ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Prefs::Show() -{ - return Prefs_Show( root ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Prefs::Show( prefsDlgRec * PageData ) -{ - map::iterator iter = rec_to_item.find( PageData ); - if( iter != rec_to_item.end() ) - { - return Prefs_Show( iter->second ); - } - else - { - return Prefs_Show( root ); - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Prefs::AddPage( prefsDlgRec * PageData ) -{ - // TODO unicode! - if( !WindowPrefs ) return false; - - // Backup - char * NameBackup = new char[ strlen( PageData->name ) + 1 ]; - strcpy( NameBackup, PageData->name ); - prefsDlgRec * PageDataBackup = new prefsDlgRec; - memcpy( PageDataBackup, PageData, sizeof( prefsDlgRec ) ); - PageDataBackup->name = NameBackup; - - AllWeNeed * awn = new AllWeNeed; - awn->PageData = PageDataBackup; - awn->hwnd = NULL; - - TV_INSERTSTRUCT tvi = { - root, // HTREEITEM hParent - TVI_SORT, // HTREEITEM hInsertAfter - { // - TVIF_PARAM | TVIF_STATE | TVIF_TEXT, // UINT mask - NULL, // HTREEITEM hItem - TVIS_EXPANDED | TVIS_SELECTED, // UINT state - 0, // UINT stateMask - PageDataBackup->name, // LPSTR pszText - ( int )strlen( PageDataBackup->name ) + 1, // int cchTextMax - 0, // int iImage - 0, // int iSelectedImage - 0, // int cChildren - ( LPARAM )awn // LPARAM lParam - } - }; - - HTREEITEM new_item = TreeView_InsertItem( WindowTree, &tvi ); - - TreeView_Expand( WindowTree, root, TVE_EXPAND ); - - rec_to_item.insert( pair( PageDataBackup, new_item ) ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocPrefs( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - switch( message ) - { - case WM_NOTIFY: - { - NMHDR * nmhdr = ( NMHDR * )lp; - if( ( nmhdr->hwndFrom == WindowTree ) && ( nmhdr->code == TVN_SELCHANGING ) ) - { - NMTREEVIEW * nmtv = ( NMTREEVIEW * )lp; - TVITEM * OldPage = &nmtv->itemOld; - TVITEM * NewPage = &nmtv->itemNew; - - // Destroy old window - AllWeNeed * old_awn = ( AllWeNeed * )OldPage->lParam; - if( old_awn && old_awn->hwnd && IsWindow( old_awn->hwnd ) ) - { - DestroyWindow( old_awn->hwnd ); - old_awn->hwnd = NULL; - } - - // Create new window - AllWeNeed * new_awn = ( AllWeNeed * )NewPage->lParam; - if( new_awn ) - { - prefsDlgRec * PageData = new_awn->PageData; - if( PageData && PageData->hInst ) // root has NULL here - { - if( !PageData->proc ) - { - MessageBox( 0, TEXT( "proc NULL" ), TEXT( "" ), 0 ); - PageData->proc = ( void * )WndprocPrefs; - } - -/* - RECT r; - GetWindowRect( WindowPage, &r ); - const int iWidth = r.right - r.left; - const int iHeight = r.bottom - r.top; - POINT p = { r.left, r.top }; - ScreenToClient( WindowPrefs, &p ); - MoveWindow( WindowPage, p.x, p.y, iWidth - 10, iHeight - 10, FALSE ); -*/ -// bKeepFocus = true; - - HWND hPage = CreateDialog( - PageData->hInst, // HINSTANCE hInstance, - ( LPCTSTR )PageData->dlgID, // LPCTSTR lpTemplate, - WindowPage, // HWND hWndParent, - ( DLGPROC )PageData->proc // DLGPROC lpDialogFunc - ); - new_awn->hwnd = hPage; - -// MoveWindow( WindowPage, p.x, p.y, iWidth, iHeight, FALSE ); - - ShowWindow( hPage, SW_SHOW ); - UpdateWindow( hPage ); - SetFocus( WindowTree ); -/* - SetActiveWindow( hPage ); - SetActiveWindow( hwnd ); -*/ - hCurrentPage = hPage; -// bKeepFocus = false; - } -/* - else - { - MessageBox( 0, TEXT( "hInst NULL" ), TEXT( "" ), 0 ); - } -*/ - } - else - { - MessageBox( 0, TEXT( "awn NULL" ), TEXT( "" ), 0 ); - } - } - break; - } - - case WM_COMMAND: - switch( HIWORD( wp ) ) - { - case BN_CLICKED: - if( ( HWND )lp == ButtonClose ) - { - PostMessage( hwnd, WM_SYSCOMMAND, SC_CLOSE, 0 ); - } - break; - } - break; - - case WM_SYSCOMMAND: - if( ( wp & 0xFFF0 ) == SC_CLOSE ) - { - ShowWindow( hwnd, SW_HIDE ); - - // Destroy current page so the settings are saved - // (currently be selecting the empty page - TreeView_SelectItem( WindowTree, root ); - -/* - if( hCurrentPage && IsWindow( hCurrentPage ) ) - { - DestroyWindow( hCurrentPage ); - hCurrentPage = NULL; - } -*/ - return 0; - } - break; - - case WM_KEYDOWN: - switch( wp ) - { - case VK_ESCAPE: - PostMessage( WindowPrefs, WM_SYSCOMMAND, SC_CLOSE, 0 ); - break; - - } - break; -/* - case WM_KILLFOCUS: - if( bKeepFocus ) - { - return 1; - } - break; -*/ - } - - return DefWindowProc( hwnd, message, wp, lp ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocTree( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - switch( message ) - { - case WM_KEYDOWN: - switch( wp ) - { - case VK_ESCAPE: - PostMessage( WindowPrefs, WM_SYSCOMMAND, SC_CLOSE, 0 ); - break; - - } - break; - - } - return CallWindowProc( WndprocTreeBackup, hwnd, message, wp, lp ); -} diff --git a/Externals/MusicMod/Player/Src/Prefs.h b/Externals/MusicMod/Player/Src/Prefs.h deleted file mode 100644 index 4100d48760..0000000000 --- a/Externals/MusicMod/Player/Src/Prefs.h +++ /dev/null @@ -1,36 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_PREFS_H -#define PA_PREFS_H - - - -#include "Global.h" -#include "Winamp/wa_ipc.h" - - - -namespace Prefs -{ - bool Create(); - bool Destroy(); - - bool Show(); - bool Show( prefsDlgRec * PageData ); - - bool AddPage( prefsDlgRec * PageData ); -}; - - - -#endif // PA_PREFS_H diff --git a/Externals/MusicMod/Player/Src/Rebar.cpp b/Externals/MusicMod/Player/Src/Rebar.cpp deleted file mode 100644 index b4c62ebeaf..0000000000 --- a/Externals/MusicMod/Player/Src/Rebar.cpp +++ /dev/null @@ -1,1457 +0,0 @@ - - -// ======================================================================================= -// WndprocRebar is called once every second during playback -// ======================================================================================= -// In Toolbar::Create() the progress bar is called the Seekbar - - - - -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Rebar.h" -#include "Font.h" -#include "Main.h" -#include "Playlist.h" -#include "Playback.h" -#include "Console.h" -#include "Util.h" -#include "Config.h" - -#include "Winamp/wa_ipc.h" -#include "Resources/resrc1.h" - - - -#define BAND_ORDER 1 -#define BAND_EQ 2 -#define BAND_SEEK 3 -#define BAND_VOL 4 -#define BAND_PAN 5 -#define BAND_BUTTONS 6 -#define BAND_VIS 7 - -#define BAND_FIRST BAND_ORDER -#define BAND_LAST BAND_VIS - - -#define IMAGE_PREV 0 -#define IMAGE_PLAY 1 -#define IMAGE_PAUSE 2 -#define IMAGE_STOP 3 -#define IMAGE_NEXT 4 -#define IMAGE_OPEN 5 - - -HWND WindowRebar = NULL; // extern -int iRebarHeight = 40; // extern - - -HMENU rebar_menu = NULL; - - -WNDPROC WndprocRebarBackup = NULL; -LRESULT CALLBACK WndprocRebar( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - -HWND WindowOrder = NULL; // extern -HWND WindowEq = NULL; // extern - - -HWND WindowSeek = NULL; // extern -WNDPROC WndprocSeekBackup = NULL; -LRESULT CALLBACK WndprocSeek( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - -HWND WindowVol = NULL; -WNDPROC WndprocVolBackup = NULL; -LRESULT CALLBACK WndprocVol( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - -HWND WindowPan = NULL; -WNDPROC WndprocPanBackup = NULL; -LRESULT CALLBACK WndprocPan( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - -HWND WindowButtons = NULL; - -HWND WindowVis = NULL; // extern -WNDPROC WndprocVisBackup = NULL; -LRESULT CALLBACK WndprocVis( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - - -bool Rebar_BuildOrderBand(); -bool Rebar_BuildEqBand(); -bool Rebar_BuildSeekBand(); -bool Rebar_BuildVolBand(); -bool Rebar_BuildPanBand(); -bool Rebar_BuildButtonsBand(); -bool Rebar_BuildVisBand(); - -BandInfo biOrderBand = { 0 }; -BandInfo biEqBand = { 0 }; -BandInfo biSeekBand = { 0 }; -BandInfo biVolBand = { 0 }; -BandInfo biPanBand = { 0 }; -BandInfo biButtonsBand = { 0 }; -BandInfo biVisBand = { 0 }; - -const BandInfo biOrderBandDefault = { 0, 184, true, true }; -const BandInfo biVolBandDefault = { 1, 450, false, true }; -const BandInfo biPanBandDefault = { 2, 138, false, true }; -const BandInfo biEqBandDefault = { 3, 170, true, true }; -const BandInfo biVisBandDefault = { 4, 350, false, true }; -const BandInfo biButtonsBandDefault = { 5, 147, true, true }; -const BandInfo biSeekBandDefault = { 6, 373, false, true }; - - -void BandCallback( ConfVar * var ); - -ConfBandInfoCallback cbiOrderBand ( &biOrderBand, TEXT( "OrderBand" ), ( BandInfo * )&biOrderBandDefault, BandCallback ); -ConfBandInfoCallback cbiEqBand ( &biEqBand, TEXT( "EqBand" ), ( BandInfo * )&biEqBandDefault, BandCallback ); -ConfBandInfoCallback cbiSeekBand ( &biSeekBand, TEXT( "SeekBand" ), ( BandInfo * )&biSeekBandDefault, BandCallback ); -ConfBandInfoCallback cbiVolBand ( &biVolBand, TEXT( "VolBand" ), ( BandInfo * )&biVolBandDefault, BandCallback ); -ConfBandInfoCallback cbiPanBand ( &biPanBand, TEXT( "PanBand" ), ( BandInfo * )&biPanBandDefault, BandCallback ); -ConfBandInfoCallback cbiButtonsBand( &biButtonsBand, TEXT( "ButtonsBand" ), ( BandInfo * )&biButtonsBandDefault, BandCallback ); -ConfBandInfoCallback cbiVisBand ( &biVisBand, TEXT( "VisBand" ), ( BandInfo * )&biVisBandDefault, BandCallback ); - -bool bInvertPanSlider; -ConfBool cbInvertPanSlider( &bInvertPanSlider, TEXT( "InvertPanSlider" ), CONF_MODE_PUBLIC, false ); - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void BandCallback( ConfVar * var ) -{ - BandInfo * band; - int id; - - if( var == &cbiOrderBand ) - { - band = &biOrderBand; - id = BAND_ORDER; - } - else if( var == &cbiEqBand ) - { - band = &biEqBand; - id = BAND_EQ; - } - else if( var == &cbiSeekBand ) - { - band = &biSeekBand; - id = BAND_SEEK; - } - else if( var == &cbiVolBand ) - { - band = &biVolBand; - id = BAND_VOL; - } - else if( var == &cbiPanBand ) - { - band = &biPanBand; - id = BAND_PAN; - } - else if( var == &cbiButtonsBand ) - { - band = &biButtonsBand; - id = BAND_BUTTONS; - } - else if( var == &cbiVisBand ) - { - band = &biVisBand; - id = BAND_VIS; - } - else - { - return; - } - - band->m_iIndex = ( int )SendMessage( WindowRebar, RB_IDTOINDEX, id, 0 ); - if( band->m_iIndex == -1 ) return; - - REBARBANDINFO rbbi; - rbbi.cbSize = sizeof( REBARBANDINFO ); - rbbi.fMask = RBBIM_SIZE | RBBIM_STYLE; - SendMessage( WindowRebar, RB_GETBANDINFO, band->m_iIndex, ( LPARAM )&rbbi ); - - band->m_iWidth = rbbi.cx; - band->m_bBreak = ( ( rbbi.fStyle & RBBS_BREAK ) == RBBS_BREAK ); - band->m_bVisible = ( ( rbbi.fStyle & RBBS_HIDDEN ) != RBBS_HIDDEN ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Toolbar::Create() -{ - LoadCommonControls(); - - WindowRebar = CreateWindowEx( - WS_EX_TOOLWINDOW | - WS_EX_LEFT | - WS_EX_LTRREADING | - WS_EX_RIGHTSCROLLBAR, - REBARCLASSNAME, - NULL, - WS_CHILD | - WS_VISIBLE | - WS_CLIPSIBLINGS | - WS_CLIPCHILDREN | - WS_BORDER | - RBS_VARHEIGHT | - RBS_BANDBORDERS | - RBS_DBLCLKTOGGLE | // RBS_AUTOSIZE - CCS_TOP | - CCS_NOPARENTALIGN | - CCS_NODIVIDER, // | CCS_ADJUSTABLE, - 0, - 0, - 0, - 0, - WindowMain, - NULL, - g_hInstance, - NULL - ); - -/* - #define STYLE 1 - #if STYLE == 1 - // Normal - MoveWindow( rebar, 0, 0, width, 30, TRUE ); - #elif STYLE == 2 - // Left ONLY - MoveWindow( rebar, 1, 0, width - 1, 30, TRUE ); - #endif -*/ - - REBARINFO rbi = { - sizeof( REBARINFO ), // UINT cbSize; - 0, // UINT fMask - NULL // HIMAGELIST himl - }; - - if( !SendMessage( WindowRebar, RB_SETBARINFO, 0, ( LPARAM )&rbi ) ) - { - return false; - } - - // Exchange window procedure - WndprocRebarBackup = ( WNDPROC )GetWindowLong( WindowRebar, GWL_WNDPROC ); - //WndprocRebarBackup = ( WNDPROC )GetWindowLongPtr( WindowRebar, GWLP_WNDPROC ); // 64 bit - if( WndprocRebarBackup != NULL ) - { - SetWindowLong( WindowRebar, GWL_WNDPROC, ( LONG )WndprocRebar ); - //SetWindowLongPtr( WindowRebar, GWLP_WNDPROC, ( LONG )WndprocRebar ); - } - - rebar_menu = CreatePopupMenu(); - AppendMenu( rebar_menu, MF_STRING, BAND_BUTTONS, TEXT( "Buttons" ) ); - AppendMenu( rebar_menu, MF_STRING, BAND_EQ, TEXT( "Equalizer" ) ); - AppendMenu( rebar_menu, MF_STRING, BAND_ORDER, TEXT( "Order" ) ); - AppendMenu( rebar_menu, MF_STRING, BAND_PAN, TEXT( "Panning" ) ); - AppendMenu( rebar_menu, MF_STRING, BAND_SEEK, TEXT( "Seekbar" ) ); - AppendMenu( rebar_menu, MF_STRING, BAND_VIS, TEXT( "Visualization" ) ); - AppendMenu( rebar_menu, MF_STRING, BAND_VOL, TEXT( "Volume" ) ); - - Rebar_BuildOrderBand(); - Rebar_BuildEqBand(); - Rebar_BuildSeekBand(); - Rebar_BuildVolBand(); - Rebar_BuildPanBand(); - Rebar_BuildButtonsBand(); - Rebar_BuildVisBand(); - - cbiOrderBand.Apply ( WindowRebar, BAND_ORDER ); - cbiEqBand.Apply ( WindowRebar, BAND_EQ ); - cbiSeekBand.Apply ( WindowRebar, BAND_SEEK ); - cbiVolBand.Apply ( WindowRebar, BAND_VOL ); - cbiPanBand.Apply ( WindowRebar, BAND_PAN ); - cbiButtonsBand.Apply( WindowRebar, BAND_BUTTONS ); - cbiVisBand.Apply ( WindowRebar, BAND_VIS ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildOrderBand() -{ - if( !WindowRebar ) return false; - - WindowOrder = CreateWindowEx( - 0, - TEXT( "COMBOBOX" ), - TEXT( "" ), - CBS_HASSTRINGS | - CBS_DROPDOWNLIST | - WS_CHILD, - 0, - 0, - 133, - 200, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - if( !WindowOrder ) return false; - - // Add mode names - TCHAR * szName; - for( int i = ORDER_FIRST; i <= ORDER_LAST; i++ ) - { - szName = Playback::Order::GetModeName( i ); - SendMessage( WindowOrder, CB_ADDSTRING, 0, ( LPARAM )szName ); - } - - // Initial value - SendMessage( WindowOrder, CB_SETCURSEL, Playback::Order::GetCurMode(), 0 ); - - RECT rc; - GetWindowRect( WindowOrder, &rc ); - - REBARBANDINFO rbBand; - rbBand.cbSize = sizeof( REBARBANDINFO ); - rbBand.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbBand.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biOrderBand.m_bBreak ? RBBS_BREAK : 0 ); - - rbBand.lpText = TEXT( " Order " ); - rbBand.hwndChild = WindowOrder; - rbBand.cxMinChild = rc.right - rc.left; - rbBand.cyMinChild = 21; // IMP - rbBand.cx = biOrderBand.m_iWidth; - rbBand.wID = BAND_ORDER; - rbBand.cyChild = 21; - rbBand.cyMaxChild = 21; - rbBand.cyIntegral = 1; - rbBand.cxIdeal = 200; - - // Add band - SendMessage( WindowRebar, RB_INSERTBAND, ( WPARAM )-1, ( LPARAM )&rbBand ); - - Font::Apply( WindowOrder ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool AddPreset( TCHAR * szPresetName ) -{ - const int iLen = _tcslen( szPresetName ); - TCHAR * szFinal = new TCHAR[ iLen + 2 + 1 ]; - szFinal[ 0 ] = TEXT( ' ' ); - szFinal[ iLen + 1 ] = TEXT( ' ' ); - szFinal[ iLen + 2 ] = TEXT( '\0' ); - memcpy( szFinal + 1, szPresetName, iLen * sizeof( TCHAR ) ); - - SendMessage( WindowEq, CB_ADDSTRING, 0, ( LPARAM )szFinal ); - - delete [] szFinal; - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildEqBand() -{ - if( !WindowRebar ) return false; - - WindowEq = CreateWindowEx( - 0, - TEXT( "COMBOBOX" ), - TEXT( "" ), - CBS_HASSTRINGS | - CBS_DROPDOWNLIST | - WS_CHILD, - 0, - 0, - 133, - 300, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - if( !WindowEq ) return false; - - // Add preset names - SendMessage( WindowEq, CB_ADDSTRING, 0, ( LPARAM )TEXT( " Disabled " ) ); - Playback::Eq::ReadPresets( AddPreset ); - - // Initial value - SendMessage( WindowEq, CB_SETCURSEL, Playback::Eq::GetCurIndex() + 1, 0 ); - - // TODO Disabled - // EnableWindow( WindowEq, FALSE ); - - - RECT rc; - GetWindowRect( WindowEq, &rc ); - - REBARBANDINFO rbBand; - rbBand.cbSize = sizeof( REBARBANDINFO ); - rbBand.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbBand.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biEqBand.m_bBreak ? RBBS_BREAK : 0 ); - - rbBand.lpText = TEXT( " EQ " ); - rbBand.hwndChild = WindowEq; - rbBand.cxMinChild = rc.right - rc.left; - rbBand.cyMinChild = 21; // IMP - rbBand.cx = biEqBand.m_iWidth; - rbBand.wID = BAND_EQ; - rbBand.cyChild = 21; - rbBand.cyMaxChild = 21; - rbBand.cyIntegral = 1; - rbBand.cxIdeal = 200; - - // Add band - SendMessage( WindowRebar, RB_INSERTBAND, ( WPARAM )-1, ( LPARAM )&rbBand ); - - Font::Apply( WindowEq ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildSeekBand() -{ - if( !WindowRebar ) return false; - - WindowSeek = CreateWindowEx( - 0, - TRACKBAR_CLASS, - TEXT( "" ), - WS_CHILD | - WS_DISABLED | - TBS_HORZ | - TBS_NOTICKS | - TBS_FIXEDLENGTH | - TBS_BOTH, - 0, - 0, - 300, - 21, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - // Range - SendMessage( - WindowSeek, - TBM_SETRANGE, - TRUE, - ( LPARAM )MAKELONG( 0, 999 ) - ); - - // Thumb size - SendMessage( - WindowSeek, - TBM_SETTHUMBLENGTH, - 14, - 0 - ); - - // Exchange window procedure - WndprocSeekBackup = ( WNDPROC )GetWindowLong( WindowSeek, GWL_WNDPROC ); - if( WndprocSeekBackup != NULL ) - { - SetWindowLong( WindowSeek, GWL_WNDPROC, ( LONG )WndprocSeek ); - } - - - REBARBANDINFO rbbi_seek; - rbbi_seek.cbSize = sizeof( REBARBANDINFO ); - rbbi_seek.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbbi_seek.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biSeekBand.m_bBreak ? RBBS_BREAK : 0 ); - - rbbi_seek.lpText = " Pos"; - rbbi_seek.hwndChild = WindowSeek; - rbbi_seek.cxMinChild = 100; - rbbi_seek.cyMinChild = 21; // IMP - rbbi_seek.cx = biSeekBand.m_iWidth; - rbbi_seek.wID = BAND_SEEK; - rbbi_seek.cyChild = 21; - rbbi_seek.cyMaxChild = 21; - rbbi_seek.cyIntegral = 1; - rbbi_seek.cxIdeal = 300; - - - // Add band - SendMessage( - WindowRebar, - RB_INSERTBAND, - ( WPARAM )-1, - ( LPARAM )&rbbi_seek - ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildVolBand() -{ - if( !WindowRebar ) return false; - - WindowVol = CreateWindowEx( - 0, - TRACKBAR_CLASS, - TEXT( "" ), - WS_CHILD | - TBS_HORZ | - TBS_NOTICKS | - TBS_FIXEDLENGTH | - TBS_BOTH, - 0, - 0, - 200, - 21, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - if( !WindowVol ) return false; - - // Range - SendMessage( WindowVol, TBM_SETRANGE, TRUE, ( LPARAM )MAKELONG( 0, 255 ) ); - - // Initial value - SendMessage( WindowVol, TBM_SETPOS, TRUE, Playback::Volume::Get() ); - - // Thumbs size - SendMessage( WindowVol, TBM_SETTHUMBLENGTH, 14, 0 ); - - // Exchange window procedure - WndprocVolBackup = ( WNDPROC )GetWindowLong( WindowVol, GWL_WNDPROC ); - if( WndprocVolBackup != NULL ) - { - SetWindowLong( WindowVol, GWL_WNDPROC, ( LONG )WndprocVol ); - } - - - REBARBANDINFO rbbi_vol; - rbbi_vol.cbSize = sizeof( REBARBANDINFO ); - rbbi_vol.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbbi_vol.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biVolBand.m_bBreak ? RBBS_BREAK : 0 ); - - rbbi_vol.lpText = TEXT( " Vol" ); - rbbi_vol.hwndChild = WindowVol; - rbbi_vol.cxMinChild = 100; - rbbi_vol.cyMinChild = 21; // IMP - rbbi_vol.cx = biVolBand.m_iWidth; - rbbi_vol.wID = BAND_VOL; - rbbi_vol.cyChild = 21; - rbbi_vol.cyMaxChild = 21; - rbbi_vol.cyIntegral = 1; - rbbi_vol.cxIdeal = 100; - - // Add band - SendMessage( WindowRebar, RB_INSERTBAND, ( WPARAM )-1, ( LPARAM )&rbbi_vol ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildPanBand() -{ - if( !WindowRebar ) return false; - - WindowPan = CreateWindowEx( - 0, - TRACKBAR_CLASS, - TEXT( "" ), - WS_CHILD | - TBS_HORZ | - TBS_NOTICKS | - TBS_FIXEDLENGTH | - TBS_BOTH, - 0, - 0, - 200, - 21, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - if( !WindowPan ) return false; - - // Range - SendMessage( WindowPan, TBM_SETRANGE, TRUE, ( LPARAM )MAKELONG( -127, 127 ) ); - - // Initial value - const int iCurPan = Playback::Pan::Get(); - SendMessage( WindowPan, TBM_SETPOS, TRUE, bInvertPanSlider ? -iCurPan : iCurPan ); - - // Thumb size - SendMessage( WindowPan, TBM_SETTHUMBLENGTH, 14, 0 ); - - - // Exchange window procedure - WndprocPanBackup = ( WNDPROC )GetWindowLong( WindowPan, GWL_WNDPROC ); - if( WndprocPanBackup != NULL ) - { - SetWindowLong( WindowPan, GWL_WNDPROC, ( LONG )WndprocPan ); - } - - - REBARBANDINFO rbbi_pan; - rbbi_pan.cbSize = sizeof( REBARBANDINFO ); - rbbi_pan.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbbi_pan.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biPanBand.m_bBreak ? RBBS_BREAK : 0 ); - - rbbi_pan.lpText = TEXT( " Pan" ); - rbbi_pan.hwndChild = WindowPan; - rbbi_pan.cxMinChild = 100; - rbbi_pan.cyMinChild = 21; // IMP - rbbi_pan.cx = biPanBand.m_iWidth; - rbbi_pan.wID = BAND_PAN; - rbbi_pan.cyChild = 21; - rbbi_pan.cyMaxChild = 21; - rbbi_pan.cyIntegral = 1; - rbbi_pan.cxIdeal = 100; - - // Add band - SendMessage( WindowRebar, RB_INSERTBAND, ( WPARAM )-1, ( LPARAM )&rbbi_pan ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildButtonsBand() -{ - if( !WindowRebar ) return false; - - WindowButtons = CreateWindowEx( - 0, - TOOLBARCLASSNAME, - TEXT( "" ), - WS_CHILD | - TBSTYLE_FLAT | - CCS_NORESIZE | // Means we care about the size ourselves - CCS_NOPARENTALIGN | // Make it work with the rebar control - CCS_NODIVIDER, // No divider on top - 0, - 0, - 100, - 21, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - if( !WindowButtons ) return false; - - SendMessage( WindowButtons, TB_BUTTONSTRUCTSIZE, ( WPARAM )sizeof( TBBUTTON ), 0 ); - - TBBUTTON tb_button[ 7 ]; - - // Make image list, TODO delete later - HIMAGELIST hImages = ImageList_LoadBitmap( - GetModuleHandle( NULL ), // HINSTANCE hi - MAKEINTRESOURCE( IDB_BITMAP1 ), // LPCTSTR lpbmp - 14, // int cx - 6, // int cGrow - RGB( 255, 000, 255 ) // COLORREF crMask - ); - - SendMessage( WindowButtons, TB_SETIMAGELIST, 0, ( LPARAM )hImages ); - // SendMessage( WindowButtons, TB_SETHOTIMAGELIST, 0, ( LPARAM )hImages ); - // SendMessage( WindowButtons, TB_SETDISABLEDIMAGELIST, 0, ( LPARAM )hImages ); - - // Build buttons - tb_button[ 0 ].iBitmap = IMAGE_PREV; - tb_button[ 0 ].idCommand = WINAMP_BUTTON1; - tb_button[ 0 ].fsState = TBSTATE_ENABLED; - tb_button[ 0 ].fsStyle = TBSTYLE_BUTTON; - tb_button[ 0 ].dwData = 0; - tb_button[ 0 ].iString = SendMessage( WindowButtons, TB_ADDSTRING, 0, ( LPARAM )TEXT( "Previous" )); - - tb_button[ 1 ].iBitmap = IMAGE_PLAY; - tb_button[ 1 ].idCommand = WINAMP_BUTTON2; - tb_button[ 1 ].fsState = TBSTATE_ENABLED; - tb_button[ 1 ].fsStyle = TBSTYLE_BUTTON; - tb_button[ 1 ].dwData = 0; - tb_button[ 1 ].iString = SendMessage( WindowButtons, TB_ADDSTRING, 0, ( LPARAM )TEXT( "Play" )); - - tb_button[ 2 ].iBitmap = IMAGE_PAUSE; - tb_button[ 2 ].idCommand = WINAMP_BUTTON3; - tb_button[ 2 ].fsState = TBSTATE_ENABLED; - tb_button[ 2 ].fsStyle = TBSTYLE_BUTTON; - tb_button[ 2 ].dwData = 0; - tb_button[ 2 ].iString = SendMessage( WindowButtons, TB_ADDSTRING, 0, ( LPARAM )TEXT( "Pause" )); - - tb_button[ 3 ].iBitmap = IMAGE_STOP; - tb_button[ 3 ].idCommand = WINAMP_BUTTON4; - tb_button[ 3 ].fsState = TBSTATE_ENABLED; - tb_button[ 3 ].fsStyle = TBSTYLE_BUTTON; - tb_button[ 3 ].dwData = 0; - tb_button[ 3 ].iString = SendMessage( WindowButtons, TB_ADDSTRING, 0, ( LPARAM )TEXT( "Stop" )); - - tb_button[ 4 ].iBitmap = IMAGE_NEXT; - tb_button[ 4 ].idCommand = WINAMP_BUTTON5; - tb_button[ 4 ].fsState = TBSTATE_ENABLED; - tb_button[ 4 ].fsStyle = TBSTYLE_BUTTON; - tb_button[ 4 ].dwData = 0; - tb_button[ 4 ].iString = SendMessage( WindowButtons, TB_ADDSTRING, 0, ( LPARAM )TEXT( "Next" )); - - tb_button[ 5 ].iBitmap = 0; - tb_button[ 5 ].idCommand = -1; - tb_button[ 5 ].fsState = TBSTATE_ENABLED; - tb_button[ 5 ].fsStyle = TBSTYLE_SEP; - tb_button[ 5 ].dwData = 0; - tb_button[ 5 ].iString = 0; - - tb_button[ 6 ].iBitmap = IMAGE_OPEN; - tb_button[ 6 ].idCommand = WINAMP_FILE_PLAY; - tb_button[ 6 ].fsState = TBSTATE_ENABLED; - tb_button[ 6 ].fsStyle = TBSTYLE_BUTTON; - tb_button[ 6 ].dwData = 0; - tb_button[ 6 ].iString = SendMessage( WindowButtons, TB_ADDSTRING, 0, ( LPARAM )TEXT( "Open" )); - - // Add buttons - SendMessage( WindowButtons, TB_SETBUTTONSIZE, 0, MAKELONG( 14, 14 ) ); - SendMessage( WindowButtons, TB_ADDBUTTONS, 7, ( LPARAM )( LPTBBUTTON )&tb_button ); - - // Disable labels - SendMessage( WindowButtons, TB_SETMAXTEXTROWS, 0, 0 ); - - // Resize - RECT r; - GetWindowRect( WindowButtons, &r ); - SetWindowPos( WindowButtons, NULL, 0, 0, 134, r.bottom - r.top, SWP_NOMOVE ); - GetWindowRect( WindowButtons, &r ); - - REBARBANDINFO rbbi_buttons; - rbbi_buttons.cbSize = sizeof( REBARBANDINFO ); - rbbi_buttons.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - // RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbbi_buttons.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biButtonsBand.m_bBreak ? RBBS_BREAK : 0 ); - - // rbbi_buttons.lpText = TEXT( " Playback" ); - rbbi_buttons.hwndChild = WindowButtons; - rbbi_buttons.cxMinChild = r.right - r.left; - rbbi_buttons.cyMinChild = 21; // IMP - rbbi_buttons.cx = r.right - r.left; - rbbi_buttons.wID = BAND_BUTTONS; - rbbi_buttons.cyChild = 21; - rbbi_buttons.cyMaxChild = 21; - rbbi_buttons.cyIntegral = 1; - rbbi_buttons.cxIdeal = r.right - r.left; - - // Add band - SendMessage( WindowRebar, RB_INSERTBAND, ( WPARAM )-1, ( LPARAM )&rbbi_buttons ); - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool Rebar_BuildVisBand() -{ - if( !WindowRebar ) return false; - - WindowVis = CreateWindowEx( - WS_EX_STATICEDGE, - TEXT( "STATIC" ), - TEXT( "" ), - WS_CHILD | SS_CENTER, - 0, - 0, - 100, - 21, - WindowRebar, - NULL, - g_hInstance, - NULL - ); - - if( !WindowVis ) return false; - Font::Apply( WindowVis ); - - // Resize - RECT r; - GetWindowRect( WindowButtons, &r ); -// SetWindowPos( WindowButtons, NULL, 0, 0, 146, r.bottom - r.top, SWP_NOMOVE ); -// GetWindowRect( WindowButtons, &r ); - - REBARBANDINFO rbbi_buttons; - rbbi_buttons.cbSize = sizeof( REBARBANDINFO ); - rbbi_buttons.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - RBBIM_CHILD | // The hwndChild member is valid or must be filled. - RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbbi_buttons.fStyle = RBBS_GRIPPERALWAYS | - RBBS_CHILDEDGE | - ( biVisBand.m_bBreak ? RBBS_BREAK : 0 ); - - rbbi_buttons.lpText = TEXT( " Vis " ); - rbbi_buttons.hwndChild = WindowVis; - rbbi_buttons.cxMinChild = r.right - r.left; - rbbi_buttons.cyMinChild = 21; // IMP - rbbi_buttons.cx = r.right - r.left; - rbbi_buttons.wID = BAND_VIS; - rbbi_buttons.cyChild = 21; - rbbi_buttons.cyMaxChild = 21; - rbbi_buttons.cyIntegral = 1; - rbbi_buttons.cxIdeal = r.right - r.left; - - // Add band - SendMessage( WindowRebar, RB_INSERTBAND, ( WPARAM )-1, ( LPARAM )&rbbi_buttons ); - - // Exchange window procedure - WndprocVisBackup = ( WNDPROC )GetWindowLong( WindowVis, GWL_WNDPROC ); - if( WndprocVisBackup != NULL ) - { - SetWindowLong( WindowVis, GWL_WNDPROC, ( LONG )WndprocVis ); - } - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ContextMenuRebar( POINT * p ) -{ - REBARBANDINFO rbbi; - rbbi.cbSize = sizeof( REBARBANDINFO ); - rbbi.fMask = RBBIM_STYLE; - - bool bBandVisible[ BAND_LAST - BAND_FIRST + 1 ] = { 0 }; // ID to visibility - int iBandIndex [ BAND_LAST - BAND_FIRST + 1 ] = { 0 }; // ID to Index - - for( int i = BAND_FIRST; i <= BAND_LAST; i++ ) - { - const int iArrayIndex = i - BAND_FIRST; - - // Get index - iBandIndex[ iArrayIndex ] = ( int )SendMessage( WindowRebar, RB_IDTOINDEX, i, 0 ); - if( iBandIndex[ iArrayIndex ] == -1 ) break; - - // Get info - if( !SendMessage( WindowRebar, RB_GETBANDINFO, iBandIndex[ iArrayIndex ], ( LPARAM )&rbbi ) ) - { - break; - } - - bBandVisible[ iArrayIndex ] = ( ( rbbi.fStyle & RBBS_HIDDEN ) != RBBS_HIDDEN ); - - // Update menu item - CheckMenuItem( - rebar_menu, - i, - bBandVisible[ iArrayIndex ] ? MF_CHECKED : MF_UNCHECKED - ); - } - - BOOL iIndex = TrackPopupMenu( - rebar_menu, - TPM_LEFTALIGN | - TPM_TOPALIGN | - TPM_NONOTIFY | - TPM_RETURNCMD | - TPM_RIGHTBUTTON, - p->x, - p->y, - 0, - WindowRebar, - NULL - ); - - // Toggle visibility - if( ( iIndex >= BAND_FIRST ) && ( iIndex <= BAND_LAST ) ) - { - const int iArrayIndex = iIndex - BAND_FIRST; - SendMessage( WindowRebar, RB_SHOWBAND, iBandIndex[ iArrayIndex ], bBandVisible[ iArrayIndex ] ? FALSE : TRUE ); - - // Turn off vis child - if( iIndex == BAND_VIS ) - { - HWND hChild = GetWindow( WindowVis, GW_CHILD ); - if( IsWindow( hChild ) ) - { - SendMessage( hChild, WM_DESTROY, 0, 0 ); - } - } - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocRebar( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - //Console::Append( TEXT("Rebar.cpp: WndprocRebar called") ); - - switch( message ) - { - case WM_CONTEXTMENU: // This affects the placement of the progress bar - { - //POINT p; - //GetCursorPos( &p ); - //ContextMenuRebar( &p ); - return 0; - } - - case WM_DESTROY: - cbiOrderBand.TriggerCallback(); - cbiOrderBand.RemoveCallback(); - cbiEqBand.TriggerCallback(); - cbiEqBand.RemoveCallback(); - cbiSeekBand.TriggerCallback(); - cbiSeekBand.RemoveCallback(); - cbiVolBand.TriggerCallback(); - cbiVolBand.RemoveCallback(); - cbiPanBand.TriggerCallback(); - cbiPanBand.RemoveCallback(); - cbiButtonsBand.TriggerCallback(); - cbiButtonsBand.RemoveCallback(); - cbiVisBand.TriggerCallback(); - cbiVisBand.RemoveCallback(); - break; - - } - return CallWindowProc( WndprocRebarBackup, hwnd, message, wp, lp ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocSeek( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - static bool bDown = false; - static int iLastVal = 0; - - //Console::Append( TEXT("Rebar.cpp: WndprocSeek called") ); - - switch( message ) - { - case WM_LBUTTONDOWN: - { - SetFocus( hwnd ); - - // Capture mouse - SetCapture( hwnd ); - bDown = true; - - // NO BREAK! - } - case WM_MOUSEMOVE: - { - if( !bDown ) break; - if( !Playback::IsPlaying() ) return 0; // Deny slider move - - RECT r; - GetWindowRect( hwnd, &r ); - - const int iWidth = r.right - r.left; - if( !iWidth ) return 0; - int iVal = 1000 * MAX( 0, MIN( ( short )LOWORD( lp ), iWidth ) ) / iWidth; - - // Snap - if( ( short )LOWORD( lp ) < 7 ) - { - iVal = 0; - } - else if( abs( iWidth - ( short )LOWORD( lp ) ) < 7 ) - { - iVal = 999; - } - - // Update slider - PostMessage( hwnd, TBM_SETPOS, ( WPARAM )( TRUE ), iVal ); - - // Seek - iLastVal = iVal; - Playback::SeekPercent( iLastVal / 10.0f ); - - // TODO: Seek on slide ON/OFF - - - return 0; - } - case WM_LBUTTONUP: - case WM_NCLBUTTONUP: - { - // Release capture - bDown = false; - ReleaseCapture(); - - if( !Playback::IsPlaying() ) return 0; - - int ms = Playback::PercentToMs( iLastVal / 10.0f ); - if( ms < 0 ) break; - - int h = ms / 3600000; - int m = ( ms / 60000 ) % 60; - int s = ( ms / 1000 ) % 60; - ms = ms % 1000; - - - TCHAR szBuffer[ 5000 ]; - - /* - bool bShowMs = false; - - if( h ) - { - if( bShowMs ) - { - */ - - // 00:00:00.000 - _stprintf( szBuffer, TEXT( "Jumped to %02i:%02i:%02i.%03i" ), h, m, s, ms ); - Console::Append( szBuffer ); - Console::Append( " " ); - - /* - - } - else - { - // 00:00:00 - } - } - else if( m ) - { - if( bShowMs ) - { - // 00:00.000 - } - else - { - // 00:00 - } - } - else - { - if( bShowMs ) - { - // 00.000 - } - else - { - // 00s - } - } - */ - - return 0; - } - - case WM_KEYDOWN: - case WM_KEYUP: - SendMessage( WindowPlaylist, message, wp, lp ); - return 0; - - } - return CallWindowProc( WndprocSeekBackup, hwnd, message, wp, lp ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocVol( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - static bool bDown = false; - static int iLastVal = 0; - - switch( message ) - { - case WM_LBUTTONDOWN: - SetFocus( hwnd ); - - // Capture mouse - SetCapture( hwnd ); - bDown = true; - - // NO BREAK! - - case WM_MOUSEMOVE: - { - if( !bDown ) break; - - RECT r; - GetWindowRect( hwnd, &r ); - - const int iWidth = r.right - r.left; - if( !iWidth ) return 0; - const int x = ( int )( short )LOWORD( lp ); - int iVal = 255 * x / ( int )iWidth; - - if( iVal < 0 ) - iVal = 0; - else if( ( iVal > 255 ) || ( abs( iWidth - x ) < 7 ) ) // Snap - iVal = 255; - - // Update slider - PostMessage( hwnd, TBM_SETPOS , ( WPARAM )( TRUE ), iVal ); - - // Apply volume - iLastVal = iVal; - Playback::Volume::Set( iLastVal ); - - return 0; - } - case WM_LBUTTONUP: - case WM_NCLBUTTONUP: - { - // Release capture - bDown = false; - ReleaseCapture(); - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Volume changed to %i%%" ), iLastVal * 100 / 255 ); - Console::Append( szBuffer ); - Console::Append( " " ); - - return 0; - } - } - return CallWindowProc( WndprocVolBackup, hwnd, message, wp, lp ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocPan( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - static bool bDown = false; - static int iLastVal = 0; - - switch( message ) - { - case WM_LBUTTONDOWN: - SetFocus( hwnd ); - - // Capture mouse - SetCapture( hwnd ); - bDown = true; - - // NO BREAK! - - case WM_MOUSEMOVE: - { - if( !bDown ) break; - - RECT r; - GetWindowRect( hwnd, &r ); - - const int iWidth = r.right - r.left; - if( !iWidth ) return 0; - const int x = ( int )( short )LOWORD( lp ); - int iVal = 254 * x / ( int )iWidth - 127; - - if( iVal < -127 ) - iVal = -127; - else if( iVal > 127 ) - iVal = 127; - else if( abs( ( int )iWidth / 2 - x ) < 7 ) // Snap - iVal = 0; - - // Update slider - PostMessage( hwnd, TBM_SETPOS , ( WPARAM )( TRUE ), iVal ); - - // Invert if needed (slider needs original value!) - if( bInvertPanSlider ) - { - iVal = -iVal; - } - - // Apply panning - iLastVal = iVal; - Playback::Pan::Set( iVal ); - - return 0; - } - case WM_LBUTTONUP: - case WM_NCLBUTTONUP: - { - // Release capture - bDown = false; - ReleaseCapture(); - - TCHAR szBuffer[ 5000 ]; - if( iLastVal < 0 ) - _stprintf( szBuffer, TEXT( "Panning changed to %i%% left" ), -iLastVal * 100 / 127 ); - else if( iLastVal == 0 ) - _stprintf( szBuffer, TEXT( "Panning changed to center" ) ); - else // if( iLastVal > 0 ) - _stprintf( szBuffer, TEXT( "Panning changed to %i%% right" ), iLastVal * 100 / 127 ); - Console::Append( szBuffer ); - Console::Append( " " ); - - return 0; - } - } - return CallWindowProc( WndprocPanBackup, hwnd, message, wp, lp ); -} - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocVis( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - switch( message ) - { - case WM_SHOWWINDOW: - { - if( wp == FALSE ) - { - const HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( !IsWindow( hChild ) ) break; - - // Strange workaround - ShowWindow( hChild, FALSE ); - SetParent( hChild, NULL ); - PostMessage( hChild, WM_SYSCOMMAND, SC_CLOSE, 0 ); - } - } - break; - - case WM_SIZE: - { - // Resize vis child - HWND hChild = GetWindow( hwnd, GW_CHILD ); - if( !IsWindow( hChild ) ) break; - MoveWindow( hChild, 0, 0, LOWORD( lp ), HIWORD( lp ), TRUE ); - } - break; - } - return CallWindowProc( WndprocVisBackup, hwnd, message, wp, lp ); -} - - -///////////////////////// - - - - /* - // Create the toolbar control to be added. - // hwndTB = CreateToolbar(hwndOwner, dwStyle); - - // Get the height of the toolbar. - dwBtnSize = SendMessage(hwndTB, TB_GETBUTTONSIZE, 0,0); - - // Set values unique to the band with the toolbar. - rbBand.lpText = "Tool Bar"; - rbBand.hwndChild = hwndTB; - rbBand.cxMinChild = 0; - rbBand.cyMinChild = HIWORD(dwBtnSize); - rbBand.cx = 250; - - // Add the band that has the toolbar. - SendMessage(rebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand); - */ - - -/////////////////////////////////////// - -/* -void band_dummy() -{ - REBARBANDINFO rbbi3; - rbbi3.cbSize = sizeof( REBARBANDINFO ); - rbbi3.fMask = 0 | - // RBBIM_BACKGROUND | // The hbmBack member is valid or must be filled. - // RBBIM_CHILD | // The hwndChild member is valid or must be filled. - // RBBIM_CHILDSIZE | // The cxMinChild, cyMinChild, cyChild, cyMaxChild, and cyIntegral members are valid or must be filled. - // RBBIM_COLORS | // The clrFore and clrBack members are valid or must be filled. - // RBBIM_HEADERSIZE | // Version 4.71. The cxHeader member is valid or must be filled. - RBBIM_IDEALSIZE | // Version 4.71. The cxIdeal member is valid or must be filled. - RBBIM_ID | // The wID member is valid or must be filled. - // RBBIM_IMAGE | // The iImage member is valid or must be filled. - // RBBIM_LPARAM | // Version 4.71. The lParam member is valid or must be filled. - RBBIM_SIZE | // The cx member is valid or must be filled. - RBBIM_STYLE | // The fStyle member is valid or must be filled. - RBBIM_TEXT | // The lpText member is valid or must be filled. - 0; - - rbbi3.fStyle = RBBS_GRIPPERALWAYS; // | RBBS_BREAK; - rbbi3.lpText = " "; //NULL; // "Dummy"; - rbbi3.hwndChild = NULL; - rbbi3.cxMinChild = 10; //rc.right - rc.left; - rbbi3.cyMinChild = 21; // IMP - rbbi3.cx = 300; - rbbi3.wID = BAND_ID_DUMMY; - rbbi3.cyChild = 21; //rc.bottom - rc.top; - rbbi3.cyMaxChild = 21; // rc.bottom - rc.top; - rbbi3.cyIntegral = 1; - rbbi3.cxIdeal = 700; //rc.right - rc.left; - - // Add the band that has the combo box. - SendMessage( - rebar, - RB_INSERTBAND, - ( WPARAM )-1, - ( LPARAM )&rbbi3 - ); -} -*/ diff --git a/Externals/MusicMod/Player/Src/Rebar.h b/Externals/MusicMod/Player/Src/Rebar.h deleted file mode 100644 index e2f1feb685..0000000000 --- a/Externals/MusicMod/Player/Src/Rebar.h +++ /dev/null @@ -1,40 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_TOOLBAR_H -#define PA_TOOLBAR_H - - - -#include "Global.h" - - - -extern HWND WindowRebar; -extern HWND WindowOrder; -extern HWND WindowEq; -extern HWND WindowSeek; - -extern HWND WindowVis; - -extern int iRebarHeight; - - - -namespace Toolbar -{ - bool Create(); -}; - - - -#endif // PA_TOOLBAR_H diff --git a/Externals/MusicMod/Player/Src/Resources/Buttons.bmp b/Externals/MusicMod/Player/Src/Resources/Buttons.bmp deleted file mode 100644 index 3fb32f69cd10e66d25c5c4fd53e3403728275f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 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 diff --git a/Externals/MusicMod/Player/Src/Resources/resrc1.h b/Externals/MusicMod/Player/Src/Resources/resrc1.h deleted file mode 100644 index 832fdbce47..0000000000 --- a/Externals/MusicMod/Player/Src/Resources/resrc1.h +++ /dev/null @@ -1,17 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by resrc1.rc -// -#define IDB_BITMAP1 102 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 103 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/Externals/MusicMod/Player/Src/Resources/resrc1.rc b/Externals/MusicMod/Player/Src/Resources/resrc1.rc deleted file mode 100644 index 83bbad7f33..0000000000 --- a/Externals/MusicMod/Player/Src/Resources/resrc1.rc +++ /dev/null @@ -1,131 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resrc1.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -//#include "resource.h" -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON1 ICON "Plainamp.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,2,3,1 - PRODUCTVERSION 0,2,3,1 - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", "Hartwork Project (http://www.hartwork.org)" - VALUE "FileDescription", "Plainamp" - VALUE "FileVersion", "0, 2, 3, 1" - VALUE "InternalName", "Plainamp" - VALUE "LegalCopyright", "Copyright (C) 2005 Sebastian Pipping" - VALUE "ProductName", "Plainamp" - VALUE "ProductVersion", "0, 2, 3, 1" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_BITMAP1 BITMAP "Buttons.bmp" -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// German (Germany) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) -#ifdef _WIN32 -LANGUAGE LANG_GERMAN, SUBLANG_GERMAN -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resrc1.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""resource.h""\r\n" - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // German (Germany) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Externals/MusicMod/Player/Src/Status.cpp b/Externals/MusicMod/Player/Src/Status.cpp deleted file mode 100644 index b12b98e128..0000000000 --- a/Externals/MusicMod/Player/Src/Status.cpp +++ /dev/null @@ -1,80 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Status.h" -#include "Main.h" -#include "Util.h" -#include "GlobalVersion.h" - - - -int iStatusHeight = 40; // extern -HWND WindowStatus = NULL; // extern - -const TCHAR * const szStatusDefault = TEXT( " " ) PLAINAMP_LONG_TITLE; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool BuildMainStatus() -{ - LoadCommonControls(); - - WindowStatus = CreateWindowEx( - 0, - STATUSCLASSNAME, - szStatusDefault, - WS_CHILD | - WS_VISIBLE, - CW_USEDEFAULT, - CW_USEDEFAULT, - CW_USEDEFAULT, - CW_USEDEFAULT, - WindowMain, - NULL, - g_hInstance, - NULL - ); - - if( !WindowStatus ) return false; - - RECT r = { 0, 0, 0, 0 }; - GetWindowRect( WindowStatus, &r ); - iStatusHeight = r.bottom - r.top; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool StatusUpdate( TCHAR * szText ) -{ - if( !WindowStatus ) return false; - SetWindowText( WindowStatus, szText ); - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void StatusReset() -{ - if( !WindowStatus ) return; - SetWindowText( WindowStatus, szStatusDefault ); -} diff --git a/Externals/MusicMod/Player/Src/Status.h b/Externals/MusicMod/Player/Src/Status.h deleted file mode 100644 index 08e12d3527..0000000000 --- a/Externals/MusicMod/Player/Src/Status.h +++ /dev/null @@ -1,33 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_STATUS_H -#define PA_STATUS_H - - - -#include "Global.h" - - - -extern int iStatusHeight; -extern HWND WindowStatus; - - - -bool BuildMainStatus(); -bool StatusUpdate( TCHAR * szText ); -void StatusReset(); - - - -#endif // PA_STATUS_H diff --git a/Externals/MusicMod/Player/Src/Timer.cpp b/Externals/MusicMod/Player/Src/Timer.cpp deleted file mode 100644 index 8cf2a64747..0000000000 --- a/Externals/MusicMod/Player/Src/Timer.cpp +++ /dev/null @@ -1,126 +0,0 @@ -// ================================================================================================ -// File description -// ---------------- -/* In the GUI build there is a timer that is initiated with SetTimer() that will setup a timer that - calls the lpTimerFunc function pointer as long as your program is running a message loop. If it - doesn't run one, like in a console application (the NOGUI build), you'll have to use a different - kind of timer API, like timeSetEvent() or CreateThreadPoolTimer(). These timers use a different - thread to make the callback so be careful to properly lock and synchronize. */ -// ================================================================================================ - -// ================================================================================================ -// Library requirements -// ---------------- -// This program needs winmm.lib. There's no simpler or better way to make a timer withouth it. -// ================================================================================================ - -// ================================================================================================ -// Includes -// ---------------- -#include -//using namespace std; -#include -#include -#include "Global.h" -#include "PlayerExport.h" - -#include "InputPlugin.h" -// ================================================================================================ - - -//////////////////////////////////////////////////////////////////////////////////////////// -// Declarations and definitions -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ - -void MakeTime(); - -int g_Stop = 0; -extern std::string CurrentlyPlayingFile; -extern bool GlobalPause; -/////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////// -// Manage restart when playback for a file has reached the end of the file -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -#ifdef _M_X64 - void CALLBACK Update() -#else - void CALLBACK Update(unsigned int,unsigned int,unsigned long,unsigned long,unsigned long) -#endif -{ - //NOTICE_LOG(AUDIO,"DLL > Update() > Begin (%i)\n", active_input_plugin); - - // -------------------------------- - // Manage restart when playback for a file has reached the end of the file - // -------------- - // Check if the input plugin is activated - if(!active_input_plugin || !active_input_plugin->plugin) - { - //NOTICE_LOG(AUDIO,"The input plugin is not activated yet\n"); - } - else - { - const int ms_len = active_input_plugin->plugin->GetLength(); - const int ms_cur = active_input_plugin->plugin->GetOutputTime(); - - // Get the current playback progress - float progress; - if(ms_len > 0) - progress = (float)ms_cur / ms_len; - else - progress = 0; - - if ( progress > 0.7 ) // Only show this if we are getting close to the end, for bugtesting - // basically - { - //NOTICE_LOG(AUDIO,"Playback progress <%i of %i>\n", ms_cur, ms_len); - } - - // Because cur never go all the way to len we can't use a == comparison. Insted of this - // we could also check if the location is the same as right before. - if(ms_cur > ms_len - 1000 && !GlobalPause) // avoid restarting in cases where we just pressed pause - { - NOTICE_LOG(AUDIO,"Restart <%s>\n", CurrentlyPlayingFile.c_str()); - Player_Play((char *)CurrentlyPlayingFile.c_str()); - } - } - // -------------- - - //NOTICE_LOG(AUDIO,"Make new time\n"); - MakeTime(); // Make a new one -} - -void MakeTime() -{ - timeSetEvent( - 2000, // Interval in ms - 0, - #ifdef _M_X64 - (LPTIMECALLBACK) Update, // The function - #else - Update, - #endif - 0, - 0); -} -/////////////////////////// - - - -//////////////////////////////////////////////////////////////////////////////////////////// -// Start the timer -// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ -int MainTimer() -{ - MakeTime(); - - //while( g_Stop == 0 ) - //{ - // cout << "."; - //} - - //NOTICE_LOG(AUDIO,"MakeTime\n"); - - return 0; -} -/////////////////////////// diff --git a/Externals/MusicMod/Player/Src/Unicode.cpp b/Externals/MusicMod/Player/Src/Unicode.cpp deleted file mode 100644 index 820895d93e..0000000000 --- a/Externals/MusicMod/Player/Src/Unicode.cpp +++ /dev/null @@ -1,77 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Unicode.h" - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ToAnsi( char * szDest, wchar_t * szSource, int iLen ) -{ - char * const szBytesource = ( char * )szSource; - for( int i = 0; i < iLen; i++ ) - { - szDest[ i ] = szBytesource[ 2 * i + 1 ]; - } -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -/* -void ToUnicode( wchar_t * szDest, char * szSource, int iLen ) -{ - for( int i = 0; i < iLen; i++ ) - { - szDest[ i ] = ( wchar_t )szSource[ i ]; - } -} -*/ - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ToTchar( TCHAR * szDest, wchar_t * szSource, int iLen ) -{ -#ifdef PA_UNICODE - memcpy( szDest, szSource, 2 * iLen ); -#else - char * const stByteSource = ( TCHAR * )szSource; - for( int i = 0; i < iLen; i++ ) - { - szDest[ i ] = stByteSource[ 2 * i + 1 ]; - } -#endif -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void ToTchar( TCHAR * szDest, char * szSource, int iLen ) -{ -#ifdef PA_UNICODE - for( int i = 0; i < iLen; i++ ) - { - szDest[ i ] = szSource[ 2 * i + 1 ]; - } -#else - memcpy( szDest, szSource, iLen ); -#endif -} diff --git a/Externals/MusicMod/Player/Src/Unicode.h b/Externals/MusicMod/Player/Src/Unicode.h deleted file mode 100644 index 10a53e873c..0000000000 --- a/Externals/MusicMod/Player/Src/Unicode.h +++ /dev/null @@ -1,29 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_UNICODE_H -#define PA_UNICODE_H - - - -#include "Global.h" - - - -void ToAnsi( char * szDest, wchar_t * szSource, int iLen ); -// void ToUnicode( wchar_t * szDest, char * szSource, int iLen ) -void ToTchar( TCHAR * szDest, wchar_t * szSource, int iLen ); -void ToTchar( TCHAR * szDest, char * szSource, int iLen ); - - - -#endif // PA_UNICODE_H diff --git a/Externals/MusicMod/Player/Src/Util.cpp b/Externals/MusicMod/Player/Src/Util.cpp deleted file mode 100644 index 26c5deb3dc..0000000000 --- a/Externals/MusicMod/Player/Src/Util.cpp +++ /dev/null @@ -1,48 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Util.h" - - - -#ifndef ICC_STANDARD_CLASSES -# define ICC_STANDARD_CLASSES 0x00004000 -#endif - - - -bool bLoaded = false; -bool bAvailable = false; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool LoadCommonControls() -{ - if( bLoaded ) return bAvailable; - - INITCOMMONCONTROLSEX icce = { - sizeof( INITCOMMONCONTROLSEX ), - ICC_BAR_CLASSES | // Statusbar, trackbar, toolbar - ICC_COOL_CLASSES | // Rebar - ICC_LISTVIEW_CLASSES | // Listview - ICC_STANDARD_CLASSES | // - ICC_TREEVIEW_CLASSES // Treeview - }; - - bLoaded = true; - bAvailable = ( InitCommonControlsEx( &icce ) == TRUE ); - - return bAvailable; -} diff --git a/Externals/MusicMod/Player/Src/Util.h b/Externals/MusicMod/Player/Src/Util.h deleted file mode 100644 index 5bee2a9d2c..0000000000 --- a/Externals/MusicMod/Player/Src/Util.h +++ /dev/null @@ -1,26 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_UTIL_H -#define PA_UTIL_H - - - -#include "Global.h" - - - -bool LoadCommonControls(); - - - -#endif // PA_UTIL_H diff --git a/Externals/MusicMod/Player/Src/VisCache.cpp b/Externals/MusicMod/Player/Src/VisCache.cpp deleted file mode 100644 index 37d5d1497b..0000000000 --- a/Externals/MusicMod/Player/Src/VisCache.cpp +++ /dev/null @@ -1,303 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "VisCache.h" -#include "Console.h" -#include "malloc.h" - - - -unsigned char * SpecCacheLeft; -unsigned char * SpecCacheRight; -unsigned char * WaveCacheLeft; -unsigned char * WaveCacheRight; - -int iWritePos; -int iWriteOffset; // == iWritePos * 576 - -int iVisLatency; -int iDataFps; -int iCacheLen; - -bool bReady = false; - -int iReadTimeMs = 0; -int iWriteTimeMs = 0; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache_Resize( int iLatency, int iFps ) -{ - // if( !bReady ) return; - - const int iNewCacheLen = ( iFps * iLatency ) / 1000 + 1; -/* -TCHAR szBuffer[ 5000 ]; -_stprintf( szBuffer, TEXT( "RESIZE ( %i * %i ) / 1000 + 1 === %i" ), iFps, iLatency, iNewCacheLen ); -Console::Append( szBuffer ); -*/ - const int iByteNewCacheLen = iNewCacheLen * 576; - if( !iCacheLen ) - { - // First time - SpecCacheLeft = ( unsigned char * )malloc( iByteNewCacheLen ); -// memset( SpecCacheLeft, 0, iByteNewCacheLen ); - SpecCacheRight = ( unsigned char * )malloc( iByteNewCacheLen ); -// memset( SpecCacheRight, 0, iByteNewCacheLen ); - WaveCacheLeft = ( unsigned char * )malloc( iByteNewCacheLen ); -// memset( WaveCacheLeft, 0, iByteNewCacheLen ); - WaveCacheRight = ( unsigned char * )malloc( iByteNewCacheLen ); -// memset( WaveCacheRight, 0, iByteNewCacheLen ); - } - else if( iNewCacheLen > iCacheLen ) - { - // Grow - const int iByteCacheLen = iCacheLen * 576; - const int iByteClearLen = ( iNewCacheLen - iCacheLen ) * 576; - - SpecCacheLeft = ( unsigned char * )realloc( SpecCacheLeft, iByteNewCacheLen ); -// memset( SpecCacheLeft + iByteCacheLen, 0, iByteClearLen ); - SpecCacheRight = ( unsigned char * )realloc( SpecCacheRight, iByteNewCacheLen ); -// memset( SpecCacheRight + iByteCacheLen, 0, iByteClearLen ); - WaveCacheLeft = ( unsigned char * )realloc( WaveCacheLeft, iByteNewCacheLen ); -// memset( WaveCacheLeft + iByteCacheLen, 0, iByteClearLen ); - WaveCacheRight = ( unsigned char * )realloc( WaveCacheRight, iByteNewCacheLen ); -// memset( WaveCacheRight + iByteCacheLen, 0, iByteClearLen ); - } - - iCacheLen = iNewCacheLen; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::Create() -{ - if( bReady ) return; - - iWritePos = 0; - iWriteOffset = 0; - - iVisLatency = 50; - iDataFps = 40; - iCacheLen = 0; - - bReady = true; - - - VisCache_Resize( iVisLatency, iDataFps ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::Destroy() -{ - if( !bReady ) return; - - if( SpecCacheLeft ) free( SpecCacheLeft ); - if( SpecCacheRight ) free( SpecCacheRight ); - if( WaveCacheLeft ) free( WaveCacheLeft ); - if( WaveCacheRight ) free( WaveCacheRight ); - - bReady = false; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::EnsureLatency( int iLatency ) -{ - if( !bReady ) return; - - if( iLatency <= iVisLatency ) return; - - VisCache_Resize( - iLatency, - iDataFps - ); - iVisLatency = iLatency; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::EnsureDataFps( int iFps ) -{ - if( !bReady ) return; - if( iFps <= iDataFps ) return; - - VisCache_Resize( - iVisLatency, - iFps - ); - iDataFps = iFps; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::Clean() -{ - if( !bReady ) return; - - const int iByteCacheLen = iCacheLen * 576; - memset( SpecCacheLeft, 0, iByteCacheLen ); - memset( SpecCacheRight, 0, iByteCacheLen ); - memset( WaveCacheLeft, 0, iByteCacheLen ); - memset( WaveCacheRight, 0, iByteCacheLen ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::SetReadTime( int ms ) -{ - iReadTimeMs = ms; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::SetWriteTime( int ms ) -{ - iWriteTimeMs = ms; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int VisCache::LatencyToOffset( int iLatency ) -{ - int iFrame = iWritePos - 1 - ( ( iWriteTimeMs - iReadTimeMs - iLatency ) * iDataFps ) / 1000; - if( iFrame < 0 ) iFrame += iCacheLen; - return iFrame * 576; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::NextFrame() -{ - iWritePos++; - if( iWritePos >= iCacheLen ) iWritePos = 0; - iWriteOffset = iWritePos * 576; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::PutSpecLeft( unsigned char * data ) -{ - if( !bReady ) return; - memcpy( SpecCacheLeft + iWriteOffset, data, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::PutSpecRight( unsigned char * data ) -{ - if( !bReady ) return; - memcpy( SpecCacheRight + iWriteOffset, data, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::PutWaveLeft( unsigned char * data ) -{ - if( !bReady ) return; - memcpy( WaveCacheLeft + iWriteOffset, data, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::PutWaveRight( unsigned char * data ) -{ - if( !bReady ) return; - memcpy( WaveCacheRight + iWriteOffset, data, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::GetSpecLeft( unsigned char * dest, int iOffset ) -{ - if( !bReady ) return; - memcpy( dest, SpecCacheLeft + iOffset, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::GetSpecRight( unsigned char * dest, int iOffset ) -{ - if( !bReady ) return; - memcpy( dest, SpecCacheRight + iOffset, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::GetWaveLeft( unsigned char * dest, int iOffset ) -{ - if( !bReady ) return; - memcpy( dest, WaveCacheLeft + iOffset, 576 ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void VisCache::GetWaveRight( unsigned char * dest, int iOffset ) -{ - if( !bReady ) return; - memcpy( dest, WaveCacheRight + iOffset, 576 ); -} diff --git a/Externals/MusicMod/Player/Src/VisCache.h b/Externals/MusicMod/Player/Src/VisCache.h deleted file mode 100644 index f093d5d089..0000000000 --- a/Externals/MusicMod/Player/Src/VisCache.h +++ /dev/null @@ -1,50 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_VIS_CACHE_H -#define PA_VIS_CACHE_H - - -#include "Global.h" - - - -namespace VisCache -{ - void Create(); - void Destroy(); - - void EnsureLatency( int iLatency ); // TODO - void EnsureDataFps( int iFps ); // TODO - - void Clean(); - - void SetReadTime( int ms ); - void SetWriteTime( int ms ); - - int LatencyToOffset( int iLatency ); - void NextFrame(); - - void PutSpecLeft( unsigned char * data ); - void PutSpecRight( unsigned char * data ); - void PutWaveLeft( unsigned char * data ); - void PutWaveRight( unsigned char * data ); - - void GetSpecLeft( unsigned char * dest, int iOffset ); - void GetSpecRight( unsigned char * dest, int iOffset ); - void GetWaveLeft( unsigned char * dest, int iOffset ); - void GetWaveRight( unsigned char * dest, int iOffset ); -}; - - - -#endif // PA_VIS_CACHE_H diff --git a/Externals/MusicMod/Player/Src/VisModule.cpp b/Externals/MusicMod/Player/Src/VisModule.cpp deleted file mode 100644 index b171ed7b3f..0000000000 --- a/Externals/MusicMod/Player/Src/VisModule.cpp +++ /dev/null @@ -1,358 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "VisModule.h" -#include "Console.h" -#include "Unicode.h" -#include "Playback.h" -#include "VisCache.h" -#include "PluginManager.h" -#include - - -VisModule ** active_vis_mods = NULL; // extern -int active_vis_count = 0; // extern - - -/* -BOOL CALLBACK EnumThreadWndProc( HWND hwnd, LPARAM lp ) -{ -// MessageBox( 0, "EnumThreadWndProc", "", 0 ); - DestroyWindow( hwnd ); -} -*/ - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -void PlugThread( PVOID pvoid ) -{ - // TODO: cleanup!!! - - Console::Append( TEXT( "Visualization thread born" ) ); - Console::Append( " " ); - - VisModule * mod = ( VisModule * )pvoid; - if( !mod ) return; - if( mod->mod->Init( mod->mod ) != 0 ) return; - - - VisCache::Create(); - - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - active_vis_count++; - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - - bool bKeepItGoing = true; - - - bool bQuitCalled = false; - - int iLast = GetTickCount(); - - // Message loop - MSG msg; - msg.message = WM_QUIT + 1; // Must be != WM_QUIT - do - { - if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) - { - if( msg.message == WM_QUIT ) - { -//////////////////////////////////////////////////////////////////////////////// - // Stop - if( !bQuitCalled ) - { - mod->mod->Quit( mod->mod ); - bQuitCalled = true; - } -//////////////////////////////////////////////////////////////////////////////// - - break; - } - - TranslateMessage( &msg ); - DispatchMessage( &msg ); - - if( msg.message == WM_CLOSE || ( ( msg.message == WM_SYSCOMMAND ) && ( msg.wParam == SC_CLOSE ) ) ) - { -//////////////////////////////////////////////////////////////////////////////// - // Stop - if( !bQuitCalled ) - { - mod->mod->Quit( mod->mod ); - bQuitCalled = true; - } -//////////////////////////////////////////////////////////////////////////////// - } - } - - if( bKeepItGoing ) - { - // Variant A - const int iNow = GetTickCount(); - if( iNow - iLast > mod->mod->delayMs ) - { - if( Playback::IsPlaying() ) - { - if( mod->bAllowRender ) - { - mod->bAllowRender = false; - - - const int iOffset = VisCache::LatencyToOffset( mod->mod->latencyMs ); - - switch( mod->mod->spectrumNch ) - { - case 2: - VisCache::GetSpecRight( mod->mod->spectrumData[ 1 ], iOffset ); - case 1: - VisCache::GetSpecLeft( mod->mod->spectrumData[ 0 ], iOffset ); - } - - switch( mod->mod->waveformNch ) - { - case 2: - VisCache::GetWaveRight( mod->mod->waveformData[ 1 ], iOffset ); - case 1: - VisCache::GetWaveLeft( mod->mod->waveformData[ 0 ], iOffset ); - } - - if( mod->mod->Render( mod->mod ) != 0 ) - { -//////////////////////////////////////////////////////////////////////////////// - // Stop - if( !bQuitCalled ) - { - // TODO: milkdrop doesn#t save window position - // when quit using manual plugin stop - - mod->mod->Quit( mod->mod ); - bQuitCalled = true; - } -//////////////////////////////////////////////////////////////////////////////// -/* - // Destroy all windows belonging to this thread - // This will lead to WM_QUIT automatically - EnumThreadWindows( GetCurrentThreadId(), EnumThreadWndProc, 0 ); - bKeepItGoing = false; -*/ - } - - - iLast = iNow; - } - } - else - { - if( mod->mod->Render( mod->mod ) != 0 ) - { -//////////////////////////////////////////////////////////////////////////////// - // Stop - if( !bQuitCalled ) - { - mod->mod->Quit( mod->mod ); - bQuitCalled = true; - } -//////////////////////////////////////////////////////////////////////////////// -/* - // Destroy all windows belonging to this thread - // This will lead to WM_QUIT automatically - EnumThreadWindows( GetCurrentThreadId(), EnumThreadWndProc, 0 ); - bKeepItGoing = false; -*/ - } - - iLast = iNow; - } - } - -//////////////////////////////////////////////////////////////////////////////// - bool bVisLockLeft = false; - VisLock.Enter(); -//////////////////////////////////////////////////////////////////////////////// - - if( mod->bShouldQuit ) - { - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Leave(); - bVisLockLeft = true; -//////////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////////// - // Stop - if( !bQuitCalled ) - { - mod->mod->Quit( mod->mod ); - bQuitCalled = true; - } -//////////////////////////////////////////////////////////////////////////////// -/* - // Destroy all windows belonging to this thread - // This will lead to WM_QUIT automatically - EnumThreadWindows( GetCurrentThreadId(), EnumThreadWndProc, 0 ); - bKeepItGoing = false; -*/ - } - -//////////////////////////////////////////////////////////////////////////////// - if( !bVisLockLeft ) - { - VisLock.Leave(); - } -//////////////////////////////////////////////////////////////////////////////// - } - - Sleep( 1 ); - } - while( msg.message != WM_QUIT ); - - mod->bShouldQuit = false; - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Enter(); - if( ( active_vis_count > 1 ) && ( mod->iArrayIndex < active_vis_count - 1 ) ) - { - active_vis_mods[ mod->iArrayIndex ] = active_vis_mods[ active_vis_count - 1 ]; - active_vis_mods[ mod->iArrayIndex ]->iArrayIndex = mod->iArrayIndex; - } - active_vis_count--; - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - mod->iArrayIndex = -1; - -/* - // Stop - mod->mod->Quit( mod->mod ); -*/ - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Enter(); - mod->bActive = false; - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - UpdatePluginStatus( mod->plugin, true, mod->plugin->IsActive() ); - - Console::Append( TEXT( "Visualization thread dead" ) ); - Console::Append( " " ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -VisModule::VisModule( char * szName, int iIndex, winampVisModule * mod, VisPlugin * plugin ) -{ - iArrayIndex = -1; - bActive = false; - bShouldQuit = false; - bAllowRender = false; - - iNameLen = ( int )strlen( szName ); - this->szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( this->szName, szName, iNameLen ); - this->szName[ iNameLen ] = TEXT( '\0' ); - - this->iIndex = iIndex; - this->mod = mod; - this->plugin = plugin; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool VisModule::Start() -{ - if( !mod ) return false; - if( bActive ) return false; - if( plugin->IsActive() ) return false; - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Enter(); - if( !active_vis_count ) - { - active_vis_mods = new VisModule * [ 1 ]; - active_vis_mods[ 0 ] = this; - } - else - { - VisModule ** new_active_vis_mods = new VisModule * [ active_vis_count + 1 ]; - memcpy( new_active_vis_mods, active_vis_mods, active_vis_count * sizeof( VisModule * ) ); - new_active_vis_mods[ active_vis_count ] = this; - delete [] active_vis_mods; - active_vis_mods = new_active_vis_mods; - } - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - iArrayIndex = active_vis_count; - - - // Start - _beginthread( PlugThread, 1024 * 1024, ( PVOID )this ); - - bActive = true; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool VisModule::Stop() -{ - if( !mod ) return false; - if( !bActive ) return false; - if( !plugin->IsActive() ) return false; - -//////////////////////////////////////////////////////////////////////////////// - VisLock.Enter(); - bShouldQuit = true; - VisLock.Leave(); -//////////////////////////////////////////////////////////////////////////////// - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool VisModule::Config() -{ - if( !mod ) return false; - if( !mod->Config ) return false; - - mod->Config( mod ); - - return true; -} diff --git a/Externals/MusicMod/Player/Src/VisModule.h b/Externals/MusicMod/Player/Src/VisModule.h deleted file mode 100644 index 23e13e7450..0000000000 --- a/Externals/MusicMod/Player/Src/VisModule.h +++ /dev/null @@ -1,71 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_VIS_MODULE_H -#define PA_VIS_MODULE_H - - - -#include "Global.h" -#include "VisPlugin.h" -#include - - - -class VisModule; -class VisPlugin; - -extern VisModule ** active_vis_mods; -extern int active_vis_count; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp visualization module wrapper -//////////////////////////////////////////////////////////////////////////////// -class VisModule -{ -public: - VisModule( char * szName, int iIndex, winampVisModule * mod, VisPlugin * plugin ); - - bool Start(); - bool Config(); - bool Stop(); - - inline bool IsActive() { return bActive; } - - inline TCHAR * GetName() { return szName; } - inline int GetNameLen() { return iNameLen; } - -private: - int iArrayIndex; - bool bActive; - bool bShouldQuit; - bool bAllowRender; - - TCHAR * szName; - int iNameLen; - - int iIndex; - winampVisModule * mod; - VisPlugin * plugin; - - - friend void PlugThread( PVOID pvoid ); - friend void VSAAdd( void * data, int timestamp ); - friend void VSAAddPCMData( void * PCMData, int nch, int bps, int timestamp ); - friend int VSAGetMode( int * specNch, int * waveNch ); -}; - - - -#endif // PA_VIS_MODULE_H diff --git a/Externals/MusicMod/Player/Src/VisPlugin.cpp b/Externals/MusicMod/Player/Src/VisPlugin.cpp deleted file mode 100644 index 9259078929..0000000000 --- a/Externals/MusicMod/Player/Src/VisPlugin.cpp +++ /dev/null @@ -1,189 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "VisPlugin.h" -#include "Unicode.h" -#include "Console.h" -#include "Main.h" - - - -vector vis_plugins; // extern - -Lock VisLock = Lock( TEXT( "PLAINAMP_VIS_LOCK" ) ); // extern - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -VisPlugin::VisPlugin( TCHAR * szDllpath, bool bKeepLoaded ) : Plugin( szDllpath ) -{ - header = NULL; - - if( !Load() ) - { - return; - } - - if( !bKeepLoaded ) - { - Unload(); - } - - vis_plugins.push_back( this ); -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool VisPlugin::Load() -{ - // (1) Load DLL - hDLL = LoadLibrary( GetFullpath() ); - if( !hDLL ) return false; - - // (2) Find export - WINAMP_VIS_GETTER winampGetVisHeader = - ( WINAMP_VIS_GETTER )GetProcAddress( hDLL, "winampVisGetHeader" ); - if( winampGetVisHeader == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - - // (3) Get header - header = winampGetVisHeader(); - if( header == NULL ) - { - FreeLibrary( hDLL ); - hDLL = NULL; - return false; - } - -//////////////////////////////////////////////////////////////////////////////// - // Forget old modules or we get them twice - if( !modules.empty() ) - { - modules.clear(); - } -//////////////////////////////////////////////////////////////////////////////// - - if( !szName ) - { - // Note: The prefix is not removed to hide their - // origin at Nullsoft! It just reads easier. - if( !_strnicmp( header->description, "nullsoft ", 9 ) ) - { - header->description += 9; - } - iNameLen = ( int )strlen( header->description ); - szName = new TCHAR[ iNameLen + 1 ]; - ToTchar( szName, header->description, iNameLen ); - szName[ iNameLen ] = TEXT( '\0' ); - } - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Loading <%s>, %s" ), GetFilename(), szName ); - Console::Append( szBuffer ); - - // (4) Get modules - winampVisModule * mod; - int iFound = 0; - while( true ) - { - mod = header->getModule( iFound ); - if( !mod ) break; - - // (4a) Modify module - mod->hDllInstance = hDLL; - mod->hwndParent = WindowMain; - mod->sRate = 44100; // TODO - mod->nCh = 2; // TODO - - // (4b) Add module to list - VisModule * vismod = new VisModule( - mod->description, // char * szName - iFound, // UINT uIndex - mod, // winampVisModule * mod - this // VisPlugin * plugin - ); - modules.push_back( vismod ); - - iFound++; - - _stprintf( szBuffer, TEXT( " %s" ), vismod->GetName() ); - Console::Append( szBuffer ); - } - - Console::Append( TEXT( " " ) ); - - if( !iFound ) return false; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool VisPlugin::Unload() -{ - if( !IsLoaded() ) return true; - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Unloading <%s>" ), GetFilename() ); - Console::Append( szBuffer ); - Console::Append( TEXT( " " ) ); - printf( ">>>Unloading <%s>\n" , GetFilename() ); - - header = NULL; - - /* - TODO - VisModule * walk; - vector ::iterator iter = modules.begin(); - while( iter != modules.end() ) - { - walk = *iter; - delete [] walk->szName; - delete walk; - - iter++; - } - */ - - FreeLibrary( hDLL ); - hDLL = NULL; - - return true; -} - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -bool VisPlugin::IsActive() -{ - vector ::iterator iter = modules.begin(); - while( iter != modules.end() ) - { - if( ( *iter )->IsActive() ) return true; - iter++; - } - return false; -} diff --git a/Externals/MusicMod/Player/Src/VisPlugin.h b/Externals/MusicMod/Player/Src/VisPlugin.h deleted file mode 100644 index d28b1a5f8e..0000000000 --- a/Externals/MusicMod/Player/Src/VisPlugin.h +++ /dev/null @@ -1,68 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_VIS_PLUGIN_H -#define PA_VIS_PLUGIN_H - - - -#include "Global.h" -#include "Plugin.h" -#include "Winamp/Vis.h" -#include "VisModule.h" -#include "Lock.h" -#include - -using namespace std; - - - -typedef winampVisHeader * ( * WINAMP_VIS_GETTER )( void ); - - - -class VisModule; -class VisPlugin; - -extern vector vis_plugins; -extern Lock VisLock; - - - -//////////////////////////////////////////////////////////////////////////////// -/// Winamp visualization plugin wrapper -//////////////////////////////////////////////////////////////////////////////// -class VisPlugin : public Plugin -{ -public: - VisPlugin( TCHAR * szDllpath, bool bKeepLoaded ); - - bool Load(); - bool Unload(); - - TCHAR * GetTypeString() { return TEXT( "Visual" ); } - int GetTypeStringLen() { return 6; } - PluginType GetType() { return PLUGIN_TYPE_VIS; } - - bool IsActive(); - -private: - winampVisHeader * header; - vector modules; - - - friend void ContextMenuVis( VisPlugin * vis, POINT * p ); -}; - - - -#endif // PA_VIS_PLUGIN_H diff --git a/Externals/MusicMod/Player/Src/Winamp.cpp b/Externals/MusicMod/Player/Src/Winamp.cpp deleted file mode 100644 index 6e123b6355..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp.cpp +++ /dev/null @@ -1,996 +0,0 @@ -// ======================================================================================= -// WndprocWinamp is called repeatedly when the cursor is moved over the main window -// ======================================================================================= - -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Winamp.h" -#include "Playback.h" -#include "Playlist.h" -#include "Console.h" -#include "Main.h" -#include "Winamp/wa_ipc.h" -#include "Winamp/wa_msgids.h" -#include "AddDirectory.h" -#include "AddFiles.h" -#include "Prefs.h" -#include "PluginManager.h" -#include "Embed.h" -#include "Unicode.h" -#include "zlib/zlib.h" -#include "Rebar.h" - - - -int IPC_GENHOTKEYS_ADD = 0; -int ID_DYNAMICLIBRARY = 0; -int IPC_GETPLAINBARTARGET = 0; - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -LRESULT CALLBACK WndprocWinamp( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - //Console::Append( TEXT( "Winamp.cc:WndprocWinamp was called" ) ); - - switch( message ) - { - case WM_COMMAND: -/* - { - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "WM_COMMAND <%i> <%i>" ), wp, lp ); - Console::Append( szBuffer ); - } -*/ - switch( LOWORD( wp ) ) - { - case WINAMP_FILE_QUIT: - PostMessage( WindowMain, WM_SYSCOMMAND, SC_CLOSE, 0 ); - break; - - case WINAMP_OPTIONS_PREFS: - Prefs::Show(); - break; -/* - case WINAMP_OPTIONS_AOT: break; - case WINAMP_FILE_REPEAT: break; - case WINAMP_FILE_SHUFFLE: break; - case WINAMP_HIGH_PRIORITY: break; -*/ - case WINAMP_FILE_PLAY: - AddFiles(); - break; -/* - case WINAMP_OPTIONS_EQ: break; - case WINAMP_OPTIONS_ELAPSED: break; - case WINAMP_OPTIONS_REMAINING: break; - case WINAMP_OPTIONS_PLEDIT: break; -*/ - case WINAMP_HELP_ABOUT: - About( hwnd ); - break; - - case WINAMP_MAINMENU: - { - POINT p; - GetCursorPos( &p ); - - CheckMenuItem( - main_context_menu, - PLAINAMP_TOGGLE_CONSOLE, - IsWindowVisible( WindowConsole ) ? MF_CHECKED : MF_UNCHECKED - ); - CheckMenuItem( - main_context_menu, - PLAINAMP_TOGGLE_MANAGER, - IsWindowVisible( WindowManager ) ? MF_CHECKED : MF_UNCHECKED - ); - - TrackPopupMenu( - main_context_menu, - TPM_LEFTALIGN | - TPM_TOPALIGN | - TPM_RIGHTBUTTON, - p.x, - p.y, - 0, - hwnd, - NULL - ); - - break; - } - - case WINAMP_BUTTON1: - Playback::Prev(); - Playback::UpdateSeek(); - break; - - case WINAMP_BUTTON2: - Playback::Play(); - Playback::UpdateSeek(); - break; - - case WINAMP_BUTTON3: - Playback::Pause(); - Playback::UpdateSeek(); - break; - - case WINAMP_BUTTON4: - Playback::Stop(); - Playback::UpdateSeek(); - break; - - case WINAMP_BUTTON5: - Playback::Next(); - Playback::UpdateSeek(); - break; - -/* - case WINAMP_BUTTON1_SHIFT: break; - case WINAMP_BUTTON2_SHIFT: break; - case WINAMP_BUTTON3_SHIFT: break; - case WINAMP_BUTTON4_SHIFT: break; - case WINAMP_BUTTON5_SHIFT: break; - case WINAMP_BUTTON1_CTRL: break; - case WINAMP_BUTTON2_CTRL: break; - case WINAMP_BUTTON3_CTRL: break; - case WINAMP_BUTTON4_CTRL: break; - case WINAMP_BUTTON5_CTRL: break; -*/ - - case WINAMP_VOLUMEUP: - Playback::Volume::Up(); - // TODO Update slider - break; - - case WINAMP_VOLUMEDOWN: - Playback::Volume::Down(); - // TODO Update slider - break; - - case WINAMP_FFWD5S: - Playback::Forward(); - Playback::UpdateSeek(); - break; - - case WINAMP_REW5S: - Playback::Rewind(); - Playback::UpdateSeek(); - break; -/* - case WINAMP_NEXT_WINDOW: break; - case WINAMP_OPTIONS_WINDOWSHADE: break; - case WINAMP_OPTIONS_DSIZE: break; - case IDC_SORT_FILENAME: break; - case IDC_SORT_FILETITLE: break; - case IDC_SORT_ENTIREFILENAME: break; - case IDC_SELECTALL: break; - case IDC_SELECTNONE: break; - case IDC_SELECTINV: break; - case IDM_EQ_LOADPRE: break; - case IDM_EQ_LOADMP3: break; - case IDM_EQ_LOADDEFAULT: break; - case IDM_EQ_SAVEPRE: break; - case IDM_EQ_SAVEMP3: break; - case IDM_EQ_SAVEDEFAULT: break; - case IDM_EQ_DELPRE: break; - case IDM_EQ_DELMP3: break; - case IDC_PLAYLIST_PLAY: break; - case WINAMP_FILE_LOC: break; - case WINAMP_OPTIONS_EASYMOVE: break; -*/ - case WINAMP_FILE_DIR: - AddDirectory(); - break; -/* - case WINAMP_EDIT_ID3: break; - case WINAMP_TOGGLE_AUTOSCROLL: break; - case WINAMP_VISSETUP: break; - case WINAMP_PLGSETUP: break; - case WINAMP_VISPLUGIN: break; - case WINAMP_JUMP: break; - case WINAMP_JUMPFILE: break; - case WINAMP_JUMP10FWD: break; - case WINAMP_JUMP10BACK: break; - case WINAMP_PREVSONG: break; - case WINAMP_OPTIONS_EXTRAHQ: break; -*/ - case ID_PE_NEW: - playlist->RemoveAll(); - break; - - case ID_PE_OPEN: - Playlist::DialogOpen(); - break; -/* - case ID_PE_SAVE: break; -*/ - case ID_PE_SAVEAS: - Playlist::DialogSaveAs(); - break; - - case ID_PE_SELECTALL: - playlist->SelectAll( true ); - break; - - case ID_PE_INVERT: - playlist->SelectInvert(); - break; - - case ID_PE_NONE: - playlist->SelectAll( false ); - break; -/* - case ID_PE_ID3: break; - case ID_PE_S_TITLE: break; - case ID_PE_S_FILENAME: break; - case ID_PE_S_PATH: break; - case ID_PE_S_RANDOM: break; - case ID_PE_S_REV: break; -*/ - case ID_PE_CLEAR: - playlist->RemoveAll(); - break; -/* - case ID_PE_MOVEUP: break; - case ID_PE_MOVEDOWN: break; - case WINAMP_SELSKIN: break; - case WINAMP_VISCONF: break; - case ID_PE_NONEXIST: break; - case ID_PE_DELETEFROMDISK: break; - case ID_PE_CLOSE: break; - case WINAMP_VIS_SETOSC: break; - case WINAMP_VIS_SETANA: break; - case WINAMP_VIS_SETOFF: break; - case WINAMP_VIS_DOTSCOPE: break; - case WINAMP_VIS_LINESCOPE: break; - case WINAMP_VIS_SOLIDSCOPE: break; - case WINAMP_VIS_NORMANA: break; - case WINAMP_VIS_FIREANA: break; - case WINAMP_VIS_LINEANA: break; - case WINAMP_VIS_NORMVU: break; - case WINAMP_VIS_SMOOTHVU: break; - case WINAMP_VIS_FULLREF: break; - case WINAMP_VIS_FULLREF2: break; - case WINAMP_VIS_FULLREF3: break; - case WINAMP_VIS_FULLREF4: break; - case WINAMP_OPTIONS_TOGTIME: break; - case EQ_ENABLE: break; - case EQ_AUTO: break; - case EQ_PRESETS: break; - case WINAMP_VIS_FALLOFF0: break; - case WINAMP_VIS_FALLOFF1: break; - case WINAMP_VIS_FALLOFF2: break; - case WINAMP_VIS_FALLOFF3: break; - case WINAMP_VIS_FALLOFF4: break; - case WINAMP_VIS_PEAKS: break; - case ID_LOAD_EQF: break; - case ID_SAVE_EQF: break; - case ID_PE_ENTRY: break; - case ID_PE_SCROLLUP: break; - case ID_PE_SCROLLDOWN: break; - case WINAMP_MAIN_WINDOW: break; - case WINAMP_VIS_PFALLOFF0: break; - case WINAMP_VIS_PFALLOFF1: break; - case WINAMP_VIS_PFALLOFF2: break; - case WINAMP_VIS_PFALLOFF3: break; - case WINAMP_VIS_PFALLOFF4: break; - case ID_PE_TOP: break; - case ID_PE_BOTTOM: break; - case WINAMP_OPTIONS_WINDOWSHADE_PL: break; - case EQ_INC1: break; - case EQ_INC2: break; - case EQ_INC3: break; - case EQ_INC4: break; - case EQ_INC5: break; - case EQ_INC6: break; - case EQ_INC7: break; - case EQ_INC8: break; - case EQ_INC9: break; - case EQ_INC10: break; - case EQ_INCPRE: break; - case EQ_DECPRE: break; - case EQ_DEC1: break; - case EQ_DEC2: break; - case EQ_DEC3: break; - case EQ_DEC4: break; - case EQ_DEC5: break; - case EQ_DEC6: break; - case EQ_DEC7: break; - case EQ_DEC8: break; - case EQ_DEC9: break; - case EQ_DEC10: break; - case ID_PE_SCUP: break; - case ID_PE_SCDOWN: break; - case WINAMP_REFRESHSKIN: break; - case ID_PE_PRINT: break; - case ID_PE_EXTINFO: break; - case WINAMP_PLAYLIST_ADVANCE: break; - case WINAMP_VIS_LIN: break; - case WINAMP_VIS_BAR: break; - case WINAMP_OPTIONS_MINIBROWSER: break; - case MB_FWD: break; - case MB_BACK: break; - case MB_RELOAD: break; - case MB_OPENMENU: break; - case MB_OPENLOC: break; - case WINAMP_NEW_INSTANCE: break; - case MB_UPDATE: break; - case WINAMP_OPTIONS_WINDOWSHADE_EQ: break; - case EQ_PANLEFT: break; - case EQ_PANRIGHT: break; - case WINAMP_GETMORESKINS: break; - case WINAMP_VIS_OPTIONS: break; - case WINAMP_PE_SEARCH: break; - case ID_PE_BOOKMARK: break; - case WINAMP_EDIT_BOOKMARKS: break; - case WINAMP_MAKECURBOOKMARK: break; - case ID_MAIN_PLAY_BOOKMARK_NONE: break; - case ID_MAIN_PLAY_AUDIOCD: break; - case ID_MAIN_PLAY_AUDIOCD2: break; - case ID_MAIN_PLAY_AUDIOCD3: break; - case ID_MAIN_PLAY_AUDIOCD4: break; - case WINAMP_OPTIONS_VIDEO: break; - case ID_VIDEOWND_ZOOMFULLSCREEN: break; - case ID_VIDEOWND_ZOOM100: break; - case ID_VIDEOWND_ZOOM200: break; - case ID_VIDEOWND_ZOOM50: break; - case ID_VIDEOWND_VIDEOOPTIONS: break; - case WINAMP_MINIMIZE: break; - case ID_PE_FONTBIGGER: break; - case ID_PE_FONTSMALLER: break; - case WINAMP_VIDEO_TOGGLE_FS: break; - case WINAMP_VIDEO_TVBUTTON: break; - case WINAMP_LIGHTNING_CLICK: break; - case ID_FILE_ADDTOLIBRARY: break; - case ID_HELP_HELPTOPICS: break; - case ID_HELP_GETTINGSTARTED: break; - case ID_HELP_WINAMPFORUMS: break; -*/ - case ID_PLAY_VOLUMEUP: - Playback::Volume::Up(); - // TODO Update slider - break; - - case ID_PLAY_VOLUMEDOWN: - Playback::Volume::Down(); - // TODO Update slider - break; -/* - case ID_PEFILE_OPENPLAYLISTFROMLIBRARY_NOPLAYLISTSINLIBRARY: break; - case ID_PEFILE_ADDFROMLIBRARY: break; - case ID_PEFILE_CLOSEPLAYLISTEDITOR: break; - case ID_PEPLAYLIST_PLAYLISTPREFERENCES: break; - case ID_MLFILE_NEWPLAYLIST: break; - case ID_MLFILE_LOADPLAYLIST: break; - case ID_MLFILE_SAVEPLAYLIST: break; - case ID_MLFILE_ADDMEDIATOLIBRARY: break; - case ID_MLFILE_CLOSEMEDIALIBRARY: break; - case ID_MLVIEW_NOWPLAYING: break; - case ID_MLVIEW_LOCALMEDIA_ALLMEDIA: break; - case ID_MLVIEW_LOCALMEDIA_AUDIO: break; - case ID_MLVIEW_LOCALMEDIA_VIDEO: break; - case ID_MLVIEW_PLAYLISTS_NOPLAYLISTINLIBRARY: break; - case ID_MLVIEW_INTERNETRADIO: break; - case ID_MLVIEW_INTERNETTV: break; - case ID_MLVIEW_LIBRARYPREFERENCES: break; - case ID_MLVIEW_DEVICES_NOAVAILABLEDEVICE: break; - case ID_MLFILE_IMPORTCURRENTPLAYLIST: break; - case ID_MLVIEW_MEDIA: break; - case ID_MLVIEW_PLAYLISTS: break; - case ID_MLVIEW_MEDIA_ALLMEDIA: break; - case ID_MLVIEW_DEVICES: break; - case ID_FILE_SHOWLIBRARY: break; - case ID_FILE_CLOSELIBRARY: break; - case ID_POST_PLAY_PLAYLIST: break; - case ID_VIS_NEXT: break; - case ID_VIS_PREV: break; - case ID_VIS_RANDOM: break; - case ID_MANAGEPLAYLISTS: break; - case ID_PREFS_SKIN_SWITCHTOSKIN: break; - case ID_PREFS_SKIN_DELETESKIN: break; - case ID_PREFS_SKIN_RENAMESKIN: break; - case ID_VIS_FS: break; - case ID_VIS_CFG: break; - case ID_VIS_MENU: break; - case ID_VIS_SET_FS_FLAG: break; - case ID_PE_SHOWPLAYING: break; - case ID_HELP_REGISTERWINAMPPRO: break; - case ID_PE_MANUAL_ADVANCE: break; - case WA_SONG_5_STAR_RATING: break; - case WA_SONG_4_STAR_RATING: break; - case WA_SONG_3_STAR_RATING: break; - case WA_SONG_2_STAR_RATING: break; - case WA_SONG_1_STAR_RATING: break; - case WA_SONG_NO_RATING: break; - case PL_SONG_5_STAR_RATING: break; - case PL_SONG_4_STAR_RATING: break; - case PL_SONG_3_STAR_RATING: break; - case PL_SONG_2_STAR_RATING: break; - case PL_SONG_1_STAR_RATING: break; - case PL_SONG_NO_RATING: break; - case AUDIO_TRACK_ONE: break; - case VIDEO_TRACK_ONE: break; - case ID_SWITCH_COLOURTHEME: break; - case ID_GENFF_LIMIT: break; - -*/ - case PLAINAMP_TOGGLE_CONSOLE: - ShowWindow( WindowConsole, IsWindowVisible( WindowConsole ) ? SW_HIDE : SW_SHOW ); - break; - - case PLAINAMP_TOGGLE_MANAGER: - ShowWindow( WindowManager, IsWindowVisible( WindowManager ) ? SW_HIDE : SW_SHOW ); - break; - - case PLAINAMP_PL_REM_SEL: - playlist->RemoveSelected( true ); - break; - - case PLAINAMP_PL_REM_CROP: - playlist->RemoveSelected( false ); - break; - - default: - { - /* - if( wp == ID_DYNAMICLIBRARY ) - { - // Stupid dnylib workaround - PostMessage( hwnd, WM_COMMAND, ID_DYNAMICLIBRARY | ( 1 << 16 ), 0 ); - } - */ - - if( LOWORD( wp ) < 40001 ) break; - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "WM_COMMAND <%i> <%i>" ), wp, lp ); - Console::Append( szBuffer ); - Console::Append( TEXT( "NOT handled" ) ); - Console::Append( " " ); - } - - } - break; - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - case WM_WA_IPC: -/* - { - TCHAR szBuffer[ 5000 ]; - if( lp != 2006 ) - { - _stprintf( szBuffer, TEXT( "WM_WA_IPC <%i> <%i>" ), wp, lp ); - } - else - { - // Hotkey sent as strings! - // Idea: make stl map - _stprintf( szBuffer, TEXT( "WM_WA_IPC <%s> <%i>" ), ( char * )wp, lp ); - } - Console::Append( szBuffer ); - } -*/ - switch( lp ) - { - case IPC_GETVERSION: - return 0x5010; // 5.10 -/* - case IPC_GETREGISTEREDVERSION: break; - case IPC_PLAYFILE: break; - case IPC_ENQUEUEFILE: break; -*/ - case IPC_DELETE: - playlist->RemoveAll(); - break; -/* - case IPC_DELETE_INT: break; -*/ - case IPC_STARTPLAY: - Playback::Play(); - Playback::UpdateSeek(); - break; -/* - case IPC_STARTPLAY_INT: break; - case IPC_CHDIR: break; -*/ - case IPC_ISPLAYING: // untested - return ( Playback::IsPlaying() ? ( Playback::IsPaused() ? 3 : 1 ) : 0 ); -/* - case IPC_GETOUTPUTTIME: break; - case IPC_JUMPTOTIME: break; - case IPC_GETMODULENAME: break; - case IPC_EX_ISRIGHTEXE: break; - case IPC_WRITEPLAYLIST: break; -*/ - case IPC_SETPLAYLISTPOS: - playlist->SetCurIndex( ( int )wp ); - break; - - case IPC_SETVOLUME: break; - Playback::Volume::Set( ( int )wp ); - // TODO Update slider - break; - - case IPC_SETPANNING: break; - Playback::Pan::Set( ( int )wp ); - // TODO Update slider - break; - - case IPC_GETLISTLENGTH: - return playlist->GetSize(); - - case IPC_GETLISTPOS: - return playlist->GetCurIndex(); -/* - case IPC_GETINFO: break; - case IPC_GETEQDATA: break; - // TODO - case IPC_SETEQDATA: break; - // TODO - case IPC_ADDBOOKMARK: break; - case IPC_INSTALLPLUGIN: break; - case IPC_RESTARTWINAMP: break; - case IPC_ISFULLSTOP: break; - case IPC_INETAVAILABLE: break; - case IPC_UPDTITLE: break; - case IPC_REFRESHPLCACHE: break; - case IPC_GET_SHUFFLE: break; - case IPC_GET_REPEAT: break; - case IPC_SET_SHUFFLE: break; - case IPC_SET_REPEAT: break; - case IPC_ENABLEDISABLE_ALL_WINDOWS: break; -*/ - case IPC_GETWND: - { - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "IPC_GETWND <%i>" ), wp ); - Console::Append( szBuffer ); - Console::Append( " " ); - } - - switch( wp ) - { - case IPC_GETWND_EQ: break; - case IPC_GETWND_PE: return ( LRESULT )WindowMain; - case IPC_GETWND_MB: break; - case IPC_GETWND_VIDEO: break; - } - - return ( LRESULT )NULL; - - case IPC_ISWNDVISIBLE: - { - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "IPC_ISWNDVISIBLE <%i>" ), wp ); - Console::Append( szBuffer ); - Console::Append( " " ); - } - - switch( wp ) - { - case IPC_GETWND_EQ: break; - case IPC_GETWND_PE: return 1; - case IPC_GETWND_MB: break; - case IPC_GETWND_VIDEO: break; - } - - return 0; -/* - case IPC_SETSKIN: break; - case IPC_GETSKIN: break; - case IPC_EXECPLUG: break; -*/ - case IPC_GETPLAYLISTFILE: - { - static char szAnsiFilename[ 2000 ] = "\0"; - Playlist::GetFilename( ( int )wp, szAnsiFilename, 1999 ); - return ( LRESULT )szAnsiFilename; - } - - case IPC_GETPLAYLISTTITLE: - { - static char szAnsiTitle[ 2000 ] = "\0"; - Playlist::GetTitle( ( int )wp, szAnsiTitle, 1999 ); - return ( LRESULT )szAnsiTitle; - } -/* - case IPC_GETHTTPGETTER: break; - case IPC_MBOPEN: break; - case IPC_CHANGECURRENTFILE: break; - case IPC_GETMBURL: break; - case IPC_MBBLOCK: break; - case IPC_MBOPENREAL: break; - case IPC_ADJUST_OPTIONSMENUPOS: break; -*/ - case IPC_GET_HMENU: - { - switch( wp ) - { - case 0: - return ( LRESULT )main_context_menu; -/* - case 1: break; - case 2: break; - case 3: break; - case 4: break; -*/ - } - return ( LRESULT )NULL; - } - - case IPC_GET_EXTENDED_FILE_INFO: - Console::Append( "IPC_GET_EXTENDED_FILE_INFO" ); - Console::Append( TEXT( "NOT handled" ) ); - Console::Append( " " ); - break; -/* - case IPC_GET_EXTENDED_FILE_INFO_HOOKABLE: break; - case IPC_GET_BASIC_FILE_INFO: break; -*/ - case IPC_GET_EXTLIST: - // TODO - return ( LRESULT )GlobalAlloc( GMEM_ZEROINIT, 2 ); // "\0\0" -/* - case IPC_INFOBOX: break; - case IPC_SET_EXTENDED_FILE_INFO: break; - case IPC_WRITE_EXTENDED_FILE_INFO: break; - case IPC_FORMAT_TITLE: break; -*/ -// ======================================================================================= -// Let's remove this -/* - case IPC_GETUNCOMPRESSINTERFACE: - if( wp == 0x10100000 ) - { - Console::Append( "IPC_GETUNCOMPRESSINTERFACE @ wa_inflate_struct" ); - Console::Append( TEXT( "NOT handled" ) ); - Console::Append( " " ); - } - else - { - Console::Append( "IPC_GETUNCOMPRESSINTERFACE @ zlib" ); - Console::Append( " " ); - return ( LRESULT )uncompress; - } - break; -*/ -// ======================================================================================= - - case IPC_ADD_PREFS_DLG: - Prefs::AddPage( ( prefsDlgRec * )wp ); - break; -/* - case IPC_REMOVE_PREFS_DLG: break; -*/ - case IPC_OPENPREFSTOPAGE: - Prefs::Show( ( prefsDlgRec * )wp ); - break; - - case IPC_GETINIFILE: - { - static char szWinampInipath[ MAX_PATH ] = ""; - if( *szWinampInipath == '\0' ) - { - GetModuleFileNameA( NULL, szWinampInipath, MAX_PATH - 1 ); - char * szWalk = szWinampInipath + strlen( szWinampInipath ) - 1; - while( ( szWalk > szWinampInipath ) && ( *szWalk != '.' ) ) szWalk--; - szWalk++; - strcpy( szWalk, "ini" ); - } - return ( LRESULT )szWinampInipath; - } - - case IPC_GETINIDIRECTORY: - { - // TODO: trailing slash or not??? - static char szPluginInipath[ MAX_PATH ] = ""; - if( *szPluginInipath == '\0' ) - { - GetModuleFileNameA( NULL, szPluginInipath, MAX_PATH - 1 ); - char * szWalk = szPluginInipath + strlen( szPluginInipath ) - 1; - while( ( szWalk > szPluginInipath ) && ( *szWalk != '\\' ) ) szWalk--; - szWalk++; - strcpy( szWalk, TEXT( "Plugins" ) ); - } - return ( LRESULT )szPluginInipath; - } -/* - case IPC_SPAWNBUTTONPOPUP: break; - case IPC_OPENURLBOX: break; -*/ - case IPC_OPENFILEBOX: - AddFiles(); - break; - - case IPC_OPENDIRBOX: - AddDirectory(); - break; - - case IPC_GET_GENSKINBITMAP: - { - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "IPC_GET_GENSKINBITMAP <%i>" ), wp ); - Console::Append( szBuffer ); - - switch( wp ) - { - case 0: - { - // TODO: make it work - - // Gen.bmp? - static HBITMAP hBitmap = NULL; - static BYTE * image = NULL; - if( !hBitmap ) - { - const int iWidth = 200; // 194; - const int iHeight = 300; // 109; - const int bpp = 24; - int bytes_per_row = iWidth * ( bpp / 8 ); - const int diff = bytes_per_row % 4; - if( diff ) bytes_per_row += ( 4 - diff ); - - const int size_in_bytes = bytes_per_row * iHeight; - image = new BYTE[ size_in_bytes ]; - - hBitmap = CreateBitmap( - iWidth, // int nWidth - iHeight, // int nHeight - 1, // UINT cPlanes - bpp, // UINT cBitsPerPel - image // CONST VOID * lpvBits - ); - - memset( image, 255, size_in_bytes ); - } - - return ( LRESULT )hBitmap; - } - - default: - { - Console::Append( TEXT( "NOT handled" ) ); - } - - } - Console::Append( TEXT( " " ) ); - - break; - } - - case IPC_GET_EMBEDIF: - // TODO - if( !wp ) - { - return ( LRESULT )Embed::Embed; - } - else - { - return ( LRESULT )Embed::Embed( ( embedWindowState * )wp ); - } - break; -/* - case IPC_EMBED_ENUM: break; - case IPC_EMBED_ISVALID: break; - case IPC_CONVERTFILE: break; - case IPC_CONVERTFILE_END: break; - case IPC_CONVERT_CONFIG: break; - case IPC_CONVERT_CONFIG_END: break; - case IPC_GETSADATAFUNC: break; - case IPC_ISMAINWNDVISIBLE: break; - case IPC_SETPLEDITCOLORS: break; - case IPC_SPAWNEQPRESETMENU: break; - case IPC_SPAWNFILEMENU: break; - case IPC_SPAWNOPTIONSMENU: break; - case IPC_SPAWNWINDOWSMENU: break; - case IPC_SPAWNHELPMENU: break; - case IPC_SPAWNPLAYMENU: break; - case IPC_SPAWNPEFILEMENU: break; - case IPC_SPAWNPEPLAYLISTMENU: break; - case IPC_SPAWNPESORTMENU: break; - case IPC_SPAWNPEHELPMENU: break; - case IPC_SPAWNMLFILEMENU: break; - case IPC_SPAWNMLVIEWMENU: break; - case IPC_SPAWNMLHELPMENU: break; - case IPC_SPAWNPELISTOFPLAYLISTS: break; - case WM_WA_SYSTRAY: break; - case IPC_IS_PLAYING_VIDEO: break; - case IPC_GET_IVIDEOOUTPUT: break; -*/ - case IPC_CB_ONSHOWWND: - case IPC_CB_ONHIDEWND: - case IPC_CB_GETTOOLTIP: - case IPC_CB_MISC: - case IPC_CB_CONVERT_STATUS: - case IPC_CB_CONVERT_DONE: - break; -/* - case IPC_ADJUST_FFWINDOWSMENUPOS: break; - case IPC_ISDOUBLESIZE: break; - case IPC_ADJUST_FFOPTIONSMENUPOS: break; -*/ - case IPC_GETTIMEDISPLAYMODE: - return 0; // == elapsed time -/* - case IPC_SETVISWND: break; - case IPC_GETVISWND: break; - case IPC_ISVISRUNNING: break; -*/ - case IPC_CB_VISRANDOM: break; -/* - case IPC_SETIDEALVIDEOSIZE: break; - case IPC_GETSTOPONVIDEOCLOSE: break; - case IPC_SETSTOPONVIDEOCLOSE: break; -*/ - case IPC_TRANSLATEACCELERATOR: - Console::Append( TEXT( "IPC_TRANSLATEACCELERATOR" ) ); - Console::Append( TEXT( "NOT handled" ) ); - Console::Append( TEXT( " " ) ); - break; - - case IPC_CB_ONTOGGLEAOT: break; -/* - case IPC_GETPREFSWND: break; - case IPC_SET_PE_WIDTHHEIGHT: break; - case IPC_GETLANGUAGEPACKINSTANCE: break; -*/ - case IPC_CB_PEINFOTEXT: - case IPC_CB_OUTPUTCHANGED: - break; -/* - case IPC_GETOUTPUTPLUGIN: break; - case IPC_SETDRAWBORDERS: break; - case IPC_DISABLESKINCURSORS: break; -*/ - case IPC_CB_RESETFONT: break; -/* - case IPC_IS_FULLSCREEN: break; - case IPC_SET_VIS_FS_FLAG: break; - case IPC_SHOW_NOTIFICATION: break; - case IPC_GETSKININFO: break; - case IPC_GET_MANUALPLADVANCE: break; - case IPC_SET_MANUALPLADVANCE: break; - case IPC_GET_NEXT_PLITEM: break; - case IPC_GET_PREVIOUS_PLITEM: break; - case IPC_IS_WNDSHADE: break; - case IPC_SETRATING: break; - case IPC_GETRATING: break; - case IPC_GETNUMAUDIOTRACKS: break; - case IPC_GETNUMVIDEOTRACKS: break; - case IPC_GETAUDIOTRACK: break; - case IPC_GETVIDEOTRACK: break; - case IPC_SETAUDIOTRACK: break; - case IPC_SETVIDEOTRACK: break; - case IPC_PUSH_DISABLE_EXIT: break; - case IPC_POP_DISABLE_EXIT: break; - case IPC_IS_EXIT_ENABLED: break; - case IPC_IS_AOT: break; - case IPC_PLCMD: break; - case IPC_MBCMD: break; - case IPC_VIDCMD: break; - case IPC_MBURL: break; - case IPC_MBGETCURURL: break; - case IPC_MBGETDESC: break; - case IPC_MBCHECKLOCFILE: break; - case IPC_MBREFRESH: break; - case IPC_MBGETDEFURL: break; - case IPC_STATS_LIBRARY_ITEMCNT: break; - case IPC_FF_FIRST: break; - case IPC_FF_LAST: break; - case IPC_GETDROPTARGET: break; - case IPC_PLAYLIST_MODIFIED: break; - case IPC_PLAYING_FILE: break; - case IPC_FILE_TAG_MAY_HAVE_UPDATED: break; - case IPC_ALLOW_PLAYTRACKING: break; -*/ - case IPC_HOOK_OKTOQUIT: - return 1; // Okay -/* - case IPC_WRITECONFIG: break; -*/ - case IPC_REGISTER_WINAMP_IPCMESSAGE: - { - // TODO convert to TCHAR???? - UINT res = RegisterWindowMessage( ( LPCTSTR )wp ); - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Message \"%s\" registered as #%i" ), wp, res ); - Console::Append( szBuffer ); - Console::Append( " " ); - - if( !stricmp( ( char * )wp, "GenHotkeysAdd" ) ) - { - IPC_GENHOTKEYS_ADD = res; - } - else if( !stricmp( ( char * )wp, "Dynamic Library" ) ) - { - ID_DYNAMICLIBRARY = res; - } - else if( !stricmp( ( char * )wp, "IPC_GETPLAINBARTARGET" ) ) - { - IPC_GETPLAINBARTARGET = res; - } - - return res; - } - - case 2006: // undocumented, name IPC_CB_HOTKEY or so later and ask to add this to sdk - { - // Hotkey sent as strings! - // Idea: make stl map - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "Hotkey \"%s\" detected" ), wp ); - Console::Append( szBuffer ); - Console::Append( " " ); - - return 1; // Accept??? - } - - default: - { - if( lp == IPC_GENHOTKEYS_ADD ) - { - break; - } - else if( lp == IPC_GETPLAINBARTARGET ) - { - return ( LRESULT )( IsWindowVisible( WindowVis ) ? WindowVis : NULL ); - } - - TCHAR szBuffer[ 5000 ]; - _stprintf( szBuffer, TEXT( "WM_WA_IPC <%i> <%i>" ), wp, lp ); - Console::Append( szBuffer ); - Console::Append( TEXT( "NOT handled" ) ); - Console::Append( " " ); - } - } - break; - - case WM_WA_MPEG_EOF: - Playback::NotifyTrackEnd(); - Playback::Next(); - break; - - case WM_COPYDATA: - { - if( !lp ) return FALSE; - - COPYDATASTRUCT * cds = ( COPYDATASTRUCT * )lp; - switch( cds->dwData ) - { - case IPC_PLAYFILE: - { - const int iLen = cds->cbData; - if( !iLen ) return FALSE; - TCHAR * szKeep = new TCHAR[ iLen + 1 ]; - ToTchar( szKeep, ( char * )cds->lpData, iLen ); - szKeep[ iLen ] = TEXT( '\0' ); - - playlist->PushBack( szKeep ); - return TRUE; - } - } - return FALSE; - } - - } - return DefWindowProc( hwnd, message, wp, lp ); -} diff --git a/Externals/MusicMod/Player/Src/Winamp.h b/Externals/MusicMod/Player/Src/Winamp.h deleted file mode 100644 index 7ef4344c69..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp.h +++ /dev/null @@ -1,26 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#ifndef PA_WINAMP_H -#define PA_WINAMP_H - - - -#include "Global.h" - - - -LRESULT CALLBACK WndprocWinamp( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - -#endif // PA_WINAMP_H diff --git a/Externals/MusicMod/Player/Src/Winamp/Dsp.h b/Externals/MusicMod/Player/Src/Winamp/Dsp.h deleted file mode 100644 index 0c62886b8a..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/Dsp.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef WINAMP_DSP_H -#define WINAMP_DSP_H - - -#include - -// DSP plugin interface - -// notes: -// any window that remains in foreground should optimally pass unused -// keystrokes to the parent (winamp's) window, so that the user -// can still control it. As for storing configuration, -// Configuration data should be stored in \plugin.ini -// (look at the vis plugin for configuration code) - -typedef struct winampDSPModule { - char *description; // description - HWND hwndParent; // parent window (filled in by calling app) - HINSTANCE hDllInstance; // instance handle to this DLL (filled in by calling app) - - void (*Config)(struct winampDSPModule *this_mod); // configuration dialog (if needed) - int (*Init)(struct winampDSPModule *this_mod); // 0 on success, creates window, etc (if needed) - - // modify waveform samples: returns number of samples to actually write - // (typically numsamples, but no more than twice numsamples, and no less than half numsamples) - // numsamples should always be at least 128. should, but I'm not sure - int (*ModifySamples)(struct winampDSPModule *this_mod, short int *samples, int numsamples, int bps, int nch, int srate); - - void (*Quit)(struct winampDSPModule *this_mod); // called when unloading - - void *userData; // user data, optional -} winampDSPModule; - -typedef struct { - int version; // DSP_HDRVER - char *description; // description of library - winampDSPModule* (*getModule)(int); // module retrieval function -} winampDSPHeader; - -// exported symbols -typedef winampDSPHeader* (*winampDSPGetHeaderType)(); - -// header version: 0x20 == 0.20 == winamp 2.0 -#define DSP_HDRVER 0x20 - - -#endif // WINAMP_DSP_H diff --git a/Externals/MusicMod/Player/Src/Winamp/Gen.h b/Externals/MusicMod/Player/Src/Winamp/Gen.h deleted file mode 100644 index 7e3c5a2368..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/Gen.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef WINAMP_GEN_H -#define WINAMP_GEN_H - - - -#define GPPHDR_VER 0x10 - - - -typedef struct { - int version; - char *description; - int (*init)(); - void (*config)(); - void (*quit)(); - HWND hwndParent; - HINSTANCE hDllInstance; -} winampGeneralPurposePlugin; - -typedef winampGeneralPurposePlugin * ( * winampGeneralPurposePluginGetter )(); - - - -// extern winampGeneralPurposePlugin * gen_plugins[ 256 ]; - - - -#endif // WINAMP_GEN_H diff --git a/Externals/MusicMod/Player/Src/Winamp/In2.h b/Externals/MusicMod/Player/Src/Winamp/In2.h deleted file mode 100644 index 5f990eb2f3..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/In2.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef WINAMP_IN_H -#define WINAMP_IN_H - - -#include -#include "out.h" - -// note: exported symbol is now winampGetInModule2. - -#define IN_VER 0x100 - - -// Changed -// void (*VSASetInfo)(int nch, int srate); -// to -// void (*VSASetInfo)(int srate, int nch); -// since the old one is wrong! -// -// Otherwise in_mp3 is the problem!?... - - -typedef struct -{ - int version; // module type (IN_VER) - char *description; // description of module, with version string - - HWND hMainWindow; // winamp's main window (filled in by winamp) - HINSTANCE hDllInstance; // DLL instance handle (Also filled in by winamp) - - char *FileExtensions; // "mp3\0Layer 3 MPEG\0mp2\0Layer 2 MPEG\0mpg\0Layer 1 MPEG\0" - // May be altered from Config, so the user can select what they want - - int is_seekable; // is this stream seekable? - int UsesOutputPlug; // does this plug-in use the output plug-ins? (musn't ever change, ever :) - - void (*Config)(HWND hwndParent); // configuration dialog - void (*About)(HWND hwndParent); // about dialog - - void (*Init)(); // called at program init - void (*Quit)(); // called at program quit - - void (*GetFileInfo)(char *file, char *title, int *length_in_ms); // if file == NULL, current playing is used - int (*InfoBox)(char *file, HWND hwndParent); - - int (*IsOurFile)(char *fn); // called before extension checks, to allow detection of mms://, etc - // playback stuff - int (*Play)(char *fn); // return zero on success, -1 on file-not-found, some other value on other (stopping winamp) error - void (*Pause)(); // pause stream - void (*UnPause)(); // unpause stream - int (*IsPaused)(); // ispaused? return 1 if paused, 0 if not - void (*Stop)(); // stop (unload) stream - - // time stuff - int (*GetLength)(); // get length in ms - int (*GetOutputTime)(); // returns current output time in ms. (usually returns outMod->GetOutputTime() - void (*SetOutputTime)(int time_in_ms); // seeks to point in stream (in ms). Usually you signal yoru thread to seek, which seeks and calls outMod->Flush().. - - // volume stuff - void (*SetVolume)(int volume); // from 0 to 255.. usually just call outMod->SetVolume - void (*SetPan)(int pan); // from -127 to 127.. usually just call outMod->SetPan - - // in-window builtin vis stuff - - void (*SAVSAInit)(int maxlatency_in_ms, int srate); // call once in Play(). maxlatency_in_ms should be the value returned from outMod->Open() - // call after opening audio device with max latency in ms and samplerate - void (*SAVSADeInit)(); // call in Stop() - - - // simple vis supplying mode - void (*SAAddPCMData)(void *PCMData, int nch, int bps, int timestamp); - // sets the spec data directly from PCM data - // quick and easy way to get vis working :) - // needs at least 576 samples :) - - // advanced vis supplying mode, only use if you're cool. Use SAAddPCMData for most stuff. - int (*SAGetMode)(); // gets csa (the current type (4=ws,2=osc,1=spec)) - // use when calling SAAdd() - void (*SAAdd)(void *data, int timestamp, int csa); // sets the spec data, filled in by winamp - - - // vis stuff (plug-in) - // simple vis supplying mode - void (*VSAAddPCMData)(void *PCMData, int nch, int bps, int timestamp); // sets the vis data directly from PCM data - // quick and easy way to get vis working :) - // needs at least 576 samples :) - - // advanced vis supplying mode, only use if you're cool. Use VSAAddPCMData for most stuff. - int (*VSAGetMode)(int *specNch, int *waveNch); // use to figure out what to give to VSAAdd - void (*VSAAdd)(void *data, int timestamp); // filled in by winamp, called by plug-in - - - // call this in Play() to tell the vis plug-ins the current output params. - void (*VSASetInfo)(int srate, int nch); - - - // dsp plug-in processing: - // (filled in by winamp, called by input plug) - - // returns 1 if active (which means that the number of samples returned by dsp_dosamples - // could be greater than went in.. Use it to estimate if you'll have enough room in the - // output buffer - int (*dsp_isactive)(); - - // returns number of samples to output. This can be as much as twice numsamples. - // be sure to allocate enough buffer for samples, then. - int (*dsp_dosamples)(short int *samples, int numsamples, int bps, int nch, int srate); - - - // eq stuff - void (*EQSet)(int on, char data[10], int preamp); // 0-64 each, 31 is +0, 0 is +12, 63 is -12. Do nothing to ignore. - - // info setting (filled in by winamp) - void (*SetInfo)(int bitrate, int srate, int stereo, int synched); // if -1, changes ignored? :) - - Out_Module *outMod; // filled in by winamp, optionally used :) -} In_Module; - - -#endif // WINAMP_IN_H diff --git a/Externals/MusicMod/Player/Src/Winamp/Out.h b/Externals/MusicMod/Player/Src/Winamp/Out.h deleted file mode 100644 index 7653bcbd96..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/Out.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef WINAMP_OUT_H -#define WINAMP_OUT_H - - -#include - - -// [ids] -// waveout 32 -// disk 33 -// dsound 38 -// xfade 63 -// gapless 64 -// null 65 -// mm2 69 - -#define OUT_VER 0x10 - -typedef struct -{ - int version; // module version (OUT_VER) - char *description; // description of module, with version string - int id; // module id. each input module gets its own. non-nullsoft modules should - // be >= 65536. - - HWND hMainWindow; // winamp's main window (filled in by winamp) - HINSTANCE hDllInstance; // DLL instance handle (filled in by winamp) - - void (*Config)(HWND hwndParent); // configuration dialog - void (*About)(HWND hwndParent); // about dialog - - void (*Init)(); // called when loaded - void (*Quit)(); // called when unloaded - - int (*Open)(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms); - // returns >=0 on success, <0 on failure - // NOTENOTENOTE: bufferlenms and prebufferms are ignored in most if not all output plug-ins. - // ... so don't expect the max latency returned to be what you asked for. - // returns max latency in ms (0 for diskwriters, etc) - // bufferlenms and prebufferms must be in ms. 0 to use defaults. - // prebufferms must be <= bufferlenms - - void (*Close)(); // close the ol' output device. - - int (*Write)(char *buf, int len); - // 0 on success. Len == bytes to write (<= 8192 always). buf is straight audio data. - // 1 returns not able to write (yet). Non-blocking, always. - - int (*CanWrite)(); // returns number of bytes possible to write at a given time. - // Never will decrease unless you call Write (or Close, heh) - - int (*IsPlaying)(); // non0 if output is still going or if data in buffers waiting to be - // written (i.e. closing while IsPlaying() returns 1 would truncate the song - - int (*Pause)(int pause); // returns previous pause state - - void (*SetVolume)(int volume); // volume is 0-255 - void (*SetPan)(int pan); // pan is -128 to 128 - - void (*Flush)(int t); // flushes buffers and restarts output at time t (in ms) - // (used for seeking) - - int (*GetOutputTime)(); // returns played time in MS - int (*GetWrittenTime)(); // returns time written in MS (used for synching up vis stuff) - -} Out_Module; - - -#endif // WINAMP_OUT_H diff --git a/Externals/MusicMod/Player/Src/Winamp/Vis.h b/Externals/MusicMod/Player/Src/Winamp/Vis.h deleted file mode 100644 index 280830d7cd..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/Vis.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef WINAMP_VIS_H -#define WINAMP_VIS_H - - -// notes: -// any window that remains in foreground should optimally pass -// keystrokes to the parent (winamp's) window, so that the user -// can still control it. unless escape is hit, or some option -// key specific to the vis is hit. As for storing configuration, -// Configuration data should be stored in \plugin.ini -// Look at the example plugin for a framework. - -// ints are 32 bits, and structure members are aligned on the default 8 byte boundaries -// tested with VC++ 4.2 and 5.0 - - -#include - - -typedef struct winampVisModule { - char *description; // description of module - HWND hwndParent; // parent window (filled in by calling app) - HINSTANCE hDllInstance; // instance handle to this DLL (filled in by calling app) - int sRate; // sample rate (filled in by calling app) - int nCh; // number of channels (filled in...) - int latencyMs; // latency from call of RenderFrame to actual drawing - // (calling app looks at this value when getting data) - int delayMs; // delay between calls in ms - - // the data is filled in according to the respective Nch entry - int spectrumNch; - int waveformNch; - unsigned char spectrumData[2][576]; - unsigned char waveformData[2][576]; - - void (*Config)(struct winampVisModule *this_mod); // configuration dialog - int (*Init)(struct winampVisModule *this_mod); // 0 on success, creates window, etc - int (*Render)(struct winampVisModule *this_mod); // returns 0 if successful, 1 if vis should end - void (*Quit)(struct winampVisModule *this_mod); // call when done - - void *userData; // user data, optional -} winampVisModule; - -typedef struct { - int version; // VID_HDRVER - char *description; // description of library - winampVisModule* (*getModule)(int); -} winampVisHeader; - -// exported symbols -typedef winampVisHeader* (*winampVisGetHeaderType)(); - -// version of current module (0x101 == 1.01) -#define VIS_HDRVER 0x101 - - -#endif // WINAMP_VIS_H diff --git a/Externals/MusicMod/Player/Src/Winamp/wa_ipc.h b/Externals/MusicMod/Player/Src/Winamp/wa_ipc.h deleted file mode 100644 index 75689b9eea..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/wa_ipc.h +++ /dev/null @@ -1,1103 +0,0 @@ -/* -** Copyright (C) 2003 Nullsoft, Inc. -** -** This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held -** liable for any damages arising from the use of this software. -** -** Permission is granted to anyone to use this software for any purpose, including commercial applications, and to -** alter it and redistribute it freely, subject to the following restrictions: -** -** 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. -** If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -** -** 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -** -** 3. This notice may not be removed or altered from any source distribution. -** -*/ - -#ifndef _WA_IPC_H_ -#define _WA_IPC_H_ - -/* -** This is the modern replacement for the classic 'frontend.h'. Most of these -** updates are designed for in-process use, i.e. from a plugin. -** -*/ - -/* message used to sent many messages to winamp's main window. -** most all of the IPC_* messages involve sending the message in the form of: -** result = SendMessage(hwnd_winamp,WM_WA_IPC,(parameter),IPC_*); -*/ -#define WM_WA_IPC WM_USER -/* but some of them use WM_COPYDATA. be afraid. -*/ - -#define IPC_GETVERSION 0 -/* int version = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION); -** -** Version will be 0x20yx for winamp 2.yx. versions previous to Winamp 2.0 -** typically (but not always) use 0x1zyx for 1.zx versions. Weird, I know. -*/ - -#define IPC_GETREGISTEREDVERSION 770 - - -typedef struct { - char *filename; - char *title; - int length; -} enqueueFileWithMetaStruct; // send this to a IPC_PLAYFILE in a non WM_COPYDATA, -// and you get the nice desired result. if title is NULL, it is treated as a "thing", -// otherwise it's assumed to be a file (for speed) - -#define IPC_PLAYFILE 100 // dont be fooled, this is really the same as enqueufile -#define IPC_ENQUEUEFILE 100 -/* sent as a WM_COPYDATA, with IPC_PLAYFILE as the dwData, and the string to play -** as the lpData. Just enqueues, does not clear the playlist or change the playback -** state. -*/ - - -#define IPC_DELETE 101 -#define IPC_DELETE_INT 1101 // don't use this, it's used internally by winamp when - // dealing with some lame explorer issues. -/* SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_DELETE); -** Use IPC_DELETE to clear Winamp's internal playlist. -*/ - - -#define IPC_STARTPLAY 102 // starts playback. almost like hitting play in Winamp. -#define IPC_STARTPLAY_INT 1102 // used internally, don't bother using it (won't be any fun) - - -#define IPC_CHDIR 103 -/* sent as a WM_COPYDATA, with IPC_CHDIR as the dwData, and the directory to change to -** as the lpData. -*/ - - -#define IPC_ISPLAYING 104 -/* int res = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING); -** If it returns 1, it is playing. if it returns 3, it is paused, -** if it returns 0, it is not playing. -*/ - - -#define IPC_GETOUTPUTTIME 105 -/* int res = SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETOUTPUTTIME); -** returns the position in milliseconds of the current track (mode = 0), -** or the track length, in seconds (mode = 1). Returns -1 if not playing or error. -*/ - - -#define IPC_JUMPTOTIME 106 -/* (requires Winamp 1.60+) -** SendMessage(hwnd_winamp,WM_WA_IPC,ms,IPC_JUMPTOTIME); -** IPC_JUMPTOTIME sets the position in milliseconds of the -** current song (approximately). -** Returns -1 if not playing, 1 on eof, or 0 if successful -*/ - -#define IPC_GETMODULENAME 109 -#define IPC_EX_ISRIGHTEXE 666 -/* usually shouldnt bother using these, but here goes: -** send a WM_COPYDATA with IPC_GETMODULENAME, and an internal -** flag gets set, which if you send a normal WM_WA_IPC message with -** IPC_EX_ISRIGHTEXE, it returns whether or not that filename -** matches. lame, I know. -*/ - -#define IPC_WRITEPLAYLIST 120 -/* (requires Winamp 1.666+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_WRITEPLAYLIST); -** -** IPC_WRITEPLAYLIST writes the current playlist to \\Winamp.m3u, -** and returns the current playlist position. -** Kinda obsoleted by some of the 2.x new stuff, but still good for when -** using a front-end (instead of a plug-in) -*/ - - -#define IPC_SETPLAYLISTPOS 121 -/* (requires Winamp 2.0+) -** SendMessage(hwnd_winamp,WM_WA_IPC,position,IPC_SETPLAYLISTPOS) -** IPC_SETPLAYLISTPOS sets the playlist position to 'position'. It -** does not change playback or anything, it just sets position, and -** updates the view if necessary -*/ - - -#define IPC_SETVOLUME 122 -/* (requires Winamp 2.0+) -** SendMessage(hwnd_winamp,WM_WA_IPC,volume,IPC_SETVOLUME); -** IPC_SETVOLUME sets the volume of Winamp (from 0-255). -*/ - - -#define IPC_SETPANNING 123 -/* (requires Winamp 2.0+) -** SendMessage(hwnd_winamp,WM_WA_IPC,panning,IPC_SETPANNING); -** IPC_SETPANNING sets the panning of Winamp (from 0 (left) to 255 (right)). -*/ - - -#define IPC_GETLISTLENGTH 124 -/* (requires Winamp 2.0+) -** int length = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTLENGTH); -** IPC_GETLISTLENGTH returns the length of the current playlist, in -** tracks. -*/ - - -#define IPC_GETLISTPOS 125 -/* (requires Winamp 2.05+) -** int pos=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS); -** IPC_GETLISTPOS returns the playlist position. A lot like IPC_WRITEPLAYLIST -** only faster since it doesn't have to write out the list. Heh, silly me. -*/ - - -#define IPC_GETINFO 126 -/* (requires Winamp 2.05+) -** int inf=SendMessage(hwnd_winamp,WM_WA_IPC,mode,IPC_GETINFO); -** IPC_GETINFO returns info about the current playing song. The value -** it returns depends on the value of 'mode'. -** Mode Meaning -** ------------------ -** 0 Samplerate (i.e. 44100) -** 1 Bitrate (i.e. 128) -** 2 Channels (i.e. 2) -** 3 (5+) Video LOWORD=w HIWORD=h -** 4 (5+) > 65536, string (video description) -*/ - - -#define IPC_GETEQDATA 127 -/* (requires Winamp 2.05+) -** int data=SendMessage(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA); -** IPC_GETEQDATA queries the status of the EQ. -** The value returned depends on what 'pos' is set to: -** Value Meaning -** ------------------ -** 0-9 The 10 bands of EQ data. 0-63 (+20db - -20db) -** 10 The preamp value. 0-63 (+20db - -20db) -** 11 Enabled. zero if disabled, nonzero if enabled. -** 12 Autoload. zero if disabled, nonzero if enabled. -*/ - - -#define IPC_SETEQDATA 128 -/* (requires Winamp 2.05+) -** SendMessage(hwnd_winamp,WM_WA_IPC,pos,IPC_GETEQDATA); -** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SETEQDATA); -** IPC_SETEQDATA sets the value of the last position retrieved -** by IPC_GETEQDATA. This is pretty lame, and we should provide -** an extended version that lets you do a MAKELPARAM(pos,value). -** someday... - - new (2.92+): - if the high byte is set to 0xDB, then the third byte specifies - which band, and the bottom word specifies the value. -*/ - -#define IPC_ADDBOOKMARK 129 -/* (requires Winamp 2.4+) -** Sent as a WM_COPYDATA, using IPC_ADDBOOKMARK, adds the specified -** file/url to the Winamp bookmark list. -*/ -/* -In winamp 5+, we use this as a normal WM_WA_IPC and the string: - - "filename\0title\0" - - to notify the library/bookmark editor that a bookmark -was added. Note that using this message in this context does not -actually add the bookmark. -do not use :) -*/ - - -#define IPC_INSTALLPLUGIN 130 -/* not implemented, but if it was you could do a WM_COPYDATA with -** a path to a .wpz, and it would install it. -*/ - - -#define IPC_RESTARTWINAMP 135 -/* (requires Winamp 2.2+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_RESTARTWINAMP); -** IPC_RESTARTWINAMP will restart Winamp (isn't that obvious ? :) -*/ - - -#define IPC_ISFULLSTOP 400 -/* (requires winamp 2.7+ I think) -** ret=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISFULLSTOP); -** useful for when you're an output plugin, and you want to see -** if the stop/close is a full stop, or just between tracks. -** returns nonzero if it's full, zero if it's just a new track. -*/ - - -#define IPC_INETAVAILABLE 242 -/* (requires Winamp 2.05+) -** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_INETAVAILABLE); -** IPC_INETAVAILABLE will return 1 if the Internet connection is available for Winamp. -*/ - - -#define IPC_UPDTITLE 243 -/* (requires Winamp 2.2+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_UPDTITLE); -** IPC_UPDTITLE will ask Winamp to update the informations about the current title. -*/ - - -#define IPC_REFRESHPLCACHE 247 -/* (requires Winamp 2.2+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_REFRESHPLCACHE); -** IPC_REFRESHPLCACHE will flush the playlist cache buffer. -** (send this if you want it to go refetch titles for tracks) -*/ - - -#define IPC_GET_SHUFFLE 250 -/* (requires Winamp 2.4+) -** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_SHUFFLE); -** -** IPC_GET_SHUFFLE returns the status of the Shuffle option (1 if set) -*/ - - -#define IPC_GET_REPEAT 251 -/* (requires Winamp 2.4+) -** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_REPEAT); -** -** IPC_GET_REPEAT returns the status of the Repeat option (1 if set) -*/ - - -#define IPC_SET_SHUFFLE 252 -/* (requires Winamp 2.4+) -** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_SHUFFLE); -** -** IPC_SET_SHUFFLE sets the status of the Shuffle option (1 to turn it on) -*/ - - -#define IPC_SET_REPEAT 253 -/* (requires Winamp 2.4+) -** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_REPEAT); -** -** IPC_SET_REPEAT sets the status of the Repeat option (1 to turn it on) -*/ - - -#define IPC_ENABLEDISABLE_ALL_WINDOWS 259 // 0xdeadbeef to disable -/* (requires Winamp 2.9+) -** SendMessage(hwnd_winamp,WM_WA_IPC,enable?0:0xdeadbeef,IPC_MBOPENREAL); -** sending with 0xdeadbeef as the param disables all winamp windows, -** any other values will enable all winamp windows. -*/ - - -#define IPC_GETWND 260 -/* (requires Winamp 2.9+) -** HWND h=SendMessage(hwnd_winamp,WM_WA_IPC,IPC_GETWND_xxx,IPC_GETWND); -** returns the HWND of the window specified. -*/ - #define IPC_GETWND_EQ 0 // use one of these for the param - #define IPC_GETWND_PE 1 - #define IPC_GETWND_MB 2 - #define IPC_GETWND_VIDEO 3 -#define IPC_ISWNDVISIBLE 261 // same param as IPC_GETWND - - - - -/************************************************************************ -***************** in-process only (WE LOVE PLUGINS) -************************************************************************/ - - -#define IPC_SETSKIN 200 -/* (requires Winamp 2.04+, only usable from plug-ins (not external apps)) -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)"skinname",IPC_SETSKIN); -** IPC_SETSKIN sets the current skin to "skinname". Note that skinname -** can be the name of a skin, a skin .zip file, with or without path. -** If path isn't specified, the default search path is the winamp skins -** directory. -*/ - - -#define IPC_GETSKIN 201 -/* (requires Winamp 2.04+, only usable from plug-ins (not external apps)) -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)skinname_buffer,IPC_GETSKIN); -** IPC_GETSKIN puts the directory where skin bitmaps can be found -** into skinname_buffer. -** skinname_buffer must be MAX_PATH characters in length. -** When using a .zip'd skin file, it'll return a temporary directory -** where the ZIP was decompressed. -*/ - - -#define IPC_EXECPLUG 202 -/* (requires Winamp 2.04+, only usable from plug-ins (not external apps)) -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)"vis_file.dll",IPC_EXECPLUG); -** IPC_EXECPLUG executes a visualization plug-in pointed to by WPARAM. -** the format of this string can be: -** "vis_whatever.dll" -** "vis_whatever.dll,0" // (first mod, file in winamp plug-in dir) -** "C:\\dir\\vis_whatever.dll,1" -*/ - - -#define IPC_GETPLAYLISTFILE 211 -/* (requires Winamp 2.04+, only usable from plug-ins (not external apps)) -** char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE); -** IPC_GETPLAYLISTFILE gets the filename of the playlist entry [index]. -** returns a pointer to it. returns NULL on error. -*/ - - -#define IPC_GETPLAYLISTTITLE 212 -/* (requires Winamp 2.04+, only usable from plug-ins (not external apps)) -** char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTTITLE); -** -** IPC_GETPLAYLISTTITLE gets the title of the playlist entry [index]. -** returns a pointer to it. returns NULL on error. -*/ - - -#define IPC_GETHTTPGETTER 240 -/* retrieves a function pointer to a HTTP retrieval function. -** if this is unsupported, returns 1 or 0. -** the function should be: -** int (*httpRetrieveFile)(HWND hwnd, char *url, char *file, char *dlgtitle); -** if you call this function, with a parent window, a URL, an output file, and a dialog title, -** it will return 0 on successful download, 1 on error. -*/ - - -#define IPC_MBOPEN 241 -/* (requires Winamp 2.05+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_MBOPEN); -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPEN); -** IPC_MBOPEN will open a new URL in the minibrowser. if url is NULL, it will open the Minibrowser window. -*/ - - - -#define IPC_CHANGECURRENTFILE 245 -/* (requires Winamp 2.05+) -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_CHANGECURRENTFILE); -** IPC_CHANGECURRENTFILE will set the current playlist item. -*/ - - -#define IPC_GETMBURL 246 -/* (requires Winamp 2.2+) -** char buffer[4096]; // Urls can be VERY long -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)buffer,IPC_GETMBURL); -** IPC_GETMBURL will retrieve the current Minibrowser URL into buffer. -** buffer must be at least 4096 bytes long. -*/ - - -#define IPC_MBBLOCK 248 -/* (requires Winamp 2.4+) -** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_MBBLOCK); -** -** IPC_MBBLOCK will block the Minibrowser from updates if value is set to 1 -*/ - -#define IPC_MBOPENREAL 249 -/* (requires Winamp 2.4+) -** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPENREAL); -** -** IPC_MBOPENREAL works the same as IPC_MBOPEN except that it will works even if -** IPC_MBBLOCK has been set to 1 -*/ - -#define IPC_ADJUST_OPTIONSMENUPOS 280 -/* (requires Winamp 2.9+) -** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_OPTIONSMENUPOS); -** moves where winamp expects the Options menu in the main menu. Useful if you wish to insert a -** menu item above the options/skins/vis menus. -*/ - -#define IPC_GET_HMENU 281 -/* (requires Winamp 2.9+) -** HMENU hMenu=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)0,IPC_GET_HMENU); -** values for data: -** 0 : main popup menu -** 1 : main menubar file menu -** 2 : main menubar options menu -** 3 : main menubar windows menu -** 4 : main menubar help menu -** other values will return NULL. -*/ - -#define IPC_GET_EXTENDED_FILE_INFO 290 //pass a pointer to the following struct in wParam -#define IPC_GET_EXTENDED_FILE_INFO_HOOKABLE 296 -/* (requires Winamp 2.9+) -** to use, create an extendedFileInfoStruct, point the values filename and metadata to the -** filename and metadata field you wish to query, and ret to a buffer, with retlen to the -** length of that buffer, and then SendMessage(hwnd_winamp,WM_WA_IPC,&struct,IPC_GET_EXTENDED_FILE_INFO); -** the results should be in the buffer pointed to by ret. -** returns 1 if the decoder supports a getExtendedFileInfo method -*/ -typedef struct { - char *filename; - char *metadata; - char *ret; - int retlen; -} extendedFileInfoStruct; - -#define IPC_GET_BASIC_FILE_INFO 291 //pass a pointer to the following struct in wParam -typedef struct { - char *filename; - - int quickCheck; // set to 0 to always get, 1 for quick, 2 for default (if 2, quickCheck will be set to 0 if quick wasnot used) - - // filled in by winamp - int length; - char *title; - int titlelen; -} basicFileInfoStruct; - -#define IPC_GET_EXTLIST 292 //returns doublenull delimited. GlobalFree() it when done. if data is 0, returns raw extlist, if 1, returns something suitable for getopenfilename - -#define IPC_INFOBOX 293 -typedef struct { - HWND parent; - char *filename; -} infoBoxParam; - -#define IPC_SET_EXTENDED_FILE_INFO 294 //pass a pointer to the a extendedFileInfoStruct in wParam -/* (requires Winamp 2.9+) -** to use, create an extendedFileInfoStruct, point the values filename and metadata to the -** filename and metadata field you wish to write in ret. (retlen is not used). and then -** SendMessage(hwnd_winamp,WM_WA_IPC,&struct,IPC_SET_EXTENDED_FILE_INFO); -** returns 1 if the metadata is supported -** Call IPC_WRITE_EXTENDED_FILE_INFO once you're done setting all the metadata you want to update -*/ - -#define IPC_WRITE_EXTENDED_FILE_INFO 295 -/* (requires Winamp 2.9+) -** writes all the metadata set thru IPC_SET_EXTENDED_FILE_INFO to the file -** returns 1 if the file has been successfully updated, 0 if error -*/ - -#define IPC_FORMAT_TITLE 297 -typedef struct -{ - char *spec; // NULL=default winamp spec - void *p; - - char *out; - int out_len; - - char * (*TAGFUNC)(char * tag, void * p); //return 0 if not found - void (*TAGFREEFUNC)(char * tag,void * p); -} waFormatTitle; - -#define IPC_GETUNCOMPRESSINTERFACE 331 -/* returns a function pointer to uncompress(). -** int (*uncompress)(unsigned char *dest, unsigned long *destLen, const unsigned char *source, unsigned long sourceLen); -** right out of zlib, useful for decompressing zlibbed data. -** if you pass the parm of 0x10100000, it will return a wa_inflate_struct * to an inflate API. -*/ - -typedef struct { - int (*inflateReset)(void *strm); - int (*inflateInit_)(void *strm,const char *version, int stream_size); - int (*inflate)(void *strm, int flush); - int (*inflateEnd)(void *strm); - unsigned long (*crc32)(unsigned long crc, const unsigned char *buf, unsigned int len); -} wa_inflate_struct; - - -#define IPC_ADD_PREFS_DLG 332 -#define IPC_REMOVE_PREFS_DLG 333 -/* (requires Winamp 2.9+) -** to use, allocate a prefsDlgRec structure (either on the heap or some global -** data, but NOT on the stack), initialze the members: -** hInst to the DLL instance where the resource is located -** dlgID to the ID of the dialog, -** proc to the window procedure for the dialog -** name to the name of the prefs page in the prefs. -** where to 0 (eventually we may add more options) -** then, SendMessage(hwnd_winamp,WM_WA_IPC,&prefsRec,IPC_ADD_PREFS_DLG); -** -** you can also IPC_REMOVE_PREFS_DLG with the address of the same prefsRec, -** but you shouldn't really ever have to. -** -*/ -#define IPC_OPENPREFSTOPAGE 380 // pass an id of a builtin page, or a &prefsDlgRec of prefs page to open - -typedef struct _prefsDlgRec { - HINSTANCE hInst; - int dlgID; - void *proc; - - char *name; - int where; // 0 for options, 1 for plugins, 2 for skins, 3 for bookmarks, 4 for prefs - - - int _id; - struct _prefsDlgRec *next; -} prefsDlgRec; - - -#define IPC_GETINIFILE 334 // returns a pointer to winamp.ini -#define IPC_GETINIDIRECTORY 335 // returns a pointer to the directory to put config files in (if you dont want to use winamp.ini) - -#define IPC_SPAWNBUTTONPOPUP 361 // param = -// 0 = eject -// 1 = previous -// 2 = next -// 3 = pause -// 4 = play -// 5 = stop - -#define IPC_OPENURLBOX 360 // pass a HWND to a parent, returns a HGLOBAL that needs to be freed with GlobalFree(), if successful -#define IPC_OPENFILEBOX 362 // pass a HWND to a parent -#define IPC_OPENDIRBOX 363 // pass a HWND to a parent - -// pass an HWND to a parent. call this if you take over the whole UI so that the dialogs are not appearing on the -// bottom right of the screen since the main winamp window is at 3000x3000, call again with NULL to reset -#define IPC_SETDIALOGBOXPARENT 364 - - - -// pass 0 for a copy of the skin HBITMAP -// pass 1 for name of font to use for playlist editor likeness -// pass 2 for font charset -// pass 3 for font size -#define IPC_GET_GENSKINBITMAP 503 - - -#define IPC_GET_EMBEDIF 505 // pass an embedWindowState -// returns an HWND embedWindow(embedWindowState *); if the data is NULL, otherwise returns the HWND directly -typedef struct -{ - HWND me; //hwnd of the window - - int flags; - - RECT r; - - void *user_ptr; // for application use - - int extra_data[64]; // for internal winamp use -} embedWindowState; - -#define EMBED_FLAGS_NORESIZE 1 // set this bit in embedWindowState.flags to keep window from being resizable -#define EMBED_FLAGS_NOTRANSPARENCY 2 // set this bit in embedWindowState.flags to make gen_ff turn transparency off for this wnd - - -#define IPC_EMBED_ENUM 532 -typedef struct embedEnumStruct -{ - int (*enumProc)(embedWindowState *ws, struct embedEnumStruct *param); // return 1 to abort - int user_data; // or more :) -} embedEnumStruct; - // pass - -#define IPC_EMBED_ISVALID 533 - -#define IPC_CONVERTFILE 506 -/* (requires Winamp 2.92+) -** Converts a given file to a different format (PCM, MP3, etc...) -** To use, pass a pointer to a waFileConvertStruct struct -** This struct can be either on the heap or some global -** data, but NOT on the stack. At least, until the conversion is done. -** -** eg: SendMessage(hwnd_winamp,WM_WA_IPC,&myConvertStruct,IPC_CONVERTFILE); -** -** Return value: -** 0: Can't start the conversion. Look at myConvertStruct->error for details. -** 1: Conversion started. Status messages will be sent to the specified callbackhwnd. -** Be sure to call IPC_CONVERTFILE_END when your callback window receives the -** IPC_CB_CONVERT_DONE message. -*/ -typedef struct -{ - char *sourcefile; // "c:\\source.mp3" - char *destfile; // "c:\\dest.pcm" - int destformat[8]; // like 'PCM ',srate,nch,bps - HWND callbackhwnd; // window that will receive the IPC_CB_CONVERT notification messages - - //filled in by winamp.exe - char *error; //if IPC_CONVERTFILE returns 0, the reason will be here - - int bytes_done; //you can look at both of these values for speed statistics - int bytes_total; - int bytes_out; - - int killswitch; // don't set it manually, use IPC_CONVERTFILE_END - int extra_data[64]; // for internal winamp use -} convertFileStruct; - -#define IPC_CONVERTFILE_END 507 -/* (requires Winamp 2.92+) -** Stop/ends a convert process started from IPC_CONVERTFILE -** You need to call this when you receive the IPC_CB_CONVERTDONE message or when you -** want to abort a conversion process -** -** eg: SendMessage(hwnd_winamp,WM_WA_IPC,&myConvertStruct,IPC_CONVERTFILE_END); -** -** No return value -*/ - -typedef struct { - HWND hwndParent; - int format; - - //filled in by winamp.exe - HWND hwndConfig; - int extra_data[8]; -} convertConfigStruct; -#define IPC_CONVERT_CONFIG 508 -#define IPC_CONVERT_CONFIG_END 509 - -typedef struct -{ - void (*enumProc)(int user_data, const char *desc, int fourcc); - int user_data; -} converterEnumFmtStruct; -#define IPC_CONVERT_CONFIG_ENUMFMTS 510 -/* (requires Winamp 2.92+) -*/ - - -typedef struct -{ - char cdletter; - char *playlist_file; - HWND callback_hwnd; - - //filled in by winamp.exe - char *error; -} burnCDStruct; -#define IPC_BURN_CD 511 -/* (requires Winamp 5.0+) -*/ - -typedef struct -{ - convertFileStruct *cfs; - int priority; -} convertSetPriority; -#define IPC_CONVERT_SET_PRIORITY 512 - -typedef struct -{ - char *filename; - char *title; // 2048 bytes - int length; - int force_useformatting; // can set this to 1 if you want to force a url to use title formatting shit -} waHookTitleStruct; -// return TRUE if you hook this -#define IPC_HOOK_TITLES 850 - -#define IPC_GETSADATAFUNC 800 -// 0: returns a char *export_sa_get() that returns 150 bytes of data -// 1: returns a export_sa_setreq(int want); - -#define IPC_ISMAINWNDVISIBLE 900 - - -#define IPC_SETPLEDITCOLORS 920 -typedef struct -{ - int numElems; - int *elems; - HBITMAP bm; // set if you want to override -} waSetPlColorsStruct; - - -// the following IPC use waSpawnMenuParms as parameter -#define IPC_SPAWNEQPRESETMENU 933 -#define IPC_SPAWNFILEMENU 934 //menubar -#define IPC_SPAWNOPTIONSMENU 935 //menubar -#define IPC_SPAWNWINDOWSMENU 936 //menubar -#define IPC_SPAWNHELPMENU 937 //menubar -#define IPC_SPAWNPLAYMENU 938 //menubar -#define IPC_SPAWNPEFILEMENU 939 //menubar -#define IPC_SPAWNPEPLAYLISTMENU 940 //menubar -#define IPC_SPAWNPESORTMENU 941 //menubar -#define IPC_SPAWNPEHELPMENU 942 //menubar -#define IPC_SPAWNMLFILEMENU 943 //menubar -#define IPC_SPAWNMLVIEWMENU 944 //menubar -#define IPC_SPAWNMLHELPMENU 945 //menubar -#define IPC_SPAWNPELISTOFPLAYLISTS 946 - -typedef struct -{ - HWND wnd; - int xpos; // in screen coordinates - int ypos; -} waSpawnMenuParms; - -// waSpawnMenuParms2 is used by the menubar submenus -typedef struct -{ - HWND wnd; - int xpos; // in screen coordinates - int ypos; - int width; - int height; -} waSpawnMenuParms2; - - -// system tray sends this (you might want to simulate it) -#define WM_WA_SYSTRAY WM_USER+1 - -// input plugins send this when they are done playing back -#define WM_WA_MPEG_EOF WM_USER+2 - - - -//// video stuff - -#define IPC_IS_PLAYING_VIDEO 501 // returns >1 if playing, 0 if not, 1 if old version (so who knows):) -#define IPC_GET_IVIDEOOUTPUT 500 // see below for IVideoOutput interface -#define VIDEO_MAKETYPE(A,B,C,D) ((A) | ((B)<<8) | ((C)<<16) | ((D)<<24)) -#define VIDUSER_SET_INFOSTRING 0x1000 -#define VIDUSER_GET_VIDEOHWND 0x1001 -#define VIDUSER_SET_VFLIP 0x1002 -#define VIDUSER_SET_TRACKSELINTERFACE 0x1003 // give your ITrackSelector interface as param2 - -#ifndef NO_IVIDEO_DECLARE -#ifdef __cplusplus - -class VideoOutput; -class SubsItem; - -typedef struct { - unsigned char* baseAddr; - long rowBytes; -} YV12_PLANE; - -typedef struct { - YV12_PLANE y; - YV12_PLANE u; - YV12_PLANE v; -} YV12_PLANES; - -class IVideoOutput -{ - public: - virtual ~IVideoOutput() { } - virtual int open(int w, int h, int vflip, double aspectratio, unsigned int fmt)=0; - virtual void setcallback(LRESULT (*msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam), void *token) { } - virtual void close()=0; - virtual void draw(void *frame)=0; - virtual void drawSubtitle(SubsItem *item) { } - virtual void showStatusMsg(const char *text) { } - virtual int get_latency() { return 0; } - virtual void notifyBufferState(int bufferstate) { } /* 0-255*/ - - virtual int extended(int param1, int param2, int param3) { return 0; } // Dispatchable, eat this! -}; - -class ITrackSelector -{ - public: - virtual int getNumAudioTracks()=0; - virtual void enumAudioTrackName(int n, const char *buf, int size)=0; - virtual int getCurAudioTrack()=0; - virtual int getNumVideoTracks()=0; - virtual void enumVideoTrackName(int n, const char *buf, int size)=0; - virtual int getCurVideoTrack()=0; - - virtual void setAudioTrack(int n)=0; - virtual void setVideoTrack(int n)=0; -}; - -#endif //cplusplus -#endif//NO_IVIDEO_DECLARE - -// these messages are callbacks that you can grab by subclassing the winamp window - -// wParam = -#define IPC_CB_WND_EQ 0 // use one of these for the param -#define IPC_CB_WND_PE 1 -#define IPC_CB_WND_MB 2 -#define IPC_CB_WND_VIDEO 3 -#define IPC_CB_WND_MAIN 4 - -#define IPC_CB_ONSHOWWND 600 -#define IPC_CB_ONHIDEWND 601 - -#define IPC_CB_GETTOOLTIP 602 - -#define IPC_CB_MISC 603 - #define IPC_CB_MISC_TITLE 0 - #define IPC_CB_MISC_VOLUME 1 // volume/pan - #define IPC_CB_MISC_STATUS 2 - #define IPC_CB_MISC_EQ 3 - #define IPC_CB_MISC_INFO 4 - #define IPC_CB_MISC_VIDEOINFO 5 - -#define IPC_CB_CONVERT_STATUS 604 // param value goes from 0 to 100 (percent) -#define IPC_CB_CONVERT_DONE 605 - -#define IPC_ADJUST_FFWINDOWSMENUPOS 606 -/* (requires Winamp 2.9+) -** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_FFWINDOWSMENUPOS); -** moves where winamp expects the freeform windows in the menubar windows main menu. Useful if you wish to insert a -** menu item above extra freeform windows. -*/ - -#define IPC_ISDOUBLESIZE 608 - -#define IPC_ADJUST_FFOPTIONSMENUPOS 609 -/* (requires Winamp 2.9+) -** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_FFOPTIONSMENUPOS); -** moves where winamp expects the freeform preferences item in the menubar windows main menu. Useful if you wish to insert a -** menu item above preferences item. -*/ - -#define IPC_GETTIMEDISPLAYMODE 610 // returns 0 if displaying elapsed time or 1 if displaying remaining time - -#define IPC_SETVISWND 611 // param is hwnd, setting this allows you to receive ID_VIS_NEXT/PREVOUS/RANDOM/FS wm_commands -#define ID_VIS_NEXT 40382 -#define ID_VIS_PREV 40383 -#define ID_VIS_RANDOM 40384 -#define ID_VIS_FS 40389 -#define ID_VIS_CFG 40390 -#define ID_VIS_MENU 40391 - -#define IPC_GETVISWND 612 // returns the vis cmd handler hwnd -#define IPC_ISVISRUNNING 613 -#define IPC_CB_VISRANDOM 628 // param is status of random - -#define IPC_SETIDEALVIDEOSIZE 614 // sent by winamp to winamp, trap it if you need it. width=HIWORD(param), height=LOWORD(param) - -#define IPC_GETSTOPONVIDEOCLOSE 615 -#define IPC_SETSTOPONVIDEOCLOSE 616 - -typedef struct { - HWND hwnd; - int uMsg; - int wParam; - int lParam; -} transAccelStruct; - -#define IPC_TRANSLATEACCELERATOR 617 - -typedef struct { - int cmd; - int x; - int y; - int align; -} windowCommand; // send this as param to an IPC_PLCMD, IPC_MBCMD, IPC_VIDCMD - -#define IPC_CB_ONTOGGLEAOT 618 - -#define IPC_GETPREFSWND 619 - -#define IPC_SET_PE_WIDTHHEIGHT 620 // data is a pointer to a POINT structure that holds width & height - -#define IPC_GETLANGUAGEPACKINSTANCE 621 - -#define IPC_CB_PEINFOTEXT 622 // data is a string, ie: "04:21/45:02" - -#define IPC_CB_OUTPUTCHANGED 623 // output plugin was changed in config - -#define IPC_GETOUTPUTPLUGIN 625 - -#define IPC_SETDRAWBORDERS 626 -#define IPC_DISABLESKINCURSORS 627 -#define IPC_CB_RESETFONT 629 - -#define IPC_IS_FULLSCREEN 630 // returns 1 if video or vis is in fullscreen mode -#define IPC_SET_VIS_FS_FLAG 631 // a vis should send this message with 1/as param to notify winamp that it has gone to or has come back from fullscreen mode - -#define IPC_SHOW_NOTIFICATION 632 - -#define IPC_GETSKININFO 633 - -#define IPC_GET_MANUALPLADVANCE 634 -/* (requires Winamp 5.03+) -** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_MANUALPLADVANCE); -** -** IPC_GET_MANUALPLADVANCE returns the status of the Manual Playlist Advance (1 if set) -*/ - -#define IPC_SET_MANUALPLADVANCE 635 -/* (requires Winamp 5.03+) -** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_MANUALPLADVANCE); -** -** IPC_SET_MANUALPLADVANCE sets the status of the Manual Playlist Advance option (1 to turn it on) -*/ - -#define IPC_GET_NEXT_PLITEM 636 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_EOF_GET_NEXT_PLITEM); -** -** Sent to Winamp's main window when an item has just finished playback or the next button has been pressed and -** requesting the new playlist item number to go to. -** Mainly used by gen_jumpex. Subclass this message in your application to return the new item number. -** -1 for normal winamp operation (default) or the new item number in the playlist to play. -*/ - -#define IPC_GET_PREVIOUS_PLITEM 637 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_EOF_GET_PREVIOUS_PLITEM); -** -** Sent to Winamp's main window when the previous button has been pressed and Winamp is requesting the new playlist item number to go to. -** Mainly used by gen_jumpex. Subclass this message in your application to return the new item number. -** -1 for normal winamp operation (default) or the new item number in the playlist to play. -*/ - -#define IPC_IS_WNDSHADE 638 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,wnd,IPC_IS_WNDSHADE); -** -** 'wnd' is window id as defined for IPC_GETWND, or -1 for main window -** Returns 1 if wnd is set to winshade mode, or 0 if it is not -*/ - -#define IPC_SETRATING 639 -/* (requires Winamp 5.04+ with ML) -** SendMessage(hwnd_winamp,WM_WA_IPC,rating,IPC_SETRATING); -** 'rating' is an int value from 0 (no rating) to 5 -*/ - -#define IPC_GETRATING 640 -/* (requires Winamp 5.04+ with ML) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETRATING); -** returns the current item's rating -*/ - -#define IPC_GETNUMAUDIOTRACKS 641 -/* (requires Winamp 5.04+) -** int n = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETNUMAUDIOTRACKS); -** returns the number of audio tracks for the currently playing item -*/ - -#define IPC_GETNUMVIDEOTRACKS 642 -/* (requires Winamp 5.04+) -** int n = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETNUMVIDEOTRACKS); -** returns the number of video tracks for the currently playing item -*/ - -#define IPC_GETAUDIOTRACK 643 -/* (requires Winamp 5.04+) -** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETAUDIOTRACK); -** returns the id of the current audio track for the currently playing item -*/ - -#define IPC_GETVIDEOTRACK 644 -/* (requires Winamp 5.04+) -** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVIDEOTRACK); -** returns the id of the current video track for the currently playing item -*/ - -#define IPC_SETAUDIOTRACK 645 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,track,IPC_SETAUDIOTRACK); -** switch the currently playing item to a new audio track -*/ - -#define IPC_SETVIDEOTRACK 646 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,track,IPC_SETVIDEOTRACK); -** switch the currently playing item to a new video track -*/ - -#define IPC_PUSH_DISABLE_EXIT 647 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_PUSH_DISABLE_EXIT ); -** lets you disable or re-enable the UI exit functions (close button, -** context menu, alt-f4). -** call IPC_POP_DISABLE_EXIT when you are done doing whatever required -** preventing exit -*/ - -#define IPC_POP_DISABLE_EXIT 648 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_POP_DISABLE_EXIT ); -** see IPC_PUSH_DISABLE_EXIT -*/ - -#define IPC_IS_EXIT_ENABLED 649 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_EXIT_ENABLED); -** returns 0 if exit is disabled, 1 otherwise -*/ - -#define IPC_IS_AOT 650 -/* (requires Winamp 5.04+) -** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_AOT); -** returns status of always on top flag. note: this may not match the actual -** TOPMOST window flag while another fullscreen application is focused -*/ - - -// >>>>>>>>>>> Next is 651 - -#define IPC_PLCMD 1000 - -#define PLCMD_ADD 0 -#define PLCMD_REM 1 -#define PLCMD_SEL 2 -#define PLCMD_MISC 3 -#define PLCMD_LIST 4 - -#define IPC_MBCMD 1001 - -#define MBCMD_BACK 0 -#define MBCMD_FORWARD 1 -#define MBCMD_STOP 2 -#define MBCMD_RELOAD 3 -#define MBCMD_MISC 4 - -#define IPC_VIDCMD 1002 - -#define VIDCMD_FULLSCREEN 0 -#define VIDCMD_1X 1 -#define VIDCMD_2X 2 -#define VIDCMD_LIB 3 -#define VIDPOPUP_MISC 4 - -#define IPC_MBURL 1003 //sets the URL -#define IPC_MBGETCURURL 1004 //copies the current URL into wParam (have a 4096 buffer ready) -#define IPC_MBGETDESC 1005 //copies the current URL description into wParam (have a 4096 buffer ready) -#define IPC_MBCHECKLOCFILE 1006 //checks that the link file is up to date (otherwise updates it). wParam=parent HWND -#define IPC_MBREFRESH 1007 //refreshes the "now playing" view in the library -#define IPC_MBGETDEFURL 1008 //copies the default URL into wParam (have a 4096 buffer ready) - -#define IPC_STATS_LIBRARY_ITEMCNT 1300 // updates library count status - -// IPC 2000-3000 reserved for freeform messages, see gen_ff/ff_ipc.h -#define IPC_FF_FIRST 2000 -#define IPC_FF_LAST 3000 - -#define IPC_GETDROPTARGET 3001 - -#define IPC_PLAYLIST_MODIFIED 3002 // sent to main wnd whenever the playlist is modified - -#define IPC_PLAYING_FILE 3003 // sent to main wnd with the file as parm whenever a file is played -#define IPC_FILE_TAG_MAY_HAVE_UPDATED 3004 // sent to main wnd with the file as parm whenever a file tag might be updated - - -#define IPC_ALLOW_PLAYTRACKING 3007 -// send nonzero to allow, zero to disallow - -#define IPC_HOOK_OKTOQUIT 3010 // return 0 to abort a quit, nonzero if quit is OK - -#define IPC_WRITECONFIG 3011 // pass 2 to write all, 1 to write playlist + common, 0 to write common+less common - -// pass a string to be the name to register, and returns a value > 65536, which is a unique value you can use -// for custom WM_WA_IPC messages. -#define IPC_REGISTER_WINAMP_IPCMESSAGE 65536 - - - -#endif //_WA_IPC_H_ diff --git a/Externals/MusicMod/Player/Src/Winamp/wa_msgids.h b/Externals/MusicMod/Player/Src/Winamp/wa_msgids.h deleted file mode 100644 index ae5ce4fe7b..0000000000 --- a/Externals/MusicMod/Player/Src/Winamp/wa_msgids.h +++ /dev/null @@ -1,297 +0,0 @@ -/* -** wa_msgids.h (created 14/04/2004 12:23:19 PM) -** Created from wa_ipc.h and resource.h from the language sdk -** by Darren Owen aka DrO -** -** This a simple header file which defines the message ids to allow you to control -** Winamp in keeping with the old frontend.h (R.I.P.) -** -** -** Version History: -** -** v1.0 :: intial version with ids for Winamp 5.02+ -** v1.0a :: fixed the file to work on compile -** v1.1 :: added the msg id for 'Manual Playlist Advance' -** v1.2 :: added in song rating menu items -** -** -** How to use: -** -** To send these, use the format: -** -** SendMessage(hwnd_winamp, WM_COMMAND,command_name,0); -** -** For other languages such as Visual Basic, Pascal, etc you will need to use -** the equivalent calling SendMessage(..) calling convention -** -** -** Notes: -** -** IDs 42000 to 45000 are reserved for gen_ff -** IDs from 45000 to 57000 are reserved for library -** -*/ - -#ifndef _WA_MSGIDS_H_ -#define _WA_MSGIDS_H_ - -#define WINAMP_FILE_QUIT 40001 -#define WINAMP_OPTIONS_PREFS 40012 // pops up the preferences -#define WINAMP_OPTIONS_AOT 40019 // toggles always on top -#define WINAMP_FILE_REPEAT 40022 -#define WINAMP_FILE_SHUFFLE 40023 -#define WINAMP_HIGH_PRIORITY 40025 -#define WINAMP_FILE_PLAY 40029 // pops up the load file(s) box -#define WINAMP_OPTIONS_EQ 40036 // toggles the EQ window -#define WINAMP_OPTIONS_ELAPSED 40037 -#define WINAMP_OPTIONS_REMAINING 40038 -#define WINAMP_OPTIONS_PLEDIT 40040 // toggles the playlist window -#define WINAMP_HELP_ABOUT 40041 // pops up the about box :) -#define WINAMP_MAINMENU 40043 - - -/* the following are the five main control buttons, with optionally shift -** or control pressed -** (for the exact functions of each, just try it out) -*/ -#define WINAMP_BUTTON1 40044 -#define WINAMP_BUTTON2 40045 -#define WINAMP_BUTTON3 40046 -#define WINAMP_BUTTON4 40047 -#define WINAMP_BUTTON5 40048 -#define WINAMP_BUTTON1_SHIFT 40144 -#define WINAMP_BUTTON2_SHIFT 40145 -#define WINAMP_BUTTON3_SHIFT 40146 -#define WINAMP_BUTTON4_SHIFT 40147 -#define WINAMP_BUTTON5_SHIFT 40148 -#define WINAMP_BUTTON1_CTRL 40154 -#define WINAMP_BUTTON2_CTRL 40155 -#define WINAMP_BUTTON3_CTRL 40156 -#define WINAMP_BUTTON4_CTRL 40157 -#define WINAMP_BUTTON5_CTRL 40158 - -#define WINAMP_VOLUMEUP 40058 // turns the volume up a little -#define WINAMP_VOLUMEDOWN 40059 // turns the volume down a little -#define WINAMP_FFWD5S 40060 // fast forwards 5 seconds -#define WINAMP_REW5S 40061 // rewinds 5 seconds -#define WINAMP_NEXT_WINDOW 40063 -#define WINAMP_OPTIONS_WINDOWSHADE 40064 -#define WINAMP_OPTIONS_DSIZE 40165 -#define IDC_SORT_FILENAME 40166 -#define IDC_SORT_FILETITLE 40167 -#define IDC_SORT_ENTIREFILENAME 40168 -#define IDC_SELECTALL 40169 -#define IDC_SELECTNONE 40170 -#define IDC_SELECTINV 40171 -#define IDM_EQ_LOADPRE 40172 -#define IDM_EQ_LOADMP3 40173 -#define IDM_EQ_LOADDEFAULT 40174 -#define IDM_EQ_SAVEPRE 40175 -#define IDM_EQ_SAVEMP3 40176 -#define IDM_EQ_SAVEDEFAULT 40177 -#define IDM_EQ_DELPRE 40178 -#define IDM_EQ_DELMP3 40180 -#define IDC_PLAYLIST_PLAY 40184 -#define WINAMP_FILE_LOC 40185 -#define WINAMP_OPTIONS_EASYMOVE 40186 -#define WINAMP_FILE_DIR 40187 // pops up the load directory box -#define WINAMP_EDIT_ID3 40188 -#define WINAMP_TOGGLE_AUTOSCROLL 40189 -#define WINAMP_VISSETUP 40190 -#define WINAMP_PLGSETUP 40191 -#define WINAMP_VISPLUGIN 40192 -#define WINAMP_JUMP 40193 -#define WINAMP_JUMPFILE 40194 -#define WINAMP_JUMP10FWD 40195 -#define WINAMP_JUMP10BACK 40197 -#define WINAMP_PREVSONG 40198 -#define WINAMP_OPTIONS_EXTRAHQ 40200 -#define ID_PE_NEW 40201 -#define ID_PE_OPEN 40202 -#define ID_PE_SAVE 40203 -#define ID_PE_SAVEAS 40204 -#define ID_PE_SELECTALL 40205 -#define ID_PE_INVERT 40206 -#define ID_PE_NONE 40207 -#define ID_PE_ID3 40208 -#define ID_PE_S_TITLE 40209 -#define ID_PE_S_FILENAME 40210 -#define ID_PE_S_PATH 40211 -#define ID_PE_S_RANDOM 40212 -#define ID_PE_S_REV 40213 -#define ID_PE_CLEAR 40214 -#define ID_PE_MOVEUP 40215 -#define ID_PE_MOVEDOWN 40216 -#define WINAMP_SELSKIN 40219 -#define WINAMP_VISCONF 40221 -#define ID_PE_NONEXIST 40222 -#define ID_PE_DELETEFROMDISK 40223 -#define ID_PE_CLOSE 40224 -#define WINAMP_VIS_SETOSC 40226 -#define WINAMP_VIS_SETANA 40227 -#define WINAMP_VIS_SETOFF 40228 -#define WINAMP_VIS_DOTSCOPE 40229 -#define WINAMP_VIS_LINESCOPE 40230 -#define WINAMP_VIS_SOLIDSCOPE 40231 -#define WINAMP_VIS_NORMANA 40233 -#define WINAMP_VIS_FIREANA 40234 -#define WINAMP_VIS_LINEANA 40235 -#define WINAMP_VIS_NORMVU 40236 -#define WINAMP_VIS_SMOOTHVU 40237 -#define WINAMP_VIS_FULLREF 40238 -#define WINAMP_VIS_FULLREF2 40239 -#define WINAMP_VIS_FULLREF3 40240 -#define WINAMP_VIS_FULLREF4 40241 -#define WINAMP_OPTIONS_TOGTIME 40242 -#define EQ_ENABLE 40244 -#define EQ_AUTO 40245 -#define EQ_PRESETS 40246 -#define WINAMP_VIS_FALLOFF0 40247 -#define WINAMP_VIS_FALLOFF1 40248 -#define WINAMP_VIS_FALLOFF2 40249 -#define WINAMP_VIS_FALLOFF3 40250 -#define WINAMP_VIS_FALLOFF4 40251 -#define WINAMP_VIS_PEAKS 40252 -#define ID_LOAD_EQF 40253 -#define ID_SAVE_EQF 40254 -#define ID_PE_ENTRY 40255 -#define ID_PE_SCROLLUP 40256 -#define ID_PE_SCROLLDOWN 40257 -#define WINAMP_MAIN_WINDOW 40258 -#define WINAMP_VIS_PFALLOFF0 40259 -#define WINAMP_VIS_PFALLOFF1 40260 -#define WINAMP_VIS_PFALLOFF2 40261 -#define WINAMP_VIS_PFALLOFF3 40262 -#define WINAMP_VIS_PFALLOFF4 40263 -#define ID_PE_TOP 40264 -#define ID_PE_BOTTOM 40265 -#define WINAMP_OPTIONS_WINDOWSHADE_PL 40266 -#define EQ_INC1 40267 -#define EQ_INC2 40268 -#define EQ_INC3 40269 -#define EQ_INC4 40270 -#define EQ_INC5 40271 -#define EQ_INC6 40272 -#define EQ_INC7 40273 -#define EQ_INC8 40274 -#define EQ_INC9 40275 -#define EQ_INC10 40276 -#define EQ_INCPRE 40277 -#define EQ_DECPRE 40278 -#define EQ_DEC1 40279 -#define EQ_DEC2 40280 -#define EQ_DEC3 40281 -#define EQ_DEC4 40282 -#define EQ_DEC5 40283 -#define EQ_DEC6 40284 -#define EQ_DEC7 40285 -#define EQ_DEC8 40286 -#define EQ_DEC9 40287 -#define EQ_DEC10 40288 -#define ID_PE_SCUP 40289 -#define ID_PE_SCDOWN 40290 -#define WINAMP_REFRESHSKIN 40291 -#define ID_PE_PRINT 40292 -#define ID_PE_EXTINFO 40293 -#define WINAMP_PLAYLIST_ADVANCE 40294 -#define WINAMP_VIS_LIN 40295 -#define WINAMP_VIS_BAR 40296 -#define WINAMP_OPTIONS_MINIBROWSER 40298 -#define MB_FWD 40299 -#define MB_BACK 40300 -#define MB_RELOAD 40301 -#define MB_OPENMENU 40302 -#define MB_OPENLOC 40303 -#define WINAMP_NEW_INSTANCE 40305 -#define MB_UPDATE 40309 -#define WINAMP_OPTIONS_WINDOWSHADE_EQ 40310 -#define EQ_PANLEFT 40313 -#define EQ_PANRIGHT 40314 -#define WINAMP_GETMORESKINS 40316 -#define WINAMP_VIS_OPTIONS 40317 -#define WINAMP_PE_SEARCH 40318 -#define ID_PE_BOOKMARK 40319 -#define WINAMP_EDIT_BOOKMARKS 40320 -#define WINAMP_MAKECURBOOKMARK 40321 -#define ID_MAIN_PLAY_BOOKMARK_NONE 40322 -#define ID_MAIN_PLAY_AUDIOCD 40323 // starts playing the audio CD in the first CD reader -#define ID_MAIN_PLAY_AUDIOCD2 40324 // plays the 2nd -#define ID_MAIN_PLAY_AUDIOCD3 40325 // plays the 3rd -#define ID_MAIN_PLAY_AUDIOCD4 40326 // plays the 4th -#define WINAMP_OPTIONS_VIDEO 40328 -#define ID_VIDEOWND_ZOOMFULLSCREEN 40329 -#define ID_VIDEOWND_ZOOM100 40330 -#define ID_VIDEOWND_ZOOM200 40331 -#define ID_VIDEOWND_ZOOM50 40332 -#define ID_VIDEOWND_VIDEOOPTIONS 40333 -#define WINAMP_MINIMIZE 40334 -#define ID_PE_FONTBIGGER 40335 -#define ID_PE_FONTSMALLER 40336 -#define WINAMP_VIDEO_TOGGLE_FS 40337 -#define WINAMP_VIDEO_TVBUTTON 40338 -#define WINAMP_LIGHTNING_CLICK 40339 -#define ID_FILE_ADDTOLIBRARY 40344 -#define ID_HELP_HELPTOPICS 40347 -#define ID_HELP_GETTINGSTARTED 40348 -#define ID_HELP_WINAMPFORUMS 40349 -#define ID_PLAY_VOLUMEUP 40351 -#define ID_PLAY_VOLUMEDOWN 40352 -#define ID_PEFILE_OPENPLAYLISTFROMLIBRARY_NOPLAYLISTSINLIBRARY 40355 -#define ID_PEFILE_ADDFROMLIBRARY 40356 -#define ID_PEFILE_CLOSEPLAYLISTEDITOR 40357 -#define ID_PEPLAYLIST_PLAYLISTPREFERENCES 40358 -#define ID_MLFILE_NEWPLAYLIST 40359 -#define ID_MLFILE_LOADPLAYLIST 40360 -#define ID_MLFILE_SAVEPLAYLIST 40361 -#define ID_MLFILE_ADDMEDIATOLIBRARY 40362 -#define ID_MLFILE_CLOSEMEDIALIBRARY 40363 -#define ID_MLVIEW_NOWPLAYING 40364 -#define ID_MLVIEW_LOCALMEDIA_ALLMEDIA 40366 -#define ID_MLVIEW_LOCALMEDIA_AUDIO 40367 -#define ID_MLVIEW_LOCALMEDIA_VIDEO 40368 -#define ID_MLVIEW_PLAYLISTS_NOPLAYLISTINLIBRARY 40369 -#define ID_MLVIEW_INTERNETRADIO 40370 -#define ID_MLVIEW_INTERNETTV 40371 -#define ID_MLVIEW_LIBRARYPREFERENCES 40372 -#define ID_MLVIEW_DEVICES_NOAVAILABLEDEVICE 40373 -#define ID_MLFILE_IMPORTCURRENTPLAYLIST 40374 -#define ID_MLVIEW_MEDIA 40376 -#define ID_MLVIEW_PLAYLISTS 40377 -#define ID_MLVIEW_MEDIA_ALLMEDIA 40377 -#define ID_MLVIEW_DEVICES 40378 -#define ID_FILE_SHOWLIBRARY 40379 -#define ID_FILE_CLOSELIBRARY 40380 -#define ID_POST_PLAY_PLAYLIST 40381 -#define ID_VIS_NEXT 40382 -#define ID_VIS_PREV 40383 -#define ID_VIS_RANDOM 40384 -#define ID_MANAGEPLAYLISTS 40385 -#define ID_PREFS_SKIN_SWITCHTOSKIN 40386 -#define ID_PREFS_SKIN_DELETESKIN 40387 -#define ID_PREFS_SKIN_RENAMESKIN 40388 -#define ID_VIS_FS 40389 -#define ID_VIS_CFG 40390 -#define ID_VIS_MENU 40391 -#define ID_VIS_SET_FS_FLAG 40392 -#define ID_PE_SHOWPLAYING 40393 -#define ID_HELP_REGISTERWINAMPPRO 40394 -#define ID_PE_MANUAL_ADVANCE 40395 -#define WA_SONG_5_STAR_RATING 40396 -#define WA_SONG_4_STAR_RATING 40397 -#define WA_SONG_3_STAR_RATING 40398 -#define WA_SONG_2_STAR_RATING 40399 -#define WA_SONG_1_STAR_RATING 40400 -#define WA_SONG_NO_RATING 40401 -#define PL_SONG_5_STAR_RATING 40402 -#define PL_SONG_4_STAR_RATING 40403 -#define PL_SONG_3_STAR_RATING 40404 -#define PL_SONG_2_STAR_RATING 40405 -#define PL_SONG_1_STAR_RATING 40406 -#define PL_SONG_NO_RATING 40407 -#define AUDIO_TRACK_ONE 40408 -#define VIDEO_TRACK_ONE 40424 - -#define ID_SWITCH_COLOURTHEME 44500 -#define ID_GENFF_LIMIT 45000 - -#endif diff --git a/Externals/MusicMod/Player/Src/Winmain.cpp b/Externals/MusicMod/Player/Src/Winmain.cpp deleted file mode 100644 index bf9362a991..0000000000 --- a/Externals/MusicMod/Player/Src/Winmain.cpp +++ /dev/null @@ -1,236 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp, Open source Winamp core -// -// Copyright İ 2005 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#include "Global.h" -#include "Font.h" -#include "InputPlugin.h" -#include "OutputPlugin.h" -#include "VisPlugin.h" -#include "DspPlugin.h" -#include "GenPlugin.h" -#include "Main.h" -#include "Rebar.h" -#include "Playlist.h" -#include "Status.h" -#include "PluginManager.h" -#include "Prefs.h" -#include "Config.h" - -#include "Emabox/Emabox.h" - - - -#define PLUS_ALT ( FVIRTKEY | FALT ) -#define PLUS_CONTROL ( FVIRTKEY | FCONTROL ) -#define PLUS_CONTROL_ALT ( FVIRTKEY | FCONTROL | FALT ) -#define PLUS_CONTROL_SHIFT ( FVIRTKEY | FCONTROL | FSHIFT ) -#define PLUS_SHIFT ( FVIRTKEY | FSHIFT ) - - - -HINSTANCE g_hInstance = NULL; // extern - -TCHAR * szHomeDir = NULL; // extern -int iHomeDirLen = 0; // extern - -TCHAR * szPluginDir = NULL; // extern -int iPluginDirLen = 0; // extern - - - -TCHAR szCurDir[ MAX_PATH + 1 ] = TEXT( "" ); -ConfCurDir ccdCurDir( szCurDir, TEXT( "CurDir" ) ); - - -bool bWarnPluginsMissing; -ConfBool cbWarnPluginsMissing( &bWarnPluginsMissing, TEXT( "WarnPluginsMissing" ), CONF_MODE_PUBLIC, true ); - - - -//////////////////////////////////////////////////////////////////////////////// -/// -//////////////////////////////////////////////////////////////////////////////// -int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow ) -{ - g_hInstance = hInstance; - - - // Load full config - Conf::Init( hInstance ); - - - // Get home dir - szHomeDir = new TCHAR[ MAX_PATH + 1 ]; - iHomeDirLen = GetModuleFileName( NULL, szHomeDir, MAX_PATH ); - if( !iHomeDirLen ) return 1; - - TCHAR * walk = szHomeDir + iHomeDirLen - 1; - while( ( walk > szHomeDir ) && ( *walk != TEXT( '\\' ) ) ) walk--; - walk++; - *walk = TEXT( '\0' ); - iHomeDirLen = walk - szHomeDir; - - - // Get plugins dir - szPluginDir = new TCHAR[ MAX_PATH + 1 ]; - memcpy( szPluginDir, szHomeDir, iHomeDirLen * sizeof( TCHAR ) ); - memcpy( szPluginDir + iHomeDirLen, TEXT( "Plugins" ), 7 * sizeof( TCHAR ) ); - szPluginDir[ iHomeDirLen + 7 ] = TEXT( '\0' ); - - - Font::Create(); - BuildMainWindow(); - Prefs::Create(); - - - // Show window - ShowWindow( WindowMain, SW_SHOW ); - SetForegroundWindow( WindowMain ); - SetFocus( WindowMain ); - - Plugin::FindAll ( szPluginDir, TEXT( "in_*.dll" ), true ); - Plugin::FindAll( szPluginDir, TEXT( "out_*.dll" ), false ); - Plugin::FindAll ( szPluginDir, TEXT( "vis_*.dll" ), false ); - Plugin::FindAll ( szPluginDir, TEXT( "dsp_*.dll" ), false ); - Plugin::FindAll ( szPluginDir, TEXT( "gen_*.dll" ), true ); - - PluginManager::Fill(); - - - // Check plugin presence - // One msgbox maximum - if( bWarnPluginsMissing ) - { - - - if( input_plugins.empty() ) - { - // No input plugins - TCHAR szBuffer[ 5000 ]; - _stprintf( - szBuffer, - TEXT( - "No input plugins were found.\n" - "\n" - "Please install at least one Winamp input plugin to \n" - "%s " - ), - szPluginDir - ); - - int iNeverAgain = bWarnPluginsMissing ? 0 : 1; - EmaBox( 0, szBuffer, TEXT( "Input plugins missing" ), MB_ICONEXCLAMATION | MB_CHECKNEVERAGAIN, &iNeverAgain ); - bWarnPluginsMissing = ( iNeverAgain == 0 ); - } - else if( output_plugins.empty() ) - { - // No output plugins - TCHAR szBuffer[ 5000 ]; - _stprintf( - szBuffer, - TEXT( - "No output plugins were found.\n" - "\n" - "Please install at least one Winamp output plugin to \n" - "%s " - ), - szPluginDir - ); - - int iNeverAgain = bWarnPluginsMissing ? 0 : 1; - EmaBox( 0, szBuffer, TEXT( "Output plugins missing" ), MB_ICONEXCLAMATION | MB_CHECKNEVERAGAIN, &iNeverAgain ); - bWarnPluginsMissing = ( iNeverAgain == 0 ); - } - } - - - // Todo: all the rest... - ACCEL accels[] = { - { PLUS_CONTROL, 'A', ID_PE_SELECTALL }, // [Ctrl] + [A] - { PLUS_CONTROL, 'I', ID_PE_INVERT }, // [Ctrl] + [I] - { PLUS_CONTROL, 'N', ID_PE_NEW }, // [Ctrl] + [N] - { PLUS_CONTROL, 'O', ID_PE_OPEN }, // [Ctrl] + [O] - { PLUS_CONTROL, 'P', WINAMP_OPTIONS_PREFS }, // [Ctrl] + [P] - { PLUS_CONTROL, 'S', ID_PE_SAVEAS }, // [Ctrl] + [S] - { PLUS_CONTROL, VK_F1, WINAMP_HELP_ABOUT }, // [Ctrl] + [F1] - { PLUS_CONTROL_SHIFT, 'A', ID_PE_NONE }, // [Ctrl] + [Shift] + [A] - { PLUS_CONTROL_SHIFT, VK_DELETE, ID_PE_CLEAR }, // [Ctrl] + [Shift] + [Del] - { PLUS_ALT, 'F', WINAMP_MAINMENU }, // [Alt] + [F] - { PLUS_ALT, VK_F4, WINAMP_FILE_QUIT } // [Alt] + [F4] - }; - - - HACCEL hAccel = CreateAcceleratorTable( accels, sizeof( accels ) / sizeof( ACCEL ) ); - if( !hAccel ) - { - MessageBox( 0, TEXT( "Accelerator table error" ), TEXT( "" ), 0 ); - } - - // Message loop - MSG msg; - while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) - { - // Note: Keys without [Alt] or [Ctrl] not everywhere! - if( ( ( msg.hwnd == WindowMain ) || IsChild( WindowMain, msg.hwnd ) ) && - TranslateAccelerator( WindowMain, hAccel, &msg ) ) - { - // MessageBox( 0, TEXT( "Trans" ), TEXT( "" ), 0 ); - } - - TranslateMessage( &msg ); - DispatchMessage( &msg ); - } - - DestroyAcceleratorTable( hAccel ); - - - // Input - vector ::iterator iter_input = input_plugins.begin(); - while( iter_input != input_plugins.end() ) - { - ( *iter_input )->Unload(); - iter_input++; - } - - // Output - vector ::iterator iter_output = output_plugins.begin(); - while( iter_output != output_plugins.end() ) - { - ( *iter_output )->Unload(); - iter_output++; - } - - // General - vector ::iterator iter_gen = gen_plugins.begin(); - while( iter_gen != gen_plugins.end() ) - { - ( *iter_gen )->Unload(); - iter_gen++; - } - - - // TODO: create main::destroy - // UnregisterClass( PA_CLASSNAME, g_hInstance ); - - Prefs::Destroy(); - - Font::Destroy(); - -/* - delete [] szPluginDir; - delete [] szHomeDir; -*/ - - Conf::Write(); - - return 0; -} diff --git a/Externals/MusicMod/Player/Src/afxres.h b/Externals/MusicMod/Player/Src/afxres.h deleted file mode 100644 index 7eb4900177..0000000000 --- a/Externals/MusicMod/Player/Src/afxres.h +++ /dev/null @@ -1,823 +0,0 @@ -// This is a part of the Microsoft Foundation Classes C++ library. -// Copyright (C) Microsoft Corporation -// All rights reserved. -// -// This source code is only intended as a supplement to the -// Microsoft Foundation Classes Reference and related -// electronic documentation provided with the library. -// See these sources for detailed information regarding the -// Microsoft Foundation Classes product. - -#ifndef __AFXRES_H__ -#define __AFXRES_H__ - -#ifdef RC_INVOKED -#ifndef _INC_WINDOWS -#define _INC_WINDOWS - #include "winres.h" // extract from windows header -#endif -#endif - -#ifdef _AFX_MINREBUILD -#pragma component(minrebuild, off) -#endif - -#ifdef RC_INVOKED - #if defined(_VC80_UPGRADE) && (_VC80_UPGRADE >= 0x0700) && (_VC80_UPGRADE < 0x0800) && defined(IDR_MANIFEST) - // Handle project upgrade from VC7/VC7.1 for projects with manifest - #define IDR_MANIFEST 1024 - #endif -#endif // RC_INVOKED - -#ifdef APSTUDIO_INVOKED -#define APSTUDIO_HIDDEN_SYMBOLS -#endif - -///////////////////////////////////////////////////////////////////////////// -// MFC resource types (see Technical note TN024 for implementation details) - -#ifndef RC_INVOKED -#define RT_DLGINIT MAKEINTRESOURCE(240) -#define RT_TOOLBAR MAKEINTRESOURCE(241) -#endif - -///////////////////////////////////////////////////////////////////////////// - -#ifdef APSTUDIO_INVOKED -#undef APSTUDIO_HIDDEN_SYMBOLS -#endif - -///////////////////////////////////////////////////////////////////////////// -// General style bits etc - -// ControlBar styles -#define CBRS_ALIGN_LEFT 0x1000L -#define CBRS_ALIGN_TOP 0x2000L -#define CBRS_ALIGN_RIGHT 0x4000L -#define CBRS_ALIGN_BOTTOM 0x8000L -#define CBRS_ALIGN_ANY 0xF000L - -#define CBRS_BORDER_LEFT 0x0100L -#define CBRS_BORDER_TOP 0x0200L -#define CBRS_BORDER_RIGHT 0x0400L -#define CBRS_BORDER_BOTTOM 0x0800L -#define CBRS_BORDER_ANY 0x0F00L - -#define CBRS_TOOLTIPS 0x0010L -#define CBRS_FLYBY 0x0020L -#define CBRS_FLOAT_MULTI 0x0040L -#define CBRS_BORDER_3D 0x0080L -#define CBRS_HIDE_INPLACE 0x0008L -#define CBRS_SIZE_DYNAMIC 0x0004L -#define CBRS_SIZE_FIXED 0x0002L -#define CBRS_FLOATING 0x0001L - -#define CBRS_GRIPPER 0x00400000L - -#define CBRS_ORIENT_HORZ (CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM) -#define CBRS_ORIENT_VERT (CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT) -#define CBRS_ORIENT_ANY (CBRS_ORIENT_HORZ|CBRS_ORIENT_VERT) - -#define CBRS_ALL 0x0040FFFFL - -// the CBRS_ style is made up of an alignment style and a draw border style -// the alignment styles are mutually exclusive -// the draw border styles may be combined -#define CBRS_NOALIGN 0x00000000L -#define CBRS_LEFT (CBRS_ALIGN_LEFT|CBRS_BORDER_RIGHT) -#define CBRS_TOP (CBRS_ALIGN_TOP|CBRS_BORDER_BOTTOM) -#define CBRS_RIGHT (CBRS_ALIGN_RIGHT|CBRS_BORDER_LEFT) -#define CBRS_BOTTOM (CBRS_ALIGN_BOTTOM|CBRS_BORDER_TOP) - -///////////////////////////////////////////////////////////////////////////// -// Manifest Resource ID of manifest containing Localized DLL information -#define ID_MFCLOC_MANIFEST 1000 - -///////////////////////////////////////////////////////////////////////////// -// Standard window components - -// Mode indicators in status bar - these are routed like commands -#define ID_INDICATOR_EXT 0xE700 // extended selection indicator -#define ID_INDICATOR_CAPS 0xE701 // cap lock indicator -#define ID_INDICATOR_NUM 0xE702 // num lock indicator -#define ID_INDICATOR_SCRL 0xE703 // scroll lock indicator -#define ID_INDICATOR_OVR 0xE704 // overtype mode indicator -#define ID_INDICATOR_REC 0xE705 // record mode indicator -#define ID_INDICATOR_KANA 0xE706 // kana lock indicator - -#define ID_SEPARATOR 0 // special separator value - -#ifndef RC_INVOKED // code only -// Standard control bars (IDW = window ID) -#define AFX_IDW_CONTROLBAR_FIRST 0xE800 -#define AFX_IDW_CONTROLBAR_LAST 0xE8FF - -#define AFX_IDW_TOOLBAR 0xE800 // main Toolbar for window -#define AFX_IDW_STATUS_BAR 0xE801 // Status bar window -#define AFX_IDW_PREVIEW_BAR 0xE802 // PrintPreview Dialog Bar -#define AFX_IDW_RESIZE_BAR 0xE803 // OLE in-place resize bar -#define AFX_IDW_REBAR 0xE804 // COMCTL32 "rebar" Bar -#define AFX_IDW_DIALOGBAR 0xE805 // CDialogBar - -// Note: If your application supports docking toolbars, you should -// not use the following IDs for your own toolbars. The IDs chosen -// are at the top of the first 32 such that the bars will be hidden -// while in print preview mode, and are not likely to conflict with -// IDs your application may have used succesfully in the past. - -#define AFX_IDW_DOCKBAR_TOP 0xE81B -#define AFX_IDW_DOCKBAR_LEFT 0xE81C -#define AFX_IDW_DOCKBAR_RIGHT 0xE81D -#define AFX_IDW_DOCKBAR_BOTTOM 0xE81E -#define AFX_IDW_DOCKBAR_FLOAT 0xE81F - -// Macro for mapping standard control bars to bitmask (limit of 32) -#define AFX_CONTROLBAR_MASK(nIDC) (1L << (nIDC - AFX_IDW_CONTROLBAR_FIRST)) - -// parts of Main Frame -#define AFX_IDW_PANE_FIRST 0xE900 // first pane (256 max) -#define AFX_IDW_PANE_LAST 0xE9ff -#define AFX_IDW_HSCROLL_FIRST 0xEA00 // first Horz scrollbar (16 max) -#define AFX_IDW_VSCROLL_FIRST 0xEA10 // first Vert scrollbar (16 max) - -#define AFX_IDW_SIZE_BOX 0xEA20 // size box for splitters -#define AFX_IDW_PANE_SAVE 0xEA21 // to shift AFX_IDW_PANE_FIRST -#endif //!RC_INVOKED - -#ifndef APSTUDIO_INVOKED - -// common style for form views -#define AFX_WS_DEFAULT_VIEW (WS_CHILD | WS_VISIBLE | WS_BORDER) - -#endif //!APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// -// Standard app configurable strings - -// for application title (defaults to EXE name or name in constructor) -#define AFX_IDS_APP_TITLE 0xE000 -// idle message bar line -#define AFX_IDS_IDLEMESSAGE 0xE001 -// message bar line when in shift-F1 help mode -#define AFX_IDS_HELPMODEMESSAGE 0xE002 -// document title when editing OLE embedding -#define AFX_IDS_APP_TITLE_EMBEDDING 0xE003 -// company name -#define AFX_IDS_COMPANY_NAME 0xE004 -// object name when server is inplace -#define AFX_IDS_OBJ_TITLE_INPLACE 0xE005 - -///////////////////////////////////////////////////////////////////////////// -// Standard Commands - -// File commands -#define ID_FILE_NEW 0xE100 -#define ID_FILE_OPEN 0xE101 -#define ID_FILE_CLOSE 0xE102 -#define ID_FILE_SAVE 0xE103 -#define ID_FILE_SAVE_AS 0xE104 -#define ID_FILE_PAGE_SETUP 0xE105 -#define ID_FILE_PRINT_SETUP 0xE106 -#define ID_FILE_PRINT 0xE107 -#define ID_FILE_PRINT_DIRECT 0xE108 -#define ID_FILE_PRINT_PREVIEW 0xE109 -#define ID_FILE_UPDATE 0xE10A -#define ID_FILE_SAVE_COPY_AS 0xE10B -#define ID_FILE_SEND_MAIL 0xE10C -#define ID_FILE_NEW_FRAME 0xE10D - -#define ID_FILE_MRU_FIRST 0xE110 -#define ID_FILE_MRU_FILE1 0xE110 // range - 16 max -#define ID_FILE_MRU_FILE2 0xE111 -#define ID_FILE_MRU_FILE3 0xE112 -#define ID_FILE_MRU_FILE4 0xE113 -#define ID_FILE_MRU_FILE5 0xE114 -#define ID_FILE_MRU_FILE6 0xE115 -#define ID_FILE_MRU_FILE7 0xE116 -#define ID_FILE_MRU_FILE8 0xE117 -#define ID_FILE_MRU_FILE9 0xE118 -#define ID_FILE_MRU_FILE10 0xE119 -#define ID_FILE_MRU_FILE11 0xE11A -#define ID_FILE_MRU_FILE12 0xE11B -#define ID_FILE_MRU_FILE13 0xE11C -#define ID_FILE_MRU_FILE14 0xE11D -#define ID_FILE_MRU_FILE15 0xE11E -#define ID_FILE_MRU_FILE16 0xE11F -#define ID_FILE_MRU_LAST 0xE11F - -// Edit commands -#define ID_EDIT_CLEAR 0xE120 -#define ID_EDIT_CLEAR_ALL 0xE121 -#define ID_EDIT_COPY 0xE122 -#define ID_EDIT_CUT 0xE123 -#define ID_EDIT_FIND 0xE124 -#define ID_EDIT_PASTE 0xE125 -#define ID_EDIT_PASTE_LINK 0xE126 -#define ID_EDIT_PASTE_SPECIAL 0xE127 -#define ID_EDIT_REPEAT 0xE128 -#define ID_EDIT_REPLACE 0xE129 -#define ID_EDIT_SELECT_ALL 0xE12A -#define ID_EDIT_UNDO 0xE12B -#define ID_EDIT_REDO 0xE12C - -// Window commands -#define ID_WINDOW_NEW 0xE130 -#define ID_WINDOW_ARRANGE 0xE131 -#define ID_WINDOW_CASCADE 0xE132 -#define ID_WINDOW_TILE_HORZ 0xE133 -#define ID_WINDOW_TILE_VERT 0xE134 -#define ID_WINDOW_SPLIT 0xE135 -#ifndef RC_INVOKED // code only -#define AFX_IDM_WINDOW_FIRST 0xE130 -#define AFX_IDM_WINDOW_LAST 0xE13F -#define AFX_IDM_FIRST_MDICHILD 0xFF00 // window list starts here -#endif //!RC_INVOKED - -// Help and App commands -#define ID_APP_ABOUT 0xE140 -#define ID_APP_EXIT 0xE141 -#define ID_HELP_INDEX 0xE142 -#define ID_HELP_FINDER 0xE143 -#define ID_HELP_USING 0xE144 -#define ID_CONTEXT_HELP 0xE145 // shift-F1 -// special commands for processing help -#define ID_HELP 0xE146 // first attempt for F1 -#define ID_DEFAULT_HELP 0xE147 // last attempt - -// Misc -#define ID_NEXT_PANE 0xE150 -#define ID_PREV_PANE 0xE151 - -// Format -#define ID_FORMAT_FONT 0xE160 - -// OLE commands -#define ID_OLE_INSERT_NEW 0xE200 -#define ID_OLE_EDIT_LINKS 0xE201 -#define ID_OLE_EDIT_CONVERT 0xE202 -#define ID_OLE_EDIT_CHANGE_ICON 0xE203 -#define ID_OLE_EDIT_PROPERTIES 0xE204 -#define ID_OLE_VERB_FIRST 0xE210 // range - 16 max -#ifndef RC_INVOKED // code only -#define ID_OLE_VERB_LAST 0xE21F -#endif //!RC_INVOKED - -// for print preview dialog bar -#define AFX_ID_PREVIEW_CLOSE 0xE300 -#define AFX_ID_PREVIEW_NUMPAGE 0xE301 // One/Two Page button -#define AFX_ID_PREVIEW_NEXT 0xE302 -#define AFX_ID_PREVIEW_PREV 0xE303 -#define AFX_ID_PREVIEW_PRINT 0xE304 -#define AFX_ID_PREVIEW_ZOOMIN 0xE305 -#define AFX_ID_PREVIEW_ZOOMOUT 0xE306 - -// View commands (same number used as IDW used for control bar) -#define ID_VIEW_TOOLBAR 0xE800 -#define ID_VIEW_STATUS_BAR 0xE801 -#define ID_VIEW_REBAR 0xE804 -#define ID_VIEW_AUTOARRANGE 0xE805 - // E810 -> E81F must be kept in order for RANGE macros -#define ID_VIEW_SMALLICON 0xE810 -#define ID_VIEW_LARGEICON 0xE811 -#define ID_VIEW_LIST 0xE812 -#define ID_VIEW_DETAILS 0xE813 -#define ID_VIEW_LINEUP 0xE814 -#define ID_VIEW_BYNAME 0xE815 -#define AFX_ID_VIEW_MINIMUM ID_VIEW_SMALLICON -#define AFX_ID_VIEW_MAXIMUM ID_VIEW_BYNAME - // E800 -> E8FF reserved for other control bar commands - -// RecordForm commands -#define ID_RECORD_FIRST 0xE900 -#define ID_RECORD_LAST 0xE901 -#define ID_RECORD_NEXT 0xE902 -#define ID_RECORD_PREV 0xE903 - -///////////////////////////////////////////////////////////////////////////// -// Standard control IDs - -#ifdef IDC_STATIC -#undef IDC_STATIC -#endif -#define IDC_STATIC (-1) // all static controls - -///////////////////////////////////////////////////////////////////////////// -// Standard string error/warnings - -#ifndef RC_INVOKED // code only -#define AFX_IDS_SCFIRST 0xEF00 -#endif //!RC_INVOKED - -#define AFX_IDS_SCSIZE 0xEF00 -#define AFX_IDS_SCMOVE 0xEF01 -#define AFX_IDS_SCMINIMIZE 0xEF02 -#define AFX_IDS_SCMAXIMIZE 0xEF03 -#define AFX_IDS_SCNEXTWINDOW 0xEF04 -#define AFX_IDS_SCPREVWINDOW 0xEF05 -#define AFX_IDS_SCCLOSE 0xEF06 -#define AFX_IDS_SCRESTORE 0xEF12 -#define AFX_IDS_SCTASKLIST 0xEF13 - -#define AFX_IDS_MDICHILD 0xEF1F - -#define AFX_IDS_DESKACCESSORY 0xEFDA - -// General strings -#define AFX_IDS_OPENFILE 0xF000 -#define AFX_IDS_SAVEFILE 0xF001 -#define AFX_IDS_ALLFILTER 0xF002 -#define AFX_IDS_UNTITLED 0xF003 -#define AFX_IDS_SAVEFILECOPY 0xF004 -#define AFX_IDS_PREVIEW_CLOSE 0xF005 -#define AFX_IDS_UNNAMED_FILE 0xF006 -#define AFX_IDS_HIDE 0xF011 - -// MFC Standard Exception Error messages -#define AFX_IDP_NO_ERROR_AVAILABLE 0xF020 -#define AFX_IDS_NOT_SUPPORTED_EXCEPTION 0xF021 -#define AFX_IDS_RESOURCE_EXCEPTION 0xF022 -#define AFX_IDS_MEMORY_EXCEPTION 0xF023 -#define AFX_IDS_USER_EXCEPTION 0xF024 -#define AFX_IDS_INVALID_ARG_EXCEPTION 0xF025 - -// Printing and print preview strings -#define AFX_IDS_PRINTONPORT 0xF040 -#define AFX_IDS_ONEPAGE 0xF041 -#define AFX_IDS_TWOPAGE 0xF042 -#define AFX_IDS_PRINTPAGENUM 0xF043 -#define AFX_IDS_PREVIEWPAGEDESC 0xF044 -#define AFX_IDS_PRINTDEFAULTEXT 0xF045 -#define AFX_IDS_PRINTDEFAULT 0xF046 -#define AFX_IDS_PRINTFILTER 0xF047 -#define AFX_IDS_PRINTCAPTION 0xF048 -#define AFX_IDS_PRINTTOFILE 0xF049 - - -// OLE strings -#define AFX_IDS_OBJECT_MENUITEM 0xF080 -#define AFX_IDS_EDIT_VERB 0xF081 -#define AFX_IDS_ACTIVATE_VERB 0xF082 -#define AFX_IDS_CHANGE_LINK 0xF083 -#define AFX_IDS_AUTO 0xF084 -#define AFX_IDS_MANUAL 0xF085 -#define AFX_IDS_FROZEN 0xF086 -#define AFX_IDS_ALL_FILES 0xF087 -// dynamically changing menu items -#define AFX_IDS_SAVE_MENU 0xF088 -#define AFX_IDS_UPDATE_MENU 0xF089 -#define AFX_IDS_SAVE_AS_MENU 0xF08A -#define AFX_IDS_SAVE_COPY_AS_MENU 0xF08B -#define AFX_IDS_EXIT_MENU 0xF08C -#define AFX_IDS_UPDATING_ITEMS 0xF08D -// COlePasteSpecialDialog defines -#define AFX_IDS_METAFILE_FORMAT 0xF08E -#define AFX_IDS_DIB_FORMAT 0xF08F -#define AFX_IDS_BITMAP_FORMAT 0xF090 -#define AFX_IDS_LINKSOURCE_FORMAT 0xF091 -#define AFX_IDS_EMBED_FORMAT 0xF092 -// other OLE utility strings -#define AFX_IDS_PASTELINKEDTYPE 0xF094 -#define AFX_IDS_UNKNOWNTYPE 0xF095 -#define AFX_IDS_RTF_FORMAT 0xF096 -#define AFX_IDS_TEXT_FORMAT 0xF097 -// OLE datatype format error strings -#define AFX_IDS_INVALID_CURRENCY 0xF098 -#define AFX_IDS_INVALID_DATETIME 0xF099 -#define AFX_IDS_INVALID_DATETIMESPAN 0xF09A - -// General error / prompt strings -#define AFX_IDP_INVALID_FILENAME 0xF100 -#define AFX_IDP_FAILED_TO_OPEN_DOC 0xF101 -#define AFX_IDP_FAILED_TO_SAVE_DOC 0xF102 -#define AFX_IDP_ASK_TO_SAVE 0xF103 -#define AFX_IDP_FAILED_TO_CREATE_DOC 0xF104 -#define AFX_IDP_FILE_TOO_LARGE 0xF105 -#define AFX_IDP_FAILED_TO_START_PRINT 0xF106 -#define AFX_IDP_FAILED_TO_LAUNCH_HELP 0xF107 -#define AFX_IDP_INTERNAL_FAILURE 0xF108 // general failure -#define AFX_IDP_COMMAND_FAILURE 0xF109 // command failure -#define AFX_IDP_FAILED_MEMORY_ALLOC 0xF10A -#define AFX_IDP_UNREG_DONE 0xF10B -#define AFX_IDP_UNREG_FAILURE 0xF10C -#define AFX_IDP_DLL_LOAD_FAILED 0xF10D -#define AFX_IDP_DLL_BAD_VERSION 0xF10E - -// DDV parse errors -#define AFX_IDP_PARSE_INT 0xF110 -#define AFX_IDP_PARSE_REAL 0xF111 -#define AFX_IDP_PARSE_INT_RANGE 0xF112 -#define AFX_IDP_PARSE_REAL_RANGE 0xF113 -#define AFX_IDP_PARSE_STRING_SIZE 0xF114 -#define AFX_IDP_PARSE_RADIO_BUTTON 0xF115 -#define AFX_IDP_PARSE_BYTE 0xF116 -#define AFX_IDP_PARSE_UINT 0xF117 -#define AFX_IDP_PARSE_DATETIME 0xF118 -#define AFX_IDP_PARSE_CURRENCY 0xF119 -#define AFX_IDP_PARSE_GUID 0xF11A -#define AFX_IDP_PARSE_TIME 0xF11B -#define AFX_IDP_PARSE_DATE 0xF11C - -// CFile/CArchive error strings for user failure -#define AFX_IDP_FAILED_INVALID_FORMAT 0xF120 -#define AFX_IDP_FAILED_INVALID_PATH 0xF121 -#define AFX_IDP_FAILED_DISK_FULL 0xF122 -#define AFX_IDP_FAILED_ACCESS_READ 0xF123 -#define AFX_IDP_FAILED_ACCESS_WRITE 0xF124 -#define AFX_IDP_FAILED_IO_ERROR_READ 0xF125 -#define AFX_IDP_FAILED_IO_ERROR_WRITE 0xF126 - -// Script errors / prompt strings -#define AFX_IDP_SCRIPT_ERROR 0xF130 -#define AFX_IDP_SCRIPT_DISPATCH_EXCEPTION 0xF131 - -// OLE errors / prompt strings -#define AFX_IDP_STATIC_OBJECT 0xF180 -#define AFX_IDP_FAILED_TO_CONNECT 0xF181 -#define AFX_IDP_SERVER_BUSY 0xF182 -#define AFX_IDP_BAD_VERB 0xF183 -#define AFX_IDS_NOT_DOCOBJECT 0xF184 -#define AFX_IDP_FAILED_TO_NOTIFY 0xF185 -#define AFX_IDP_FAILED_TO_LAUNCH 0xF186 -#define AFX_IDP_ASK_TO_UPDATE 0xF187 -#define AFX_IDP_FAILED_TO_UPDATE 0xF188 -#define AFX_IDP_FAILED_TO_REGISTER 0xF189 -#define AFX_IDP_FAILED_TO_AUTO_REGISTER 0xF18A -#define AFX_IDP_FAILED_TO_CONVERT 0xF18B -#define AFX_IDP_GET_NOT_SUPPORTED 0xF18C -#define AFX_IDP_SET_NOT_SUPPORTED 0xF18D -#define AFX_IDP_ASK_TO_DISCARD 0xF18E -#define AFX_IDP_FAILED_TO_CREATE 0xF18F - -// MAPI errors / prompt strings -#define AFX_IDP_FAILED_MAPI_LOAD 0xF190 -#define AFX_IDP_INVALID_MAPI_DLL 0xF191 -#define AFX_IDP_FAILED_MAPI_SEND 0xF192 - -#define AFX_IDP_FILE_NONE 0xF1A0 -#define AFX_IDP_FILE_GENERIC 0xF1A1 -#define AFX_IDP_FILE_NOT_FOUND 0xF1A2 -#define AFX_IDP_FILE_BAD_PATH 0xF1A3 -#define AFX_IDP_FILE_TOO_MANY_OPEN 0xF1A4 -#define AFX_IDP_FILE_ACCESS_DENIED 0xF1A5 -#define AFX_IDP_FILE_INVALID_FILE 0xF1A6 -#define AFX_IDP_FILE_REMOVE_CURRENT 0xF1A7 -#define AFX_IDP_FILE_DIR_FULL 0xF1A8 -#define AFX_IDP_FILE_BAD_SEEK 0xF1A9 -#define AFX_IDP_FILE_HARD_IO 0xF1AA -#define AFX_IDP_FILE_SHARING 0xF1AB -#define AFX_IDP_FILE_LOCKING 0xF1AC -#define AFX_IDP_FILE_DISKFULL 0xF1AD -#define AFX_IDP_FILE_EOF 0xF1AE - -#define AFX_IDP_ARCH_NONE 0xF1B0 -#define AFX_IDP_ARCH_GENERIC 0xF1B1 -#define AFX_IDP_ARCH_READONLY 0xF1B2 -#define AFX_IDP_ARCH_ENDOFFILE 0xF1B3 -#define AFX_IDP_ARCH_WRITEONLY 0xF1B4 -#define AFX_IDP_ARCH_BADINDEX 0xF1B5 -#define AFX_IDP_ARCH_BADCLASS 0xF1B6 -#define AFX_IDP_ARCH_BADSCHEMA 0xF1B7 - -#define AFX_IDS_OCC_SCALEUNITS_PIXELS 0xF1C0 - -// 0xf200-0xf20f reserved - -// font names and point sizes -#define AFX_IDS_STATUS_FONT 0xF230 -#define AFX_IDS_TOOLTIP_FONT 0xF231 -#define AFX_IDS_UNICODE_FONT 0xF232 -#define AFX_IDS_MINI_FONT 0xF233 - -// ODBC Database errors / prompt strings -#ifndef RC_INVOKED // code only -#define AFX_IDP_SQL_FIRST 0xF280 -#endif //!RC_INVOKED -#define AFX_IDP_SQL_CONNECT_FAIL 0xF281 -#define AFX_IDP_SQL_RECORDSET_FORWARD_ONLY 0xF282 -#define AFX_IDP_SQL_EMPTY_COLUMN_LIST 0xF283 -#define AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH 0xF284 -#define AFX_IDP_SQL_ILLEGAL_MODE 0xF285 -#define AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED 0xF286 -#define AFX_IDP_SQL_NO_CURRENT_RECORD 0xF287 -#define AFX_IDP_SQL_NO_ROWS_AFFECTED 0xF288 -#define AFX_IDP_SQL_RECORDSET_READONLY 0xF289 -#define AFX_IDP_SQL_SQL_NO_TOTAL 0xF28A -#define AFX_IDP_SQL_ODBC_LOAD_FAILED 0xF28B -#define AFX_IDP_SQL_DYNASET_NOT_SUPPORTED 0xF28C -#define AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED 0xF28D -#define AFX_IDP_SQL_API_CONFORMANCE 0xF28E -#define AFX_IDP_SQL_SQL_CONFORMANCE 0xF28F -#define AFX_IDP_SQL_NO_DATA_FOUND 0xF290 -#define AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED 0xF291 -#define AFX_IDP_SQL_ODBC_V2_REQUIRED 0xF292 -#define AFX_IDP_SQL_NO_POSITIONED_UPDATES 0xF293 -#define AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED 0xF294 -#define AFX_IDP_SQL_DATA_TRUNCATED 0xF295 -#define AFX_IDP_SQL_ROW_FETCH 0xF296 -#define AFX_IDP_SQL_INCORRECT_ODBC 0xF297 -#define AFX_IDP_SQL_UPDATE_DELETE_FAILED 0xF298 -#define AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED 0xF299 -#define AFX_IDP_SQL_FIELD_NOT_FOUND 0xF29A -#define AFX_IDP_SQL_BOOKMARKS_NOT_SUPPORTED 0xF29B -#define AFX_IDP_SQL_BOOKMARKS_NOT_ENABLED 0xF29C - -// ODBC Database strings -#define AFX_IDS_DELETED 0xF29D - -// DAO Database errors / prompt strings -#ifndef RC_INVOKED // code only -#define AFX_IDP_DAO_FIRST 0xF2B0 -#endif //!RC_INVOKED -#define AFX_IDP_DAO_ENGINE_INITIALIZATION 0xF2B0 -#define AFX_IDP_DAO_DFX_BIND 0xF2B1 -#define AFX_IDP_DAO_OBJECT_NOT_OPEN 0xF2B2 - -// ICDAORecordset::GetRows Errors -// These are not placed in DAO Errors collection -// and must be handled directly by MFC. -#define AFX_IDP_DAO_ROWTOOSHORT 0xF2B3 -#define AFX_IDP_DAO_BADBINDINFO 0xF2B4 -#define AFX_IDP_DAO_COLUMNUNAVAILABLE 0xF2B5 - -///////////////////////////////////////////////////////////////////////////// -// Strings for ISAPI support - -#define AFX_IDS_HTTP_TITLE 0xF2D1 -#define AFX_IDS_HTTP_NO_TEXT 0xF2D2 -#define AFX_IDS_HTTP_BAD_REQUEST 0xF2D3 -#define AFX_IDS_HTTP_AUTH_REQUIRED 0xF2D4 -#define AFX_IDS_HTTP_FORBIDDEN 0xF2D5 -#define AFX_IDS_HTTP_NOT_FOUND 0xF2D6 -#define AFX_IDS_HTTP_SERVER_ERROR 0xF2D7 -#define AFX_IDS_HTTP_NOT_IMPLEMENTED 0xF2D8 - -///////////////////////////////////////////////////////////////////////////// -// Strings for Accessibility support for CCheckListBox -#define AFX_IDS_CHECKLISTBOX_UNCHECK 0xF2E1 -#define AFX_IDS_CHECKLISTBOX_CHECK 0xF2E2 -#define AFX_IDS_CHECKLISTBOX_MIXED 0xF2E3 - -///////////////////////////////////////////////////////////////////////////// -// AFX implementation - control IDs (AFX_IDC) - -// Parts of dialogs -#define AFX_IDC_LISTBOX 100 -#define AFX_IDC_CHANGE 101 -#define AFX_IDC_BROWSER 102 - -// for print dialog -#define AFX_IDC_PRINT_DOCNAME 201 -#define AFX_IDC_PRINT_PRINTERNAME 202 -#define AFX_IDC_PRINT_PORTNAME 203 -#define AFX_IDC_PRINT_PAGENUM 204 - -// Property Sheet control id's (determined with Spy++) -#define ID_APPLY_NOW 0x3021 -#define ID_WIZBACK 0x3023 -#define ID_WIZNEXT 0x3024 -#define ID_WIZFINISH 0x3025 -#define AFX_IDC_TAB_CONTROL 0x3020 - -///////////////////////////////////////////////////////////////////////////// -// IDRs for standard components - -#ifndef RC_INVOKED // code only -// These are really COMMDLG dialogs, so there usually isn't a resource -// for them, but these IDs are used as help IDs. -#define AFX_IDD_FILEOPEN 28676 -#define AFX_IDD_FILESAVE 28677 -#define AFX_IDD_FONT 28678 -#define AFX_IDD_COLOR 28679 -#define AFX_IDD_PRINT 28680 -#define AFX_IDD_PRINTSETUP 28681 -#define AFX_IDD_FIND 28682 -#define AFX_IDD_REPLACE 28683 -#endif //!RC_INVOKED - -// Standard dialogs app should leave alone (0x7801->) -#define AFX_IDD_NEWTYPEDLG 30721 -#define AFX_IDD_PRINTDLG 30722 -#define AFX_IDD_PREVIEW_TOOLBAR 30723 - -// Dialogs defined for OLE2UI library -#define AFX_IDD_INSERTOBJECT 30724 -#define AFX_IDD_CHANGEICON 30725 -#define AFX_IDD_CONVERT 30726 -#define AFX_IDD_PASTESPECIAL 30727 -#define AFX_IDD_EDITLINKS 30728 -#define AFX_IDD_FILEBROWSE 30729 -#define AFX_IDD_BUSY 30730 - -#define AFX_IDD_OBJECTPROPERTIES 30732 -#define AFX_IDD_CHANGESOURCE 30733 - -//WinForms -#define AFX_IDD_EMPTYDIALOG 30734 - -// Standard cursors (0x7901->) - // AFX_IDC = Cursor resources -#define AFX_IDC_CONTEXTHELP 30977 // context sensitive help -#define AFX_IDC_MAGNIFY 30978 // print preview zoom -#define AFX_IDC_SMALLARROWS 30979 // splitter -#define AFX_IDC_HSPLITBAR 30980 // splitter -#define AFX_IDC_VSPLITBAR 30981 // splitter -#define AFX_IDC_NODROPCRSR 30982 // No Drop Cursor -#define AFX_IDC_TRACKNWSE 30983 // tracker -#define AFX_IDC_TRACKNESW 30984 // tracker -#define AFX_IDC_TRACKNS 30985 // tracker -#define AFX_IDC_TRACKWE 30986 // tracker -#define AFX_IDC_TRACK4WAY 30987 // tracker -#define AFX_IDC_MOVE4WAY 30988 // resize bar (server only) - -// Wheel mouse cursors -// NOTE: values must be in this order! See CScrollView::OnTimer() -#define AFX_IDC_MOUSE_PAN_NW 30998 // pan east -#define AFX_IDC_MOUSE_PAN_N 30999 // pan northeast -#define AFX_IDC_MOUSE_PAN_NE 31000 // pan north -#define AFX_IDC_MOUSE_PAN_W 31001 // pan northwest -#define AFX_IDC_MOUSE_PAN_HV 31002 // pan both axis -#define AFX_IDC_MOUSE_PAN_E 31003 // pan west -#define AFX_IDC_MOUSE_PAN_SW 31004 // pan south-west -#define AFX_IDC_MOUSE_PAN_S 31005 // pan south -#define AFX_IDC_MOUSE_PAN_SE 31006 // pan south-east -#define AFX_IDC_MOUSE_PAN_HORZ 31007 // pan X-axis -#define AFX_IDC_MOUSE_PAN_VERT 31008 // pan Y-axis - -// Wheel mouse bitmaps -#define AFX_IDC_MOUSE_ORG_HORZ 31009 // anchor for horz only -#define AFX_IDC_MOUSE_ORG_VERT 31010 // anchor for vert only -#define AFX_IDC_MOUSE_ORG_HV 31011 // anchor for horz/vert -#define AFX_IDC_MOUSE_MASK 31012 - -// Mini frame window bitmap ID -#define AFX_IDB_MINIFRAME_MENU 30994 - -// CheckListBox checks bitmap ID -#define AFX_IDB_CHECKLISTBOX_95 30996 - -// AFX standard accelerator resources -#define AFX_IDR_PREVIEW_ACCEL 30997 - -// AFX standard ICON IDs (for MFC V1 apps) (0x7A01->) -#define AFX_IDI_STD_MDIFRAME 31233 -#define AFX_IDI_STD_FRAME 31234 - -///////////////////////////////////////////////////////////////////////////// -// AFX OLE control implementation - control IDs (AFX_IDC) - -// Font property page -#define AFX_IDC_FONTPROP 1000 -#define AFX_IDC_FONTNAMES 1001 -#define AFX_IDC_FONTSTYLES 1002 -#define AFX_IDC_FONTSIZES 1003 -#define AFX_IDC_STRIKEOUT 1004 -#define AFX_IDC_UNDERLINE 1005 -#define AFX_IDC_SAMPLEBOX 1006 - -// Color property page -#define AFX_IDC_COLOR_BLACK 1100 -#define AFX_IDC_COLOR_WHITE 1101 -#define AFX_IDC_COLOR_RED 1102 -#define AFX_IDC_COLOR_GREEN 1103 -#define AFX_IDC_COLOR_BLUE 1104 -#define AFX_IDC_COLOR_YELLOW 1105 -#define AFX_IDC_COLOR_MAGENTA 1106 -#define AFX_IDC_COLOR_CYAN 1107 -#define AFX_IDC_COLOR_GRAY 1108 -#define AFX_IDC_COLOR_LIGHTGRAY 1109 -#define AFX_IDC_COLOR_DARKRED 1110 -#define AFX_IDC_COLOR_DARKGREEN 1111 -#define AFX_IDC_COLOR_DARKBLUE 1112 -#define AFX_IDC_COLOR_LIGHTBROWN 1113 -#define AFX_IDC_COLOR_DARKMAGENTA 1114 -#define AFX_IDC_COLOR_DARKCYAN 1115 -#define AFX_IDC_COLORPROP 1116 -#define AFX_IDC_SYSTEMCOLORS 1117 - -// Picture porperty page -#define AFX_IDC_PROPNAME 1201 -#define AFX_IDC_PICTURE 1202 -#define AFX_IDC_BROWSE 1203 -#define AFX_IDC_CLEAR 1204 - -///////////////////////////////////////////////////////////////////////////// -// IDRs for OLE control standard components - -// Standard propery page dialogs app should leave alone (0x7E01->) -#define AFX_IDD_PROPPAGE_COLOR 32257 -#define AFX_IDD_PROPPAGE_FONT 32258 -#define AFX_IDD_PROPPAGE_PICTURE 32259 - -#define AFX_IDB_TRUETYPE 32384 - -///////////////////////////////////////////////////////////////////////////// -// Standard OLE control strings - -// OLE Control page strings -#define AFX_IDS_PROPPAGE_UNKNOWN 0xFE01 -#define AFX_IDS_COLOR_DESKTOP 0xFE04 -#define AFX_IDS_COLOR_APPWORKSPACE 0xFE05 -#define AFX_IDS_COLOR_WNDBACKGND 0xFE06 -#define AFX_IDS_COLOR_WNDTEXT 0xFE07 -#define AFX_IDS_COLOR_MENUBAR 0xFE08 -#define AFX_IDS_COLOR_MENUTEXT 0xFE09 -#define AFX_IDS_COLOR_ACTIVEBAR 0xFE0A -#define AFX_IDS_COLOR_INACTIVEBAR 0xFE0B -#define AFX_IDS_COLOR_ACTIVETEXT 0xFE0C -#define AFX_IDS_COLOR_INACTIVETEXT 0xFE0D -#define AFX_IDS_COLOR_ACTIVEBORDER 0xFE0E -#define AFX_IDS_COLOR_INACTIVEBORDER 0xFE0F -#define AFX_IDS_COLOR_WNDFRAME 0xFE10 -#define AFX_IDS_COLOR_SCROLLBARS 0xFE11 -#define AFX_IDS_COLOR_BTNFACE 0xFE12 -#define AFX_IDS_COLOR_BTNSHADOW 0xFE13 -#define AFX_IDS_COLOR_BTNTEXT 0xFE14 -#define AFX_IDS_COLOR_BTNHIGHLIGHT 0xFE15 -#define AFX_IDS_COLOR_DISABLEDTEXT 0xFE16 -#define AFX_IDS_COLOR_HIGHLIGHT 0xFE17 -#define AFX_IDS_COLOR_HIGHLIGHTTEXT 0xFE18 -#define AFX_IDS_REGULAR 0xFE19 -#define AFX_IDS_BOLD 0xFE1A -#define AFX_IDS_ITALIC 0xFE1B -#define AFX_IDS_BOLDITALIC 0xFE1C -#define AFX_IDS_SAMPLETEXT 0xFE1D -#define AFX_IDS_DISPLAYSTRING_FONT 0xFE1E -#define AFX_IDS_DISPLAYSTRING_COLOR 0xFE1F -#define AFX_IDS_DISPLAYSTRING_PICTURE 0xFE20 -#define AFX_IDS_PICTUREFILTER 0xFE21 -#define AFX_IDS_PICTYPE_UNKNOWN 0xFE22 -#define AFX_IDS_PICTYPE_NONE 0xFE23 -#define AFX_IDS_PICTYPE_BITMAP 0xFE24 -#define AFX_IDS_PICTYPE_METAFILE 0xFE25 -#define AFX_IDS_PICTYPE_ICON 0xFE26 -#define AFX_IDS_COLOR_PPG 0xFE28 -#define AFX_IDS_COLOR_PPG_CAPTION 0xFE29 -#define AFX_IDS_FONT_PPG 0xFE2A -#define AFX_IDS_FONT_PPG_CAPTION 0xFE2B -#define AFX_IDS_PICTURE_PPG 0xFE2C -#define AFX_IDS_PICTURE_PPG_CAPTION 0xFE2D -#define AFX_IDS_PICTUREBROWSETITLE 0xFE30 -#define AFX_IDS_BORDERSTYLE_0 0xFE31 -#define AFX_IDS_BORDERSTYLE_1 0xFE32 - -// OLE Control verb names -#define AFX_IDS_VERB_EDIT 0xFE40 -#define AFX_IDS_VERB_PROPERTIES 0xFE41 - -// OLE Control internal error messages -#define AFX_IDP_PICTURECANTOPEN 0xFE83 -#define AFX_IDP_PICTURECANTLOAD 0xFE84 -#define AFX_IDP_PICTURETOOLARGE 0xFE85 -#define AFX_IDP_PICTUREREADFAILED 0xFE86 - -// Standard OLE Control error strings -#define AFX_IDP_E_ILLEGALFUNCTIONCALL 0xFEA0 -#define AFX_IDP_E_OVERFLOW 0xFEA1 -#define AFX_IDP_E_OUTOFMEMORY 0xFEA2 -#define AFX_IDP_E_DIVISIONBYZERO 0xFEA3 -#define AFX_IDP_E_OUTOFSTRINGSPACE 0xFEA4 -#define AFX_IDP_E_OUTOFSTACKSPACE 0xFEA5 -#define AFX_IDP_E_BADFILENAMEORNUMBER 0xFEA6 -#define AFX_IDP_E_FILENOTFOUND 0xFEA7 -#define AFX_IDP_E_BADFILEMODE 0xFEA8 -#define AFX_IDP_E_FILEALREADYOPEN 0xFEA9 -#define AFX_IDP_E_DEVICEIOERROR 0xFEAA -#define AFX_IDP_E_FILEALREADYEXISTS 0xFEAB -#define AFX_IDP_E_BADRECORDLENGTH 0xFEAC -#define AFX_IDP_E_DISKFULL 0xFEAD -#define AFX_IDP_E_BADRECORDNUMBER 0xFEAE -#define AFX_IDP_E_BADFILENAME 0xFEAF -#define AFX_IDP_E_TOOMANYFILES 0xFEB0 -#define AFX_IDP_E_DEVICEUNAVAILABLE 0xFEB1 -#define AFX_IDP_E_PERMISSIONDENIED 0xFEB2 -#define AFX_IDP_E_DISKNOTREADY 0xFEB3 -#define AFX_IDP_E_PATHFILEACCESSERROR 0xFEB4 -#define AFX_IDP_E_PATHNOTFOUND 0xFEB5 -#define AFX_IDP_E_INVALIDPATTERNSTRING 0xFEB6 -#define AFX_IDP_E_INVALIDUSEOFNULL 0xFEB7 -#define AFX_IDP_E_INVALIDFILEFORMAT 0xFEB8 -#define AFX_IDP_E_INVALIDPROPERTYVALUE 0xFEB9 -#define AFX_IDP_E_INVALIDPROPERTYARRAYINDEX 0xFEBA -#define AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME 0xFEBB -#define AFX_IDP_E_SETNOTSUPPORTED 0xFEBC -#define AFX_IDP_E_NEEDPROPERTYARRAYINDEX 0xFEBD -#define AFX_IDP_E_SETNOTPERMITTED 0xFEBE -#define AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME 0xFEBF -#define AFX_IDP_E_GETNOTSUPPORTED 0xFEC0 -#define AFX_IDP_E_PROPERTYNOTFOUND 0xFEC1 -#define AFX_IDP_E_INVALIDCLIPBOARDFORMAT 0xFEC2 -#define AFX_IDP_E_INVALIDPICTURE 0xFEC3 -#define AFX_IDP_E_PRINTERERROR 0xFEC4 -#define AFX_IDP_E_CANTSAVEFILETOTEMP 0xFEC5 -#define AFX_IDP_E_SEARCHTEXTNOTFOUND 0xFEC6 -#define AFX_IDP_E_REPLACEMENTSTOOLONG 0xFEC7 - -///////////////////////////////////////////////////////////////////////////// - -#ifdef _AFX_MINREBUILD -#pragma component(minrebuild, on) -#endif - -#endif //__AFXRES_H__ - -///////////////////////////////////////////////////////////////////////////// diff --git a/Externals/MusicMod/Player/Src/fftw3/fftw3.h b/Externals/MusicMod/Player/Src/fftw3/fftw3.h deleted file mode 100644 index 64e445d30d..0000000000 --- a/Externals/MusicMod/Player/Src/fftw3/fftw3.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (c) 2003 Matteo Frigo - * Copyright (c) 2003 Massachusetts Institute of Technology - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -/* header file for fftw3 */ -/* $Id: fftw3.h,v 1.1 2005/10/28 19:01:21 hartwork Exp $ */ - -#ifndef FFTW3_H -#define FFTW3_H - -#if defined(__ICC) || defined(_MSC_VER) -#pragma comment ( lib, "fftw3" ) -#endif - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* If is included, use the C99 complex type. Otherwise - define a type bit-compatible with C99 complex */ -#ifdef _Complex_I -# define FFTW_DEFINE_COMPLEX(R, C) typedef R _Complex C -#else -# define FFTW_DEFINE_COMPLEX(R, C) typedef R C[2] -#endif - -#define FFTW_CONCAT(prefix, name) prefix ## name -#define FFTW_MANGLE_DOUBLE(name) FFTW_CONCAT(fftw_, name) -#define FFTW_MANGLE_FLOAT(name) FFTW_CONCAT(fftwf_, name) -#define FFTW_MANGLE_LONG_DOUBLE(name) FFTW_CONCAT(fftwl_, name) - - -enum fftw_r2r_kind_do_not_use_me { - FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2, - FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6, - FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10 -}; - -struct fftw_iodim_do_not_use_me { - int n; /* dimension size */ - int is; /* input stride */ - int os; /* output stride */ -}; - -/* - huge second-order macro that defines prototypes for all API - functions. We expand this macro for each supported precision - - X: name-mangling macro - R: real data type - C: complex data type -*/ - -#define FFTW_DEFINE_API(X, R, C) \ - \ -FFTW_DEFINE_COMPLEX(R, C); \ - \ -typedef struct X(plan_s) *X(plan); \ - \ -typedef struct fftw_iodim_do_not_use_me X(iodim); \ - \ -typedef enum fftw_r2r_kind_do_not_use_me X(r2r_kind); \ - \ -void X(execute)(const X(plan) p); \ - \ -X(plan) X(plan_dft)(int rank, const int *n, \ - C *in, C *out, int sign, unsigned flags); \ - \ -X(plan) X(plan_dft_1d)(int n, C *in, C *out, int sign, \ - unsigned flags); \ -X(plan) X(plan_dft_2d)(int nx, int ny, \ - C *in, C *out, int sign, unsigned flags); \ -X(plan) X(plan_dft_3d)(int nx, int ny, int nz, \ - C *in, C *out, int sign, unsigned flags); \ - \ -X(plan) X(plan_many_dft)(int rank, const int *n, \ - int howmany, \ - C *in, const int *inembed, \ - int istride, int idist, \ - C *out, const int *onembed, \ - int ostride, int odist, \ - int sign, unsigned flags); \ - \ -X(plan) X(plan_guru_dft)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - C *in, C *out, \ - int sign, unsigned flags); \ -X(plan) X(plan_guru_split_dft)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - R *ri, R *ii, R *ro, R *io, \ - unsigned flags); \ - \ -void X(execute_dft)(const X(plan) p, C *in, C *out); \ -void X(execute_split_dft)(const X(plan) p, R *ri, R *ii, R *ro, R *io); \ - \ -X(plan) X(plan_many_dft_r2c)(int rank, const int *n, \ - int howmany, \ - R *in, const int *inembed, \ - int istride, int idist, \ - C *out, const int *onembed, \ - int ostride, int odist, \ - unsigned flags); \ - \ -X(plan) X(plan_dft_r2c)(int rank, const int *n, \ - R *in, C *out, unsigned flags); \ - \ -X(plan) X(plan_dft_r2c_1d)(int n,R *in,C *out,unsigned flags); \ -X(plan) X(plan_dft_r2c_2d)(int nx, int ny, \ - R *in, C *out, unsigned flags); \ -X(plan) X(plan_dft_r2c_3d)(int nx, int ny, \ - int nz, \ - R *in, C *out, unsigned flags); \ - \ - \ -X(plan) X(plan_many_dft_c2r)(int rank, const int *n, \ - int howmany, \ - C *in, const int *inembed, \ - int istride, int idist, \ - R *out, const int *onembed, \ - int ostride, int odist, \ - unsigned flags); \ - \ -X(plan) X(plan_dft_c2r)(int rank, const int *n, \ - C *in, R *out, unsigned flags); \ - \ -X(plan) X(plan_dft_c2r_1d)(int n,C *in,R *out,unsigned flags); \ -X(plan) X(plan_dft_c2r_2d)(int nx, int ny, \ - C *in, R *out, unsigned flags); \ -X(plan) X(plan_dft_c2r_3d)(int nx, int ny, \ - int nz, \ - C *in, R *out, unsigned flags); \ - \ -X(plan) X(plan_guru_dft_r2c)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - R *in, C *out, \ - unsigned flags); \ -X(plan) X(plan_guru_dft_c2r)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - C *in, R *out, \ - unsigned flags); \ - \ -X(plan) X(plan_guru_split_dft_r2c)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - R *in, R *ro, R *io, \ - unsigned flags); \ -X(plan) X(plan_guru_split_dft_c2r)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - R *ri, R *ii, R *out, \ - unsigned flags); \ - \ -void X(execute_dft_r2c)(const X(plan) p, R *in, C *out); \ -void X(execute_dft_c2r)(const X(plan) p, C *in, R *out); \ - \ -void X(execute_split_dft_r2c)(const X(plan) p, R *in, R *ro, R *io); \ -void X(execute_split_dft_c2r)(const X(plan) p, R *ri, R *ii, R *out); \ - \ -X(plan) X(plan_many_r2r)(int rank, const int *n, \ - int howmany, \ - R *in, const int *inembed, \ - int istride, int idist, \ - R *out, const int *onembed, \ - int ostride, int odist, \ - const X(r2r_kind) *kind, unsigned flags); \ - \ -X(plan) X(plan_r2r)(int rank, const int *n, R *in, R *out, \ - const X(r2r_kind) *kind, unsigned flags); \ - \ -X(plan) X(plan_r2r_1d)(int n, R *in, R *out, \ - X(r2r_kind) kind, unsigned flags); \ -X(plan) X(plan_r2r_2d)(int nx, int ny, R *in, R *out, \ - X(r2r_kind) kindx, X(r2r_kind) kindy, \ - unsigned flags); \ -X(plan) X(plan_r2r_3d)(int nx, int ny, int nz, \ - R *in, R *out, X(r2r_kind) kindx, \ - X(r2r_kind) kindy, X(r2r_kind) kindz, \ - unsigned flags); \ - \ -X(plan) X(plan_guru_r2r)(int rank, const X(iodim) *dims, \ - int howmany_rank, \ - const X(iodim) *howmany_dims, \ - R *in, R *out, \ - const X(r2r_kind) *kind, unsigned flags); \ -void X(execute_r2r)(const X(plan) p, R *in, R *out); \ - \ -void X(destroy_plan)(X(plan) p); \ -void X(forget_wisdom)(void); \ -void X(cleanup)(void); \ - \ -void X(plan_with_nthreads)(int nthreads); \ -int X(init_threads)(void); \ -void X(cleanup_threads)(void); \ - \ -void X(export_wisdom_to_file)(FILE *output_file); \ -char *X(export_wisdom_to_string)(void); \ -void X(export_wisdom)(void (*write_char)(char c, void *), void *data); \ -int X(import_system_wisdom)(void); \ -int X(import_wisdom_from_file)(FILE *input_file); \ -int X(import_wisdom_from_string)(const char *input_string); \ -int X(import_wisdom)(int (*read_char)(void *), void *data); \ - \ -void X(fprint_plan)(const X(plan) p, FILE *output_file); \ -void X(print_plan)(const X(plan) p); \ - \ -void *X(malloc)(size_t n); \ -void X(free)(void *p); \ - \ -void X(flops)(const X(plan) p, double *add, double *mul, double *fma); \ - \ -extern const char X(version)[]; \ -extern const char X(cc)[]; \ -extern const char X(codelet_optim)[]; - - -/* end of FFTW_DEFINE_API macro */ - -FFTW_DEFINE_API(FFTW_MANGLE_DOUBLE, double, fftw_complex) -FFTW_DEFINE_API(FFTW_MANGLE_FLOAT, float, fftwf_complex) -FFTW_DEFINE_API(FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex) - -#define FFTW_FORWARD (-1) -#define FFTW_BACKWARD (+1) - -/* documented flags */ -#define FFTW_MEASURE (0U) -#define FFTW_DESTROY_INPUT (1U << 0) -#define FFTW_UNALIGNED (1U << 1) -#define FFTW_CONSERVE_MEMORY (1U << 2) -#define FFTW_EXHAUSTIVE (1U << 3) /* NO_EXHAUSTIVE is default */ -#define FFTW_PRESERVE_INPUT (1U << 4) /* cancels FFTW_DESTROY_INPUT */ -#define FFTW_PATIENT (1U << 5) /* IMPATIENT is default */ -#define FFTW_ESTIMATE (1U << 6) - -/* undocumented beyond-guru flags */ -#define FFTW_ESTIMATE_PATIENT (1U << 7) -#define FFTW_BELIEVE_PCOST (1U << 8) -#define FFTW_DFT_R2HC_ICKY (1U << 9) -#define FFTW_NONTHREADED_ICKY (1U << 10) -#define FFTW_NO_BUFFERING (1U << 11) -#define FFTW_NO_INDIRECT_OP (1U << 12) -#define FFTW_ALLOW_LARGE_GENERIC (1U << 13) /* NO_LARGE_GENERIC is default */ -#define FFTW_NO_RANK_SPLITS (1U << 14) -#define FFTW_NO_VRANK_SPLITS (1U << 15) -#define FFTW_NO_VRECURSE (1U << 16) - -#define FFTW_NO_SIMD (1U << 17) - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* __cplusplus */ - -#endif /* FFTW3_H */ diff --git a/Externals/MusicMod/Player/Src/vis_plainbar/vis_plainbar.cpp b/Externals/MusicMod/Player/Src/vis_plainbar/vis_plainbar.cpp deleted file mode 100644 index 276065e516..0000000000 --- a/Externals/MusicMod/Player/Src/vis_plainbar/vis_plainbar.cpp +++ /dev/null @@ -1,259 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Plainamp Toolbar Vis Plugin -// -// Copyright İ 2006 Sebastian Pipping -// -// --> http://www.hartwork.org -// -// This source code is released under the GNU General Public License (GPL). -// See GPL.txt for details. Any non-GPL usage is strictly forbidden. -//////////////////////////////////////////////////////////////////////////////// - - -#define WIN32_LEAN_AND_MEAN -#include - - -#include "../Winamp/vis.h" -#include "../Winamp/wa_ipc.h" - - - -#define PLUGIN_NAME "Plainamp Toolbar Vis Plugin" -#define PLUGIN_VERSION "v0.5" - -#define PLUGIN_DESC PLUGIN_NAME " " PLUGIN_VERSION - - - -static char * szClassName = "PlainbarClass"; - - - -winampVisModule * getModule( int which ); - - -void config( struct winampVisModule * this_mod ); -int init( struct winampVisModule * this_mod ); -int render_spec( struct winampVisModule * this_mod ); -void quit( struct winampVisModule * this_mod ); - - -// Double buffering data -HDC memDC = NULL; // Memory device context -HBITMAP memBM = NULL; // Memory bitmap (for memDC) -HBITMAP oldBM = NULL; // Old bitmap (from memDC) - - -HWND hRender = NULL; -int width = 0; -int height = 0; -bool bRunning = false; -HPEN pen = NULL; - - -WNDPROC WndprocTargetBackup = NULL; -LRESULT CALLBACK WndprocTarget( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ); - - - -winampVisHeader hdr = { - VIS_HDRVER, - PLUGIN_DESC, - getModule -}; - - - -winampVisModule mod_spec = -{ - "Default", - NULL, // hwndParent - NULL, // hDllInstance - 0, // sRate - 0, // nCh - 25, // latencyMS - 25, // delayMS - 2, // spectrumNch - 0, // waveformNch - { 0, }, // spectrumData - { 0, }, // waveformData - config, - init, - render_spec, - quit -}; - - - -#ifdef __cplusplus -extern "C" { -#endif -__declspec( dllexport ) winampVisHeader * winampVisGetHeader() -{ - return &hdr; -} -#ifdef __cplusplus -} -#endif - - - -winampVisModule * getModule( int which ) -{ - return which ? NULL : &mod_spec; -} - - - -void config( struct winampVisModule * this_mod ) -{ - MessageBox( - this_mod->hwndParent, - PLUGIN_DESC "\n" - "\n" - "Copyright İ 2006 Sebastian Pipping \n" - "\n" - "\n" - "--> http://www.hartwork.org", - "About", - MB_ICONINFORMATION - ); -} - - - -LRESULT CALLBACK WndprocTarget( HWND hwnd, UINT message, WPARAM wp, LPARAM lp ) -{ - switch( message ) - { - case WM_SIZE: - width = LOWORD( lp ); - height = HIWORD( lp ); - break; - - case WM_DESTROY: - bRunning = false; - PostQuitMessage( 0 ); - return 0; - - } - - return DefWindowProc( hwnd, message, wp, lp ); -} - - - -int init( struct winampVisModule * this_mod ) -{ - if( !this_mod ) return 1; - - // Register message - const int IPC_GETPLAINBARTARGET = ( int )SendMessage( this_mod->hwndParent, WM_WA_IPC, ( WPARAM )"IPC_GETPLAINBARTARGET", IPC_REGISTER_WINAMP_IPCMESSAGE ); - if( IPC_GETPLAINBARTARGET <= 0 ) return 1; - - // Get render parent - HWND hRenderParent = ( HWND )SendMessage( this_mod->hwndParent, WM_WA_IPC, 0, IPC_GETPLAINBARTARGET ); - if( !IsWindow( hRenderParent ) ) return 1; - - // Plug our child in - WNDCLASS wc; - ZeroMemory( &wc, sizeof( WNDCLASS ) ); - wc.lpfnWndProc = WndprocTarget; - wc.hInstance = this_mod->hDllInstance; - wc.hCursor = LoadCursor( NULL, IDC_ARROW ); - wc.lpszClassName = szClassName; - - if( !RegisterClass( &wc ) ) return 1; - - RECT r; - GetClientRect( hRenderParent, &r ); - width = r.right - r.left; - height = r.bottom - r.top; - - hRender = CreateWindowEx( - 0, - szClassName, - "", - WS_CHILD | WS_VISIBLE, - 0, - 0, - width, - height, - hRenderParent, - NULL, - this_mod->hDllInstance, - 0 - ); - - if( !hRender ) - { - UnregisterClass( szClassName, this_mod->hDllInstance ); - return 1; - } - - // Create doublebuffer - const HDC hdc = GetDC( hRender ); - memDC = CreateCompatibleDC( hdc ); - memBM = CreateCompatibleBitmap( hdc, 576, 256 ); - oldBM = ( HBITMAP )SelectObject( memDC, memBM ); - ReleaseDC( hRender, hdc ); - - pen = CreatePen( PS_SOLID, 0, GetSysColor( COLOR_APPWORKSPACE ) ); - - bRunning = true; - return 0; -} - - - -int render_spec( struct winampVisModule * this_mod ) -{ - // Clear background - RECT rect = { 0, 0, 576, 256 }; - FillRect(memDC, &rect, ( HBRUSH )( COLOR_3DFACE + 1 ) ); - - // Draw analyser - SelectObject( memDC, pen ); - for( int x = 0; x < 576; x++ ) - { - int val = 0; - - for( int y = 0; y < this_mod->nCh; y++ ) - { - if( this_mod->spectrumData[ y ][ x ] > val ) - { - val = this_mod->spectrumData[ y ][ x ]; - } - } - - MoveToEx( memDC, x, 256, NULL ); - LineTo( memDC, x, 256 - val ); - } - - // Copy doublebuffer to window - HDC hdc = GetDC( hRender ); - StretchBlt( hdc, 0, 0, width, height, memDC, 0, 0, 576, 256, SRCCOPY ); - ReleaseDC( hRender, hdc ); - - return bRunning ? 0 : 1; -} - - - -void quit( struct winampVisModule * this_mod ) -{ - if( bRunning ) - { - DestroyWindow( hRender ); - } - - UnregisterClass( szClassName, this_mod->hDllInstance ); - - // Delete doublebuffer - SelectObject( memDC, oldBM ); - DeleteObject( memDC ); - DeleteObject( memBM ); - - DeleteObject( pen ); -} diff --git a/Externals/MusicMod/Player/Src/zlib/zconf.h b/Externals/MusicMod/Player/Src/zlib/zconf.h deleted file mode 100644 index db9ff5e7e3..0000000000 --- a/Externals/MusicMod/Player/Src/zlib/zconf.h +++ /dev/null @@ -1,332 +0,0 @@ -/* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* @(#) $Id: zconf.h,v 1.1 2005/10/10 21:08:30 hartwork Exp $ */ - -#ifndef ZCONF_H -#define ZCONF_H - -/* - * If you *really* need a unique prefix for all types and library functions, - * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. - */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ -# define deflate z_deflate -# define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd -# define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset -# define deflateParams z_deflateParams -# define deflateBound z_deflateBound -# define deflatePrime z_deflatePrime -# define inflateInit2_ z_inflateInit2_ -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound -# define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table -# define zError z_zError - -# define alloc_func z_alloc_func -# define free_func z_free_func -# define in_func z_in_func -# define out_func z_out_func -# define Byte z_Byte -# define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf -# define uIntf z_uIntf -# define uLongf z_uLongf -# define voidpf z_voidpf -# define voidp z_voidp -#endif - -#if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS -#endif -#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) -# define OS2 -#endif -#if defined(_WINDOWS) && !defined(WINDOWS) -# define WINDOWS -#endif -#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) -# ifndef WIN32 -# define WIN32 -# endif -#endif -#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) -# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) -# ifndef SYS16BIT -# define SYS16BIT -# endif -# endif -#endif - -/* - * Compile with -DMAXSEG_64K if the alloc function cannot allocate more - * than 64k bytes at a time (needed on systems with 16-bit int). - */ -#ifdef SYS16BIT -# define MAXSEG_64K -#endif -#ifdef MSDOS -# define UNALIGNED_OK -#endif - -#ifdef __STDC_VERSION__ -# ifndef STDC -# define STDC -# endif -# if __STDC_VERSION__ >= 199901L -# ifndef STDC99 -# define STDC99 -# endif -# endif -#endif -#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) -# define STDC -#endif -#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) -# define STDC -#endif -#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) -# define STDC -#endif -#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) -# define STDC -#endif - -#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ -# define STDC -#endif - -#ifndef STDC -# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ -# define const /* note: need a more gentle solution here */ -# endif -#endif - -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) -# define NO_DUMMY_DECL -#endif - -/* Maximum value for memLevel in deflateInit2 */ -#ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif -#endif - -/* Maximum value for windowBits in deflateInit2 and inflateInit2. - * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files - * created by gzip. (Files created by minigzip can still be extracted by - * gzip.) - */ -#ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ -#endif - -/* The memory requirements for deflate are (in bytes): - (1 << (windowBits+2)) + (1 << (memLevel+9)) - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) - plus a few kilobytes for small objects. For example, if you want to reduce - the default memory requirements from 256K to 128K, compile with - make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" - Of course this will generally degrade compression (there's no free lunch). - - The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes - for small objects. -*/ - - /* Type declarations */ - -#ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif -#endif - -/* The following definitions for FAR are needed only for MSDOS mixed - * model programming (small or medium model with some far allocations). - * This was tested only with MSC; for other MSDOS compilers you may have - * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, - * just define FAR to be empty. - */ -#ifdef SYS16BIT -# if defined(M_I86SM) || defined(M_I86MM) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR _far -# else -# define FAR far -# endif -# endif -# if (defined(__SMALL__) || defined(__MEDIUM__)) - /* Turbo C small or medium model */ -# define SMALL_MEDIUM -# ifdef __BORLANDC__ -# define FAR _far -# else -# define FAR far -# endif -# endif -#endif - -#if defined(WINDOWS) || defined(WIN32) - /* If building or using zlib as a DLL, define ZLIB_DLL. - * This is not mandatory, but it offers a little performance increase. - */ -# ifdef ZLIB_DLL -# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) -# ifdef ZLIB_INTERNAL -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -# endif -# endif /* ZLIB_DLL */ - /* If building or using zlib with the WINAPI/WINAPIV calling convention, - * define ZLIB_WINAPI. - * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. - */ -# ifdef ZLIB_WINAPI -# ifdef FAR -# undef FAR -# endif -# include - /* No need for _export, use ZLIB.DEF instead. */ - /* For complete Windows compatibility, use WINAPI, not __stdcall. */ -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR CDECL -# endif -# endif -#endif - -#if defined (__BEOS__) -# ifdef ZLIB_DLL -# ifdef ZLIB_INTERNAL -# define ZEXPORT __declspec(dllexport) -# define ZEXPORTVA __declspec(dllexport) -# else -# define ZEXPORT __declspec(dllimport) -# define ZEXPORTVA __declspec(dllimport) -# endif -# endif -#endif - -#ifndef ZEXTERN -# define ZEXTERN extern -#endif -#ifndef ZEXPORT -# define ZEXPORT -#endif -#ifndef ZEXPORTVA -# define ZEXPORTVA -#endif - -#ifndef FAR -# define FAR -#endif - -#if !defined(__MACTYPES__) -typedef unsigned char Byte; /* 8 bits */ -#endif -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ - -#ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR -#else - typedef Byte FAR Bytef; -#endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; -typedef uLong FAR uLongf; - -#ifdef STDC - typedef void const *voidpc; - typedef void FAR *voidpf; - typedef void *voidp; -#else - typedef Byte const *voidpc; - typedef Byte FAR *voidpf; - typedef Byte *voidp; -#endif - -#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# ifdef VMS -# include /* for off_t */ -# endif -# define z_off_t off_t -#endif -#ifndef SEEK_SET -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ -#endif -#ifndef z_off_t -# define z_off_t long -#endif - -#if defined(__OS400__) -# define NO_vsnprintf -#endif - -#if defined(__MVS__) -# define NO_vsnprintf -# ifdef FAR -# undef FAR -# endif -#endif - -/* MVS linker does not support external names larger than 8 bytes */ -#if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") -#endif - -#endif /* ZCONF_H */ diff --git a/Externals/MusicMod/Player/Src/zlib/zlib.h b/Externals/MusicMod/Player/Src/zlib/zlib.h deleted file mode 100644 index 62d0e4675b..0000000000 --- a/Externals/MusicMod/Player/Src/zlib/zlib.h +++ /dev/null @@ -1,1357 +0,0 @@ -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 - - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ - -#ifndef ZLIB_H -#define ZLIB_H - -#include "zconf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ZLIB_VERSION "1.2.3" -#define ZLIB_VERNUM 0x1230 - -/* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - - The compressed data format used by default by the in-memory functions is - the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped - around a deflate stream, which is itself documented in RFC 1951. - - The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio using the functions that start - with "gz". The gzip format is different from the zlib format. gzip is a - gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - - This library can optionally read and write gzip streams in memory as well. - - The zlib format was designed to be compact and fast for use in memory - and on communications channels. The gzip format was designed for single- - file compression on file systems, has a larger header than zlib to maintain - directory information, and uses a different, slower check method than zlib. - - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. -*/ - -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); - -struct internal_state; - -typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ - - Bytef *next_out; /* next output byte should be put there */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ - - char *msg; /* last error message, NULL if no error */ - struct internal_state FAR *state; /* not visible by applications */ - - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ - - int data_type; /* best guess about the data type: binary or text */ - uLong adler; /* adler32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ -} z_stream; - -typedef z_stream FAR *z_streamp; - -/* - gzip header information passed to and from zlib routines. See RFC 1952 - for more details on the meanings of these fields. -*/ -typedef struct gz_header_s { - int text; /* true if compressed data believed to be text */ - uLong time; /* modification time */ - int xflags; /* extra flags (not used when writing a gzip file) */ - int os; /* operating system */ - Bytef *extra; /* pointer to extra field or Z_NULL if none */ - uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ - uInt extra_max; /* space at extra (only when reading header) */ - Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ - uInt name_max; /* space at name (only when reading header) */ - Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ - uInt comm_max; /* space at comment (only when reading header) */ - int hcrc; /* true if there was or will be a header crc */ - int done; /* true when done reading gzip header (not used - when writing a gzip file) */ -} gz_header; - -typedef gz_header FAR *gz_headerp; - -/* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the - opaque value. - - zalloc must return Z_NULL if there is not enough memory for the object. - If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. - - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). -*/ - - /* constants */ - -#define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ -#define Z_SYNC_FLUSH 2 -#define Z_FULL_FLUSH 3 -#define Z_FINISH 4 -#define Z_BLOCK 5 -/* Allowed flush values; see deflate() and inflate() below for details */ - -#define Z_OK 0 -#define Z_STREAM_END 1 -#define Z_NEED_DICT 2 -#define Z_ERRNO (-1) -#define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) -#define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -#define Z_NO_COMPRESSION 0 -#define Z_BEST_SPEED 1 -#define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) -/* compression levels */ - -#define Z_FILTERED 1 -#define Z_HUFFMAN_ONLY 2 -#define Z_RLE 3 -#define Z_FIXED 4 -#define Z_DEFAULT_STRATEGY 0 -/* compression strategy; see deflateInit2() below for details */ - -#define Z_BINARY 0 -#define Z_TEXT 1 -#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ -#define Z_UNKNOWN 2 -/* Possible values of the data_type field (though see inflate()) */ - -#define Z_DEFLATED 8 -/* The deflate compression method (the only one supported in this version) */ - -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ - -#define zlib_version zlibVersion() -/* for compatibility with versions < 1.0.2 */ - - /* basic functions */ - -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); -/* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. - */ - -/* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. - - The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). - - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, - Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). -*/ - - -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); -/* - deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. deflate performs one or both of the - following actions: - - - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in and avail_in are updated and - processing will resume at this point for the next call of deflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. - - Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to - decide how much data to accumualte before producing output, in order to - maximize compression. - - If the parameter flush is set to Z_SYNC_FLUSH, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. - - If flush is set to Z_FULL_FLUSH, all output is flushed as with - Z_SYNC_FLUSH, and the compression state is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade - compression. - - If deflate returns with avail_out == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. - - If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). - - deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - - deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not - fatal, and deflate() can be called again with more input and more output - space to continue compressing. -*/ - - -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the - stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be - deallocated). -*/ - - -/* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - - Initializes the internal stream state for decompression. The fields - next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. - - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) -*/ - - -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); -/* - inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce - some output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. inflate performs one or both of the - following actions: - - - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it gets to the next deflate block boundary. When decoding the - zlib or gzip format, this will cause inflate() to return immediately after - the header and before the first block. When doing a raw inflate, inflate() - will go ahead and process the first block, and will return when it gets to - the end of that block, or when it runs out of data. - - The Z_BLOCK option assists in appending to or combining deflate streams. - Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. - - inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. - - In this implementation, inflate() always flushes as much output as - possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation - is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. - - If a preset dictionary is needed after this call (see inflateSetDictionary - below), inflate sets strm->adler to the adler32 checksum of the dictionary - chosen by the compressor and returns Z_NEED_DICT; otherwise it sets - strm->adler to the adler32 checksum of all output produced so far (that is, - total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 - checksum is equal to that saved by the compressor and returns Z_STREAM_END - only if the checksum is correct. - - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. - - inflate() returns Z_OK if some progress has been made (more input processed - or more output produced), Z_STREAM_END if the end of the compressed data has - been reached and all uncompressed output has been produced, Z_NEED_DICT if a - preset dictionary is needed at this point, Z_DATA_ERROR if the input data was - corrupted (input stream not conforming to the zlib format or incorrect check - value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and - inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. -*/ - - -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). -*/ - - /* Advanced functions */ - -/* - The following functions are needed only in some special applications. -*/ - -/* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); - - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. - - The method parameter is the compression method. It must be Z_DEFLATED in - this version of the library. - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if - deflateInit is used instead. - - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data - with no zlib header or trailer, and will not compute an adler32 check value. - - windowBits can also be greater than 15 for optional gzip encoding. Add - 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). If a - gzip stream is being written, strm->adler is a crc32 instead of an adler32. - - The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. - - The strategy parameter is used to tune the compression algorithm. Use the - value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman - coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. Z_FIXED prevents the - use of dynamic Huffman codes, allowing for a simpler decoder for special - applications. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). - - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and can be - predicted with good accuracy; the data can then be compressed better than - with the default empty dictionary. - - Depending on the size of the compression data structures selected by - deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. In addition, the - current implementation of deflate will use at most the window size minus - 262 bytes of the provided dictionary. - - Upon return of this function, strm->adler is set to the adler32 value - of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.) If a raw deflate was requested, then the - adler32 value is not computed and strm->adler is not set. - - deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. - - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); -/* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. - - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); -/* - Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be - used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. -*/ - -ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain)); -/* - Fine tune deflate's internal compression parameters. This should only be - used by someone who understands the algorithm used by zlib's deflate for - searching for the best matching string, and even then only by the most - fanatic optimizer trying to squeeze out the last compressed bit for their - specific input data. Read the deflate.c source code for the meaning of the - max_lazy, good_length, nice_length, and max_chain parameters. - - deflateTune() can be called after deflateInit() or deflateInit2(), and - returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. - */ - -ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, - uLong sourceLen)); -/* - deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). -*/ - -ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, - int bits, - int value)); -/* - deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. - - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, - gz_headerp head)); -/* - deflateSetHeader() provides gzip header information for when a gzip - stream is requested by deflateInit2(). deflateSetHeader() may be called - after deflateInit2() or deflateReset() and before the first call of - deflate(). The text, time, os, extra field, name, and comment information - in the provided gz_header structure are written to the gzip header (xflag is - ignored -- the extra flags are set according to the compression level). The - caller must assure that, if not Z_NULL, name and comment are terminated with - a zero byte, and that if extra is not Z_NULL, that extra_len bytes are - available there. If hcrc is true, a gzip header crc is included. Note that - the current versions of the command-line version of gzip (up through version - 1.3.x) do not support header crc's, and will report that it is a "multi-part - gzip file" and give up. - - If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). - - deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); - - This is another version of inflateInit with an extra parameter. The - fields next_in, avail_in, zalloc, zfree and opaque must be initialized - before by the caller. - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value - provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window - size is given as input, inflate() will return with the error code - Z_DATA_ERROR instead of trying to allocate a larger window. - - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, - not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This - is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom - format is developed using the raw deflate format for compressed data, it is - recommended that a check value such as an adler32 or a crc32 be applied to - the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments - above on the use in deflateInit2() applies to the magnitude of windowBits. - - windowBits can also be greater than 15 for optional gzip decoding. Add - 32 to windowBits to enable zlib and gzip decoding with automatic header - detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is - a crc32 instead of an adler32. - - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg - is set to null if there is no error message. inflateInit2 does not perform - any decompression apart from reading the zlib header if present: this will - be done by inflate(). (So next_in and avail_in may be modified, but next_out - and avail_out are unchanged.) -*/ - -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate, - if that call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the adler32 value returned by that call of inflate. - The compressor and decompressor must use exactly the same dictionary (see - deflateSetDictionary). For raw inflate, this function can be called - immediately after inflateInit2() or inflateReset() and before any call of - inflate() to set the dictionary. The application must insure that the - dictionary that was used for compression is provided. - - inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not - perform any decompression: this will be done by subsequent calls of - inflate(). -*/ - -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); -/* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. - - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when randomly accessing a large stream. The - first pass through the stream can periodically record the inflate state, - allowing restarting inflate at those points when randomly accessing the - stream. - - inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); -/* - This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. - - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, - int bits, - int value)); -/* - This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. - - inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, - gz_headerp head)); -/* - inflateGetHeader() requests that gzip header information be stored in the - provided gz_header structure. inflateGetHeader() may be called after - inflateInit2() or inflateReset(), and before the first call of inflate(). - As inflate() processes the gzip stream, head->done is zero until the header - is completed, at which time head->done is set to one. If a zlib stream is - being decoded, then head->done is set to -1 to indicate that there will be - no gzip header information forthcoming. Note that Z_BLOCK can be used to - force inflate() to return immediately after header processing is complete - and before any actual data is decompressed. - - The text, time, xflags, and os fields are filled in with the gzip header - contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max - contains the maximum number of bytes to write to extra. Once done is true, - extra_len contains the actual extra field length, and extra contains the - extra field, or that field truncated if extra_max is less than extra_len. - If name is not Z_NULL, then up to name_max characters are written there, - terminated with a zero unless the length is greater than name_max. If - comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When - any of extra, name, or comment are not Z_NULL and the respective field is - not present in the header, then that field is set to Z_NULL to signal its - absence. This allows the use of deflateSetHeader() with the returned - structure to duplicate the header. However if those fields are set to - allocated memory, then the application will need to save those pointers - elsewhere so that they can be eventually freed. - - If inflateGetHeader is not used, then the header information is simply - discarded. The header is always checked for validity, including the header - CRC if present. inflateReset() will reset the process to discard the header - information. The application would need to call inflateGetHeader() again to - retrieve the header from the next gzip stream. - - inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, - unsigned char FAR *window)); - - Initialize the internal stream state for decompression using inflateBack() - calls. The fields zalloc, zfree and opaque in strm must be initialized - before the call. If zalloc and zfree are Z_NULL, then the default library- - derived memory allocation routines are used. windowBits is the base two - logarithm of the window size, in the range 8..15. window is a caller - supplied buffer of that size. Except for special applications where it is - assured that deflate was used with small window sizes, windowBits must be 15 - and a 32K byte window must be supplied to be able to decompress general - deflate streams. - - See inflateBack() for the usage of these routines. - - inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. -*/ - -typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); -typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); - -ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); -/* - inflateBack() does a raw inflate with a single call using a call-back - interface for input and output. This is more efficient than inflate() for - file i/o applications in that it avoids copying between the output and the - sliding window by simply making the window itself the output buffer. This - function trusts the application to not change the output buffer passed by - the output function, at least until inflateBack() returns. - - inflateBackInit() must be called first to allocate the internal state - and to initialize the state with the user-provided window buffer. - inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. - - A raw deflate stream is one with no zlib or gzip header or trailer. - This routine would normally be used in a utility that reads zip or gzip - files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and - trailer around the deflate stream. - - inflateBack() uses two subroutines supplied by the caller that are then - called by inflateBack() for input and output. inflateBack() calls those - routines until it reads a complete deflate stream and writes out all of the - uncompressed data, or until it encounters an error. The function's - parameters and return types are defined above in the in_func and out_func - typedefs. inflateBack() will call in(in_desc, &buf) which should return the - number of bytes of provided input, and a pointer to that input in buf. If - there is no input available, in() must return zero--buf is ignored in that - case--and inflateBack() will return a buffer error. inflateBack() will call - out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() - should return zero on success, or non-zero on failure. If out() returns - non-zero, inflateBack() will return with an error. Neither in() nor out() - are permitted to change the contents of the window provided to - inflateBackInit(), which is also the buffer that out() uses to write from. - The length written by out() will be at most the window size. Any non-zero - amount of input may be provided by in(). - - For convenience, inflateBack() can be provided input on the first call by - setting strm->next_in and strm->avail_in. If that input is exhausted, then - in() will be called. Therefore strm->next_in must be initialized before - calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called - immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in - must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. - - The in_desc and out_desc parameters of inflateBack() is passed as the - first parameter of in() and out() respectively when they are called. These - descriptors can be optionally used to pass any information that the caller- - supplied in() and out() functions need to do their job. - - On return, inflateBack() will set strm->next_in and strm->avail_in to - pass back any unused input that was provided by the last in() call. The - return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. -*/ - -ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); -/* - All memory allocated by inflateBackInit() is freed. - - inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream - state was inconsistent. -*/ - -ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); -/* Return flags indicating compile-time options. - - Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: - 1.0: size of uInt - 3.2: size of uLong - 5.4: size of voidpf (pointer) - 7.6: size of z_off_t - - Compiler, assembler, and debug options: - 8: DEBUG - 9: ASMV or ASMINF -- use ASM code - 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention - 11: 0 (reserved) - - One-time table building (smaller code, but not thread-safe if true): - 12: BUILDFIXED -- build static block decoding tables when needed - 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed - 14,15: 0 (reserved) - - Library content (indicates missing functionality): - 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking - deflate code when not needed) - 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect - and decode gzip streams (to avoid linking crc code) - 18-19: 0 (reserved) - - Operation variations (changes in library functionality): - 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate - 21: FASTEST -- deflate algorithm with only one, lowest compression level - 22,23: 0 (reserved) - - The sprintf variant used by gzprintf (zero is best): - 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format - 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! - 26: 0 = returns value, 1 = void -- 1 means inferred string length returned - - Remainder: - 27-31: 0 (reserved) - */ - - - /* utility functions */ - -/* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -*/ - -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. - compress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer. -*/ - -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); -/* - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - - compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_BUF_ERROR if there was not enough room in the output buffer, - Z_STREAM_ERROR if the level parameter is invalid. -*/ - -ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); -/* - compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. -*/ - -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. -*/ - - -typedef voidp gzFile; - -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); -/* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) - - gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. - - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ - -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); -/* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. -*/ - -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); -/* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. -*/ - -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); -/* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ - -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). -*/ - -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); -/* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. -*/ - -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); -/* - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ - -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); -/* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. -*/ - -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); -/* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ - -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); -/* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ - -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); -/* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). -*/ - -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); -/* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. -*/ - -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); -/* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); - the value SEEK_END is not supported. - If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are - supported; gzseek then compresses a sequence of zeroes up to the new - starting position. - - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error, in - particular if the file is opened for writing and the new starting position - would be before the current position. -*/ - -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); -/* - Rewinds the given file. This function is supported only for reading. - - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) -*/ - -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); -/* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. - - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) -*/ - -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); -/* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ - -ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); -/* - Returns 1 if file is being read directly without decompression, otherwise - zero. -*/ - -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); -/* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). -*/ - -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); -/* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ - -ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); -/* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip - file that is being written concurrently. -*/ - - /* checksum functions */ - -/* - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -*/ - -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); -/* - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - - uLong adler = adler32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - adler = adler32(adler, buffer, length); - } - if (adler != original_adler) error(); -*/ - -ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, - z_off_t len2)); -/* - Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 - and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for - each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of - seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. -*/ - -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); -/* - Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is NULL, this function returns the required initial - value for the for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. - Usage example: - - uLong crc = crc32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = crc32(crc, buffer, length); - } - if (crc != original_crc) error(); -*/ - -ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); - -/* - Combine two CRC-32 check values into one. For two sequences of bytes, - seq1 and seq2 with lengths len1 and len2, CRC-32 check values were - calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 - check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. -*/ - - - /* various hacks, don't look :) */ - -/* deflateInit and inflateInit are macros to allow checking the zlib version - * and the compiler's view of z_stream: - */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, - unsigned char FAR *window, - const char *version, - int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) -#define inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) - - -#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ -#endif - -ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); -ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); - -#ifdef __cplusplus -} -#endif - -#endif /* ZLIB_H */ diff --git a/Externals/MusicMod/TestPlayer/Src/Player.cpp b/Externals/MusicMod/TestPlayer/Src/Player.cpp deleted file mode 100644 index d22de77d8a..0000000000 --- a/Externals/MusicMod/TestPlayer/Src/Player.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - - -////////////////////////////////////////////////////////////////////////////////////////// -// File description -/* ŻŻŻŻŻŻŻŻŻŻ -// This project loads the dll */ -/////////////////////////////////// - - -#include // System - -#include "../../Player/Src/PlayerExport.h" // Local player - - -void main() -{ - Player_Main(true); - - std::cin.get(); // Keep the window open -} \ No newline at end of file diff --git a/Externals/MusicMod/TestPlayer/TestPlayer.vcproj b/Externals/MusicMod/TestPlayer/TestPlayer.vcproj deleted file mode 100644 index c29d9108ef..0000000000 --- a/Externals/MusicMod/TestPlayer/TestPlayer.vcproj +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Source/Core/Common/Src/Setup.h b/Source/Core/Common/Src/Setup.h index 0b9ed0a3fe..c32b5fe959 100644 --- a/Source/Core/Common/Src/Setup.h +++ b/Source/Core/Common/Src/Setup.h @@ -57,9 +57,6 @@ // Build with playback rerecording options //#define RERECORDING -// Build with music modification -//#define MUSICMOD - // ----------------------------------------------------------------------------------------------------- #endif // _SETUP_H_ diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp index 618154525f..9b945651b6 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp @@ -29,12 +29,6 @@ #include "VolumeCreator.h" #include "Filesystem.h" -// Music mod -#include "Setup.h" // Define MUSICMOD here -#ifdef MUSICMOD -#include "../../../../Externals/MusicMod/Main/Src/Main.h" -#endif - using namespace DVDInterface; @@ -228,11 +222,6 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 { PanicAlert("Cant read from DVD_Plugin - DVD-Interface: Fatal Error"); } - - #ifdef MUSICMOD - std::string Tmp = pFilename; - MusicMod::CheckFile(Tmp); - #endif } break; diff --git a/Source/Core/DiscIO/Src/FileSystemGCWii.h b/Source/Core/DiscIO/Src/FileSystemGCWii.h index cf34dc0675..cde9bb2d1a 100644 --- a/Source/Core/DiscIO/Src/FileSystemGCWii.h +++ b/Source/Core/DiscIO/Src/FileSystemGCWii.h @@ -37,12 +37,11 @@ public: virtual bool ExportFile(const char* _rFullPath, const char* _rExportFilename) const; virtual bool ExportAllFiles(const char* _rFullPath) const; - std::vector m_FileInfoVector; // Public for the music modification - -private: +private: bool m_Initialized; u32 m_OffsetShift; // WII offsets are all shifted + std::vector m_FileInfoVector; u32 Read32(u64 _Offset) const; virtual size_t GetFileList(std::vector &_rFilenames) const; void GetStringFromOffset(u64 _Offset, char* Filename) const; diff --git a/Source/Core/DiscIO/Src/VolumeGC.cpp b/Source/Core/DiscIO/Src/VolumeGC.cpp index 67d2ea2de7..3082d74aa2 100644 --- a/Source/Core/DiscIO/Src/VolumeGC.cpp +++ b/Source/Core/DiscIO/Src/VolumeGC.cpp @@ -20,14 +20,6 @@ #include "VolumeGC.h" #include "StringUtil.h" -////////////////////////////////////////////////// -// Music mod -// ŻŻŻŻŻŻŻŻŻŻ -#include "Setup.h" // Define MUSICMOD here -#ifdef MUSICMOD -#include "../../../../Externals/MusicMod/Main/Src/Main.h" -#endif -/////////////////////// namespace DiscIO { @@ -45,13 +37,7 @@ bool CVolumeGC::Read(u64 _Offset, u64 _Length, u8* _pBuffer) const { if (m_pReader == NULL) return false; - ////////////////////////////////////////////////// - // Music mod - // ŻŻŻŻŻŻŻŻŻŻ - #ifdef MUSICMOD - MusicMod::FindFilename(_Offset, _Length); - #endif - /////////////////////// + return m_pReader->Read(_Offset, _Length, _pBuffer); } diff --git a/Source/Core/DolphinWX/Src/BootManager.cpp b/Source/Core/DolphinWX/Src/BootManager.cpp index 75bef8516d..258001f6b3 100644 --- a/Source/Core/DolphinWX/Src/BootManager.cpp +++ b/Source/Core/DolphinWX/Src/BootManager.cpp @@ -58,10 +58,6 @@ #include "Frame.h" #include "CodeWindow.h" #include "Setup.h" - // MusicMod - #ifdef MUSICMOD - #include "../../../Externals/MusicMod/Main/Src/Main.h" - #endif #endif @@ -204,16 +200,6 @@ bool BootCore(const std::string& _rFilename) #endif // ===================== - - // ================================================================= - // Init MusicMod - // ŻŻŻŻŻŻŻŻŻŻ - #ifdef MUSICMOD - MusicMod::Main(StartUp.m_strFilename); - #endif - // =================== - - return true; } diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 5ef27834f5..2da2c62d1b 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -254,13 +254,6 @@ EVT_MENU(IDM_CONFIG_DSP_PLUGIN, CFrame::OnPluginDSP) EVT_MENU(IDM_CONFIG_PAD_PLUGIN, CFrame::OnPluginPAD) EVT_MENU(IDM_CONFIG_WIIMOTE_PLUGIN, CFrame::OnPluginWiimote) -#ifdef MUSICMOD -EVT_MENU(IDM_MUTE, CFrame::MM_OnMute) -EVT_MENU(IDM_MUSIC_PLAY, CFrame::MM_OnPause) -EVT_COMMAND_SCROLL(IDM_VOLUME, CFrame::MM_OnVolume) -//EVT_MENU(IDM_MM_LOG, CFrame::MM_OnLog) -#endif - #if defined(HAVE_SFML) && HAVE_SFML EVT_MENU(IDM_NETPLAY, CFrame::OnNetPlay) #endif @@ -354,12 +347,6 @@ CFrame::CFrame(bool showLogWindow, ConsoleListener *console = LogManager::GetInstance()->getConsoleListener(); if (SConfig::GetInstance().m_InterfaceConsole) console->Open(); - ////////////////////////////////////////// - // Init MusicMod and the console window in the dll - #ifdef MUSICMOD - MM_OnLog(SConfig::GetInstance().m_InterfaceConsole); - #endif - ////////////////////////////////////////// // This panel is the parent for rendering and it holds the gamelistctrl //m_Panel = new wxPanel(this, IDM_MPANEL); diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 209daf0d60..caaa866dc7 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -100,22 +100,6 @@ class CFrame : public wxFrame char **drives; - ////////////////////////////////////////////////////////////////////////////////////// - // Music mod - // ŻŻŻŻŻŻŻŻŻŻ - #ifdef MUSICMOD - wxToolBarToolBase* mm_ToolMute, * mm_ToolPlay, * mm_ToolLog; - wxSlider * mm_Slider; - - void MM_UpdateGUI(); void MM_PopulateGUI(); void MM_InitBitmaps(int Theme); - void MM_OnPlay(); void MM_OnStop(); - void MM_OnMute(wxCommandEvent& event); - void MM_OnPause(wxCommandEvent& event); - void MM_OnVolume(wxScrollEvent& event); - void MM_OnLog(bool); - #endif - /////////////////////////////////// - enum EToolbar { Toolbar_FileOpen, @@ -132,11 +116,6 @@ class CFrame : public wxFrame Toolbar_PluginPAD, Toolbar_Wiimote, Toolbar_Help, - - #ifdef MUSICMOD // Music modification - Toolbar_Log, Toolbar_PluginDSP_Dis, Toolbar_Log_Dis, - #endif - EToolbar_Max }; diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index a3e63928a1..8e4e45fce5 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -256,13 +256,6 @@ void CFrame::PopulateToolbar(wxToolBar* toolBar) toolBar->AddSeparator(); toolBar->AddTool(IDM_HELPABOUT, _T("About"), m_Bitmaps[Toolbar_Help], _T("About Dolphin")); - - // Music mod - #ifdef MUSICMOD - MM_PopulateGUI(); - #endif - - // after adding the buttons to the toolbar, must call Realize() to reflect // the changes toolBar->Realize(); @@ -383,12 +376,6 @@ void CFrame::InitBitmaps() default: PanicAlert("Theme selection went wrong"); } - // Music modification - #ifdef MUSICMOD - MM_InitBitmaps(Theme); - #endif - - // Update in case the bitmap has been updated if (GetToolBar() != NULL) RecreateToolbar(); @@ -398,11 +385,6 @@ void CFrame::InitBitmaps() // Start the game or change the disc void CFrame::BootGame() { - // Music modification - #ifdef MUSICMOD - MM_OnPlay(); - #endif - // Rerecording #ifdef RERECORDING Core::RerecordingStart(); @@ -529,11 +511,6 @@ void CFrame::OnScreenshot(wxCommandEvent& WXUNUSED (event)) // Stop the emulation void CFrame::DoStop() { - // Music modification - #ifdef MUSICMOD - MM_OnStop(); - #endif - // Rerecording #ifdef RERECORDING Core::RerecordingStop(); @@ -815,11 +792,6 @@ void CFrame::ToggleConsole(bool check) else console->Close(); - // Music mod - #ifdef MUSICMOD - MM_OnLog(SConfig::GetInstance().m_InterfaceConsole); - #endif - // Make sure the check is updated (if wxw isn't calling this func) GetMenuBar()->FindItem(IDM_TOGGLE_CONSOLE)->Check(check); } @@ -827,10 +799,6 @@ void CFrame::ToggleConsole(bool check) // Update the enabled/disabled status void CFrame::UpdateGUI() { - #ifdef MUSICMOD - MM_UpdateGUI(); - #endif - // Save status bool initialized = Core::isRunning(); bool running = Core::GetState() == Core::CORE_RUN; diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index 3db47415b0..e7dd6499c4 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -80,17 +80,6 @@ enum IDM_HELPWEBSITE, IDM_HELPGOOGLECODE, - ////////////////////////////////////////////////////// - // Music modification - // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ - #ifdef MUSICMOD - IDM_MUTE, - IDM_MUSIC_PLAY, - IDM_VOLUME, IDM_VOLUME_LABEL, IDM_VOLUME_PANEL, - IDM_MM_LOG, - #endif - ////////////////////////////////////////////////////// - IDM_CONFIG_MAIN, IDM_CONFIG_GFX_PLUGIN, IDM_CONFIG_DSP_PLUGIN, diff --git a/Source/MusicMod.sln b/Source/MusicMod.sln deleted file mode 100644 index 86f40533ab..0000000000 --- a/Source/MusicMod.sln +++ /dev/null @@ -1,633 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core\Core.vcproj", "{F0B874CB-4476-4199-9315-8343D05AE684}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} = {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoDX9", "Plugins\Plugin_VideoDX9\Plugin_VideoDX9.vcproj", "{636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}" - ProjectSection(ProjectDependencies) = postProject - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_PadSimple", "Plugins\Plugin_PadSimple\Plugin_PadSimple.vcproj", "{9A183B48-ECC2-4121-876A-9B3793686073}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Bochs_disasm", "..\Externals\Bochs_disasm\Bochs_disasm.vcproj", "{29C2ABC1-ADA5-42CD-A5FC-96022D52A510}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\Externals\zlib\zlib.vcproj", "{3E03C179-8251-46E4-81F4-466F114BAC63}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_LLE", "Plugins\Plugin_DSP_LLE\Plugin_DSP_LLE.vcproj", "{C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}" - ProjectSection(ProjectDependencies) = postProject - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DiscIO", "Core\DiscIO\DiscIO.vcproj", "{B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}" - ProjectSection(ProjectDependencies) = postProject - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} = {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoOGL", "Plugins\Plugin_VideoOGL\Plugin_VideoOGL.vcproj", "{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Core\Common\Common.vcproj", "{C573CAF7-EE6A-458E-8049-16C0BF34C2E9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\DolphinWX.vcproj", "{A72606EF-C5C1-4954-90AD-F0F93A8D97D9}" - ProjectSection(ProjectDependencies) = postProject - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} = {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} - {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} - {823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} = {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "..\Externals\wxWidgets\build\msw\wx_base.vcproj", "{1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "..\Externals\wxWidgets\build\msw\wx_core.vcproj", "{11F55366-12EC-4C44-A8CB-1D4E315D61ED}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Debugger", "Core\DebuggerWX\DebuggerWX.vcproj", "{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {F0B874CB-4476-4199-9315-8343D05AE684} = {F0B874CB-4476-4199-9315-8343D05AE684} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VideoCommon", "Core\VideoCommon\VideoCommon.vcproj", "{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}" - ProjectSection(ProjectDependencies) = postProject - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} = {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_DSP_HLE", "Plugins\Plugin_DSP_HLE\Plugin_DSP_HLE.vcproj", "{D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} = {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcproj", "{33546D62-7F34-4EA6-A88E-D538B36E16BF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_Wiimote", "Plugins\Plugin_Wiimote\Plugin_Wiimote.vcproj", "{8D612734-FAA5-4B8A-804F-4DEA2367D495}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_nJoy_SDL_Test", "Plugins\Plugin_nJoy_Testing\Plugin_nJoy_SDL_Test.vcproj", "{ADF64291-57ED-4B7A-AB76-37B4A991504B}" - ProjectSection(ProjectDependencies) = postProject - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "..\Externals\wxWidgets\build\msw\wx_adv.vcproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_nJoy_SDL", "Plugins\Plugin_nJoy_SDL\Plugin_nJoy_SDL.vcproj", "{521498BE-6089-4780-8223-E67C22F4E068}" - ProjectSection(ProjectDependencies) = postProject - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InputCommon", "Core\InputCommon\InputCommon.vcproj", "{C7E5D50A-2916-464B-86A7-E10B3CC88ADA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Main", "..\Externals\MusicMod\Main\Main.vcproj", "{95CCAABC-7062-47C4-B8C1-A064DD5F16FF}" - ProjectSection(ProjectDependencies) = postProject - {0B72B5D6-5D72-4391-84A7-9CCA5392668A} = {0B72B5D6-5D72-4391-84A7-9CCA5392668A} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Player", "..\Externals\MusicMod\Player\Player.vcproj", "{0B72B5D6-5D72-4391-84A7-9CCA5392668A}" - ProjectSection(ProjectDependencies) = postProject - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPlayer", "..\Externals\MusicMod\TestPlayer\TestPlayer.vcproj", "{0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SFML_Network", "..\Externals\SFML\build\vc2008\sfml-network.vcproj", "{823DDC98-42D5-4A38-88CF-9DC06C788AE4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SOIL", "..\Externals\SOIL\SOIL.vcproj", "{C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AudioCommon", "Core\AudioCommon\AudioCommon.vcproj", "{FBAFB369-07EB-4460-9CAD-08BE5789DAB6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MusicMod", "MusicMod", "{293D4C0A-0C8B-4210-B0CE-594E4A0ECBFB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Externals", "Externals", "{31BC8EA2-F085-42F2-B5B6-DB1540D01D36}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{64F2516C-FC2D-4AB7-B739-CAABECE43AE6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{DAA6ADA9-6908-4650-8F99-55E68D5BC196}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - DebugFast|Win32 = DebugFast|Win32 - DebugFast|x64 = DebugFast|x64 - Release JITIL|Win32 = Release JITIL|Win32 - Release JITIL|x64 = Release JITIL|x64 - Release_JITIL|Win32 = Release_JITIL|Win32 - Release_JITIL|x64 = Release_JITIL|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.ActiveCfg = Debug|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|Win32.Build.0 = Debug|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.ActiveCfg = Debug|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Debug|x64.Build.0 = Debug|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.DebugFast|x64.Build.0 = DebugFast|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release JITIL|Win32.ActiveCfg = Release_JITIL|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release JITIL|Win32.Build.0 = Release_JITIL|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release JITIL|x64.ActiveCfg = Release_JITIL|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release JITIL|x64.Build.0 = Release_JITIL|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release_JITIL|Win32.ActiveCfg = Release_JITIL|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release_JITIL|Win32.Build.0 = Release_JITIL|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release_JITIL|x64.ActiveCfg = Release_JITIL|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release_JITIL|x64.Build.0 = Release_JITIL|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.ActiveCfg = Release|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|Win32.Build.0 = Release|Win32 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.ActiveCfg = Release|x64 - {F0B874CB-4476-4199-9315-8343D05AE684}.Release|x64.Build.0 = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|Win32.ActiveCfg = Debug|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Debug|x64.ActiveCfg = Debug|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release JITIL|x64.ActiveCfg = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release JITIL|x64.Build.0 = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release_JITIL|x64.ActiveCfg = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|Win32.ActiveCfg = Release|Win32 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.ActiveCfg = Release|x64 - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18}.Release|x64.Build.0 = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Debug|Win32.ActiveCfg = Debug|Win32 - {9A183B48-ECC2-4121-876A-9B3793686073}.Debug|x64.ActiveCfg = Debug|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release JITIL|x64.ActiveCfg = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release JITIL|x64.Build.0 = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release_JITIL|x64.ActiveCfg = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release_JITIL|x64.Build.0 = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release|Win32.ActiveCfg = Release|Win32 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release|x64.ActiveCfg = Release|x64 - {9A183B48-ECC2-4121-876A-9B3793686073}.Release|x64.Build.0 = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.ActiveCfg = Debug|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|Win32.Build.0 = Debug|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.ActiveCfg = Debug|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Debug|x64.Build.0 = Debug|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.DebugFast|x64.Build.0 = DebugFast|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release JITIL|x64.ActiveCfg = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release JITIL|x64.Build.0 = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release_JITIL|x64.ActiveCfg = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release_JITIL|x64.Build.0 = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|Win32.ActiveCfg = Release|Win32 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.ActiveCfg = Release|x64 - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}.Release|x64.Build.0 = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.ActiveCfg = Debug|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|Win32.Build.0 = Debug|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.ActiveCfg = Debug|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Debug|x64.Build.0 = Debug|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release JITIL|x64.ActiveCfg = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release JITIL|x64.Build.0 = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release_JITIL|x64.ActiveCfg = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release_JITIL|x64.Build.0 = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|Win32.ActiveCfg = Release|Win32 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.ActiveCfg = Release|x64 - {3E03C179-8251-46E4-81F4-466F114BAC63}.Release|x64.Build.0 = Release|x64 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Debug|Win32.ActiveCfg = Debug|Win32 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Debug|x64.ActiveCfg = Debug|x64 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.DebugFast|x64.Build.0 = DebugFast|x64 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release JITIL|Win32.ActiveCfg = Release|x64 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release JITIL|x64.ActiveCfg = Release|x64 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release_JITIL|Win32.ActiveCfg = Release|Win32 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release_JITIL|x64.ActiveCfg = Release|Win32 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release|Win32.ActiveCfg = Release|Win32 - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8}.Release|x64.ActiveCfg = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.ActiveCfg = Debug|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|Win32.Build.0 = Debug|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.ActiveCfg = Debug|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Debug|x64.Build.0 = Debug|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.DebugFast|x64.Build.0 = DebugFast|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release JITIL|x64.ActiveCfg = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release JITIL|x64.Build.0 = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release_JITIL|x64.ActiveCfg = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release_JITIL|x64.Build.0 = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.ActiveCfg = Release|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|Win32.Build.0 = Release|Win32 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.ActiveCfg = Release|x64 - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C}.Release|x64.Build.0 = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.ActiveCfg = Debug|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.ActiveCfg = Debug|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release JITIL|x64.ActiveCfg = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release JITIL|x64.Build.0 = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release_JITIL|x64.ActiveCfg = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release_JITIL|x64.Build.0 = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|Win32.ActiveCfg = Release|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.ActiveCfg = Release|x64 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release|x64.Build.0 = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.ActiveCfg = Debug|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|Win32.Build.0 = Debug|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.ActiveCfg = Debug|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Debug|x64.Build.0 = Debug|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.DebugFast|x64.Build.0 = DebugFast|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release JITIL|x64.ActiveCfg = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release JITIL|x64.Build.0 = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release_JITIL|x64.ActiveCfg = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release_JITIL|x64.Build.0 = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.ActiveCfg = Release|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|Win32.Build.0 = Release|Win32 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.ActiveCfg = Release|x64 - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9}.Release|x64.Build.0 = Release|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|Win32.Build.0 = Debug|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.ActiveCfg = Debug|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Debug|x64.Build.0 = Debug|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.DebugFast|x64.Build.0 = DebugFast|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release JITIL|Win32.ActiveCfg = Release_JITIL|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release JITIL|Win32.Build.0 = Release_JITIL|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release JITIL|x64.ActiveCfg = Release_JITIL|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release JITIL|x64.Build.0 = Release_JITIL|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release_JITIL|Win32.ActiveCfg = Release_JITIL|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release_JITIL|Win32.Build.0 = Release_JITIL|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release_JITIL|x64.ActiveCfg = Release_JITIL|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release_JITIL|x64.Build.0 = Release_JITIL|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.ActiveCfg = Release|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|Win32.Build.0 = Release|Win32 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.ActiveCfg = Release|x64 - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9}.Release|x64.Build.0 = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|Win32.Build.0 = Debug|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.ActiveCfg = Debug|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Debug|x64.Build.0 = Debug|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release JITIL|x64.ActiveCfg = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release JITIL|x64.Build.0 = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release_JITIL|x64.ActiveCfg = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release_JITIL|x64.Build.0 = Release|x64 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|Win32.ActiveCfg = Release|Win32 - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}.Release|x64.ActiveCfg = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|Win32.ActiveCfg = Debug|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|Win32.Build.0 = Debug|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|x64.ActiveCfg = Debug|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Debug|x64.Build.0 = Debug|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release JITIL|x64.ActiveCfg = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release JITIL|x64.Build.0 = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release_JITIL|x64.ActiveCfg = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release_JITIL|x64.Build.0 = Release|x64 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|Win32.ActiveCfg = Release|Win32 - {11F55366-12EC-4C44-A8CB-1D4E315D61ED}.Release|x64.ActiveCfg = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.ActiveCfg = Debug|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|Win32.Build.0 = Debug|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.ActiveCfg = Debug|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Debug|x64.Build.0 = Debug|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.DebugFast|x64.Build.0 = DebugFast|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release JITIL|x64.ActiveCfg = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release JITIL|x64.Build.0 = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release_JITIL|x64.ActiveCfg = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release_JITIL|x64.Build.0 = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.ActiveCfg = Release|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|Win32.Build.0 = Release|Win32 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.ActiveCfg = Release|x64 - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}.Release|x64.Build.0 = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|Win32.ActiveCfg = Debug|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Debug|x64.ActiveCfg = Debug|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release JITIL|x64.ActiveCfg = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release JITIL|x64.Build.0 = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release_JITIL|x64.ActiveCfg = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release_JITIL|x64.Build.0 = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.ActiveCfg = Release|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|Win32.Build.0 = Release|Win32 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.ActiveCfg = Release|x64 - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}.Release|x64.Build.0 = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|Win32.ActiveCfg = Debug|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Debug|x64.ActiveCfg = Debug|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.DebugFast|x64.Build.0 = DebugFast|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release JITIL|x64.ActiveCfg = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release JITIL|x64.Build.0 = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release_JITIL|x64.ActiveCfg = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release_JITIL|x64.Build.0 = Release|x64 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.ActiveCfg = Release|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|Win32.Build.0 = Release|Win32 - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8}.Release|x64.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|Win32.ActiveCfg = Debug|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.ActiveCfg = Debug|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Debug|x64.Build.0 = Debug|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.DebugFast|x64.Build.0 = DebugFast|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release JITIL|x64.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release JITIL|x64.Build.0 = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release_JITIL|x64.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release_JITIL|x64.Build.0 = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|Win32.ActiveCfg = Release|Win32 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.ActiveCfg = Release|x64 - {33546D62-7F34-4EA6-A88E-D538B36E16BF}.Release|x64.Build.0 = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.ActiveCfg = Debug|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.ActiveCfg = Debug|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|x64.ActiveCfg = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|x64.Build.0 = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release_JITIL|x64.ActiveCfg = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release_JITIL|x64.Build.0 = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.ActiveCfg = Release|Win32 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64 - {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|Win32.ActiveCfg = Debug|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|x64.ActiveCfg = Debug|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release JITIL|Win32.ActiveCfg = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release JITIL|x64.ActiveCfg = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release_JITIL|Win32.ActiveCfg = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release_JITIL|x64.ActiveCfg = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|Win32.ActiveCfg = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|x64.ActiveCfg = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|x64.Build.0 = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.Build.0 = Debug|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release JITIL|x64.ActiveCfg = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release JITIL|x64.Build.0 = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release_JITIL|x64.ActiveCfg = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release_JITIL|x64.Build.0 = Release|x64 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Debug|Win32.ActiveCfg = Debug|Win32 - {521498BE-6089-4780-8223-E67C22F4E068}.Debug|Win32.Build.0 = Debug|Win32 - {521498BE-6089-4780-8223-E67C22F4E068}.Debug|x64.ActiveCfg = Debug|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Debug|x64.Build.0 = Debug|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.DebugFast|x64.Build.0 = DebugFast|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {521498BE-6089-4780-8223-E67C22F4E068}.Release JITIL|x64.ActiveCfg = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release JITIL|x64.Build.0 = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release_JITIL|x64.ActiveCfg = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release_JITIL|x64.Build.0 = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release|Win32.ActiveCfg = Release|Win32 - {521498BE-6089-4780-8223-E67C22F4E068}.Release|x64.ActiveCfg = Release|x64 - {521498BE-6089-4780-8223-E67C22F4E068}.Release|x64.Build.0 = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.ActiveCfg = Debug|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.Build.0 = Debug|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.ActiveCfg = Debug|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.Build.0 = Debug|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.DebugFast|x64.Build.0 = DebugFast|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release JITIL|x64.ActiveCfg = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release JITIL|x64.Build.0 = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release_JITIL|x64.ActiveCfg = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release_JITIL|x64.Build.0 = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|Win32.ActiveCfg = Release|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|Win32.Build.0 = Release|Win32 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|x64.ActiveCfg = Release|x64 - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Release|x64.Build.0 = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|Win32.ActiveCfg = Debug|Win32 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|Win32.Build.0 = Debug|Win32 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|x64.ActiveCfg = Debug|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Debug|x64.Build.0 = Debug|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.DebugFast|x64.Build.0 = DebugFast|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release JITIL|x64.ActiveCfg = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release JITIL|x64.Build.0 = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release_JITIL|x64.ActiveCfg = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release_JITIL|x64.Build.0 = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|Win32.ActiveCfg = Release|Win32 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|Win32.Build.0 = Release|Win32 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|x64.ActiveCfg = Release|x64 - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF}.Release|x64.Build.0 = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|Win32.ActiveCfg = Debug|Win32 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|Win32.Build.0 = Debug|Win32 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|x64.ActiveCfg = Debug|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Debug|x64.Build.0 = Debug|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.DebugFast|x64.Build.0 = DebugFast|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release JITIL|x64.ActiveCfg = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release JITIL|x64.Build.0 = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release_JITIL|x64.ActiveCfg = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release_JITIL|x64.Build.0 = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|Win32.ActiveCfg = Release|Win32 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|Win32.Build.0 = Release|Win32 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|x64.ActiveCfg = Release|x64 - {0B72B5D6-5D72-4391-84A7-9CCA5392668A}.Release|x64.Build.0 = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|Win32.ActiveCfg = Debug|Win32 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|Win32.Build.0 = Debug|Win32 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|x64.ActiveCfg = Debug|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Debug|x64.Build.0 = Debug|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.DebugFast|x64.Build.0 = DebugFast|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release JITIL|Win32.ActiveCfg = Release|Win32 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release JITIL|x64.ActiveCfg = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release JITIL|x64.Build.0 = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release_JITIL|x64.ActiveCfg = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release_JITIL|x64.Build.0 = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|Win32.ActiveCfg = Release|Win32 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|x64.ActiveCfg = Release|x64 - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718}.Release|x64.Build.0 = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|Win32.ActiveCfg = Debug|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|Win32.Build.0 = Debug|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|x64.ActiveCfg = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Debug|x64.Build.0 = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|Win32.ActiveCfg = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|x64.ActiveCfg = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.DebugFast|x64.Build.0 = Debug|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release JITIL|Win32.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release JITIL|x64.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release JITIL|x64.Build.0 = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release_JITIL|x64.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release_JITIL|x64.Build.0 = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|Win32.ActiveCfg = Release|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|Win32.Build.0 = Release|Win32 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|x64.ActiveCfg = Release|x64 - {823DDC98-42D5-4A38-88CF-9DC06C788AE4}.Release|x64.Build.0 = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|Win32.ActiveCfg = Debug|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|Win32.Build.0 = Debug|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|x64.ActiveCfg = Debug|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Debug|x64.Build.0 = Debug|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.DebugFast|x64.Build.0 = DebugFast|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release JITIL|Win32.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release JITIL|x64.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release JITIL|x64.Build.0 = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release_JITIL|x64.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release_JITIL|x64.Build.0 = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|Win32.ActiveCfg = Release|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|Win32.Build.0 = Release|Win32 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|x64.ActiveCfg = Release|x64 - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4}.Release|x64.Build.0 = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|Win32.ActiveCfg = Debug|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|Win32.Build.0 = Debug|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|x64.ActiveCfg = Debug|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Debug|x64.Build.0 = Debug|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.DebugFast|x64.Build.0 = DebugFast|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release JITIL|Win32.ActiveCfg = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release JITIL|x64.ActiveCfg = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release JITIL|x64.Build.0 = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release_JITIL|Win32.ActiveCfg = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release_JITIL|x64.ActiveCfg = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release_JITIL|x64.Build.0 = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|Win32.ActiveCfg = Release|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|Win32.Build.0 = Release|Win32 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|x64.ActiveCfg = Release|x64 - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {95CCAABC-7062-47C4-B8C1-A064DD5F16FF} = {293D4C0A-0C8B-4210-B0CE-594E4A0ECBFB} - {0B72B5D6-5D72-4391-84A7-9CCA5392668A} = {293D4C0A-0C8B-4210-B0CE-594E4A0ECBFB} - {0D14F1E9-490B-4A2D-A4EF-0535E8B3C718} = {293D4C0A-0C8B-4210-B0CE-594E4A0ECBFB} - {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {C0B84DA9-FF15-4FAB-9590-17132F3C6DE4} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {3E03C179-8251-46E4-81F4-466F114BAC63} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {31BC8EA2-F085-42F2-B5B6-DB1540D01D36} - {FBAFB369-07EB-4460-9CAD-08BE5789DAB6} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {8D612734-FAA5-4B8A-804F-4DEA2367D495} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {D6E56527-BBB9-4EAD-A6EC-49D4BF6AFCD8} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {C60D0E7A-ED05-4C67-9EE7-3A6C0D7801C8} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {521498BE-6089-4780-8223-E67C22F4E068} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {ADF64291-57ED-4B7A-AB76-37B4A991504B} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {9A183B48-ECC2-4121-876A-9B3793686073} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {636FAD5F-02D1-4E9A-BE67-FB8EA99B9A18} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {64F2516C-FC2D-4AB7-B739-CAABECE43AE6} - {A72606EF-C5C1-4954-90AD-F0F93A8D97D9} = {DAA6ADA9-6908-4650-8F99-55E68D5BC196} - {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {DAA6ADA9-6908-4650-8F99-55E68D5BC196} - {F0B874CB-4476-4199-9315-8343D05AE684} = {DAA6ADA9-6908-4650-8F99-55E68D5BC196} - {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {DAA6ADA9-6908-4650-8F99-55E68D5BC196} - {B7F1A9FB-BEA8-416E-9460-AE35A6A5165C} = {DAA6ADA9-6908-4650-8F99-55E68D5BC196} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - AMDCaProjectFile = D:\Dev\Dolphin\trunk\Source\CodeAnalyst\Dolphin.caw - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal