Merge branch 'master' into wii-network

Conflicts:
	Source/Core/Common/Src/CommonPaths.h
	Source/Core/Common/Src/FileUtil.h
	Source/Core/Core/Src/HLE/HLE.cpp
	Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp
This commit is contained in:
Matthew Parlane
2013-01-26 21:46:12 +13:00
236 changed files with 37067 additions and 41783 deletions
+42 -30
View File
@@ -109,78 +109,89 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\Common\Src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib />
<Lib>
<AdditionalDependencies>SoundTouchD.lib;OpenAL32.lib;dsound.lib;dxerr.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\Common\Src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib />
<Lib>
<AdditionalDependencies>SoundTouchD.lib;OpenAL32.lib;dsound.lib;dxerr.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\Common\Src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Lib />
<Lib>
<AdditionalDependencies>SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\Common\Src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Lib />
<Lib>
<AdditionalDependencies>SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\Externals\OpenAL\Win32;..\..\..\Externals\SoundTouch\Win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\Common\Src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Lib />
<Lib>
<AdditionalDependencies>SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\Common\Src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\Core\Src;..\Common\Src;..\..\..\Externals;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Lib />
<Lib>
<AdditionalDependencies>SoundTouch.lib;OpenAL32.lib;dsound.lib;dxerr.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\Externals\OpenAL\Win64;..\..\..\Externals\SoundTouch\Win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Src\aldlist.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="Src\aldlist.cpp" />
<ClCompile Include="Src\AOSoundStream.cpp" />
<ClCompile Include="Src\AudioCommon.cpp" />
<ClCompile Include="Src\AudioCommonConfig.cpp" />
<ClCompile Include="Src\DPL2Decoder.cpp" />
<ClCompile Include="Src\DSoundStream.cpp" />
<ClCompile Include="Src\Mixer.cpp" />
<ClCompile Include="Src\NullSoundStream.cpp" />
@@ -189,17 +200,10 @@
<ClCompile Include="Src\XAudio2Stream.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Src\aldlist.h">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="Src\aldlist.h" />
<ClInclude Include="Src\AOSoundStream.h" />
<ClInclude Include="Src\AudioCommon.h" />
<ClInclude Include="Src\AudioCommonConfig.h" />
<ClInclude Include="Src\DPL2Decoder.h" />
<ClInclude Include="Src\DSoundStream.h" />
<ClInclude Include="Src\Mixer.h" />
<ClInclude Include="Src\NullSoundStream.h" />
@@ -212,6 +216,14 @@
<None Include="CMakeLists.txt" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Externals\SoundTouch\SoundTouch.vcxproj">
<Project>{68a5dd20-7057-448b-8fe0-b6ac8d205509}</Project>
<Private>true</Private>
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
<LinkLibraryDependencies>true</LinkLibraryDependencies>
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
</ProjectReference>
<ProjectReference Include="..\Common\Common.vcxproj">
<Project>{c87a4178-44f6-49b2-b7aa-c79af1b8c534}</Project>
<Private>true</Private>
@@ -3,7 +3,6 @@
<ItemGroup>
<ClCompile Include="Src\aldlist.cpp" />
<ClCompile Include="Src\AudioCommon.cpp" />
<ClCompile Include="Src\AudioCommonConfig.cpp" />
<ClCompile Include="Src\Mixer.cpp" />
<ClCompile Include="Src\WaveFile.cpp" />
<ClCompile Include="Src\AOSoundStream.cpp">
@@ -21,11 +20,11 @@
<ClCompile Include="Src\NullSoundStream.cpp">
<Filter>SoundStreams</Filter>
</ClCompile>
<ClCompile Include="Src\DPL2Decoder.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Src\aldlist.h" />
<ClInclude Include="Src\AudioCommon.h" />
<ClInclude Include="Src\AudioCommonConfig.h" />
<ClInclude Include="Src\Mixer.h" />
<ClInclude Include="Src\SoundStream.h" />
<ClInclude Include="Src\WaveFile.h" />
@@ -44,6 +43,7 @@
<ClInclude Include="Src\XAudio2Stream.h">
<Filter>SoundStreams</Filter>
</ClInclude>
<ClInclude Include="Src\DPL2Decoder.h" />
</ItemGroup>
<ItemGroup>
<None Include="CMakeLists.txt" />
+2 -2
View File
@@ -1,5 +1,5 @@
set(SRCS Src/AudioCommon.cpp
Src/AudioCommonConfig.cpp
Src/DPL2Decoder.cpp
Src/Mixer.cpp
Src/WaveFile.cpp
Src/NullSoundStream.cpp)
@@ -18,7 +18,7 @@ endif(AO_FOUND)
if(OPENAL_FOUND)
set(SRCS ${SRCS} Src/OpenALStream.cpp Src/aldlist.cpp)
set(LIBS ${LIBS} ${OPENAL_LIBRARY})
set(LIBS ${LIBS} ${OPENAL_LIBRARY} SoundTouch )
endif(OPENAL_FOUND)
if(PULSEAUDIO_FOUND)
+27 -11
View File
@@ -27,6 +27,10 @@
#include "OpenALStream.h"
#include "PulseAudioStream.h"
#include "../../Core/Src/Movie.h"
#include "../../Core/Src/ConfigManager.h"
// This shouldn't be a global, at least not here.
SoundStream *soundStream;
namespace AudioCommon
{
@@ -34,7 +38,7 @@ namespace AudioCommon
{
// TODO: possible memleak with mixer
std::string backend = ac_Config.sBackend;
std::string backend = SConfig::GetInstance().sBackend;
if (backend == BACKEND_OPENAL && OpenALStream::isValid())
soundStream = new OpenALStream(mixer);
else if (backend == BACKEND_NULLSOUND && NullSound::isValid())
@@ -54,10 +58,10 @@ namespace AudioCommon
if (soundStream != NULL)
{
ac_Config.Update();
UpdateSoundStream();
if (soundStream->Start())
{
if (ac_Config.m_DumpAudio)
if (SConfig::GetInstance().m_DumpAudio)
{
std::string audio_file_name = File::GetUserPath(D_DUMPAUDIO_IDX) + "audiodump.wav";
File::CreateFullPath(audio_file_name);
@@ -82,7 +86,7 @@ namespace AudioCommon
if (soundStream)
{
soundStream->Stop();
if (ac_Config.m_DumpAudio)
if (SConfig::GetInstance().m_DumpAudio)
soundStream->GetMixer()->StopLogAudio();
//soundStream->StopLogAudio();
delete soundStream;
@@ -96,18 +100,22 @@ namespace AudioCommon
{
std::vector<std::string> backends;
if (NullSound::isValid())
if (NullSound::isValid())
backends.push_back(BACKEND_NULLSOUND);
if (DSound::isValid())
if (DSound::isValid())
backends.push_back(BACKEND_DIRECTSOUND);
if (XAudio2::isValid())
if (XAudio2::isValid())
backends.push_back(BACKEND_XAUDIO2);
if (AOSound::isValid())
if (AOSound::isValid())
backends.push_back(BACKEND_AOSOUND);
if (AlsaSound::isValid())
if (AlsaSound::isValid())
backends.push_back(BACKEND_ALSA);
if (CoreAudioSound::isValid())
if (CoreAudioSound::isValid())
backends.push_back(BACKEND_COREAUDIO);
if (PulseAudio::isValid())
backends.push_back(BACKEND_PULSEAUDIO);
if (OpenALStream::isValid())
backends.push_back(BACKEND_OPENAL);
return backends;
}
@@ -118,7 +126,7 @@ namespace AudioCommon
{
return true;
}
return ac_Config.m_EnableJIT;
return SConfig::GetInstance().m_EnableJIT;
}
void PauseAndLock(bool doLock, bool unpauseOnUnlock)
@@ -139,4 +147,12 @@ namespace AudioCommon
}
}
}
void UpdateSoundStream()
{
if (soundStream)
{
soundStream->GetMixer()->SetThrottle(SConfig::GetInstance().m_Framelimit == 2);
soundStream->SetVolume(SConfig::GetInstance().m_Volume);
}
}
}
+1 -2
View File
@@ -19,14 +19,12 @@
#define _AUDIO_COMMON_H_
#include "Common.h"
#include "AudioCommonConfig.h"
#include "SoundStream.h"
class CMixer;
extern SoundStream *soundStream;
extern AudioCommonConfig ac_Config;
// UDSPControl
union UDSPControl
@@ -60,6 +58,7 @@ namespace AudioCommon
std::vector<std::string> GetSoundBackends();
bool UseJIT();
void PauseAndLock(bool doLock, bool unpauseOnUnlock=true);
void UpdateSoundStream();
}
#endif // _AUDIO_COMMON_H_
@@ -1,70 +0,0 @@
// Copyright (C) 2003 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 "AudioCommon.h"
#include "CommonPaths.h"
#include "FileUtil.h"
#include "../../Core/Src/ConfigManager.h"
AudioCommonConfig ac_Config;
// This shouldn't be a global, at least not here.
SoundStream *soundStream;
// Load from given file
void AudioCommonConfig::Load()
{
IniFile file;
file.Load(File::GetUserPath(F_DSPCONFIG_IDX));
file.Get("Config", "EnableJIT", &m_EnableJIT, true);
file.Get("Config", "DumpAudio", &m_DumpAudio, false);
#if defined __linux__ && HAVE_ALSA
file.Get("Config", "Backend", &sBackend, BACKEND_ALSA);
#elif defined __APPLE__
file.Get("Config", "Backend", &sBackend, BACKEND_COREAUDIO);
#elif defined _WIN32
file.Get("Config", "Backend", &sBackend, BACKEND_DIRECTSOUND);
#else
file.Get("Config", "Backend", &sBackend, BACKEND_NULLSOUND);
#endif
file.Get("Config", "Frequency", &iFrequency, 48000);
file.Get("Config", "Volume", &m_Volume, 100);
}
// Set the values for the file
void AudioCommonConfig::SaveSettings()
{
IniFile file;
file.Load(File::GetUserPath(F_DSPCONFIG_IDX));
file.Set("Config", "EnableJIT", m_EnableJIT);
file.Set("Config", "DumpAudio", m_DumpAudio);
file.Set("Config", "Backend", sBackend);
file.Set("Config", "Frequency", iFrequency);
file.Set("Config", "Volume", m_Volume);
file.Save(File::GetUserPath(F_DSPCONFIG_IDX));
}
// Update according to the values (stream/mixer)
void AudioCommonConfig::Update() {
if (soundStream) {
soundStream->GetMixer()->SetThrottle(SConfig::GetInstance().m_Framelimit == 2);
soundStream->SetVolume(m_Volume);
}
}
@@ -1,52 +0,0 @@
// Copyright (C) 2003 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/
#ifndef _AUDIO_COMMON_CONFIG_H_
#define _AUDIO_COMMON_CONFIG_H_
#include <string>
#include "IniFile.h"
// Backend Types
#define BACKEND_NULLSOUND "No audio output"
#define BACKEND_ALSA "ALSA"
#define BACKEND_AOSOUND "AOSound"
#define BACKEND_COREAUDIO "CoreAudio"
#define BACKEND_DIRECTSOUND "DSound"
#define BACKEND_OPENAL "OpenAL"
#define BACKEND_PULSEAUDIO "Pulse"
#define BACKEND_XAUDIO2 "XAudio2"
struct AudioCommonConfig
{
bool m_EnableJIT;
bool m_DumpAudio;
int m_Volume;
std::string sBackend;
int iFrequency;
// Load from given file
void Load();
// Self explanatory
void SaveSettings();
// Update according to the values (stream/mixer)
void Update();
};
#endif //AUDIO_COMMON_CONFIG
+400
View File
@@ -0,0 +1,400 @@
// Copyright (C) 2003 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/
// Dolby Pro Logic 2 decoder from ffdshow-tryout
// * Copyright 2001 Anders Johansson [email protected]
// * Copyright (c) 2004-2006 Milan Cutka
// * based on mplayer HRTF plugin by ylai
#include <functional>
#include <vector>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "DPL2Decoder.h"
#define M_PI 3.14159265358979323846
#define M_SQRT1_2 0.70710678118654752440
int olddelay = -1;
unsigned int oldfreq = 0;
unsigned int dlbuflen;
int cyc_pos;
float l_fwr, r_fwr, lpr_fwr, lmr_fwr;
std::vector<float> fwrbuf_l, fwrbuf_r;
float adapt_l_gain, adapt_r_gain, adapt_lpr_gain, adapt_lmr_gain;
std::vector<float> lf, rf, lr, rr, cf, cr;
float LFE_buf[256];
unsigned int lfe_pos;
float *filter_coefs_lfe;
unsigned int len125;
template<class T,class _ftype_t> static _ftype_t dotproduct(int count,const T *buf,const _ftype_t *coefficients)
{
float sum0=0,sum1=0,sum2=0,sum3=0;
for (;count>=4;buf+=4,coefficients+=4,count-=4)
{
sum0+=buf[0]*coefficients[0];
sum1+=buf[1]*coefficients[1];
sum2+=buf[2]*coefficients[2];
sum3+=buf[3]*coefficients[3];
}
while (count--) sum0+= *buf++ * *coefficients++;
return sum0+sum1+sum2+sum3;
}
template<class T> static T firfilter(const T *buf, int pos, int len, int count, const float *coefficients)
{
int count1, count2;
if (pos >= count)
{
pos -= count;
count1 = count; count2 = 0;
}
else
{
count2 = pos;
count1 = count - pos;
pos = len - count1;
}
// high part of window
const T *ptr = &buf[pos];
float r1=dotproduct(count1,ptr,coefficients);coefficients+=count1;
float r2=dotproduct(count2,buf,coefficients);
return T(r1+r2);
}
template<class T> inline const T& limit(const T& val, const T& min, const T& max)
{
if (val < min) {
return min;
} else if (val > max) {
return max;
} else {
return val;
}
}
/*
// Hamming
// 2*pi*k
// w(k) = 0.54 - 0.46*cos(------), where 0 <= k < N
// N-1
//
// n window length
// w buffer for the window parameters
*/
void hamming(int n, float* w)
{
int i;
float k = float(2*M_PI/((float)(n-1))); // 2*pi/(N-1)
// Calculate window coefficients
for (i=0; i<n; i++)
*w++ = float(0.54 - 0.46*cos(k*(float)i));
}
/******************************************************************************
* FIR filter design
******************************************************************************/
/* Design FIR filter using the Window method
n filter length must be odd for HP and BS filters
w buffer for the filter taps (must be n long)
fc cutoff frequencies (1 for LP and HP, 2 for BP and BS)
0 < fc < 1 where 1 <=> Fs/2
flags window and filter type as defined in filter.h
variables are ored together: i.e. LP|HAMMING will give a
low pass filter designed using a hamming window
opt beta constant used only when designing using kaiser windows
returns 0 if OK, -1 if fail
*/
float* design_fir(unsigned int *n, float* fc, float opt)
{
unsigned int o = *n & 1; // Indicator for odd filter length
unsigned int end = ((*n + 1) >> 1) - o; // Loop end
unsigned int i; // Loop index
float k1 = 2 * float(M_PI); // 2*pi*fc1
float k2 = 0.5f * (float)(1 - o);// Constant used if the filter has even length
float g = 0.0f; // Gain
float t1; // Temporary variables
float fc1; // Cutoff frequencies
// Sanity check
if(*n==0) return NULL;
fc[0]=limit(fc[0],float(0.001),float(1));
float *w=(float*)calloc(sizeof(float),*n);
// Get window coefficients
hamming(*n,w);
fc1=*fc;
// Cutoff frequency must be < 0.5 where 0.5 <=> Fs/2
fc1 = ((fc1 <= 1.0) && (fc1 > 0.0)) ? fc1/2 : 0.25f;
k1 *= fc1;
// Low pass filter
// If the filter length is odd, there is one point which is exactly
// in the middle. The value at this point is 2*fCutoff*sin(x)/x,
// where x is zero. To make sure nothing strange happens, we set this
// value separately.
if (o)
{
w[end] = fc1 * w[end] * 2.0f;
g=w[end];
}
// Create filter
for (i=0 ; i<end ; i++)
{
t1 = (float)(i+1) - k2;
w[end-i-1] = w[*n-end+i] = float(w[end-i-1] * sin(k1 * t1)/(M_PI * t1)); // Sinc
g += 2*w[end-i-1]; // Total gain in filter
}
// Normalize gain
g=1/g;
for (i=0; i<*n; i++)
w[i] *= g;
return w;
}
void onSeek(void)
{
l_fwr = r_fwr = lpr_fwr = lmr_fwr = 0;
std::fill(fwrbuf_l.begin(), fwrbuf_l.end(), 0.0f);
std::fill(fwrbuf_r.begin(), fwrbuf_r.end(), 0.0f);
adapt_l_gain = adapt_r_gain = adapt_lpr_gain = adapt_lmr_gain = 0;
std::fill(lf.begin(), lf.end(), 0.0f);
std::fill(rf.begin(), rf.end(), 0.0f);
std::fill(lr.begin(), lr.end(), 0.0f);
std::fill(rr.begin(), rr.end(), 0.0f);
std::fill(cf.begin(), cf.end(), 0.0f);
std::fill(cr.begin(), cr.end(), 0.0f);
lfe_pos = 0;
memset(LFE_buf, 0, sizeof(LFE_buf));
}
void done(void)
{
onSeek();
if (filter_coefs_lfe)
{
free(filter_coefs_lfe);
}
filter_coefs_lfe = NULL;
}
float* calc_coefficients_125Hz_lowpass(int rate)
{
len125 = 256;
float f = 125.0f / (rate / 2);
float *coeffs = design_fir(&len125, &f, 0);
static const float M3_01DB = 0.7071067812f;
for (unsigned int i = 0; i < len125; i++)
{
coeffs[i] *= M3_01DB;
}
return coeffs;
}
float passive_lock(float x)
{
static const float MATAGCLOCK = 0.2f; /* AGC range (around 1) where the matrix behaves passively */
const float x1 = x - 1;
const float ax1s = fabs(x - 1) * (1.0f / MATAGCLOCK);
return x1 - x1 / (1 + ax1s * ax1s) + 1;
}
void matrix_decode(const float *in, const int k, const int il,
const int ir, bool decode_rear,
const int dlbuflen,
float l_fwr, float r_fwr,
float lpr_fwr, float lmr_fwr,
float *adapt_l_gain, float *adapt_r_gain,
float *adapt_lpr_gain, float *adapt_lmr_gain,
float *lf, float *rf, float *lr,
float *rr, float *cf)
{
static const float M9_03DB = 0.3535533906f;
static const float MATAGCTRIG = 8.0f; /* (Fuzzy) AGC trigger */
static const float MATAGCDECAY = 1.0f; /* AGC baseline decay rate (1/samp.) */
static const float MATCOMPGAIN = 0.37f; /* Cross talk compensation gain, 0.50 - 0.55 is full cancellation. */
const int kr = (k + olddelay) % dlbuflen;
float l_gain = (l_fwr + r_fwr) / (1 + l_fwr + l_fwr);
float r_gain = (l_fwr + r_fwr) / (1 + r_fwr + r_fwr);
/* The 2nd axis has strong gain fluctuations, and therefore require
limits. The factor corresponds to the 1 / amplification of (Lt
- Rt) when (Lt, Rt) is strongly correlated. (e.g. during
dialogues). It should be bigger than -12 dB to prevent
distortion. */
float lmr_lim_fwr = lmr_fwr > M9_03DB * lpr_fwr ? lmr_fwr : M9_03DB * lpr_fwr;
float lpr_gain = (lpr_fwr + lmr_lim_fwr) / (1 + lpr_fwr + lpr_fwr);
float lmr_gain = (lpr_fwr + lmr_lim_fwr) / (1 + lmr_lim_fwr + lmr_lim_fwr);
float lmr_unlim_gain = (lpr_fwr + lmr_fwr) / (1 + lmr_fwr + lmr_fwr);
float lpr, lmr;
float l_agc, r_agc, lpr_agc, lmr_agc;
float f, d_gain, c_gain, c_agc_cfk;
/*** AXIS NO. 1: (Lt, Rt) -> (C, Ls, Rs) ***/
/* AGC adaption */
d_gain = (fabs(l_gain - *adapt_l_gain) + fabs(r_gain - *adapt_r_gain)) * 0.5f;
f = d_gain * (1.0f / MATAGCTRIG);
f = MATAGCDECAY - MATAGCDECAY / (1 + f * f);
*adapt_l_gain = (1 - f) * *adapt_l_gain + f * l_gain;
*adapt_r_gain = (1 - f) * *adapt_r_gain + f * r_gain;
/* Matrix */
l_agc = in[il] * passive_lock(*adapt_l_gain);
r_agc = in[ir] * passive_lock(*adapt_r_gain);
cf[k] = (l_agc + r_agc) * (float)M_SQRT1_2;
if (decode_rear)
{
lr[kr] = rr[kr] = (l_agc - r_agc) * (float)M_SQRT1_2;
/* Stereo rear channel is steered with the same AGC steering as
the decoding matrix. Note this requires a fast updating AGC
at the order of 20 ms (which is the case here). */
lr[kr] *= (l_fwr + l_fwr) / (1 + l_fwr + r_fwr);
rr[kr] *= (r_fwr + r_fwr) / (1 + l_fwr + r_fwr);
}
/*** AXIS NO. 2: (Lt + Rt, Lt - Rt) -> (L, R) ***/
lpr = (in[il] + in[ir]) * (float)M_SQRT1_2;
lmr = (in[il] - in[ir]) * (float)M_SQRT1_2;
/* AGC adaption */
d_gain = fabs(lmr_unlim_gain - *adapt_lmr_gain);
f = d_gain * (1.0f / MATAGCTRIG);
f = MATAGCDECAY - MATAGCDECAY / (1 + f * f);
*adapt_lpr_gain = (1 - f) * *adapt_lpr_gain + f * lpr_gain;
*adapt_lmr_gain = (1 - f) * *adapt_lmr_gain + f * lmr_gain;
/* Matrix */
lpr_agc = lpr * passive_lock(*adapt_lpr_gain);
lmr_agc = lmr * passive_lock(*adapt_lmr_gain);
lf[k] = (lpr_agc + lmr_agc) * (float)M_SQRT1_2;
rf[k] = (lpr_agc - lmr_agc) * (float)M_SQRT1_2;
/*** CENTER FRONT CANCELLATION ***/
/* A heuristic approach exploits that Lt + Rt gain contains the
information about Lt, Rt correlation. This effectively reshapes
the front and rear "cones" to concentrate Lt + Rt to C and
introduce Lt - Rt in L, R. */
/* 0.67677 is the empirical lower bound for lpr_gain. */
c_gain = 8 * (*adapt_lpr_gain - 0.67677f);
c_gain = c_gain > 0 ? c_gain : 0;
/* c_gain should not be too high, not even reaching full
cancellation (~ 0.50 - 0.55 at current AGC implementation), or
the center will sound too narrow. */
c_gain = MATCOMPGAIN / (1 + c_gain * c_gain);
c_agc_cfk = c_gain * cf[k];
lf[k] -= c_agc_cfk;
rf[k] -= c_agc_cfk;
cf[k] += c_agc_cfk + c_agc_cfk;
}
void dpl2decode(float *samples, int numsamples, float *out)
{
static const unsigned int FWRDURATION = 240; /* FWR average duration (samples) */
static const int cfg_delay = 0;
static const unsigned int fmt_freq = 48000;
static const unsigned int fmt_nchannels = 2; // input channels
int cur = 0;
if (olddelay != cfg_delay || oldfreq != fmt_freq)
{
done();
olddelay = cfg_delay;
oldfreq = fmt_freq;
dlbuflen = std::max(FWRDURATION, (fmt_freq * cfg_delay / 1000)); //+(len7000-1);
cyc_pos = dlbuflen - 1;
fwrbuf_l.resize(dlbuflen);
fwrbuf_r.resize(dlbuflen);
lf.resize(dlbuflen);
rf.resize(dlbuflen);
lr.resize(dlbuflen);
rr.resize(dlbuflen);
cf.resize(dlbuflen);
cr.resize(dlbuflen);
filter_coefs_lfe = calc_coefficients_125Hz_lowpass(fmt_freq);
lfe_pos = 0;
memset(LFE_buf, 0, sizeof(LFE_buf));
}
float *in = samples; // Input audio data
float *end = in + numsamples * fmt_nchannels; // Loop end
while (in < end)
{
const int k = cyc_pos;
const int fwr_pos = (k + FWRDURATION) % dlbuflen;
/* Update the full wave rectified total amplitude */
/* Input matrix decoder */
l_fwr += fabs(in[0]) - fabs(fwrbuf_l[fwr_pos]);
r_fwr += fabs(in[1]) - fabs(fwrbuf_r[fwr_pos]);
lpr_fwr += fabs(in[0] + in[1]) - fabs(fwrbuf_l[fwr_pos] + fwrbuf_r[fwr_pos]);
lmr_fwr += fabs(in[0] - in[1]) - fabs(fwrbuf_l[fwr_pos] - fwrbuf_r[fwr_pos]);
/* Matrix encoded 2 channel sources */
fwrbuf_l[k] = in[0];
fwrbuf_r[k] = in[1];
matrix_decode(in, k, 0, 1, true, dlbuflen,
l_fwr, r_fwr,
lpr_fwr, lmr_fwr,
&adapt_l_gain, &adapt_r_gain,
&adapt_lpr_gain, &adapt_lmr_gain,
&lf[0], &rf[0], &lr[0], &rr[0], &cf[0]);
out[cur + 0] = lf[k];
out[cur + 1] = rf[k];
out[cur + 2] = cf[k];
LFE_buf[lfe_pos] = (out[0] + out[1]) / 2;
out[cur + 3] = firfilter(LFE_buf, lfe_pos, len125, len125, filter_coefs_lfe);
lfe_pos++;
if (lfe_pos == len125)
{
lfe_pos = 0;
}
out[cur + 4] = lr[k];
out[cur + 5] = rr[k];
// Next sample...
in += 2;
cur += 6;
cyc_pos--;
if (cyc_pos < 0)
{
cyc_pos += dlbuflen;
}
}
}
void dpl2reset()
{
olddelay = -1;
oldfreq = 0;
filter_coefs_lfe = NULL;
}
+24
View File
@@ -0,0 +1,24 @@
// Copyright (C) 2003 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/
#ifndef _DPL2DECODER_H_
#define _DPL2DECODER_H_
void dpl2decode(float *samples, int numsamples, float *out);
void dpl2reset();
#endif // _DPL2DECODER_H_
+5
View File
@@ -92,6 +92,9 @@ public:
std::mutex& MixerCritical() { return m_csMixing; }
volatile float GetCurrentSpeed() const { return m_speed; }
void UpdateSpeed(volatile float val) { m_speed = val; }
protected:
unsigned int m_sampleRate;
unsigned int m_aiSampleRate;
@@ -113,6 +116,8 @@ protected:
bool m_AIplaying;
std::mutex m_csMixing;
volatile float m_speed; // Current rate of the emulation (1.0 = 100% speed)
private:
};
+189 -32
View File
@@ -15,13 +15,14 @@
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
#include <functional>
#include "aldlist.h"
#include "OpenALStream.h"
#include "DPL2Decoder.h"
#if defined HAVE_OPENAL && HAVE_OPENAL
soundtouch::SoundTouch soundTouch;
//
// AyuanX: Spec says OpenAL1.1 is thread safe already
//
@@ -35,14 +36,21 @@ bool OpenALStream::Start()
pDeviceList = new ALDeviceList();
if ((pDeviceList) && (pDeviceList->GetNumDevices()))
{
char *defDevName = pDeviceList-> \
GetDeviceName(pDeviceList->GetDefaultDevice());
char *defDevName = pDeviceList->GetDeviceName(pDeviceList->GetDefaultDevice());
WARN_LOG(AUDIO, "Found OpenAL device %s", defDevName);
pDevice = alcOpenDevice(defDevName);
if (pDevice)
{
pContext = alcCreateContext(pDevice, NULL);
if (pContext)
{
// Used to determine an appropriate period size (2x period = total buffer size)
//ALCint refresh;
//alcGetIntegerv(pDevice, ALC_REFRESH, 1, &refresh);
//period_size_in_millisec = 1000 / refresh;
alcMakeContextCurrent(pContext);
thread = std::thread(std::mem_fun(&OpenALStream::SoundLoop), this);
bReturn = true;
@@ -50,8 +58,7 @@ bool OpenALStream::Start()
else
{
alcCloseDevice(pDevice);
PanicAlertT("OpenAL: can't create context "
"for device %s", defDevName);
PanicAlertT("OpenAL: can't create context for device %s", defDevName);
}
}
else
@@ -65,6 +72,10 @@ bool OpenALStream::Start()
PanicAlertT("OpenAL: can't find sound devices");
}
// Initialise DPL2 parameters
dpl2reset();
soundTouch.clear();
return bReturn;
}
@@ -74,6 +85,8 @@ void OpenALStream::Stop()
// kick the thread if it's waiting
soundSyncEvent.Set();
soundTouch.clear();
thread.join();
alSourceStop(uiSource);
@@ -82,7 +95,7 @@ void OpenALStream::Stop()
// Clean up buffers and sources
alDeleteSources(1, &uiSource);
uiSource = 0;
alDeleteBuffers(OAL_NUM_BUFFERS, uiBuffers);
alDeleteBuffers(numBuffers, uiBuffers);
ALCcontext *pContext = alcGetCurrentContext();
ALCdevice *pDevice = alcGetContextsDevice(pContext);
@@ -111,6 +124,7 @@ void OpenALStream::Clear(bool mute)
if(m_muted)
{
soundTouch.clear();
alSourceStop(uiSource);
}
else
@@ -124,20 +138,29 @@ void OpenALStream::SoundLoop()
Common::SetCurrentThreadName("Audio thread - openal");
u32 ulFrequency = m_mixer->GetSampleRate();
numBuffers = Core::g_CoreStartupParameter.iLatency + 2; // OpenAL requires a minimum of two buffers
memset(uiBuffers, 0, OAL_NUM_BUFFERS * sizeof(ALuint));
memset(uiBuffers, 0, numBuffers * sizeof(ALuint));
uiSource = 0;
// Generate some AL Buffers for streaming
alGenBuffers(OAL_NUM_BUFFERS, (ALuint *)uiBuffers);
alGenBuffers(numBuffers, (ALuint *)uiBuffers);
// Generate a Source to playback the Buffers
alGenSources(1, &uiSource);
// Short Silence
memset(sampleBuffer, 0, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * numBuffers);
memset(realtimeBuffer, 0, OAL_MAX_SAMPLES * 4);
for (int i = 0; i < OAL_NUM_BUFFERS; i++)
alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, OAL_MAX_SAMPLES, ulFrequency);
alSourceQueueBuffers(uiSource, OAL_NUM_BUFFERS, uiBuffers);
for (int i = 0; i < numBuffers; i++)
{
#if !defined(__APPLE__)
if (Core::g_CoreStartupParameter.bDPL2Decoder)
alBufferData(uiBuffers[i], AL_FORMAT_51CHN32, sampleBuffer, 4 * SIZE_FLOAT * SURROUND_CHANNELS, ulFrequency);
else
#endif
alBufferData(uiBuffers[i], AL_FORMAT_STEREO16, realtimeBuffer, 4 * 2 * 2, ulFrequency);
}
alSourceQueueBuffers(uiSource, numBuffers, uiBuffers);
alSourcePlay(uiSource);
// Set the default sound volume as saved in the config file.
@@ -148,41 +171,175 @@ void OpenALStream::SoundLoop()
ALint iBuffersFilled = 0;
ALint iBuffersProcessed = 0;
ALuint uiBufferTemp[OAL_NUM_BUFFERS] = {0};
ALint iState = 0;
ALuint uiBufferTemp[OAL_MAX_BUFFERS] = {0};
soundTouch.setChannels(2);
soundTouch.setSampleRate(ulFrequency);
soundTouch.setTempo(1.0);
soundTouch.setSetting(SETTING_USE_QUICKSEEK, 0);
soundTouch.setSetting(SETTING_USE_AA_FILTER, 0);
soundTouch.setSetting(SETTING_SEQUENCE_MS, 1);
soundTouch.setSetting(SETTING_SEEKWINDOW_MS, 28);
soundTouch.setSetting(SETTING_OVERLAP_MS, 12);
bool surround_capable = Core::g_CoreStartupParameter.bDPL2Decoder;
#if defined(__APPLE__)
bool float32_capable = false;
#else
bool float32_capable = true;
#endif
while (!threadData)
{
// num_samples_to_render in this update - depends on SystemTimers::AUDIO_DMA_PERIOD.
const u32 stereo_16_bit_size = 4;
const u32 dma_length = 32;
const u64 ais_samples_per_second = 48000 * stereo_16_bit_size;
u64 audio_dma_period = SystemTimers::GetTicksPerSecond() / (AudioInterface::GetAIDSampleRate() * stereo_16_bit_size / dma_length);
u64 num_samples_to_render = (audio_dma_period * ais_samples_per_second) / SystemTimers::GetTicksPerSecond();
unsigned int numSamples = (unsigned int)num_samples_to_render;
numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples;
numSamples = m_mixer->Mix(realtimeBuffer, numSamples);
// Convert the samples from short to float
float dest[OAL_MAX_SAMPLES * 2 * 2 * OAL_MAX_BUFFERS];
for (u32 i = 0; i < numSamples; ++i)
{
dest[i * 2 + 0] = (float)realtimeBuffer[i * 2 + 0] / (1 << 16);
dest[i * 2 + 1] = (float)realtimeBuffer[i * 2 + 1] / (1 << 16);
}
soundTouch.putSamples(dest, numSamples);
if (iBuffersProcessed == iBuffersFilled)
{
alGetSourcei(uiSource, AL_BUFFERS_PROCESSED, &iBuffersProcessed);
iBuffersFilled = 0;
}
unsigned int numSamples = m_mixer->GetNumSamples();
if (iBuffersProcessed && (numSamples >= OAL_THRESHOLD))
if (iBuffersProcessed)
{
numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples;
// Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer)
if (iBuffersFilled == 0)
alSourceUnqueueBuffers(uiSource, iBuffersProcessed, uiBufferTemp);
float rate = m_mixer->GetCurrentSpeed();
if (rate <= 0)
{
Core::RequestRefreshInfo();
rate = m_mixer->GetCurrentSpeed();
}
m_mixer->Mix(realtimeBuffer, numSamples);
alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, realtimeBuffer, numSamples * 4, ulFrequency);
alSourceQueueBuffers(uiSource, 1, &uiBufferTemp[iBuffersFilled]);
iBuffersFilled++;
// Place a lower limit of 10% speed. When a game boots up, there will be
// many silence samples. These do not need to be timestretched.
if (rate > 0.10)
{
// Adjust SETTING_SEQUENCE_MS to balance between lag vs hollow audio
soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate)));
soundTouch.setTempo(rate);
}
unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS);
if (nSamples > 0)
{
// Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer)
if (iBuffersFilled == 0)
{
alSourceUnqueueBuffers(uiSource, iBuffersProcessed, uiBufferTemp);
ALenum err = alGetError();
if (err != 0)
{
ERROR_LOG(AUDIO, "Error unqueuing buffers: %08x", err);
}
}
#if defined(__APPLE__)
// OSX does not have the alext AL_FORMAT_51CHN32 yet.
surround_capable = false;
#else
if (surround_capable)
{
float dpl2[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS];
dpl2decode(sampleBuffer, nSamples, dpl2);
if (iBuffersFilled == OAL_NUM_BUFFERS)
alSourcePlay(uiSource);
alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_51CHN32, dpl2, nSamples * SIZE_FLOAT * SURROUND_CHANNELS, ulFrequency);
ALenum err = alGetError();
if (err == AL_INVALID_ENUM)
{
// 5.1 is not supported by the host, fallback to stereo
WARN_LOG(AUDIO, "Unable to set 5.1 surround mode. Updating OpenAL Soft might fix this issue.");
surround_capable = false;
}
else if (err != 0)
{
ERROR_LOG(AUDIO, "Error occurred while buffering data: %08x", err);
}
}
#endif
if (!surround_capable)
{
#if !defined(__APPLE__)
if (float32_capable)
{
alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO_FLOAT32, sampleBuffer, nSamples * 4 * 2, ulFrequency);
ALenum err = alGetError();
if (err == AL_INVALID_ENUM)
{
float32_capable = false;
}
else if (err != 0)
{
ERROR_LOG(AUDIO, "Error occurred while buffering float32 data: %08x", err);
}
}
#endif
if (!float32_capable)
{
// Convert the samples from float to short
short stereo[OAL_MAX_SAMPLES * 2 * 2 * OAL_MAX_BUFFERS];
for (u32 i = 0; i < nSamples; ++i)
{
stereo[i * 2 + 0] = (short)((float)sampleBuffer[i * 2 + 0] * (1 << 16));
stereo[i * 2 + 1] = (short)((float)sampleBuffer[i * 2 + 1] * (1 << 16));
}
alBufferData(uiBufferTemp[iBuffersFilled], AL_FORMAT_STEREO16, stereo, nSamples * 2 * 2, ulFrequency);
}
}
alSourceQueueBuffers(uiSource, 1, &uiBufferTemp[iBuffersFilled]);
ALenum err = alGetError();
if (err != 0)
{
ERROR_LOG(AUDIO, "Error queuing buffers: %08x", err);
}
iBuffersFilled++;
if (iBuffersFilled == numBuffers)
{
alSourcePlay(uiSource);
ALenum err = alGetError();
if (err != 0)
{
ERROR_LOG(AUDIO, "Error occurred during playback: %08x", err);
}
}
alGetSourcei(uiSource, AL_SOURCE_STATE, &iState);
if (iState != AL_PLAYING)
{
// Buffer underrun occurred, resume playback
alSourcePlay(uiSource);
ALenum err = alGetError();
if (err != 0)
{
ERROR_LOG(AUDIO, "Error occurred resuming playback: %08x", err);
}
}
}
}
else if (numSamples >= OAL_THRESHOLD)
else
{
ALint state = 0;
alGetSourcei(uiSource, AL_SOURCE_STATE, &state);
if (state == AL_STOPPED)
alSourcePlay(uiSource);
soundSyncEvent.Wait();
}
soundSyncEvent.Wait();
}
}
+19 -7
View File
@@ -24,21 +24,30 @@
#if defined HAVE_OPENAL && HAVE_OPENAL
#ifdef _WIN32
#include "../../../../Externals/OpenAL/include/al.h"
#include "../../../../Externals/OpenAL/include/alc.h"
#include <OpenAL/include/al.h>
#include <OpenAL/include/alc.h>
#include <OpenAL/include/alext.h>
#elif defined __APPLE__
#include <OpenAL/al.h>
#include <OpenAL/alc.h>
#else
#include <AL/al.h>
#include <AL/alc.h>
#include <AL/alext.h>
#endif
#include "Core.h"
#include "HW/SystemTimers.h"
#include "HW/AudioInterface.h"
#include <soundtouch/SoundTouch.h>
#include <soundtouch/STTypes.h>
// 16 bit Stereo
#define SFX_MAX_SOURCE 1
#define OAL_NUM_BUFFERS 16
#define OAL_MAX_SAMPLES 512 // AyuanX: Don't make it too large, as larger buffer means longer delay
#define OAL_THRESHOLD 128 // Some games are quite sensitive to delay
#define OAL_MAX_BUFFERS 32
#define OAL_MAX_SAMPLES 256
#define SURROUND_CHANNELS 6 // number of channels in surround mode
#define SIZE_FLOAT 4 // size of a float in bytes
#endif
class OpenALStream: public SoundStream
@@ -64,11 +73,14 @@ public:
private:
std::thread thread;
Common::Event soundSyncEvent;
short realtimeBuffer[OAL_MAX_SAMPLES * 2];
ALuint uiBuffers[OAL_NUM_BUFFERS];
soundtouch::SAMPLETYPE sampleBuffer[OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS];
ALuint uiBuffers[OAL_MAX_BUFFERS];
ALuint uiSource;
ALfloat fVolume;
u8 numBuffers;
#else
public:
OpenALStream(CMixer *mixer, void *hWnd = NULL): SoundStream(mixer) {}
+43 -250
View File
@@ -22,31 +22,31 @@
#include "PulseAudioStream.h"
#define BUFFER_SIZE 4096
#define BUFFER_SIZE_BYTES (BUFFER_SIZE * 4)
namespace
{
const size_t BUFFER_SAMPLES = 512;
const size_t CHANNEL_COUNT = 2;
const size_t BUFFER_SIZE = BUFFER_SAMPLES * CHANNEL_COUNT;
}
PulseAudio::PulseAudio(CMixer *mixer)
: SoundStream(mixer), thread_running(false), mainloop(NULL)
, context(NULL), stream(NULL), iVolume(100)
{
mix_buffer = new u8[BUFFER_SIZE_BYTES];
}
PulseAudio::~PulseAudio()
{
delete [] mix_buffer;
}
: SoundStream(mixer)
, mix_buffer(BUFFER_SIZE)
, thread()
, run_thread()
, pa()
{}
bool PulseAudio::Start()
{
thread_running = true;
run_thread = true;
thread = std::thread(std::mem_fun(&PulseAudio::SoundLoop), this);
return true;
}
void PulseAudio::Stop()
{
thread_running = false;
run_thread = false;
thread.join();
}
@@ -60,260 +60,53 @@ void PulseAudio::SoundLoop()
{
Common::SetCurrentThreadName("Audio thread - pulse");
thread_running = PulseInit();
while (thread_running)
if (PulseInit())
{
int frames_to_deliver = 512;
m_mixer->Mix((short *)mix_buffer, frames_to_deliver);
if (!Write(mix_buffer, frames_to_deliver * 4))
ERROR_LOG(AUDIO, "PulseAudio failure writing data");
while (run_thread)
{
m_mixer->Mix(&mix_buffer[0], mix_buffer.size() / CHANNEL_COUNT);
Write(&mix_buffer[0], mix_buffer.size() * sizeof(s16));
}
PulseShutdown();
}
PulseShutdown();
}
bool PulseAudio::PulseInit()
{
// The Sample format to use
const pa_sample_spec ss =
pa_sample_spec ss = {};
ss.format = PA_SAMPLE_S16LE;
ss.channels = 2;
ss.rate = m_mixer->GetSampleRate();
int error;
pa = pa_simple_new(nullptr, "dolphin-emu", PA_STREAM_PLAYBACK,
nullptr, "audio", &ss, nullptr, nullptr, &error);
if (!pa)
{
PA_SAMPLE_S16LE,
m_mixer->GetSampleRate(),
2
};
mainloop = pa_threaded_mainloop_new();
context = pa_context_new(pa_threaded_mainloop_get_api(mainloop), "dolphin-emu");
pa_context_set_state_callback(context, ContextStateCB, this);
if (pa_context_connect(context, NULL, PA_CONTEXT_NOFLAGS, NULL) < 0)
{
ERROR_LOG(AUDIO, "PulseAudio failed to connect context: %s",
pa_strerror(pa_context_errno(context)));
ERROR_LOG(AUDIO, "PulseAudio failed to initialize: %s",
pa_strerror(error));
return false;
}
pa_threaded_mainloop_lock(mainloop);
pa_threaded_mainloop_start(mainloop);
for (;;)
else
{
pa_context_state_t state;
state = pa_context_get_state(context);
if (state == PA_CONTEXT_READY)
break;
if (!PA_CONTEXT_IS_GOOD(state))
{
ERROR_LOG(AUDIO, "PulseAudio context state failure: %s",
pa_strerror(pa_context_errno(context)));
pa_threaded_mainloop_unlock(mainloop);
return false;
}
// Wait until the context is ready
pa_threaded_mainloop_wait(mainloop);
NOTICE_LOG(AUDIO, "Pulse successfully initialized.");
return true;
}
if (!(stream = pa_stream_new(context, "emulator", &ss, NULL)))
{
ERROR_LOG(AUDIO, "PulseAudio failed to create playback stream: %s",
pa_strerror(pa_context_errno(context)));
pa_threaded_mainloop_unlock(mainloop);
return false;
}
// Set callbacks for the playback stream
pa_stream_set_state_callback(stream, StreamStateCB, this);
pa_stream_set_write_callback(stream, StreamWriteCB, this);
if (pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_NOFLAGS, NULL, NULL) < 0)
{
ERROR_LOG(AUDIO, "PulseAudio failed to connect playback stream: %s",
pa_strerror(pa_context_errno(context)));
pa_threaded_mainloop_unlock(mainloop);
return false;
}
for (;;)
{
pa_stream_state_t state;
state = pa_stream_get_state(stream);
if (state == PA_STREAM_READY)
break;
if (!PA_STREAM_IS_GOOD(state))
{
ERROR_LOG(AUDIO, "PulseAudio stream state failure: %s",
pa_strerror(pa_context_errno(context)));
pa_threaded_mainloop_unlock(mainloop);
return false;
}
// Wait until the stream is ready
pa_threaded_mainloop_wait(mainloop);
}
pa_threaded_mainloop_unlock(mainloop);
SetVolume(iVolume);
NOTICE_LOG(AUDIO, "Pulse successfully initialized.");
return true;
}
void PulseAudio::PulseShutdown()
{
if (mainloop)
pa_threaded_mainloop_stop(mainloop);
if (stream)
pa_stream_unref(stream);
if (context)
{
pa_context_disconnect(context);
pa_context_unref(context);
}
if (mainloop)
pa_threaded_mainloop_free(mainloop);
pa_simple_free(pa);
}
void PulseAudio::SignalMainLoop()
void PulseAudio::Write(const void *data, size_t length)
{
pa_threaded_mainloop_signal(mainloop, 0);
}
void PulseAudio::ContextStateCB(pa_context *c, void *userdata)
{
switch (pa_context_get_state(c))
int error;
if (pa_simple_write(pa, data, length, &error) < 0)
{
case PA_CONTEXT_READY:
case PA_CONTEXT_TERMINATED:
case PA_CONTEXT_FAILED:
((PulseAudio *)userdata)->SignalMainLoop();
break;
default:
break;
ERROR_LOG(AUDIO, "PulseAudio failed to write data: %s",
pa_strerror(error));
}
}
void PulseAudio::StreamStateCB(pa_stream *s, void * userdata)
{
switch (pa_stream_get_state(s))
{
case PA_STREAM_READY:
case PA_STREAM_TERMINATED:
case PA_STREAM_FAILED:
((PulseAudio *)userdata)->SignalMainLoop();
break;
default:
break;
}
}
void PulseAudio::StreamWriteCB(pa_stream *s, size_t length, void *userdata)
{
((PulseAudio *)userdata)->SignalMainLoop();
}
static bool StateIsGood(pa_context *context, pa_stream *stream)
{
if (!context || !PA_CONTEXT_IS_GOOD(pa_context_get_state(context)) ||
!stream || !PA_STREAM_IS_GOOD(pa_stream_get_state(stream)))
{
if ((context && pa_context_get_state(context) == PA_CONTEXT_FAILED) ||
(stream && pa_stream_get_state(stream) == PA_STREAM_FAILED))
{
ERROR_LOG(AUDIO, "PulseAudio state failure: %s",
pa_strerror(pa_context_errno(context)));
}
else
{
ERROR_LOG(AUDIO, "PulseAudio state failure: %s",
pa_strerror(PA_ERR_BADSTATE));
}
return false;
}
return true;
}
bool PulseAudio::Write(const void *data, size_t length)
{
if (!data || length == 0 || !stream)
return false;
pa_threaded_mainloop_lock(mainloop);
if (!StateIsGood(context, stream))
{
pa_threaded_mainloop_unlock(mainloop);
return false;
}
while (length > 0)
{
size_t l;
int r;
while (!(l = pa_stream_writable_size(stream)))
{
pa_threaded_mainloop_wait(mainloop);
if (!StateIsGood(context, stream))
{
pa_threaded_mainloop_unlock(mainloop);
return false;
}
}
if (l == (size_t)-1)
{
ERROR_LOG(AUDIO, "PulseAudio invalid stream: %s",
pa_strerror(pa_context_errno(context)));
pa_threaded_mainloop_unlock(mainloop);
return false;
}
if (l > length)
l = length;
r = pa_stream_write(stream, data, l, NULL, 0LL, PA_SEEK_RELATIVE);
if (r < 0)
{
ERROR_LOG(AUDIO, "PulseAudio error writing to stream: %s",
pa_strerror(pa_context_errno(context)));
pa_threaded_mainloop_unlock(mainloop);
return false;
}
data = (const uint8_t*) data + l;
length -= l;
}
pa_threaded_mainloop_unlock(mainloop);
return true;
}
void PulseAudio::SetVolume(int volume)
{
iVolume = volume;
if (!stream)
return;
pa_cvolume cvolume;
const pa_channel_map *channels = pa_stream_get_channel_map(stream);
pa_cvolume_set(&cvolume, channels->channels,
iVolume * (PA_VOLUME_NORM - PA_VOLUME_MUTED) / 100);
pa_context_set_sink_input_volume(context, pa_stream_get_index(stream),
&cvolume, NULL, this);
}
+9 -14
View File
@@ -19,7 +19,8 @@
#define _PULSE_AUDIO_STREAM_H
#if defined(HAVE_PULSEAUDIO) && HAVE_PULSEAUDIO
#include <pulse/pulseaudio.h>
#include <pulse/simple.h>
#include <pulse/error.h>
#endif
#include "Common.h"
@@ -27,16 +28,16 @@
#include "Thread.h"
#include <vector>
class PulseAudio : public SoundStream
{
#if defined(HAVE_PULSEAUDIO) && HAVE_PULSEAUDIO
public:
PulseAudio(CMixer *mixer);
virtual ~PulseAudio();
virtual bool Start();
virtual void Stop();
virtual void SetVolume(int volume);
static bool isValid() {return true;}
@@ -46,22 +47,16 @@ public:
private:
virtual void SoundLoop();
bool PulseInit();
void PulseShutdown();
bool Write(const void *data, size_t bytes);
void SignalMainLoop();
static void ContextStateCB(pa_context *c, void *userdata);
static void StreamStateCB(pa_stream *s, void * userdata);
static void StreamWriteCB(pa_stream *s, size_t length, void *userdata);
void Write(const void *data, size_t bytes);
u8 *mix_buffer;
std::vector<s16> mix_buffer;
std::thread thread;
volatile bool thread_running;
volatile bool run_thread;
pa_threaded_mainloop *mainloop;
pa_context *context;
pa_stream *stream;
int iVolume;
pa_simple* pa;
#else
public:
PulseAudio(CMixer *mixer) : SoundStream(mixer) {}
+2 -2
View File
@@ -48,7 +48,7 @@ ALDeviceList::ALDeviceList()
const char *actualDeviceName = NULL;
// DeviceInfo vector stores, for each enumerated device, it's device name, selection status, spec version #, and extension support
vDeviceInfo.empty();
vDeviceInfo.clear();
vDeviceInfo.reserve(10);
defaultDeviceIndex = 0;
@@ -151,7 +151,7 @@ ALDeviceList::~ALDeviceList()
}
}
vDeviceInfo.empty();
vDeviceInfo.clear();
}
/*
+2 -1
View File
@@ -81,8 +81,9 @@ private:
#define GC_ALIGNED16_DECL(x) __declspec(align(16)) x
#define GC_ALIGNED64_DECL(x) __declspec(align(64)) x
// Since it is always around on windows
// Since they are always around on windows
#define HAVE_WX 1
#define HAVE_OPENAL 1
#define HAVE_PORTAUDIO 1
+1 -1
View File
@@ -90,11 +90,11 @@
#define SHADERS_DIR "Shaders"
#define WII_SYSCONF_DIR "shared2" DIR_SEP "sys"
#define WII_WC24CONF_DIR "shared2" DIR_SEP "wc24"
#define THEMES_DIR "Themes"
// Filenames
// Files in the directory returned by GetUserPath(D_CONFIG_IDX)
#define DOLPHIN_CONFIG "Dolphin.ini"
#define DSP_CONFIG "DSP.ini"
#define DEBUGGER_CONFIG "Debugger.ini"
#define LOGGER_CONFIG "Logger.ini"
+18 -17
View File
@@ -25,6 +25,7 @@
#endif
#include <string>
#include <algorithm>
#include "FileSearch.h"
@@ -72,36 +73,36 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
#else
size_t dot_pos = _searchString.rfind(".");
// TODO: super lame/broken
if (dot_pos == std::string::npos)
return;
auto end_match(_searchString);
// assuming we have a "*.blah"-like pattern
if (!end_match.empty() && end_match[0] == '*')
end_match.erase(0, 1);
// ugly
if (end_match == ".*")
end_match.clear();
std::string ext = _searchString.substr(dot_pos);
DIR* dir = opendir(_strPath.c_str());
if (!dir)
return;
dirent* dp;
while (true)
while (auto const dp = readdir(dir))
{
dp = readdir(dir);
std::string found(dp->d_name);
if (!dp)
break;
std::string s(dp->d_name);
if ( (!ext.compare(".*") && s.compare(".") && s.compare("..")) ||
((s.size() > ext.size()) && (!strcasecmp(s.substr(s.size() - ext.size()).c_str(), ext.c_str())) ))
if ((found != ".") && (found != "..")
&& (found.size() >= end_match.size())
&& std::equal(end_match.rbegin(), end_match.rend(), found.rbegin()))
{
std::string full_name;
if (_strPath.c_str()[_strPath.size()-1] == DIR_SEP_CHR)
full_name = _strPath + s;
full_name = _strPath + found;
else
full_name = _strPath + DIR_SEP + s;
full_name = _strPath + DIR_SEP + found;
m_FileNames.push_back(full_name);
}
+1 -1
View File
@@ -678,10 +678,10 @@ std::string &GetUserPath(const unsigned int DirIDX, const std::string &newPath)
paths[D_DUMPDSP_IDX] = paths[D_USER_IDX] + DUMP_DSP_DIR DIR_SEP;
paths[D_LOGS_IDX] = paths[D_USER_IDX] + LOGS_DIR DIR_SEP;
paths[D_MAILLOGS_IDX] = paths[D_USER_IDX] + MAIL_LOGS_DIR DIR_SEP;
paths[D_THEMES_IDX] = paths[D_USER_IDX] + THEMES_DIR DIR_SEP;
paths[D_WIISYSCONF_IDX] = paths[D_WIIUSER_IDX] + WII_SYSCONF_DIR DIR_SEP;
paths[D_WIIWC24_IDX] = paths[D_WIIUSER_IDX] + WII_WC24CONF_DIR DIR_SEP;
paths[F_DOLPHINCONFIG_IDX] = paths[D_CONFIG_IDX] + DOLPHIN_CONFIG;
paths[F_DSPCONFIG_IDX] = paths[D_CONFIG_IDX] + DSP_CONFIG;
paths[F_DEBUGGERCONFIG_IDX] = paths[D_CONFIG_IDX] + DEBUGGER_CONFIG;
paths[F_LOGGERCONFIG_IDX] = paths[D_CONFIG_IDX] + LOGGER_CONFIG;
paths[F_MAINLOG_IDX] = paths[D_LOGS_IDX] + MAIN_LOG;
+1 -1
View File
@@ -51,8 +51,8 @@ enum {
D_MAILLOGS_IDX,
D_WIISYSCONF_IDX,
D_WIIWC24_IDX,
D_THEMES_IDX,
F_DOLPHINCONFIG_IDX,
F_DSPCONFIG_IDX,
F_DEBUGGERCONFIG_IDX,
F_LOGGERCONFIG_IDX,
F_MAINLOG_IDX,
+2 -1
View File
@@ -679,7 +679,8 @@ bool Subtype_MasterCodeAndWriteToCCXXXXXX(const ARAddr addr, const u32 data)
// u8 mcode_type = (data & 0xFF0000) >> 16;
// u8 mcode_count = (data & 0xFF00) >> 8;
// u8 mcode_number = data & 0xFF;
PanicAlertT("Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)", current_code->name.c_str());
PanicAlertT("Action Replay Error: Master Code and Write To CCXXXXXX not implemented (%s)\n"
"Master codes are not needed. Do not use master codes.", current_code->name.c_str());
return false;
}
+13
View File
@@ -257,6 +257,19 @@ bool CBoot::BootUp()
EmulatedBS2(_StartupPara.bWii);
}
// Scan for common HLE functions
if (_StartupPara.bSkipIdle && !_StartupPara.bEnableDebugging)
{
PPCAnalyst::FindFunctions(0x80004000, 0x811fffff, &g_symbolDB);
SignatureDB db;
if (db.Load((File::GetSysDirectory() + TOTALDB).c_str()))
{
db.Apply(&g_symbolDB);
HLE::PatchFunctions();
db.Clear();
}
}
/* Try to load the symbol map if there is one, and then scan it for
and eventually replace code */
if (LoadMapFromFilename(_StartupPara.m_strFilename, gameID))
+1 -1
View File
@@ -417,7 +417,7 @@ bool CBoot::EmulatedBS2_Wii()
u32 iLength = Memory::ReadUnchecked_U32(0x81300008);
u32 iDVDOffset = Memory::ReadUnchecked_U32(0x8130000c) << 2;
INFO_LOG(BOOT, "DVDRead: offset: %08x memOffse: %08x length: %i", iDVDOffset, iRamAddress, iLength);
INFO_LOG(BOOT, "DVDRead: offset: %08x memOffset: %08x length: %i", iDVDOffset, iRamAddress, iLength);
DVDInterface::DVDRead(iDVDOffset, iRamAddress, iLength);
} while(PowerPC::ppcState.gpr[3] != 0x00);
+9 -2
View File
@@ -55,8 +55,8 @@ namespace BootManager
struct ConfigCache
{
bool valid, bCPUThread, bSkipIdle, bEnableFPRF, bMMU, bMMUBAT,
bVBeam, bFastDiscSpeed, bMergeBlocks, bDSPHLE, bDisableWiimoteSpeaker;
int iTLBHack;
bVBeam, bFastDiscSpeed, bMergeBlocks, bDSPHLE, bDisableWiimoteSpeaker, bHLE_BS2;
int iTLBHack, iCPUCore;
std::string strBackend;
};
static ConfigCache config_cache;
@@ -89,6 +89,7 @@ bool BootCore(const std::string& _rFilename)
config_cache.valid = true;
config_cache.bCPUThread = StartUp.bCPUThread;
config_cache.bSkipIdle = StartUp.bSkipIdle;
config_cache.iCPUCore = StartUp.iCPUCore;
config_cache.bEnableFPRF = StartUp.bEnableFPRF;
config_cache.bMMU = StartUp.bMMU;
config_cache.bMMUBAT = StartUp.bMMUBAT;
@@ -99,6 +100,7 @@ bool BootCore(const std::string& _rFilename)
config_cache.bDSPHLE = StartUp.bDSPHLE;
config_cache.bDisableWiimoteSpeaker = StartUp.bDisableWiimoteSpeaker;
config_cache.strBackend = StartUp.m_strVideoBackend;
config_cache.bHLE_BS2 = StartUp.bHLE_BS2;
// General settings
game_ini.Get("Core", "CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread);
@@ -113,6 +115,8 @@ bool BootCore(const std::string& _rFilename)
game_ini.Get("Core", "DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE);
game_ini.Get("Wii", "DisableWiimoteSpeaker",&StartUp.bDisableWiimoteSpeaker, StartUp.bDisableWiimoteSpeaker);
game_ini.Get("Core", "GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend.c_str());
game_ini.Get("Core", "CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore);
game_ini.Get("Core", "HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2);
VideoBackend::ActivateBackend(StartUp.m_strVideoBackend);
if (Movie::IsPlayingInput() && Movie::IsConfigSaved())
@@ -122,6 +126,7 @@ bool BootCore(const std::string& _rFilename)
StartUp.bDSPHLE = Movie::IsDSPHLE();
StartUp.bProgressive = Movie::IsProgressive();
StartUp.bFastDiscSpeed = Movie::IsFastDiscSpeed();
StartUp.iCPUCore = Movie::GetCPUMode();
if (Movie::IsUsingMemcard() && Movie::IsStartingFromClearSave() && !StartUp.bWii)
{
if (File::Exists("Movie.raw"))
@@ -159,6 +164,7 @@ void Stop()
config_cache.valid = false;
StartUp.bCPUThread = config_cache.bCPUThread;
StartUp.bSkipIdle = config_cache.bSkipIdle;
StartUp.iCPUCore = config_cache.iCPUCore;
StartUp.bEnableFPRF = config_cache.bEnableFPRF;
StartUp.bMMU = config_cache.bMMU;
StartUp.bMMUBAT = config_cache.bMMUBAT;
@@ -170,6 +176,7 @@ void Stop()
StartUp.bDisableWiimoteSpeaker = config_cache.bDisableWiimoteSpeaker;
StartUp.m_strVideoBackend = config_cache.strBackend;
VideoBackend::ActivateBackend(StartUp.m_strVideoBackend);
StartUp.bHLE_BS2 = config_cache.bHLE_BS2;
}
}
+26 -4
View File
@@ -168,7 +168,6 @@ void SConfig::SaveSettings()
ini.Set("Interface", "OnScreenDisplayMessages", m_LocalCoreStartupParameter.bOnScreenDisplayMessages);
ini.Set("Interface", "HideCursor", m_LocalCoreStartupParameter.bHideCursor);
ini.Set("Interface", "AutoHideCursor", m_LocalCoreStartupParameter.bAutoHideCursor);
ini.Set("Interface", "Theme", m_LocalCoreStartupParameter.iTheme);
ini.Set("Interface", "MainWindowPosX", (m_LocalCoreStartupParameter.iPosX == -32000) ? 0 : m_LocalCoreStartupParameter.iPosX); // TODO - HAX
ini.Set("Interface", "MainWindowPosY", (m_LocalCoreStartupParameter.iPosY == -32000) ? 0 : m_LocalCoreStartupParameter.iPosY); // TODO - HAX
ini.Set("Interface", "MainWindowWidth", m_LocalCoreStartupParameter.iWidth);
@@ -179,6 +178,7 @@ void SConfig::SaveSettings()
ini.Set("Interface", "ShowLogWindow", m_InterfaceLogWindow);
ini.Set("Interface", "ShowLogConfigWindow", m_InterfaceLogConfigWindow);
ini.Set("Interface", "ShowConsole", m_InterfaceConsole);
ini.Set("Interface", "ThemeName", m_LocalCoreStartupParameter.theme_name);
// Hotkeys
for (int i = 0; i < NUM_HOTKEYS; i++)
@@ -225,12 +225,13 @@ void SConfig::SaveSettings()
ini.Set("Core", "DSPThread", m_LocalCoreStartupParameter.bDSPThread);
ini.Set("Core", "DSPHLE", m_LocalCoreStartupParameter.bDSPHLE);
ini.Set("Core", "SkipIdle", m_LocalCoreStartupParameter.bSkipIdle);
ini.Set("Core", "LockThreads", m_LocalCoreStartupParameter.bLockThreads);
ini.Set("Core", "DefaultGCM", m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Set("Core", "DVDRoot", m_LocalCoreStartupParameter.m_strDVDRoot);
ini.Set("Core", "Apploader", m_LocalCoreStartupParameter.m_strApploader);
ini.Set("Core", "EnableCheats", m_LocalCoreStartupParameter.bEnableCheats);
ini.Set("Core", "SelectedLanguage", m_LocalCoreStartupParameter.SelectedLanguage);
ini.Set("Core", "DPL2Decoder", m_LocalCoreStartupParameter.bDPL2Decoder);
ini.Set("Core", "Latency", m_LocalCoreStartupParameter.iLatency);
ini.Set("Core", "MemcardA", m_strMemoryCardA);
ini.Set("Core", "MemcardB", m_strMemoryCardB);
ini.Set("Core", "SlotA", m_EXIDevice[0]);
@@ -259,6 +260,12 @@ void SConfig::SaveSettings()
ini.Set("Movie", "PauseMovie", m_PauseMovie);
ini.Set("Movie", "Author", m_strMovieAuthor);
// DSP
ini.Set("DSP", "EnableJIT", m_EnableJIT);
ini.Set("DSP", "DumpAudio", m_DumpAudio);
ini.Set("DSP", "Backend", sBackend);
ini.Set("DSP", "Volume", m_Volume);
ini.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX));
m_SYSCONF->Save();
}
@@ -310,7 +317,6 @@ void SConfig::LoadSettings()
ini.Get("Interface", "OnScreenDisplayMessages", &m_LocalCoreStartupParameter.bOnScreenDisplayMessages, true);
ini.Get("Interface", "HideCursor", &m_LocalCoreStartupParameter.bHideCursor, false);
ini.Get("Interface", "AutoHideCursor", &m_LocalCoreStartupParameter.bAutoHideCursor, false);
ini.Get("Interface", "Theme", &m_LocalCoreStartupParameter.iTheme, 0);
ini.Get("Interface", "MainWindowPosX", &m_LocalCoreStartupParameter.iPosX, 100);
ini.Get("Interface", "MainWindowPosY", &m_LocalCoreStartupParameter.iPosY, 100);
ini.Get("Interface", "MainWindowWidth", &m_LocalCoreStartupParameter.iWidth, 800);
@@ -321,6 +327,7 @@ void SConfig::LoadSettings()
ini.Get("Interface", "ShowLogWindow", &m_InterfaceLogWindow, false);
ini.Get("Interface", "ShowLogConfigWindow", &m_InterfaceLogConfigWindow, false);
ini.Get("Interface", "ShowConsole", &m_InterfaceConsole, false);
ini.Get("Interface", "ThemeName", &m_LocalCoreStartupParameter.theme_name, "Boomy");
// Hotkeys
for (int i = 0; i < NUM_HOTKEYS; i++)
@@ -369,12 +376,13 @@ void SConfig::LoadSettings()
ini.Get("Core", "DSPHLE", &m_LocalCoreStartupParameter.bDSPHLE, true);
ini.Get("Core", "CPUThread", &m_LocalCoreStartupParameter.bCPUThread, true);
ini.Get("Core", "SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true);
ini.Get("Core", "LockThreads", &m_LocalCoreStartupParameter.bLockThreads, false);
ini.Get("Core", "DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Get("Core", "DVDRoot", &m_LocalCoreStartupParameter.m_strDVDRoot);
ini.Get("Core", "Apploader", &m_LocalCoreStartupParameter.m_strApploader);
ini.Get("Core", "EnableCheats", &m_LocalCoreStartupParameter.bEnableCheats, false);
ini.Get("Core", "SelectedLanguage", &m_LocalCoreStartupParameter.SelectedLanguage, 0);
ini.Get("Core", "DPL2Decoder", &m_LocalCoreStartupParameter.bDPL2Decoder, false);
ini.Get("Core", "Latency", &m_LocalCoreStartupParameter.iLatency, 14);
ini.Get("Core", "MemcardA", &m_strMemoryCardA);
ini.Get("Core", "MemcardB", &m_strMemoryCardB);
ini.Get("Core", "SlotA", (int*)&m_EXIDevice[0], EXIDEVICE_MEMORYCARD);
@@ -410,6 +418,20 @@ void SConfig::LoadSettings()
// Movie
ini.Get("General", "PauseMovie", &m_PauseMovie, false);
ini.Get("Movie", "Author", &m_strMovieAuthor, "");
// DSP
ini.Get("DSP", "EnableJIT", &m_EnableJIT, true);
ini.Get("DSP", "DumpAudio", &m_DumpAudio, false);
#if defined __linux__ && HAVE_ALSA
ini.Get("DSP", "Backend", &sBackend, BACKEND_ALSA);
#elif defined __APPLE__
ini.Get("DSP", "Backend", &sBackend, BACKEND_COREAUDIO);
#elif defined _WIN32
ini.Get("DSP", "Backend", &sBackend, BACKEND_DIRECTSOUND);
#else
ini.Get("DSP", "Backend", &sBackend, BACKEND_NULLSOUND);
#endif
ini.Get("DSP", "Volume", &m_Volume, 100);
}
m_SYSCONF = new SysConf();
+16
View File
@@ -26,6 +26,16 @@
#include "HW/SI_Device.h"
#include "SysConf.h"
// DSP Backend Types
#define BACKEND_NULLSOUND "No audio output"
#define BACKEND_ALSA "ALSA"
#define BACKEND_AOSOUND "AOSound"
#define BACKEND_COREAUDIO "CoreAudio"
#define BACKEND_DIRECTSOUND "DSound"
#define BACKEND_OPENAL "OpenAL"
#define BACKEND_PULSEAUDIO "Pulse"
#define BACKEND_XAUDIO2 "XAudio2"
struct SConfig : NonCopyable
{
// Wii Devices
@@ -84,6 +94,12 @@ struct SConfig : NonCopyable
bool m_ShowLag;
std::string m_strMovieAuthor;
// DSP settings
bool m_EnableJIT;
bool m_DumpAudio;
int m_Volume;
std::string sBackend;
SysConf* m_SYSCONF;
// save settings
+80 -71
View File
@@ -313,10 +313,9 @@ void CpuThread()
g_video_backend->Video_Prepare();
}
if (_CoreParameter.bLockThreads)
Common::SetCurrentThreadAffinity(1); // Force to first core
Common::SetCurrentThreadAffinity(1); // Force to first core
#if defined(_WIN32) && defined(_M_X64)
#if defined(_M_X64)
EMM::InstallExceptionHandler(); // Let's run under memory watch
#endif
@@ -357,8 +356,7 @@ void FifoPlayerThread()
Common::SetCurrentThreadName("FIFO-GPU thread");
}
if (_CoreParameter.bLockThreads)
Common::SetCurrentThreadAffinity(1); // Force to first core
Common::SetCurrentThreadAffinity(1); // Force to first core
g_bStarted = true;
@@ -384,7 +382,6 @@ void EmuThread()
Common::SetCurrentThreadName("Emuthread - Starting");
if (_CoreParameter.bLockThreads)
{
if (cpu_info.num_cores > 3) // Force to third, non-HT core
Common::SetCurrentThreadAffinity(4);
@@ -444,7 +441,7 @@ void EmuThread()
CBoot::BootUp();
// Setup our core, but can't use dynarec if we are compare server
if (Movie::GetCPUMode() && (!_CoreParameter.bRunCompareServer ||
if (_CoreParameter.iCPUCore && (!_CoreParameter.bRunCompareServer ||
_CoreParameter.bRunCompareClient))
PowerPC::SetMode(PowerPC::MODE_JIT);
else
@@ -647,70 +644,7 @@ void VideoThrottle()
u32 ElapseTime = (u32)Timer.GetTimeDifference();
if ((ElapseTime >= 1000 && DrawnVideo > 0) || g_requestRefreshInfo)
{
g_requestRefreshInfo = false;
SCoreStartupParameter& _CoreParameter = SConfig::GetInstance().m_LocalCoreStartupParameter;
if (ElapseTime == 0)
ElapseTime = 1;
u32 FPS = Common::AtomicLoad(DrawnFrame) * 1000 / ElapseTime;
u32 VPS = DrawnVideo * 1000 / ElapseTime;
u32 Speed = DrawnVideo * (100 * 1000) / (VideoInterface::TargetRefreshRate * ElapseTime);
// Settings are shown the same for both extended and summary info
std::string SSettings = StringFromFormat("%s %s", cpu_core_base->GetName(), _CoreParameter.bCPUThread ? "DC" : "SC");
// Use extended or summary information. The summary information does not print the ticks data,
// that's more of a debugging interest, it can always be optional of course if someone is interested.
//#define EXTENDED_INFO
#ifdef EXTENDED_INFO
u64 newTicks = CoreTiming::GetTicks();
u64 newIdleTicks = CoreTiming::GetIdleTicks();
u64 diff = (newTicks - ticks) / 1000000;
u64 idleDiff = (newIdleTicks - idleTicks) / 1000000;
ticks = newTicks;
idleTicks = newIdleTicks;
float TicksPercentage = (float)diff / (float)(SystemTimers::GetTicksPerSecond() / 1000000) * 100;
std::string SFPS = StringFromFormat("FPS: %u - VPS: %u - SPEED: %u%%", FPS, VPS, Speed);
SFPS += StringFromFormat(" | CPU: %s%i MHz [Real: %i + IdleSkip: %i] / %i MHz (%s%3.0f%%)",
_CoreParameter.bSkipIdle ? "~" : "",
(int)(diff),
(int)(diff - idleDiff),
(int)(idleDiff),
SystemTimers::GetTicksPerSecond() / 1000000,
_CoreParameter.bSkipIdle ? "~" : "",
TicksPercentage);
#else // Summary information
std::string SFPS;
if (Movie::IsPlayingInput())
SFPS = StringFromFormat("VI: %u/%u - Frame: %u/%u - FPS: %u - VPS: %u - SPEED: %u%%", (u32)Movie::g_currentFrame, (u32)Movie::g_totalFrames, (u32)Movie::g_currentInputCount, (u32)Movie::g_totalInputCount, FPS, VPS, Speed);
else if (Movie::IsRecordingInput())
SFPS = StringFromFormat("VI: %u - Frame: %u - FPS: %u - VPS: %u - SPEED: %u%%", (u32)Movie::g_currentFrame, (u32)Movie::g_currentInputCount, FPS, VPS, Speed);
else
SFPS = StringFromFormat("FPS: %u - VPS: %u - SPEED: %u%%", FPS, VPS, Speed);
#endif
// This is our final "frame counter" string
std::string SMessage = StringFromFormat("%s | %s",
SSettings.c_str(), SFPS.c_str());
std::string TMessage = StringFromFormat("%s | ", scm_rev_str) +
SMessage;
// Show message
g_video_backend->UpdateFPSDisplay(SMessage.c_str());
if (_CoreParameter.bRenderToMain &&
SConfig::GetInstance().m_InterfaceStatusbar) {
Host_UpdateStatusBar(SMessage.c_str());
Host_UpdateTitle(scm_rev_str);
} else
Host_UpdateTitle(TMessage.c_str());
UpdateTitle();
// Reset counter
Timer.Update();
@@ -757,4 +691,79 @@ const char *Callback_ISOName()
return "";
}
void UpdateTitle()
{
u32 ElapseTime = (u32)Timer.GetTimeDifference();
g_requestRefreshInfo = false;
SCoreStartupParameter& _CoreParameter = SConfig::GetInstance().m_LocalCoreStartupParameter;
if (ElapseTime == 0)
ElapseTime = 1;
u32 FPS = Common::AtomicLoad(DrawnFrame) * 1000 / ElapseTime;
u32 VPS = DrawnVideo * 1000 / ElapseTime;
u32 Speed = DrawnVideo * (100 * 1000) / (VideoInterface::TargetRefreshRate * ElapseTime);
// Settings are shown the same for both extended and summary info
std::string SSettings = StringFromFormat("%s %s", cpu_core_base->GetName(), _CoreParameter.bCPUThread ? "DC" : "SC");
// Use extended or summary information. The summary information does not print the ticks data,
// that's more of a debugging interest, it can always be optional of course if someone is interested.
//#define EXTENDED_INFO
#ifdef EXTENDED_INFO
u64 newTicks = CoreTiming::GetTicks();
u64 newIdleTicks = CoreTiming::GetIdleTicks();
u64 diff = (newTicks - ticks) / 1000000;
u64 idleDiff = (newIdleTicks - idleTicks) / 1000000;
ticks = newTicks;
idleTicks = newIdleTicks;
float TicksPercentage = (float)diff / (float)(SystemTimers::GetTicksPerSecond() / 1000000) * 100;
std::string SFPS = StringFromFormat("FPS: %u - VPS: %u - SPEED: %u%%", FPS, VPS, Speed);
SFPS += StringFromFormat(" | CPU: %s%i MHz [Real: %i + IdleSkip: %i] / %i MHz (%s%3.0f%%)",
_CoreParameter.bSkipIdle ? "~" : "",
(int)(diff),
(int)(diff - idleDiff),
(int)(idleDiff),
SystemTimers::GetTicksPerSecond() / 1000000,
_CoreParameter.bSkipIdle ? "~" : "",
TicksPercentage);
#else // Summary information
std::string SFPS;
if (Movie::IsPlayingInput())
SFPS = StringFromFormat("VI: %u/%u - Frame: %u/%u - FPS: %u - VPS: %u - SPEED: %u%%", (u32)Movie::g_currentFrame, (u32)Movie::g_totalFrames, (u32)Movie::g_currentInputCount, (u32)Movie::g_totalInputCount, FPS, VPS, Speed);
else if (Movie::IsRecordingInput())
SFPS = StringFromFormat("VI: %u - Frame: %u - FPS: %u - VPS: %u - SPEED: %u%%", (u32)Movie::g_currentFrame, (u32)Movie::g_currentInputCount, FPS, VPS, Speed);
else
SFPS = StringFromFormat("FPS: %u - VPS: %u - SPEED: %u%%", FPS, VPS, Speed);
#endif
// This is our final "frame counter" string
std::string SMessage = StringFromFormat("%s | %s",
SSettings.c_str(), SFPS.c_str());
std::string TMessage = StringFromFormat("%s | ", scm_rev_str) +
SMessage;
// Show message
g_video_backend->UpdateFPSDisplay(SMessage.c_str());
// Update the audio timestretcher with the current speed
if (soundStream)
{
CMixer* pMixer = soundStream->GetMixer();
pMixer->UpdateSpeed((float)Speed / 100);
}
if (_CoreParameter.bRenderToMain &&
SConfig::GetInstance().m_InterfaceStatusbar) {
Host_UpdateStatusBar(SMessage.c_str());
Host_UpdateTitle(scm_rev_str);
} else
Host_UpdateTitle(TMessage.c_str());
}
} // Core
+2
View File
@@ -89,6 +89,8 @@ bool ShouldSkipFrame(int skipped);
void VideoThrottle();
void RequestRefreshInfo();
void UpdateTitle();
// waits until all systems are paused and fully idle, and acquires a lock on that state.
// or, if doLock is false, releases a lock on that state and optionally unpauses.
// calls must be balanced (once with doLock true, then once with doLock false) but may be recursive.
+4 -4
View File
@@ -45,9 +45,9 @@ SCoreStartupParameter::SCoreStartupParameter()
bEnableFPRF(false),
bCPUThread(true), bDSPThread(false), bDSPHLE(true),
bSkipIdle(true), bNTSC(false), bForceNTSCJ(false),
bHLE_BS2(true), bLockThreads(false),
bEnableCheats(false),
bHLE_BS2(true), bEnableCheats(false),
bMergeBlocks(false),
bDPL2Decoder(false), iLatency(14),
bRunCompareServer(false), bRunCompareClient(false),
bMMU(false), bMMUBAT(false), iTLBHack(0), bVBeam(false),
bFastDiscSpeed(false),
@@ -59,7 +59,6 @@ SCoreStartupParameter::SCoreStartupParameter()
bRenderWindowAutoSize(false), bKeepWindowOnTop(false),
bFullscreen(false), bRenderToMain(false),
bProgressive(false), bDisableScreenSaver(false),
iTheme(0),
iPosX(100), iPosY(100), iWidth(800), iHeight(600)
{
LoadDefaults();
@@ -77,7 +76,6 @@ void SCoreStartupParameter::LoadDefaults()
bRunCompareServer = false;
bDSPHLE = true;
bDSPThread = true;
bLockThreads = true;
bEnableFPRF = false;
bMMU = false;
bMMUBAT = false;
@@ -87,6 +85,8 @@ void SCoreStartupParameter::LoadDefaults()
bMergeBlocks = false;
SelectedLanguage = 0;
bWii = false;
bDPL2Decoder = false;
iLatency = 14;
iPosX = 100;
iPosY = 100;
+4 -2
View File
@@ -106,10 +106,12 @@ struct SCoreStartupParameter
bool bNTSC;
bool bForceNTSCJ;
bool bHLE_BS2;
bool bLockThreads;
bool bEnableCheats;
bool bMergeBlocks;
bool bDPL2Decoder;
int iLatency;
bool bRunCompareServer;
bool bRunCompareClient;
@@ -126,6 +128,7 @@ struct SCoreStartupParameter
// Interface settings
bool bConfirmStop, bHideCursor, bAutoHideCursor, bUsePanicHandlers, bOnScreenDisplayMessages;
std::string theme_name;
// Hotkeys
int iHotkey[NUM_HOTKEYS];
@@ -139,7 +142,6 @@ struct SCoreStartupParameter
bool bFullscreen, bRenderToMain;
bool bProgressive, bDisableScreenSaver;
int iTheme;
int iPosX, iPosY, iWidth, iHeight;
enum EBootBS2
+11 -11
View File
@@ -104,10 +104,10 @@ bool Compare(const std::vector<u16> &code1, const std::vector<u16> &code2)
return code1.size() == code2.size() && code1.size() == count_equal;
}
void GenRandomCode(int size, std::vector<u16> &code)
void GenRandomCode(u32 size, std::vector<u16> &code)
{
code.resize(size);
for (int i = 0; i < size; i++)
for (u32 i = 0; i < size; i++)
{
code[i] = rand() ^ (rand() << 8);
}
@@ -144,28 +144,28 @@ void CodeToHeader(const std::vector<u16> &code, std::string _filename,
}
void CodesToHeader(const std::vector<u16> *codes, const std::vector<std::string>* filenames,
int numCodes, const char *name, std::string &header)
u32 numCodes, const char *name, std::string &header)
{
std::vector<std::vector<u16> > codes_padded;
char buffer[1024];
int reserveSize = 0;
for(int i = 0; i < numCodes; i++)
u32 reserveSize = 0;
for(u32 i = 0; i < numCodes; i++)
{
codes_padded.push_back(codes[i]);
// Pad with nops to 32byte boundary
while (codes_padded.at(i).size() & 0x7f)
codes_padded.at(i).push_back(0);
reserveSize += (int)codes_padded.at(i).size();
reserveSize += (u32)codes_padded.at(i).size();
}
header.clear();
header.reserve(reserveSize * 4);
sprintf(buffer, "#define NUM_UCODES %d\n\n", numCodes);
sprintf(buffer, "#define NUM_UCODES %u\n\n", numCodes);
header.append(buffer);
header.append("const char* UCODE_NAMES[NUM_UCODES] = {\n");
for (int i = 0; i < numCodes; i++)
for (u32 i = 0; i < numCodes; i++)
{
std::string filename;
if (! SplitPath(filenames->at(i), NULL, &filename, NULL))
@@ -176,7 +176,7 @@ void CodesToHeader(const std::vector<u16> *codes, const std::vector<std::string>
header.append("};\n\n");
header.append("const unsigned short dsp_code[NUM_UCODES][0x1000] = {\n");
for(int i = 0; i < numCodes; i++)
for(u32 i = 0; i < numCodes; i++)
{
if(codes[i].size() == 0)
continue;
@@ -197,7 +197,7 @@ void CodesToHeader(const std::vector<u16> *codes, const std::vector<std::string>
void CodeToBinaryStringBE(const std::vector<u16> &code, std::string &str)
{
str.resize(code.size() * 2);
for (int i = 0; i < (int)code.size(); i++)
for (size_t i = 0; i < code.size(); i++)
{
str[i * 2 + 0] = code[i] >> 8;
str[i * 2 + 1] = code[i] & 0xff;
@@ -207,7 +207,7 @@ void CodeToBinaryStringBE(const std::vector<u16> &code, std::string &str)
void BinaryStringBEToCode(const std::string &str, std::vector<u16> &code)
{
code.resize(str.size() / 2);
for (int i = 0; i < (int)code.size(); i++)
for (size_t i = 0; i < code.size(); i++)
{
code[i] = ((u16)(u8)str[i * 2 + 0] << 8) | ((u16)(u8)str[i * 2 + 1]);
}
+2 -2
View File
@@ -26,11 +26,11 @@
bool Assemble(const char *text, std::vector<u16> &code, bool force = false);
bool Disassemble(const std::vector<u16> &code, bool line_numbers, std::string &text);
bool Compare(const std::vector<u16> &code1, const std::vector<u16> &code2);
void GenRandomCode(int size, std::vector<u16> &code);
void GenRandomCode(u32 size, std::vector<u16> &code);
void CodeToHeader(const std::vector<u16> &code, std::string _filename,
const char *name, std::string &header);
void CodesToHeader(const std::vector<u16> *codes, const std::vector<std::string> *filenames,
int numCodes, const char *name, std::string &header);
u32 numCodes, const char *name, std::string &header);
// Big-endian, for writing straight to file using File::WriteStringToFile.
void CodeToBinaryStringBE(const std::vector<u16> &code, std::string &str);
-2
View File
@@ -22,8 +22,6 @@
DSPEmulator *CreateDSPEmulator(bool HLE)
{
ac_Config.Load();
if (HLE)
{
return new DSPHLE();
@@ -151,7 +151,7 @@ void FifoRecordAnalyzer::ProcessLoadTlut1()
void FifoRecordAnalyzer::ProcessPreloadTexture()
{
BPS_TmemConfig& tmem_cfg = m_BpMem->tmem_config;
u32 tmem_addr = tmem_cfg.preload_tmem_even * TMEM_LINE_SIZE;
//u32 tmem_addr = tmem_cfg.preload_tmem_even * TMEM_LINE_SIZE;
u32 size = tmem_cfg.preload_tile_info.count * TMEM_LINE_SIZE; // TODO: Should this be half size for RGBA8 preloads?
FifoRecorder::GetInstance().WriteMemory(tmem_cfg.preload_addr << 5, size, MemoryUpdate::TMEM);
+98 -54
View File
@@ -15,7 +15,6 @@
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
#include <map>
#include "Common.h"
#include "HLE.h"
@@ -27,6 +26,9 @@
#include "HLE_OS.h"
#include "HLE_Misc.h"
#include "IPC_HLE/WII_IPC_HLE_Device_es.h"
#include "ConfigManager.h"
#include "Core.h"
namespace HLE
{
@@ -45,64 +47,73 @@ struct SPatch
{
char m_szPatchName[128];
TPatchFunction PatchFunction;
int type;
int flags;
};
static const SPatch OSPatches[] =
{
{ "FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction },
{ "FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// speedup
//{ "OSProtectRange", HLE_Misc::UnimplementedFunctionFalse },
//{ "THPPlayerGetState", HLE_Misc:THPPlayerGetState },
//{ "OSProtectRange", HLE_Misc::UnimplementedFunctionFalse, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ "THPPlayerGetState", HLE_Misc:THPPlayerGetState, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ "memcpy", HLE_Misc::gc_memcpy, HLE_HOOK_REPLACE, HLE_TYPE_MEMORY },
//{ "memcmp", HLE_Misc::gc_memcmp, HLE_HOOK_REPLACE, HLE_TYPE_MEMORY },
//{ "memset", HLE_Misc::gc_memset, HLE_HOOK_REPLACE, HLE_TYPE_MEMORY },
//{ "memmove", HLE_Misc::gc_memmove, HLE_HOOK_REPLACE, HLE_TYPE_MEMORY },
//{ "__div2i", HLE_Misc::div2i, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC }, // Slower?
//{ "__div2u", HLE_Misc::div2u, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC }, // Slower?
//{ "DCFlushRange", HLE_Misc::UnimplementedFunction, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ "DCInvalidateRange", HLE_Misc::UnimplementedFunction, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ "DCZeroRange", HLE_Misc::UnimplementedFunction, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// debug out is very nice ;)
{ "OSReport", HLE_OS::HLE_GeneralDebugPrint },
{ "DEBUGPrint", HLE_OS::HLE_GeneralDebugPrint },
{ "WUD_DEBUGPrint", HLE_OS::HLE_GeneralDebugPrint },
{ "OSPanic", HLE_OS::HLE_OSPanic },
{ "vprintf", HLE_OS::HLE_VPrintf },
{ "printf", HLE_OS::HLE_GeneralDebugPrint },
{ "printf1", HLE_OS::HLE_GeneralDebugPrintWithInt },
{ "printf2", HLE_OS::HLE_GeneralDebugPrint },
{ "printf3", HLE_OS::HLE_GeneralDebugPrint },
{ "printf4", HLE_OS::HLE_GeneralDebugPrint },
{ "printf5", HLE_OS::HLE_GeneralDebugPrint },
{ "printf6", HLE_OS::HLE_GeneralDebugPrint },
{ "printf7", HLE_OS::HLE_GeneralDebugPrint },
{ "printf8", HLE_OS::HLE_GeneralDebugPrint },
{ "printf9", HLE_OS::HLE_GeneralDebugPrint },
{ "puts", HLE_OS::HLE_GeneralDebugPrint }, // gcc-optimized printf?
{ "___blank(char *,...)", HLE_OS::HLE_GeneralDebugPrint }, // used for early init things (normally)
{ "___blank", HLE_OS::HLE_GeneralDebugPrint },
{ "__write_console", HLE_OS::HLE_write_console }, // used by sysmenu (+more?)
{ "OSReport", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "DEBUGPrint", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "WUD_DEBUGPrint", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "OSPanic", HLE_OS::HLE_OSPanic, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "vprintf", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "printf", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "puts", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG }, // gcc-optimized printf?
{ "___blank(char *,...)", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG }, // used for early init things (normally)
{ "___blank", HLE_OS::HLE_GeneralDebugPrint, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
{ "__write_console", HLE_OS::HLE_write_console, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG }, // used by sysmenu (+more?)
// wii only
//{ "__OSInitAudioSystem", HLE_Misc::UnimplementedFunction },
//{ "__OSInitAudioSystem", HLE_Misc::UnimplementedFunction, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// Super Monkey Ball - no longer needed.
//{ ".evil_vec_cosine", HLE_Misc::SMB_EvilVecCosine },
//{ ".evil_normalize", HLE_Misc::SMB_EvilNormalize },
//{ ".evil_vec_setlength", HLE_Misc::SMB_evil_vec_setlength },
//{ ".evil_vec_something", HLE_Misc::FZero_evil_vec_normalize },
{ "PanicAlert", HLE_Misc::HLEPanicAlert },
//{ ".sqrt_internal_needs_cr1", HLE_Misc::SMB_sqrt_internal },
//{ ".rsqrt_internal_needs_cr1", HLE_Misc::SMB_rsqrt_internal },
//{ ".atan2", HLE_Misc::SMB_atan2},
//{ ".sqrt_fz", HLE_Misc::FZ_sqrt},
//{ ".evil_vec_cosine", HLE_Misc::SMB_EvilVecCosine, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".evil_normalize", HLE_Misc::SMB_EvilNormalize, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".evil_vec_setlength", HLE_Misc::SMB_evil_vec_setlength, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".evil_vec_something", HLE_Misc::FZero_evil_vec_normalize, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
{ "PanicAlert", HLE_Misc::HLEPanicAlert, HLE_HOOK_REPLACE, HLE_TYPE_DEBUG },
//{ ".sqrt_internal_needs_cr1", HLE_Misc::SMB_sqrt_internal, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".rsqrt_internal_needs_cr1", HLE_Misc::SMB_rsqrt_internal, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".atan2", HLE_Misc::SMB_atan2HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".sqrt_fz", HLE_Misc::FZ_sqrtHLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// F-zero still isn't working correctly, but these aren't really helping.
//{ ".sqrt_internal_fz", HLE_Misc::FZ_sqrt_internal },
//{ ".rsqrt_internal_fz", HLE_Misc::FZ_rsqrt_internal },
//{ ".sqrt_internal_fz", HLE_Misc::FZ_sqrt_internal, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".rsqrt_internal_fz", HLE_Misc::FZ_rsqrt_internal, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
//{ ".kill_infinites", HLE_Misc::FZero_kill_infinites },
//{ ".kill_infinites", HLE_Misc::FZero_kill_infinites, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// special
// { "GXPeekZ", HLE_Misc::GXPeekZ},
// { "GXPeekARGB", HLE_Misc::GXPeekARGB},
// { "GXPeekZ", HLE_Misc::GXPeekZHLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// { "GXPeekARGB", HLE_Misc::GXPeekARGBHLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// Name doesn't matter, installed in CBoot::BootUp()
{ "HBReload", HLE_Misc::HBReload },
{ "HBReload", HLE_Misc::HBReload, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
// ES_LAUNCH
{ "__OSBootDol", HLE_Misc::OSBootDol, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
{ "OSGetResetCode", HLE_Misc::OSGetResetCode, HLE_HOOK_REPLACE, HLE_TYPE_GENERIC },
};
static const SPatch OSBreakPoints[] =
@@ -110,17 +121,13 @@ static const SPatch OSBreakPoints[] =
{ "FAKE_TO_SKIP_0", HLE_Misc::UnimplementedFunction },
};
static std::map<u32, u32> orig_instruction;
void Patch(u32 address, const char *hle_func_name)
void Patch(u32 addr, const char *hle_func_name)
{
for (u32 i = 0; i < sizeof(OSPatches) / sizeof(SPatch); i++)
{
if (!strcmp(OSPatches[i].m_szPatchName, hle_func_name))
{
u32 HLEPatchValue = (1 & 0x3f) << 26;
Memory::Write_U32(HLEPatchValue | i, address);
orig_instruction[addr] = i;
return;
}
}
@@ -134,23 +141,24 @@ void PatchFunctions()
Symbol *symbol = g_symbolDB.GetSymbolFromName(OSPatches[i].m_szPatchName);
if (symbol > 0)
{
u32 HLEPatchValue = (1 & 0x3f) << 26;
for (u32 addr = symbol->address; addr < symbol->address + symbol->size; addr += 4)
{
orig_instruction[addr] = Memory::ReadUnchecked_U32(addr);
Memory::Write_U32(HLEPatchValue | i, addr);
orig_instruction[addr] = i;
}
INFO_LOG(OSHLE, "Patching %s %08x", OSPatches[i].m_szPatchName, symbol->address);
}
}
for (size_t i = 1; i < sizeof(OSBreakPoints) / sizeof(SPatch); i++)
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableDebugging)
{
Symbol *symbol = g_symbolDB.GetSymbolFromName(OSPatches[i].m_szPatchName);
if (symbol > 0)
for (size_t i = 1; i < sizeof(OSBreakPoints) / sizeof(SPatch); i++)
{
PowerPC::breakpoints.Add(symbol->address, false);
INFO_LOG(OSHLE, "Adding BP to %s %08x", OSBreakPoints[i].m_szPatchName, symbol->address);
Symbol *symbol = g_symbolDB.GetSymbolFromName(OSPatches[i].m_szPatchName);
if (symbol > 0)
{
PowerPC::breakpoints.Add(symbol->address, false);
INFO_LOG(OSHLE, "Adding BP to %s %08x", OSBreakPoints[i].m_szPatchName, symbol->address);
}
}
}
@@ -172,10 +180,46 @@ void Execute(u32 _CurrentPC, u32 _Instruction)
// _dbg_assert_msg_(HLE,NPC == LR, "Broken HLE function (doesn't set NPC)", OSPatches[pos].m_szPatchName);
}
u32 GetOrigInstruction(u32 addr)
u32 GetFunctionIndex(u32 addr)
{
std::map<u32, u32>::const_iterator iter = orig_instruction.find(addr);
return (iter != orig_instruction.end()) ? iter->second : 0;
}
int GetFunctionTypeByIndex(u32 index)
{
return OSPatches[index].type;
}
int GetFunctionFlagsByIndex(u32 index)
{
return OSPatches[index].flags;
}
bool IsEnabled(int flags)
{
if (flags == HLE::HLE_TYPE_MEMORY && Core::g_CoreStartupParameter.bMMU)
return false;
if (flags == HLE::HLE_TYPE_DEBUG && !Core::g_CoreStartupParameter.bEnableDebugging && PowerPC::GetMode() != MODE_INTERPRETER)
return false;
return true;
}
u32 UnPatch(std::string patchName)
{
Symbol *symbol = g_symbolDB.GetSymbolFromName(patchName.c_str());
if (symbol > 0)
{
for (u32 addr = symbol->address; addr < symbol->address + symbol->size; addr += 4)
{
orig_instruction[addr] = 0;
PowerPC::ppcState.iCache.Invalidate(addr);
}
return symbol->address;
}
return 0;
}
} // end of namespace HLE
+26 -1
View File
@@ -18,15 +18,40 @@
#ifndef _HLE_H
#define _HLE_H
#include <map>
#include "Common.h"
namespace HLE
{
enum
{
HLE_HOOK_START = 0, // Hook the beginning of the function and execute the function afterwards
HLE_HOOK_END = 1, // Hook the end of the function, executing the function first before the hook
HLE_HOOK_REPLACE = 2, // Replace the function with the HLE version
HLE_HOOK_NONE = 3, // Do not hook the function
};
enum
{
HLE_TYPE_GENERIC = 0, // Miscellaneous function
HLE_TYPE_MEMORY = 1, // Memory operation
HLE_TYPE_FP = 2, // Floating Point operation
HLE_TYPE_DEBUG = 3, // Debug output function
};
void PatchFunctions();
void Patch(u32 pc, const char *func_name);
u32 UnPatch(std::string patchName);
void Execute(u32 _CurrentPC, u32 _Instruction);
u32 GetOrigInstruction(u32 em_address);
u32 GetFunctionIndex(u32 em_address);
int GetFunctionTypeByIndex(u32 index);
int GetFunctionFlagsByIndex(u32 index);
bool IsEnabled(int flags);
static std::map<u32, u32> orig_instruction;
}
#endif
+264
View File
@@ -22,10 +22,25 @@
#include "../PowerPC/PowerPC.h"
#include "../HW/Memmap.h"
#include "../Host.h"
#include "IPC_HLE/WII_IPC_HLE_Device_DI.h"
#include "ConfigManager.h"
#include "VolumeCreator.h"
#include "Filesystem.h"
#include "../Boot/Boot_DOL.h"
#include "IPC_HLE/WII_IPC_HLE_Device_usb.h"
#include "HLE.h"
#include "PowerPC/PPCAnalyst.h"
#include "PowerPC/SignatureDB.h"
#include "PowerPC/PPCSymbolDB.h"
#include "CommonPaths.h"
namespace HLE_Misc
{
std::string args;
u32 argsPtr;
u32 bootType;
// Helper to quickly read the floating point value at a memory location.
inline float F(u32 addr)
{
@@ -282,4 +297,253 @@ void HBReload()
Host_Message(WM_USER_STOP);
}
void ExecuteDOL(u8* dolFile, u32 fileSize)
{
// Clear memory before loading the dol
for (u32 i = 0x80004000; i < Memory::Read_U32(0x00000034); i += 4)
{
// TODO: Should not write over the "save region"
Memory::Write_U32(0x00000000, i);
}
CDolLoader dolLoader(dolFile, fileSize);
dolLoader.Load();
// Scan for common HLE functions
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableDebugging)
{
g_symbolDB.Clear();
PPCAnalyst::FindFunctions(0x80004000, 0x811fffff, &g_symbolDB);
SignatureDB db;
if (db.Load((File::GetSysDirectory() + TOTALDB).c_str()))
{
db.Apply(&g_symbolDB);
HLE::PatchFunctions();
db.Clear();
}
}
PowerPC::ppcState.iCache.Reset();
CWII_IPC_HLE_Device_usb_oh1_57e_305* s_Usb = GetUsbPointer();
size_t size = s_Usb->m_WiiMotes.size();
bool* wiiMoteConnected = new bool[size];
for (unsigned int i = 0; i < size; i++)
wiiMoteConnected[i] = s_Usb->m_WiiMotes[i].IsConnected();
WII_IPC_HLE_Interface::Reset(true);
WII_IPC_HLE_Interface::Init();
s_Usb = GetUsbPointer();
for (unsigned int i = 0; i < s_Usb->m_WiiMotes.size(); i++)
{
if (wiiMoteConnected[i])
{
s_Usb->m_WiiMotes[i].Activate(false);
s_Usb->m_WiiMotes[i].Activate(true);
}
else
{
s_Usb->m_WiiMotes[i].Activate(false);
}
}
delete[] wiiMoteConnected;
if (argsPtr)
{
u32 args_base = Memory::Read_U32(0x800000f4);
u32 ptr_to_num_args = 0xc;
u32 num_args = 1;
u32 hi_ptr = args_base + ptr_to_num_args + 4;
u32 new_args_ptr = args_base + ptr_to_num_args + 8;
Memory::Write_U32(ptr_to_num_args, args_base + 8);
Memory::Write_U32(num_args, args_base + ptr_to_num_args);
Memory::Write_U32(0x14, hi_ptr);
for (unsigned int i = 0; i < args.length(); i++)
Memory::WriteUnchecked_U8(args[i], new_args_ptr+i);
}
NPC = dolLoader.GetEntryPoint() | 0x80000000;
}
void LoadDOLFromDisc(std::string dol)
{
DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(SConfig::GetInstance().m_LastFilename.c_str());
DiscIO::IFileSystem* pFileSystem = DiscIO::CreateFileSystem(pVolume);
if (dol.length() > 1 && dol.compare(0, 1, "/") == 0)
dol = dol.substr(1);
u32 fileSize = (u32) pFileSystem->GetFileSize(dol.c_str());
u8* dolFile = new u8[fileSize];
if (fileSize > 0)
{
pFileSystem->ReadFile(dol.c_str(), dolFile, fileSize);
ExecuteDOL(dolFile, fileSize);
}
delete[] dolFile;
}
void LoadBootDOLFromDisc()
{
DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(SConfig::GetInstance().m_LastFilename.c_str());
DiscIO::IFileSystem* pFileSystem = DiscIO::CreateFileSystem(pVolume);
u32 fileSize = pFileSystem->GetBootDOLSize();
u8* dolFile = new u8[fileSize];
if (fileSize > 0)
{
pFileSystem->GetBootDOL(dolFile, fileSize);
ExecuteDOL(dolFile, fileSize);
}
delete[] dolFile;
}
u32 GetDolFileSize(std::string dol)
{
DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(SConfig::GetInstance().m_LastFilename.c_str());
DiscIO::IFileSystem* pFileSystem = DiscIO::CreateFileSystem(pVolume);
std::string dolFile;
if (dol.length() > 1 && dol.compare(0, 1, "/") == 0)
dolFile = dol.substr(1);
else
dolFile = dol;
return (u32)pFileSystem->GetFileSize(dolFile.c_str());
}
void gc_memmove()
{
u32 dest = GPR(3);
u32 src = GPR(4);
u32 count = GPR(5);
memmove((u8*)(Memory::base + dest), (u8*)(Memory::base + src), count);
NPC = LR;
}
void gc_memcpy()
{
u32 dest = GPR(3);
u32 src = GPR(4);
u32 count = GPR(5);
memcpy((u8*)(Memory::base + dest), (u8*)(Memory::base + src), count);
NPC = LR;
}
void gc_memset()
{
u32 dest = GPR(3);
u32 ch = GPR(4);
u32 count = GPR(5);
memset((u8*)(Memory::base + dest), ch, count);
NPC = LR;
}
void gc_memcmp()
{
u32 dest = GPR(3);
u32 src = GPR(4);
u32 count = GPR(5);
GPR(3) = memcmp((u8*)(Memory::base + dest), (u8*)(Memory::base + src), count);
NPC = LR;
}
void div2i()
{
s64 num = (s64)(GPR(3)) << 32 | GPR(4);
s64 den = (s64)(GPR(5)) << 32 | GPR(6);
s64 quo = num / den;
GPR(3) = quo >> 32;
GPR(4) = quo & 0xffffffff;
NPC = LR;
}
void div2u()
{
u64 num = (u64)(GPR(3)) << 32 | GPR(4);
u64 den = (u64)(GPR(5)) << 32 | GPR(6);
u64 quo = num / den;
GPR(3) = quo >> 32;
GPR(4) = quo & 0xffffffff;
NPC = LR;
}
void OSGetResetCode()
{
u32 resetCode = Memory::Read_U32(0xCC003024);
if ((resetCode & 0x1fffffff) != 0)
{
GPR(3) = resetCode | 0x80000000;
}
else
{
GPR(3) = 0;
}
NPC = LR;
}
u16 GetIOSVersion()
{
return Memory::Read_U16(0x00003140);
}
void OSBootDol()
{
if (GetIOSVersion() >= 30)
{
bootType = GPR(4);
if ((GPR(4) >> 28) == 0x8)
{
u32 resetCode = GPR(30);
// Reset game
Memory::Write_U32(resetCode, 0xCC003024);
LoadBootDOLFromDisc();
return;
}
else if ((GPR(4) >> 28) == 0xA)
{
// Boot from disc partition
PanicAlert("Boot Partition: %08x", GPR(26));
}
else if ((GPR(4) >> 28) == 0xC)
{
std::string dol;
// Boot DOL from disc
u32 ptr = GPR(28);
Memory::GetString(dol, ptr);
if (GetDolFileSize(dol) == 0)
{
ptr = GPR(30);
Memory::GetString(dol, ptr);
if (GetDolFileSize(dol) == 0)
{
// Cannot locate the dol file, exit.
HLE::UnPatch("__OSBootDol");
NPC = PC;
return;
}
}
argsPtr = Memory::Read_U32(GPR(5));
Memory::GetString(args, argsPtr);
LoadDOLFromDisc(dol);
return;
}
else
{
PanicAlert("Unknown boot type: %08x", GPR(4));
}
}
HLE::UnPatch("__OSBootDol");
NPC = PC;
}
}
+9
View File
@@ -39,6 +39,15 @@ namespace HLE_Misc
void FZ_sqrt_internal();
void FZ_rsqrt_internal();
void HBReload();
void OSBootDol();
void OSGetResetCode();
void memcpy();
void memset();
void memmove();
void memcmp();
void div2i();
void div2u();
void ExecuteDOL(u8* dolFile, u32 fileSize);
}
#endif
-4
View File
@@ -37,10 +37,6 @@ namespace
void CCPU::Init(int cpu_core)
{
if (Movie::IsPlayingInput() && Movie::IsConfigSaved())
{
cpu_core = Movie::GetCPUMode();
}
PowerPC::Init(cpu_core);
m_SyncEvent = NULL;
}
+2 -1
View File
@@ -26,6 +26,7 @@
#include "DSPHLE.h"
#include "UCodes/UCodes.h"
#include "../AudioInterface.h"
#include "ConfigManager.h"
DSPHLE::DSPHLE() {
m_InitMixer = false;
@@ -251,7 +252,7 @@ void DSPHLE::InitMixer()
unsigned int AISampleRate, DACSampleRate;
AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate);
delete soundStream;
soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, ac_Config.iFrequency), m_hWnd);
soundStream = AudioCommon::InitSoundStream(new HLEMixer(this, AISampleRate, DACSampleRate, 48000), m_hWnd);
if(!soundStream) PanicAlert("Error starting up sound stream");
// Mixer is initialized
m_InitMixer = true;
+1 -2
View File
@@ -104,7 +104,6 @@ void DSPLLE::dsp_thread(DSPLLE *dsp_lle)
{
Common::SetCurrentThreadName("DSP thread");
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bLockThreads)
{
if (cpu_info.num_cores > 3)
{
@@ -204,7 +203,7 @@ void DSPLLE::InitMixer()
unsigned int AISampleRate, DACSampleRate;
AudioInterface::Callback_GetSampleRate(AISampleRate, DACSampleRate);
delete soundStream;
soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, ac_Config.iFrequency), m_hWnd);
soundStream = AudioCommon::InitSoundStream(new CMixer(AISampleRate, DACSampleRate, 48000), m_hWnd);
if(!soundStream) PanicAlert("Error starting up sound stream");
// Mixer is initialized
m_InitMixer = true;
+1 -4
View File
@@ -416,10 +416,7 @@ bool AreMemoryBreakpointsActivated()
u32 Read_Instruction(const u32 em_address)
{
UGeckoInstruction inst = ReadUnchecked_U32(em_address);
if (inst.OPCD == 1)
return HLE::GetOrigInstruction(em_address);
else
return inst.hex;
return inst.hex;
}
u32 Read_Opcode_JIT_Uncached(const u32 _Address)
@@ -96,8 +96,7 @@ void Init()
m_FlipperRev = 0x246500B1; // revision C
m_Unknown = 0;
// Bleh, why?
//m_ResetCode |= 0x80000000;
m_ResetCode = 0x80000000; // Cold reset
m_InterruptCause = INT_CAUSE_RST_BUTTON | INT_CAUSE_VI;
toggleResetButton = CoreTiming::RegisterEvent("ToggleResetButton", &ToggleResetButtonCallback);
@@ -199,6 +198,7 @@ void Write32(const u32 _uValue, const u32 _iAddress)
case PI_RESET_CODE:
DEBUG_LOG(PROCESSORINTERFACE, "Write %08x to PI_RESET_CODE", _uValue);
m_ResetCode = _uValue;
break;
case PI_FLIPPER_UNK:
@@ -15,6 +15,8 @@
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
#include <cmath>
#include "Attachment/Classic.h"
#include "Attachment/Nunchuk.h"
#include "Attachment/Guitar.h"
@@ -89,23 +91,32 @@ const ReportFeatures reporting_mode_features[] =
{ 0, 0, 0, 0, 23 },
};
void EmulateShake( AccelData* const accel
void EmulateShake(AccelData* const accel
, ControllerEmu::Buttons* const buttons_group
, u8* const shake_step )
{
static const double shake_data[] = { -2.5f, -5.0f, -2.5f, 0.0f, 2.5f, 5.0f, 2.5f, 0.0f };
// frame count of one up/down shake
// < 9 no shake detection in "Wario Land: Shake It"
auto const shake_step_max = 15;
// peak G-force
auto const shake_intensity = 3.f;
// shake is a bitfield of X,Y,Z shake button states
static const unsigned int btns[] = { 0x01, 0x02, 0x04 };
unsigned int shake = 0;
buttons_group->GetState( &shake, btns );
for ( unsigned int i=0; i<3; ++i )
for (int i = 0; i != 3; ++i)
{
if (shake & (1 << i))
{
(&(accel->x))[i] = shake_data[shake_step[i]++];
shake_step[i] %= sizeof(shake_data)/sizeof(double);
(&(accel->x))[i] = std::sin(TAU * shake_step[i] / shake_step_max) * shake_intensity;
shake_step[i] = (shake_step[i] + 1) % shake_step_max;
}
else
shake_step[i] = 0;
}
}
void EmulateTilt(AccelData* const accel
@@ -30,7 +30,12 @@
#include <vector>
#include <queue>
#define PI 3.14159265358979323846
namespace
{
// :)
auto const TAU = 6.28318530717958647692;
auto const PI = TAU / 2.0;
}
// Registry sizes
#define WIIMOTE_EEPROM_SIZE (16*1024)
+28 -27
View File
@@ -34,11 +34,6 @@
#include "WiimoteReal.h"
#include "Host.h"
// Identify the wiimote device by its class
#define WM_DEV_CLASS_0 0x04
#define WM_DEV_CLASS_1 0x25
#define WM_DEV_CLASS_2 0x00
namespace WiimoteReal
{
@@ -95,9 +90,15 @@ int FindWiimotes(Wiimote** wm, int max_wiimotes)
// Display discovered devices
for (i = 0; (i < found_devices) && (found_wiimotes < max_wiimotes); ++i)
{
if ((scan_info[i].dev_class[0] == WM_DEV_CLASS_0) &&
(scan_info[i].dev_class[1] == WM_DEV_CLASS_1) &&
(scan_info[i].dev_class[2] == WM_DEV_CLASS_2))
char name[1000];
memset(name, 0, sizeof(name));
ERROR_LOG(WIIMOTE, "found a device...");
if (hci_read_remote_name(device_sock, &scan_info[i].bdaddr, sizeof(name), name, 0) < 0) {
ERROR_LOG(WIIMOTE, "name request failed");
continue;
}
ERROR_LOG(WIIMOTE, "device name %s", name);
if (IsValidBluetoothName(name))
{
bool new_wiimote = true;
// Determine if this wiimote has already been found.
@@ -146,24 +147,24 @@ bool Wiimote::Connect()
// Output channel
addr.l2_psm = htobs(WM_OUTPUT_CHANNEL);
if ((out_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
connect(out_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
if ((cmd_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
connect(cmd_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
{
DEBUG_LOG(WIIMOTE, "Unable to open output socket to wiimote.");
close(out_sock);
out_sock = -1;
close(cmd_sock);
cmd_sock = -1;
return false;
}
// Input channel
addr.l2_psm = htobs(WM_INPUT_CHANNEL);
if ((in_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
connect(in_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
if ((int_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
connect(int_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
{
DEBUG_LOG(WIIMOTE, "Unable to open input socket from wiimote.");
close(in_sock);
close(out_sock);
in_sock = out_sock = -1;
close(int_sock);
close(cmd_sock);
int_sock = cmd_sock = -1;
return false;
}
@@ -204,17 +205,17 @@ void Wiimote::Close()
{
Host_ConnectWiimote(index, false);
close(out_sock);
close(in_sock);
close(cmd_sock);
close(int_sock);
out_sock = -1;
in_sock = -1;
cmd_sock = -1;
int_sock = -1;
}
}
bool Wiimote::IsOpen() const
{
return out_sock != -1 && in_sock != -1;
return IsConnected() && cmd_sock != -1 && int_sock != -1;
}
int Wiimote::IORead(unsigned char *buf)
@@ -226,19 +227,19 @@ int Wiimote::IORead(unsigned char *buf)
fd_set fds;
FD_ZERO(&fds);
FD_SET(in_sock, &fds);
FD_SET(int_sock, &fds);
if (select(in_sock + 1, &fds, NULL, NULL, &tv) == -1)
if (select(int_sock + 1, &fds, NULL, NULL, &tv) == -1)
{
ERROR_LOG(WIIMOTE, "Unable to select wiimote %i input socket.", index + 1);
return 0;
}
if (!FD_ISSET(in_sock, &fds))
if (!FD_ISSET(int_sock, &fds))
return 0;
// Read the pending message into the buffer
int r = read(in_sock, buf, MAX_PAYLOAD);
int r = read(int_sock, buf, MAX_PAYLOAD);
if (r == -1)
{
// Error reading data
@@ -265,7 +266,7 @@ int Wiimote::IORead(unsigned char *buf)
int Wiimote::IOWrite(unsigned char* buf, int len)
{
return write(out_sock, buf, len);
return write(int_sock, buf, len);
}
}; // WiimoteReal
@@ -16,6 +16,7 @@
// http://code.google.com/p/dolphin-emu/
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include "Common.h"
@@ -44,7 +45,7 @@ Wiimote::Wiimote(const unsigned int _index)
#ifdef __APPLE__
, inputlen(0)
#elif defined(__linux__) && HAVE_BLUEZ
, out_sock(-1), in_sock(-1)
, cmd_sock(-1), int_sock(-1)
#elif defined(_WIN32)
, dev_handle(0), stack(MSBT_STACK_UNKNOWN)
#endif
@@ -319,7 +320,7 @@ void Wiimote::ThreadFunc()
Common::SleepCurrentThread(1);
#else
bool read = false;
while (Write() || (read = true, Read()))
while (Write() || (read = true, IsOpen() && Read()))
{
if (m_audio_reports.Size() && !read)
Read();
@@ -512,19 +513,11 @@ void StateChange(EMUSTATE_CHANGE newState)
// TODO: disable/enable auto reporting, maybe
}
bool IsValidBluetoothName(const char* name) {
static const char* kValidWiiRemoteBluetoothNames[] = {
"Nintendo RVL-CNT-01",
"Nintendo RVL-CNT-01-TR",
"Nintendo RVL-WBC-01",
};
if (name == NULL)
return false;
for (size_t i = 0; i < ARRAYSIZE(kValidWiiRemoteBluetoothNames); i++)
if (strcmp(name, kValidWiiRemoteBluetoothNames[i]) == 0)
return true;
return false;
bool IsValidBluetoothName(const std::string& name)
{
std::string const prefix("Nintendo RVL-");
return name.size() > prefix.size() &&
std::equal(prefix.begin(), prefix.end(), name.begin());
}
}; // end of namespace
@@ -71,8 +71,8 @@ public:
int inputlen;
#elif defined(__linux__) && HAVE_BLUEZ
bdaddr_t bdaddr; // Bluetooth address
int out_sock; // Output socket
int in_sock; // Input socket
int cmd_sock; // Command socket
int int_sock; // Interrupt socket
void Close();
@@ -117,7 +117,7 @@ void StateChange(EMUSTATE_CHANGE newState);
int FindWiimotes(Wiimote** wm, int max_wiimotes);
bool IsValidBluetoothName(const char* name);
bool IsValidBluetoothName(const std::string& name);
}; // WiimoteReal
@@ -34,8 +34,8 @@
// The 4 most significant bits of the first byte of an outgoing command must be
// 0x50 if sending on the command channel and 0xA0 if sending on the interrupt
// channel. On Mac we use interrupt channel; on Windows/Linux, command.
#ifndef __APPLE__
// channel. On Mac and Linux we use interrupt channel; on Windows, command.
#ifdef _WIN32
#define WM_SET_REPORT 0x50
#else
#define WM_SET_REPORT 0xA0
@@ -796,16 +796,17 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress)
// someone with an affected game should test
IOSv = TitleID & 0xffff;
}
if (!bSuccess)
if (!bSuccess && IOSv >= 30 && IOSv != 0xffff)
{
PanicAlertT("IOCTL_ES_LAUNCH: Game tried to reload ios or a title that is not available in your nand dump\n"
"TitleID %016llx.\n Dolphin will likely hang now", TitleID);
}
else
{
static CWII_IPC_HLE_Device_usb_oh1_57e_305* s_Usb = GetUsbPointer();
bool* wiiMoteConnected = new bool[s_Usb->m_WiiMotes.size()];
for (unsigned int i = 0; i < s_Usb->m_WiiMotes.size(); i++)
CWII_IPC_HLE_Device_usb_oh1_57e_305* s_Usb = GetUsbPointer();
size_t size = s_Usb->m_WiiMotes.size();
bool* wiiMoteConnected = new bool[size];
for (unsigned int i = 0; i < size; i++)
wiiMoteConnected[i] = s_Usb->m_WiiMotes[i].IsConnected();
std::string tContentFile(m_ContentFile.c_str());
@@ -26,6 +26,7 @@
#include "PowerPCDisasm.h"
#include "../../IPC_HLE/WII_IPC_HLE.h"
#include "Atomic.h"
#include "HLE/HLE.h"
#ifdef USE_GDBSTUB
#include "../GDBStub.h"
@@ -83,67 +84,72 @@ int startTrace = 0;
void Trace( UGeckoInstruction &instCode )
{
char regs[500]="";
char reg[25]="";
std::string regs = "";
for (int i=0; i<32; i++) {
sprintf(regs, "%sr%02d: %08x ", regs, i, PowerPC::ppcState.gpr[i]);
sprintf(reg, "r%02d: %08x ", i, PowerPC::ppcState.gpr[i]);
regs.append(reg);
}
char fregs[500]="";
char freg[25]="";
std::string fregs = "";
for (int i=0; i<32; i++) {
sprintf(fregs, "%sf%02d: %08llx %08llx ", fregs, i,
PowerPC::ppcState.ps[i][0], PowerPC::ppcState.ps[i][1]);
sprintf(freg, "f%02d: %08llx %08llx ", i, PowerPC::ppcState.ps[i][0], PowerPC::ppcState.ps[i][1]);
fregs.append(freg);
}
char ppcInst[256];
DisassembleGekko(instCode.hex, PC, ppcInst, 256);
DEBUG_LOG(POWERPC, "INTER PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s %08x %s", PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, PowerPC::ppcState.msr, PowerPC::ppcState.spr[8], regs, fregs, instCode.hex, ppcInst);
DEBUG_LOG(POWERPC, "INTER PC: %08x SRR0: %08x SRR1: %08x CRfast: %02x%02x%02x%02x%02x%02x%02x%02x FPSCR: %08x MSR: %08x LR: %08x %s %s %08x %s", PC, SRR0, SRR1, PowerPC::ppcState.cr_fast[0], PowerPC::ppcState.cr_fast[1], PowerPC::ppcState.cr_fast[2], PowerPC::ppcState.cr_fast[3], PowerPC::ppcState.cr_fast[4], PowerPC::ppcState.cr_fast[5], PowerPC::ppcState.cr_fast[6], PowerPC::ppcState.cr_fast[7], PowerPC::ppcState.fpscr, PowerPC::ppcState.msr, PowerPC::ppcState.spr[8], regs.c_str(), fregs.c_str(), instCode.hex, ppcInst);
}
int Interpreter::SingleStepInner(void)
{
static UGeckoInstruction instCode;
#ifdef USE_GDBSTUB
if (gdb_active() && gdb_bp_x(PC)) {
Host_UpdateDisasmDialog();
gdb_signal(SIGTRAP);
gdb_handle_exception();
}
#endif
NPC = PC + sizeof(UGeckoInstruction);
instCode.hex = Memory::Read_Opcode(PC);
// Uncomment to trace the interpreter
//if ((PC & 0xffffff)>=0x0ab54c && (PC & 0xffffff)<=0x0ab624)
// startTrace = 1;
//else
// startTrace = 0;
if (startTrace)
u32 function = m_EndBlock ? HLE::GetFunctionIndex(PC) : 0; // Check for HLE functions after branches
if (function != 0)
{
Trace(instCode);
}
if (instCode.hex != 0)
{
UReg_MSR& msr = (UReg_MSR&)MSR;
if (msr.FP) //If FPU is enabled, just execute
int type = HLE::GetFunctionTypeByIndex(function);
if (type == HLE::HLE_HOOK_START || type == HLE::HLE_HOOK_REPLACE)
{
m_opTable[instCode.OPCD](instCode);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
int flags = HLE::GetFunctionFlagsByIndex(function);
if (HLE::IsEnabled(flags))
{
PowerPC::CheckExceptions();
m_EndBlock = true;
HLEFunction(function);
}
}
else
}
else
{
#ifdef USE_GDBSTUB
if (gdb_active() && gdb_bp_x(PC)) {
Host_UpdateDisasmDialog();
gdb_signal(SIGTRAP);
gdb_handle_exception();
}
#endif
NPC = PC + sizeof(UGeckoInstruction);
instCode.hex = Memory::Read_Opcode(PC);
// Uncomment to trace the interpreter
//if ((PC & 0xffffff)>=0x0ab54c && (PC & 0xffffff)<=0x0ab624)
// startTrace = 1;
//else
// startTrace = 0;
if (startTrace)
{
// check if we have to generate a FPU unavailable exception
if (!PPCTables::UsesFPU(instCode))
Trace(instCode);
}
if (instCode.hex != 0)
{
UReg_MSR& msr = (UReg_MSR&)MSR;
if (msr.FP) //If FPU is enabled, just execute
{
m_opTable[instCode.OPCD](instCode);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
@@ -154,17 +160,30 @@ int Interpreter::SingleStepInner(void)
}
else
{
Common::AtomicOr(PowerPC::ppcState.Exceptions, EXCEPTION_FPU_UNAVAILABLE);
PowerPC::CheckExceptions();
m_EndBlock = true;
// check if we have to generate a FPU unavailable exception
if (!PPCTables::UsesFPU(instCode))
{
m_opTable[instCode.OPCD](instCode);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
{
PowerPC::CheckExceptions();
m_EndBlock = true;
}
}
else
{
Common::AtomicOr(PowerPC::ppcState.Exceptions, EXCEPTION_FPU_UNAVAILABLE);
PowerPC::CheckExceptions();
m_EndBlock = true;
}
}
}
}
else
{
// Memory exception on instruction fetch
PowerPC::CheckExceptions();
m_EndBlock = true;
else
{
// Memory exception on instruction fetch
PowerPC::CheckExceptions();
m_EndBlock = true;
}
}
last_pc = PC;
PC = NPC;
+35 -2
View File
@@ -252,8 +252,6 @@ void Jit64::HLEFunction(UGeckoInstruction _inst)
gpr.Flush(FLUSH_ALL);
fpr.Flush(FLUSH_ALL);
ABI_CallFunctionCC((void*)&HLE::Execute, js.compilerPC, _inst.hex);
MOV(32, R(EAX), M(&NPC));
WriteExitDestInEAX();
}
void Jit64::DoNothing(UGeckoInstruction _inst)
@@ -566,6 +564,27 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc
ABI_CallFunction(thunks.ProtectFunction((void *)&GPFifo::CheckGatherPipe, 0));
}
u32 function = HLE::GetFunctionIndex(ops[i].address);
if (function != 0)
{
int type = HLE::GetFunctionTypeByIndex(function);
if (type == HLE::HLE_HOOK_START || type == HLE::HLE_HOOK_REPLACE)
{
int flags = HLE::GetFunctionFlagsByIndex(function);
if (HLE::IsEnabled(flags))
{
HLEFunction(function);
if (type == HLE::HLE_HOOK_REPLACE)
{
MOV(32, R(EAX), M(&NPC));
js.downcountAmount += js.st.numCycles;
WriteExitDestInEAX();
break;
}
}
}
}
if (!ops[i].skip)
{
if ((opinfo->flags & FL_USE_FPU) && !js.firstFPInstructionFound)
@@ -668,6 +687,20 @@ const u8* Jit64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc
break;
}
u32 function = HLE::GetFunctionIndex(js.blockStart);
if (function != 0)
{
int type = HLE::GetFunctionTypeByIndex(function);
if (type == HLE::HLE_HOOK_END)
{
int flags = HLE::GetFunctionFlagsByIndex(function);
if (HLE::IsEnabled(flags))
{
HLEFunction(function);
}
}
}
if (memory_exception)
{
// Address of instruction could not be translated
+37 -2
View File
@@ -199,7 +199,7 @@ namespace JitILProfiler
static u64 beginTime;
static Block& Add(u64 codeHash)
{
const u32 _blockIndex = blocks.size();
const u32 _blockIndex = (u32)blocks.size();
blocks.push_back(Block());
Block& block = blocks.back();
block.index = _blockIndex;
@@ -649,6 +649,27 @@ const u8* JitIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc
js.next_compilerPC = ops[i + 1].address;
}
u32 function = HLE::GetFunctionIndex(ops[i].address);
if (function != 0)
{
int type = HLE::GetFunctionTypeByIndex(function);
if (type == HLE::HLE_HOOK_START || type == HLE::HLE_HOOK_REPLACE)
{
int flags = HLE::GetFunctionFlagsByIndex(function);
if (HLE::IsEnabled(flags))
{
HLEFunction(function);
if (type == HLE::HLE_HOOK_REPLACE)
{
MOV(32, R(EAX), M(&NPC));
jit->js.downcountAmount += jit->js.st.numCycles;
WriteExitDestInOpArg(R(EAX));
break;
}
}
}
}
if (!ops[i].skip)
{
if (js.memcheck && (opinfo->flags & FL_USE_FPU))
@@ -665,7 +686,7 @@ const u8* JitIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc
{
ibuild.EmitBreakPointCheck(ibuild.EmitIntConst(ops[i].address));
}
JitILTables::CompileInstruction(ops[i]);
if (js.memcheck && (opinfo->flags & FL_LOADSTORE))
@@ -681,6 +702,20 @@ const u8* JitIL::DoJit(u32 em_address, PPCAnalyst::CodeBuffer *code_buf, JitBloc
}
}
u32 function = HLE::GetFunctionIndex(jit->js.blockStart);
if (function != 0)
{
int type = HLE::GetFunctionTypeByIndex(function);
if (type == HLE::HLE_HOOK_END)
{
int flags = HLE::GetFunctionFlagsByIndex(function);
if (HLE::IsEnabled(flags))
{
HLEFunction(function);
}
}
}
if (memory_exception)
{
ibuild.EmitISIException(ibuild.EmitIntConst(em_address));
@@ -135,7 +135,11 @@ bool JitBlock::ContainsAddress(u32 em_address)
// is full and when saving and loading states.
void JitBlockCache::Clear()
{
Core::DisplayMessage("Clearing code cache.", 3000);
if (IsFull())
Core::DisplayMessage("Clearing block cache.", 3000);
else
Core::DisplayMessage("Clearing code cache.", 3000);
for (int i = 0; i < num_blocks; i++)
{
DestroyBlock(i, false);
@@ -370,29 +374,27 @@ bool JitBlock::ContainsAddress(u32 em_address)
{
LinkBlockExits(i);
JitBlock &b = blocks[i];
std::map<u32, int>::iterator iter;
pair<multimap<u32, int>::iterator, multimap<u32, int>::iterator> ppp;
// equal_range(b) returns pair<iterator,iterator> representing the range
// of element with key b
ppp = links_to.equal_range(b.originalAddress);
if (ppp.first == ppp.second)
return;
for (multimap<u32, int>::iterator iter2 = ppp.first; iter2 != ppp.second; ++iter2) {
// PanicAlert("Linking block %i to block %i", iter2->second, i);
LinkBlockExits(iter2->second);
for (multimap<u32, int>::iterator iter = ppp.first; iter != ppp.second; ++iter) {
// PanicAlert("Linking block %i to block %i", iter->second, i);
LinkBlockExits(iter->second);
}
}
void JitBlockCache::UnlinkBlock(int i)
{
JitBlock &b = blocks[i];
std::map<u32, int>::iterator iter;
pair<multimap<u32, int>::iterator, multimap<u32, int>::iterator> ppp;
ppp = links_to.equal_range(b.originalAddress);
if (ppp.first == ppp.second)
return;
for (multimap<u32, int>::iterator iter2 = ppp.first; iter2 != ppp.second; ++iter2) {
JitBlock &sourceBlock = blocks[iter2->second];
for (multimap<u32, int>::iterator iter = ppp.first; iter != ppp.second; ++iter) {
JitBlock &sourceBlock = blocks[iter->second];
for (int e = 0; e < 2; e++)
{
if (sourceBlock.exitAddress[e] == b.originalAddress)
@@ -458,7 +460,7 @@ bool JitBlock::ContainsAddress(u32 em_address)
// !! this works correctly under assumption that any two overlapping blocks end at the same address
if (destroy_block)
{
std::map<pair<u32,u32>, u32>::iterator it1 = block_map.lower_bound(std::make_pair(pAddr, 0)), it2 = it1, it;
std::map<pair<u32,u32>, u32>::iterator it1 = block_map.lower_bound(std::make_pair(pAddr, 0)), it2 = it1;
while (it2 != block_map.end() && it2->first.second < pAddr + length)
{
#ifdef JIT_UNLIMITED_ICACHE
@@ -118,7 +118,7 @@ void EmuCodeBlock::UnsafeLoadToEAX(const Gen::OpArg & opAddress, int accessSize,
void EmuCodeBlock::SafeLoadToEAX(const Gen::OpArg & opAddress, int accessSize, s32 offset, bool signExtend)
{
#if defined(_WIN32) && defined(_M_X64)
#if defined(_M_X64)
#ifdef ENABLE_MEM_CHECK
if (accessSize == 32 && !Core::g_CoreStartupParameter.bMMU && !Core::g_CoreStartupParameter.bEnableDebugging)
#else
@@ -269,23 +269,18 @@ void EmuCodeBlock::SafeWriteRegToReg(X64Reg reg_value, X64Reg reg_addr, int acce
void EmuCodeBlock::SafeWriteFloatToReg(X64Reg xmm_value, X64Reg reg_addr)
{
u32 mem_mask = Memory::ADDR_MASK_HW_ACCESS;
if (Core::g_CoreStartupParameter.bMMU || Core::g_CoreStartupParameter.iTLBHack)
{
mem_mask |= Memory::ADDR_MASK_MEM1;
}
#ifdef ENABLE_MEM_CHECK
if (Core::g_CoreStartupParameter.bEnableDebugging)
{
mem_mask |= Memory::EXRAM_MASK;
}
#endif
TEST(32, R(reg_addr), Imm32(mem_mask));
if (false && cpu_info.bSSSE3) {
// This path should be faster but for some reason it causes errors so I've disabled it.
u32 mem_mask = Memory::ADDR_MASK_HW_ACCESS;
if (Core::g_CoreStartupParameter.bMMU || Core::g_CoreStartupParameter.iTLBHack)
mem_mask |= Memory::ADDR_MASK_MEM1;
#ifdef ENABLE_MEM_CHECK
if (Core::g_CoreStartupParameter.bEnableDebugging)
mem_mask |= Memory::EXRAM_MASK;
#endif
TEST(32, R(reg_addr), Imm32(mem_mask));
FixupBranch argh = J_CC(CC_Z);
MOVSS(M(&float_buffer), xmm_value);
MOV(32, R(EAX), M(&float_buffer));
+14 -1
View File
@@ -153,7 +153,7 @@ bool CFileSystemGCWii::ExportApploader(const char* _rExportFolder) const
return false;
}
bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const
u32 CFileSystemGCWii::GetBootDOLSize() const
{
u32 DolOffset = Read32(0x420) << m_OffsetShift;
u32 DolSize = 0, offset = 0, size = 0;
@@ -175,6 +175,19 @@ bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const
if (offset + size > DolSize)
DolSize = offset + size;
}
return DolSize;
}
bool CFileSystemGCWii::GetBootDOL(u8* &buffer, u32 DolSize) const
{
u32 DolOffset = Read32(0x420) << m_OffsetShift;
return m_rVolume->Read(DolOffset, DolSize, buffer);
}
bool CFileSystemGCWii::ExportDOL(const char* _rExportFolder) const
{
u32 DolOffset = Read32(0x420) << m_OffsetShift;
u32 DolSize = GetBootDOLSize();
std::vector<u8> buffer(DolSize);
if (m_rVolume->Read(DolOffset, DolSize, &buffer[0]))
+2
View File
@@ -38,6 +38,8 @@ public:
virtual bool ExportFile(const char* _rFullPath, const char* _rExportFilename);
virtual bool ExportApploader(const char* _rExportFolder) const;
virtual bool ExportDOL(const char* _rExportFolder) const;
virtual bool GetBootDOL(u8* &buffer, u32 DolSize) const;
virtual u32 GetBootDOLSize() const;
private:
bool m_Initialized;
+2
View File
@@ -57,6 +57,8 @@ public:
virtual bool ExportApploader(const char* _rExportFolder) const = 0;
virtual bool ExportDOL(const char* _rExportFolder) const = 0;
virtual const char* GetFileName(u64 _Address) = 0;
virtual bool GetBootDOL(u8* &buffer, u32 DolSize) const = 0;
virtual u32 GetBootDOLSize() const = 0;
virtual const IVolume *GetVolume() const { return m_rVolume; }
protected:
+15 -17
View File
@@ -25,8 +25,6 @@
#include "HW/Memmap.h"
#include "Frame.h"
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
#define MAX_CHEAT_SEARCH_RESULTS_DISPLAY 256
extern std::vector<ActionReplay::ARCode> arCodes;
@@ -80,8 +78,8 @@ void wxCheatsWindow::Init_ChildControls()
m_Tab_Cheats = new wxPanel(m_Notebook_Main, wxID_ANY, wxDefaultPosition, wxDefaultSize);
m_CheckListBox_CheatsList = new wxCheckListBox(m_Tab_Cheats, wxID_ANY, wxDefaultPosition, wxSize(300, 0), m_CheatStringList, wxLB_HSCROLL, wxDefaultValidator);
_connect_macro_(m_CheckListBox_CheatsList, wxCheatsWindow::OnEvent_CheatsList_ItemSelected, wxEVT_COMMAND_LISTBOX_SELECTED, this);
_connect_macro_(m_CheckListBox_CheatsList, wxCheatsWindow::OnEvent_CheatsList_ItemToggled, wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, this);
m_CheckListBox_CheatsList->Bind(wxEVT_COMMAND_LISTBOX_SELECTED, &wxCheatsWindow::OnEvent_CheatsList_ItemSelected, this);
m_CheckListBox_CheatsList->Bind(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, &wxCheatsWindow::OnEvent_CheatsList_ItemToggled, this);
m_Label_Codename = new wxStaticText(m_Tab_Cheats, wxID_ANY, _("Name: "), wxDefaultPosition, wxDefaultSize);
m_GroupBox_Info = new wxStaticBox(m_Tab_Cheats, wxID_ANY, _("Code Info"), wxDefaultPosition, wxDefaultSize);
@@ -107,10 +105,10 @@ void wxCheatsWindow::Init_ChildControls()
m_Tab_Log = new wxPanel(m_Notebook_Main, wxID_ANY, wxDefaultPosition, wxDefaultSize);
wxButton* const button_updatelog = new wxButton(m_Tab_Log, wxID_ANY, _("Update"));
_connect_macro_(button_updatelog, wxCheatsWindow::OnEvent_ButtonUpdateLog_Press, wxEVT_COMMAND_BUTTON_CLICKED, this);
button_updatelog->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &wxCheatsWindow::OnEvent_ButtonUpdateLog_Press, this);
m_CheckBox_LogAR = new wxCheckBox(m_Tab_Log, wxID_ANY, _("Enable AR Logging"));
_connect_macro_(m_CheckBox_LogAR, wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
m_CheckBox_LogAR->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange, this);
m_CheckBox_LogAR->SetValue(ActionReplay::IsSelfLogging());
m_TextCtrl_Log = new wxTextCtrl(m_Tab_Log, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(100, -1), wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
@@ -134,11 +132,11 @@ void wxCheatsWindow::Init_ChildControls()
// Button Strip
wxButton* const button_apply = new wxButton(panel, wxID_APPLY, _("Apply"), wxDefaultPosition, wxDefaultSize);
_connect_macro_(button_apply, wxCheatsWindow::OnEvent_ApplyChanges_Press, wxEVT_COMMAND_BUTTON_CLICKED, this);
button_apply->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &wxCheatsWindow::OnEvent_ApplyChanges_Press, this);
wxButton* const button_cancel = new wxButton(panel, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize);
_connect_macro_(button_cancel, wxCheatsWindow::OnEvent_ButtonClose_Press, wxEVT_COMMAND_BUTTON_CLICKED, this);
button_cancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &wxCheatsWindow::OnEvent_ButtonClose_Press, this);
Connect(wxID_ANY, wxEVT_CLOSE_WINDOW, wxCloseEventHandler(wxCheatsWindow::OnEvent_Close), (wxObject*)0, this);
Bind(wxEVT_CLOSE_WINDOW, &wxCheatsWindow::OnEvent_Close, this);
wxStdDialogButtonSizer* const sButtons = new wxStdDialogButtonSizer();
sButtons->AddButton(button_apply);
@@ -160,11 +158,11 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent)
{
// first scan button
btnInitScan = new wxButton(this, -1, _("New Scan"));
_connect_macro_(btnInitScan, CheatSearchTab::StartNewSearch, wxEVT_COMMAND_BUTTON_CLICKED, this);
btnInitScan->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CheatSearchTab::StartNewSearch, this);
// next scan button
btnNextScan = new wxButton(this, -1, _("Next Scan"));
_connect_macro_(btnNextScan, CheatSearchTab::FilterCheatSearchResults, wxEVT_COMMAND_BUTTON_CLICKED, this);
btnNextScan->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CheatSearchTab::FilterCheatSearchResults, this);
btnNextScan->Disable();
// data size radio buttons
@@ -185,7 +183,7 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent)
// create AR code button
wxButton* const button_cheat_search_copy_address = new wxButton(this, -1, _("Create AR Code"));
_connect_macro_(button_cheat_search_copy_address, CheatSearchTab::CreateARCode, wxEVT_COMMAND_BUTTON_CLICKED, this);
button_cheat_search_copy_address->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CheatSearchTab::CreateARCode, this);
// results groupbox
wxStaticBoxSizer* const sizer_cheat_search_results = new wxStaticBoxSizer(wxVERTICAL, this, _("Results"));
@@ -200,7 +198,7 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent)
// search value textbox
textctrl_value_x = new wxTextCtrl(this, -1, wxT("0x0"), wxDefaultPosition, wxSize(96,-1));
_connect_macro_(textctrl_value_x, CheatSearchTab::ApplyFocus, wxEVT_SET_FOCUS, this);
textctrl_value_x->Bind(wxEVT_SET_FOCUS, &CheatSearchTab::ApplyFocus, this);
wxBoxSizer* const sizer_cheat_filter_text = new wxBoxSizer(wxHORIZONTAL);
sizer_cheat_filter_text->Add(value_x_radiobtn.rad_uservalue, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5);
@@ -495,7 +493,7 @@ void CheatSearchTab::FilterCheatSearchResults(wxCommandEvent&)
UpdateCheatSearchResultsList();
}
void CheatSearchTab::ApplyFocus(wxCommandEvent& ev)
void CheatSearchTab::ApplyFocus(wxEvent& ev)
{
ev.Skip(true);
value_x_radiobtn.rad_uservalue->SetValue(true);
@@ -590,9 +588,9 @@ CreateCodeDialog::CreateCodeDialog(wxWindow* const parent, const u32 address)
sizer_main->Add(textctrl_value, 0, wxALL, 5);
sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxALL, 5);
Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(CreateCodeDialog::PressOK));
Connect(wxID_CANCEL, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(CreateCodeDialog::PressCancel));
Connect(wxID_ANY, wxEVT_CLOSE_WINDOW, wxCloseEventHandler(CreateCodeDialog::OnEvent_Close), (wxObject*)0, this);
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CreateCodeDialog::PressOK, this, wxID_OK);
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CreateCodeDialog::PressCancel, this, wxID_CANCEL);
Bind(wxEVT_CLOSE_WINDOW, &CreateCodeDialog::OnEvent_Close, this);
SetSizerAndFit(sizer_main);
SetFocus();
+1 -1
View File
@@ -99,7 +99,7 @@ protected:
void StartNewSearch(wxCommandEvent& event);
void FilterCheatSearchResults(wxCommandEvent& event);
void CreateARCode(wxCommandEvent&);
void ApplyFocus(wxCommandEvent&);
void ApplyFocus(wxEvent&);
};
class wxCheatsWindow : public wxDialog
+97 -68
View File
@@ -17,10 +17,12 @@
#include <string> // System
#include <vector>
#include <algorithm>
#include <wx/spinbutt.h>
#include "Common.h"
#include "CommonPaths.h"
#include "FileSearch.h"
#include "Core.h" // Core
#include "HW/EXI.h"
@@ -40,6 +42,14 @@
#include "Main.h"
#include "VideoBackendBase.h"
#if defined(__APPLE__)
#include <tr1/functional>
using std::tr1::function;
#else
#include <functional>
using std::function;
#endif
#define TEXT_BOX(page, text) new wxStaticText(page, wxID_ANY, text, wxDefaultPosition, wxDefaultSize)
extern CFrame* main_frame;
@@ -112,7 +122,6 @@ EVT_CHOICE(ID_FRAMELIMIT, CConfigMain::CoreSettingsChanged)
EVT_CHECKBOX(ID_FRAMELIMIT_USEFPSFORLIMITING, CConfigMain::CoreSettingsChanged)
EVT_RADIOBOX(ID_CPUENGINE, CConfigMain::CoreSettingsChanged)
EVT_CHECKBOX(ID_LOCKTHREADS, CConfigMain::CoreSettingsChanged)
EVT_CHECKBOX(ID_NTSCJ, CConfigMain::CoreSettingsChanged)
@@ -120,14 +129,13 @@ EVT_RADIOBOX(ID_DSPENGINE, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_DSPTHREAD, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_ENABLE_THROTTLE, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_DUMP_AUDIO, CConfigMain::AudioSettingsChanged)
EVT_CHOICE(ID_FREQUENCY, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_DPL2DECODER, CConfigMain::AudioSettingsChanged)
EVT_CHOICE(ID_BACKEND, CConfigMain::AudioSettingsChanged)
EVT_SLIDER(ID_VOLUME, CConfigMain::AudioSettingsChanged)
EVT_CHECKBOX(ID_INTERFACE_CONFIRMSTOP, CConfigMain::DisplaySettingsChanged)
EVT_CHECKBOX(ID_INTERFACE_USEPANICHANDLERS, CConfigMain::DisplaySettingsChanged)
EVT_CHECKBOX(ID_INTERFACE_ONSCREENDISPLAYMESSAGES, CConfigMain::DisplaySettingsChanged)
EVT_CHOICE(ID_INTERFACE_THEME, CConfigMain::DisplaySettingsChanged)
EVT_CHOICE(ID_INTERFACE_LANG, CConfigMain::DisplaySettingsChanged)
EVT_BUTTON(ID_HOTKEY_CONFIG, CConfigMain::DisplaySettingsChanged)
@@ -211,12 +219,13 @@ void CConfigMain::UpdateGUI()
EnableCheats->Disable();
CPUEngine->Disable();
LockThreads->Disable();
_NTSCJ->Disable();
// Disable stuff on AudioPage
DSPEngine->Disable();
DSPThread->Disable();
DPL2Decoder->Disable();
Latency->Disable();
// Disable stuff on GamecubePage
GCSystemLang->Disable();
@@ -253,14 +262,6 @@ void CConfigMain::InitializeGUILists()
arrayStringFor_DSPEngine.Add(_("DSP LLE recompiler"));
arrayStringFor_DSPEngine.Add(_("DSP LLE interpreter (slow)"));
// Display page
// Themes
arrayStringFor_Themes.Add(wxT("Boomy"));
arrayStringFor_Themes.Add(wxT("Vista"));
arrayStringFor_Themes.Add(wxT("X-Plastik"));
arrayStringFor_Themes.Add(wxT("KDE"));
// Gamecube page
// GC Language arrayStrings
arrayStringFor_GCSystemLang.Add(_("English"));
@@ -320,9 +321,6 @@ void CConfigMain::InitializeGUIValues()
{
const SCoreStartupParameter& startup_params = SConfig::GetInstance().m_LocalCoreStartupParameter;
// Load DSP Settings.
ac_Config.Load();
// General - Basic
CPUThread->SetValue(startup_params.bCPUThread);
SkipIdle->SetValue(startup_params.bSkipIdle);
@@ -332,7 +330,6 @@ void CConfigMain::InitializeGUIValues()
// General - Advanced
CPUEngine->SetSelection(startup_params.iCPUCore);
LockThreads->SetValue(startup_params.bLockThreads);
_NTSCJ->SetValue(startup_params.bForceNTSCJ);
@@ -340,7 +337,6 @@ void CConfigMain::InitializeGUIValues()
ConfirmStop->SetValue(startup_params.bConfirmStop);
UsePanicHandlers->SetValue(startup_params.bUsePanicHandlers);
OnScreenDisplayMessages->SetValue(startup_params.bOnScreenDisplayMessages);
Theme->SetSelection(startup_params.iTheme);
// need redesign
for (unsigned int i = 0; i < sizeof(langIds) / sizeof(wxLanguage); i++)
{
@@ -355,16 +351,18 @@ void CConfigMain::InitializeGUIValues()
if (startup_params.bDSPHLE)
DSPEngine->SetSelection(0);
else
DSPEngine->SetSelection(ac_Config.m_EnableJIT ? 1 : 2);
DSPEngine->SetSelection(SConfig::GetInstance().m_EnableJIT ? 1 : 2);
// Audio
VolumeSlider->Enable(SupportsVolumeChanges(ac_Config.sBackend));
VolumeSlider->SetValue(ac_Config.m_Volume);
VolumeText->SetLabel(wxString::Format(wxT("%d %%"), ac_Config.m_Volume));
VolumeSlider->Enable(SupportsVolumeChanges(SConfig::GetInstance().sBackend));
VolumeSlider->SetValue(SConfig::GetInstance().m_Volume);
VolumeText->SetLabel(wxString::Format(wxT("%d %%"), SConfig::GetInstance().m_Volume));
DSPThread->SetValue(startup_params.bDSPThread);
DumpAudio->SetValue(ac_Config.m_DumpAudio ? true : false);
FrequencySelection->SetSelection(
FrequencySelection->FindString(wxString::Format(_("%d Hz"), ac_Config.iFrequency)));
DumpAudio->SetValue(SConfig::GetInstance().m_DumpAudio ? true : false);
DPL2Decoder->Enable(std::string(SConfig::GetInstance().sBackend) == BACKEND_OPENAL);
DPL2Decoder->SetValue(startup_params.bDPL2Decoder);
Latency->Enable(std::string(SConfig::GetInstance().sBackend) == BACKEND_OPENAL);
Latency->SetValue(startup_params.iLatency);
// add backends to the list
AddAudioBackends();
@@ -496,17 +494,13 @@ void CConfigMain::InitializeGUITooltips()
// Display - Interface
ConfirmStop->SetToolTip(_("Show a confirmation box before stopping a game."));
UsePanicHandlers->SetToolTip(_("Show a message box when a potentially serious error has occured.\nDisabling this may avoid annoying and non-fatal messages, but it may also mean that Dolphin suddenly crashes without any explanation at all."));
UsePanicHandlers->SetToolTip(_("Show a message box when a potentially serious error has occurred.\nDisabling this may avoid annoying and non-fatal messages, but it may also mean that Dolphin suddenly crashes without any explanation at all."));
OnScreenDisplayMessages->SetToolTip(_("Show messages on the emulation screen area.\nThese messages include memory card writes, video backend and CPU information, and JIT cache clearing."));
// Display - Themes: Copyright notice
Theme->SetToolTip(_("Boomy: Milosz Wlazlo [[email protected]]\nVista: VistaIcons.com\nX-Plastik: black_rider [ForumW.org]\nKDE: KDE-Look.org"));
InterfaceLang->SetToolTip(_("Change the language of the user interface.\nRequires restart."));
// Audio tooltips
DSPThread->SetToolTip(_("Run DSP LLE on a dedicated thread (not recommended)."));
FrequencySelection->SetToolTip(_("Changing this will have no effect while the emulator is running!"));
BackendSelection->SetToolTip(_("Changing this will have no effect while the emulator is running!"));
// Gamecube - Devices
@@ -514,6 +508,16 @@ void CConfigMain::InitializeGUITooltips()
// Wii - Devices
WiiKeyboard->SetToolTip(_("This could cause slow down in Wii Menu and some games."));
#if defined(__APPLE__)
DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. Not available on OSX."));
#elif defined(__linux__)
DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only."));
#elif defined(_WIN32)
DPL2Decoder->SetToolTip(_("Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL backend only. May need to rename soft_oal.dll to OpenAL32.dll to make it work."));
#endif
Latency->SetToolTip(_("Sets the latency (in ms). Higher values may reduce audio crackling. OpenAL backend only."));
}
void CConfigMain::CreateGUIControls()
@@ -546,7 +550,6 @@ void CConfigMain::CreateGUIControls()
UseFPSForLimiting = new wxCheckBox(GeneralPage, ID_FRAMELIMIT_USEFPSFORLIMITING, _("Limit by FPS"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
// Core Settings - Advanced
CPUEngine = new wxRadioBox(GeneralPage, ID_CPUENGINE, _("CPU Emulator Engine"), wxDefaultPosition, wxDefaultSize, arrayStringFor_CPUEngine, 0, wxRA_SPECIFY_ROWS);
LockThreads = new wxCheckBox(GeneralPage, ID_LOCKTHREADS, _("Lock Threads to Cores"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
_NTSCJ = new wxCheckBox(GeneralPage, ID_NTSCJ, _("Force Console as NTSC-J"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
// Populate the General settings
@@ -562,7 +565,6 @@ void CConfigMain::CreateGUIControls()
wxStaticBoxSizer* const sbAdvanced = new wxStaticBoxSizer(wxVERTICAL, GeneralPage, _("Advanced Settings"));
sbAdvanced->Add(CPUEngine, 0, wxALL, 5);
sbAdvanced->Add(LockThreads, 0, wxALL, 5);
sbAdvanced->Add(_NTSCJ, 0, wxALL, 5);
wxBoxSizer* const sGeneralPage = new wxBoxSizer(wxVERTICAL);
@@ -576,9 +578,6 @@ void CConfigMain::CreateGUIControls()
// Hotkey configuration
HotkeyConfig = new wxButton(DisplayPage, ID_HOTKEY_CONFIG, _("Hotkeys"),
wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, wxDefaultValidator);
// Themes
Theme = new wxChoice(DisplayPage, ID_INTERFACE_THEME, wxDefaultPosition,
wxDefaultSize, arrayStringFor_Themes, 0, wxDefaultValidator);
// Interface settings
ConfirmStop = new wxCheckBox(DisplayPage, ID_INTERFACE_CONFIRMSTOP, _("Confirm on Stop"),
wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
@@ -592,10 +591,42 @@ void CConfigMain::CreateGUIControls()
sInterface->Add(InterfaceLang, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
sInterface->AddStretchSpacer();
sInterface->Add(HotkeyConfig, 0, wxALIGN_RIGHT | wxALL, 5);
wxBoxSizer* scInterface = new wxBoxSizer(wxHORIZONTAL);
// theme selection
auto const theme_selection = new wxChoice(DisplayPage, wxID_ANY);
CFileSearch::XStringVector theme_dirs;
theme_dirs.push_back(File::GetUserPath(D_THEMES_IDX));
#if !defined(_WIN32)
theme_dirs.push_back(SHARED_USER_DIR THEMES_DIR);
#endif
CFileSearch cfs(CFileSearch::XStringVector(1, "*"), theme_dirs);
auto const& sv = cfs.GetFileNames();
std::for_each(sv.begin(), sv.end(), [theme_selection](const std::string& filename)
{
std::string name, ext;
SplitPath(filename, NULL, &name, &ext);
name += ext;
if (-1 == theme_selection->FindString(name))
theme_selection->Append(name);
});
theme_selection->SetStringSelection(SConfig::GetInstance().m_LocalCoreStartupParameter.theme_name);
// std::function = avoid error on msvc
theme_selection->Bind(wxEVT_COMMAND_CHOICE_SELECTED, function<void(wxEvent&)>([theme_selection](wxEvent&)
{
SConfig::GetInstance().m_LocalCoreStartupParameter.theme_name = theme_selection->GetStringSelection();
main_frame->InitBitmaps();
}));
auto const scInterface = new wxBoxSizer(wxHORIZONTAL);
scInterface->Add(TEXT_BOX(DisplayPage, _("Theme:")), 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
scInterface->Add(Theme, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
scInterface->Add(theme_selection, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
scInterface->AddStretchSpacer();
sbInterface = new wxStaticBoxSizer(wxVERTICAL, DisplayPage, _("Interface Settings"));
sbInterface->Add(ConfirmStop, 0, wxALL, 5);
sbInterface->Add(UsePanicHandlers, 0, wxALL, 5);
@@ -613,20 +644,23 @@ void CConfigMain::CreateGUIControls()
DSPThread = new wxCheckBox(AudioPage, ID_DSPTHREAD, _("DSP LLE on Thread"));
DumpAudio = new wxCheckBox(AudioPage, ID_DUMP_AUDIO, _("Dump Audio"),
wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
DPL2Decoder = new wxCheckBox(AudioPage, ID_DPL2DECODER, _("Dolby Pro Logic II decoder"));
VolumeSlider = new wxSlider(AudioPage, ID_VOLUME, 0, 1, 100,
wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL|wxSL_INVERSE);
VolumeText = new wxStaticText(AudioPage, wxID_ANY, wxT(""),
wxDefaultPosition, wxDefaultSize, 0);
BackendSelection = new wxChoice(AudioPage, ID_BACKEND, wxDefaultPosition,
wxDefaultSize, wxArrayBackends, 0, wxDefaultValidator, wxEmptyString);
FrequencySelection = new wxChoice(AudioPage, ID_FREQUENCY);
FrequencySelection->Append(wxString::Format(_("%d Hz"), 48000));
FrequencySelection->Append(wxString::Format(_("%d Hz"), 32000));
Latency = new wxSpinCtrl(AudioPage, ID_LATENCY, "", wxDefaultPosition, wxDefaultSize,
wxSP_ARROW_KEYS, 0, 30);
Latency->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &CConfigMain::AudioSettingsChanged, this);
if (Core::GetState() != Core::CORE_UNINITIALIZED)
{
FrequencySelection->Disable();
Latency->Disable();
BackendSelection->Disable();
DPL2Decoder->Disable();
}
// Create sizer and add items to dialog
@@ -634,6 +668,7 @@ void CConfigMain::CreateGUIControls()
sbAudioSettings->Add(DSPEngine, 0, wxALL | wxEXPAND, 5);
sbAudioSettings->Add(DSPThread, 0, wxALL, 5);
sbAudioSettings->Add(DumpAudio, 0, wxALL, 5);
sbAudioSettings->Add(DPL2Decoder, 0, wxALL, 5);
wxStaticBoxSizer *sbVolume = new wxStaticBoxSizer(wxVERTICAL, AudioPage, _("Volume"));
sbVolume->Add(VolumeSlider, 1, wxLEFT|wxRIGHT, 13);
@@ -642,8 +677,8 @@ void CConfigMain::CreateGUIControls()
wxGridBagSizer *sBackend = new wxGridBagSizer();
sBackend->Add(TEXT_BOX(AudioPage, _("Audio Backend:")), wxGBPosition(0, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL|wxALL, 5);
sBackend->Add(BackendSelection, wxGBPosition(0, 1), wxDefaultSpan, wxALL, 5);
sBackend->Add(TEXT_BOX(AudioPage, _("Sample Rate:")), wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL|wxALL, 5);
sBackend->Add(FrequencySelection, wxGBPosition(1, 1), wxDefaultSpan, wxALL, 5);
sBackend->Add(TEXT_BOX(AudioPage, _("Latency:")), wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL|wxALL, 5);
sBackend->Add(Latency, wxGBPosition(1, 1), wxDefaultSpan, wxALL, 5);
wxStaticBoxSizer *sbBackend = new wxStaticBoxSizer(wxHORIZONTAL, AudioPage, _("Backend Settings"));
sbBackend->Add(sBackend, 0, wxEXPAND);
@@ -826,9 +861,6 @@ void CConfigMain::OnOk(wxCommandEvent& WXUNUSED (event))
// Save the config. Dolphin crashes to often to save the settings on closing only
SConfig::GetInstance().SaveSettings();
// Save Audio settings
ac_Config.SaveSettings();
}
// Core settings
@@ -848,7 +880,7 @@ void CConfigMain::CoreSettingsChanged(wxCommandEvent& event)
break;
case ID_FRAMELIMIT:
SConfig::GetInstance().m_Framelimit = Framelimit->GetSelection();
ac_Config.Update();
AudioCommon::UpdateSoundStream();
break;
case ID_FRAMELIMIT_USEFPSFORLIMITING:
SConfig::GetInstance().b_UseFPS = UseFPSForLimiting->IsChecked();
@@ -860,9 +892,6 @@ void CConfigMain::CoreSettingsChanged(wxCommandEvent& event)
main_frame->g_pCodeWindow->GetMenuBar()->Check(IDM_INTERPRETER,
SConfig::GetInstance().m_LocalCoreStartupParameter.iCPUCore?false:true);
break;
case ID_LOCKTHREADS:
SConfig::GetInstance().m_LocalCoreStartupParameter.bLockThreads = LockThreads->IsChecked();
break;
case ID_NTSCJ:
SConfig::GetInstance().m_LocalCoreStartupParameter.bForceNTSCJ = _NTSCJ->IsChecked();
break;
@@ -886,10 +915,6 @@ void CConfigMain::DisplaySettingsChanged(wxCommandEvent& event)
SConfig::GetInstance().m_LocalCoreStartupParameter.bOnScreenDisplayMessages = OnScreenDisplayMessages->IsChecked();
SetEnableAlert(OnScreenDisplayMessages->IsChecked());
break;
case ID_INTERFACE_THEME:
SConfig::GetInstance().m_LocalCoreStartupParameter.iTheme = Theme->GetSelection();
main_frame->InitBitmaps();
break;
case ID_INTERFACE_LANG:
if (SConfig::GetInstance().m_InterfaceLanguage != langIds[InterfaceLang->GetSelection()])
SuccessAlertT("You must restart Dolphin in order for the change to take effect.");
@@ -913,13 +938,13 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event)
case ID_DSPENGINE:
SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPHLE = DSPEngine->GetSelection() == 0;
if (!DSPEngine->GetSelection() == 0)
ac_Config.m_EnableJIT = DSPEngine->GetSelection() == 1;
ac_Config.Update();
SConfig::GetInstance().m_EnableJIT = DSPEngine->GetSelection() == 1;
AudioCommon::UpdateSoundStream();
break;
case ID_VOLUME:
ac_Config.m_Volume = VolumeSlider->GetValue();
ac_Config.Update();
SConfig::GetInstance().m_Volume = VolumeSlider->GetValue();
AudioCommon::UpdateSoundStream();
VolumeText->SetLabel(wxString::Format(wxT("%d %%"), VolumeSlider->GetValue()));
break;
@@ -927,19 +952,24 @@ void CConfigMain::AudioSettingsChanged(wxCommandEvent& event)
SConfig::GetInstance().m_LocalCoreStartupParameter.bDSPThread = DSPThread->IsChecked();
break;
case ID_DPL2DECODER:
SConfig::GetInstance().m_LocalCoreStartupParameter.bDPL2Decoder = DPL2Decoder->IsChecked();
break;
case ID_BACKEND:
VolumeSlider->Enable(SupportsVolumeChanges(std::string(BackendSelection->GetStringSelection().mb_str())));
ac_Config.sBackend = BackendSelection->GetStringSelection().mb_str();
ac_Config.Update();
Latency->Enable(std::string(BackendSelection->GetStringSelection().mb_str()) == BACKEND_OPENAL);
DPL2Decoder->Enable(std::string(BackendSelection->GetStringSelection().mb_str()) == BACKEND_OPENAL);
SConfig::GetInstance().sBackend = BackendSelection->GetStringSelection().mb_str();
AudioCommon::UpdateSoundStream();
break;
case ID_LATENCY:
SConfig::GetInstance().m_LocalCoreStartupParameter.iLatency = Latency->GetValue();
break;
default:
ac_Config.m_DumpAudio = DumpAudio->GetValue();
long int frequency;
FrequencySelection->GetStringSelection().ToLong(&frequency);
ac_Config.iFrequency = frequency;
ac_Config.Update();
SConfig::GetInstance().m_DumpAudio = DumpAudio->GetValue();
break;
}
}
@@ -953,7 +983,7 @@ void CConfigMain::AddAudioBackends()
{
BackendSelection->Append(wxString::FromAscii((*iter).c_str()));
int num = BackendSelection->\
FindString(wxString::FromAscii(ac_Config.sBackend.c_str()));
FindString(wxString::FromAscii(SConfig::GetInstance().sBackend.c_str()));
BackendSelection->SetSelection(num);
}
}
@@ -966,8 +996,7 @@ bool CConfigMain::SupportsVolumeChanges(std::string backend)
return (backend == BACKEND_DIRECTSOUND ||
backend == BACKEND_COREAUDIO ||
backend == BACKEND_OPENAL ||
backend == BACKEND_XAUDIO2 ||
backend == BACKEND_PULSEAUDIO);
backend == BACKEND_XAUDIO2);
}
+5 -8
View File
@@ -69,7 +69,6 @@ private:
ID_FRAMELIMIT_USEFPSFORLIMITING,
ID_CPUENGINE,
ID_LOCKTHREADS,
ID_DSPTHREAD,
ID_NTSCJ,
@@ -79,7 +78,8 @@ private:
ID_ENABLE_HLE_AUDIO,
ID_ENABLE_THROTTLE,
ID_DUMP_AUDIO,
ID_FREQUENCY,
ID_DPL2DECODER,
ID_LATENCY,
ID_BACKEND,
ID_VOLUME,
@@ -87,7 +87,6 @@ private:
ID_INTERFACE_CONFIRMSTOP,
ID_INTERFACE_USEPANICHANDLERS,
ID_INTERFACE_ONSCREENDISPLAYMESSAGES,
ID_INTERFACE_THEME,
ID_INTERFACE_LANG,
ID_HOTKEY_CONFIG,
@@ -143,7 +142,6 @@ private:
wxCheckBox* EnableOpenCL;
wxRadioBox* CPUEngine;
wxCheckBox* DSPThread;
wxCheckBox* LockThreads;
wxCheckBox* _NTSCJ;
@@ -155,17 +153,17 @@ private:
wxBoxSizer* sAudioPage; // GC settings
wxRadioBox* DSPEngine;
wxSlider* VolumeSlider;
wxStaticText* VolumeText;
wxStaticText* VolumeText;
wxCheckBox* DumpAudio;
wxCheckBox* DPL2Decoder;
wxArrayString wxArrayBackends;
wxChoice* BackendSelection;
wxChoice* FrequencySelection;
wxSpinCtrl* Latency;
// Interface
wxCheckBox* ConfirmStop;
wxCheckBox* UsePanicHandlers;
wxCheckBox* OnScreenDisplayMessages;
wxChoice* Theme;
wxChoice* InterfaceLang;
wxButton* HotkeyConfig;
@@ -227,7 +225,6 @@ private:
wxArrayString arrayStringFor_CPUEngine;
wxArrayString arrayStringFor_DSPEngine;
wxArrayString arrayStringFor_FullscreenResolution;
wxArrayString arrayStringFor_Themes;
wxArrayString arrayStringFor_InterfaceLang;
wxArrayString arrayStringFor_GCSystemLang;
wxArrayString arrayStringFor_WiiSensBarPos;
@@ -31,13 +31,10 @@ extern "C" {
#include "../../resources/toolbar_debugger_delete.c"
}
#define _connect_macro_(id, handler) \
Connect(id, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(handler), (wxObject*)0, (wxEvtHandler*)parent)
class CBreakPointBar : public wxAuiToolBar
{
public:
CBreakPointBar(wxWindow* parent, const wxWindowID id)
CBreakPointBar(CBreakPointWindow* parent, const wxWindowID id)
: wxAuiToolBar(parent, id, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_TEXT)
{
@@ -51,26 +48,26 @@ public:
wxBitmap(wxGetBitmapFromMemory(toolbar_add_memcheck_png).ConvertToImage().Rescale(24, 24));
AddTool(ID_DELETE, wxT("Delete"), m_Bitmaps[Toolbar_Delete]);
_connect_macro_(ID_DELETE, CBreakPointWindow::OnDelete);
Bind(wxEVT_COMMAND_TOOL_CLICKED, &CBreakPointWindow::OnDelete, parent, ID_DELETE);
AddTool(ID_CLEAR, wxT("Clear"), m_Bitmaps[Toolbar_Delete]);
_connect_macro_(ID_CLEAR, CBreakPointWindow::OnClear);
Bind(wxEVT_COMMAND_TOOL_CLICKED, &CBreakPointWindow::OnClear, parent, ID_CLEAR);
AddTool(ID_ADDBP, wxT("+BP"), m_Bitmaps[Toolbar_Add_BP]);
_connect_macro_(ID_ADDBP, CBreakPointWindow::OnAddBreakPoint);
Bind(wxEVT_COMMAND_TOOL_CLICKED, &CBreakPointWindow::OnAddBreakPoint, parent, ID_ADDBP);
// Add memory breakpoints if you can use them
if (Memory::AreMemoryBreakpointsActivated())
{
AddTool(ID_ADDMC, wxT("+MC"), m_Bitmaps[Toolbar_Add_MC]);
_connect_macro_(ID_ADDMC, CBreakPointWindow::OnAddMemoryCheck);
Bind(wxEVT_COMMAND_TOOL_CLICKED, &CBreakPointWindow::OnAddMemoryCheck, parent, ID_ADDMC);
}
AddTool(ID_LOAD, wxT("Load"), m_Bitmaps[Toolbar_Delete]);
_connect_macro_(ID_LOAD, CBreakPointWindow::LoadAll);
Bind(wxEVT_COMMAND_TOOL_CLICKED, &CBreakPointWindow::LoadAll, parent, ID_LOAD);
AddTool(ID_SAVE, wxT("Save"), m_Bitmaps[Toolbar_Delete]);
_connect_macro_(ID_SAVE, CBreakPointWindow::Event_SaveAll);
Bind(wxEVT_COMMAND_TOOL_CLICKED, &CBreakPointWindow::Event_SaveAll, parent, ID_SAVE);
}
private:
@@ -52,10 +52,7 @@
extern "C" // Bitmaps
{
#include "../../resources/toolbar_play.c"
#include "../../resources/toolbar_pause.c"
#include "../../resources/toolbar_add_memorycheck.c"
#include "../../resources/toolbar_debugger_delete.c"
#include "../../resources/toolbar_add_breakpoint.c"
}
@@ -563,23 +560,21 @@ bool CCodeWindow::JITBlockLinking()
void CCodeWindow::InitBitmaps()
{
// load original size 48x48
m_Bitmaps[Toolbar_DebugGo] = wxGetBitmapFromMemory(toolbar_play_png);
m_Bitmaps[Toolbar_Step] = wxGetBitmapFromMemory(toolbar_add_breakpoint_png);
m_Bitmaps[Toolbar_StepOver] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
m_Bitmaps[Toolbar_Skip] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
m_Bitmaps[Toolbar_GotoPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
m_Bitmaps[Toolbar_SetPC] = wxGetBitmapFromMemory(toolbar_add_memcheck_png);
m_Bitmaps[Toolbar_DebugPause] = wxGetBitmapFromMemory(toolbar_pause_png);
// scale to 24x24 for toolbar
for (size_t n = Toolbar_DebugGo; n < ToolbarDebugBitmapMax; n++)
for (size_t n = 0; n < ToolbarDebugBitmapMax; n++)
m_Bitmaps[n] = wxBitmap(m_Bitmaps[n].ConvertToImage().Scale(24, 24));
}
void CCodeWindow::PopulateToolbar(wxAuiToolBar* toolBar)
{
int w = m_Bitmaps[Toolbar_DebugGo].GetWidth(),
h = m_Bitmaps[Toolbar_DebugGo].GetHeight();
int w = m_Bitmaps[0].GetWidth(),
h = m_Bitmaps[0].GetHeight();
toolBar->SetToolBitmapSize(wxSize(w, h));
toolBar->AddTool(IDM_STEP, _("Step"), m_Bitmaps[Toolbar_Step]);
@@ -54,15 +54,6 @@
#include "ConfigManager.h"
extern "C" // Bitmaps
{
#include "../../resources/toolbar_play.c"
#include "../../resources/toolbar_pause.c"
#include "../../resources/toolbar_add_memorycheck.c"
#include "../../resources/toolbar_debugger_delete.c"
#include "../../resources/toolbar_add_breakpoint.c"
}
// Save and load settings
// -----------------------------
void CCodeWindow::Load()
+38 -38
View File
@@ -56,24 +56,24 @@ FifoPlayerDlg::FifoPlayerDlg(wxWindow * const parent) :
FifoPlayerDlg::~FifoPlayerDlg()
{
Disconnect(RECORDING_FINISHED_EVENT, wxCommandEventHandler(FifoPlayerDlg::OnRecordingFinished), NULL, this);
Disconnect(FRAME_WRITTEN_EVENT, wxCommandEventHandler(FifoPlayerDlg::OnFrameWritten), NULL, this);
Unbind(RECORDING_FINISHED_EVENT, &FifoPlayerDlg::OnRecordingFinished, this);
Unbind(FRAME_WRITTEN_EVENT, &FifoPlayerDlg::OnFrameWritten, this);
// Disconnect Events
Disconnect(wxEVT_PAINT, wxPaintEventHandler(FifoPlayerDlg::OnPaint), NULL, this);
m_FrameFromCtrl->Disconnect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnFrameFrom), NULL, this);
m_FrameToCtrl->Disconnect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnFrameTo), NULL, this);
m_ObjectFromCtrl->Disconnect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnObjectFrom), NULL, this);
m_ObjectToCtrl->Disconnect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnObjectTo), NULL, this);
m_EarlyMemoryUpdates->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnCheckEarlyMemoryUpdates), NULL, this);
m_RecordStop->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnRecordStop), NULL, this);
m_Save->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnSaveFile), NULL, this);
m_FramesToRecordCtrl->Disconnect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnNumFramesToRecord), NULL, this);
m_Close->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnCloseClick), NULL, this);
Unbind(wxEVT_PAINT, &FifoPlayerDlg::OnPaint, this);
m_FrameFromCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnFrameFrom, this);
m_FrameToCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnFrameTo, this);
m_ObjectFromCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnObjectFrom, this);
m_ObjectToCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnObjectTo, this);
m_EarlyMemoryUpdates->Unbind(wxEVT_COMMAND_CHECKBOX_CLICKED, &FifoPlayerDlg::OnCheckEarlyMemoryUpdates, this);
m_RecordStop->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnRecordStop, this);
m_Save->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnSaveFile, this);
m_FramesToRecordCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnNumFramesToRecord, this);
m_Close->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnCloseClick, this);
m_framesList->Disconnect(wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnFrameListSelectionChanged), NULL, this);
m_objectsList->Disconnect(wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnObjectListSelectionChanged), NULL, this);
m_objectCmdList->Disconnect(wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnObjectCmdListSelectionChanged), NULL, this);
m_framesList->Unbind(wxEVT_COMMAND_LISTBOX_SELECTED, &FifoPlayerDlg::OnFrameListSelectionChanged, this);
m_objectsList->Unbind(wxEVT_COMMAND_LISTBOX_SELECTED, &FifoPlayerDlg::OnObjectListSelectionChanged, this);
m_objectCmdList->Unbind(wxEVT_COMMAND_LISTBOX_SELECTED, &FifoPlayerDlg::OnObjectCmdListSelectionChanged, this);
FifoPlayer::GetInstance().SetFrameWrittenCallback(NULL);
@@ -306,37 +306,37 @@ void FifoPlayerDlg::CreateGUIControls()
Center(wxBOTH);
// Connect Events
Connect(wxEVT_PAINT, wxPaintEventHandler(FifoPlayerDlg::OnPaint));
m_FrameFromCtrl->Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnFrameFrom), NULL, this);
m_FrameToCtrl->Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnFrameTo), NULL, this);
m_ObjectFromCtrl->Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnObjectFrom), NULL, this);
m_ObjectToCtrl->Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnObjectTo), NULL, this);
m_EarlyMemoryUpdates->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnCheckEarlyMemoryUpdates), NULL, this);
m_RecordStop->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnRecordStop), NULL, this);
m_Save->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnSaveFile), NULL, this);
m_FramesToRecordCtrl->Connect(wxEVT_COMMAND_SPINCTRL_UPDATED, wxSpinEventHandler(FifoPlayerDlg::OnNumFramesToRecord), NULL, this);
Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnCloseClick), NULL, this);
Bind(wxEVT_PAINT, &FifoPlayerDlg::OnPaint, this);
m_FrameFromCtrl->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnFrameFrom, this);
m_FrameToCtrl->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnFrameTo, this);
m_ObjectFromCtrl->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnObjectFrom, this);
m_ObjectToCtrl->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnObjectTo, this);
m_EarlyMemoryUpdates->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &FifoPlayerDlg::OnCheckEarlyMemoryUpdates, this);
m_RecordStop->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnRecordStop, this);
m_Save->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnSaveFile, this);
m_FramesToRecordCtrl->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnNumFramesToRecord, this);
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnCloseClick, this);
m_framesList->Connect(wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnFrameListSelectionChanged), NULL, this);
m_objectsList->Connect(wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnObjectListSelectionChanged), NULL, this);
m_objectCmdList->Connect(wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnObjectCmdListSelectionChanged), NULL, this);
m_framesList->Bind(wxEVT_COMMAND_LISTBOX_SELECTED, &FifoPlayerDlg::OnFrameListSelectionChanged, this);
m_objectsList->Bind(wxEVT_COMMAND_LISTBOX_SELECTED, &FifoPlayerDlg::OnObjectListSelectionChanged, this);
m_objectCmdList->Bind(wxEVT_COMMAND_LISTBOX_SELECTED, &FifoPlayerDlg::OnObjectCmdListSelectionChanged, this);
m_beginSearch->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnBeginSearch), NULL, this);
m_findNext->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnFindNextClick), NULL, this);
m_findPrevious->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FifoPlayerDlg::OnFindPreviousClick), NULL, this);
m_beginSearch->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnBeginSearch, this);
m_findNext->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnFindNextClick, this);
m_findPrevious->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnFindPreviousClick, this);
m_searchField->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(FifoPlayerDlg::OnBeginSearch), NULL, this);
m_searchField->Connect(wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(FifoPlayerDlg::OnSearchFieldTextChanged), NULL, this);
m_searchField->Bind(wxEVT_COMMAND_TEXT_ENTER, &FifoPlayerDlg::OnBeginSearch, this);
m_searchField->Bind(wxEVT_COMMAND_TEXT_UPDATED, &FifoPlayerDlg::OnSearchFieldTextChanged, this);
// Setup command copying
wxAcceleratorEntry entry;
entry.Set(wxACCEL_CTRL, (int)'C', wxID_COPY);
wxAcceleratorTable accel(1, &entry);
m_objectCmdList->SetAcceleratorTable(accel);
m_objectCmdList->Connect(wxID_COPY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(FifoPlayerDlg::OnObjectCmdListSelectionCopy), NULL, this);
m_objectCmdList->Bind(wxEVT_COMMAND_MENU_SELECTED, &FifoPlayerDlg::OnObjectCmdListSelectionCopy, this, wxID_COPY);
Connect(RECORDING_FINISHED_EVENT, wxCommandEventHandler(FifoPlayerDlg::OnRecordingFinished), NULL, this);
Connect(FRAME_WRITTEN_EVENT, wxCommandEventHandler(FifoPlayerDlg::OnFrameWritten), NULL, this);
Bind(RECORDING_FINISHED_EVENT, &FifoPlayerDlg::OnRecordingFinished, this);
Bind(FRAME_WRITTEN_EVENT, &FifoPlayerDlg::OnFrameWritten, this);
Show();
}
@@ -784,7 +784,7 @@ void FifoPlayerDlg::OnCloseClick(wxCommandEvent& WXUNUSED(event))
Hide();
}
void FifoPlayerDlg::OnRecordingFinished(wxCommandEvent& WXUNUSED(event))
void FifoPlayerDlg::OnRecordingFinished(wxEvent&)
{
m_RecordStop->SetLabel(_("Record"));
m_RecordStop->Enable();
@@ -792,7 +792,7 @@ void FifoPlayerDlg::OnRecordingFinished(wxCommandEvent& WXUNUSED(event))
UpdateRecorderGui();
}
void FifoPlayerDlg::OnFrameWritten(wxCommandEvent& WXUNUSED(event))
void FifoPlayerDlg::OnFrameWritten(wxEvent&)
{
m_CurrentFrameLabel->SetLabel(CreateCurrentFrameLabel());
m_NumObjectsLabel->SetLabel(CreateFileObjectCountLabel());
+2 -2
View File
@@ -51,8 +51,8 @@ private:
void OnSearchFieldTextChanged(wxCommandEvent& event);
void ChangeSearchResult(unsigned int result_idx);
void OnRecordingFinished(wxCommandEvent& event);
void OnFrameWritten(wxCommandEvent& event);
void OnRecordingFinished(wxEvent& event);
void OnFrameWritten(wxEvent& event);
void OnFrameListSelectionChanged(wxCommandEvent& event);
void OnObjectListSelectionChanged(wxCommandEvent& event);
+64 -53
View File
@@ -52,22 +52,6 @@
extern "C" {
#include "../resources/Dolphin.c" // Dolphin icon
#include "../resources/toolbar_browse.c"
#include "../resources/toolbar_file_open.c"
#include "../resources/toolbar_fullscreen.c"
#include "../resources/toolbar_help.c"
#include "../resources/toolbar_pause.c"
#include "../resources/toolbar_play.c"
#include "../resources/toolbar_plugin_dsp.c"
#include "../resources/toolbar_plugin_gfx.c"
#include "../resources/toolbar_plugin_options.c"
#include "../resources/toolbar_plugin_pad.c"
#include "../resources/toolbar_refresh.c"
#include "../resources/toolbar_stop.c"
#include "../resources/Boomy.h" // Theme packages
#include "../resources/Vista.h"
#include "../resources/X-Plastik.h"
#include "../resources/KDE.h"
};
@@ -329,7 +313,7 @@ CFrame::CFrame(wxFrame* parent,
ConsoleListener *Console = LogManager::GetInstance()->GetConsoleListener();
if (SConfig::GetInstance().m_InterfaceConsole) Console->Open();
// Start debugging mazimized
// Start debugging maximized
if (UseDebugger) this->Maximize(true);
// Debugger class
if (UseDebugger)
@@ -424,9 +408,7 @@ CFrame::CFrame(wxFrame* parent,
// -------------------------
// Connect event handlers
m_Mgr->Connect(wxID_ANY, wxEVT_AUI_RENDER, // Resize
wxAuiManagerEventHandler(CFrame::OnManagerResize),
(wxObject*)0, this);
m_Mgr->Bind(wxEVT_AUI_RENDER, &CFrame::OnManagerResize, this);
// ----------
// Update controls
@@ -758,78 +740,107 @@ bool IsHotkey(wxKeyEvent &event, int Id)
int GetCmdForHotkey(unsigned int key)
{
if (key == HK_OPEN)
switch (key)
{
case HK_OPEN:
return wxID_OPEN;
if (key == HK_CHANGE_DISC)
case HK_CHANGE_DISC:
return IDM_CHANGEDISC;
if (key == HK_REFRESH_LIST)
case HK_REFRESH_LIST:
return wxID_REFRESH;
if (key == HK_PLAY_PAUSE)
case HK_PLAY_PAUSE:
return IDM_PLAY;
if (key == HK_STOP)
case HK_STOP:
return IDM_STOP;
if (key == HK_RESET)
case HK_RESET:
return IDM_RESET;
if (key == HK_FRAME_ADVANCE)
case HK_FRAME_ADVANCE:
return IDM_FRAMESTEP;
if (key == HK_START_RECORDING)
case HK_START_RECORDING:
return IDM_RECORD;
if (key == HK_PLAY_RECORDING)
case HK_PLAY_RECORDING:
return IDM_PLAYRECORD;
if (key == HK_EXPORT_RECORDING)
case HK_EXPORT_RECORDING:
return IDM_RECORDEXPORT;
if (key == HK_READ_ONLY_MODE)
case HK_READ_ONLY_MODE:
return IDM_RECORDREADONLY;
if (key == HK_FULLSCREEN)
case HK_FULLSCREEN:
return IDM_TOGGLE_FULLSCREEN;
if (key == HK_SCREENSHOT)
case HK_SCREENSHOT:
return IDM_SCREENSHOT;
if (key == HK_WIIMOTE1_CONNECT)
case HK_WIIMOTE1_CONNECT:
return IDM_CONNECT_WIIMOTE1;
if (key == HK_WIIMOTE2_CONNECT)
case HK_WIIMOTE2_CONNECT:
return IDM_CONNECT_WIIMOTE2;
if (key == HK_WIIMOTE3_CONNECT)
case HK_WIIMOTE3_CONNECT:
return IDM_CONNECT_WIIMOTE3;
if (key == HK_WIIMOTE4_CONNECT)
case HK_WIIMOTE4_CONNECT:
return IDM_CONNECT_WIIMOTE4;
if (key == HK_LOAD_STATE_SLOT_1)
case HK_LOAD_STATE_SLOT_1:
return IDM_LOADSLOT1;
if (key == HK_LOAD_STATE_SLOT_2)
case HK_LOAD_STATE_SLOT_2:
return IDM_LOADSLOT2;
if (key == HK_LOAD_STATE_SLOT_3)
case HK_LOAD_STATE_SLOT_3:
return IDM_LOADSLOT3;
if (key == HK_LOAD_STATE_SLOT_4)
case HK_LOAD_STATE_SLOT_4:
return IDM_LOADSLOT4;
if (key == HK_LOAD_STATE_SLOT_5)
case HK_LOAD_STATE_SLOT_5:
return IDM_LOADSLOT5;
if (key == HK_LOAD_STATE_SLOT_6)
case HK_LOAD_STATE_SLOT_6:
return IDM_LOADSLOT6;
if (key == HK_LOAD_STATE_SLOT_7)
case HK_LOAD_STATE_SLOT_7:
return IDM_LOADSLOT7;
if (key == HK_LOAD_STATE_SLOT_8)
case HK_LOAD_STATE_SLOT_8:
return IDM_LOADSLOT8;
if (key == HK_SAVE_STATE_SLOT_1)
case HK_SAVE_STATE_SLOT_1:
return IDM_SAVESLOT1;
if (key == HK_SAVE_STATE_SLOT_2)
case HK_SAVE_STATE_SLOT_2:
return IDM_SAVESLOT2;
if (key == HK_SAVE_STATE_SLOT_3)
case HK_SAVE_STATE_SLOT_3:
return IDM_SAVESLOT3;
if (key == HK_SAVE_STATE_SLOT_4)
case HK_SAVE_STATE_SLOT_4:
return IDM_SAVESLOT4;
if (key == HK_SAVE_STATE_SLOT_5)
case HK_SAVE_STATE_SLOT_5:
return IDM_SAVESLOT5;
if (key == HK_SAVE_STATE_SLOT_6)
case HK_SAVE_STATE_SLOT_6:
return IDM_SAVESLOT6;
if (key == HK_SAVE_STATE_SLOT_7)
case HK_SAVE_STATE_SLOT_7:
return IDM_SAVESLOT7;
if (key == HK_SAVE_STATE_SLOT_8)
case HK_SAVE_STATE_SLOT_8:
return IDM_SAVESLOT8;
}
return -1;
}
-9
View File
@@ -210,15 +210,6 @@ private:
EToolbar_Max
};
enum EBitmapsThemes
{
BOOMY,
VISTA,
XPLASTIK,
KDE,
THEMES_MAX
};
wxBitmap m_Bitmaps[EToolbar_Max];
wxBitmap m_BitmapsMenu[EToolbar_Max];
+2 -6
View File
@@ -1004,15 +1004,11 @@ wxFrame * CFrame::CreateParentFrame(wxWindowID Id, const wxString& Title,
m_MainSizer->Add(Child, 1, wxEXPAND);
Frame->Connect(wxID_ANY, wxEVT_CLOSE_WINDOW,
wxCloseEventHandler(CFrame::OnFloatingPageClosed),
(wxObject*)0, this);
Frame->Bind(wxEVT_CLOSE_WINDOW, &CFrame::OnFloatingPageClosed, this);
if (Id == IDM_CONSOLEWINDOW_PARENT)
{
Frame->Connect(wxID_ANY, wxEVT_SIZE,
wxSizeEventHandler(CFrame::OnFloatingPageSize),
(wxObject*)0, this);
Frame->Bind(wxEVT_SIZE, &CFrame::OnFloatingPageSize, this);
}
// Main sizer
+52 -167
View File
@@ -78,23 +78,6 @@ Core::GetWindowHandle().
// Resources
extern "C" {
#include "../resources/Dolphin.c" // Dolphin icon
#include "../resources/toolbar_browse.c"
#include "../resources/toolbar_file_open.c"
#include "../resources/toolbar_fullscreen.c"
#include "../resources/toolbar_help.c"
#include "../resources/toolbar_pause.c"
#include "../resources/toolbar_play.c"
#include "../resources/toolbar_plugin_dsp.c"
#include "../resources/toolbar_plugin_gfx.c"
#include "../resources/toolbar_plugin_options.c"
#include "../resources/toolbar_plugin_pad.c"
#include "../resources/toolbar_plugin_wiimote.c"
#include "../resources/toolbar_refresh.c"
#include "../resources/toolbar_stop.c"
#include "../resources/Boomy.h" // Theme packages
#include "../resources/Vista.h"
#include "../resources/X-Plastik.h"
#include "../resources/KDE.h"
};
bool confirmStop = false;
@@ -441,7 +424,7 @@ void CFrame::PopulateToolbar(wxAuiToolBar* ToolBar)
ToolBar->AddTool(IDM_PLAY, _("Play"), m_Bitmaps[Toolbar_Play], _("Play"));
ToolBar->AddTool(IDM_STOP, _("Stop"), m_Bitmaps[Toolbar_Stop], _("Stop"));
ToolBar->AddTool(IDM_TOGGLE_FULLSCREEN, _("FullScr"), m_Bitmaps[Toolbar_FullScreen], _("Toggle Fullscreen"));
ToolBar->AddTool(IDM_SCREENSHOT, _("ScrShot"), m_Bitmaps[Toolbar_FullScreen], _("Take Screenshot"));
ToolBar->AddTool(IDM_SCREENSHOT, _("ScrShot"), m_Bitmaps[Toolbar_Screenshot], _("Take Screenshot"));
ToolBar->AddSeparator();
ToolBar->AddTool(wxID_PREFERENCES, _("Config"), m_Bitmaps[Toolbar_ConfigMain], _("Configure..."));
ToolBar->AddTool(IDM_CONFIG_GFX_BACKEND, _("Graphics"), m_Bitmaps[Toolbar_ConfigGFX], _("Graphics settings"));
@@ -512,102 +495,33 @@ void CFrame::RecreateToolbar()
void CFrame::InitBitmaps()
{
// Get selected theme
int Theme = SConfig::GetInstance().m_LocalCoreStartupParameter.iTheme;
std::string theme(SConfig::GetInstance().m_LocalCoreStartupParameter.theme_name + "/");
std::string dir(File::GetUserPath(D_THEMES_IDX) + theme);
// Save memory by only having one set of bitmaps loaded at any time. I mean, they are still
// in the exe, which is in memory, but at least we wont make another copy of all of them.
switch (Theme)
{
case BOOMY:
{
// These are stored as 48x48
m_Bitmaps[Toolbar_FileOpen] = wxGetBitmapFromMemory(toolbar_file_open_png);
m_Bitmaps[Toolbar_Refresh] = wxGetBitmapFromMemory(toolbar_refresh_png);
m_Bitmaps[Toolbar_Browse] = wxGetBitmapFromMemory(toolbar_browse_png);
m_Bitmaps[Toolbar_Play] = wxGetBitmapFromMemory(toolbar_play_png);
m_Bitmaps[Toolbar_Stop] = wxGetBitmapFromMemory(toolbar_stop_png);
m_Bitmaps[Toolbar_Pause] = wxGetBitmapFromMemory(toolbar_pause_png);
m_Bitmaps[Toolbar_ConfigMain] = wxGetBitmapFromMemory(toolbar_plugin_options_png);
m_Bitmaps[Toolbar_ConfigGFX] = wxGetBitmapFromMemory(toolbar_plugin_gfx_png);
m_Bitmaps[Toolbar_ConfigDSP] = wxGetBitmapFromMemory(toolbar_plugin_dsp_png);
m_Bitmaps[Toolbar_ConfigPAD] = wxGetBitmapFromMemory(toolbar_plugin_pad_png);
m_Bitmaps[Toolbar_Wiimote] = wxGetBitmapFromMemory(toolbar_plugin_wiimote_png);
m_Bitmaps[Toolbar_Screenshot] = wxGetBitmapFromMemory(toolbar_fullscreen_png);
m_Bitmaps[Toolbar_FullScreen] = wxGetBitmapFromMemory(toolbar_fullscreen_png);
m_Bitmaps[Toolbar_Help] = wxGetBitmapFromMemory(toolbar_help_png);
#if !defined(_WIN32)
// If theme does not exist in user's dir load from shared directory
if (!File::Exists(dir))
dir = SHARED_USER_DIR THEMES_DIR "/" + theme;
#endif
// Scale the 48x48 bitmaps to 24x24
for (size_t n = Toolbar_FileOpen; n < EToolbar_Max; n++)
{
m_Bitmaps[n] = wxBitmap(m_Bitmaps[n].ConvertToImage().Scale(24, 24));
}
}
break;
case VISTA:
{
// These are stored as 24x24 and need no scaling
m_Bitmaps[Toolbar_FileOpen] = wxGetBitmapFromMemory(Toolbar_Open1_png);
m_Bitmaps[Toolbar_Refresh] = wxGetBitmapFromMemory(Toolbar_Refresh1_png);
m_Bitmaps[Toolbar_Browse] = wxGetBitmapFromMemory(Toolbar_Browse1_png);
m_Bitmaps[Toolbar_Play] = wxGetBitmapFromMemory(Toolbar_Play1_png);
m_Bitmaps[Toolbar_Stop] = wxGetBitmapFromMemory(Toolbar_Stop1_png);
m_Bitmaps[Toolbar_Pause] = wxGetBitmapFromMemory(Toolbar_Pause1_png);
m_Bitmaps[Toolbar_ConfigMain] = wxGetBitmapFromMemory(Toolbar_Options1_png);
m_Bitmaps[Toolbar_ConfigGFX] = wxGetBitmapFromMemory(Toolbar_Gfx1_png);
m_Bitmaps[Toolbar_ConfigDSP] = wxGetBitmapFromMemory(Toolbar_DSP1_png);
m_Bitmaps[Toolbar_ConfigPAD] = wxGetBitmapFromMemory(Toolbar_Pad1_png);
m_Bitmaps[Toolbar_Wiimote] = wxGetBitmapFromMemory(Toolbar_Wiimote1_png);
m_Bitmaps[Toolbar_Screenshot] = wxGetBitmapFromMemory(Toolbar_Fullscreen1_png);
m_Bitmaps[Toolbar_FullScreen] = wxGetBitmapFromMemory(Toolbar_Fullscreen1_png);
m_Bitmaps[Toolbar_Help] = wxGetBitmapFromMemory(Toolbar_Help1_png);
}
break;
case XPLASTIK:
{
m_Bitmaps[Toolbar_FileOpen] = wxGetBitmapFromMemory(Toolbar_Open2_png);
m_Bitmaps[Toolbar_Refresh] = wxGetBitmapFromMemory(Toolbar_Refresh2_png);
m_Bitmaps[Toolbar_Browse] = wxGetBitmapFromMemory(Toolbar_Browse2_png);
m_Bitmaps[Toolbar_Play] = wxGetBitmapFromMemory(Toolbar_Play2_png);
m_Bitmaps[Toolbar_Stop] = wxGetBitmapFromMemory(Toolbar_Stop2_png);
m_Bitmaps[Toolbar_Pause] = wxGetBitmapFromMemory(Toolbar_Pause2_png);
m_Bitmaps[Toolbar_ConfigMain] = wxGetBitmapFromMemory(Toolbar_Options2_png);
m_Bitmaps[Toolbar_ConfigGFX] = wxGetBitmapFromMemory(Toolbar_Gfx2_png);
m_Bitmaps[Toolbar_ConfigDSP] = wxGetBitmapFromMemory(Toolbar_DSP2_png);
m_Bitmaps[Toolbar_ConfigPAD] = wxGetBitmapFromMemory(Toolbar_Pad2_png);
m_Bitmaps[Toolbar_Wiimote] = wxGetBitmapFromMemory(Toolbar_Wiimote2_png);
m_Bitmaps[Toolbar_Screenshot] = wxGetBitmapFromMemory(Toolbar_Fullscreen2_png);
m_Bitmaps[Toolbar_FullScreen] = wxGetBitmapFromMemory(Toolbar_Fullscreen2_png);
m_Bitmaps[Toolbar_Help] = wxGetBitmapFromMemory(Toolbar_Help2_png);
}
break;
case KDE:
{
m_Bitmaps[Toolbar_FileOpen] = wxGetBitmapFromMemory(Toolbar_Open3_png);
m_Bitmaps[Toolbar_Refresh] = wxGetBitmapFromMemory(Toolbar_Refresh3_png);
m_Bitmaps[Toolbar_Browse] = wxGetBitmapFromMemory(Toolbar_Browse3_png);
m_Bitmaps[Toolbar_Play] = wxGetBitmapFromMemory(Toolbar_Play3_png);
m_Bitmaps[Toolbar_Stop] = wxGetBitmapFromMemory(Toolbar_Stop3_png);
m_Bitmaps[Toolbar_Pause] = wxGetBitmapFromMemory(Toolbar_Pause3_png);
m_Bitmaps[Toolbar_ConfigMain] = wxGetBitmapFromMemory(Toolbar_Options3_png);
m_Bitmaps[Toolbar_ConfigGFX] = wxGetBitmapFromMemory(Toolbar_Gfx3_png);
m_Bitmaps[Toolbar_ConfigDSP] = wxGetBitmapFromMemory(Toolbar_DSP3_png);
m_Bitmaps[Toolbar_ConfigPAD] = wxGetBitmapFromMemory(Toolbar_Pad3_png);
m_Bitmaps[Toolbar_Wiimote] = wxGetBitmapFromMemory(Toolbar_Wiimote3_png);
m_Bitmaps[Toolbar_Screenshot] = wxGetBitmapFromMemory(Toolbar_Fullscreen3_png);
m_Bitmaps[Toolbar_FullScreen] = wxGetBitmapFromMemory(Toolbar_Fullscreen3_png);
m_Bitmaps[Toolbar_Help] = wxGetBitmapFromMemory(Toolbar_Help3_png);
}
break;
default: PanicAlertT("Theme selection went wrong");
}
m_Bitmaps[Toolbar_FileOpen].LoadFile(dir + "open.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Refresh].LoadFile(dir + "refresh.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Browse].LoadFile(dir + "browse.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Play].LoadFile(dir + "play.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Stop].LoadFile(dir + "stop.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Pause].LoadFile(dir + "pause.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_ConfigMain].LoadFile(dir + "config.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_ConfigGFX].LoadFile(dir + "graphics.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_ConfigDSP].LoadFile(dir + "dsp.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_ConfigPAD].LoadFile(dir + "gcpad.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Wiimote].LoadFile(dir + "wiimote.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Screenshot].LoadFile(dir + "screenshot.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_FullScreen].LoadFile(dir + "fullscreen.png", wxBITMAP_TYPE_PNG);
m_Bitmaps[Toolbar_Help].LoadFile(dir + "help.png", wxBITMAP_TYPE_PNG);
// Update in case the bitmap has been updated
if (m_ToolBar != NULL) RecreateToolbar();
if (m_ToolBar != NULL)
RecreateToolbar();
}
// Menu items
@@ -958,15 +872,9 @@ void CFrame::StartGame(const std::string& filename)
wxSize size(SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowWidth,
SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight);
m_RenderFrame->SetClientSize(size.GetWidth(), size.GetHeight());
m_RenderFrame->Connect(wxID_ANY, wxEVT_CLOSE_WINDOW,
wxCloseEventHandler(CFrame::OnRenderParentClose),
(wxObject*)0, this);
m_RenderFrame->Connect(wxID_ANY, wxEVT_ACTIVATE,
wxActivateEventHandler(CFrame::OnActive),
(wxObject*)0, this);
m_RenderFrame->Connect(wxID_ANY, wxEVT_MOVE,
wxMoveEventHandler(CFrame::OnRenderParentMove),
(wxObject*)0, this);
m_RenderFrame->Bind(wxEVT_CLOSE_WINDOW, &CFrame::OnRenderParentClose, this);
m_RenderFrame->Bind(wxEVT_ACTIVATE, &CFrame::OnActive, this);
m_RenderFrame->Bind(wxEVT_MOVE, &CFrame::OnRenderParentMove, this);
m_RenderParent = new CPanel(m_RenderFrame, wxID_ANY);
m_RenderFrame->Show();
}
@@ -999,30 +907,14 @@ void CFrame::StartGame(const std::string& filename)
m_RenderParent->SetFocus();
#endif
wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
wxKeyEventHandler(CFrame::OnKeyDown),
(wxObject*)0, this);
wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP,
wxKeyEventHandler(CFrame::OnKeyUp),
(wxObject*)0, this);
wxTheApp->Connect(wxID_ANY, wxEVT_RIGHT_DOWN, // Mouse
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Connect(wxID_ANY, wxEVT_RIGHT_UP,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Connect(wxID_ANY, wxEVT_MIDDLE_DOWN,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Connect(wxID_ANY, wxEVT_MIDDLE_UP,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Connect(wxID_ANY, wxEVT_MOTION,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
m_RenderParent->Connect(wxID_ANY, wxEVT_SIZE,
wxSizeEventHandler(CFrame::OnRenderParentResize),
(wxObject*)0, this);
wxTheApp->Bind(wxEVT_KEY_DOWN, &CFrame::OnKeyDown, this);
wxTheApp->Bind(wxEVT_KEY_UP, &CFrame::OnKeyUp, this);
wxTheApp->Bind(wxEVT_RIGHT_DOWN, &CFrame::OnMouse, this);
wxTheApp->Bind(wxEVT_RIGHT_UP, &CFrame::OnMouse, this);
wxTheApp->Bind(wxEVT_MIDDLE_DOWN, &CFrame::OnMouse, this);
wxTheApp->Bind(wxEVT_MIDDLE_UP, &CFrame::OnMouse, this);
wxTheApp->Bind(wxEVT_MOTION, &CFrame::OnMouse, this);
m_RenderParent->Bind(wxEVT_SIZE, &CFrame::OnRenderParentResize, this);
}
wxEndBusyCursor();
@@ -1059,6 +951,7 @@ void CFrame::DoPause()
Core::SetState(Core::CORE_PAUSE);
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
m_RenderParent->SetCursor(wxNullCursor);
Core::UpdateTitle();
}
else
{
@@ -1125,30 +1018,18 @@ void CFrame::DoStop()
m_RenderFrame->SetTitle(wxString::FromAscii(scm_rev_str));
// Destroy the renderer frame when not rendering to main
m_RenderParent->Disconnect(wxID_ANY, wxEVT_SIZE,
wxSizeEventHandler(CFrame::OnRenderParentResize),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
wxKeyEventHandler(CFrame::OnKeyDown),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_UP,
wxKeyEventHandler(CFrame::OnKeyUp),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_RIGHT_DOWN, // Mouse
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_RIGHT_UP,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_MIDDLE_DOWN,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_MIDDLE_UP,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
wxTheApp->Disconnect(wxID_ANY, wxEVT_MOTION,
wxMouseEventHandler(CFrame::OnMouse),
(wxObject*)0, this);
m_RenderParent->Unbind(wxEVT_SIZE, &CFrame::OnRenderParentResize, this);
// Keyboard
wxTheApp->Unbind(wxEVT_KEY_DOWN, &CFrame::OnKeyDown, this);
wxTheApp->Unbind(wxEVT_KEY_UP, &CFrame::OnKeyUp, this);
// Mouse
wxTheApp->Unbind(wxEVT_RIGHT_DOWN, &CFrame::OnMouse, this);
wxTheApp->Unbind(wxEVT_RIGHT_UP, &CFrame::OnMouse, this);
wxTheApp->Unbind(wxEVT_MIDDLE_DOWN, &CFrame::OnMouse, this);
wxTheApp->Unbind(wxEVT_MIDDLE_UP, &CFrame::OnMouse, this);
wxTheApp->Unbind(wxEVT_MOTION, &CFrame::OnMouse, this);
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
m_RenderParent->SetCursor(wxNullCursor);
DoFullscreen(false);
@@ -1248,6 +1129,8 @@ void CFrame::OnConfigPAD(wxCommandEvent& WXUNUSED (event))
#if defined(HAVE_X11) && HAVE_X11
Window win = X11Utils::XWindowFromHandle(GetHandle());
Pad::Initialize((void *)win);
#elif defined(__APPLE__)
Pad::Initialize((void *)this);
#else
Pad::Initialize(GetHandle());
#endif
@@ -1272,6 +1155,8 @@ void CFrame::OnConfigWiimote(wxCommandEvent& WXUNUSED (event))
#if defined(HAVE_X11) && HAVE_X11
Window win = X11Utils::XWindowFromHandle(GetHandle());
Wiimote::Initialize((void *)win);
#elif defined(__APPLE__)
Wiimote::Initialize((void *)this);
#else
Wiimote::Initialize(GetHandle());
#endif
+2 -6
View File
@@ -56,9 +56,7 @@ void GCMicDialog::SaveButtonMapping(int Id, int Key, int Modkey)
void GCMicDialog::EndGetButtons(void)
{
wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
wxKeyEventHandler(GCMicDialog::OnKeyDown),
(wxObject*)0, this);
wxTheApp->Unbind(wxEVT_KEY_DOWN, &GCMicDialog::OnKeyDown, this);
m_ButtonMappingTimer->Stop();
GetButtonWaitingTimer = 0;
GetButtonWaitingID = 0;
@@ -153,9 +151,7 @@ void GCMicDialog::OnButtonClick(wxCommandEvent& event)
if (m_ButtonMappingTimer->IsRunning()) return;
wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
wxKeyEventHandler(GCMicDialog::OnKeyDown),
(wxObject*)0, this);
wxTheApp->Bind(wxEVT_KEY_DOWN, &GCMicDialog::OnKeyDown, this);
// Get the button
ClickedButton = (wxButton *)event.GetEventObject();
+3 -5
View File
@@ -18,8 +18,6 @@
#include <sstream>
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
namespace Gecko
{
@@ -31,8 +29,8 @@ CodeConfigPanel::CodeConfigPanel(wxWindow* const parent)
: wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize)
{
m_listbox_gcodes = new wxCheckListBox(this, -1, wxDefaultPosition, wxDefaultSize);
_connect_macro_(m_listbox_gcodes, CodeConfigPanel::UpdateInfoBox, wxEVT_COMMAND_LISTBOX_SELECTED, this);
_connect_macro_(m_listbox_gcodes, CodeConfigPanel::ToggleCode, wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, this);
m_listbox_gcodes->Bind(wxEVT_COMMAND_LISTBOX_SELECTED, &CodeConfigPanel::UpdateInfoBox, this);
m_listbox_gcodes->Bind(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, &CodeConfigPanel::ToggleCode, this);
m_infobox.label_name = new wxStaticText(this, -1, wxGetTranslation(wxstr_name));
m_infobox.label_creator = new wxStaticText(this, -1, wxGetTranslation(wxstr_creator));
@@ -53,7 +51,7 @@ CodeConfigPanel::CodeConfigPanel(wxWindow* const parent)
// button sizer
wxBoxSizer* const sizer_buttons = new wxBoxSizer(wxHORIZONTAL);
wxButton* const btn_download = new wxButton(this, -1, _("Download Codes (WiiRD Database)"), wxDefaultPosition, wxSize(128, -1));
_connect_macro_(btn_download, CodeConfigPanel::DownloadCodes, wxEVT_COMMAND_BUTTON_CLICKED, this);
btn_download->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CodeConfigPanel::DownloadCodes, this);
sizer_buttons->AddStretchSpacer(1);
sizer_buttons->Add(btn_download, 1, wxEXPAND);
-2
View File
@@ -26,8 +26,6 @@
enum
{
Toolbar_DebugGo,
Toolbar_DebugPause,
Toolbar_Step,
Toolbar_StepOver,
Toolbar_Skip,
+2 -6
View File
@@ -56,9 +56,7 @@ void HotkeyConfigDialog::SaveButtonMapping(int Id, int Key, int Modkey)
void HotkeyConfigDialog::EndGetButtons(void)
{
wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
wxKeyEventHandler(HotkeyConfigDialog::OnKeyDown),
(wxObject*)0, this);
wxTheApp->Unbind(wxEVT_KEY_DOWN, &HotkeyConfigDialog::OnKeyDown, this);
m_ButtonMappingTimer->Stop();
GetButtonWaitingTimer = 0;
GetButtonWaitingID = 0;
@@ -153,9 +151,7 @@ void HotkeyConfigDialog::OnButtonClick(wxCommandEvent& event)
if (m_ButtonMappingTimer->IsRunning()) return;
wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
wxKeyEventHandler(HotkeyConfigDialog::OnKeyDown),
(wxObject*)0, this);
wxTheApp->Bind(wxEVT_KEY_DOWN, &HotkeyConfigDialog::OnKeyDown, this);
// Get the button
ClickedButton = (wxButton *)event.GetEventObject();
+1 -2
View File
@@ -212,8 +212,7 @@ CISOProperties::CISOProperties(const std::string fileName, wxWindow* parent, wxW
// Here we set all the info to be shown (be it SJIS or Ascii) + we set the window title
ChangeBannerDetails((int)SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage);
m_Banner->SetBitmap(OpenGameListItem->GetImage());
m_Banner->Connect(wxID_ANY, wxEVT_RIGHT_DOWN,
wxMouseEventHandler(CISOProperties::RightClickOnBanner), (wxObject*)NULL, this);
m_Banner->Bind(wxEVT_RIGHT_DOWN, &CISOProperties::RightClickOnBanner, this);
// Filesystem browser/dumper
// TODO : Should we add a way to browse the wad file ?
+52 -53
View File
@@ -18,7 +18,6 @@
#include "InputConfigDiag.h"
#include "UDPConfigDiag.h"
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
#define WXSTR_FROM_STR(s) (wxString::FromUTF8((s).c_str()))
#define WXTSTR_FROM_CSTR(s) (wxGetTranslation(wxString::FromUTF8(s)))
#define STR_FROM_WXSTR(w) (std::string((w).ToUTF8()))
@@ -123,10 +122,10 @@ ControlDialog::ControlDialog(GamepadPage* const parent, InputPlugin& plugin, Con
//device_cbox = new wxComboBox(this, -1, WXSTR_FROM_STR(ref->device_qualifier.ToString()), wxDefaultPosition, wxSize(256,-1), parent->device_cbox->GetStrings(), wxTE_PROCESS_ENTER);
device_cbox = new wxComboBox(this, -1, WXSTR_FROM_STR(m_devq.ToString()), wxDefaultPosition, wxSize(256,-1), parent->device_cbox->GetStrings(), wxTE_PROCESS_ENTER);
_connect_macro_(device_cbox, ControlDialog::SetDevice, wxEVT_COMMAND_COMBOBOX_SELECTED, this);
_connect_macro_(device_cbox, ControlDialog::SetDevice, wxEVT_COMMAND_TEXT_ENTER, this);
device_cbox->Bind(wxEVT_COMMAND_COMBOBOX_SELECTED, &ControlDialog::SetDevice, this);
device_cbox->Bind(wxEVT_COMMAND_TEXT_ENTER, &ControlDialog::SetDevice, this);
wxStaticBoxSizer* const control_chooser = CreateControlChooser(this, parent);
wxStaticBoxSizer* const control_chooser = CreateControlChooser(parent);
wxStaticBoxSizer* const d_szr = new wxStaticBoxSizer(wxVERTICAL, this, _("Device"));
d_szr->Add(device_cbox, 0, wxEXPAND|wxALL, 5);
@@ -406,7 +405,7 @@ void GamepadPage::AdjustControlOption(wxCommandEvent&)
m_control_dialog->control_reference->range = (ControlState)(m_control_dialog->range_slider->GetValue()) / SLIDER_TICK_COUNT;
}
void GamepadPage::ConfigControl(wxCommandEvent& event)
void GamepadPage::ConfigControl(wxEvent& event)
{
m_control_dialog = new ControlDialog(this, m_plugin, ((ControlButton*)event.GetEventObject())->control_reference);
m_control_dialog->ShowModal();
@@ -416,7 +415,7 @@ void GamepadPage::ConfigControl(wxCommandEvent& event)
UpdateGUI();
}
void GamepadPage::ClearControl(wxCommandEvent& event)
void GamepadPage::ClearControl(wxEvent& event)
{
ControlButton* const btn = (ControlButton*)event.GetEventObject();
btn->control_reference->expression.clear();
@@ -480,24 +479,24 @@ void GamepadPage::DetectControl(wxCommandEvent& event)
}
}
wxStaticBoxSizer* ControlDialog::CreateControlChooser(wxWindow* const parent, wxWindow* const eventsink)
wxStaticBoxSizer* ControlDialog::CreateControlChooser(GamepadPage* const parent)
{
wxStaticBoxSizer* const main_szr = new wxStaticBoxSizer(wxVERTICAL, parent, control_reference->is_input ? _("Input") : _("Output"));
wxStaticBoxSizer* const main_szr = new wxStaticBoxSizer(wxVERTICAL, this, control_reference->is_input ? _("Input") : _("Output"));
textctrl = new wxTextCtrl(parent, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 48), wxTE_MULTILINE);
textctrl = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 48), wxTE_MULTILINE);
wxButton* const detect_button = new wxButton(parent, -1, control_reference->is_input ? _("Detect") : _("Test"));
wxButton* const detect_button = new wxButton(this, -1, control_reference->is_input ? _("Detect") : _("Test"));
wxButton* const clear_button = new wxButton(parent, -1, _("Clear"));
wxButton* const set_button = new wxButton(parent, -1, _("Set"));
wxButton* const clear_button = new wxButton(this, -1, _("Clear"));
wxButton* const set_button = new wxButton(this, -1, _("Set"));
wxButton* const select_button = new wxButton(parent, -1, _("Select"));
_connect_macro_(select_button, ControlDialog::SetSelectedControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
wxButton* const select_button = new wxButton(this, -1, _("Select"));
select_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::SetSelectedControl, this);
wxButton* const or_button = new wxButton(parent, -1, _("| OR"), wxDefaultPosition);
_connect_macro_(or_button, ControlDialog::AppendControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
wxButton* const or_button = new wxButton(this, -1, _("| OR"), wxDefaultPosition);
or_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
control_lbox = new wxListBox(parent, -1, wxDefaultPosition, wxSize(-1, 64));
control_lbox = new wxListBox(this, -1, wxDefaultPosition, wxSize(-1, 64));
wxBoxSizer* const button_sizer = new wxBoxSizer(wxVERTICAL);
button_sizer->Add(detect_button, 1, 0, 5);
@@ -507,30 +506,30 @@ wxStaticBoxSizer* ControlDialog::CreateControlChooser(wxWindow* const parent, wx
if (control_reference->is_input)
{
// TODO: check if && is good on other OS
wxButton* const and_button = new wxButton(parent, -1, _("&& AND"), wxDefaultPosition);
wxButton* const not_button = new wxButton(parent, -1, _("! NOT"), wxDefaultPosition);
wxButton* const add_button = new wxButton(parent, -1, _("^ ADD"), wxDefaultPosition);
wxButton* const and_button = new wxButton(this, -1, _("&& AND"), wxDefaultPosition);
wxButton* const not_button = new wxButton(this, -1, _("! NOT"), wxDefaultPosition);
wxButton* const add_button = new wxButton(this, -1, _("^ ADD"), wxDefaultPosition);
_connect_macro_(and_button, ControlDialog::AppendControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
_connect_macro_(not_button, ControlDialog::AppendControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
_connect_macro_(add_button, ControlDialog::AppendControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
and_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
not_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
add_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
button_sizer->Add(and_button, 1, 0, 5);
button_sizer->Add(not_button, 1, 0, 5);
button_sizer->Add(add_button, 1, 0, 5);
}
range_slider = new wxSlider(parent, -1, SLIDER_TICK_COUNT, 0, SLIDER_TICK_COUNT * 5, wxDefaultPosition, wxDefaultSize, wxSL_TOP | wxSL_LABELS /*| wxSL_AUTOTICKS*/);
range_slider = new wxSlider(this, -1, SLIDER_TICK_COUNT, 0, SLIDER_TICK_COUNT * 5, wxDefaultPosition, wxDefaultSize, wxSL_TOP | wxSL_LABELS /*| wxSL_AUTOTICKS*/);
range_slider->SetValue((int)(control_reference->range * SLIDER_TICK_COUNT));
_connect_macro_(detect_button, ControlDialog::DetectControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
_connect_macro_(clear_button, ControlDialog::ClearControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
_connect_macro_(set_button, ControlDialog::SetControl, wxEVT_COMMAND_BUTTON_CLICKED, parent);
detect_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::DetectControl, this);
clear_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::ClearControl, this);
set_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::SetControl, this);
_connect_macro_(range_slider, GamepadPage::AdjustControlOption, wxEVT_SCROLL_CHANGED, eventsink);
wxStaticText* const range_label = new wxStaticText(parent, -1, _("Range"));
m_bound_label = new wxStaticText(parent, -1, wxT(""));
range_slider->Bind(wxEVT_SCROLL_CHANGED, &GamepadPage::AdjustControlOption, parent);
wxStaticText* const range_label = new wxStaticText(this, -1, _("Range"));
m_bound_label = new wxStaticText(this, -1, wxT(""));
wxBoxSizer* const range_sizer = new wxBoxSizer(wxHORIZONTAL);
range_sizer->Add(range_label, 0, wxCENTER|wxLEFT, 5);
@@ -668,7 +667,7 @@ ControlGroupBox::~ControlGroupBox()
delete *i;
}
ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWindow* const parent, wxWindow* const eventsink)
ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWindow* const parent, GamepadPage* const eventsink)
: wxBoxSizer(wxVERTICAL)
, control_group(group)
{
@@ -691,16 +690,16 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
if ((*ci)->control_ref->is_input)
{
control_button->SetToolTip(_("Left-click to detect input.\nMiddle-click to clear.\nRight-click for more options."));
_connect_macro_(control_button, GamepadPage::DetectControl, wxEVT_COMMAND_BUTTON_CLICKED, eventsink);
control_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::DetectControl, eventsink);
}
else
{
control_button->SetToolTip(_("Left/Right-click for more options.\nMiddle-click to clear."));
_connect_macro_(control_button, GamepadPage::ConfigControl, wxEVT_COMMAND_BUTTON_CLICKED, eventsink);
control_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::ConfigControl, eventsink);
}
_connect_macro_(control_button, GamepadPage::ClearControl, wxEVT_MIDDLE_DOWN, eventsink);
_connect_macro_(control_button, GamepadPage::ConfigControl, wxEVT_RIGHT_UP, eventsink);
control_button->Bind(wxEVT_MIDDLE_DOWN, &GamepadPage::ClearControl, eventsink);
control_button->Bind(wxEVT_RIGHT_UP, &GamepadPage::ConfigControl, eventsink);
wxBoxSizer* const control_sizer = new wxBoxSizer(wxHORIZONTAL);
control_sizer->AddStretchSpacer(1);
@@ -733,7 +732,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
for (; i!=e; ++i)
{
PadSettingSpin* setting = new PadSettingSpin(parent, *i);
_connect_macro_(setting->wxcontrol, GamepadPage::AdjustSetting, wxEVT_COMMAND_SPINCTRL_UPDATED, eventsink);
setting->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting);
szr->Add(new wxStaticText(parent, -1, WXTSTR_FROM_CSTR((*i)->name)));
szr->Add(setting->wxcontrol, 0, wxLEFT, 0);
@@ -754,7 +753,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
static_bitmap = new wxStaticBitmap(parent, -1, bitmap, wxDefaultPosition, wxDefaultSize, wxBITMAP_TYPE_BMP);
PadSettingSpin* const threshold_cbox = new PadSettingSpin(parent, group->settings[0]);
_connect_macro_(threshold_cbox->wxcontrol, GamepadPage::AdjustSetting, wxEVT_COMMAND_SPINCTRL_UPDATED, eventsink);
threshold_cbox->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
threshold_cbox->wxcontrol->SetToolTip(_("Adjust the analog control pressure required to activate buttons."));
@@ -793,7 +792,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
for (; i!=e; ++i)
{
PadSettingSpin* setting = new PadSettingSpin(parent, *i);
_connect_macro_(setting->wxcontrol, GamepadPage::AdjustSetting, wxEVT_COMMAND_SPINCTRL_UPDATED, eventsink);
setting->wxcontrol->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting);
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
szr->Add(new wxStaticText(parent, -1, WXTSTR_FROM_CSTR((*i)->name)), 0, wxCENTER|wxRIGHT, 3);
@@ -811,8 +810,8 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
options.push_back(attachments);
_connect_macro_(attachments->wxcontrol, GamepadPage::AdjustSetting, wxEVT_COMMAND_CHOICE_SELECTED, eventsink);
_connect_macro_(configure_btn, GamepadPage::ConfigExtension, wxEVT_COMMAND_BUTTON_CLICKED, eventsink);
attachments->wxcontrol->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &GamepadPage::AdjustSetting, eventsink);
configure_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::ConfigExtension, eventsink);
Add(attachments->wxcontrol, 0, wxTOP|wxLEFT|wxRIGHT|wxEXPAND, 3);
Add(configure_btn, 0, wxALL|wxEXPAND, 3);
@@ -821,7 +820,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
case GROUP_TYPE_UDPWII:
{
wxButton* const btn = new UDPConfigButton(parent, (UDPWrapper*)group);
_connect_macro_(btn, GamepadPage::ConfigUDPWii, wxEVT_COMMAND_BUTTON_CLICKED, eventsink);
btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::ConfigUDPWii, eventsink);
Add(btn, 0, wxALL|wxEXPAND, 3);
}
break;
@@ -835,7 +834,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
for (; i!=e; ++i)
{
PadSettingCheckBox* setting_cbox = new PadSettingCheckBox(parent, (*i)->value, (*i)->name);
_connect_macro_(setting_cbox->wxcontrol, GamepadPage::AdjustSetting, wxEVT_COMMAND_CHECKBOX_CLICKED, eventsink);
setting_cbox->wxcontrol->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting_cbox);
Add(setting_cbox->wxcontrol, 0, wxALL|wxLEFT, 5);
@@ -850,7 +849,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
//AddStretchSpacer(0);
}
ControlGroupsSizer::ControlGroupsSizer(ControllerEmu* const controller, wxWindow* const parent, wxWindow* const eventsink, std::vector<ControlGroupBox*>* groups)
ControlGroupsSizer::ControlGroupsSizer(ControllerEmu* const controller, wxWindow* const parent, GamepadPage* const eventsink, std::vector<ControlGroupBox*>* groups)
: wxBoxSizer(wxHORIZONTAL)
{
size_t col_size = 0;
@@ -906,9 +905,9 @@ GamepadPage::GamepadPage(wxWindow* parent, InputPlugin& plugin, const unsigned i
wxButton* refresh_button = new wxButton(this, -1, _("Refresh"), wxDefaultPosition, wxSize(60,-1));
_connect_macro_(device_cbox, GamepadPage::SetDevice, wxEVT_COMMAND_COMBOBOX_SELECTED, this);
_connect_macro_(device_cbox, GamepadPage::SetDevice, wxEVT_COMMAND_TEXT_ENTER, this);
_connect_macro_(refresh_button, GamepadPage::RefreshDevices, wxEVT_COMMAND_BUTTON_CLICKED, this);
device_cbox->Bind(wxEVT_COMMAND_COMBOBOX_SELECTED, &GamepadPage::SetDevice, this);
device_cbox->Bind(wxEVT_COMMAND_TEXT_ENTER, &GamepadPage::SetDevice, this);
refresh_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::RefreshDevices, this);
device_sbox->Add(device_cbox, 1, wxLEFT|wxRIGHT, 3);
device_sbox->Add(refresh_button, 0, wxRIGHT|wxBOTTOM, 3);
@@ -920,8 +919,8 @@ GamepadPage::GamepadPage(wxWindow* parent, InputPlugin& plugin, const unsigned i
clear_sbox->Add(default_button, 1, wxLEFT, 3);
clear_sbox->Add(clearall_button, 1, wxRIGHT, 3);
_connect_macro_(clearall_button, GamepadPage::ClearAll, wxEVT_COMMAND_BUTTON_CLICKED, this);
_connect_macro_(default_button, GamepadPage::LoadDefaults, wxEVT_COMMAND_BUTTON_CLICKED, this);
clearall_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::ClearAll, this);
default_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::LoadDefaults, this);
profile_cbox = new wxComboBox(this, -1, wxT(""), wxDefaultPosition, wxSize(64,-1));
@@ -929,9 +928,9 @@ GamepadPage::GamepadPage(wxWindow* parent, InputPlugin& plugin, const unsigned i
wxButton* const psave_btn = new wxButton(this, -1, _("Save"), wxDefaultPosition, wxSize(48,-1));
wxButton* const pdelete_btn = new wxButton(this, -1, _("Delete"), wxDefaultPosition, wxSize(60,-1));
_connect_macro_(pload_btn, GamepadPage::LoadProfile, wxEVT_COMMAND_BUTTON_CLICKED, this);
_connect_macro_(psave_btn, GamepadPage::SaveProfile, wxEVT_COMMAND_BUTTON_CLICKED, this);
_connect_macro_(pdelete_btn, GamepadPage::DeleteProfile, wxEVT_COMMAND_BUTTON_CLICKED, this);
pload_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::LoadProfile, this);
psave_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::SaveProfile, this);
pdelete_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &GamepadPage::DeleteProfile, this);
profile_sbox->Add(profile_cbox, 1, wxLEFT, 3);
profile_sbox->Add(pload_btn, 0, wxLEFT, 3);
@@ -972,7 +971,7 @@ InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputPlugin& plugin
UpdateDeviceComboBox();
UpdateProfileComboBox();
Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(InputConfigDialog::ClickSave));
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &InputConfigDialog::ClickSave, this, wxID_OK);
wxBoxSizer* const szr = new wxBoxSizer(wxVERTICAL);
szr->Add(m_pad_notebook, 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, 5);
@@ -983,7 +982,7 @@ InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputPlugin& plugin
// live preview update timer
m_update_timer = new wxTimer(this, -1);
Connect(wxID_ANY, wxEVT_TIMER, wxTimerEventHandler(InputConfigDialog::UpdateBitmaps), (wxObject*)0, this);
Bind(wxEVT_TIMER, &InputConfigDialog::UpdateBitmaps, this);
m_update_timer->Start(PREVIEW_UPDATE_TIME, wxTIMER_CONTINUOUS);
}
+5 -5
View File
@@ -100,7 +100,7 @@ class ControlDialog : public wxDialog
public:
ControlDialog(GamepadPage* const parent, InputPlugin& plugin, ControllerInterface::ControlReference* const ref);
wxStaticBoxSizer* CreateControlChooser(wxWindow* const parent, wxWindow* const eventsink);
wxStaticBoxSizer* CreateControlChooser(GamepadPage* const parent);
void DetectControl(wxCommandEvent& event);
void ClearControl(wxCommandEvent& event);
@@ -159,7 +159,7 @@ public:
class ControlGroupBox : public wxBoxSizer
{
public:
ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWindow* const parent, wxWindow* const eventsink);
ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWindow* const parent, GamepadPage* const eventsink);
~ControlGroupBox();
std::vector<PadSetting*> options;
@@ -172,7 +172,7 @@ public:
class ControlGroupsSizer : public wxBoxSizer
{
public:
ControlGroupsSizer(ControllerEmu* const controller, wxWindow* const parent, wxWindow* const eventsink, std::vector<ControlGroupBox*>* const groups = NULL);
ControlGroupsSizer(ControllerEmu* const controller, wxWindow* const parent, GamepadPage* const eventsink, std::vector<ControlGroupBox*>* const groups = NULL);
};
class InputConfigDialog;
@@ -193,8 +193,8 @@ public:
void SaveProfile(wxCommandEvent& event);
void DeleteProfile(wxCommandEvent& event);
void ConfigControl(wxCommandEvent& event);
void ClearControl(wxCommandEvent& event);
void ConfigControl(wxEvent& event);
void ClearControl(wxEvent& event);
void DetectControl(wxCommandEvent& event);
void ConfigExtension(wxCommandEvent& event);
+7 -10
View File
@@ -21,9 +21,6 @@
#include "LogWindow.h"
#include "FileUtil.h"
#define _connect_macro_(b, f, c, s) \
(b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
LogConfigWindow::LogConfigWindow(wxWindow* parent, CLogWindow *log_window, wxWindowID id)
: wxPanel(parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _("Log Configuration"))
, m_LogWindow(log_window), enableAll(true)
@@ -53,29 +50,29 @@ void LogConfigWindow::CreateGUIControls()
m_verbosity = new wxRadioBox(this, wxID_ANY, _("Verbosity"),
wxDefaultPosition, wxDefaultSize, wxLevelsUse, 0,
wxRA_SPECIFY_ROWS, wxDefaultValidator);
_connect_macro_(m_verbosity, LogConfigWindow::OnVerbosityChange, wxEVT_COMMAND_RADIOBOX_SELECTED, this);
m_verbosity->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, &LogConfigWindow::OnVerbosityChange, this);
// Options
m_writeFileCB = new wxCheckBox(this, wxID_ANY, _("Write to File"));
_connect_macro_(m_writeFileCB, LogConfigWindow::OnWriteFileChecked, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
m_writeFileCB->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &LogConfigWindow::OnWriteFileChecked, this);
m_writeConsoleCB = new wxCheckBox(this, wxID_ANY, _("Write to Console"));
_connect_macro_(m_writeConsoleCB, LogConfigWindow::OnWriteConsoleChecked, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
m_writeConsoleCB->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &LogConfigWindow::OnWriteConsoleChecked, this);
m_writeWindowCB = new wxCheckBox(this, wxID_ANY, _("Write to Window"));
_connect_macro_(m_writeWindowCB, LogConfigWindow::OnWriteWindowChecked, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
m_writeWindowCB->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &LogConfigWindow::OnWriteWindowChecked, this);
m_writeDebuggerCB = NULL;
#ifdef _MSC_VER
if (IsDebuggerPresent())
{
m_writeDebuggerCB = new wxCheckBox(this, wxID_ANY, _("Write to Debugger"));
_connect_macro_(m_writeDebuggerCB, LogConfigWindow::OnWriteDebuggerChecked, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
m_writeDebuggerCB->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &LogConfigWindow::OnWriteDebuggerChecked, this);
}
#endif
wxButton *btn_toggle_all = new wxButton(this, wxID_ANY, _("Toggle All Log Types"),
wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
_connect_macro_(btn_toggle_all, LogConfigWindow::OnToggleAll, wxEVT_COMMAND_BUTTON_CLICKED, this);
btn_toggle_all->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &LogConfigWindow::OnToggleAll, this);
m_checks = new wxCheckListBox(this, wxID_ANY);
_connect_macro_(m_checks, LogConfigWindow::OnLogCheck, wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, this);
m_checks->Bind(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, &LogConfigWindow::OnLogCheck, this);
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; i++)
m_checks->Append(wxString::FromAscii(m_LogManager->GetFullName((LogTypes::LOG_TYPE)i)));
+9 -6
View File
@@ -39,11 +39,11 @@ const u8 hdr[] = {
0x00,0x00,0x00,0x00
};
wxBitmap wxBitmapFromMemoryRGBA(const unsigned char* data, int width, int height)
wxBitmap wxBitmapFromMemoryRGBA(const unsigned char* data, u32 width, u32 height)
{
int stride = (4*width);
u32 stride = (4*width);
int bytes = (stride*height) + sizeof(hdr);
u32 bytes = (stride*height) + sizeof(hdr);
bytes = (bytes+3)&(~3);
@@ -54,13 +54,13 @@ wxBitmap wxBitmapFromMemoryRGBA(const unsigned char* data, int width, int height
u8 *pixelData = pdata + sizeof(hdr);
for (int y=0;y<height;y++)
for (u32 y=0;y<height;y++)
{
memcpy(pixelData+y*stride,data+(height-y-1)*stride,stride);
}
*(int*)(pdata+18) = width;
*(int*)(pdata+22) = height;
*(u32*)(pdata+18) = width;
*(u32*)(pdata+22) = height;
*(u32*)(pdata+34) = bytes-sizeof(hdr);
wxMemoryInputStream is(pdata, bytes);
@@ -777,6 +777,9 @@ bool CMemcardManager::ReloadMemcard(const char *fileName, int card)
memoryCard[card]->GetFreeBlocks(), DIRLEN - nFiles);
t_Status[card]->SetLabel(wxLabel);
// Done so text doesn't overlap the UI.
this->Fit();
return true;
}
+2 -4
View File
@@ -149,13 +149,11 @@ class CMemcardManager : public wxDialog
: wxListCtrl(parent, id, pos, size, style)
, __mcmSettings(_mcmSetngs)
{
Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(
CMemcardListCtrl::OnRightClick));
Bind(wxEVT_RIGHT_DOWN, &CMemcardListCtrl::OnRightClick, this);
}
~CMemcardListCtrl()
{
Disconnect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(
CMemcardListCtrl::OnRightClick));
Unbind(wxEVT_RIGHT_DOWN, &CMemcardListCtrl::OnRightClick, this);
}
_mcmSettings & __mcmSettings;
bool prevPage,
+16 -19
View File
@@ -24,9 +24,6 @@
#include <sstream>
#define _connect_macro_(b, f, c, s) \
(b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
#define NETPLAY_TITLEBAR "Dolphin NetPlay"
BEGIN_EVENT_TABLE(NetPlayDiag, wxFrame)
@@ -86,7 +83,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
m_connect_port_text = new wxTextCtrl(connect_tab, wxID_ANY, wxString::FromAscii(port.c_str()));
wxButton* const connect_btn = new wxButton(connect_tab, wxID_ANY, _("Connect"));
_connect_macro_(connect_btn, NetPlaySetupDiag::OnJoin, wxEVT_COMMAND_BUTTON_CLICKED, this);
connect_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnJoin, this);
wxStaticText* const alert_lbl = new wxStaticText(connect_tab, wxID_ANY,
_("ALERT:\n\nNetPlay will currently only work properly when using the following settings:\n - Dual Core [OFF]\n - Audio Throttle [OFF]\n - DSP-HLE with \"Null Audio\" or DSP-LLE\n - Manually set the exact number of controllers that will be used to [Standard Controller]\n\nAll players should try to use the same Dolphin version and settings.\nDisable all memory cards or send them to all players before starting.\nWiimote support has not been implemented.\n\nYou must forward TCP port to host!!"),
@@ -119,10 +116,10 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
m_host_port_text = new wxTextCtrl(host_tab, wxID_ANY, wxString::FromAscii(port.c_str()));
wxButton* const host_btn = new wxButton(host_tab, wxID_ANY, _("Host"));
_connect_macro_(host_btn, NetPlaySetupDiag::OnHost, wxEVT_COMMAND_BUTTON_CLICKED, this);
host_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnHost, this);
m_game_lbox = new wxListBox(host_tab, wxID_ANY);
_connect_macro_(m_game_lbox, NetPlaySetupDiag::OnHost, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, this);
m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &NetPlaySetupDiag::OnHost, this);
std::istringstream ss(game_list->GetGameNames());
std::string game;
@@ -143,7 +140,7 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
// bottom row
wxButton* const quit_btn = new wxButton(panel, wxID_ANY, _("Quit"));
_connect_macro_(quit_btn, NetPlaySetupDiag::OnQuit, wxEVT_COMMAND_BUTTON_CLICKED, this);
quit_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlaySetupDiag::OnQuit, this);
// main sizer
wxBoxSizer* const main_szr = new wxBoxSizer(wxVERTICAL);
@@ -257,7 +254,7 @@ NetPlayDiag::NetPlayDiag(wxWindow* const parent, const CGameListCtrl* const game
wxDefaultPosition, wxDefaultSize, wxBU_LEFT);
if (is_hosting)
_connect_macro_(m_game_btn, NetPlayDiag::OnChangeGame, wxEVT_COMMAND_BUTTON_CLICKED, this);
m_game_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnChangeGame, this);
else
m_game_btn->Disable();
@@ -269,10 +266,10 @@ NetPlayDiag::NetPlayDiag(wxWindow* const parent, const CGameListCtrl* const game
m_chat_msg_text = new wxTextCtrl(panel, wxID_ANY, wxEmptyString
, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
_connect_macro_(m_chat_msg_text, NetPlayDiag::OnChat, wxEVT_COMMAND_TEXT_ENTER, this);
m_chat_msg_text->Bind(wxEVT_COMMAND_TEXT_ENTER, &NetPlayDiag::OnChat, this);
wxButton* const chat_msg_btn = new wxButton(panel, wxID_ANY, _("Send"));
_connect_macro_(chat_msg_btn, NetPlayDiag::OnChat, wxEVT_COMMAND_BUTTON_CLICKED, this);
chat_msg_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnChat, this);
wxBoxSizer* const chat_msg_szr = new wxBoxSizer(wxHORIZONTAL);
chat_msg_szr->Add(m_chat_msg_text, 1);
@@ -290,7 +287,7 @@ NetPlayDiag::NetPlayDiag(wxWindow* const parent, const CGameListCtrl* const game
if (is_hosting)
{
wxButton* const player_config_btn = new wxButton(panel, wxID_ANY, _("Configure Pads"));
_connect_macro_(player_config_btn, NetPlayDiag::OnConfigPads, wxEVT_COMMAND_BUTTON_CLICKED, this);
player_config_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnConfigPads, this);
player_szr->Add(player_config_btn, 0, wxEXPAND | wxTOP, 5);
}
@@ -300,23 +297,23 @@ NetPlayDiag::NetPlayDiag(wxWindow* const parent, const CGameListCtrl* const game
// bottom crap
wxButton* const quit_btn = new wxButton(panel, wxID_ANY, _("Quit"));
_connect_macro_(quit_btn, NetPlayDiag::OnQuit, wxEVT_COMMAND_BUTTON_CLICKED, this);
quit_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnQuit, this);
wxBoxSizer* const bottom_szr = new wxBoxSizer(wxHORIZONTAL);
if (is_hosting)
{
wxButton* const start_btn = new wxButton(panel, wxID_ANY, _("Start"));
_connect_macro_(start_btn, NetPlayDiag::OnStart, wxEVT_COMMAND_BUTTON_CLICKED, this);
start_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnStart, this);
bottom_szr->Add(start_btn);
wxButton* const stop_btn = new wxButton(panel, wxID_ANY, _("Stop"));
_connect_macro_(stop_btn, NetPlayDiag::OnStop, wxEVT_COMMAND_BUTTON_CLICKED, this);
stop_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnStop, this);
bottom_szr->Add(stop_btn);
bottom_szr->Add(new wxStaticText(panel, wxID_ANY, _("Buffer:")), 0, wxLEFT | wxCENTER, 5 );
wxSpinCtrl* const padbuf_spin = new wxSpinCtrl(panel, wxID_ANY, wxT("20")
, wxDefaultPosition, wxSize(64, -1), wxSP_ARROW_KEYS, 0, 200, 20);
_connect_macro_(padbuf_spin, NetPlayDiag::OnAdjustBuffer, wxEVT_COMMAND_SPINCTRL_UPDATED, this);
padbuf_spin->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &NetPlayDiag::OnAdjustBuffer, this);
wxButton* const padbuf_btn = new wxButton(panel, wxID_ANY, wxT("?"), wxDefaultPosition, wxSize(22, -1));
_connect_macro_(padbuf_btn, NetPlayDiag::OnPadBuffHelp, wxEVT_COMMAND_BUTTON_CLICKED, this);
padbuf_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &NetPlayDiag::OnPadBuffHelp, this);
bottom_szr->Add(padbuf_spin, 0, wxCENTER);
bottom_szr->Add(padbuf_btn);
}
@@ -550,7 +547,7 @@ ChangeGameDiag::ChangeGameDiag(wxWindow* const parent, const CGameListCtrl* cons
, m_game_name(game_name)
{
m_game_lbox = new wxListBox(this, wxID_ANY);
_connect_macro_(m_game_lbox, ChangeGameDiag::OnPick, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, this);
m_game_lbox->Bind(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, &ChangeGameDiag::OnPick, this);
// fill list with games
std::istringstream ss(game_list->GetGameNames());
@@ -559,7 +556,7 @@ ChangeGameDiag::ChangeGameDiag(wxWindow* const parent, const CGameListCtrl* cons
m_game_lbox->Append(wxString(game.c_str(), *wxConvCurrent));
wxButton* const ok_btn = new wxButton(this, wxID_OK, _("Change"));
_connect_macro_(ok_btn, ChangeGameDiag::OnPick, wxEVT_COMMAND_BUTTON_CLICKED, this);
ok_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ChangeGameDiag::OnPick, this);
wxBoxSizer* const szr = new wxBoxSizer(wxVERTICAL);
szr->Add(m_game_lbox, 1, wxLEFT | wxRIGHT | wxTOP | wxEXPAND, 5);
@@ -604,7 +601,7 @@ PadMapDiag::PadMapDiag(wxWindow* const parent, int map[])
= new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 5, pad_names);
pad_cbox->Select(m_mapping[i] + 1);
_connect_macro_(pad_cbox, PadMapDiag::OnAdjust, wxEVT_COMMAND_CHOICE_SELECTED, this);
pad_cbox->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &PadMapDiag::OnAdjust, this);
wxBoxSizer* const v_szr = new wxBoxSizer(wxVERTICAL);
v_szr->Add(new wxStaticText(this,wxID_ANY, pad_names[i + 1]), 1, wxALIGN_CENTER_HORIZONTAL);
+28 -28
View File
@@ -54,8 +54,8 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
wxBoxSizer* const main_stick_box = new wxBoxSizer(wxVERTICAL);
static_bitmap_main = new wxStaticBitmap(this, ID_MAIN_STICK, TASInputDlg::CreateStickBitmap(128,128), wxDefaultPosition, wxDefaultSize);
static_bitmap_main->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(TASInputDlg::OnMouseUpL), NULL, this);
static_bitmap_main->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(TASInputDlg::OnMouseUpR), NULL, this);
static_bitmap_main->Bind(wxEVT_LEFT_UP, &TASInputDlg::OnMouseUpL, this);
static_bitmap_main->Bind(wxEVT_RIGHT_UP, &TASInputDlg::OnMouseUpR, this);
wx_mainX_s = new wxSlider(this, ID_MAIN_X_SLIDER, 128, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
wx_mainX_s->SetMinSize(wxSize(120,-1));
wx_mainX_t = new wxTextCtrl(this, ID_MAIN_X_TEXT, wxT("128"), wxDefaultPosition, wxSize(40, 20));
@@ -80,8 +80,8 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
wxBoxSizer* const c_stick_box = new wxBoxSizer(wxVERTICAL);
static_bitmap_c = new wxStaticBitmap(this, ID_C_STICK, TASInputDlg::CreateStickBitmap(128,128), wxDefaultPosition, wxDefaultSize);
static_bitmap_c->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(TASInputDlg::OnMouseUpL), NULL, this);
static_bitmap_c->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(TASInputDlg::OnMouseUpR), NULL, this);
static_bitmap_c->Bind(wxEVT_LEFT_UP, &TASInputDlg::OnMouseUpL, this);
static_bitmap_c->Bind(wxEVT_RIGHT_UP, &TASInputDlg::OnMouseUpR, this);
wx_cX_s = new wxSlider(this, ID_C_X_SLIDER, 128, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
wx_cX_s->SetMinSize(wxSize(120,-1));
wx_cX_t = new wxTextCtrl(this, ID_C_X_TEXT, wxT("128"), wxDefaultPosition, wxSize(40, 20));
@@ -120,29 +120,29 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
wxGridSizer* const buttons_grid = new wxGridSizer(4);
wx_a_button = new wxCheckBox(this,ID_A,_T("A"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_a_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_a_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_a_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_a_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_b_button = new wxCheckBox(this,ID_B,_T("B"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_b_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_b_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_b_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_b_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_x_button = new wxCheckBox(this,ID_X,_T("X"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_x_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_x_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_x_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_x_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_y_button = new wxCheckBox(this,ID_Y,_T("Y"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_y_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_y_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_y_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_y_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_l_button = new wxCheckBox(this,ID_L,_T("L"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_l_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_l_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_l_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_l_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_r_button = new wxCheckBox(this,ID_R,_T("R"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_r_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_r_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_r_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_r_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_z_button = new wxCheckBox(this,ID_Z,_T("Z"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_z_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_z_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_z_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_z_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_start_button = new wxCheckBox(this,ID_START,_T("Start"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_start_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_start_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_start_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_start_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
buttons_grid->Add(wx_a_button,false);
buttons_grid->Add(wx_b_button,false);
@@ -157,17 +157,17 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
wxGridSizer* const buttons_dpad = new wxGridSizer(3);
wx_up_button = new wxCheckBox(this,ID_UP,_T("Up"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_up_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_up_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_up_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_up_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_right_button = new wxCheckBox(this,ID_RIGHT,_T("Right"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_right_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_right_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_right_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_right_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_down_button = new wxCheckBox(this,ID_DOWN,_T("Down"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_down_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_down_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_down_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_down_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
wx_left_button = new wxCheckBox(this,ID_LEFT,_T("Left"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,wxCheckBoxNameStr);
wx_left_button->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurbo), NULL, this);
wx_left_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TASInputDlg::SetTurboFalse), NULL, this);
wx_left_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this);
wx_left_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this);
buttons_dpad->AddSpacer(20);
buttons_dpad->Add(wx_up_button,false);
+7 -9
View File
@@ -6,8 +6,6 @@
#include "IniFile.h"
#include <string>
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler( f ), (wxObject*)0, (wxEvtHandler*)s)
UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) :
wxDialog(parent, -1, _("UDP Wiimote"), wxDefaultPosition, wxDefaultSize),
wrp(_wrp)
@@ -31,13 +29,13 @@ UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) :
port_tbox = new wxTextCtrl(this, wxID_ANY, wxString::FromUTF8(wrp->port.c_str()));
port_sizer->Add(port_tbox, 1, wxLEFT | wxEXPAND, 5);
_connect_macro_(enable, UDPConfigDiag::ChangeState, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(butt, UDPConfigDiag::ChangeUpdateFlags, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(accel, UDPConfigDiag::ChangeUpdateFlags, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(point, UDPConfigDiag::ChangeUpdateFlags, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(nun, UDPConfigDiag::ChangeUpdateFlags, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(nunaccel, UDPConfigDiag::ChangeUpdateFlags, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(port_tbox, UDPConfigDiag::ChangeState, wxEVT_COMMAND_TEXT_UPDATED, this);
enable->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeState, this);
butt->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeUpdateFlags, this);
accel->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeUpdateFlags, this);
point->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeUpdateFlags, this);
nun->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeUpdateFlags, this);
nunaccel->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UDPConfigDiag::ChangeUpdateFlags, this);
port_tbox->Bind(wxEVT_COMMAND_TEXT_UPDATED, &UDPConfigDiag::ChangeState, this);
enable->SetValue(wrp->udpEn);
butt->SetValue(wrp->updButt);
+15 -17
View File
@@ -11,8 +11,6 @@
#include <ApplicationServices/ApplicationServices.h>
#endif
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler( f ), (wxObject*)0, (wxEvtHandler*)s)
extern CFrame* main_frame;
// template instantiation
@@ -27,7 +25,7 @@ SettingCheckBox::BoolSetting(wxWindow* parent, const wxString& label, const wxSt
{
SetToolTip(tooltip);
SetValue(m_setting ^ m_reverse);
_connect_macro_(this, SettingCheckBox::UpdateValue, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &SettingCheckBox::UpdateValue, this);
}
template <>
@@ -38,7 +36,7 @@ SettingRadioButton::BoolSetting(wxWindow* parent, const wxString& label, const w
{
SetToolTip(tooltip);
SetValue(m_setting ^ m_reverse);
_connect_macro_(this, SettingRadioButton::UpdateValue, wxEVT_COMMAND_RADIOBUTTON_SELECTED, this);
Bind(wxEVT_COMMAND_RADIOBUTTON_SELECTED, &SettingRadioButton::UpdateValue, this);
}
SettingChoice::SettingChoice(wxWindow* parent, int &setting, const wxString& tooltip, int num, const wxString choices[], long style)
@@ -47,7 +45,7 @@ SettingChoice::SettingChoice(wxWindow* parent, int &setting, const wxString& too
{
SetToolTip(tooltip);
Select(m_setting);
_connect_macro_(this, SettingChoice::UpdateValue, wxEVT_COMMAND_CHOICE_SELECTED, this);
Bind(wxEVT_COMMAND_CHOICE_SELECTED, &SettingChoice::UpdateValue, this);
}
void SettingChoice::UpdateValue(wxCommandEvent& ev)
@@ -112,12 +110,12 @@ wxString dump_frames_desc = wxTRANSLATE("Dump all rendered frames to an AVI file
#if !defined WIN32 && defined HAVE_LIBAV
wxString use_ffv1_desc = wxTRANSLATE("Encode frame dumps using the FFV1 codec.\n\nIf unsure, leave this unchecked.");
#endif
wxString free_look_desc = wxTRANSLATE("This feature allows you to change the game's camera.\nHold the right mouse button and move the mouse to pan the camera around. Hold SHIFT and press one of the WASD keys to move the camera by a certain step distance (SHIFT+0 to move faster and SHIFT+9 to move slower). Press SHIFT+R to reset the camera.\n\nIf unsure, leave this unchecked.");
wxString free_look_desc = wxTRANSLATE("This feature allows you to change the game's camera.\nMove the mouse while holding the right mouse button to pan and while holding the middle button to move.\nHold SHIFT and press one of the WASD keys to move the camera by a certain step distance (SHIFT+0 to move faster and SHIFT+9 to move slower). Press SHIFT+R to reset the camera.\n\nIf unsure, leave this unchecked.");
wxString crop_desc = wxTRANSLATE("Crop the picture from 4:3 to 5:4 or from 16:9 to 16:10.\n\nIf unsure, leave this unchecked.");
wxString opencl_desc = wxTRANSLATE("[EXPERIMENTAL]\nAims to speed up emulation by offloading texture decoding to the GPU using the OpenCL framework.\nHowever, right now it's known to cause texture defects in various games. Also it's slower than regular CPU texture decoding in most cases.\n\nIf unsure, leave this unchecked.");
wxString dlc_desc = wxTRANSLATE("[EXPERIMENTAL]\nSpeeds up emulation a bit by caching display lists.\nPossibly causes issues though.\n\nIf unsure, leave this unchecked.");
wxString omp_desc = wxTRANSLATE("Use multiple threads to decode textures.\nMight result in a speedup (especially on CPUs with more than two cores).\n\nIf unsure, leave this unchecked.");
wxString hotkeys_desc = wxTRANSLATE("Allows toggling certain options via the hotkeys 3, 4, 5 and 6 within the emulation window.\n\nIf unsure, leave this unchecked.");
wxString hotkeys_desc = wxTRANSLATE("Allows toggling certain options via the hotkeys 3 (Internal Resolution), 4 (Aspect Ratio), 5 (Copy EFB) and 6 (Fog) within the emulation window.\n\nIf unsure, leave this unchecked.");
wxString ppshader_desc = wxTRANSLATE("Apply a post-processing effect after finishing a frame.\n\nIf unsure, select (off).");
wxString cache_efb_copies_desc = wxTRANSLATE("Slightly speeds up EFB to RAM copies by sacrificing emulation accuracy.\nSometimes also increases visual quality.\nIf you're experiencing any issues, try raising texture cache accuracy or disable this option.\n\nIf unsure, leave this unchecked.");
wxString shader_errors_desc = wxTRANSLATE("Usually if shader compilation fails, an error message is displayed.\nHowever, one may skip the popups to allow interruption free gameplay by checking this option.\n\nIf unsure, leave this unchecked.");
@@ -190,7 +188,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
{
vconfig.Load((File::GetUserPath(D_CONFIG_IDX) + ininame + ".ini").c_str());
Connect(wxID_ANY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler(VideoConfigDiag::OnUpdateUI), NULL, this);
Bind(wxEVT_UPDATE_UI, &VideoConfigDiag::OnUpdateUI, this);
wxNotebook* const notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize);
@@ -217,7 +215,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
choice_backend->AppendString(wxGetTranslation(wxString::FromAscii((*it)->GetName().c_str())));
choice_backend->SetStringSelection(wxGetTranslation(wxString::FromAscii(g_video_backend->GetName().c_str())));
_connect_macro_(choice_backend, VideoConfigDiag::Event_Backend, wxEVT_COMMAND_CHOICE_SELECTED, this);
choice_backend->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_Backend, this);
szr_basic->Add(label_backend, 1, wxALIGN_CENTER_VERTICAL, 5);
szr_basic->Add(choice_backend, 1, 0, 0);
@@ -259,7 +257,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
wxStaticText* const label_display_resolution = new wxStaticText(page_general, wxID_ANY, _("Fullscreen resolution:"));
choice_display_resolution = new wxChoice(page_general, wxID_ANY, wxDefaultPosition, wxDefaultSize, res_list);
RegisterControl(choice_display_resolution, wxGetTranslation(display_res_desc));
_connect_macro_(choice_display_resolution, VideoConfigDiag::Event_DisplayResolution, wxEVT_COMMAND_CHOICE_SELECTED, this);
choice_display_resolution->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_DisplayResolution, this);
choice_display_resolution->SetStringSelection(wxString::FromAscii(SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution.c_str()));
@@ -389,7 +387,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
else
choice_ppshader->SetStringSelection(wxString::FromAscii(vconfig.sPostProcessingShader.c_str()));
_connect_macro_(choice_ppshader, VideoConfigDiag::Event_PPShader, wxEVT_COMMAND_CHOICE_SELECTED, this);
choice_ppshader->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &VideoConfigDiag::Event_PPShader, this);
szr_enh->Add(new wxStaticText(page_enh, -1, _("Post-Processing Effect:")), 1, wxALIGN_CENTER_VERTICAL, 0);
szr_enh->Add(choice_ppshader);
@@ -455,7 +453,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
// TODO: Use wxSL_MIN_MAX_LABELS or wxSL_VALUE_LABEL with wx 2.9.1
wxSlider* const stc_slider = new wxSlider(page_hacks, wxID_ANY, 0, 0, 2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_BOTTOM);
_connect_macro_(stc_slider, VideoConfigDiag::Event_Stc, wxEVT_COMMAND_SLIDER_UPDATED, this);
stc_slider->Bind(wxEVT_COMMAND_SLIDER_UPDATED, &VideoConfigDiag::Event_Stc, this);
RegisterControl(stc_slider, wxGetTranslation(stc_desc));
if (vconfig.iSafeTextureCache_ColorSamples == 0) stc_slider->SetValue(0);
@@ -556,7 +554,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
{
wxCheckBox* const cb_prog_scan = new wxCheckBox(page_advanced, wxID_ANY, _("Enable Progressive Scan"));
RegisterControl(cb_prog_scan, wxGetTranslation(prog_scan_desc));
_connect_macro_(cb_prog_scan, VideoConfigDiag::Event_ProgressiveScan, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
cb_prog_scan->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &VideoConfigDiag::Event_ProgressiveScan, this);
if (Core::GetState() != Core::CORE_UNINITIALIZED)
cb_prog_scan->Disable();
@@ -579,9 +577,9 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
}
wxButton* const btn_close = new wxButton(this, wxID_OK, _("Close"), wxDefaultPosition);
_connect_macro_(btn_close, VideoConfigDiag::Event_ClickClose, wxEVT_COMMAND_BUTTON_CLICKED, this);
btn_close->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &VideoConfigDiag::Event_ClickClose, this);
Connect(wxID_ANY, wxEVT_CLOSE_WINDOW, wxCloseEventHandler(VideoConfigDiag::Event_Close), (wxObject*)0, this);
Bind(wxEVT_CLOSE_WINDOW, &VideoConfigDiag::Event_Close, this);
wxBoxSizer* const szr_main = new wxBoxSizer(wxVERTICAL);
szr_main->Add(notebook, 1, wxEXPAND | wxALL, 5);
@@ -629,8 +627,8 @@ SettingRadioButton* VideoConfigDiag::CreateRadioButton(wxWindow* parent, const w
wxControl* VideoConfigDiag::RegisterControl(wxControl* const control, const wxString& description)
{
ctrl_descs.insert(std::pair<wxWindow*,wxString>(control, description));
control->Connect(wxID_ANY, wxEVT_ENTER_WINDOW, wxMouseEventHandler(VideoConfigDiag::Evt_EnterControl), NULL, this);
control->Connect(wxID_ANY, wxEVT_LEAVE_WINDOW, wxMouseEventHandler(VideoConfigDiag::Evt_LeaveControl), NULL, this);
control->Bind(wxEVT_ENTER_WINDOW, &VideoConfigDiag::Evt_EnterControl, this);
control->Bind(wxEVT_LEAVE_WINDOW, &VideoConfigDiag::Evt_LeaveControl, this);
return control;
}
+14 -15
View File
@@ -4,8 +4,6 @@
#include "HW/WiimoteReal/WiimoteReal.h"
#include "Frame.h"
#define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s)
const wxString& ConnectedWiimotesString()
{
static wxString str;
@@ -42,9 +40,9 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
wiimote_label[i] = new wxStaticText(this, wxID_ANY, str);
wiimote_source_ch[i] = new wxChoice(this, source_ctrl_id, wxDefaultPosition, wxDefaultSize, sizeof(src_choices)/sizeof(*src_choices), src_choices);
_connect_macro_(wiimote_source_ch[i], WiimoteConfigDiag::SelectSource, wxEVT_COMMAND_CHOICE_SELECTED, this);
wiimote_source_ch[i]->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &WiimoteConfigDiag::SelectSource, this);
wiimote_configure_bt[i] = new wxButton(this, config_bt_id, _("Configure"));
_connect_macro_(wiimote_configure_bt[i], WiimoteConfigDiag::ConfigEmulatedWiimote, wxEVT_COMMAND_BUTTON_CLICKED, this);
wiimote_configure_bt[i]->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::ConfigEmulatedWiimote, this);
m_orig_wiimote_sources[i] = g_wiimote_sources[i];
wiimote_source_ch[i]->Select(m_orig_wiimote_sources[i]);
@@ -69,11 +67,11 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
connected_wiimotes_txt = new wxStaticText(this, -1, ConnectedWiimotesString());
wxButton* const refresh_btn = new wxButton(this, -1, _("Refresh"), wxDefaultPosition);
_connect_macro_(refresh_btn, WiimoteConfigDiag::RefreshRealWiimotes, wxEVT_COMMAND_BUTTON_CLICKED, this);
refresh_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::RefreshRealWiimotes, this);
#ifdef _WIN32
wxButton* const pairup_btn = new wxButton(this, -1, _("Pair Up"), wxDefaultPosition);
_connect_macro_(pairup_btn, WiimoteConfigDiag::PairUpRealWiimotes, wxEVT_COMMAND_BUTTON_CLICKED, this);
pairup_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::PairUpRealWiimotes, this);
#endif
@@ -133,11 +131,11 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
WiimoteMotor->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<bool>("BT.MOT"));
WiimoteReconnectOnLoad->SetValue(SConfig::GetInstance().m_WiimoteReconnectOnLoad);
_connect_macro_(WiiSensBarPos, WiimoteConfigDiag::OnSensorBarPos, wxEVT_COMMAND_CHOICE_SELECTED, this);
_connect_macro_(WiiSensBarSens, WiimoteConfigDiag::OnSensorBarSensitivity, wxEVT_COMMAND_SLIDER_UPDATED, this);
_connect_macro_(WiimoteSpkVolume, WiimoteConfigDiag::OnSpeakerVolume, wxEVT_COMMAND_SLIDER_UPDATED, this);
_connect_macro_(WiimoteMotor, WiimoteConfigDiag::OnMotor, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
_connect_macro_(WiimoteReconnectOnLoad, WiimoteConfigDiag::OnReconnectOnLoad, wxEVT_COMMAND_CHECKBOX_CLICKED, this);
WiiSensBarPos->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &WiimoteConfigDiag::OnSensorBarPos, this);
WiiSensBarSens->Bind(wxEVT_COMMAND_SLIDER_UPDATED, &WiimoteConfigDiag::OnSensorBarSensitivity, this);
WiimoteSpkVolume->Bind(wxEVT_COMMAND_SLIDER_UPDATED, &WiimoteConfigDiag::OnSpeakerVolume, this);
WiimoteMotor->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &WiimoteConfigDiag::OnMotor, this);
WiimoteReconnectOnLoad->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &WiimoteConfigDiag::OnReconnectOnLoad, this);
// "General Settings" layout
@@ -175,8 +173,8 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
main_sizer->Add(general_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(WiimoteConfigDiag::Save));
Connect(wxID_CANCEL, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(WiimoteConfigDiag::Cancel));
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::Save, this, wxID_OK);
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::Cancel, this, wxID_CANCEL);
SetSizerAndFit(main_sizer);
Center();
@@ -207,8 +205,9 @@ void WiimoteConfigDiag::PairUpRealWiimotes(wxCommandEvent&)
UpdateGUI();
}
else if (paired < 0)
PanicAlertT("A supported bluetooth device was not found!\n"
"(Only the Microsoft bluetooth stack is supported.)");
PanicAlertT("A supported bluetooth device could not be found!\n"
"If you are not using Microsoft's bluetooth stack "
"you must manually pair your wiimotes and use only the \"Refresh\" button.");
}
#endif
-312
View File
@@ -1,312 +0,0 @@
/*
Automatic generated header by:
wxInclude by Kim De Deyn, use --help for more information.
Version 1.0, compiled at Sep 12 2007 17:26:17
Header: myheader
Macros: no
Const: yes
*/
#ifndef _WXINCLUDE_MYHEADER_0_H_
#define _WXINCLUDE_MYHEADER_0_H_
static const unsigned char Toolbar_Log_png[] = {
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18,
0x00, 0x00, 0x00, 0x18, 0x08, 0x06, 0x00, 0x00, 0x00, 0xE0,
0x77, 0x3D, 0xF8, 0x00, 0x00, 0x05, 0xC0, 0x49, 0x44, 0x41,
0x54, 0x78, 0x9C, 0xB5, 0x56, 0x79, 0x6C, 0x14, 0x75, 0x14,
0xFE, 0x66, 0xF6, 0xE8, 0x5E, 0xED, 0x1E, 0x6D, 0x77, 0xDB,
0xED, 0x1E, 0x3D, 0x96, 0x5E, 0x58, 0x5A, 0xDA, 0xD2, 0x42,
0xA5, 0x35, 0x6D, 0x38, 0x24, 0xB6, 0x85, 0x42, 0x29, 0x06,
0xAD, 0x78, 0x80, 0x5A, 0xA2, 0x26, 0x42, 0x62, 0x48, 0x10,
0x83, 0x09, 0x68, 0x8C, 0x4D, 0x4A, 0x0C, 0x12, 0x45, 0x12,
0x30, 0x2A, 0x04, 0xFF, 0x30, 0x8A, 0x04, 0x08, 0x06, 0x91,
0x48, 0xC2, 0x65, 0x15, 0xA5, 0x45, 0x10, 0x28, 0x45, 0xE9,
0x96, 0x76, 0xDB, 0xED, 0x76, 0x69, 0xF7, 0x9A, 0x99, 0x1D,
0xDF, 0x0C, 0x52, 0xA9, 0x85, 0xF8, 0x8F, 0xFE, 0x92, 0x97,
0xDF, 0xCC, 0xFC, 0x66, 0xBE, 0xF7, 0xDE, 0xF7, 0xBE, 0xF7,
0x76, 0x81, 0xFF, 0x79, 0x29, 0x1E, 0x74, 0xF0, 0x7D, 0x3B,
0xD8, 0xD6, 0x1A, 0x68, 0x1F, 0xAF, 0x41, 0xC6, 0x8A, 0xB9,
0x28, 0x6D, 0xAE, 0xC2, 0xFC, 0xE6, 0xB9, 0x58, 0xD5, 0x34,
0x1B, 0xF5, 0x8D, 0x15, 0xA8, 0xAF, 0x2F, 0xC7, 0x63, 0x0D,
0x95, 0xC8, 0x6F, 0xAC, 0x82, 0x50, 0x3F, 0x0B, 0x03, 0x07,
0xCF, 0x22, 0x7E, 0x3F, 0x1C, 0xF6, 0x9F, 0x0F, 0x7E, 0xDC,
0x05, 0xC5, 0xD9, 0x1D, 0xC8, 0x65, 0x95, 0x78, 0x95, 0x51,
0x33, 0xFB, 0x35, 0x49, 0xAA, 0xD3, 0x46, 0x9B, 0xF6, 0x98,
0x35, 0x2B, 0xF9, 0x43, 0x6B, 0x66, 0xF2, 0xCB, 0x36, 0x97,
0x69, 0xAD, 0xCD, 0x95, 0xD4, 0x96, 0xEE, 0x32, 0xB4, 0xE9,
0x0D, 0xCA, 0xF6, 0x38, 0x8F, 0x13, 0xA2, 0x88, 0x77, 0xB6,
0xBF, 0x08, 0xFD, 0xBF, 0x66, 0x70, 0x66, 0x27, 0x98, 0x78,
0x0C, 0xAB, 0xE8, 0x72, 0x4F, 0x82, 0xD1, 0xD4, 0x9C, 0x9A,
0x5F, 0x99, 0x9B, 0x51, 0xD2, 0x68, 0x70, 0x96, 0xAC, 0x80,
0xBB, 0x74, 0x99, 0x6C, 0xAE, 0xE2, 0x7A, 0x64, 0xCE, 0x5C,
0x00, 0x77, 0x51, 0x05, 0x12, 0x8D, 0x2C, 0xFA, 0x7B, 0xAE,
0x29, 0xA3, 0x51, 0x71, 0x8E, 0x08, 0xE4, 0x2E, 0x2C, 0xC5,
0xA1, 0x23, 0x9D, 0xE0, 0x1E, 0x98, 0x01, 0x17, 0x85, 0x9B,
0xE3, 0xD0, 0x9E, 0xE8, 0x9C, 0xE6, 0xC8, 0x6B, 0x78, 0x0F,
0x9E, 0xBA, 0x03, 0xB0, 0x15, 0x6E, 0x81, 0xDE, 0x3A, 0x1F,
0x50, 0xA7, 0x22, 0x16, 0x19, 0x05, 0x17, 0x19, 0x02, 0x37,
0xDE, 0x8B, 0x38, 0x1F, 0x40, 0xB2, 0x23, 0x1B, 0x6A, 0x8D,
0x06, 0xE2, 0x1D, 0x72, 0x9A, 0x29, 0x93, 0x8E, 0xF6, 0xA7,
0xA1, 0xBA, 0x17, 0x53, 0x79, 0xEF, 0x8D, 0xC0, 0xE1, 0x51,
0x85, 0x4A, 0x61, 0x71, 0xCE, 0x5E, 0x07, 0x9D, 0xB9, 0x15,
0xC1, 0xC1, 0x93, 0xB8, 0xDE, 0xF9, 0x11, 0x46, 0xFB, 0x4F,
0x93, 0x73, 0x3F, 0x44, 0x21, 0x0E, 0x96, 0xB8, 0xD3, 0xEA,
0x75, 0x30, 0x5B, 0x53, 0xA0, 0xD2, 0x6A, 0x11, 0x8B, 0xF1,
0x88, 0x93, 0x03, 0x81, 0x52, 0xA0, 0x7D, 0x8D, 0x08, 0xE6,
0xCC, 0xD6, 0x95, 0xE2, 0x9E, 0x8D, 0x7B, 0x21, 0x4C, 0xCA,
0xE0, 0xC8, 0x5B, 0x60, 0x29, 0x83, 0x6A, 0xBD, 0xD5, 0x01,
0x7D, 0x6A, 0x3D, 0xC6, 0x03, 0x9D, 0x38, 0xB5, 0xBF, 0x01,
0x17, 0x8E, 0xEE, 0x85, 0xAF, 0x77, 0x18, 0xB1, 0x28, 0x8B,
0xB8, 0xA0, 0x42, 0x34, 0x22, 0xC0, 0xD7, 0x37, 0x8C, 0xEB,
0x17, 0x7B, 0x10, 0x1A, 0x8F, 0x41, 0xA3, 0xD3, 0x41, 0xA9,
0x52, 0x41, 0xA5, 0x56, 0x42, 0xA1, 0x60, 0x40, 0x7E, 0xB6,
0x12, 0x5C, 0xDA, 0x14, 0x8A, 0x14, 0x2A, 0x18, 0x63, 0x31,
0x94, 0x19, 0x6C, 0xB9, 0x60, 0x60, 0x06, 0x17, 0x3E, 0x8D,
0x9C, 0xB2, 0x2A, 0x34, 0xBC, 0xB6, 0x1E, 0x8B, 0x37, 0xAC,
0xC3, 0xBC, 0x67, 0xDB, 0x50, 0xBD, 0xB2, 0x15, 0xD5, 0x2D,
0x2D, 0x64, 0x4B, 0x51, 0x5C, 0x57, 0x8B, 0x14, 0x67, 0x16,
0x8A, 0xAA, 0x2B, 0x51, 0x51, 0x37, 0x13, 0xE5, 0x55, 0x39,
0x30, 0x99, 0xB5, 0x10, 0x04, 0x91, 0x23, 0xAA, 0xC4, 0x29,
0x45, 0x7E, 0xA2, 0x0E, 0x56, 0xA2, 0x68, 0x63, 0xC6, 0x8C,
0x79, 0x2A, 0x63, 0xFA, 0x2C, 0xA8, 0x54, 0x97, 0xA0, 0x37,
0x25, 0xC1, 0xEF, 0xED, 0x43, 0xDF, 0xAF, 0x5D, 0x18, 0xB8,
0x72, 0x89, 0x32, 0xE9, 0xC1, 0x60, 0x6F, 0x2F, 0x3D, 0xF3,
0x82, 0xE7, 0x62, 0x14, 0xB9, 0x06, 0xA9, 0x0E, 0x3B, 0x2C,
0xE9, 0x16, 0xE8, 0x35, 0x3C, 0x2E, 0x77, 0x7B, 0x31, 0x16,
0xE4, 0xBE, 0x7D, 0x7D, 0x1F, 0x76, 0xDD, 0xC5, 0x65, 0xEE,
0x5E, 0x7C, 0xB9, 0x09, 0x0F, 0xAB, 0x13, 0x70, 0xB2, 0xA4,
0x69, 0x03, 0xD2, 0xF2, 0x9F, 0xC4, 0x85, 0x23, 0x2F, 0xE0,
0xF2, 0xA9, 0x73, 0x08, 0x07, 0x63, 0x60, 0x29, 0x0C, 0x25,
0x55, 0x8B, 0xE8, 0x87, 0x42, 0xA9, 0x90, 0x3F, 0x63, 0x88,
0x0E, 0xA9, 0x1E, 0x46, 0x5B, 0x1A, 0xB2, 0x4B, 0x1E, 0x42,
0x68, 0xB8, 0x1F, 0xDF, 0x7C, 0xFD, 0x93, 0x18, 0x0C, 0x08,
0x9B, 0x36, 0xED, 0x93, 0x69, 0x9A, 0x9C, 0x41, 0x4B, 0x35,
0x6A, 0x59, 0x15, 0x9A, 0xEC, 0x05, 0x73, 0xA0, 0xD1, 0x9B,
0x70, 0xE9, 0xC4, 0x6E, 0xA8, 0xB5, 0x66, 0x38, 0x0B, 0x33,
0xE1, 0x29, 0x2B, 0x86, 0x7B, 0x7A, 0x1E, 0x9C, 0x05, 0xB9,
0xC8, 0x2A, 0x2A, 0xA0, 0x3D, 0x1F, 0x69, 0x59, 0xD3, 0xA0,
0x33, 0x9A, 0x21, 0xB1, 0x91, 0x98, 0xA4, 0xC5, 0xF0, 0xAD,
0x21, 0xF4, 0x5E, 0xF5, 0x89, 0x3C, 0x87, 0x9D, 0xC7, 0xBB,
0xD0, 0x3D, 0xC5, 0xC1, 0xF2, 0x1A, 0xCC, 0x20, 0xE2, 0x9A,
0xEC, 0x79, 0x95, 0xD0, 0x9B, 0x2D, 0xA4, 0xF1, 0x30, 0x3C,
0x14, 0x99, 0x39, 0x3D, 0x8D, 0x0A, 0xA8, 0xA2, 0x02, 0x82,
0xE4, 0xC8, 0x43, 0x14, 0x49, 0x1C, 0xF4, 0xA2, 0x96, 0xC0,
0xD3, 0x3C, 0x79, 0x70, 0x14, 0x4C, 0x87, 0x42, 0x8C, 0xE2,
0x5A, 0xD7, 0x55, 0xDC, 0xBC, 0x31, 0x1A, 0x27, 0xFE, 0x3F,
0x25, 0x07, 0xBF, 0x4D, 0x91, 0x69, 0x5C, 0xB8, 0x23, 0x2B,
0x46, 0xA9, 0x25, 0x2A, 0x18, 0x84, 0x03, 0xC3, 0xE8, 0xE9,
0xFC, 0x19, 0xC3, 0xDE, 0x01, 0x84, 0xC7, 0x23, 0x04, 0x1E,
0x27, 0x13, 0x26, 0x48, 0x4D, 0xD0, 0x69, 0x60, 0xB2, 0xDA,
0x60, 0xCD, 0xCA, 0x41, 0xAA, 0x4D, 0x8F, 0x70, 0x58, 0xA0,
0xBA, 0x40, 0x64, 0xD8, 0xC9, 0xBD, 0x35, 0x91, 0x41, 0x53,
0x15, 0x8A, 0xE8, 0x70, 0x99, 0x3D, 0xB7, 0x00, 0x1A, 0x83,
0x11, 0xE7, 0xBE, 0xDA, 0x83, 0xBE, 0x6B, 0x03, 0x60, 0x18,
0x1E, 0xBA, 0x44, 0x03, 0x0C, 0xA6, 0x44, 0x24, 0x59, 0x92,
0x64, 0xFD, 0x27, 0xA6, 0x58, 0xA0, 0x35, 0x18, 0xC8, 0xF1,
0x18, 0xC9, 0xD9, 0x4F, 0xD9, 0xEA, 0xE0, 0xBB, 0x35, 0x02,
0x6F, 0xDF, 0x6D, 0x49, 0x3D, 0x9F, 0x7D, 0xD7, 0x85, 0x2B,
0x53, 0x1C, 0x2C, 0xAE, 0x42, 0x09, 0x05, 0xD7, 0x94, 0xEE,
0xC9, 0x96, 0xB9, 0x8D, 0xF8, 0xAF, 0xC0, 0x55, 0x98, 0x8D,
0x9C, 0xE2, 0x42, 0x38, 0x72, 0xB3, 0x90, 0x96, 0x99, 0x81,
0x14, 0x07, 0x45, 0xEC, 0x76, 0xC2, 0xEE, 0xC9, 0x81, 0xA3,
0x70, 0x06, 0x5C, 0x25, 0x15, 0xF4, 0x2C, 0x13, 0x52, 0xDD,
0x47, 0x7D, 0x3E, 0x78, 0x6F, 0x8E, 0x30, 0x1C, 0x8F, 0x63,
0x27, 0xBA, 0x71, 0x7E, 0x0A, 0x45, 0xC4, 0x2B, 0x1F, 0x8D,
0x00, 0xD1, 0x31, 0x3F, 0xF1, 0xCD, 0x13, 0xA0, 0x83, 0x64,
0x93, 0x00, 0xFF, 0xA0, 0x1F, 0x63, 0x23, 0x41, 0x70, 0xD4,
0x24, 0x02, 0x59, 0x9C, 0x62, 0x54, 0x25, 0x68, 0xA0, 0xD4,
0xE8, 0x69, 0x54, 0xB8, 0x61, 0xC9, 0xC8, 0x84, 0x36, 0xD9,
0x0E, 0x9B, 0xFD, 0x06, 0xD5, 0xEA, 0x0F, 0x26, 0x1C, 0xE2,
0x2A, 0x09, 0x6D, 0xF7, 0x14, 0x99, 0x7E, 0xBC, 0x1E, 0x65,
0x34, 0x87, 0x7E, 0x98, 0x5E, 0xEE, 0x41, 0x45, 0xF3, 0x1A,
0x5C, 0x3C, 0xFA, 0x09, 0x7A, 0xBA, 0x7B, 0x30, 0x16, 0x08,
0xC9, 0x45, 0x65, 0x64, 0xA9, 0xB2, 0x44, 0x5F, 0xA2, 0xFC,
0xBE, 0x20, 0x08, 0x34, 0x97, 0x42, 0xD4, 0xC9, 0x66, 0xD8,
0x49, 0x5D, 0x0E, 0x97, 0x19, 0x07, 0xF6, 0x9E, 0xC4, 0xEF,
0xBD, 0xC1, 0xAB, 0x24, 0x88, 0xCA, 0x37, 0x3F, 0x87, 0x5F,
0x7A, 0x6F, 0xA2, 0x20, 0x14, 0x9C, 0x8F, 0xB6, 0xC8, 0x50,
0x1F, 0x35, 0x51, 0x6C, 0x0C, 0x42, 0x9C, 0x81, 0x92, 0x1A,
0x23, 0xBB, 0x38, 0x1F, 0x45, 0x35, 0x95, 0x98, 0xD3, 0x30,
0x9F, 0x6C, 0x21, 0xCA, 0x17, 0xD4, 0x62, 0xD6, 0x22, 0xBA,
0x5E, 0xB2, 0x04, 0x55, 0x2D, 0xAD, 0xC8, 0x9B, 0xFB, 0x08,
0xF5, 0x42, 0x3A, 0x05, 0xA0, 0x86, 0xCB, 0x65, 0xA0, 0xDE,
0x60, 0xB2, 0x09, 0xA7, 0xEE, 0x2E, 0xEE, 0x84, 0x03, 0x12,
0xC9, 0x30, 0x05, 0x7A, 0xDE, 0x37, 0x18, 0x42, 0x7F, 0xF7,
0x59, 0x64, 0x78, 0x3C, 0x28, 0x9C, 0x99, 0x05, 0xB7, 0x27,
0x05, 0x46, 0x93, 0x02, 0x91, 0xE0, 0x08, 0x82, 0x43, 0x03,
0x08, 0xDC, 0xBA, 0x29, 0x5B, 0xC8, 0xEF, 0x85, 0x96, 0x1D,
0x43, 0xBA, 0x83, 0xA8, 0x4A, 0x4E, 0x80, 0xC8, 0x85, 0x60,
0xB3, 0x4A, 0x72, 0x66, 0x58, 0xA2, 0xA5, 0x6D, 0xF3, 0x8A,
0x3B, 0x53, 0x75, 0x82, 0x22, 0x69, 0x7D, 0xF0, 0x12, 0xDE,
0x27, 0x47, 0x6B, 0x1D, 0x6E, 0x13, 0xF2, 0x8B, 0x5C, 0x08,
0x0C, 0x0C, 0x60, 0xD0, 0xC7, 0xE1, 0xF6, 0xED, 0x18, 0x22,
0x61, 0x0E, 0x3C, 0x8D, 0x4C, 0x51, 0x9A, 0x9A, 0x22, 0x75,
0x31, 0xF1, 0xA0, 0x54, 0xAB, 0x61, 0xB6, 0xE8, 0x61, 0x49,
0xD6, 0xC0, 0x9C, 0x24, 0x22, 0xE0, 0x1B, 0xA1, 0x0A, 0x07,
0x08, 0x54, 0xE4, 0x09, 0xAE, 0x71, 0xF3, 0x7E, 0x1C, 0x9E,
0xE4, 0x60, 0x47, 0x1B, 0x16, 0xD1, 0xF7, 0x87, 0x24, 0xB7,
0x4A, 0x92, 0x46, 0x9C, 0x2A, 0xCA, 0xF3, 0x71, 0xA9, 0x47,
0x64, 0x60, 0x9A, 0xD6, 0xF2, 0xEC, 0xE7, 0xFF, 0xDA, 0xA5,
0x7B, 0xD9, 0x19, 0x2B, 0x39, 0x64, 0xA4, 0x41, 0x07, 0x81,
0x17, 0x65, 0xC5, 0xD0, 0x6A, 0x20, 0x07, 0x07, 0x27, 0xFD,
0x1E, 0xF0, 0x02, 0x8E, 0x33, 0x0C, 0xBE, 0x20, 0xB0, 0xA5,
0x3C, 0x27, 0x48, 0xAF, 0xF5, 0x92, 0xB3, 0xC3, 0x74, 0xF4,
0x0B, 0xF9, 0xF2, 0xD2, 0x1E, 0x26, 0x3C, 0x29, 0x28, 0x03,
0x9D, 0x25, 0xD3, 0x5E, 0x40, 0xA0, 0xA5, 0x04, 0x5A, 0x44,
0xD7, 0x16, 0xE9, 0x84, 0x91, 0x27, 0xB6, 0x3C, 0x8B, 0x8E,
0xE2, 0x7E, 0xAB, 0x63, 0x35, 0x52, 0xC9, 0xB6, 0x6D, 0x5B,
0x8D, 0x57, 0x3A, 0x9E, 0x83, 0xB3, 0xE3, 0x79, 0x28, 0x3B,
0xD6, 0x80, 0x7D, 0xF7, 0x99, 0xBF, 0xE9, 0x7C, 0xBB, 0x15,
0xCC, 0xD6, 0xA7, 0xC0, 0x6E, 0x59, 0x09, 0xE5, 0x1B, 0xCB,
0x61, 0x22, 0xBE, 0xB3, 0xC9, 0x6A, 0xC9, 0x5A, 0xC9, 0x4A,
0xC8, 0x1E, 0xF8, 0x67, 0xE2, 0x3F, 0x5F, 0x7F, 0x02, 0x1C,
0xAC, 0x2A, 0x6C, 0xAB, 0x0A, 0x12, 0x89, 0x00, 0x00, 0x00,
0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
};
static const unsigned char Toolbar_Zoom_png[] = {
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x18,
0x00, 0x00, 0x00, 0x18, 0x08, 0x06, 0x00, 0x00, 0x00, 0xE0,
0x77, 0x3D, 0xF8, 0x00, 0x00, 0x05, 0x1C, 0x49, 0x44, 0x41,
0x54, 0x78, 0x9C, 0xB5, 0x95, 0x6B, 0x6C, 0x14, 0x55, 0x18,
0x86, 0x9F, 0x99, 0x9D, 0x9D, 0xBD, 0x74, 0x77, 0xBB, 0xDB,
0x42, 0x8B, 0xF4, 0x4A, 0x57, 0x28, 0x2D, 0xA4, 0x14, 0xB0,
0x96, 0x0A, 0x04, 0xA1, 0x5C, 0x02, 0x96, 0x4B, 0x81, 0x6A,
0x55, 0xAE, 0x82, 0xA0, 0x09, 0xC4, 0x00, 0x11, 0x03, 0x14,
0x02, 0x05, 0x6F, 0x44, 0x40, 0x91, 0x10, 0xF1, 0x8F, 0x11,
0x83, 0x31, 0x11, 0x0D, 0x04, 0x7E, 0x48, 0x10, 0x2C, 0x06,
0x68, 0x2B, 0x77, 0xCB, 0x45, 0x2A, 0x45, 0xB1, 0xD4, 0x2D,
0xDB, 0xB2, 0xD0, 0x6E, 0x69, 0x77, 0xBB, 0x97, 0xF1, 0x2C,
0x0A, 0x88, 0x52, 0x08, 0x18, 0xDF, 0xE4, 0xCC, 0xEC, 0x9C,
0xB3, 0xF9, 0x9E, 0xF3, 0x7D, 0xDF, 0x7B, 0x66, 0xE0, 0x7F,
0x96, 0xAE, 0xC3, 0x95, 0xA5, 0x7B, 0x65, 0x06, 0x3C, 0x97,
0x44, 0xCE, 0xE4, 0x71, 0xE4, 0x14, 0x2E, 0xA2, 0xFF, 0xB8,
0xC5, 0xF4, 0x1B, 0x5B, 0x48, 0xDF, 0x31, 0x09, 0xF4, 0x1D,
0xDD, 0x42, 0xF6, 0x48, 0x0F, 0x27, 0xBF, 0x09, 0x3F, 0x08,
0x20, 0xDF, 0x73, 0xB6, 0xF4, 0x60, 0x8C, 0x58, 0x5A, 0x20,
0x85, 0xE5, 0xC3, 0x06, 0x83, 0x69, 0x6B, 0x54, 0xB4, 0x63,
0x9A, 0x2D, 0x36, 0x2E, 0xCF, 0x6C, 0xB5, 0x3F, 0xA3, 0xC8,
0xCA, 0x5A, 0x42, 0xDA, 0x31, 0x34, 0x79, 0x0B, 0xD3, 0xD6,
0xA7, 0x32, 0x73, 0xB3, 0xF4, 0x70, 0x80, 0xD2, 0xF2, 0x24,
0x82, 0xDA, 0x97, 0x66, 0xA3, 0xF1, 0xBD, 0xFC, 0xAC, 0xB4,
0x84, 0x35, 0xE3, 0x9F, 0x64, 0x4B, 0xF1, 0x20, 0xD6, 0x4D,
0x1A, 0xC2, 0xA2, 0x82, 0x7C, 0x46, 0x3D, 0x3D, 0x8C, 0xCE,
0x89, 0x69, 0x8A, 0x4E, 0x92, 0x66, 0x12, 0x0E, 0x95, 0xE1,
0xF7, 0x0E, 0x66, 0xFA, 0x86, 0x0E, 0x21, 0x77, 0x03, 0x56,
0x57, 0xD8, 0x09, 0x6B, 0x5B, 0x1C, 0x16, 0xCB, 0xB0, 0x95,
0xC3, 0x33, 0xD9, 0x33, 0x35, 0x9D, 0x57, 0x72, 0x62, 0x68,
0xBE, 0xD1, 0xC6, 0x96, 0x7D, 0x95, 0x54, 0xD4, 0x5C, 0xA2,
0x57, 0x42, 0x02, 0xE3, 0x87, 0xE6, 0x93, 0xDC, 0x3B, 0x17,
0xD9, 0x10, 0x95, 0x82, 0x16, 0xFE, 0x9C, 0xB6, 0x1B, 0xD9,
0x0F, 0x06, 0xAC, 0xA9, 0x90, 0x68, 0xF7, 0x4F, 0x32, 0xC8,
0xD2, 0xE8, 0x79, 0xB9, 0x29, 0xBC, 0x9E, 0x67, 0xA7, 0xB1,
0x0D, 0x36, 0x1E, 0xF1, 0xB3, 0x6A, 0xCF, 0x39, 0x8E, 0x1E,
0x3B, 0xC7, 0x81, 0xD3, 0xE7, 0xD9, 0x75, 0xB6, 0x86, 0x93,
0xEE, 0x6B, 0x58, 0x92, 0xD3, 0xE8, 0x94, 0xD9, 0x0F, 0xBD,
0xC9, 0x94, 0x20, 0x32, 0x59, 0xCE, 0xB8, 0x92, 0xE8, 0xFB,
0x03, 0x9A, 0xAF, 0x5B, 0xA5, 0x80, 0x7F, 0x4E, 0x66, 0xBC,
0x8D, 0x59, 0xD9, 0x0E, 0x7E, 0x69, 0x82, 0x4D, 0xC7, 0x42,
0xE2, 0x1E, 0xC4, 0x6A, 0x10, 0xEB, 0x26, 0x15, 0x55, 0xD5,
0xA3, 0x97, 0x25, 0x7C, 0xC1, 0x20, 0x61, 0x25, 0x84, 0xA3,
0xBB, 0x13, 0x5B, 0x62, 0x0A, 0x92, 0x2C, 0x15, 0xA2, 0x85,
0xEE, 0x99, 0xC5, 0x9D, 0xDA, 0x2D, 0xDC, 0x99, 0xA7, 0xE8,
0xD5, 0xC3, 0xAF, 0x0E, 0xC9, 0x66, 0xE1, 0xC0, 0x78, 0x36,
0x1C, 0x6A, 0xE4, 0xD0, 0xC5, 0x06, 0x11, 0x34, 0x4C, 0x75,
0x6D, 0x1D, 0x57, 0xAF, 0xB8, 0x50, 0x4D, 0x26, 0xEC, 0xB1,
0x9D, 0xD1, 0x24, 0x0D, 0x4B, 0xAC, 0x8D, 0x4E, 0xE9, 0x3D,
0x68, 0xAC, 0xA9, 0xA1, 0xB6, 0x6C, 0x0F, 0x41, 0x6F, 0xF3,
0x2A, 0x11, 0xEE, 0x2D, 0x76, 0xBD, 0xDD, 0xFE, 0x77, 0x80,
0x72, 0xFB, 0x57, 0x28, 0x90, 0xA9, 0xE8, 0x14, 0x3A, 0x99,
0x55, 0x4E, 0xB8, 0xFC, 0x6C, 0xDC, 0x7F, 0x04, 0x3C, 0x0D,
0xA0, 0x0A, 0x27, 0x2B, 0x62, 0x18, 0x55, 0xDA, 0x7D, 0xAD,
0xB8, 0x6B, 0xCE, 0x40, 0x4B, 0x33, 0x0D, 0xED, 0xED, 0x58,
0xE3, 0x67, 0x10, 0xE5, 0x70, 0xA0, 0xD3, 0xE9, 0x08, 0x42,
0x26, 0xB2, 0x2E, 0x92, 0xEB, 0x5D, 0x80, 0x3B, 0x25, 0x0A,
0xF9, 0xD1, 0x82, 0x7E, 0x9A, 0xFC, 0x41, 0x5C, 0x2D, 0x22,
0x9E, 0x4E, 0x42, 0x31, 0x1B, 0xD0, 0xEB, 0x15, 0x24, 0x4D,
0x83, 0x40, 0x00, 0xD1, 0x50, 0x51, 0x0E, 0x3D, 0x18, 0xCC,
0x98, 0x6C, 0x16, 0x8C, 0x46, 0x3D, 0x9A, 0x16, 0x12, 0xD3,
0x62, 0x5D, 0x92, 0xA2, 0xC4, 0xF8, 0x97, 0x2B, 0xEF, 0x4C,
0x84, 0x83, 0xEE, 0xA0, 0xBF, 0x95, 0x73, 0xEE, 0x66, 0x51,
0x5F, 0x23, 0xBD, 0x7B, 0x74, 0x27, 0x3D, 0xBD, 0x27, 0xCE,
0xB4, 0xEE, 0x58, 0xCC, 0xA6, 0x9B, 0xBB, 0x56, 0xC4, 0x4E,
0xE3, 0xD2, 0x33, 0x48, 0x1F, 0x36, 0x84, 0x01, 0x33, 0x8B,
0x70, 0x24, 0x74, 0xA1, 0xB5, 0xD1, 0x4D, 0x28, 0x18, 0x88,
0x00, 0xAA, 0xFF, 0xB9, 0xFB, 0x88, 0xEE, 0x9C, 0xE4, 0xAC,
0xD1, 0xCD, 0x9A, 0x14, 0x9E, 0xD1, 0x26, 0xF6, 0x9D, 0x9A,
0x94, 0x48, 0xAB, 0xA2, 0x60, 0x16, 0xE9, 0x47, 0xEA, 0x7E,
0xB5, 0xFE, 0x77, 0x7C, 0xF5, 0x97, 0x51, 0xAC, 0x56, 0x32,
0x9E, 0xEA, 0x4F, 0xD6, 0xA0, 0x9E, 0xD8, 0xE2, 0xED, 0xB8,
0x5C, 0xAD, 0xD4, 0x55, 0x1E, 0xA4, 0xD5, 0xED, 0x85, 0xB6,
0x2E, 0xCB, 0x38, 0x5E, 0x78, 0x81, 0x96, 0x0F, 0x3B, 0x68,
0xF2, 0xF3, 0xEB, 0x74, 0x44, 0x45, 0x6D, 0x96, 0x8D, 0xC6,
0x39, 0x39, 0x39, 0xB9, 0x24, 0x39, 0xBB, 0xE1, 0x11, 0x25,
0x93, 0x45, 0x09, 0x7E, 0xDC, 0x5F, 0x86, 0xFB, 0xDB, 0xEF,
0x30, 0x67, 0x65, 0x30, 0x62, 0xD6, 0xB3, 0x38, 0x12, 0x63,
0xB9, 0x54, 0x17, 0xE4, 0x42, 0x65, 0x39, 0x75, 0x07, 0x2A,
0xB1, 0xF8, 0x7F, 0x63, 0xAC, 0xE3, 0x68, 0xBF, 0x6D, 0x9F,
0x96, 0x9F, 0xE8, 0xD8, 0x45, 0x11, 0x4D, 0xDF, 0xD8, 0x07,
0x59, 0x2A, 0x37, 0xD8, 0x1D, 0xA6, 0x9E, 0xFD, 0xFB, 0x13,
0x9D, 0x9A, 0x8C, 0xCD, 0x66, 0xC2, 0x73, 0xB9, 0x96, 0xFA,
0x53, 0x55, 0xD8, 0x53, 0x13, 0x49, 0xCA, 0xCE, 0xE2, 0xDA,
0x75, 0x1F, 0xBF, 0x1E, 0x3F, 0x8E, 0xEB, 0xF0, 0x0F, 0x04,
0x3C, 0x7A, 0x66, 0x24, 0x7F, 0xC4, 0x84, 0xE8, 0x33, 0x15,
0xAA, 0x89, 0x97, 0xC6, 0xAC, 0xE2, 0x5C, 0xC7, 0x80, 0x88,
0xA6, 0xAC, 0x9F, 0x2F, 0x1A, 0xB2, 0x51, 0x1F, 0x6D, 0x25,
0x3E, 0xAD, 0x07, 0xD1, 0x09, 0x89, 0x44, 0x75, 0x72, 0xA0,
0x18, 0x0D, 0x04, 0xDB, 0x7C, 0x34, 0xB9, 0xEA, 0xB9, 0x7A,
0xF1, 0x3C, 0xD7, 0xCE, 0xFE, 0x4C, 0xA8, 0xDA, 0x4B, 0xFE,
0x58, 0x2B, 0x1F, 0xBF, 0x70, 0x84, 0x86, 0xEF, 0xBF, 0xC6,
0x5D, 0xC7, 0x01, 0xA2, 0x18, 0x33, 0xEE, 0x0D, 0x5A, 0x3B,
0x06, 0x30, 0x50, 0xA2, 0x78, 0xEC, 0x42, 0x71, 0x70, 0xDE,
0x95, 0x84, 0xFF, 0x54, 0x8B, 0x45, 0x98, 0xC6, 0x84, 0x22,
0xAC, 0x1A, 0xF0, 0xF9, 0xF1, 0x79, 0x5B, 0x08, 0xD4, 0xDF,
0x80, 0x1B, 0x32, 0xA3, 0x72, 0x3D, 0x7C, 0x30, 0x75, 0x27,
0xE9, 0x7D, 0x26, 0xE2, 0xBD, 0xE2, 0xE1, 0xC8, 0xB6, 0x4F,
0xF0, 0x36, 0x85, 0x97, 0x4C, 0x28, 0xE5, 0x9D, 0xFB, 0x00,
0xFE, 0xD2, 0xE4, 0xD5, 0x05, 0xC2, 0x59, 0xF3, 0xC5, 0x6B,
0x60, 0x24, 0x11, 0x9B, 0x12, 0x12, 0x36, 0x15, 0x9E, 0x68,
0x57, 0x48, 0x89, 0xF1, 0x33, 0x77, 0xB8, 0x9D, 0x19, 0x43,
0x9B, 0xE8, 0xA2, 0x6C, 0xA5, 0x45, 0x0E, 0x61, 0xED, 0xFA,
0x26, 0xD5, 0x7B, 0x37, 0x71, 0xBA, 0xEC, 0x64, 0x53, 0x5B,
0x50, 0x1B, 0x3C, 0x65, 0x2D, 0x55, 0x91, 0x30, 0x4A, 0x87,
0x80, 0xED, 0xCB, 0x77, 0x33, 0xA1, 0x44, 0xBC, 0x96, 0x49,
0x17, 0x16, 0xEC, 0x01, 0x71, 0xBA, 0xC7, 0xB4, 0xD3, 0xDD,
0x9E, 0x50, 0x0E, 0xCD, 0x1D, 0x9C, 0x6C, 0xB3, 0xBD, 0x9C,
0x37, 0x42, 0x9C, 0xEA, 0x38, 0x3C, 0xAE, 0x01, 0x22, 0xAB,
0xAF, 0xC4, 0xDF, 0x3E, 0xA3, 0xB3, 0xB3, 0x1F, 0x4A, 0xC5,
0xD9, 0x68, 0x9F, 0xDB, 0x3F, 0x4F, 0x44, 0x98, 0x7B, 0x7F,
0x40, 0x44, 0x3B, 0xD6, 0xB8, 0xC4, 0x35, 0x32, 0xCA, 0x22,
0x8F, 0xAF, 0x0D, 0xC7, 0x18, 0xB4, 0x10, 0xA3, 0xB8, 0xAD,
0xB3, 0xCE, 0x57, 0x25, 0xD1, 0xCB, 0x6C, 0x17, 0x87, 0x37,
0x4D, 0xF4, 0x26, 0x03, 0x4F, 0xF5, 0x29, 0xEC, 0x09, 0x71,
0xE8, 0x2D, 0x66, 0x7C, 0xB5, 0xFE, 0x89, 0xB7, 0x00, 0xF7,
0xFD, 0x58, 0xDC, 0x4B, 0x25, 0x05, 0xF4, 0x96, 0x54, 0x69,
0x47, 0x97, 0xD4, 0x14, 0x67, 0x7E, 0xC1, 0x30, 0xBA, 0x26,
0x77, 0xE5, 0xBA, 0xEB, 0x0C, 0x5E, 0xF7, 0x31, 0xE2, 0xBA,
0xA5, 0x51, 0xBE, 0xEF, 0x0C, 0x3F, 0x55, 0x35, 0xB0, 0x78,
0xEB, 0x9F, 0xB1, 0x1F, 0x1A, 0x70, 0x13, 0x52, 0xC8, 0x6C,
0x9D, 0x41, 0xDD, 0x94, 0xF2, 0xB8, 0xD3, 0x90, 0x93, 0x97,
0x81, 0xC3, 0xDA, 0x26, 0xAA, 0xD8, 0x4C, 0x93, 0xD7, 0x4F,
0xD9, 0xEE, 0x2A, 0x1A, 0x3D, 0xFE, 0xC0, 0x8A, 0x2F, 0x50,
0x1F, 0x19, 0xB0, 0x6C, 0x22, 0xAA, 0x2C, 0x53, 0xA2, 0xA8,
0xA6, 0x92, 0x98, 0xCE, 0x31, 0x52, 0x9A, 0xD3, 0x8E, 0x6A,
0x94, 0x38, 0x7F, 0xEA, 0x22, 0x0D, 0x57, 0x5A, 0x45, 0x3F,
0x58, 0x50, 0xBA, 0x9D, 0xF7, 0x1F, 0x25, 0xF6, 0x6D, 0xAD,
0x28, 0x42, 0x5D, 0x59, 0x24, 0xBD, 0x58, 0x5A, 0xAC, 0xBF,
0xB8, 0xAA, 0xD8, 0xA8, 0xAD, 0x28, 0x52, 0xB4, 0xE5, 0x93,
0xA8, 0x5B, 0x31, 0x89, 0xD9, 0xE2, 0xAE, 0xFE, 0xA7, 0xE0,
0xB7, 0x54, 0x3A, 0x19, 0x69, 0x49, 0x01, 0xCE, 0xA5, 0xE3,
0x99, 0xB2, 0xAC, 0x90, 0xA9, 0x25, 0x13, 0x71, 0xAE, 0x2C,
0xBA, 0xFB, 0x33, 0xFC, 0x07, 0x07, 0x66, 0xCF, 0x92, 0x85,
0x17, 0xB4, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E,
0x44, 0xAE, 0x42, 0x60, 0x82
};
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,303 +0,0 @@
static const unsigned char toolbar_browse_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, 0x87, 0x00, 0x00, 0x00,
0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b,
0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00,
0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
0x72, 0x65, 0x00, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20,
0x4d, 0x58, 0x20, 0x32, 0x30, 0x30, 0x34, 0x87, 0x76, 0xac, 0xcf, 0x00,
0x00, 0x00, 0x14, 0x74, 0x45, 0x58, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x39, 0x2f, 0x37,
0x2f, 0x30, 0x34, 0x6b, 0xeb, 0x0c, 0x3b, 0x00, 0x00, 0x0d, 0x67, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xd5, 0x9a, 0x6b, 0x6c, 0x5c, 0xd7, 0x71,
0xc7, 0x7f, 0xe7, 0xdc, 0xe7, 0x3e, 0xb9, 0x94, 0x44, 0xbd, 0x2c, 0x59,
0xb4, 0x1d, 0x07, 0xae, 0x15, 0xcb, 0x8c, 0x1b, 0x07, 0x89, 0xfb, 0x30,
0x8d, 0xe6, 0x4b, 0x01, 0x07, 0x16, 0x90, 0x0f, 0xaa, 0x11, 0xb4, 0x92,
0x11, 0x34, 0xfa, 0x50, 0xa0, 0x56, 0x9a, 0xf6, 0x83, 0xe1, 0xc6, 0xa2,
0x13, 0xa4, 0x89, 0x61, 0x3b, 0xb6, 0xf3, 0x4d, 0x42, 0x52, 0x4b, 0x49,
0x1c, 0x47, 0x68, 0x0b, 0xdb, 0x40, 0xd1, 0x3a, 0x68, 0x0a, 0x33, 0x45,
0x5a, 0xa7, 0x8e, 0x1f, 0xb4, 0x1d, 0xcb, 0x0f, 0x89, 0x12, 0x25, 0x5a,
0xa4, 0x44, 0x8a, 0xe2, 0x63, 0x49, 0xee, 0xee, 0xbd, 0xf7, 0xcc, 0xf4,
0xc3, 0x5d, 0x52, 0x0f, 0x4b, 0xa2, 0x02, 0xb1, 0x2d, 0x32, 0xc0, 0xe1,
0x1e, 0xec, 0xf2, 0x9e, 0xf9, 0xff, 0xcf, 0xcc, 0x9c, 0x33, 0x33, 0xbb,
0x46, 0x55, 0xf9, 0x6d, 0x16, 0xfb, 0xff, 0x0d, 0xe0, 0x6a, 0xc5, 0xff,
0xdf, 0x58, 0xf4, 0x5f, 0xbf, 0x65, 0x6a, 0x22, 0x3c, 0x29, 0xc2, 0x76,
0x11, 0x10, 0x61, 0x40, 0x94, 0xaf, 0x7c, 0xe1, 0xeb, 0xda, 0xbf, 0xdc,
0xba, 0xcc, 0x72, 0xbb, 0xd0, 0x4f, 0x1f, 0x31, 0x35, 0x11, 0x5e, 0x12,
0xa1, 0x47, 0x04, 0x44, 0xa1, 0x4d, 0x02, 0x11, 0xee, 0x7b, 0xe7, 0x10,
0xfb, 0xfa, 0x0e, 0x2c, 0x9f, 0xce, 0x65, 0x77, 0x21, 0x03, 0x4f, 0x1b,
0xe8, 0x31, 0x06, 0xe2, 0xb2, 0x21, 0x8a, 0xcc, 0xb9, 0x1f, 0x3e, 0xfd,
0x3b, 0x1f, 0x63, 0x2b, 0xec, 0x5d, 0x3e, 0x7d, 0xcb, 0x69, 0x81, 0x9f,
0x3d, 0x6a, 0xee, 0x17, 0xe1, 0x49, 0x51, 0xe8, 0xea, 0x36, 0x74, 0xac,
0xb6, 0x64, 0x2d, 0xc3, 0x89, 0xc3, 0xca, 0xd4, 0xb8, 0x20, 0xaa, 0x88,
0x30, 0x25, 0xc2, 0x75, 0xf7, 0x7e, 0x4b, 0xa7, 0x96, 0x43, 0xe7, 0xb2,
0x59, 0xe0, 0xa5, 0xc7, 0x4d, 0x0d, 0x43, 0x1f, 0x06, 0x56, 0x6c, 0x30,
0x6c, 0xd8, 0x72, 0x17, 0xd7, 0xff, 0xe1, 0xbf, 0xd0, 0xfd, 0xfb, 0xdf,
0xe3, 0xda, 0x5b, 0x36, 0x11, 0x95, 0x3c, 0xc0, 0x00, 0xd4, 0x80, 0xfb,
0x97, 0xcb, 0x0a, 0xcb, 0x46, 0x40, 0xe1, 0x69, 0x94, 0x5a, 0x10, 0xc1,
0x35, 0xb7, 0xdc, 0xc4, 0x9a, 0x9b, 0x1f, 0xc1, 0xfa, 0x1d, 0xc4, 0x95,
0x1b, 0xd9, 0xf8, 0xbb, 0x7d, 0xac, 0xd9, 0x54, 0xc0, 0xd8, 0x45, 0x75,
0xbb, 0x86, 0x0e, 0x7e, 0xb0, 0x2c, 0x7a, 0x97, 0x85, 0x40, 0xff, 0x13,
0xa6, 0x17, 0xd8, 0x0a, 0x70, 0x6d, 0x0f, 0x74, 0xdd, 0xf8, 0x30, 0xf9,
0x01, 0xe7, 0x33, 0x7d, 0xea, 0x75, 0x8e, 0xfc, 0xea, 0x51, 0x2a, 0xab,
0x2a, 0x94, 0x3a, 0x42, 0x30, 0xb9, 0x15, 0xfe, 0x73, 0xff, 0xe3, 0xf7,
0x2c, 0x87, 0x15, 0x96, 0x85, 0x80, 0x2a, 0xbb, 0x55, 0xa1, 0xdc, 0x05,
0x6b, 0x37, 0xff, 0x05, 0x61, 0x71, 0x33, 0xe0, 0xd3, 0xac, 0x1f, 0x67,
0x68, 0xe0, 0xbb, 0x38, 0xb1, 0x88, 0xad, 0xd1, 0xb5, 0xb1, 0x82, 0x35,
0x8b, 0x27, 0xf7, 0xd6, 0xe5, 0xd0, 0x7d, 0xd5, 0x04, 0xfa, 0x9f, 0x30,
0xbd, 0x28, 0xbd, 0x00, 0x1b, 0x7b, 0xaa, 0x14, 0x57, 0x7c, 0x89, 0x85,
0xdd, 0x1f, 0x3e, 0xf8, 0x14, 0x4a, 0x08, 0xb6, 0x00, 0xb6, 0x4a, 0xa5,
0xab, 0x83, 0xb8, 0x12, 0xa2, 0x18, 0x14, 0xb6, 0x8e, 0x0d, 0x8f, 0x5c,
0xad, 0xfa, 0xab, 0x27, 0xa0, 0xca, 0x6e, 0x51, 0x08, 0x4a, 0xd0, 0x75,
0xc3, 0x97, 0x30, 0x76, 0x05, 0xe0, 0x33, 0x31, 0xfc, 0xf7, 0x34, 0x67,
0x8f, 0x81, 0x09, 0xc0, 0xc6, 0xe0, 0x95, 0xc0, 0xab, 0xd1, 0xb9, 0xb6,
0x84, 0xb5, 0x1e, 0x28, 0xb5, 0x17, 0x9f, 0x7a, 0xb8, 0xe7, 0x6a, 0xdd,
0xe8, 0xaa, 0x08, 0xbc, 0xf4, 0x1d, 0xd3, 0xab, 0x4a, 0xaf, 0x2a, 0x74,
0xdf, 0xde, 0x41, 0x50, 0xde, 0x09, 0xf8, 0x88, 0x9b, 0x67, 0xfa, 0xd4,
0x01, 0x8c, 0xb5, 0x18, 0xeb, 0x61, 0xbd, 0x00, 0xeb, 0x17, 0xb0, 0x7e,
0x95, 0x55, 0x1b, 0x6a, 0x18, 0x7f, 0xd1, 0x8d, 0x6e, 0xbd, 0x2a, 0xf4,
0xfc, 0x86, 0xa9, 0x44, 0xff, 0x77, 0x4c, 0x2f, 0x50, 0x53, 0xe8, 0x41,
0x41, 0x94, 0x3b, 0x55, 0xc1, 0x0b, 0x61, 0xfd, 0xe6, 0x3f, 0xc6, 0x98,
0x15, 0x80, 0x63, 0x7e, 0x72, 0x3f, 0xe8, 0x0c, 0xc6, 0xab, 0x61, 0x14,
0x8c, 0xb5, 0x78, 0x9e, 0x8f, 0x31, 0x05, 0x82, 0x42, 0x99, 0x4a, 0x2d,
0xe6, 0x4c, 0xa3, 0x85, 0xa2, 0x3b, 0x9e, 0xfe, 0xab, 0x9d, 0x9d, 0x22,
0x3b, 0x07, 0x44, 0x98, 0xfa, 0xf3, 0xef, 0xea, 0x00, 0x40, 0xdf, 0x36,
0x73, 0x9e, 0xde, 0xcb, 0xdd, 0xdc, 0x97, 0xbd, 0xc8, 0x7e, 0xf6, 0xa8,
0xe9, 0x31, 0x86, 0x1d, 0xc0, 0x9d, 0xc6, 0xd0, 0xb3, 0xf0, 0xfe, 0xc2,
0x23, 0xaa, 0xf9, 0xd8, 0xd0, 0x03, 0x37, 0x7d, 0xee, 0x17, 0x18, 0x7b,
0x33, 0x2a, 0x67, 0x98, 0x18, 0xba, 0x9d, 0xb9, 0x69, 0x47, 0x63, 0xbe,
0x46, 0x96, 0xae, 0xc4, 0x8f, 0x56, 0xe2, 0x07, 0x45, 0xac, 0x51, 0xc8,
0x26, 0x38, 0x3d, 0x74, 0x94, 0x0f, 0xde, 0x18, 0x27, 0x4b, 0xb3, 0x0b,
0x53, 0x8d, 0x85, 0xbc, 0xe9, 0x4d, 0x11, 0x06, 0x44, 0x78, 0xde, 0x16,
0x57, 0x0f, 0xc5, 0xc5, 0x02, 0x23, 0x47, 0x8e, 0x5d, 0x94, 0xcc, 0x45,
0x2d, 0xf0, 0xe2, 0xb7, 0xcd, 0x0e, 0x63, 0xd8, 0x6d, 0xa0, 0xdb, 0x18,
0xc0, 0x80, 0x39, 0xe7, 0x39, 0x6d, 0xff, 0x51, 0xcd, 0xe7, 0x1b, 0x7b,
0xb6, 0x60, 0xec, 0x27, 0x01, 0x47, 0x96, 0xbc, 0x08, 0xcc, 0xe0, 0xf9,
0x05, 0x7c, 0x3f, 0x03, 0x4d, 0x30, 0xb4, 0x40, 0xbd, 0xfc, 0x08, 0x35,
0x96, 0x8e, 0xae, 0x02, 0x7e, 0x18, 0x21, 0x02, 0x9a, 0xb9, 0xb3, 0x0b,
0xe5, 0xd2, 0x83, 0xd2, 0x83, 0xb2, 0x1d, 0x78, 0x22, 0x9b, 0x1d, 0x1b,
0x98, 0x99, 0x61, 0x7f, 0x31, 0x66, 0xdf, 0xa7, 0xef, 0xbe, 0x7b, 0x2a,
0x8f, 0x99, 0x2f, 0x5f, 0xdc, 0x02, 0x7d, 0xdb, 0x0c, 0xb7, 0x6f, 0xe1,
0x39, 0x63, 0xd8, 0x6a, 0x4c, 0x5b, 0x9f, 0x81, 0x6a, 0x17, 0x94, 0x56,
0x40, 0x5c, 0x85, 0x4a, 0x17, 0xc4, 0xd5, 0xdf, 0xa3, 0xb2, 0xc6, 0x60,
0x3d, 0x83, 0xb1, 0x9d, 0x60, 0xfe, 0x12, 0x63, 0xff, 0x00, 0x48, 0x69,
0x4c, 0x7c, 0x86, 0x46, 0xfd, 0x20, 0x49, 0x23, 0xa6, 0xd5, 0x28, 0x92,
0x26, 0x1d, 0x60, 0x6b, 0x18, 0x53, 0xc0, 0x5a, 0x8b, 0x71, 0x4d, 0x34,
0x9d, 0x42, 0x9a, 0x93, 0x04, 0xd1, 0x6a, 0x20, 0x60, 0xae, 0x9e, 0x31,
0x3b, 0x7e, 0x8a, 0x99, 0xf1, 0x71, 0xea, 0xb3, 0x86, 0xb9, 0xa6, 0x61,
0x6e, 0xde, 0x30, 0xdf, 0x50, 0x44, 0x14, 0x27, 0x20, 0x4e, 0xa7, 0x44,
0x78, 0xf8, 0xde, 0x07, 0xbe, 0xfa, 0x64, 0xf7, 0xcd, 0x8f, 0x7d, 0x94,
0x40, 0xdf, 0x36, 0xc3, 0x6d, 0x9f, 0x60, 0xb7, 0x31, 0xf4, 0x59, 0x03,
0x61, 0xd1, 0xb0, 0xee, 0x63, 0xb0, 0xea, 0xba, 0xf5, 0x94, 0x57, 0x7f,
0x8e, 0xb0, 0x74, 0x07, 0x41, 0xe1, 0x0e, 0x8c, 0x5d, 0xd5, 0x36, 0x5c,
0x70, 0xc1, 0x48, 0x11, 0xf7, 0x1a, 0x8d, 0xf1, 0xcf, 0x92, 0xb4, 0x2c,
0x59, 0x2b, 0x20, 0x69, 0x46, 0x64, 0x69, 0x09, 0x91, 0x32, 0x86, 0x08,
0x55, 0x83, 0x91, 0x0c, 0x49, 0xe7, 0xd1, 0x64, 0x8e, 0x35, 0x9b, 0xef,
0xa7, 0xbc, 0xf6, 0x36, 0x20, 0x5d, 0x1c, 0x73, 0xa7, 0x8f, 0x30, 0x37,
0x71, 0x9c, 0xe9, 0x91, 0xc3, 0x8c, 0x0d, 0x1e, 0x64, 0x62, 0xbc, 0xce,
0xd0, 0xf1, 0x84, 0xc6, 0x7c, 0x86, 0x88, 0x22, 0xc2, 0xbe, 0x07, 0x9f,
0xd9, 0x73, 0xdf, 0x82, 0x15, 0xce, 0x23, 0xf0, 0xc9, 0x9b, 0x99, 0x34,
0x86, 0x5a, 0x47, 0x97, 0x65, 0xe3, 0x96, 0x2a, 0xab, 0x3f, 0xfe, 0x55,
0xca, 0x5d, 0x5b, 0x2f, 0x01, 0x38, 0x40, 0xb2, 0x97, 0xdb, 0x9f, 0x19,
0x54, 0x26, 0x49, 0xe7, 0x9f, 0x22, 0x6d, 0xfc, 0x02, 0xd7, 0x32, 0x64,
0xa9, 0x47, 0x96, 0x04, 0x64, 0x49, 0x84, 0x4a, 0x84, 0x48, 0x00, 0x62,
0xd0, 0xcc, 0x21, 0x59, 0x82, 0x24, 0x2d, 0xc2, 0xd2, 0xc7, 0x29, 0x76,
0x7d, 0x8a, 0xb8, 0xba, 0x11, 0x11, 0x87, 0x8a, 0x23, 0xaa, 0x74, 0x12,
0x57, 0x2b, 0x80, 0x03, 0xe0, 0xe4, 0x7b, 0xaf, 0xf2, 0xe1, 0xab, 0x3f,
0xe5, 0xad, 0x81, 0x31, 0x4e, 0x9d, 0x6a, 0xe1, 0x9c, 0x22, 0xca, 0x5d,
0x0f, 0x3d, 0x9b, 0xd7, 0x16, 0xfe, 0x02, 0x78, 0x00, 0x51, 0x6a, 0x06,
0xc3, 0xea, 0x6e, 0x8f, 0xb5, 0x37, 0x3f, 0x42, 0xb1, 0xf3, 0x53, 0x0b,
0x1e, 0x4f, 0xd6, 0x3a, 0x41, 0x63, 0xe6, 0x3f, 0xc8, 0x5a, 0xaf, 0x90,
0xb5, 0xfe, 0x0b, 0xeb, 0x4f, 0xe3, 0x07, 0x82, 0xb5, 0x8a, 0xb1, 0xed,
0x88, 0x16, 0x50, 0x97, 0xcf, 0x0d, 0x82, 0x25, 0xc3, 0x33, 0x8a, 0xe0,
0x40, 0x3d, 0xc4, 0x81, 0x3a, 0x41, 0x52, 0x87, 0x4b, 0x1d, 0x33, 0x27,
0xdf, 0x62, 0x62, 0xe8, 0x4d, 0x92, 0x96, 0x25, 0x49, 0x7c, 0x32, 0x17,
0xa3, 0xb6, 0x8c, 0x1f, 0x95, 0xe8, 0x58, 0xbb, 0x91, 0x4a, 0xd7, 0x1a,
0x3a, 0x56, 0xaf, 0xe1, 0xc6, 0xbb, 0xfe, 0x84, 0xb4, 0xf9, 0x7d, 0xc6,
0xc6, 0x53, 0xd4, 0x39, 0x54, 0xb9, 0x13, 0x38, 0x4b, 0x00, 0x60, 0xc5,
0xda, 0xd5, 0xa8, 0x8e, 0xe5, 0xc1, 0x89, 0x47, 0xb1, 0x73, 0x0b, 0xa0,
0xb8, 0x6c, 0x96, 0x93, 0x87, 0xbe, 0xc7, 0xcc, 0xe9, 0x7f, 0xc3, 0xf3,
0x1c, 0x9e, 0x9f, 0xe1, 0x05, 0x42, 0x10, 0x14, 0xf1, 0xc3, 0x0c, 0x3f,
0x70, 0x58, 0xcf, 0x61, 0x8d, 0x00, 0x8a, 0x3a, 0xcd, 0x81, 0x8a, 0x82,
0x3a, 0x0c, 0x8a, 0xc1, 0x61, 0xc4, 0xa2, 0x19, 0x48, 0x0a, 0x59, 0x0a,
0x69, 0x4b, 0x49, 0x5b, 0x96, 0x24, 0xf5, 0xc8, 0x5c, 0x80, 0xd3, 0x18,
0xf5, 0x8b, 0x78, 0x51, 0x95, 0xa0, 0x58, 0x21, 0x73, 0x4a, 0x7d, 0x62,
0x9c, 0xb9, 0x89, 0x13, 0x68, 0x6b, 0x9a, 0x20, 0x0c, 0xf2, 0x80, 0xcc,
0xf7, 0x73, 0x31, 0x15, 0x5f, 0x24, 0xe0, 0xf9, 0x1e, 0x22, 0xf4, 0x1b,
0x43, 0x6f, 0x7d, 0x12, 0x26, 0x86, 0x5e, 0x60, 0x65, 0xf7, 0x17, 0x18,
0x7a, 0xe3, 0x51, 0x66, 0xa7, 0x0f, 0x61, 0x6d, 0x8d, 0xcc, 0x09, 0x5e,
0x96, 0x61, 0xb3, 0x94, 0x2c, 0x4b, 0x08, 0xb2, 0x84, 0x20, 0x4c, 0xf0,
0x83, 0x04, 0xcf, 0x66, 0x18, 0xe3, 0x40, 0x04, 0x71, 0x8a, 0x66, 0x8a,
0x4a, 0x7b, 0x64, 0xe0, 0x32, 0x90, 0xcc, 0x90, 0x25, 0x96, 0xac, 0x69,
0x48, 0x5a, 0x3e, 0x69, 0x16, 0x90, 0xba, 0x08, 0x31, 0x05, 0x4c, 0x5c,
0x24, 0x08, 0x2b, 0x84, 0x85, 0x32, 0x51, 0xa9, 0x4c, 0x18, 0x85, 0x18,
0x23, 0x90, 0x29, 0xae, 0xe5, 0x98, 0x98, 0x4c, 0xf3, 0x75, 0x73, 0x03,
0xf7, 0x9f, 0x47, 0xa0, 0xef, 0x80, 0xb2, 0xf7, 0x81, 0x6e, 0x44, 0x19,
0x30, 0x68, 0xef, 0xe8, 0xa0, 0xa3, 0x58, 0xdd, 0x4b, 0xd2, 0xac, 0x33,
0x37, 0x7d, 0x14, 0x6b, 0x2b, 0x60, 0x7d, 0x30, 0x06, 0x51, 0x87, 0xba,
0x14, 0x68, 0x81, 0xce, 0x63, 0xb4, 0x01, 0xda, 0x00, 0xaf, 0x99, 0x9f,
0xf3, 0xaa, 0xb9, 0x22, 0x07, 0x92, 0x81, 0x64, 0xb9, 0x45, 0x24, 0x03,
0x97, 0x1a, 0xb2, 0xd4, 0xd0, 0x4a, 0x03, 0xd2, 0x2c, 0x22, 0xd3, 0x02,
0xf8, 0x45, 0xac, 0x57, 0xc6, 0x0f, 0xcb, 0x84, 0xc5, 0x32, 0x61, 0xa1,
0x48, 0x10, 0x45, 0x58, 0x0b, 0xb8, 0x26, 0xce, 0x35, 0x69, 0xd6, 0xa7,
0x79, 0xf7, 0xdd, 0x79, 0x44, 0x04, 0x55, 0x86, 0xfa, 0x0e, 0xec, 0x79,
0xf3, 0x23, 0x16, 0x18, 0x39, 0x72, 0x8c, 0xea, 0x0d, 0x3c, 0x6f, 0x0c,
0xbb, 0x92, 0x24, 0xe3, 0xe8, 0xaf, 0xe7, 0x51, 0xfe, 0x09, 0xbf, 0xb8,
0x0a, 0xf1, 0x3c, 0xac, 0x57, 0xc0, 0xd8, 0x00, 0x63, 0x0d, 0x18, 0x87,
0xd1, 0x26, 0x4a, 0x84, 0x53, 0x1f, 0x9b, 0x81, 0xa8, 0x03, 0xe3, 0x00,
0x87, 0x64, 0x2c, 0x12, 0x50, 0x77, 0x76, 0xee, 0x32, 0x43, 0x9a, 0x7a,
0x64, 0x59, 0x80, 0xd3, 0x22, 0x78, 0x15, 0xbc, 0xa0, 0x42, 0x10, 0x57,
0x09, 0x0a, 0x25, 0xc2, 0x28, 0xc6, 0x0f, 0x03, 0xac, 0x69, 0x83, 0x6f,
0x4d, 0x31, 0x3b, 0x3e, 0xc2, 0x6b, 0xaf, 0x9e, 0x66, 0x7e, 0xae, 0x85,
0x88, 0x02, 0xec, 0xe2, 0x1c, 0x39, 0x2f, 0x17, 0x8a, 0x37, 0x7c, 0xf6,
0xe7, 0xaa, 0xf4, 0x8b, 0x53, 0x1a, 0xb3, 0x2d, 0x8e, 0x0c, 0x4c, 0xd3,
0x9c, 0x99, 0x20, 0xb0, 0x33, 0x58, 0x93, 0x60, 0x3d, 0x8b, 0x17, 0xc4,
0x04, 0x61, 0x11, 0x3f, 0x2c, 0xe3, 0x79, 0x65, 0xac, 0x29, 0xe6, 0xa7,
0x8c, 0xf3, 0x11, 0x67, 0x91, 0xd4, 0x22, 0x69, 0x7b, 0xf7, 0xdd, 0x39,
0xa3, 0x4d, 0x40, 0x9c, 0x87, 0x12, 0x83, 0x57, 0xc4, 0x8f, 0xaa, 0x44,
0xa5, 0x1a, 0x51, 0xa9, 0x42, 0x5c, 0x2c, 0x11, 0x44, 0x21, 0x16, 0x87,
0xa6, 0x75, 0xd2, 0xfa, 0x28, 0xe3, 0xc7, 0x86, 0xf8, 0xef, 0x97, 0x47,
0x99, 0x3c, 0x3d, 0x87, 0x73, 0x02, 0xca, 0xbe, 0xdd, 0x3f, 0xd9, 0xf3,
0xc2, 0x45, 0x09, 0xf4, 0x1d, 0x50, 0xd2, 0x56, 0x82, 0x08, 0xbb, 0x54,
0x99, 0x12, 0xa7, 0x34, 0x1b, 0x4d, 0x0e, 0xbf, 0x71, 0x86, 0x13, 0xef,
0x9e, 0x80, 0xd6, 0x28, 0x56, 0xcf, 0x60, 0x69, 0x60, 0x11, 0xac, 0x35,
0x58, 0x6b, 0x81, 0xbc, 0x54, 0x54, 0x97, 0x03, 0x77, 0xa9, 0xb6, 0x5d,
0xe7, 0x82, 0x21, 0x06, 0x71, 0x06, 0x55, 0x0f, 0x8c, 0x8f, 0xf5, 0x22,
0xfc, 0x30, 0x26, 0x88, 0x63, 0xc2, 0x28, 0xc4, 0xb3, 0x8a, 0x71, 0xf3,
0xb8, 0xb9, 0x31, 0xe6, 0x4e, 0x1d, 0xe1, 0x9d, 0x57, 0x07, 0x79, 0xe5,
0x97, 0xa3, 0xd4, 0xa7, 0xe7, 0x70, 0xb9, 0xeb, 0x0c, 0xe8, 0xe2, 0xee,
0x5f, 0xe2, 0x26, 0x06, 0x78, 0xe7, 0x97, 0x3b, 0x19, 0x78, 0x6e, 0xef,
0x76, 0x0c, 0xfb, 0x16, 0x52, 0x2a, 0xeb, 0x79, 0x78, 0x61, 0xc4, 0x9a,
0xee, 0x2a, 0x6b, 0xaf, 0x5b, 0x49, 0x50, 0xac, 0x60, 0x6c, 0x88, 0x41,
0x30, 0xcc, 0x62, 0x64, 0x1a, 0x64, 0x06, 0x5c, 0x03, 0x95, 0x16, 0xe2,
0xa4, 0x1d, 0xc0, 0x67, 0x5d, 0x28, 0x4b, 0x0c, 0x49, 0xe2, 0x93, 0x64,
0x25, 0x9c, 0x56, 0xc0, 0xef, 0x24, 0x2a, 0xad, 0x24, 0x88, 0x8b, 0x78,
0x56, 0x21, 0x6b, 0xd0, 0xaa, 0x4f, 0x72, 0xec, 0xc8, 0x38, 0xc7, 0x8e,
0x4c, 0xd1, 0x6a, 0x34, 0x49, 0x33, 0x97, 0x5b, 0x4f, 0x19, 0x50, 0xa1,
0xf7, 0xa1, 0x9f, 0xec, 0x99, 0x3e, 0x17, 0xfc, 0x45, 0x09, 0x00, 0xf4,
0xff, 0xc3, 0xe7, 0xf9, 0xf0, 0x57, 0xff, 0x7c, 0x4f, 0x9b, 0x44, 0x8d,
0x73, 0x89, 0x04, 0x31, 0xab, 0xae, 0x29, 0xb2, 0x62, 0x5d, 0x99, 0xda,
0x9a, 0x02, 0x46, 0x53, 0x54, 0xe6, 0x40, 0xe6, 0x91, 0xb4, 0x89, 0xb8,
0x0c, 0x75, 0x9a, 0x27, 0x7c, 0x92, 0xe7, 0x38, 0x2a, 0x8a, 0x4b, 0x21,
0x4d, 0x7c, 0x52, 0x57, 0x44, 0x4c, 0x15, 0xbc, 0x0e, 0x82, 0x62, 0x27,
0x81, 0xef, 0x31, 0x73, 0x66, 0x92, 0xb1, 0x91, 0xd3, 0x8c, 0x0c, 0xcf,
0xd0, 0x9c, 0x6f, 0x90, 0x26, 0x59, 0x7e, 0xad, 0xe4, 0x7d, 0xa5, 0x01,
0x11, 0x7a, 0x1f, 0x7a, 0xf6, 0xa3, 0xe0, 0x2f, 0x49, 0x20, 0x97, 0xbd,
0xfc, 0xe0, 0x6f, 0x76, 0x6e, 0x32, 0xb0, 0x0f, 0xf2, 0x8a, 0x0b, 0x03,
0x28, 0x58, 0xcf, 0xa7, 0x63, 0x75, 0x89, 0x2d, 0x77, 0x74, 0x21, 0xd9,
0x2c, 0x92, 0xb5, 0x70, 0x2e, 0xc5, 0xa5, 0x0e, 0x97, 0x29, 0x22, 0x06,
0xd4, 0xe4, 0x97, 0x99, 0x51, 0x10, 0x87, 0x3a, 0x21, 0x4d, 0x3c, 0x32,
0x57, 0x40, 0x28, 0x83, 0x5f, 0xc5, 0x8b, 0xaa, 0xf8, 0x1e, 0x1c, 0x7a,
0x67, 0x94, 0x91, 0xe3, 0x63, 0xb4, 0x9a, 0xad, 0x45, 0xe0, 0xed, 0xd7,
0x7d, 0xa2, 0xec, 0xfa, 0xda, 0x8f, 0x2f, 0x0e, 0x7e, 0x09, 0x02, 0x67,
0x89, 0xec, 0xff, 0xeb, 0x9d, 0x77, 0x02, 0x3b, 0xc8, 0xeb, 0xd8, 0x9a,
0xb1, 0x96, 0x5b, 0xee, 0xd8, 0xc4, 0xad, 0x77, 0xef, 0x65, 0x76, 0xec,
0x65, 0xce, 0x1c, 0xfd, 0x47, 0x66, 0x27, 0x0e, 0x93, 0x65, 0x16, 0x27,
0x3e, 0xe0, 0x61, 0x8c, 0xc5, 0x1a, 0xc1, 0x23, 0xc3, 0x68, 0x0a, 0x2e,
0x25, 0x4d, 0xc0, 0xb9, 0x10, 0x67, 0x4a, 0x60, 0x2b, 0xd8, 0xb0, 0x8c,
0xef, 0x5b, 0x26, 0xc7, 0x4e, 0xf3, 0xf6, 0xc0, 0x79, 0x04, 0x86, 0x44,
0xd9, 0xf5, 0xe0, 0x8f, 0xf6, 0xbc, 0x70, 0x29, 0xe0, 0x8b, 0x5e, 0xb1,
0x04, 0x7a, 0xe0, 0xcb, 0x6c, 0x7f, 0x4c, 0x7f, 0xbe, 0xfd, 0xb1, 0x3d,
0xf7, 0x2d, 0xe4, 0xec, 0xd6, 0x28, 0x9b, 0xb6, 0x7c, 0x1e, 0xeb, 0xc7,
0x54, 0xd7, 0xdf, 0x45, 0xd2, 0xc8, 0x68, 0x36, 0x3c, 0x9a, 0xad, 0x98,
0x56, 0x52, 0x26, 0x75, 0x1d, 0x08, 0x1d, 0x28, 0x55, 0x44, 0x4b, 0x88,
0x44, 0x88, 0xf8, 0xed, 0x98, 0x10, 0x34, 0x75, 0x48, 0x96, 0xe6, 0x43,
0xa0, 0x5a, 0x0d, 0x09, 0xa3, 0x76, 0x4e, 0x95, 0x5f, 0x25, 0x4f, 0x5e,
0x09, 0xf8, 0x2b, 0x24, 0x90, 0xcb, 0xf7, 0x77, 0xed, 0xec, 0x51, 0xa5,
0x26, 0x02, 0x6b, 0xaf, 0x29, 0xd1, 0xb1, 0xf1, 0x8f, 0x80, 0x94, 0xfa,
0xd8, 0x6b, 0x4c, 0x9e, 0x3c, 0x46, 0xab, 0x15, 0x93, 0xb9, 0x0a, 0x6a,
0x6b, 0xd8, 0x70, 0x25, 0x26, 0x5c, 0x85, 0x09, 0x3a, 0x51, 0xaf, 0x8c,
0x52, 0x40, 0x24, 0x40, 0xc5, 0xe6, 0x97, 0x9c, 0x38, 0x54, 0x04, 0x11,
0x87, 0x13, 0x30, 0x7e, 0xcc, 0xda, 0x75, 0x05, 0x8c, 0xf5, 0xf2, 0xb0,
0x51, 0x7a, 0xaf, 0xb4, 0x6f, 0x74, 0xc5, 0x04, 0x44, 0xd9, 0xee, 0xda,
0xcd, 0xda, 0x1b, 0x6e, 0xfb, 0x0c, 0x5e, 0x10, 0x03, 0x29, 0xc7, 0x5f,
0x7f, 0x86, 0x24, 0x29, 0x90, 0x69, 0x19, 0xfc, 0x1a, 0x61, 0x61, 0x15,
0x61, 0x69, 0x25, 0x51, 0xb1, 0x13, 0x2f, 0xac, 0x62, 0xfd, 0x12, 0x98,
0x18, 0xd5, 0x10, 0xc9, 0xbc, 0xfc, 0x52, 0x13, 0x45, 0x55, 0x72, 0x5f,
0xc7, 0x82, 0x5f, 0x64, 0xdd, 0xfa, 0x2a, 0x36, 0x08, 0xd0, 0x5c, 0xc7,
0xd6, 0x1f, 0x7c, 0xe3, 0xf1, 0xda, 0x95, 0x14, 0xfc, 0x4b, 0xd6, 0xc4,
0x0b, 0x99, 0xea, 0xfa, 0xd5, 0x79, 0x1f, 0xa7, 0x56, 0x83, 0x6b, 0x7a,
0xee, 0x05, 0x52, 0xa6, 0x47, 0xdf, 0xe5, 0xf4, 0x87, 0xc7, 0x50, 0xaf,
0x8a, 0x17, 0xd6, 0x08, 0x8b, 0x9d, 0x44, 0xe5, 0x6a, 0x9e, 0xc7, 0x68,
0x4a, 0x26, 0x09, 0x99, 0x5a, 0x54, 0xfd, 0xdc, 0x02, 0x78, 0x08, 0x20,
0x6a, 0x40, 0x0c, 0xa8, 0x45, 0xf1, 0xc0, 0x8b, 0x89, 0xca, 0x55, 0xd6,
0xad, 0x9b, 0x66, 0x68, 0x30, 0x41, 0x33, 0x87, 0x2a, 0xf7, 0x00, 0xfb,
0x97, 0xc2, 0x77, 0x59, 0x0b, 0x2c, 0x80, 0x5f, 0xbb, 0x8a, 0x1e, 0x11,
0xba, 0x45, 0x0d, 0x37, 0xf6, 0x6c, 0x21, 0x2c, 0x77, 0x02, 0x29, 0xc3,
0x6f, 0xff, 0x3b, 0xea, 0xd5, 0xf0, 0xe3, 0x95, 0xc4, 0xa5, 0x95, 0x14,
0x2a, 0x9d, 0xc4, 0xa5, 0x0a, 0x41, 0x14, 0x63, 0x8d, 0xa3, 0x7e, 0x66,
0x8a, 0x99, 0x89, 0x59, 0x54, 0x04, 0x35, 0x1e, 0x6a, 0x02, 0xc4, 0x84,
0x28, 0xf9, 0xab, 0xf1, 0x42, 0x8c, 0x1f, 0x63, 0xc3, 0x02, 0x36, 0xaa,
0x71, 0xed, 0xa6, 0x1a, 0xd6, 0x0f, 0x16, 0xe2, 0x60, 0xc7, 0x52, 0xe0,
0x97, 0x24, 0x00, 0x50, 0xeb, 0x5a, 0x89, 0x28, 0x77, 0x8a, 0x42, 0x18,
0x5a, 0xd6, 0x6f, 0xee, 0x05, 0x32, 0x9a, 0xf5, 0x71, 0x26, 0x46, 0x86,
0x09, 0x8a, 0xab, 0x88, 0x2b, 0x2b, 0x28, 0x54, 0x6b, 0xc4, 0xa5, 0x12,
0x41, 0xe0, 0x63, 0x24, 0x25, 0x9d, 0x3d, 0xcd, 0xd1, 0xf7, 0x47, 0x38,
0xfc, 0xde, 0x38, 0x59, 0xd2, 0xc8, 0x41, 0x99, 0x30, 0xef, 0x11, 0xf9,
0x05, 0x4c, 0x50, 0xc0, 0x86, 0x05, 0xbc, 0xa8, 0x80, 0x1f, 0x16, 0xf0,
0xe2, 0x0a, 0xd5, 0x95, 0x35, 0xaa, 0x1d, 0x31, 0xed, 0x26, 0x70, 0x6f,
0xdf, 0xb6, 0x9d, 0xdd, 0x57, 0x4d, 0x20, 0x88, 0x42, 0x44, 0xd8, 0x21,
0x6a, 0x58, 0xb7, 0xa1, 0x83, 0x35, 0x37, 0x7d, 0x1a, 0x48, 0x19, 0x79,
0xff, 0x15, 0xa2, 0xca, 0x2a, 0x0a, 0xd5, 0x1c, 0x7c, 0x54, 0x28, 0xe2,
0xf9, 0x1e, 0x2a, 0x4d, 0xd2, 0xfa, 0x28, 0x47, 0xdf, 0x1b, 0x66, 0xe2,
0xd4, 0x19, 0x66, 0xa6, 0xea, 0x0c, 0x1e, 0xaa, 0x83, 0x24, 0xa8, 0xf1,
0xc0, 0x8b, 0x30, 0x7e, 0x11, 0x2f, 0x28, 0x12, 0x44, 0x25, 0xc2, 0xb8,
0x44, 0x10, 0x17, 0x09, 0x0b, 0x45, 0xfc, 0x42, 0x95, 0xeb, 0xae, 0x2f,
0xe1, 0xf9, 0xde, 0x82, 0xfa, 0x7b, 0xae, 0x9a, 0x80, 0xab, 0x8f, 0xd6,
0x44, 0xe8, 0x51, 0x2c, 0xeb, 0xae, 0xeb, 0x06, 0x32, 0x20, 0x63, 0xf2,
0xe4, 0x71, 0xe2, 0x4a, 0x07, 0x85, 0x72, 0x89, 0x30, 0x8e, 0xf0, 0x3c,
0x20, 0x9d, 0x23, 0x9d, 0x3a, 0xc1, 0xe1, 0x5f, 0x0f, 0x72, 0xf4, 0x83,
0x31, 0x92, 0x66, 0x42, 0x9a, 0xa4, 0x8c, 0x8c, 0xce, 0x33, 0x38, 0x38,
0x8f, 0xc5, 0x61, 0xfd, 0x00, 0x2f, 0x88, 0xf0, 0xa3, 0x02, 0x7e, 0x5c,
0x20, 0x88, 0x22, 0xbc, 0x30, 0xc0, 0x7a, 0x7e, 0x7e, 0xcb, 0x77, 0x15,
0xb0, 0xde, 0x22, 0x81, 0x25, 0xfb, 0xa7, 0x4b, 0x12, 0x58, 0x70, 0x1f,
0x55, 0x43, 0x10, 0x7a, 0x40, 0x4a, 0xfd, 0xf4, 0x30, 0x7e, 0xe0, 0x11,
0xc6, 0x21, 0x7e, 0xe0, 0x61, 0x48, 0x71, 0xad, 0x19, 0x92, 0xa9, 0x61,
0x0e, 0xbd, 0x35, 0xc8, 0xe0, 0xfb, 0xa7, 0x68, 0x36, 0x9a, 0x38, 0xd1,
0x29, 0x11, 0x48, 0x93, 0x8c, 0xe1, 0xe1, 0x06, 0x47, 0x8e, 0xcc, 0xe1,
0xd1, 0xc2, 0xf7, 0x0d, 0x41, 0xe8, 0xe3, 0x07, 0x7e, 0x9e, 0x14, 0xa2,
0xa0, 0x19, 0xa0, 0xc4, 0xe1, 0x79, 0x4d, 0xad, 0xde, 0xbe, 0x6d, 0xa6,
0x76, 0x71, 0x64, 0xb9, 0x2c, 0x79, 0x0a, 0x89, 0x2c, 0xa4, 0x11, 0xca,
0xdc, 0xf4, 0x19, 0x40, 0x98, 0x3e, 0x39, 0x84, 0x67, 0x05, 0xab, 0x09,
0x9a, 0x26, 0x48, 0x3a, 0x47, 0x52, 0x1f, 0xe7, 0xe0, 0xdb, 0x27, 0x19,
0x1d, 0x9e, 0x22, 0x6d, 0x25, 0x0b, 0x95, 0xd3, 0x80, 0xb6, 0x1b, 0xbf,
0x59, 0xe6, 0x38, 0x76, 0x7c, 0x9e, 0x46, 0x0b, 0x36, 0x7f, 0xc2, 0x62,
0xc2, 0x00, 0xe3, 0x42, 0x70, 0x16, 0xc1, 0xa2, 0xae, 0x85, 0x24, 0x73,
0x34, 0xe6, 0x9b, 0xa8, 0xc8, 0xb9, 0x10, 0xee, 0x04, 0x5e, 0xe0, 0x12,
0xb2, 0x34, 0x01, 0xcd, 0x3b, 0x72, 0x2a, 0xca, 0x89, 0xa3, 0x27, 0xa9,
0x9f, 0x3a, 0x46, 0xe3, 0xcc, 0x87, 0x68, 0x73, 0x92, 0x2c, 0x31, 0xe0,
0x1a, 0x9c, 0x3e, 0x39, 0xc5, 0x7b, 0x07, 0x27, 0x99, 0xad, 0xcf, 0x23,
0x79, 0xd1, 0xbd, 0xd0, 0xbd, 0xdb, 0xa7, 0xca, 0x90, 0x2a, 0x3b, 0x54,
0x41, 0xc5, 0x31, 0x3a, 0x32, 0xc7, 0xd4, 0xb4, 0xe3, 0xa6, 0x9b, 0x12,
0xae, 0xd9, 0xd4, 0x80, 0xb4, 0x82, 0xe7, 0xf9, 0xa0, 0x29, 0xae, 0x31,
0xc9, 0xa9, 0xd1, 0x3a, 0xce, 0xb9, 0x73, 0x21, 0xf4, 0x5c, 0x1d, 0x01,
0x69, 0x67, 0xa3, 0x22, 0x0c, 0x1e, 0x69, 0x12, 0xfc, 0x70, 0x2f, 0x9d,
0x9d, 0x05, 0x9c, 0xcb, 0x98, 0x9f, 0xcf, 0x18, 0x1e, 0x6e, 0x32, 0x33,
0xd3, 0xc2, 0xa5, 0xe9, 0x42, 0xc5, 0xb4, 0x08, 0xfe, 0x81, 0x1f, 0xee,
0xd9, 0xff, 0xcd, 0x2f, 0xee, 0x7c, 0x5e, 0xa1, 0x47, 0x95, 0x1e, 0x55,
0x40, 0x85, 0xd9, 0x99, 0x06, 0xaf, 0xbf, 0x96, 0x32, 0x38, 0x38, 0xcb,
0xf5, 0xd7, 0x17, 0xa8, 0x56, 0x02, 0x54, 0x84, 0xa9, 0xa9, 0xf9, 0xc5,
0xd2, 0xf1, 0x02, 0x02, 0x97, 0x94, 0x25, 0x93, 0xb9, 0x6f, 0xff, 0x99,
0x79, 0x8e, 0x76, 0x30, 0x19, 0x63, 0xf2, 0x46, 0xad, 0xef, 0x63, 0x0c,
0x88, 0x08, 0x2e, 0x73, 0x88, 0x3b, 0xab, 0xb0, 0xdd, 0x25, 0xdc, 0xf7,
0xe0, 0x8f, 0xce, 0x36, 0x9f, 0xbe, 0x7e, 0xaf, 0xe9, 0x00, 0xfa, 0x17,
0x49, 0xb4, 0xc5, 0x5a, 0x8b, 0x17, 0xf8, 0x58, 0x6b, 0x51, 0x55, 0xc4,
0x39, 0x5c, 0xe6, 0xb8, 0x00, 0xd3, 0x8e, 0xbe, 0x03, 0x7a, 0xc9, 0x0b,
0x6d, 0x49, 0x02, 0x7f, 0xf7, 0xa7, 0xe6, 0x56, 0xa0, 0xff, 0xdc, 0xba,
0x40, 0x2f, 0x98, 0xe8, 0xd9, 0xf9, 0x90, 0xc2, 0xae, 0xbf, 0x7d, 0x46,
0x2f, 0x6a, 0xf2, 0xbe, 0x6d, 0x66, 0x37, 0x79, 0x55, 0x75, 0xd9, 0xc0,
0x3c, 0x47, 0xfa, 0xfb, 0x0e, 0xe8, 0x5d, 0x97, 0xfb, 0x87, 0x2b, 0xfa,
0x9a, 0xf5, 0x9b, 0x5f, 0x34, 0xb7, 0x02, 0x7d, 0x5c, 0x70, 0xac, 0xb5,
0x81, 0x4f, 0x01, 0xfd, 0x0a, 0xcf, 0x7f, 0xed, 0xc7, 0x97, 0xde, 0xa9,
0x05, 0xe9, 0xdb, 0x66, 0x3a, 0xc8, 0x53, 0xf3, 0x1d, 0x5c, 0xde, 0x3d,
0x9e, 0xec, 0x3b, 0xa0, 0x5f, 0x59, 0x6a, 0xbd, 0xdf, 0xe8, 0x7b, 0xe2,
0x6f, 0xe4, 0xae, 0x90, 0x07, 0x75, 0xfe, 0xd6, 0xd4, 0x43, 0xcf, 0xea,
0x9b, 0x97, 0x79, 0xe4, 0xb2, 0xd2, 0xb7, 0xcd, 0x6c, 0x6a, 0xaf, 0x77,
0x2e, 0x91, 0x01, 0xf2, 0x9d, 0x9f, 0xbe, 0x92, 0x35, 0x96, 0xfd, 0xa7,
0x06, 0xff, 0xd7, 0xf2, 0x5b, 0xff, 0x6b, 0x95, 0xff, 0x01, 0x3a, 0xbb,
0x29, 0xfe, 0x9c, 0xd4, 0x1a, 0x60, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
@@ -1,202 +0,0 @@
/* XPM */
static const char *toolbar_browse_xpm[] = {
/* columns rows colors chars-per-pixel */
"48 48 148 2",
" c #14100F",
". c #161211",
"X c #191614",
"o c #1C1816",
"O c #1E1C1B",
"+ c #24211F",
"@ c #252322",
"# c #292524",
"$ c #242628",
"% c #272829",
"& c #2C2D2D",
"* c #323233",
"= c #3C3E3F",
"- c #3D3F40",
"; c #414345",
": c #4A4D4F",
"> c #4B4E50",
", c #4E5153",
"< c #505456",
"1 c #50585D",
"2 c #425C69",
"3 c #4A626E",
"4 c #54636B",
"5 c #5E656A",
"6 c #4D6672",
"7 c #4F6A77",
"8 c #516A76",
"9 c #546D7B",
"0 c #596D79",
"q c #5D727D",
"w c #6A6C6E",
"e c #656E73",
"r c #6F7274",
"t c #61727C",
"y c #5D7684",
"u c #5D7E90",
"i c #617783",
"p c #617986",
"a c #647C89",
"s c #67808D",
"d c #6C828E",
"f c #738087",
"g c #778288",
"h c #628294",
"j c #698594",
"k c #6D8897",
"l c #678799",
"z c #6C8B9D",
"x c #728691",
"c c #758995",
"v c #7A8C95",
"b c #738C9A",
"n c #798E9B",
"m c #75909F",
"M c #7B909C",
"N c #6F8FA0",
"B c #708FA0",
"V c #7492A4",
"C c #7A95A6",
"Z c #7997A9",
"A c #7D9AAA",
"S c #869094",
"D c #84949D",
"F c #89969F",
"G c #8597A1",
"H c #8798A2",
"J c #8C9BA5",
"K c #829DAC",
"L c #8B9EAA",
"P c #939EA5",
"I c #839FB0",
"U c #8EA1AC",
"Y c #91A2AD",
"T c #9BA6AC",
"R c #85A1B3",
"E c #8AA4B4",
"W c #8EA8B8",
"Q c #93A5B1",
"! c #96A8B3",
"~ c #9BAAB2",
"^ c #94ACBC",
"/ c #9DAFBB",
"( c #9CB0BD",
") c #A2AEB4",
"_ c #A0AFB8",
"` c #A7B2B7",
"' c #ADB1B3",
"] c #A4B3BC",
"[ c #AAB5BC",
"{ c #AEB9BF",
"} c #B0B9BF",
"| c #BDBEBF",
" . c #9DB3C2",
".. c #A2B6C4",
"X. c #A3B9C7",
"o. c #ACBAC2",
"O. c #A6BBC9",
"+. c #AABECB",
"@. c #B3BDC3",
"#. c #B1BFC8",
"$. c #AEC2CE",
"%. c #B6C0C6",
"&. c #B9C2C6",
"*. c #B4C2CC",
"=. c #BDC5CB",
"-. c #BEC8CE",
";. c #AEC2D0",
":. c #B2C5D1",
">. c #B9C7D0",
",. c #B5C8D3",
"<. c #BBCBD5",
"1. c #B7CBD9",
"2. c #BECED8",
"3. c #C1C3C5",
"4. c #C0C7CB",
"5. c #C2CACE",
"6. c #C4CDD2",
"7. c #C8CFD3",
"8. c #C0CFD9",
"9. c #C5D1D7",
"0. c #CCD2D6",
"q. c #C4D2DB",
"w. c #CBD6DD",
"e. c #CED8DF",
"r. c #D1D6D9",
"t. c #D4D9DD",
"y. c #D8DCDF",
"u. c #C5D6E1",
"i. c #CBD7E0",
"p. c #CDD9E1",
"a. c #D3DDE3",
"s. c #DADFE2",
"d. c #D6E0E7",
"f. c #DCE2E6",
"g. c #D5E1E9",
"h. c #DBE4E9",
"j. c #E1E4E6",
"k. c #E1E6EA",
"l. c #E4E9ED",
"z. c #E9ECEE",
"x. c #E6ECF1",
"c. c #EAEEF1",
"v. c #EDF1F4",
"b. c #F2F4F6",
"n. c #F5F7F8",
"m. c #F7F8FA",
"M. c #FBFCFC",
"N. c None",
/* pixels */
"N.N.N.N.N.N.N.N.N.N.N.N.N.N.` @.&.=.5.7.5.4.=.@.[ N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.N.N.N.N.N.` 7.f.k.k.j.s.r.0.6.5.5.5.6.7.0.y.j.k.k.f.0.} N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.N.N.} f.l.t.5.{ [ [ { %.=.5.6.6.-.*.*.o.[ _ ~ T ~ ` &.r.k.j.&.N.N.N.N.N.N.N.N.N.N.N.N.N.N.",
"[email protected].) @.6.f.x.n.M.M.m.n.v.c.x.h.d.a.p.i.q.<.:.O.( Q U ) 0.b.5.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.7.b.[ ] 9.h.x.c.v.b.n.M.M.n.v.v.l.k.h.a.a.p.w.q.<.,.:.;.$.O.( L T z.s.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.M.@.>.d.d.h.k.l.c.v.n.M.M.n.v.v.l.k.h.a.a.p.w.q.<.,.:.$.+.O.X.X.^ Q m.N.N.N.N.N.N.N.N.N.N.N.",
"N.>.M.a.w.p.a.h.k.l.c.v.b.n.n.b.v.c.l.k.h.a.a.w.q.8.<.,.$.$.+.O.X. .^ ..m.x.N.N.N.N.N.N.N.N.N.N.",
"N.N.8.M.h.i.a.d.h.l.z.c.v.v.v.v.v.x.l.h.d.a.p.w.q.2.<.,.$.$.+.O. .( +.c.v.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.u +.n.m.l.d.d.h.l.l.c.v.v.c.c.x.l.h.d.a.p.i.q.2.,.:.+.O.X.O.:.d.M.l.+.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.u u V $.k.m.m.b.c.x.l.l.c.l.a.9.6.6.6.-.=.*.<.2.<.<.2.i.h.v.m.c.w.+.X.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h h h B E *.a.z.b.M.M.f.6.7.0.5.=.=.4.7.0.5.6.l.M.M.M.b.l.a.q.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z z N B Z K ^ .%.r.6.@[email protected].&.@.&.0.0.y.b.x.h.d.a.w.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z B V Z A I K ] r.@.%.k.M.M.M.M.M.M.m.a.{ =.0.6.x.l.h.a.w.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z B V Z A Z [ t.[ t.M.M.M.M.M.M.M.M.M.M.m.-.{ r.5.l.h.a.w.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z B V Z Z ! y.[ [email protected].<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.h l l B V Z C [email protected].@.=.6.e.a.w.<.:.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.N.b A V V V o.7.-.f.M.M.M.M.M.M.M.M.M.M.M.M.M.M.n.t.[ 0.-.h.g.*.N.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.[ b.0.c h b [email protected].&.=.T 5.b.%.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.5.n.T q 6 2 v [email protected] 8 F z.y.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.M.Y 8 9 9 7 ) 6.w.f.k.b.n.m.M.M.M.M.M.M.m.m.n.b.b.l.a.a.#.0.x 8 8 v m.N.N.N.N.N.N.N.N.N.N.N.",
"N.6.M.J y d d a @.=.s.j.l.c.n.m.M.M.M.M.M.M.M.m.n.b.v.f.s.a.=.0.L a a c n.v.N.N.N.N.N.N.N.N.N.N.",
"N.N.w.b.! n M n &.=.f.k.z.v.b.m.M.M.M.M.M.M.m.m.n.b.z.j.f.s.5.7.~ c L f.b.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h [email protected] &.=.f.l.z.b.n.m.m.M.M.M.M.M.M.m.n.v.z.k.f.s.5.6.o.0.m.x.+.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.u u A >.c.z.0.=.s.l.c.b.n.m.M.M.M.M.M.M.m.m.n.v.z.k.f.f.=.5.t.n.i.+.X.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h h h V ^ o.5.0.c.c.b.n.m.m.M.M.M.M.M.m.m.n.b.z.l.f.f.%.0.<.i.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z z z C 0.=.b.c.b.n.m.M.M.M.M.M.M.m.m.n.b.z.k.j.f.%.7.q.i.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z B V B =.=.k.b.b.n.m.m.M.M.M.M.m.m.n.b.v.z.k.c.6.6.-.a.w.<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z B V V U [email protected].<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.h h l z B V Z V @[email protected].<.$.O.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.h l z N V Z A C 7.5.0.m.M.M.M.M.M.M.M.M.m.m.m.c.%.0.=.=.h.a.w.<.:.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.N.z C V V Z A K K [email protected].&.t.6.w.a.g.*.N.N.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.N.` z.0.n j B A R W E [email protected] * ' [email protected].",
"N.N.=.m.) t 3 2 3 9 a k C A ! 5.r.0.5.5.5.5.6.0.0.@.[ o.n ~ r . % S v.r.N.N.N.N.N.N.N.N.N.N.N.",
"N.N.M.Y 6 8 8 9 9 8 8 8 8 9 9 9 d Y { %.&.@.` H i 9 9 6 7 4 & ; - o $ g M.N.N.N.N.N.N.N.N.N.N.N.",
"N.9.M.G y a a a a a a a a a a a p y y p p p y y p a a a s 0 & : e = o & 3.M.N.N.N.N.N.N.N.N.N.N.",
"N.N.t.c.L c b n n n n n n n n n n n n n n n n n n n n n n C t @ > e = X = 5 N.N.N.N.N.N.N.N.N.N.",
"N.N.h 8.m.t.] Y L L U U Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U U L Q f # : e = o @ N.N.N.N.N.N.N.N.N.N.",
"N.N.u u K 8.v.v.f.6.#.o.] ( ( / / / / / / / / / ( ( ( ..o.-.t.n.| # : e = O & N.N.N.N.N.N.N.N.N.",
"N.N.h h h h V ( 8.h.v.b.v.x.k.f.a.a.a.e.e.a.a.a.h.k.c.b.M.M.m.c.x.T # : e = O & N.N.N.N.N.N.N.N.",
"N.N.h h l z z z B Z E .*.2.p.h.l.x.v.b.n.m.M.M.M.M.M.M.b.x.h.d.a.g.P # : e = O & N.N.N.N.N.N.N.",
"N.N.h h l z B V C A K R E W ^ .X.+.:.8.i.a.h.c.b.M.M.n.v.x.k.h.a.w.u.F # > e = O & N.N.N.N.N.N.",
"N.u h h l z B V Z A I E W ^ ...O.$.,.q.p.d.k.c.n.M.M.n.v.x.k.h.a.w.<.1.D % , e = O & N.N.N.N.N.",
"N.N.h h l z B V Z A I E W ^ ...O.$.,.q.p.d.k.c.n.M.M.n.v.x.k.h.a.w.<.$.,.1 o < e = O & N.N.N.N.",
"N.N.x h l z B V Z A I E W ^ ...O.$.,.q.p.d.k.c.n.M.M.n.v.x.k.h.a.w.2.:.Q N.N.+ < e = O & N.N.N.",
"N.N.N.c k z N V Z A I E W ^ ...O.$.,.q.p.d.k.c.n.M.M.n.v.x.l.h.d.w.o.H N.N.N.N.@ < e = + @ N.N.",
"N.N.N.N.N.c b m C A R E ^ ^ .X.O.$.,.q.p.d.l.v.m.M.M.M.n.c.h.9.[ H N.N.N.N.N.N.N.@ < 5 * o N.N.",
"N.N.N.N.N.N.N.N.v n C K E ^ / ..O.$.<.q.a.d.l.x.c.v.k.0.@.~ F N.N.N.N.N.N.N.N.N.N.N.# ; & X N.N.",
"N.N.N.N.N.N.N.N.N.N.N.N.N.N.v D D G H J J J J J F N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.& N.N.N.N."
};
@@ -1,277 +0,0 @@
static const unsigned char toolbar_pause_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, 0x87, 0x00, 0x00, 0x00,
0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b,
0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00,
0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
0x72, 0x65, 0x00, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20,
0x4d, 0x58, 0x20, 0x32, 0x30, 0x30, 0x34, 0x87, 0x76, 0xac, 0xcf, 0x00,
0x00, 0x00, 0x14, 0x74, 0x45, 0x58, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x39, 0x2f, 0x34,
0x2f, 0x30, 0x34, 0x79, 0x5e, 0xa3, 0xd5, 0x00, 0x00, 0x0c, 0x2e, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xd5, 0x9a, 0x4b, 0x6c, 0x5d, 0xd7, 0x75,
0x86, 0xbf, 0xbd, 0xf7, 0x79, 0xdc, 0x87, 0x28, 0x5d, 0x52, 0x22, 0x29,
0x25, 0x96, 0x2c, 0x45, 0xb0, 0x55, 0x35, 0x4e, 0xa4, 0xa2, 0xa3, 0x0c,
0x6a, 0x2b, 0x40, 0x50, 0x4f, 0x0a, 0xc8, 0xb3, 0x0e, 0x0c, 0x23, 0xca,
0xa4, 0x4a, 0x1c, 0xc0, 0x4a, 0x07, 0x1d, 0x09, 0x45, 0x64, 0x18, 0xa9,
0x03, 0x03, 0xae, 0x65, 0xb5, 0x40, 0x91, 0x64, 0xa0, 0x00, 0x0d, 0xa7,
0x85, 0xd3, 0x0e, 0xda, 0xa2, 0x69, 0xa1, 0x38, 0x9d, 0x14, 0x28, 0x50,
0x39, 0xb1, 0x91, 0x0a, 0xb2, 0x65, 0x3d, 0x28, 0x89, 0x22, 0xef, 0x25,
0xef, 0x9b, 0xf7, 0x3c, 0xf6, 0x5e, 0x1d, 0xec, 0x73, 0x1f, 0x94, 0x48,
0x89, 0xb2, 0x83, 0x1a, 0xde, 0xc0, 0xc1, 0xb9, 0x8f, 0x7d, 0xcf, 0xf9,
0xff, 0xb5, 0xfe, 0xfd, 0xaf, 0xb5, 0x0f, 0xa9, 0x44, 0x84, 0xcf, 0xf3,
0xd0, 0x9f, 0x35, 0x80, 0x4f, 0x3b, 0x82, 0xcf, 0xf2, 0xe6, 0xa7, 0x4f,
0xff, 0x58, 0x0d, 0x5f, 0xff, 0xe8, 0x47, 0x7f, 0xf6, 0x89, 0xa4, 0xa0,
0x7e, 0x57, 0x12, 0xfa, 0xe1, 0x0f, 0xff, 0xe5, 0xa0, 0x88, 0x9c, 0x10,
0x71, 0x27, 0x9c, 0x73, 0x07, 0x9d, 0x93, 0x63, 0x22, 0xae, 0xe6, 0x9c,
0xc3, 0x39, 0x87, 0x88, 0xbb, 0xee, 0x9c, 0xbb, 0xe1, 0x9c, 0xbb, 0xe4,
0x9c, 0x7b, 0xaf, 0xd5, 0xea, 0xff, 0x7c, 0x93, 0xcb, 0x08, 0x3c, 0x1e,
0x99, 0x4f, 0x45, 0xe0, 0xcd, 0x37, 0xff, 0xa3, 0x26, 0xe2, 0x5e, 0x10,
0x91, 0x33, 0x22, 0x72, 0xdc, 0x03, 0x15, 0x26, 0x40, 0x8f, 0x5e, 0x6f,
0x7c, 0x6f, 0x71, 0xce, 0x35, 0x9d, 0x73, 0xff, 0x68, 0xad, 0xfb, 0xfb,
0xf5, 0xf5, 0xfc, 0x97, 0x05, 0xf8, 0xe1, 0x01, 0x20, 0xdb, 0x21, 0xf2,
0x89, 0x09, 0xbc, 0xf5, 0xd6, 0xa5, 0x73, 0x20, 0x67, 0x9c, 0x93, 0x9a,
0x88, 0x50, 0x2a, 0xc5, 0x54, 0xab, 0x55, 0xa6, 0xa6, 0xa6, 0x50, 0x4a,
0x11, 0x45, 0xf1, 0x08, 0x6c, 0x96, 0x65, 0xf4, 0xfb, 0x5d, 0xba, 0xdd,
0x3e, 0x9d, 0x4e, 0x8b, 0x4e, 0xa7, 0x43, 0x9e, 0x67, 0x93, 0xe4, 0xde,
0xb5, 0xd6, 0xfe, 0x45, 0x9a, 0x72, 0xb9, 0x20, 0xe0, 0x86, 0x64, 0x1e,
0x45, 0xe2, 0xb1, 0xd7, 0xc0, 0xdb, 0x6f, 0xbf, 0x7b, 0x42, 0x29, 0x75,
0x51, 0x6b, 0x7d, 0x50, 0x6b, 0xcd, 0xcc, 0xcc, 0x0c, 0x4f, 0x3e, 0xb9,
0x97, 0xdd, 0xbb, 0xcb, 0x54, 0x2a, 0x01, 0x41, 0xa0, 0x09, 0x02, 0x83,
0xb5, 0xe0, 0x1c, 0xf4, 0x7a, 0x29, 0xdd, 0x6e, 0x42, 0xab, 0xd5, 0xa7,
0xd1, 0x68, 0x33, 0x33, 0x33, 0x4d, 0x9a, 0xa6, 0xb4, 0x5a, 0x6b, 0xdc,
0xbd, 0xbb, 0x44, 0x92, 0x24, 0x00, 0xcf, 0x2a, 0xa5, 0xfe, 0x2b, 0x0c,
0xed, 0x5f, 0x65, 0x99, 0x7e, 0x0d, 0x50, 0x05, 0x89, 0x21, 0x91, 0x2d,
0xc7, 0x63, 0x65, 0xe0, 0xc2, 0x85, 0xff, 0x3c, 0xa7, 0x94, 0xfa, 0x3e,
0xc0, 0xdc, 0xdc, 0x2c, 0xcf, 0x3c, 0xb3, 0x9f, 0xb9, 0xb9, 0x98, 0x38,
0xd6, 0x38, 0xc7, 0x08, 0xf4, 0xc3, 0x5e, 0x2f, 0x2f, 0x37, 0x59, 0x5c,
0x5c, 0xa2, 0xdf, 0x5f, 0xc7, 0xb9, 0x9c, 0x95, 0x95, 0x15, 0x96, 0x97,
0x97, 0x47, 0x19, 0x11, 0x71, 0xbf, 0xb2, 0x56, 0xfe, 0x54, 0x24, 0x68,
0x00, 0x16, 0x70, 0x0f, 0xcb, 0xc2, 0xb6, 0x33, 0x70, 0xe1, 0xc2, 0xaf,
0x2e, 0x6a, 0xad, 0x4f, 0xc5, 0x71, 0xcc, 0x57, 0xbf, 0x7a, 0x84, 0xa7,
0x9f, 0xde, 0x41, 0xa9, 0xa4, 0x46, 0xe0, 0xd6, 0xd7, 0x2d, 0xab, 0xab,
0x29, 0xed, 0x76, 0xc6, 0x60, 0xe0, 0x0f, 0x6b, 0x2d, 0xce, 0x59, 0xa2,
0xc8, 0x10, 0xc7, 0x21, 0xe5, 0x72, 0x4c, 0xad, 0x36, 0xc5, 0xf4, 0x74,
0x8d, 0xbb, 0x77, 0x97, 0xf9, 0xf8, 0xe3, 0x1b, 0x4c, 0x4f, 0xcf, 0x50,
0x2e, 0x97, 0x59, 0x5c, 0xbc, 0xc5, 0xfa, 0xfa, 0x3a, 0xc0, 0x1f, 0x29,
0x25, 0xff, 0x2a, 0x92, 0x3f, 0x0f, 0x41, 0x83, 0x8d, 0xeb, 0xe2, 0x81,
0xb1, 0xad, 0x0c, 0xbc, 0xfd, 0xf6, 0xbb, 0x17, 0xb5, 0xd6, 0xa7, 0xaa,
0xd5, 0x2a, 0xcf, 0x3e, 0xfb, 0x0c, 0x07, 0x0e, 0x84, 0xa3, 0x88, 0x36,
0x1a, 0x96, 0xa5, 0xa5, 0x94, 0x7e, 0x3f, 0xc7, 0x39, 0x8b, 0xb5, 0xae,
0x38, 0xdb, 0x89, 0xb3, 0xc3, 0x5a, 0x8b, 0xb5, 0x39, 0x79, 0xee, 0xa8,
0xd5, 0x76, 0x30, 0x3f, 0x3f, 0x4f, 0x9a, 0xe6, 0xbc, 0xff, 0xfe, 0x07,
0x64, 0x59, 0x82, 0xb5, 0x96, 0xbb, 0x77, 0xef, 0xd0, 0x6a, 0x35, 0x87,
0xeb, 0xe2, 0x37, 0x22, 0xea, 0x8f, 0x95, 0x8a, 0xea, 0x80, 0xdd, 0x2a,
0x0b, 0x8f, 0x2c, 0x64, 0x6f, 0xbd, 0x75, 0xe9, 0x22, 0x70, 0x6a, 0xd7,
0xae, 0x1a, 0xcf, 0x3f, 0xff, 0x15, 0xf6, 0xef, 0x0f, 0x8b, 0x88, 0xc3,
0xd5, 0xab, 0x39, 0x8b, 0x8b, 0x39, 0x49, 0x22, 0x28, 0xa5, 0x00, 0x85,
0x2a, 0x9c, 0xdd, 0x9f, 0x55, 0x71, 0x8c, 0xe2, 0x05, 0x40, 0xa3, 0xb1,
0xc6, 0xaf, 0x7f, 0xfd, 0x3e, 0x6b, 0x6b, 0x6b, 0x1c, 0x3d, 0xfa, 0xfb,
0x68, 0x6d, 0x70, 0x4e, 0x98, 0x9b, 0x9b, 0xa7, 0x54, 0xaa, 0x0c, 0x7f,
0xf7, 0x15, 0x11, 0xfb, 0x13, 0xc0, 0xdc, 0x77, 0x91, 0xed, 0x13, 0x78,
0xf3, 0xcd, 0x7f, 0x3f, 0x23, 0x22, 0xa7, 0x4a, 0xa5, 0x12, 0x5f, 0xff,
0xfa, 0x11, 0x66, 0x66, 0x02, 0x9c, 0x83, 0x7a, 0x5d, 0xf8, 0xe8, 0x23,
0x61, 0x30, 0x78, 0x14, 0x7d, 0x46, 0x84, 0xfc, 0xeb, 0xf1, 0x1b, 0x11,
0xb8, 0x7d, 0x7b, 0x91, 0x0f, 0x3f, 0xfc, 0x90, 0xc3, 0x87, 0x9f, 0x1e,
0xd9, 0xef, 0xfc, 0xfc, 0x3c, 0x41, 0x30, 0x52, 0xf6, 0x9f, 0xe4, 0x79,
0xef, 0x15, 0x40, 0x4f, 0x16, 0xbd, 0x6d, 0x11, 0x78, 0xe3, 0x8d, 0x7f,
0x3b, 0x2e, 0x22, 0xe7, 0x8d, 0x31, 0x7c, 0xed, 0x6b, 0xcf, 0x30, 0x33,
0xe3, 0x23, 0x7f, 0xf3, 0xa6, 0xe5, 0xce, 0x1d, 0x6f, 0x7f, 0x20, 0x0c,
0x15, 0xb8, 0xb9, 0x14, 0xc7, 0xdf, 0x0f, 0xdf, 0x8f, 0x39, 0xf8, 0xef,
0xfa, 0xfd, 0x0e, 0x37, 0x6f, 0x5e, 0x67, 0xdf, 0xbe, 0x2f, 0x22, 0x22,
0x28, 0xa5, 0x99, 0x9d, 0x9d, 0x65, 0x42, 0xf6, 0x67, 0xb3, 0xac, 0x7b,
0x68, 0x2b, 0x9c, 0x0f, 0xc9, 0x80, 0x5c, 0x14, 0x81, 0xa3, 0x47, 0x9f,
0x62, 0xff, 0xfe, 0x32, 0xce, 0xc1, 0x8d, 0x1b, 0x29, 0xab, 0xab, 0x79,
0x51, 0x88, 0xec, 0xa8, 0x38, 0x79, 0xf0, 0x82, 0x88, 0x8c, 0x88, 0x8c,
0x81, 0x8f, 0x19, 0xf8, 0xcf, 0x64, 0xc3, 0x77, 0x22, 0xd0, 0xe9, 0xb4,
0x69, 0x36, 0xd7, 0x08, 0xc3, 0x12, 0x22, 0x8e, 0x38, 0x2e, 0xb1, 0x63,
0xc7, 0xd4, 0x70, 0xd2, 0x2e, 0x11, 0xf7, 0x97, 0x6c, 0x21, 0xa3, 0x4d,
0x5d, 0xe8, 0xf5, 0xd7, 0xff, 0xf9, 0x9b, 0x5a, 0xeb, 0xe3, 0xbb, 0x76,
0xed, 0xe4, 0xa9, 0xa7, 0x76, 0xa3, 0x94, 0xa2, 0x5e, 0xcf, 0x68, 0x34,
0x32, 0x94, 0xd2, 0x13, 0x52, 0x10, 0x3e, 0xf8, 0xe0, 0x32, 0x8d, 0x46,
0x9d, 0x6e, 0xb7, 0x43, 0xb3, 0xd9, 0xe0, 0xcb, 0x5f, 0x3e, 0xce, 0xe1,
0xc3, 0x47, 0x0a, 0x32, 0x7e, 0xd6, 0xb5, 0x6b, 0x57, 0x69, 0xb7, 0xd7,
0xe8, 0xf7, 0xfb, 0x74, 0x3a, 0x6d, 0x0e, 0x1c, 0x38, 0xc4, 0xfc, 0xfc,
0xbe, 0x11, 0x71, 0xf0, 0x24, 0x94, 0x52, 0x38, 0xe7, 0x3f, 0xab, 0xd5,
0xa6, 0x69, 0xb5, 0x5a, 0xc3, 0x80, 0xbc, 0x94, 0x24, 0xcd, 0x57, 0x81,
0x8f, 0xb6, 0x45, 0x40, 0x44, 0xce, 0x89, 0x08, 0x47, 0x8f, 0x7e, 0x89,
0x9d, 0x3b, 0x23, 0x06, 0x03, 0xc7, 0xe2, 0xe2, 0x3a, 0xce, 0x29, 0x94,
0x92, 0x11, 0x81, 0xf7, 0xde, 0xfb, 0x6f, 0xae, 0x5e, 0xfd, 0x0d, 0xdf,
0xf8, 0xc6, 0x1f, 0x02, 0x7b, 0x80, 0x43, 0x54, 0xab, 0xf3, 0xa4, 0xa9,
0x1b, 0x65, 0xe3, 0xca, 0x95, 0x0f, 0x58, 0x5c, 0xfc, 0xa8, 0x98, 0x33,
0x1c, 0x55, 0x96, 0x97, 0x53, 0x44, 0xc0, 0x39, 0x29, 0xf4, 0x2f, 0x38,
0x97, 0xe3, 0x9c, 0x43, 0x29, 0x30, 0xc6, 0x50, 0xad, 0x56, 0xe9, 0x76,
0xdb, 0x43, 0xc7, 0x7b, 0x05, 0x38, 0xf3, 0x48, 0x02, 0xaf, 0xbd, 0xf6,
0x4f, 0x27, 0xb5, 0xd6, 0x07, 0xa7, 0xa7, 0x6b, 0xcc, 0xce, 0x56, 0x71,
0x0e, 0x6e, 0xdd, 0xea, 0x93, 0x65, 0x76, 0x14, 0xfd, 0x61, 0x02, 0x96,
0x96, 0x6e, 0xf3, 0xf2, 0xcb, 0x27, 0x39, 0x72, 0x64, 0xff, 0xe8, 0xf7,
0x69, 0x6a, 0xf9, 0xc5, 0x2f, 0x96, 0x0b, 0x02, 0x8e, 0x46, 0x63, 0xe5,
0x81, 0x39, 0x49, 0x92, 0xf3, 0xb3, 0x9f, 0xfd, 0xcf, 0x28, 0x43, 0x9e,
0x84, 0xbb, 0x6f, 0x3d, 0x29, 0x2a, 0x95, 0x2a, 0xbd, 0x6e, 0xbb, 0xc8,
0x92, 0x3b, 0x79, 0xfa, 0xf4, 0x8f, 0xbf, 0x77, 0xbf, 0x9d, 0x3e, 0xb0,
0x06, 0x44, 0xe4, 0x94, 0x88, 0x63, 0xcf, 0x9e, 0xdd, 0x4c, 0x4f, 0x97,
0x69, 0xb7, 0x53, 0xd6, 0xd6, 0xd6, 0x27, 0x9a, 0x30, 0xef, 0xf5, 0xd6,
0x3a, 0xd6, 0xd6, 0x1a, 0x1b, 0x80, 0x81, 0x77, 0x9a, 0x21, 0x78, 0x11,
0xa1, 0xdd, 0x6e, 0x3e, 0x74, 0xce, 0x70, 0x1d, 0xf9, 0x9b, 0x3b, 0x10,
0x41, 0x2b, 0x85, 0x42, 0xa8, 0x56, 0xca, 0x80, 0x1a, 0x8a, 0xff, 0xc9,
0x5e, 0xaf, 0x7e, 0xfc, 0x7e, 0xbc, 0x1b, 0x08, 0x9c, 0x3b, 0xf7, 0x0f,
0x35, 0x11, 0xf7, 0x42, 0x10, 0x84, 0xcc, 0xce, 0xce, 0x14, 0x96, 0x39,
0x04, 0xef, 0x8a, 0x82, 0xe4, 0x89, 0x74, 0x3a, 0x2d, 0xe6, 0xe7, 0x6b,
0x88, 0x50, 0x48, 0xc1, 0x1f, 0xad, 0xd6, 0xb0, 0x25, 0x10, 0xfa, 0xfd,
0x1e, 0x7b, 0xf7, 0x4e, 0x3f, 0x30, 0xa7, 0x5e, 0xef, 0x8f, 0xa4, 0x33,
0x5e, 0xf4, 0x5e, 0xfb, 0x4a, 0x15, 0x55, 0xa0, 0x90, 0x51, 0x1c, 0x97,
0x40, 0xa9, 0xe2, 0x1a, 0x72, 0xf2, 0x7e, 0x02, 0x1b, 0x24, 0xe4, 0x9c,
0x3c, 0xa7, 0xb5, 0x50, 0xad, 0x56, 0xa8, 0x56, 0x23, 0xb2, 0xcc, 0x51,
0xaf, 0xf7, 0x0a, 0xcd, 0x7b, 0x8b, 0x1b, 0x46, 0xb0, 0xdb, 0xed, 0xf0,
0xc4, 0x13, 0xb3, 0x38, 0x1f, 0xb4, 0x51, 0xfa, 0x93, 0x64, 0xdc, 0x36,
0xf7, 0x7a, 0xdd, 0x4d, 0xe7, 0x0c, 0x06, 0x76, 0x43, 0xab, 0x2d, 0x4e,
0x0a, 0xd0, 0x0a, 0xa5, 0x14, 0x5a, 0x29, 0x9c, 0x38, 0x9c, 0x40, 0x10,
0x18, 0xd4, 0xd8, 0xc9, 0x8e, 0x3d, 0x34, 0x03, 0x22, 0x72, 0x5c, 0xc4,
0x51, 0xa9, 0x54, 0x28, 0x95, 0x42, 0xda, 0xed, 0x64, 0x43, 0xe4, 0x27,
0xdb, 0x82, 0x7b, 0xf7, 0xee, 0x32, 0x33, 0xb3, 0x13, 0x6b, 0xd9, 0x70,
0x34, 0x9b, 0xe9, 0x48, 0x16, 0x8d, 0xc6, 0xca, 0xa6, 0x73, 0xea, 0xf5,
0xde, 0xc4, 0xe2, 0x1d, 0xdb, 0xb0, 0x42, 0x11, 0x68, 0x4d, 0x60, 0x34,
0x46, 0x1b, 0xb4, 0x86, 0x52, 0x29, 0x9e, 0xc8, 0x10, 0xb5, 0x87, 0x66,
0xc0, 0xef, 0xa6, 0x34, 0x41, 0x10, 0x50, 0xa9, 0x94, 0xb8, 0x73, 0x67,
0x15, 0xe7, 0x6c, 0x11, 0x99, 0x8d, 0x0b, 0x38, 0x4d, 0x13, 0x0e, 0x1f,
0xfe, 0x3d, 0xac, 0x9d, 0xf4, 0x7c, 0x0a, 0x37, 0xf1, 0x04, 0xb2, 0x2c,
0xe5, 0xf0, 0xe1, 0xfd, 0x5b, 0xce, 0x19, 0x06, 0x04, 0xf1, 0xe0, 0x8d,
0x06, 0xa3, 0x15, 0x46, 0x6b, 0x10, 0x87, 0x28, 0x8d, 0x56, 0x3e, 0xfe,
0xc5, 0xef, 0x4f, 0x3c, 0x82, 0x80, 0xd4, 0xc0, 0x11, 0xc7, 0x71, 0xd1,
0xcb, 0x0f, 0x0a, 0x5b, 0xdb, 0x68, 0x9f, 0xa0, 0x68, 0x36, 0xd7, 0x28,
0x95, 0xe2, 0x07, 0xe4, 0xe1, 0xf5, 0x3d, 0x5c, 0xc0, 0xad, 0x4d, 0xe7,
0xdc, 0xb9, 0xd3, 0x2a, 0x9a, 0x3b, 0x87, 0x73, 0x82, 0xc2, 0x61, 0x94,
0xf2, 0xe0, 0x8d, 0xc6, 0x68, 0x8d, 0x20, 0x38, 0xbc, 0xa4, 0xfc, 0x5d,
0x37, 0x6f, 0x3a, 0xef, 0x5b, 0x03, 0xee, 0xf8, 0x50, 0x87, 0xce, 0x41,
0xbb, 0xdd, 0x9b, 0x88, 0xbc, 0xbf, 0xcc, 0xf0, 0xdc, 0xef, 0x77, 0xd9,
0xbb, 0x77, 0x6e, 0x14, 0xdd, 0xb1, 0x25, 0x8e, 0x9d, 0x65, 0x7d, 0xbd,
0xbf, 0xc5, 0x9c, 0x71, 0xb7, 0x2a, 0x62, 0xd1, 0x4a, 0xa1, 0x15, 0x18,
0x6d, 0x08, 0x4d, 0x80, 0x56, 0x3e, 0x4b, 0x5a, 0xb9, 0x91, 0x63, 0x6d,
0x8b, 0x80, 0xb7, 0x33, 0x5d, 0x80, 0xa0, 0x88, 0xfe, 0x64, 0xa7, 0x39,
0x26, 0x51, 0x2e, 0x07, 0x23, 0x57, 0xd9, 0x4a, 0x42, 0x95, 0x4a, 0xb8,
0xe9, 0x9c, 0x3c, 0x9f, 0x94, 0x8f, 0xbf, 0x9e, 0x29, 0xb4, 0x1f, 0x18,
0x8d, 0x02, 0x8c, 0x76, 0xe4, 0x4e, 0x91, 0x65, 0xe9, 0x16, 0x7d, 0xd6,
0xa6, 0x19, 0x10, 0x94, 0x72, 0x63, 0x02, 0xd6, 0x47, 0x80, 0x22, 0x03,
0xe3, 0x16, 0x19, 0x6a, 0xb5, 0x9d, 0xa3, 0xc8, 0x3a, 0x37, 0xbe, 0x46,
0xb7, 0x9b, 0x14, 0x91, 0x95, 0x2d, 0xe7, 0xb4, 0x5a, 0x5d, 0xf2, 0xdc,
0x4b, 0xc8, 0x28, 0xaf, 0xfb, 0xd0, 0x18, 0xa2, 0x30, 0x20, 0x0c, 0x8c,
0x6f, 0xea, 0xac, 0xb7, 0xd2, 0x2c, 0xcb, 0x70, 0x63, 0x02, 0x97, 0x1f,
0x99, 0x01, 0x85, 0x22, 0x49, 0x12, 0xda, 0xed, 0x5e, 0x91, 0x91, 0x71,
0x4f, 0xef, 0x5b, 0x09, 0x3f, 0x37, 0x0c, 0xcb, 0x1b, 0xa2, 0x3b, 0xbc,
0x47, 0x1c, 0x07, 0xf4, 0x7a, 0xeb, 0x88, 0x08, 0xc6, 0xc4, 0x9b, 0xce,
0xf1, 0xeb, 0xa2, 0x85, 0xc2, 0xa1, 0x95, 0xf6, 0xe0, 0x83, 0x80, 0x28,
0x30, 0x04, 0xc6, 0x90, 0xd9, 0x1c, 0xa5, 0x15, 0x0a, 0x45, 0xaf, 0xd7,
0x9d, 0xcc, 0x40, 0xf3, 0x7e, 0x02, 0x1b, 0x6c, 0xd4, 0x39, 0x77, 0x49,
0x44, 0x48, 0x93, 0x01, 0xfd, 0xde, 0x3a, 0xc3, 0xdd, 0x9c, 0x12, 0xc1,
0x15, 0x05, 0x2c, 0xcf, 0xf3, 0xc2, 0x46, 0x1b, 0x0f, 0xd8, 0xa3, 0x73,
0x3e, 0x6a, 0xd6, 0x5a, 0xf2, 0x7c, 0xeb, 0x39, 0xc6, 0x78, 0x97, 0x31,
0x4a, 0x11, 0x05, 0x86, 0x52, 0x14, 0x50, 0x8a, 0x43, 0xe2, 0x30, 0xc0,
0x14, 0xc0, 0x15, 0x8a, 0x24, 0x4d, 0x8a, 0xe8, 0x8f, 0x08, 0x5c, 0x7a,
0x14, 0x81, 0xa6, 0x73, 0x42, 0xaf, 0xd7, 0x61, 0xb5, 0xb1, 0x4a, 0xb9,
0x14, 0xa3, 0x47, 0x99, 0x11, 0x10, 0x8b, 0x38, 0x87, 0xcd, 0x73, 0x8c,
0x31, 0x9b, 0x6e, 0xda, 0x2b, 0x95, 0x88, 0x3c, 0xcf, 0xc8, 0xf3, 0x14,
0xad, 0xf5, 0xa6, 0x73, 0xa6, 0xa7, 0xa7, 0x30, 0x4a, 0x13, 0x87, 0x21,
0x95, 0x38, 0xa6, 0x1c, 0x45, 0x94, 0xc2, 0x80, 0x30, 0x08, 0x50, 0xba,
0xf0, 0x1c, 0x11, 0xd6, 0x9a, 0x4d, 0xac, 0x95, 0xc9, 0x0c, 0x3c, 0x20,
0xa1, 0xfb, 0x0b, 0xd9, 0x65, 0x41, 0xe8, 0x75, 0x7b, 0x0c, 0x06, 0x7d,
0xcf, 0x5c, 0x1c, 0x81, 0x02, 0x8d, 0xa0, 0x44, 0xa1, 0xf0, 0x99, 0x78,
0xe2, 0x89, 0x27, 0xe9, 0xf7, 0x93, 0x11, 0xb0, 0xe1, 0x39, 0x49, 0x52,
0xb2, 0x2c, 0x23, 0xcb, 0x32, 0xe6, 0xe6, 0xf6, 0x6d, 0x3a, 0x27, 0x4f,
0x73, 0xe2, 0x30, 0xa0, 0x1c, 0x45, 0x54, 0xe2, 0x88, 0x72, 0x1c, 0x11,
0x47, 0x61, 0xe1, 0xff, 0xe0, 0x10, 0xac, 0x38, 0x9a, 0xcd, 0xb5, 0x0d,
0x4d, 0xde, 0x76, 0x32, 0xf0, 0x8e, 0x6f, 0x01, 0x7a, 0xd8, 0x3c, 0x27,
0x4b, 0x32, 0x8c, 0x02, 0xad, 0x14, 0x81, 0x56, 0x04, 0x5a, 0xd0, 0x80,
0x12, 0xa8, 0x96, 0xab, 0x5c, 0xb9, 0x72, 0x9b, 0x5e, 0x6f, 0x0c, 0x70,
0x65, 0xa5, 0xc5, 0xb5, 0x6b, 0x77, 0xc9, 0xb2, 0x9c, 0x34, 0xcd, 0x30,
0x26, 0xe2, 0xf2, 0xe5, 0x0f, 0xe9, 0x74, 0xd6, 0x47, 0x73, 0xee, 0x2d,
0xad, 0xb2, 0xb4, 0x78, 0x8f, 0x6a, 0x29, 0x62, 0xaa, 0x12, 0xb3, 0xa3,
0x1c, 0x53, 0x8a, 0x42, 0x02, 0xe3, 0xbd, 0xdf, 0x8a, 0x23, 0xb7, 0x8e,
0xc6, 0xea, 0x1a, 0x49, 0x9a, 0x61, 0x9d, 0x1d, 0xc2, 0x7b, 0x67, 0x61,
0xe1, 0x6c, 0xeb, 0x7e, 0x02, 0x0f, 0x3c, 0x95, 0x38, 0xf3, 0xca, 0x4f,
0x3e, 0x0e, 0xc3, 0xe0, 0xe0, 0x17, 0xf7, 0xed, 0x63, 0xdf, 0xfc, 0x3c,
0x51, 0x18, 0x10, 0x68, 0x0d, 0x78, 0x3f, 0xce, 0xad, 0x25, 0xcd, 0x2d,
0xb9, 0xf5, 0x87, 0xb5, 0x0e, 0xeb, 0x7c, 0x41, 0xb2, 0x85, 0xfb, 0x88,
0x13, 0x9c, 0xf8, 0x1e, 0x87, 0xa2, 0xeb, 0xd4, 0x28, 0x02, 0xa3, 0x08,
0x03, 0x53, 0x48, 0x27, 0xa2, 0x1c, 0x85, 0x44, 0x61, 0x80, 0x56, 0x8a,
0xdc, 0x39, 0x06, 0x69, 0x46, 0x77, 0x30, 0xa0, 0xb3, 0x3e, 0xe0, 0xb7,
0x57, 0xfe, 0x97, 0x6e, 0xbf, 0x47, 0x96, 0xdb, 0xa1, 0x84, 0x5e, 0x58,
0x58, 0x38, 0xfb, 0xc0, 0xf3, 0xd4, 0x4d, 0x36, 0x34, 0xf2, 0x73, 0x67,
0xdd, 0x99, 0x7a, 0xbd, 0xce, 0x9e, 0x99, 0x3d, 0x44, 0x81, 0x46, 0xa1,
0x09, 0xb4, 0x77, 0x23, 0xa3, 0x7c, 0xda, 0xb2, 0x22, 0x7d, 0xf9, 0xf0,
0x2c, 0x16, 0xa5, 0x7d, 0x01, 0x14, 0x05, 0x1a, 0x05, 0xc6, 0xb7, 0xc5,
0x46, 0x19, 0x8c, 0xd6, 0x44, 0x81, 0x21, 0x0e, 0x03, 0x4a, 0x51, 0x48,
0x1c, 0x86, 0x44, 0xa1, 0x41, 0x29, 0x45, 0x5e, 0x04, 0x21, 0xcd, 0x73,
0xd2, 0xdc, 0x72, 0xfb, 0xce, 0x22, 0x83, 0x24, 0xc1, 0x8e, 0xfa, 0x24,
0xae, 0x6f, 0x06, 0x7e, 0x53, 0x02, 0x22, 0x72, 0xde, 0x3a, 0x7b, 0x26,
0xcd, 0x52, 0x56, 0xea, 0xf7, 0x88, 0xbf, 0xf0, 0x05, 0x02, 0xed, 0xdb,
0xdc, 0xc0, 0x28, 0x42, 0x09, 0x08, 0x8d, 0x26, 0x37, 0x9a, 0xcc, 0x6a,
0xd2, 0x5c, 0x79, 0x4f, 0xd7, 0xca, 0x67, 0x62, 0x18, 0x79, 0x0c, 0x1a,
0x30, 0x46, 0x11, 0x68, 0x43, 0x18, 0x68, 0x6f, 0x95, 0x61, 0x40, 0x14,
0x04, 0x04, 0xc6, 0x67, 0x35, 0x77, 0x96, 0xdc, 0x59, 0x06, 0x69, 0xc6,
0x20, 0xcb, 0x58, 0x69, 0xd4, 0x69, 0xac, 0x36, 0xc9, 0xf2, 0xbc, 0xd8,
0x5e, 0x02, 0x70, 0x6e, 0x33, 0xf0, 0x9b, 0x4a, 0x08, 0xe0, 0xbb, 0xdf,
0xfd, 0xbb, 0x9f, 0x86, 0x41, 0xf0, 0xcd, 0x52, 0x14, 0xf2, 0xd4, 0x97,
0x0e, 0x31, 0xbd, 0xab, 0x46, 0x29, 0x0c, 0x88, 0xc3, 0x80, 0xa0, 0xb0,
0x39, 0x27, 0xe2, 0xed, 0xd2, 0xba, 0x09, 0x39, 0x15, 0x1b, 0x19, 0x7c,
0xe5, 0xd0, 0xca, 0xf7, 0x36, 0xa1, 0xd1, 0x04, 0xc6, 0x14, 0x47, 0xd1,
0xa0, 0x89, 0x90, 0x59, 0x4b, 0x92, 0x65, 0xf4, 0x93, 0x8c, 0x5e, 0x92,
0x70, 0xaf, 0x5e, 0xe7, 0xe3, 0x1b, 0xd7, 0x59, 0x4f, 0x92, 0x49, 0x02,
0x97, 0x17, 0x16, 0xce, 0xfe, 0xc1, 0x56, 0x04, 0x36, 0xdd, 0x13, 0x87,
0x46, 0xbf, 0x9a, 0xe7, 0xd9, 0xc9, 0x14, 0x6a, 0xd7, 0x6f, 0xde, 0x22,
0x38, 0x14, 0xa0, 0xa7, 0x76, 0xf8, 0xaa, 0x19, 0x86, 0x18, 0xa3, 0x09,
0x14, 0x50, 0x54, 0x4d, 0xe7, 0x1c, 0xae, 0xd8, 0xd7, 0x4e, 0x5a, 0x86,
0x2e, 0xaa, 0xb7, 0xd6, 0x1a, 0x53, 0x54, 0x73, 0x41, 0xb0, 0xce, 0x15,
0xe0, 0x73, 0xfa, 0x49, 0x46, 0x3f, 0x49, 0x58, 0x69, 0x34, 0xb8, 0x71,
0xeb, 0x26, 0x49, 0x9a, 0x93, 0x5b, 0x3b, 0x69, 0x9d, 0xa7, 0xb6, 0x02,
0xbf, 0x65, 0x06, 0x00, 0x5e, 0xfe, 0xce, 0xdf, 0xfe, 0xb9, 0x52, 0xfa,
0xaf, 0x4b, 0x51, 0x44, 0xb5, 0x5c, 0xe2, 0xf0, 0xa1, 0x83, 0xd4, 0xa6,
0xa6, 0x28, 0x47, 0x61, 0x91, 0x09, 0xdf, 0x35, 0x6a, 0xad, 0x46, 0x75,
0xc6, 0xc3, 0x2b, 0x46, 0x91, 0x86, 0xd1, 0xf3, 0x0b, 0xf1, 0xc0, 0x73,
0xeb, 0xb5, 0xee, 0x23, 0x9f, 0xd2, 0x4f, 0x52, 0x16, 0xef, 0xdc, 0xe5,
0xee, 0xf2, 0x12, 0x83, 0x24, 0x25, 0xcd, 0xb2, 0x49, 0xed, 0x7f, 0x6f,
0x61, 0xe1, 0xec, 0xdb, 0x9f, 0x88, 0x00, 0xc0, 0xb7, 0x4f, 0x5f, 0x78,
0x27, 0x30, 0xe6, 0x64, 0x5c, 0x90, 0x38, 0x78, 0xe0, 0x00, 0xd3, 0x3b,
0xc7, 0x24, 0xa2, 0x20, 0xc0, 0x14, 0x44, 0x86, 0x3b, 0xaa, 0x91, 0x7e,
0xc4, 0x93, 0x71, 0xe2, 0x1d, 0xca, 0x4b, 0xcd, 0x2f, 0xd2, 0x41, 0x9a,
0xb1, 0x9e, 0xa6, 0xb4, 0xbb, 0x5d, 0x6e, 0x2c, 0x2e, 0xd2, 0x6c, 0xb7,
0x19, 0x24, 0x29, 0xb9, 0xcd, 0xc9, 0xed, 0x08, 0xfc, 0x4f, 0x17, 0x16,
0xce, 0x7e, 0xeb, 0x61, 0xe0, 0xe1, 0x11, 0x4f, 0xa7, 0x03, 0x63, 0x4e,
0x25, 0x59, 0x76, 0x49, 0x44, 0x8e, 0x39, 0x67, 0xb9, 0x7a, 0xed, 0x1a,
0xf3, 0x7b, 0x66, 0xd9, 0x3b, 0x37, 0x4b, 0x25, 0x8e, 0x89, 0x42, 0x4b,
0x14, 0x18, 0x42, 0x63, 0x30, 0x5a, 0xa1, 0x95, 0x46, 0xa9, 0xa2, 0xef,
0xa1, 0xb0, 0x56, 0xeb, 0xc8, 0x9d, 0x23, 0xcd, 0xf2, 0xc2, 0x65, 0x72,
0xba, 0xfd, 0x75, 0x96, 0x56, 0x96, 0x59, 0xa9, 0xd7, 0xe9, 0x0f, 0x52,
0xd2, 0x2c, 0xf5, 0x6b, 0xc8, 0x3d, 0x1e, 0xf8, 0x47, 0x66, 0x00, 0xe0,
0xe5, 0x6f, 0xff, 0x4d, 0x2d, 0xcd, 0xf3, 0x4b, 0x81, 0x31, 0xc7, 0x46,
0x1e, 0x5e, 0x2e, 0x31, 0xb7, 0x7b, 0x0f, 0x33, 0xb5, 0x1a, 0xe5, 0x52,
0x4c, 0x38, 0x5a, 0x9c, 0x9e, 0x00, 0x82, 0x5f, 0x13, 0xe2, 0xb7, 0xa2,
0x99, 0xb5, 0xa4, 0x59, 0x4e, 0xab, 0xd3, 0x61, 0xad, 0xd5, 0xa4, 0xbe,
0xba, 0xca, 0x7a, 0xe2, 0x81, 0x67, 0x79, 0xb1, 0x37, 0x18, 0x57, 0xdc,
0x6d, 0x83, 0xdf, 0x16, 0x01, 0x80, 0xef, 0x9c, 0xbe, 0x50, 0x4b, 0xd2,
0xf4, 0x1d, 0xad, 0xf5, 0x73, 0x51, 0x68, 0x08, 0x03, 0xdf, 0xb7, 0x44,
0x61, 0xc8, 0xce, 0x1d, 0x3b, 0xa8, 0x56, 0xaa, 0xec, 0xa8, 0x56, 0x88,
0xc2, 0x08, 0x63, 0x0c, 0x00, 0xd6, 0xe6, 0x24, 0x69, 0xc6, 0x60, 0x30,
0xa0, 0xdb, 0xeb, 0xd2, 0xea, 0x74, 0x48, 0xd2, 0x94, 0x41, 0x9a, 0x91,
0xe5, 0x99, 0xb7, 0x5e, 0x67, 0x47, 0x45, 0xb0, 0x18, 0xe7, 0x16, 0x16,
0xce, 0xbe, 0xba, 0x5d, 0xf0, 0xdb, 0x26, 0x30, 0x1c, 0xdf, 0x3a, 0xf5,
0xc6, 0x39, 0xa5, 0xd4, 0xf7, 0x8d, 0xd6, 0x18, 0xe3, 0x8b, 0x53, 0x50,
0x78, 0xba, 0xdf, 0x88, 0x98, 0x91, 0x84, 0xc0, 0x2f, 0x58, 0xe7, 0x86,
0x36, 0x9b, 0x8f, 0xec, 0xd6, 0x39, 0x37, 0x92, 0x4b, 0x71, 0xfb, 0xeb,
0xc0, 0xa9, 0x85, 0x85, 0xb3, 0xbf, 0x7c, 0x1c, 0xf0, 0x8f, 0x4d, 0x00,
0xe0, 0xa5, 0x97, 0x5e, 0x3f, 0xa6, 0x94, 0x3a, 0xaf, 0x95, 0x3a, 0xa1,
0x0a, 0xdd, 0x6b, 0xa5, 0xbc, 0x1b, 0xe1, 0xb7, 0x86, 0x30, 0xec, 0xff,
0x0b, 0x19, 0x15, 0x51, 0x76, 0x32, 0x7e, 0xe4, 0x58, 0xdc, 0xb6, 0x09,
0x9c, 0x7f, 0xdc, 0xa8, 0x7f, 0x2a, 0x02, 0xc3, 0xf1, 0xe2, 0x8b, 0x3f,
0x78, 0x4e, 0x29, 0x4e, 0x69, 0xa5, 0x5f, 0x50, 0x4a, 0xd5, 0xb4, 0x1e,
0x6e, 0xc0, 0xc7, 0x0f, 0x91, 0x87, 0x80, 0x9d, 0x13, 0x84, 0x0d, 0xc0,
0x2f, 0x03, 0xe7, 0xd9, 0xa2, 0x41, 0xfb, 0x7f, 0x21, 0x30, 0x39, 0x5e,
0x7c, 0xf1, 0x07, 0x27, 0x81, 0xe3, 0xf8, 0xc7, 0x1e, 0x07, 0x8b, 0x63,
0x38, 0x9a, 0x78, 0xc0, 0xd7, 0xf1, 0xed, 0xf0, 0xa5, 0x85, 0x85, 0xb3,
0x37, 0x3e, 0xf5, 0x4d, 0x8b, 0xf1, 0x3b, 0xfb, 0x4b, 0xfd, 0x67, 0x35,
0x3e, 0xf7, 0xff, 0xec, 0xf1, 0xb9, 0x27, 0xf0, 0x7f, 0xca, 0x8f, 0x08,
0x2e, 0x45, 0xb6, 0x8c, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82,
};
@@ -1,278 +0,0 @@
static const unsigned char toolbar_play_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, 0x87, 0x00, 0x00, 0x00,
0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b,
0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00,
0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
0x72, 0x65, 0x00, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20,
0x4d, 0x58, 0x20, 0x32, 0x30, 0x30, 0x34, 0x87, 0x76, 0xac, 0xcf, 0x00,
0x00, 0x00, 0x14, 0x74, 0x45, 0x58, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x39, 0x2f, 0x34,
0x2f, 0x30, 0x34, 0x79, 0x5e, 0xa3, 0xd5, 0x00, 0x00, 0x0c, 0x3b, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xd5, 0x9a, 0x5b, 0x8c, 0x5d, 0xd5, 0x79,
0xc7, 0x7f, 0x6b, 0xad, 0xbd, 0xf7, 0x39, 0x67, 0x8e, 0xc7, 0x3e, 0x33,
0xe3, 0xb1, 0x31, 0xc1, 0xc6, 0xc4, 0x02, 0xcb, 0x15, 0xc1, 0x6e, 0x22,
0x45, 0xb2, 0xaa, 0x82, 0x93, 0x87, 0xf8, 0x05, 0xc5, 0x48, 0x3c, 0x54,
0x02, 0xa1, 0x38, 0x8a, 0x5a, 0x72, 0x91, 0xb8, 0x3c, 0xf0, 0xe4, 0x54,
0x71, 0x84, 0x52, 0x22, 0x24, 0x0a, 0x76, 0x2b, 0x55, 0x69, 0x1f, 0x8c,
0x54, 0xcd, 0x6b, 0x45, 0xda, 0x07, 0xd2, 0x44, 0x45, 0xb6, 0xd3, 0x48,
0xb4, 0x02, 0xc9, 0x24, 0x10, 0xf0, 0x05, 0x18, 0xdb, 0x83, 0x2f, 0x33,
0x73, 0xe6, 0x7e, 0x2e, 0xfb, 0xb2, 0xbe, 0xaf, 0x0f, 0x7b, 0x9f, 0xcb,
0xd8, 0x33, 0xe3, 0x31, 0x44, 0x45, 0x2c, 0x69, 0xe9, 0xdc, 0xf7, 0xfe,
0xff, 0xbf, 0xff, 0xb7, 0xfe, 0xdf, 0xb7, 0xd6, 0x8c, 0x51, 0x55, 0xbe,
0xc8, 0xc3, 0x7e, 0xde, 0x00, 0x3e, 0xeb, 0x08, 0x3e, 0xcf, 0x9b, 0x3f,
0xf9, 0xe4, 0x3f, 0x9b, 0xce, 0xf3, 0x5f, 0xfc, 0xe2, 0x6f, 0x3e, 0x55,
0x2a, 0x98, 0x3f, 0x55, 0x0a, 0xfd, 0xfc, 0xe7, 0xbf, 0xda, 0xa9, 0xaa,
0x07, 0x54, 0xe5, 0x80, 0x88, 0xec, 0x14, 0xd1, 0xbd, 0xaa, 0x52, 0x13,
0x11, 0x44, 0x04, 0x55, 0x19, 0x17, 0x91, 0x8b, 0x22, 0x72, 0x52, 0x44,
0xde, 0x99, 0x9f, 0x6f, 0xfe, 0x72, 0x85, 0xcb, 0x28, 0xdc, 0x1e, 0x99,
0xcf, 0x44, 0xe0, 0xa5, 0x97, 0xde, 0xa8, 0xa9, 0xca, 0x23, 0xaa, 0xfa,
0xb4, 0xaa, 0xee, 0xcb, 0x81, 0x2a, 0x7d, 0xa0, 0xbb, 0xcf, 0x97, 0xbf,
0xf6, 0x88, 0xc8, 0x9c, 0x88, 0xfc, 0xbb, 0xf7, 0xf2, 0xaf, 0xad, 0x56,
0x76, 0xaa, 0x00, 0xdf, 0x99, 0x00, 0xba, 0x1e, 0x22, 0x9f, 0x9a, 0xc0,
0xcb, 0x2f, 0x9f, 0x3c, 0x0a, 0xfa, 0xb4, 0x88, 0xd6, 0x54, 0x95, 0x72,
0xb9, 0x44, 0xb5, 0x5a, 0x65, 0x70, 0x70, 0x10, 0x63, 0x0c, 0x51, 0x54,
0xea, 0x82, 0x4d, 0xd3, 0x94, 0x66, 0x73, 0x89, 0xa5, 0xa5, 0x26, 0x8b,
0x8b, 0xf3, 0x2c, 0x2e, 0x2e, 0x92, 0x65, 0x69, 0x3f, 0xb9, 0xd3, 0xde,
0xfb, 0xe7, 0x92, 0x84, 0x33, 0x05, 0x01, 0xe9, 0x90, 0xb9, 0x15, 0x89,
0xdb, 0x5e, 0x03, 0xc7, 0x8e, 0x9d, 0x3e, 0x60, 0x8c, 0x39, 0x61, 0xad,
0xdd, 0x69, 0xad, 0x65, 0x78, 0x78, 0x98, 0xbb, 0xef, 0xbe, 0x83, 0x91,
0x91, 0x0a, 0x03, 0x03, 0x01, 0x41, 0x60, 0x09, 0x02, 0x87, 0xf7, 0x20,
0x02, 0x8d, 0x46, 0xc2, 0xd2, 0x52, 0xcc, 0xfc, 0x7c, 0x93, 0x7a, 0x7d,
0x81, 0xe1, 0xe1, 0x21, 0x92, 0x24, 0x61, 0x7e, 0x7e, 0x96, 0xab, 0x57,
0xaf, 0x11, 0xc7, 0x31, 0xc0, 0x83, 0xc6, 0x98, 0xff, 0x09, 0x43, 0xff,
0x77, 0x69, 0x6a, 0x9f, 0x07, 0x4c, 0x41, 0xa2, 0x43, 0x64, 0xd5, 0x71,
0x5b, 0x0a, 0x1c, 0x3f, 0xfe, 0xdf, 0x47, 0x8d, 0x31, 0x3f, 0x01, 0xd8,
0xb2, 0x65, 0x94, 0xfb, 0xef, 0xdf, 0xce, 0x96, 0x2d, 0x25, 0x4a, 0x25,
0x8b, 0x08, 0x5d, 0xd0, 0x6b, 0x3d, 0x9f, 0x9c, 0x9c, 0x63, 0x62, 0xe2,
0x1a, 0xcd, 0x66, 0x0b, 0x91, 0x8c, 0xa9, 0xa9, 0x29, 0x26, 0x27, 0x27,
0xbb, 0x8a, 0xa8, 0xca, 0x6f, 0xbd, 0xd7, 0xbf, 0x52, 0x0d, 0xea, 0x80,
0x07, 0x64, 0x2d, 0x15, 0xd6, 0xad, 0xc0, 0xf1, 0xe3, 0xbf, 0x3d, 0x61,
0xad, 0x3d, 0x5c, 0x2a, 0x95, 0x78, 0xe0, 0x81, 0xdd, 0xdc, 0x77, 0xdf,
0x06, 0xca, 0x65, 0xd3, 0x05, 0xd7, 0x6a, 0x79, 0x66, 0x66, 0x12, 0x16,
0x16, 0x52, 0xda, 0xed, 0x7c, 0x7a, 0xef, 0x11, 0xf1, 0x44, 0x91, 0xa3,
0x54, 0x0a, 0xa9, 0x54, 0x4a, 0xd4, 0x6a, 0x83, 0x0c, 0x0d, 0xd5, 0xb8,
0x7a, 0x75, 0x92, 0x8f, 0x3f, 0xbe, 0xc8, 0xd0, 0xd0, 0x30, 0x95, 0x4a,
0x85, 0x89, 0x89, 0xcb, 0xb4, 0x5a, 0x2d, 0x80, 0xbf, 0x34, 0x46, 0xff,
0x53, 0x35, 0x3b, 0x08, 0x41, 0x9d, 0xe5, 0xeb, 0xe2, 0xa6, 0xb1, 0x2e,
0x05, 0x8e, 0x1d, 0x3b, 0x7d, 0xc2, 0x5a, 0x7b, 0xb8, 0x5a, 0xad, 0xf2,
0xe0, 0x83, 0xf7, 0xb3, 0x63, 0x47, 0xd8, 0x8d, 0x68, 0xbd, 0xee, 0xb9,
0x76, 0x2d, 0xa1, 0xd9, 0xcc, 0x10, 0xf1, 0x78, 0x2f, 0xc5, 0xa3, 0xef,
0x7b, 0x14, 0xbc, 0xf7, 0x78, 0x9f, 0x91, 0x65, 0x42, 0xad, 0xb6, 0x81,
0xad, 0x5b, 0xb7, 0x92, 0x24, 0x19, 0xef, 0xbe, 0xfb, 0x1e, 0x69, 0x1a,
0xe3, 0xbd, 0xe7, 0xea, 0xd5, 0x2b, 0xcc, 0xcf, 0xcf, 0x75, 0xd6, 0xc5,
0x1f, 0x54, 0xcd, 0xb7, 0x8c, 0x89, 0xa6, 0x01, 0xbf, 0x9a, 0x0a, 0xb7,
0x2c, 0x64, 0x2f, 0xbf, 0x7c, 0xf2, 0x04, 0x70, 0x78, 0xd3, 0xa6, 0x1a,
0x07, 0x0f, 0x7e, 0x85, 0xed, 0xdb, 0xc3, 0x22, 0xe2, 0x70, 0xfe, 0x7c,
0xc6, 0xc4, 0x44, 0x46, 0x1c, 0x2b, 0xc6, 0x18, 0xc0, 0x60, 0x0a, 0x67,
0xcf, 0x1f, 0x4d, 0x31, 0xbb, 0xf1, 0x02, 0xa0, 0x5e, 0x9f, 0xe5, 0xf7,
0xbf, 0x7f, 0x97, 0xd9, 0xd9, 0x59, 0xf6, 0xec, 0xf9, 0x33, 0xac, 0x75,
0x88, 0x28, 0x5b, 0xb6, 0x6c, 0xa5, 0x5c, 0x1e, 0xe8, 0xfc, 0xee, 0x2b,
0xaa, 0xfe, 0x5f, 0x00, 0x77, 0xc3, 0x45, 0xd6, 0x4f, 0xe0, 0xa5, 0x97,
0xfe, 0xeb, 0x69, 0x55, 0x3d, 0x5c, 0x2e, 0x97, 0xf9, 0xc6, 0x37, 0x76,
0x33, 0x3c, 0x1c, 0x20, 0x02, 0xd3, 0xd3, 0xca, 0x87, 0x1f, 0x2a, 0xed,
0xf6, 0xad, 0xe8, 0xd3, 0x25, 0x94, 0x3f, 0xef, 0xbd, 0x50, 0x85, 0x4f,
0x3e, 0x99, 0xe0, 0xc2, 0x85, 0x0b, 0xec, 0xda, 0x75, 0x5f, 0xd7, 0x7e,
0xb7, 0x6e, 0xdd, 0x4a, 0x10, 0x74, 0x33, 0xfb, 0xe1, 0x2c, 0x6b, 0x3c,
0x05, 0xd8, 0xfe, 0xa2, 0xb7, 0x2e, 0x02, 0x2f, 0xbe, 0xf8, 0x9b, 0x7d,
0xaa, 0xfa, 0x8a, 0x73, 0x8e, 0xfd, 0xfb, 0xef, 0x67, 0x78, 0x38, 0x8f,
0xfc, 0xa5, 0x4b, 0x9e, 0x2b, 0x57, 0x72, 0xfb, 0x03, 0xa5, 0x93, 0x81,
0x2b, 0xa7, 0x62, 0xef, 0xf3, 0xce, 0xeb, 0x1e, 0x87, 0xfc, 0xb3, 0x66,
0x73, 0x91, 0x4b, 0x97, 0xc6, 0xd9, 0xb6, 0xed, 0x4b, 0xa8, 0x2a, 0xc6,
0x58, 0x46, 0x47, 0x47, 0xe9, 0x4b, 0xfb, 0x23, 0x69, 0xba, 0x74, 0xcf,
0x6a, 0x38, 0xd7, 0x50, 0x40, 0x4f, 0xa8, 0xc2, 0x9e, 0x3d, 0xf7, 0xb2,
0x7d, 0x7b, 0x05, 0x11, 0xb8, 0x78, 0x31, 0x61, 0x66, 0x26, 0x2b, 0x0a,
0x91, 0xef, 0x16, 0xa7, 0x5f, 0xff, 0xfa, 0x37, 0x34, 0x1a, 0x4b, 0xa8,
0x6a, 0x97, 0x48, 0x0f, 0x78, 0x8f, 0x41, 0xfe, 0x9e, 0x2e, 0xfb, 0x4c,
0x15, 0x16, 0x17, 0x17, 0x98, 0x9b, 0x9b, 0x25, 0x0c, 0xcb, 0xa8, 0x0a,
0xa5, 0x52, 0x99, 0x0d, 0x1b, 0x06, 0x3b, 0x5f, 0xda, 0xa4, 0x2a, 0x7f,
0xcb, 0x2a, 0x69, 0xb4, 0x22, 0x81, 0x17, 0x5e, 0x78, 0xfd, 0x3b, 0xaa,
0xba, 0x6f, 0xe3, 0xc6, 0x8d, 0xdc, 0x7b, 0xef, 0x08, 0xc6, 0x18, 0xa6,
0xa7, 0x53, 0xea, 0xf5, 0x14, 0xef, 0xa5, 0x3b, 0x3b, 0x85, 0xe8, 0xfa,
0xf5, 0xeb, 0xbc, 0xfe, 0xfa, 0xaf, 0x38, 0x7b, 0xf6, 0x5c, 0x97, 0x44,
0x3e, 0x3b, 0xc0, 0x6f, 0x34, 0x12, 0x2d, 0xc0, 0xf7, 0xde, 0x5f, 0x5c,
0x5c, 0x20, 0x4d, 0x63, 0x44, 0xf2, 0xf7, 0x6b, 0xb5, 0x21, 0x54, 0xbb,
0xca, 0x3e, 0x11, 0xc7, 0x73, 0x2b, 0xaa, 0xb0, 0x22, 0x01, 0x55, 0x3d,
0xaa, 0xaa, 0xec, 0xd9, 0xf3, 0x65, 0x36, 0x6e, 0x8c, 0x68, 0xb7, 0x85,
0x89, 0x89, 0x56, 0x5f, 0x1b, 0xd0, 0x53, 0x20, 0x4f, 0x25, 0x38, 0x78,
0xf0, 0x01, 0xce, 0x9d, 0xfb, 0x23, 0xa7, 0x4e, 0x9d, 0x5e, 0xa6, 0xc6,
0x72, 0x32, 0x5a, 0xa4, 0x89, 0x29, 0xc0, 0xd1, 0x05, 0x2c, 0xa2, 0xa4,
0x69, 0xa7, 0x16, 0x28, 0xce, 0x39, 0xaa, 0xd5, 0x2a, 0xc6, 0x74, 0xbe,
0xc7, 0x53, 0xeb, 0x22, 0xf0, 0xfc, 0xf3, 0xff, 0x71, 0x48, 0x55, 0x77,
0x0e, 0x0d, 0xd5, 0x18, 0x1d, 0xad, 0x22, 0x02, 0x97, 0x2f, 0x37, 0x49,
0xd3, 0x1e, 0xe0, 0x0e, 0x81, 0x8e, 0x45, 0x02, 0x3c, 0xfc, 0xf0, 0xd7,
0xf8, 0xf1, 0x8f, 0x1f, 0x65, 0x68, 0x28, 0xe2, 0x8d, 0x37, 0x4e, 0xf1,
0xe1, 0x87, 0x1f, 0xa1, 0x2a, 0x37, 0x11, 0xe9, 0x57, 0xa4, 0xa3, 0x50,
0x4e, 0x42, 0x6e, 0x50, 0xcc, 0x30, 0x30, 0x50, 0x2d, 0xf2, 0x46, 0x01,
0x39, 0xb4, 0xd2, 0x42, 0xbe, 0x89, 0x80, 0xaa, 0x1e, 0x56, 0x15, 0x36,
0x6f, 0x1e, 0x61, 0x68, 0xa8, 0xc2, 0xc2, 0x42, 0xc2, 0xec, 0x6c, 0xeb,
0x06, 0xe0, 0xd2, 0xf5, 0xfb, 0x99, 0x99, 0x3a, 0x77, 0xdd, 0x35, 0x82,
0x08, 0x0c, 0x0d, 0x0d, 0xf2, 0xec, 0xb3, 0x0f, 0xf3, 0xd8, 0x63, 0x7f,
0xc1, 0x47, 0x1f, 0x5d, 0xe0, 0xcd, 0x37, 0xff, 0x97, 0x66, 0xb3, 0xd9,
0x8d, 0x7c, 0x47, 0x89, 0x4e, 0xd4, 0x3b, 0xcd, 0x9d, 0xaa, 0x14, 0x37,
0x17, 0x50, 0xc5, 0x1a, 0x83, 0x41, 0xa9, 0x0e, 0x54, 0x00, 0xd3, 0x49,
0xfe, 0xbb, 0x1b, 0x8d, 0xe9, 0x7d, 0x6b, 0x12, 0x38, 0x7a, 0xf4, 0xdf,
0x6a, 0xaa, 0xf2, 0x48, 0x10, 0x84, 0x8c, 0x8e, 0x0e, 0x17, 0x96, 0xd9,
0xa2, 0xbf, 0xa3, 0xec, 0x00, 0xef, 0xa4, 0x50, 0x1c, 0x27, 0x54, 0x2a,
0x51, 0xb7, 0xb0, 0x89, 0xc0, 0xd7, 0xbf, 0x7e, 0x1f, 0xcf, 0x3f, 0xff,
0x18, 0x77, 0xdd, 0xb5, 0x91, 0xdf, 0xfd, 0xee, 0x4d, 0xc6, 0xc7, 0x2f,
0xf5, 0xa9, 0xd1, 0xe9, 0x4a, 0x57, 0x56, 0xc5, 0x98, 0xa2, 0x0a, 0x18,
0x70, 0xce, 0x51, 0x2a, 0x95, 0xa1, 0x9b, 0x72, 0x7a, 0xe8, 0x46, 0x02,
0xcb, 0x5a, 0x09, 0x11, 0x7d, 0xc8, 0x5a, 0xa5, 0x5a, 0x1d, 0xa0, 0x5a,
0x8d, 0x48, 0x53, 0x61, 0x7a, 0xba, 0x51, 0xf8, 0x77, 0x6e, 0x71, 0xd0,
0xf3, 0xf3, 0x1e, 0xa0, 0xbc, 0xdf, 0xe9, 0x1f, 0x51, 0x14, 0xf1, 0xbd,
0xef, 0x7d, 0x8b, 0xf3, 0xe7, 0xaf, 0x30, 0x36, 0x76, 0x8a, 0xc9, 0xc9,
0x29, 0x76, 0xef, 0xbe, 0x97, 0x30, 0x74, 0xcb, 0xa2, 0x2f, 0x22, 0xa8,
0x68, 0x01, 0xda, 0x60, 0x8c, 0xc1, 0x1a, 0x83, 0xa8, 0x20, 0x0a, 0x41,
0xe0, 0x30, 0x3d, 0x03, 0xd8, 0xbb, 0xa6, 0x02, 0xaa, 0xba, 0x4f, 0x55,
0x18, 0x18, 0x18, 0xa0, 0x5c, 0x0e, 0x59, 0x58, 0x88, 0x97, 0x45, 0x7e,
0x79, 0x5b, 0xe0, 0xbb, 0xef, 0xe7, 0xe4, 0x57, 0x9e, 0xbb, 0x76, 0xdd,
0xc9, 0x73, 0xcf, 0x3d, 0xca, 0xde, 0xbd, 0x3b, 0x78, 0xfb, 0xed, 0x33,
0x4c, 0x4c, 0x5c, 0x2d, 0xae, 0xd9, 0x59, 0xbc, 0xd2, 0x8b, 0x3e, 0x86,
0xc0, 0x5a, 0x02, 0x67, 0x71, 0xd6, 0x61, 0x2d, 0x94, 0xcb, 0xa5, 0x3e,
0x85, 0xa8, 0xdd, 0x82, 0x80, 0x1c, 0x10, 0x51, 0x82, 0x20, 0x60, 0x60,
0xa0, 0xcc, 0xc2, 0x42, 0xeb, 0x26, 0xc7, 0x59, 0xee, 0x42, 0x9e, 0x46,
0xa3, 0x41, 0xb9, 0x5c, 0xc2, 0x7b, 0x56, 0x9d, 0x51, 0x14, 0xf1, 0xed,
0x6f, 0xef, 0xe7, 0xa9, 0xa7, 0x0e, 0x91, 0xa6, 0x0d, 0x3e, 0xf8, 0xe0,
0x3c, 0xed, 0x76, 0xdc, 0x33, 0x01, 0xcd, 0xc1, 0x3b, 0x9b, 0xcf, 0xc0,
0x5a, 0x9c, 0x31, 0x58, 0x63, 0xb1, 0x26, 0x8f, 0x7f, 0x91, 0x69, 0x07,
0x6e, 0xa5, 0x40, 0x2d, 0x2f, 0x24, 0xa5, 0xa2, 0x97, 0x6f, 0xaf, 0xe8,
0x3c, 0xbd, 0x5a, 0xe0, 0x69, 0x36, 0x1b, 0x6c, 0xdb, 0x36, 0xb2, 0xaa,
0x02, 0xfd, 0x73, 0xdb, 0xb6, 0x11, 0x9e, 0x79, 0xe6, 0x51, 0xf6, 0xef,
0xdf, 0xcd, 0xc4, 0xc4, 0x65, 0xea, 0xf5, 0xd9, 0x5c, 0x09, 0x04, 0x6b,
0xc8, 0x09, 0x38, 0x5b, 0x4c, 0x83, 0xb5, 0x79, 0x4a, 0xf5, 0x9c, 0xe8,
0xe6, 0x71, 0xc3, 0x1a, 0x90, 0x7d, 0x9d, 0x3c, 0x14, 0x81, 0x85, 0x85,
0x06, 0xc6, 0xd8, 0x6e, 0x6e, 0xc2, 0xf2, 0x7e, 0x26, 0xff, 0x8d, 0xae,
0xb8, 0x06, 0xd6, 0x1a, 0xdf, 0xfc, 0xe6, 0xd7, 0xf8, 0xea, 0x57, 0x77,
0xf3, 0xc6, 0x1b, 0xef, 0x30, 0x39, 0x39, 0x87, 0x35, 0xa6, 0x20, 0xe0,
0x08, 0x5d, 0x80, 0x35, 0xf9, 0x75, 0xad, 0x91, 0xa2, 0x66, 0xac, 0xde,
0x51, 0x2f, 0x23, 0x90, 0xdb, 0x99, 0x2d, 0x22, 0x0e, 0x22, 0x82, 0x31,
0xfd, 0x9d, 0xe6, 0x72, 0x12, 0xcb, 0xad, 0x71, 0xfd, 0x04, 0x00, 0xca,
0xe5, 0x32, 0x43, 0x43, 0x83, 0x4c, 0x5e, 0x9f, 0xc3, 0x18, 0x83, 0x2b,
0x72, 0x3f, 0x70, 0x16, 0x03, 0x38, 0x2b, 0x64, 0x62, 0x48, 0xd3, 0x64,
0x95, 0x3e, 0x6b, 0x05, 0x02, 0x22, 0x8a, 0x31, 0xd2, 0x23, 0xe0, 0xf3,
0x08, 0x50, 0x28, 0xd0, 0x6b, 0x91, 0x7b, 0xa3, 0xd5, 0x6a, 0x22, 0x32,
0x74, 0x5b, 0x0a, 0xbc, 0xff, 0xfe, 0x25, 0xde, 0x7e, 0xfb, 0x1c, 0xad,
0x56, 0x8c, 0x2b, 0x52, 0x27, 0x74, 0x8e, 0x28, 0x0c, 0x08, 0x83, 0xdc,
0xa5, 0x8c, 0xcf, 0xad, 0x34, 0x4d, 0x53, 0xa4, 0x47, 0xe0, 0xcc, 0x9a,
0x04, 0x54, 0x05, 0x83, 0x21, 0x8e, 0x63, 0x16, 0x16, 0x1a, 0x85, 0x22,
0xbd, 0x9e, 0x5e, 0xc4, 0x70, 0x43, 0x06, 0xd1, 0x6c, 0xb6, 0xb9, 0xe3,
0x8e, 0x91, 0x75, 0x29, 0x30, 0x35, 0x35, 0xc7, 0x5b, 0x6f, 0x9d, 0x63,
0x6a, 0x6a, 0x96, 0x2c, 0xcb, 0x30, 0x08, 0xd6, 0xd8, 0x1c, 0x7c, 0x10,
0x10, 0x05, 0x8e, 0xc0, 0x39, 0x52, 0x9f, 0x61, 0xac, 0xc1, 0x60, 0xba,
0x6d, 0x49, 0x31, 0xe6, 0xd6, 0x24, 0x20, 0x22, 0x27, 0x8d, 0xb5, 0x07,
0x92, 0xb8, 0x4d, 0xb3, 0xd1, 0xa2, 0x93, 0x77, 0xa6, 0x53, 0x3d, 0xa1,
0xdb, 0xcb, 0x40, 0xaf, 0xf8, 0x84, 0x61, 0xb4, 0xa6, 0x02, 0xcd, 0x66,
0xcc, 0x3b, 0xef, 0x5c, 0xe0, 0xf2, 0xe5, 0xeb, 0xa4, 0x69, 0x4a, 0x96,
0x79, 0x50, 0xc1, 0x19, 0x43, 0x14, 0x38, 0xca, 0x51, 0x40, 0xb9, 0x14,
0x12, 0x05, 0x0e, 0x80, 0xcc, 0xe7, 0xe0, 0xe3, 0x24, 0x2e, 0xa2, 0xdf,
0x25, 0x70, 0xf2, 0x56, 0x04, 0xe6, 0x72, 0xd6, 0x8b, 0xcc, 0xd4, 0x67,
0xa8, 0x94, 0x4b, 0x24, 0x71, 0x82, 0xa8, 0x60, 0xc8, 0x15, 0x52, 0x01,
0x51, 0xed, 0x1d, 0xde, 0xdc, 0x62, 0x0d, 0x9c, 0x3d, 0x7b, 0x89, 0xf3,
0xe7, 0x2f, 0xd3, 0x6a, 0xb5, 0xc9, 0xb2, 0x0c, 0xdf, 0x05, 0x6f, 0x29,
0x85, 0x01, 0x03, 0xa5, 0x88, 0x4a, 0x14, 0x51, 0x0e, 0x03, 0x9c, 0x73,
0x64, 0xe2, 0xbb, 0xd7, 0x9d, 0x9d, 0x9b, 0xc3, 0x7b, 0xed, 0x57, 0xe0,
0x56, 0x29, 0xa4, 0x67, 0x14, 0x7d, 0xa4, 0xb1, 0xd4, 0xa0, 0xdd, 0x6e,
0x52, 0xad, 0x0e, 0x80, 0x0a, 0x81, 0x31, 0x39, 0x68, 0x35, 0x18, 0x3c,
0x5e, 0xa4, 0x78, 0xdd, 0xe9, 0x20, 0x6f, 0x76, 0xa1, 0x7a, 0x7d, 0x9e,
0x33, 0x67, 0xce, 0xb2, 0xb8, 0xd8, 0xe8, 0x15, 0x3e, 0xef, 0x31, 0x28,
0xce, 0x5a, 0xa2, 0xc0, 0x51, 0x89, 0xa2, 0x9c, 0x40, 0x29, 0x22, 0x0a,
0x1d, 0xaa, 0x90, 0x79, 0x8f, 0xa0, 0x78, 0x15, 0xe6, 0xe6, 0x66, 0x97,
0x35, 0x79, 0xeb, 0x51, 0xe0, 0x35, 0x63, 0xcc, 0xd1, 0x46, 0xa3, 0x81,
0xcf, 0x32, 0xd2, 0x38, 0xc5, 0x19, 0x8a, 0xf2, 0x0e, 0x06, 0x21, 0xf3,
0x79, 0x4a, 0x21, 0x79, 0x15, 0x6d, 0x36, 0x5b, 0xc5, 0x21, 0x56, 0x7e,
0x8d, 0x56, 0xab, 0xcd, 0x7b, 0xef, 0x7d, 0xc8, 0x95, 0x2b, 0x93, 0x85,
0xc5, 0x7a, 0xb4, 0x28, 0x56, 0xce, 0x1a, 0x9c, 0xc9, 0xc1, 0x97, 0xc2,
0x80, 0x6a, 0xb9, 0xc4, 0x40, 0x29, 0x22, 0x0c, 0x02, 0xac, 0x85, 0x24,
0xf3, 0x78, 0x15, 0x32, 0x2f, 0xd4, 0x67, 0x66, 0x89, 0x93, 0x14, 0x2f,
0xdd, 0xc8, 0xbc, 0x36, 0x36, 0x76, 0x64, 0xfe, 0x46, 0x02, 0xcb, 0x0a,
0xd9, 0xf1, 0xe3, 0x7f, 0xfd, 0x8e, 0x78, 0x3f, 0xee, 0xc5, 0x53, 0xaf,
0x4f, 0xe3, 0xb3, 0x04, 0x63, 0x20, 0xb0, 0x10, 0x58, 0x4b, 0xe4, 0x1c,
0x91, 0xb3, 0x84, 0xce, 0x10, 0x58, 0x70, 0x46, 0xd9, 0xba, 0x65, 0x33,
0x23, 0x23, 0x23, 0x78, 0x0f, 0x67, 0xcf, 0x8e, 0x73, 0xfa, 0xd4, 0x5b,
0x5c, 0xbb, 0x32, 0x09, 0x2a, 0x18, 0x15, 0xac, 0xe6, 0x37, 0x89, 0xac,
0xa5, 0x12, 0x06, 0x54, 0xcb, 0x11, 0x1b, 0x2a, 0x65, 0x36, 0x55, 0x07,
0x18, 0xac, 0x94, 0xf3, 0xe8, 0x07, 0xf9, 0xbe, 0x5d, 0x44, 0x49, 0x33,
0x4f, 0x9c, 0xa6, 0x5c, 0x9f, 0xbc, 0x8e, 0x97, 0xac, 0x3f, 0xfa, 0xaf,
0xde, 0x08, 0xfe, 0x26, 0x05, 0x8a, 0x44, 0xfa, 0xa5, 0x78, 0x79, 0x7a,
0x7a, 0x7a, 0x9a, 0xcd, 0xc3, 0x9b, 0x89, 0x02, 0x8b, 0xc1, 0x12, 0xd8,
0xdc, 0x8d, 0x9c, 0xc9, 0x01, 0xa5, 0x05, 0xfb, 0x5d, 0x77, 0x7f, 0x89,
0xb9, 0xd9, 0x05, 0xde, 0x7f, 0xf7, 0x2c, 0xcd, 0x56, 0x0b, 0x15, 0xcd,
0xdb, 0x00, 0x0c, 0xb8, 0xbc, 0x2d, 0x76, 0xc6, 0x75, 0xd3, 0xa6, 0x14,
0x06, 0x94, 0xa3, 0x90, 0x52, 0x18, 0x12, 0x85, 0x0e, 0x63, 0x0c, 0x99,
0x17, 0xbc, 0x08, 0x49, 0x96, 0x91, 0x64, 0x9e, 0x4f, 0xae, 0x4c, 0xd0,
0x8e, 0x63, 0x7c, 0xb7, 0x4f, 0x62, 0x7c, 0x6c, 0xec, 0xc8, 0x4a, 0x87,
0xc1, 0x37, 0x13, 0x50, 0xd5, 0x57, 0xbc, 0xf8, 0xa7, 0x93, 0x34, 0x61,
0x6a, 0xfa, 0x3a, 0xa5, 0x3b, 0xef, 0x24, 0xb0, 0x79, 0x9b, 0x1b, 0x38,
0x43, 0xa8, 0x01, 0xa1, 0xb3, 0x64, 0xce, 0x92, 0x7a, 0x4b, 0x92, 0x19,
0xce, 0xbf, 0xfb, 0x01, 0xc6, 0x0b, 0xe5, 0x20, 0x40, 0x34, 0xef, 0x2e,
0xc1, 0x61, 0x01, 0xe7, 0x0c, 0x81, 0x75, 0x84, 0x81, 0xcd, 0xad, 0x32,
0x0c, 0x88, 0x82, 0x80, 0xc0, 0x59, 0xc0, 0x90, 0x89, 0x27, 0x13, 0x4f,
0x3b, 0x49, 0x69, 0xa7, 0x29, 0x53, 0xf5, 0x69, 0xea, 0x33, 0x73, 0xa4,
0x59, 0x86, 0x48, 0x37, 0xfc, 0x47, 0x57, 0x02, 0x0f, 0xab, 0x1c, 0x6c,
0xfd, 0xe8, 0x47, 0xff, 0xf4, 0x6a, 0x18, 0x04, 0xdf, 0x29, 0x47, 0x21,
0xf7, 0x7e, 0xf9, 0x1e, 0x86, 0x36, 0xd5, 0x28, 0x87, 0x01, 0xa5, 0x30,
0x20, 0x28, 0xfc, 0x59, 0x54, 0xf1, 0xde, 0x93, 0x79, 0x21, 0xf3, 0x9e,
0xcc, 0xfb, 0xc2, 0x31, 0x84, 0x7c, 0x3f, 0x05, 0xd6, 0xe4, 0xbd, 0x4d,
0xe8, 0x2c, 0x81, 0x73, 0xc5, 0x2c, 0x1a, 0x34, 0x55, 0x52, 0x9f, 0xa7,
0x4b, 0x33, 0x4e, 0x69, 0xc4, 0x31, 0xd7, 0xa7, 0xa7, 0xf9, 0xf8, 0xe2,
0x38, 0xad, 0x38, 0xee, 0x27, 0x70, 0x66, 0x6c, 0xec, 0xc8, 0x9f, 0xaf,
0x46, 0x60, 0xc5, 0xa3, 0xc5, 0xd0, 0xd9, 0x9f, 0x66, 0x59, 0x7a, 0x28,
0x81, 0xda, 0xf8, 0xa5, 0xcb, 0x04, 0xf7, 0x04, 0xd8, 0xc1, 0x0d, 0x79,
0xd5, 0x0c, 0x43, 0x9c, 0xb3, 0x04, 0x06, 0x28, 0xaa, 0xa6, 0x14, 0xae,
0x24, 0xa2, 0xfd, 0xc7, 0x11, 0xf9, 0xce, 0xca, 0x80, 0x2d, 0xba, 0x4b,
0x63, 0x0c, 0x8a, 0xe2, 0x45, 0x0a, 0xf0, 0x19, 0xcd, 0x38, 0xa5, 0x19,
0xc7, 0x4c, 0xd5, 0xeb, 0x5c, 0xbc, 0x7c, 0x89, 0x38, 0xc9, 0xc8, 0xbc,
0xef, 0xb7, 0xce, 0xc3, 0xab, 0x81, 0x5f, 0x55, 0x01, 0x80, 0x1f, 0xfe,
0xe0, 0x1f, 0x9f, 0x35, 0xc6, 0xfe, 0x7d, 0x39, 0x8a, 0xa8, 0x56, 0xca,
0xec, 0xba, 0x67, 0x27, 0xb5, 0xc1, 0x41, 0x2a, 0x51, 0x58, 0x28, 0x61,
0x71, 0xd6, 0x62, 0xad, 0xe9, 0xd6, 0x99, 0x1c, 0x5e, 0x31, 0x0a, 0x19,
0x3a, 0x85, 0x5b, 0x35, 0x07, 0x9e, 0xf9, 0x3c, 0xd7, 0xf3, 0xc8, 0x27,
0x34, 0xe3, 0x84, 0x89, 0x2b, 0x57, 0xb9, 0x3a, 0x79, 0x8d, 0x76, 0x9c,
0x90, 0xa4, 0x69, 0x7f, 0xee, 0x3f, 0x33, 0x36, 0x76, 0xe4, 0xd8, 0xa7,
0x22, 0x00, 0xf0, 0xfd, 0x27, 0x8f, 0xbf, 0x16, 0x38, 0x77, 0xa8, 0x54,
0x90, 0xd8, 0xb9, 0x63, 0x07, 0x43, 0x1b, 0x7b, 0x24, 0xa2, 0x20, 0xc0,
0x15, 0x44, 0x3a, 0x3b, 0xaa, 0x6e, 0xfe, 0x14, 0xc5, 0x4e, 0x8a, 0xed,
0x63, 0x9e, 0x6a, 0xf9, 0x22, 0x6d, 0x27, 0x29, 0xad, 0x24, 0x61, 0x61,
0x69, 0x89, 0x8b, 0x13, 0x13, 0xcc, 0x2d, 0x2c, 0xd0, 0x8e, 0x13, 0x32,
0x9f, 0x91, 0xf9, 0x2e, 0xf8, 0x57, 0xc7, 0xc6, 0x8e, 0x7c, 0x77, 0x2d,
0xf0, 0x70, 0x8b, 0xd3, 0xe9, 0xc0, 0xb9, 0xc3, 0x71, 0x9a, 0x9e, 0x54,
0xd5, 0xbd, 0x22, 0x9e, 0xf3, 0x1f, 0x7d, 0xc4, 0xd6, 0xcd, 0xa3, 0xdc,
0xb1, 0x65, 0x94, 0x81, 0x52, 0x89, 0x28, 0xf4, 0x44, 0x81, 0x23, 0x74,
0x0e, 0x67, 0xf3, 0x0d, 0x48, 0xe7, 0x18, 0x44, 0xc9, 0x81, 0x7b, 0x2f,
0x64, 0x22, 0x24, 0x69, 0x56, 0xb8, 0x4c, 0xc6, 0x52, 0xb3, 0xc5, 0xb5,
0xa9, 0x49, 0xa6, 0xa6, 0xa7, 0x69, 0xb6, 0x13, 0x92, 0x34, 0xc9, 0xd7,
0x90, 0xdc, 0x1e, 0xf8, 0x5b, 0x2a, 0x00, 0xf0, 0xc3, 0xef, 0xff, 0x43,
0x2d, 0xc9, 0xb2, 0x93, 0x81, 0x73, 0x7b, 0xc3, 0xc0, 0x51, 0x0a, 0x43,
0x06, 0x2a, 0x65, 0xb6, 0x8c, 0x6c, 0x66, 0xb8, 0x56, 0xa3, 0x52, 0x2e,
0x11, 0x76, 0x17, 0x67, 0x4e, 0x00, 0xcd, 0xdb, 0x0d, 0xd1, 0x7c, 0xe3,
0x93, 0x7a, 0x4f, 0x92, 0x66, 0xcc, 0x2f, 0x2e, 0x32, 0x3b, 0x3f, 0xc7,
0xf4, 0xcc, 0x0c, 0xad, 0x38, 0x07, 0x9e, 0x66, 0x45, 0x95, 0xee, 0x55,
0xdc, 0x75, 0x83, 0x5f, 0x17, 0x01, 0x80, 0x1f, 0x3c, 0x79, 0xbc, 0x16,
0x27, 0xc9, 0x6b, 0xd6, 0xda, 0x87, 0xa2, 0xd0, 0x11, 0x06, 0x01, 0x61,
0x10, 0x10, 0x85, 0x21, 0x1b, 0x37, 0x6c, 0xa0, 0x3a, 0x50, 0x65, 0x43,
0x75, 0x80, 0x28, 0x8c, 0x70, 0x2e, 0x6f, 0xc8, 0xbc, 0xcf, 0x88, 0x93,
0x94, 0x76, 0xbb, 0xcd, 0x52, 0x63, 0x89, 0xf9, 0xc5, 0x45, 0xe2, 0x24,
0xa1, 0x9d, 0xa4, 0xa4, 0x59, 0xde, 0xd0, 0x79, 0x29, 0xda, 0x92, 0x3e,
0xbb, 0x1c, 0x1b, 0x3b, 0xf2, 0xd3, 0xf5, 0x82, 0x5f, 0x37, 0x81, 0xce,
0xf8, 0xee, 0xe1, 0x17, 0x8f, 0x1a, 0x63, 0x7e, 0xe2, 0xac, 0xc5, 0xb9,
0xbc, 0x38, 0x05, 0x85, 0xa7, 0xe7, 0x1b, 0x11, 0xd7, 0x4d, 0x21, 0xc8,
0x17, 0xac, 0x48, 0xc7, 0x66, 0xb3, 0xae, 0xdd, 0x8a, 0x48, 0x37, 0x5d,
0x8a, 0xdb, 0x8f, 0x03, 0x87, 0xc7, 0xc6, 0x8e, 0x9c, 0xba, 0x1d, 0xf0,
0xb7, 0x4d, 0x00, 0xe0, 0x89, 0x27, 0x5e, 0xd8, 0x6b, 0x8c, 0x79, 0xc5,
0x1a, 0x73, 0xc0, 0xd8, 0xde, 0xc6, 0xdb, 0x16, 0x95, 0xda, 0x16, 0xb6,
0xd3, 0x39, 0xd7, 0x14, 0x95, 0x6e, 0x94, 0x65, 0xd9, 0x49, 0x1d, 0x90,
0xf7, 0xf7, 0xaf, 0xdc, 0x6e, 0xd4, 0x3f, 0x13, 0x81, 0xce, 0x78, 0xfc,
0xf1, 0x9f, 0x3d, 0x64, 0x0c, 0x87, 0xad, 0xb1, 0x8f, 0x18, 0x63, 0x6a,
0xbd, 0x0d, 0x78, 0x6f, 0xc7, 0xd3, 0x01, 0x9c, 0xef, 0x25, 0x96, 0x01,
0x3f, 0x03, 0xbc, 0xc2, 0x2a, 0x0d, 0xda, 0xff, 0x0b, 0x81, 0xfe, 0xf1,
0xf8, 0xe3, 0x3f, 0x3b, 0x04, 0xec, 0x23, 0x3f, 0xf6, 0xd8, 0x59, 0xcc,
0xce, 0x98, 0x23, 0x07, 0x3c, 0x4e, 0xde, 0x0e, 0x9f, 0x1c, 0x1b, 0x3b,
0x72, 0xf1, 0x33, 0xdf, 0xb4, 0x18, 0x7f, 0xb2, 0xbf, 0xd4, 0x7f, 0x5e,
0xe3, 0x0b, 0xff, 0xcf, 0x1e, 0x5f, 0x78, 0x02, 0xff, 0x07, 0xe2, 0x1a,
0xeb, 0x6e, 0x4b, 0x67, 0x61, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
@@ -1,214 +0,0 @@
static const unsigned char toolbar_file_open_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, 0x87, 0x00, 0x00, 0x00,
0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b,
0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00,
0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
0x72, 0x65, 0x00, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20,
0x4d, 0x58, 0x20, 0x32, 0x30, 0x30, 0x34, 0x87, 0x76, 0xac, 0xcf, 0x00,
0x00, 0x00, 0x14, 0x74, 0x45, 0x58, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x39, 0x2f, 0x34,
0x2f, 0x30, 0x34, 0x79, 0x5e, 0xa3, 0xd5, 0x00, 0x00, 0x09, 0x40, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x99, 0x6b, 0x6c, 0x5b, 0xe5, 0x19,
0xc7, 0x7f, 0xc7, 0x97, 0x24, 0x4d, 0xda, 0x24, 0xae, 0xe3, 0xd8, 0x0d,
0x2d, 0x71, 0xc5, 0x56, 0x21, 0x40, 0x34, 0xd0, 0x31, 0x09, 0x6d, 0x12,
0x01, 0xa1, 0x49, 0x9b, 0x18, 0xec, 0xc3, 0x24, 0x3e, 0x82, 0x98, 0x60,
0x1b, 0x91, 0xa6, 0xa1, 0x49, 0x1b, 0xbb, 0x68, 0x21, 0x9a, 0xa6, 0x4d,
0x1a, 0xdb, 0x90, 0x36, 0x36, 0xb4, 0x0f, 0x5b, 0x87, 0xd8, 0x97, 0x7d,
0x21, 0x6c, 0x93, 0x26, 0x31, 0x09, 0x8a, 0xd6, 0x01, 0x83, 0x96, 0xa6,
0xd5, 0x68, 0x97, 0x40, 0x49, 0xda, 0x38, 0x8d, 0x6f, 0xc7, 0xb1, 0x8f,
0xe3, 0xbb, 0xfd, 0xbe, 0xfb, 0xf0, 0x9e, 0x9b, 0xed, 0xe3, 0xd4, 0xe5,
0x22, 0x86, 0xc4, 0x23, 0xbd, 0x3a, 0xc7, 0xc7, 0xf6, 0xf1, 0xff, 0xff,
0x7f, 0x6e, 0xef, 0x73, 0xac, 0x49, 0x29, 0xf9, 0x28, 0x9b, 0xef, 0xc3,
0x06, 0xf0, 0x5e, 0xed, 0x63, 0x02, 0x1f, 0xb6, 0x7d, 0x4c, 0xe0, 0xc3,
0xb6, 0x40, 0x3f, 0x1f, 0xfa, 0xd7, 0xaf, 0xb5, 0xb8, 0x90, 0xc4, 0x85,
0x20, 0x2e, 0x25, 0xea, 0x5c, 0x12, 0x97, 0x92, 0xc3, 0x42, 0x30, 0x2e,
0x25, 0x4b, 0x42, 0xb2, 0xf0, 0x85, 0xef, 0xc8, 0xc5, 0x0f, 0x1a, 0x70,
0xa7, 0x69, 0x9d, 0x65, 0xf4, 0xf5, 0xa7, 0xb4, 0xfb, 0x25, 0xcc, 0x4a,
0x05, 0x70, 0xda, 0x04, 0x8a, 0x90, 0x20, 0x04, 0xd8, 0xe7, 0x12, 0xa4,
0x70, 0x9d, 0xab, 0xe3, 0xed, 0x77, 0x3d, 0x2a, 0x8f, 0xf5, 0xf3, 0xc3,
0x4f, 0x7f, 0x4f, 0x9b, 0x11, 0x92, 0x19, 0x21, 0x89, 0x9b, 0xf7, 0x39,
0xf6, 0xe0, 0xcf, 0xfa, 0xfb, 0x6e, 0x4f, 0x02, 0xff, 0xfe, 0xad, 0x76,
0x0a, 0x98, 0x01, 0x07, 0xa8, 0x34, 0xd7, 0x68, 0x6c, 0x9a, 0x91, 0xd0,
0x04, 0x23, 0xa1, 0x30, 0x43, 0x23, 0xc3, 0x8c, 0x47, 0x23, 0x20, 0xea,
0xa4, 0xd7, 0xde, 0xe1, 0xcc, 0x3f, 0x5f, 0xa5, 0x56, 0x6b, 0x20, 0x05,
0x4f, 0xdc, 0xf5, 0x5d, 0xf9, 0x48, 0xe7, 0x8f, 0xfc, 0xf9, 0x31, 0x6d,
0xd6, 0x14, 0x62, 0x46, 0x08, 0x66, 0x84, 0xe4, 0x36, 0x17, 0x69, 0xb7,
0x30, 0x0b, 0x5f, 0x7d, 0x5c, 0x3e, 0xf6, 0xae, 0x08, 0xbc, 0xfc, 0xa4,
0x76, 0x1f, 0x70, 0x54, 0x03, 0x24, 0xb0, 0xef, 0xc6, 0x59, 0xc6, 0xf6,
0x1d, 0x64, 0x38, 0x34, 0xc9, 0xd0, 0xc8, 0x08, 0x88, 0xba, 0x5a, 0xb2,
0xe1, 0x9c, 0x8b, 0x3a, 0x88, 0x06, 0x6f, 0xbd, 0xb1, 0xc4, 0xca, 0xa9,
0xb3, 0x08, 0xc9, 0x92, 0x94, 0x3c, 0x22, 0x4c, 0xa0, 0x52, 0x72, 0x58,
0x48, 0x66, 0xdc, 0x40, 0x2d, 0xe0, 0xe3, 0x63, 0x3e, 0xa2, 0x11, 0x08,
0xfa, 0x05, 0x2b, 0xab, 0x60, 0x6c, 0xdb, 0x9f, 0x39, 0xf8, 0xf5, 0x5f,
0xc8, 0x35, 0x4e, 0x6a, 0xdd, 0x68, 0x8f, 0x74, 0x37, 0x5d, 0x3b, 0x07,
0x84, 0x20, 0x8e, 0x06, 0x1a, 0x70, 0xed, 0xe7, 0x1f, 0x22, 0x1c, 0xbf,
0xde, 0x04, 0x6b, 0x2e, 0xcb, 0x3c, 0x3a, 0xf7, 0xde, 0x58, 0x04, 0xf3,
0xea, 0x8c, 0x94, 0xbc, 0x68, 0x7d, 0x44, 0xba, 0xbe, 0x32, 0x3c, 0x1c,
0x60, 0x72, 0x72, 0x80, 0xc9, 0x89, 0x00, 0xfb, 0xa7, 0x34, 0x06, 0xfc,
0xa6, 0x10, 0x52, 0x70, 0xd3, 0xf5, 0xf0, 0xb7, 0x17, 0x60, 0x23, 0x09,
0xc0, 0x7d, 0x9c, 0xd4, 0x16, 0x3c, 0xe5, 0x76, 0x93, 0x32, 0xc9, 0x38,
0x04, 0xa4, 0xfa, 0xc5, 0xe0, 0xe0, 0x2e, 0xc2, 0xd3, 0xd7, 0x2a, 0xf0,
0xb2, 0xe5, 0x2c, 0x84, 0xb9, 0x5c, 0x71, 0x65, 0xc2, 0x0c, 0xc7, 0x26,
0xec, 0x4b, 0xd6, 0xd5, 0xc0, 0x80, 0x9f, 0x89, 0xc8, 0x6e, 0xa6, 0xf6,
0xef, 0x21, 0x12, 0x09, 0x32, 0xb2, 0x4b, 0x9a, 0x62, 0xd4, 0xcd, 0x63,
0x3b, 0xb6, 0x1b, 0x0e, 0x41, 0x42, 0x11, 0x88, 0x7b, 0x61, 0xff, 0xf9,
0xef, 0x19, 0x37, 0xbd, 0xba, 0xf4, 0xed, 0x07, 0xc9, 0x73, 0x52, 0x83,
0x23, 0xb2, 0xcd, 0x03, 0x79, 0x34, 0xa8, 0x55, 0x2b, 0xea, 0x47, 0x10,
0x2a, 0x4b, 0x65, 0xd3, 0x45, 0xc4, 0xbc, 0x66, 0x91, 0x91, 0xc2, 0x26,
0x33, 0x1a, 0x1a, 0x65, 0xd7, 0xc8, 0x10, 0xe1, 0xe8, 0x18, 0x13, 0x91,
0xdd, 0x8c, 0x8d, 0x07, 0x5d, 0x80, 0xcd, 0xd0, 0x43, 0x76, 0x2c, 0xc7,
0xa6, 0x26, 0x6d, 0xaf, 0xc5, 0x01, 0x7e, 0xf5, 0x34, 0xb3, 0x66, 0xf8,
0xcd, 0x06, 0x02, 0x1c, 0x09, 0x8f, 0xb2, 0xbf, 0x56, 0x87, 0x7c, 0x89,
0xfc, 0x4f, 0x7f, 0xc7, 0xed, 0x8f, 0x3e, 0xc4, 0x52, 0xa7, 0x07, 0x96,
0xec, 0x7b, 0x8a, 0x9a, 0xa9, 0xb4, 0x30, 0x81, 0x37, 0x41, 0x34, 0xbd,
0xc9, 0x98, 0xde, 0xb9, 0xed, 0xee, 0xcf, 0x3a, 0xe1, 0x66, 0x03, 0xf6,
0xf0, 0x9a, 0x74, 0x13, 0x70, 0xdc, 0x30, 0x30, 0x60, 0xbf, 0x35, 0xfb,
0x9b, 0x67, 0x90, 0x7b, 0x86, 0x61, 0x78, 0x10, 0x76, 0x8f, 0x40, 0xd0,
0x0f, 0x43, 0xbb, 0x86, 0x08, 0x85, 0xc6, 0xb8, 0xb0, 0xb1, 0x3d, 0x7e,
0x66, 0xb9, 0xf4, 0x2c, 0x70, 0xb0, 0x9d, 0x80, 0xcb, 0xa5, 0x5b, 0x89,
0x15, 0x42, 0x53, 0xd3, 0x2e, 0x90, 0x6e, 0xf0, 0x1d, 0x47, 0x2c, 0x92,
0xb2, 0xa7, 0x77, 0x1c, 0xb0, 0x5e, 0x64, 0x94, 0x19, 0x45, 0x18, 0x1b,
0x81, 0x91, 0x5d, 0x30, 0x32, 0x04, 0x03, 0x83, 0x03, 0x84, 0x26, 0x22,
0x84, 0xc2, 0x21, 0xc2, 0x93, 0x61, 0x76, 0x0d, 0x05, 0xa8, 0x94, 0x8b,
0xb4, 0xb8, 0xc8, 0x99, 0xe5, 0x52, 0xfc, 0xc7, 0x4f, 0x71, 0xcf, 0xf7,
0xbf, 0xa6, 0x3d, 0x67, 0x13, 0xb8, 0xf3, 0x5b, 0xf2, 0xa5, 0xe7, 0x1f,
0x57, 0x49, 0x22, 0x5b, 0x0d, 0x68, 0xd5, 0x4c, 0x20, 0xd2, 0xa5, 0x7a,
0xd3, 0xe5, 0x0d, 0xf3, 0x9a, 0xfb, 0xbc, 0x87, 0x77, 0x9c, 0x6b, 0x0e,
0xc9, 0x46, 0x43, 0x90, 0x4c, 0x49, 0xf4, 0x1c, 0xa4, 0x33, 0xd0, 0x12,
0x70, 0x30, 0x1e, 0x25, 0x1c, 0xbd, 0x8a, 0xc9, 0xa9, 0x29, 0xc6, 0x43,
0x63, 0x20, 0xca, 0x14, 0x72, 0x9b, 0x5c, 0xba, 0xb0, 0x4a, 0x7a, 0x33,
0x4d, 0xb9, 0x54, 0xa5, 0xde, 0xb4, 0x83, 0x6f, 0x16, 0x78, 0xae, 0xad,
0x13, 0x5b, 0x5e, 0xc8, 0x25, 0xd6, 0xd8, 0x1b, 0x8b, 0x7a, 0x10, 0xe8,
0x24, 0xd1, 0xf0, 0x00, 0xdf, 0x91, 0xf8, 0x2e, 0xef, 0xe8, 0x7a, 0x8d,
0xe4, 0x66, 0x05, 0x5d, 0x6f, 0x62, 0x18, 0x82, 0xe0, 0xe0, 0x08, 0xb1,
0xe9, 0x9b, 0xb9, 0xfe, 0x93, 0xd3, 0x4c, 0x1e, 0xb8, 0x86, 0xa0, 0xaf,
0x4e, 0xa5, 0x78, 0x89, 0x42, 0xf6, 0x3c, 0xe7, 0xde, 0x39, 0x45, 0x31,
0x9f, 0xa6, 0xd5, 0x6c, 0x20, 0x24, 0xb4, 0x5a, 0xe0, 0xf3, 0x81, 0x51,
0xb2, 0x9d, 0x37, 0xd3, 0x16, 0x42, 0x76, 0x1e, 0xc0, 0x4c, 0xbd, 0x5a,
0xee, 0xc8, 0x03, 0xe1, 0x01, 0xb0, 0xe1, 0xe4, 0x45, 0x57, 0x7e, 0xa8,
0x55, 0x2e, 0x55, 0x49, 0x25, 0x0c, 0xf4, 0x4c, 0x19, 0x5d, 0xaf, 0xd2,
0x68, 0x48, 0xc2, 0x57, 0xdd, 0xc4, 0x81, 0x1b, 0x6f, 0x25, 0x3c, 0x75,
0x88, 0xd1, 0xbd, 0x53, 0x20, 0x4a, 0xe4, 0x36, 0x4e, 0x71, 0xfe, 0xf4,
0x3f, 0x30, 0xb2, 0x6f, 0x53, 0x29, 0xa6, 0x09, 0x04, 0xc0, 0xef, 0x57,
0x80, 0xfd, 0x7e, 0x47, 0x47, 0x21, 0x60, 0x33, 0x67, 0x27, 0x3b, 0xdd,
0x04, 0x04, 0x79, 0x80, 0x42, 0x26, 0xa3, 0x08, 0x58, 0xf1, 0x6b, 0xc5,
0x76, 0x57, 0xd8, 0x58, 0x1e, 0x50, 0x04, 0x1a, 0xb5, 0x1a, 0x7a, 0x7a,
0x0b, 0x3d, 0x65, 0x90, 0xda, 0x28, 0x50, 0x2e, 0x37, 0x18, 0x1e, 0x3b,
0x40, 0xf4, 0x9a, 0xbb, 0x39, 0xfc, 0xe9, 0x9b, 0x09, 0x4f, 0xdd, 0x40,
0x30, 0x18, 0xa0, 0x5c, 0x58, 0x43, 0x5f, 0x7f, 0x9d, 0x95, 0xd7, 0x9e,
0x41, 0xdf, 0x7c, 0x13, 0xd9, 0xaa, 0x10, 0xf0, 0x43, 0x20, 0x80, 0x0d,
0xde, 0xef, 0x53, 0x04, 0xac, 0x54, 0x11, 0x1a, 0x54, 0x6b, 0x50, 0xae,
0xda, 0xd7, 0x16, 0xbd, 0x3c, 0xb0, 0x06, 0x50, 0xab, 0xd5, 0xcc, 0x1c,
0xa0, 0x3d, 0x8c, 0x3c, 0x48, 0x18, 0xb9, 0x3c, 0x7a, 0x32, 0x47, 0x32,
0xa1, 0xa3, 0xa7, 0x0d, 0x82, 0x83, 0x63, 0x84, 0xa7, 0x6f, 0xe7, 0xe0,
0xad, 0x9f, 0x21, 0x7a, 0xcd, 0x9d, 0x0c, 0x8f, 0x46, 0x40, 0x54, 0x30,
0x52, 0xa7, 0x58, 0x3d, 0xf5, 0x27, 0x92, 0xe7, 0x5f, 0xc4, 0xc8, 0x9e,
0x07, 0x40, 0xd3, 0xd4, 0x0a, 0x98, 0x6a, 0xfb, 0x7c, 0x0a, 0xb8, 0xdf,
0x54, 0x5e, 0xd3, 0x1c, 0xe5, 0x01, 0x2e, 0xe9, 0xb8, 0x7b, 0xcd, 0xb1,
0x2e, 0x02, 0x2d, 0xa1, 0x08, 0x6c, 0x65, 0xf2, 0x66, 0x2f, 0xb0, 0x3c,
0xd0, 0x4d, 0x60, 0xfd, 0xed, 0x0d, 0x4e, 0xbf, 0x72, 0x0e, 0x80, 0xd1,
0xc8, 0x75, 0x84, 0xaf, 0xbe, 0x97, 0x43, 0x77, 0x7c, 0x91, 0xf0, 0xd5,
0xb3, 0xa0, 0x69, 0x34, 0xaa, 0x59, 0x92, 0xcb, 0x8b, 0xac, 0x5c, 0x3c,
0x4e, 0xf2, 0xfc, 0xf3, 0x34, 0x6b, 0x45, 0xbc, 0xcc, 0xa7, 0x81, 0xe6,
0x73, 0x08, 0xb8, 0x17, 0x38, 0x85, 0xaa, 0xd9, 0x82, 0x4c, 0xde, 0x56,
0x7f, 0xed, 0x87, 0x0f, 0x73, 0xda, 0xcb, 0x03, 0x79, 0xeb, 0xbc, 0x51,
0xdd, 0x26, 0x38, 0x10, 0xf0, 0x0c, 0x23, 0x23, 0x67, 0x70, 0xfa, 0x95,
0x73, 0x1c, 0xb8, 0xee, 0x2e, 0x0e, 0x7f, 0xee, 0x27, 0xe0, 0x1b, 0x04,
0x6d, 0x10, 0x23, 0xb3, 0xcc, 0xca, 0xf1, 0x05, 0x92, 0x6f, 0xfd, 0x1d,
0x23, 0x73, 0xd6, 0x13, 0xb0, 0x65, 0x96, 0xfa, 0x9a, 0x66, 0x92, 0xd0,
0xda, 0xc1, 0x5b, 0xea, 0x5b, 0x2b, 0x67, 0x28, 0x12, 0x12, 0xc0, 0x0c,
0x9f, 0xb6, 0x4e, 0x0c, 0x20, 0x84, 0xea, 0x6e, 0x00, 0xf9, 0x8c, 0x4e,
0x64, 0x5f, 0xc8, 0x24, 0x20, 0x5c, 0xc7, 0x16, 0xc9, 0xf5, 0x34, 0xa3,
0x91, 0x4f, 0x70, 0xf8, 0xce, 0x1f, 0x80, 0x6c, 0xd0, 0xa8, 0x6c, 0x73,
0xe2, 0xaf, 0xdf, 0x40, 0x4f, 0xbc, 0xbe, 0x23, 0x68, 0x4f, 0x12, 0xbe,
0xf6, 0xf0, 0xb1, 0xc0, 0x5b, 0x66, 0x6d, 0x04, 0xd7, 0x93, 0x2e, 0x42,
0x70, 0xd4, 0x7a, 0xdf, 0xb3, 0x8c, 0x02, 0xd4, 0xab, 0xd5, 0xee, 0x3c,
0xb0, 0x09, 0xe8, 0xc4, 0x0e, 0x7d, 0x19, 0xa4, 0x0a, 0xb3, 0x13, 0x7f,
0x99, 0x43, 0xdf, 0x78, 0xe3, 0xca, 0xc1, 0x9b, 0xea, 0x5b, 0xe0, 0x35,
0x9f, 0xe3, 0x0d, 0xc0, 0x9e, 0x37, 0xb6, 0xcb, 0x60, 0x94, 0x6d, 0x02,
0xf9, 0xf9, 0x39, 0x15, 0x3e, 0xd0, 0x31, 0x52, 0xde, 0xbb, 0x20, 0x5f,
0xb2, 0x06, 0x94, 0x9c, 0x95, 0x07, 0xa2, 0xe6, 0x1c, 0x5b, 0x35, 0xca,
0xc5, 0x6d, 0x8c, 0x7c, 0x99, 0x58, 0xfc, 0x16, 0x10, 0x55, 0xd6, 0xdf,
0x7c, 0xf6, 0xdd, 0x81, 0xc7, 0x01, 0xef, 0x73, 0x85, 0x8f, 0xe6, 0x8a,
0x7d, 0x6b, 0x68, 0xda, 0xd4, 0xcd, 0x6c, 0x54, 0xf9, 0x60, 0x87, 0x0f,
0x78, 0x8c, 0x94, 0x96, 0x17, 0xea, 0xd5, 0xba, 0xab, 0x17, 0x38, 0x79,
0x90, 0x4a, 0xe4, 0x18, 0xde, 0x13, 0x61, 0x74, 0xef, 0x3e, 0x10, 0x65,
0x56, 0x5e, 0x3b, 0x7a, 0xe5, 0xe0, 0x5d, 0xa1, 0xe3, 0xf7, 0x3b, 0x35,
0xbf, 0x4d, 0x7d, 0xb3, 0xfa, 0xb4, 0x04, 0x6c, 0x64, 0xda, 0xaa, 0x4f,
0xdb, 0xd8, 0xda, 0x35, 0xd4, 0x0b, 0x35, 0xdf, 0x92, 0xd5, 0x4b, 0x2e,
0xf5, 0x1d, 0x4f, 0xac, 0xaf, 0xe5, 0x89, 0x4e, 0xcf, 0x80, 0xac, 0xa0,
0x27, 0x4e, 0x50, 0x29, 0xa6, 0xfb, 0x03, 0xac, 0xb5, 0xc7, 0xba, 0x55,
0xf7, 0x2d, 0x02, 0x16, 0x09, 0x0d, 0x47, 0x33, 0x21, 0x20, 0xa5, 0x43,
0xa3, 0xe9, 0x54, 0xa3, 0xf9, 0x39, 0x9e, 0x73, 0xdf, 0xdf, 0xcb, 0x03,
0x79, 0x80, 0x5a, 0xb5, 0x69, 0xee, 0x2a, 0x9d, 0xdd, 0x63, 0xb9, 0xd4,
0xc0, 0x28, 0xd4, 0x98, 0xb9, 0xe3, 0x16, 0x10, 0x65, 0xd6, 0x97, 0x5f,
0xe8, 0x09, 0xba, 0x8b, 0x80, 0xeb, 0xdc, 0xe7, 0x77, 0x6a, 0x7d, 0xa7,
0xfa, 0x12, 0xd7, 0xf4, 0x26, 0x20, 0x91, 0x75, 0xc0, 0xd3, 0x11, 0x3e,
0xde, 0x04, 0x24, 0x6b, 0x12, 0xc8, 0xea, 0xf5, 0xae, 0x24, 0x4e, 0x5d,
0x2a, 0x31, 0xbc, 0x3b, 0xc4, 0x68, 0x68, 0x2f, 0x8d, 0x4a, 0x96, 0xc4,
0xca, 0xcb, 0x3b, 0x83, 0x76, 0x03, 0xf7, 0x75, 0x24, 0xad, 0x5f, 0x79,
0xc1, 0x56, 0xde, 0x1d, 0xfb, 0x42, 0xed, 0x7d, 0xca, 0x55, 0xc8, 0x15,
0xda, 0xe0, 0x75, 0x3d, 0xf5, 0xe8, 0x22, 0x60, 0x35, 0x33, 0x80, 0xa2,
0x51, 0x61, 0xcf, 0x6e, 0x1f, 0x96, 0x4f, 0xf5, 0x6c, 0x85, 0xe8, 0x81,
0x9b, 0x41, 0x94, 0x48, 0xac, 0xbc, 0x7a, 0x45, 0xa0, 0xbd, 0xc2, 0xc8,
0xef, 0xea, 0xc0, 0x16, 0x78, 0x29, 0x9c, 0xd8, 0xbf, 0x98, 0xea, 0x44,
0xc7, 0x62, 0xe7, 0x5c, 0xdc, 0x33, 0x84, 0x14, 0x81, 0x2a, 0x7b, 0x86,
0xfd, 0x20, 0x25, 0x8d, 0x86, 0x24, 0x99, 0x6c, 0xf0, 0xa9, 0x6b, 0x63,
0x20, 0xb6, 0x59, 0x3d, 0xfb, 0x72, 0x5f, 0xa0, 0xad, 0xba, 0xde, 0x59,
0x36, 0xed, 0xe5, 0x4a, 0x5a, 0xa4, 0x02, 0xde, 0x32, 0x49, 0xe4, 0xda,
0x9b, 0xf7, 0xe2, 0xfc, 0x1c, 0xed, 0xfe, 0xf0, 0x24, 0x20, 0x9d, 0x66,
0x56, 0x2c, 0xd6, 0x61, 0x52, 0x11, 0x48, 0x25, 0x5b, 0x0c, 0x0c, 0x0e,
0x10, 0x9b, 0x8a, 0x92, 0xbb, 0xf4, 0x5f, 0xea, 0xd5, 0x82, 0xda, 0xaf,
0xd0, 0x5b, 0xe9, 0xce, 0x4e, 0xdb, 0xf6, 0x9e, 0x0b, 0x3c, 0x66, 0x85,
0xb1, 0x42, 0xa7, 0xd5, 0x84, 0xcd, 0xac, 0xaa, 0xff, 0x6d, 0xea, 0x7b,
0x58, 0xcf, 0x32, 0x0a, 0x60, 0x18, 0x4d, 0x75, 0x37, 0x24, 0xa9, 0x34,
0xc4, 0xf6, 0x1f, 0x04, 0x61, 0x70, 0x69, 0xed, 0x3f, 0xf6, 0x66, 0xab,
0x5f, 0xd0, 0xee, 0x65, 0x3d, 0xfd, 0xb0, 0x92, 0xd3, 0x9d, 0xb4, 0xad,
0x16, 0xac, 0xa7, 0x60, 0x79, 0xbd, 0x0d, 0xd6, 0xda, 0xfc, 0x1c, 0x7f,
0xf4, 0x7a, 0xac, 0xd2, 0x55, 0x46, 0x1f, 0xfe, 0xa5, 0xd3, 0xcc, 0x0a,
0xdb, 0xca, 0xaf, 0x8d, 0x26, 0x64, 0xb2, 0x10, 0xdb, 0x17, 0xa6, 0x51,
0xdb, 0x22, 0x99, 0x58, 0xb5, 0x4b, 0xa1, 0xbf, 0x63, 0x1b, 0x1c, 0x70,
0x25, 0x67, 0x57, 0x89, 0x74, 0x77, 0x58, 0x13, 0x6c, 0xb3, 0xa9, 0xca,
0x64, 0xa9, 0xac, 0xea, 0xfd, 0xf1, 0x33, 0x5d, 0xe0, 0x01, 0x1e, 0xf3,
0x52, 0xdf, 0xd3, 0x03, 0x96, 0x17, 0x24, 0x90, 0x37, 0xd4, 0xeb, 0x54,
0x1a, 0x82, 0x03, 0x01, 0x26, 0xa3, 0xbb, 0x59, 0x5f, 0x7d, 0xdb, 0xde,
0xb3, 0xb8, 0x37, 0x5e, 0x9d, 0x8a, 0x43, 0x7b, 0x53, 0xb2, 0x8e, 0x56,
0x43, 0x6a, 0x36, 0x21, 0xb3, 0x05, 0xa9, 0x1c, 0xa4, 0xb6, 0x7a, 0xc1,
0x03, 0xe0, 0x58, 0x2f, 0xf5, 0x7b, 0x13, 0x90, 0x2c, 0x49, 0x98, 0x29,
0x6c, 0xab, 0xd7, 0xe9, 0x2c, 0x44, 0x63, 0x63, 0x20, 0x8a, 0x24, 0x2e,
0xac, 0xb7, 0x55, 0x0f, 0x37, 0x81, 0x4e, 0x73, 0xef, 0x26, 0xa5, 0x84,
0x46, 0x0b, 0xf4, 0xbc, 0x09, 0x3a, 0xe7, 0x4c, 0x55, 0x3b, 0xd8, 0x12,
0xf0, 0xa5, 0x9d, 0x3e, 0xe0, 0x49, 0xa0, 0x65, 0x56, 0x22, 0xcb, 0x03,
0x19, 0x1d, 0x6e, 0x3a, 0x32, 0x4c, 0x3e, 0x9b, 0xa1, 0x5e, 0xab, 0xb7,
0x4d, 0x4c, 0x6e, 0xc5, 0xc1, 0xde, 0xee, 0x3a, 0x93, 0x94, 0x84, 0x74,
0x0e, 0xd2, 0x5b, 0x0e, 0xe8, 0x3e, 0xff, 0x96, 0x3b, 0x0a, 0x7c, 0x73,
0x7e, 0x8e, 0x42, 0x2f, 0xf5, 0x7b, 0x12, 0x10, 0xae, 0x5e, 0x70, 0x71,
0x43, 0x25, 0xdc, 0xe4, 0x84, 0xc6, 0xb9, 0x73, 0xba, 0xb3, 0x5f, 0xe9,
0xd8, 0xf2, 0xba, 0x81, 0x0b, 0x09, 0x7a, 0xc1, 0x0c, 0x91, 0x2d, 0x15,
0xe3, 0x56, 0xa5, 0xb9, 0x8c, 0xad, 0xa1, 0xaa, 0xcd, 0x13, 0xf3, 0x73,
0x5c, 0x00, 0x3c, 0x9f, 0x87, 0x5e, 0x9e, 0x80, 0x74, 0x08, 0x54, 0xeb,
0x10, 0x0a, 0x05, 0x41, 0x94, 0x49, 0x6e, 0x96, 0xf0, 0xfb, 0x5d, 0x0d,
0xc7, 0x45, 0x44, 0x4a, 0x15, 0x1e, 0x99, 0xbc, 0x02, 0xdd, 0x6c, 0xf6,
0xad, 0xf6, 0x12, 0x6a, 0x3c, 0x3c, 0x6a, 0x6f, 0x93, 0x2f, 0x03, 0xfa,
0xf2, 0x04, 0x5c, 0x1e, 0x38, 0xb3, 0x02, 0xf1, 0x58, 0x8b, 0x2d, 0xbd,
0x68, 0x97, 0x58, 0x29, 0x41, 0x9a, 0xe0, 0xb7, 0x0c, 0xc8, 0x16, 0xda,
0x41, 0xf7, 0xa1, 0xf6, 0x12, 0x2a, 0x44, 0x16, 0xfb, 0x55, 0xfa, 0xca,
0x08, 0xa8, 0x91, 0x2d, 0x0f, 0x8c, 0x2f, 0xaf, 0x42, 0x36, 0x2b, 0x88,
0x4d, 0xd6, 0xd4, 0x03, 0x60, 0x01, 0x5b, 0x45, 0xd0, 0x0d, 0xa5, 0x76,
0xb3, 0xd5, 0x17, 0x60, 0x50, 0xa1, 0xb1, 0x88, 0xaa, 0x2a, 0xef, 0x09,
0xb4, 0xdb, 0xba, 0xfe, 0xa1, 0xb1, 0xec, 0x47, 0x5f, 0xd1, 0xee, 0x91,
0x5e, 0xdd, 0xaf, 0x3f, 0xb0, 0xa0, 0x04, 0x58, 0x44, 0x85, 0x87, 0xb3,
0x0d, 0x78, 0x1f, 0x40, 0xbb, 0xad, 0x27, 0x01, 0x80, 0x85, 0x07, 0xb4,
0x79, 0x76, 0x68, 0x22, 0x1e, 0x66, 0x81, 0x5e, 0x6c, 0xdb, 0xb7, 0xbf,
0xcf, 0xa0, 0xdd, 0xb6, 0x23, 0x01, 0x4e, 0x6a, 0x2c, 0x3c, 0xc9, 0x1f,
0x80, 0xfb, 0x77, 0xb8, 0xc7, 0x1a, 0x0a, 0xf4, 0x51, 0xf7, 0xac, 0xfa,
0x41, 0x82, 0x76, 0xdb, 0xce, 0x04, 0x4c, 0x5b, 0x78, 0x40, 0xbb, 0x8f,
0xf6, 0x3f, 0x1e, 0xf2, 0xa8, 0x44, 0xcc, 0xbf, 0x9b, 0xca, 0xf1, 0x7e,
0x5a, 0x5f, 0x04, 0xfe, 0x9f, 0xed, 0x23, 0xff, 0x47, 0xf7, 0x47, 0x9e,
0xc0, 0xff, 0x00, 0x3b, 0x1c, 0x36, 0x87, 0xb9, 0x4b, 0x27, 0xd9, 0x00,
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
@@ -1,141 +0,0 @@
/* XPM */
static const char *toolbar_file_open_xpm[] = {
/* columns rows colors chars-per-pixel */
"48 48 87 1",
" c #B09454",
". c #B69B5C",
"X c #BA9F5E",
"o c #BFA45D",
"O c #B59A65",
"+ c #BEA263",
"@ c #BDA269",
"# c #C2A551",
"$ c #C5A955",
"% c #C9AE57",
"& c #C2A65D",
"* c #C5A95E",
"= c #C8AC5B",
"- c #CDB25C",
"; c #D1B45F",
": c #C6AB60",
"> c #CBAF64",
", c #C4A96A",
"< c #CBB165",
"1 c #CDB36D",
"2 c #D2B661",
"3 c #D6B962",
"4 c #DABD65",
"5 c #D4B86F",
"6 c #C4AF79",
"7 c #D0B971",
"8 c #D2B978",
"9 c #DEC167",
"0 c #DFC272",
"q c #DEC37A",
"w c #E6C265",
"e c #E3C46A",
"r c #E7C86C",
"t c #EACC6E",
"y c #FBD465",
"u c #FAD56C",
"i c #FDD96F",
"p c #E5C772",
"a c #E6C975",
"s c #EECF70",
"d c #E6CB7A",
"f c #E9CE7D",
"g c #EFD071",
"h c #F4D474",
"j c #FAD771",
"k c #FAD976",
"l c #F6D778",
"z c #F7DA7B",
"x c #FADB7B",
"c c #FEE07D",
"v c #DCCC8E",
"b c #DECE91",
"n c #DFD099",
"m c #E7CD81",
"M c #EAD284",
"N c #EAD48B",
"B c #F7DB83",
"V c #FBDE83",
"C c #F4DD8E",
"Z c #E1D395",
"A c #EBD791",
"S c #EBD995",
"D c #E6D89C",
"F c #ECDC9C",
"G c #F6DF90",
"H c #FBE086",
"J c #FBE28B",
"K c #FFE98E",
"L c #F7E091",
"P c #FCE592",
"I c #FFE995",
"U c #FCEA9B",
"Y c #ECDFA2",
"T c #ECE0A5",
"R c #ECE1A8",
"E c #FDEEA3",
"W c #FDEFA8",
"Q c #FFF1A5",
"! c #FEF2AC",
"~ c #F6EEB9",
"^ c #FEF4B2",
"/ c #FFF9B7",
"( c #FFF6BA",
") c #FFF8BD",
"_ c #FFFBC3",
"` c #FFFEC9",
"' c None",
/* pixels */
"'''''''''''''''''''''''''''''''''''''. 6''''''''",
"'''''''''''''''''''''''''''''.Xo&&=$#*b_`'''''''",
"'''''''''''''''''''''+:><2222----%$<v~`__'''''''",
"''''''''''''',150ashgttre943;--%$1Z(`____'''''''",
"'''''''''''qVHHHcxxlhtree4322-%7D)`______'''''''",
"''''''''''OJHVVxxxkhhtree432;<D___)))))))'''''''",
"''''''''''@JHVVxxxkhhtree443=n`))))))))))'''''''",
"''''''''''@JHVVxxxkhhtree443*R_))))))))))'''''''",
"''''''''''@JHVVxxxkhhtree443*R)(((((((((('''''''",
"''''''''''@JHVVxxxkhhtrre943*T)(((((((((('''''''",
"''''''''''@JHVVxxxkhhtrre943*Y/^^^^^^^^^^'''''''",
"''''''''''@JHVVxxxkhhtrre943*Y/^^^^^^^^^^'''''''",
"''''''''''@JHVVxxxxlhstre943*F^^^^^^^^^^^'''''''",
"''''''''''@JHVVxxxxlhstre943:F^!!!!!!!!!!'''''''",
"''''''''''@JHVVxxxxlhstre943*F!!!!!!!!!!!'''''''",
"''''''''''@JHVVxxxxlhstre943*S!WWWWWWWWWW'''''''",
"''''''''''@JHVVxxxxlhstre943:SQEEEEEEEEEE'''''''",
"''''''''''@JHVVxxxxlhstre943:SQEEEEEEEEEE'''''''",
"''''''''''@JHVVVxxxlhstre943*SQEEEEEEEEEE'''''''",
"''''''''''@JHVVVxxxlhstre943:AEUUUUUUUUUU'''''''",
"''''''''''@JHVVVxxxlhstre943:NUUUUUUUUUUU'''''''",
"''''''''''@JHVVVxxxlhstre943:NUUUUUUUUUUU'''''''",
"''''''''''@JHVVVxxxlhstre943:NUUUUUUUUUUU'''''''",
"''''''''''@JHVVVxxxlhstre943:NIIIIIIIIIII'''''''",
"''''''''''@JHVVVxxxkhgtree43:NIPPPPPPPPPP'''''''",
"''''''''''@JHVVVxxxkhgtree43:MIPPPPPPPPPP'''''''",
"''''''''''@JHVVVxxxkhgtree43:MPJJJJJJJJJJ'''''''",
"''''''''''@JHVVVxxxkhgtree43:MKJJJJJJJJJJ'''''''",
"'''''''''@mJHVVVxxxkhgtree43=qKJJJJJJJJJJ'''''''",
"''''''''8PPJHVVVxxxkhhtree432>fHJJJJJJJJJ'''''''",
"''''''''CPJJHVVVxxxkhhtree432;&fHHHHHHHHH'''''''",
"'''''''OLPJJHVVVxxxkhhtree432;*dHVVVVVVVV'''''''",
"'''''''OLPJJHVVVxxxkhhtree432;*dHVVVVVVVV'''''''",
"'''''''OLPJJHVVVxxxkhhtree432;*aHxxxxxxxx'''''''",
"'''''''OLPJJHVVVxxxkhhtree432;*axxxxxxxxx'''''''",
"'''''''OLPJJJHVVxxxkhhtrre4432*pxxxxxxxxx'''''''",
"'''''''OLPJJJHVVxxxkhhtrre4432*pxxxxxxxxx'''''''",
"'''''''OLPJJJHVVxxxkhhtrre4432*pkkkkkkkkk'''''''",
"'''''''OGPJJJHVVxxxkhhtrre9432*rkkkkkkkkk'''''''",
"'''''''OGPJJJHVVxxxkhhtrre9432*ekjjjjjjj''''''''",
"'''''''OGPJJJHVVxxxkhhttre9432*ejjjjjjjj''''''''",
"'''''''OGPJJJHVVxxxkhhttre9432*eiuuuuuu'''''''''",
"''''''''CPJJJHVVxxxkhhttee4''''eiuuuuu''''''''''",
"''''''''NIJJJHVVxxxkhht''''''''wuuuu''''''''''''",
"'''''''''CPJJHVVzzl''''''''''''wyyy'''''''''''''",
"'''''''''''MJBB''''''''''''''''wyy''''''''''''''",
"'''''''''''''''''''''''''''''''wy'''''''''''''''",
"'''''''''''''''''''''''''''''''3''''''''''''''''"
};
@@ -1,209 +0,0 @@
static const unsigned char toolbar_fullscreen_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, 0x87, 0x00, 0x00, 0x00,
0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b,
0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00,
0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
0x72, 0x65, 0x00, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20,
0x4d, 0x58, 0x20, 0x32, 0x30, 0x30, 0x34, 0x87, 0x76, 0xac, 0xcf, 0x00,
0x00, 0x00, 0x15, 0x74, 0x45, 0x58, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x39, 0x2f, 0x31,
0x32, 0x2f, 0x30, 0x34, 0x1c, 0xf3, 0x42, 0xbb, 0x00, 0x00, 0x08, 0xfd,
0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x99, 0x6d, 0x8c, 0x5c, 0x55,
0x19, 0xc7, 0x7f, 0xe7, 0xdc, 0x3b, 0xb3, 0xd3, 0x7d, 0x9d, 0xdd, 0xae,
0xdb, 0x97, 0xa5, 0x20, 0x45, 0x5b, 0x88, 0x06, 0x96, 0xa2, 0x89, 0x01,
0x02, 0x09, 0x24, 0x46, 0x43, 0xd0, 0xf2, 0x45, 0xa3, 0x92, 0x40, 0x62,
0xf4, 0x03, 0x31, 0xa1, 0x26, 0x4a, 0x8c, 0x7e, 0x32, 0xc6, 0x17, 0x34,
0xc4, 0x7e, 0xd2, 0x4f, 0x06, 0x05, 0x85, 0xc4, 0x48, 0x42, 0x69, 0x08,
0x46, 0x01, 0x13, 0x10, 0x50, 0x69, 0xa5, 0xa5, 0x4b, 0xb1, 0x2d, 0x76,
0xdf, 0xcb, 0xbe, 0xbf, 0xce, 0xce, 0xdc, 0x3b, 0x33, 0xe7, 0x3c, 0x7e,
0x38, 0x77, 0x66, 0xee, 0xbd, 0x3b, 0xb3, 0x2d, 0x12, 0x68, 0x9a, 0xf4,
0x49, 0xce, 0x3e, 0xe7, 0x9e, 0x73, 0x77, 0xef, 0xf3, 0x3c, 0xff, 0xe7,
0xed, 0x9c, 0x55, 0x22, 0xc2, 0xa5, 0x4c, 0xfa, 0x62, 0x0b, 0xf0, 0x7e,
0xe9, 0xb2, 0x02, 0x17, 0x9b, 0x2e, 0x2b, 0x70, 0xb1, 0xe9, 0x92, 0x57,
0xc0, 0x6f, 0xb5, 0xf1, 0xb7, 0x47, 0x54, 0xde, 0x0a, 0x07, 0xc4, 0xf2,
0x45, 0x2b, 0x0c, 0x89, 0x80, 0xb5, 0x90, 0xe0, 0x02, 0x62, 0x23, 0x9e,
0x5e, 0xdf, 0x6c, 0xef, 0xc2, 0xd7, 0x8f, 0x59, 0xe1, 0x90, 0x58, 0x0e,
0x7e, 0xf7, 0x31, 0x59, 0x6e, 0x26, 0xa7, 0x6a, 0x56, 0x07, 0x5e, 0x7c,
0x44, 0xdd, 0x8f, 0xf0, 0x4b, 0x11, 0xf2, 0xff, 0xb7, 0x30, 0xb1, 0xe7,
0xf7, 0xa1, 0x40, 0x6d, 0x7d, 0x59, 0x84, 0x6f, 0x3f, 0xf4, 0xb8, 0xfc,
0x36, 0x2d, 0xeb, 0x06, 0x17, 0x7a, 0xfe, 0x17, 0xea, 0x7e, 0xb1, 0x3c,
0x6a, 0x85, 0x7c, 0xed, 0xe3, 0x22, 0x20, 0x00, 0xd1, 0x3c, 0x9a, 0x46,
0x3f, 0x5a, 0x50, 0x6c, 0xaf, 0xe5, 0xef, 0x5c, 0x78, 0x0d, 0xcd, 0x0b,
0x3c, 0xfa, 0xb3, 0x7b, 0xd5, 0xfd, 0xe9, 0x8d, 0x04, 0x02, 0x7f, 0x79,
0x58, 0xe5, 0x15, 0x8c, 0x00, 0xf9, 0xda, 0xdf, 0xcf, 0xe5, 0xe0, 0xca,
0x2b, 0x60, 0x6b, 0x3f, 0x64, 0x33, 0xce, 0x32, 0xd6, 0x82, 0x31, 0x49,
0xbe, 0x61, 0x6e, 0xc1, 0x9a, 0x88, 0xbf, 0xc7, 0x79, 0x18, 0xc2, 0xf2,
0x2a, 0xcc, 0x2f, 0xb9, 0x79, 0x1c, 0x09, 0x2b, 0x5c, 0xfd, 0xfd, 0x27,
0x1a, 0xee, 0x94, 0x88, 0x01, 0xb1, 0x3c, 0x28, 0xca, 0x09, 0x0f, 0xd0,
0xd5, 0x09, 0x37, 0xed, 0x83, 0x4c, 0xef, 0x6d, 0xb0, 0xed, 0x01, 0x74,
0xfe, 0x4e, 0xc4, 0x96, 0x40, 0x4a, 0x20, 0x01, 0x62, 0x4b, 0x88, 0x04,
0x60, 0x43, 0x44, 0x4a, 0x88, 0x0d, 0x62, 0xa3, 0x8c, 0x98, 0x10, 0x6b,
0x03, 0xc4, 0x86, 0x58, 0x13, 0x52, 0x5a, 0x1c, 0x41, 0x6c, 0x85, 0x6a,
0xb8, 0x4e, 0xb0, 0x3a, 0x87, 0xb5, 0x42, 0xa5, 0x58, 0x20, 0x2c, 0xae,
0x63, 0x05, 0xd6, 0xe7, 0x67, 0x00, 0xc8, 0x64, 0x60, 0x6b, 0xde, 0x7d,
0x7f, 0x74, 0x02, 0x4a, 0x41, 0x03, 0x09, 0xe0, 0x41, 0xe0, 0x87, 0x4d,
0x15, 0xb0, 0xc2, 0xfe, 0x1a, 0xac, 0xb9, 0x1c, 0x0c, 0xdd, 0x00, 0xde,
0xb6, 0x7b, 0xd1, 0xd7, 0x3c, 0x0e, 0x52, 0x74, 0x43, 0x69, 0x10, 0xe5,
0x14, 0x36, 0x05, 0xaa, 0x6b, 0xc3, 0x4e, 0xa8, 0xe2, 0x04, 0xd5, 0xe2,
0x39, 0xc4, 0x56, 0xa9, 0xac, 0x4f, 0x53, 0x29, 0xcd, 0x63, 0xad, 0x25,
0x5c, 0x39, 0x47, 0xb5, 0x1c, 0x24, 0x50, 0x69, 0x35, 0x4f, 0x93, 0xa7,
0xe1, 0xca, 0x41, 0xf8, 0xef, 0x18, 0x94, 0x2b, 0x75, 0x8f, 0xdb, 0xdf,
0x5a, 0x01, 0xcb, 0x90, 0x72, 0xb2, 0x31, 0xb8, 0x13, 0xfc, 0xfc, 0x2d,
0xf8, 0xbb, 0x7f, 0x0d, 0x12, 0x10, 0x14, 0x97, 0x78, 0xfd, 0xd0, 0x77,
0x78, 0xeb, 0xb5, 0x43, 0xac, 0xad, 0x94, 0x50, 0x8a, 0xc4, 0x80, 0x26,
0x73, 0x00, 0x15, 0x9b, 0xd7, 0x9e, 0x23, 0x1e, 0x63, 0xa0, 0x9c, 0xe5,
0xbb, 0x3b, 0xa1, 0xa7, 0xb3, 0x21, 0x93, 0x56, 0xd0, 0xdb, 0x03, 0xd3,
0x73, 0xf5, 0xa5, 0xa1, 0xb8, 0xcc, 0x49, 0x17, 0x8a, 0x05, 0x69, 0x5f,
0x2f, 0xe8, 0x6d, 0x5f, 0x8f, 0x84, 0x5f, 0xe3, 0x89, 0x1f, 0xdd, 0xc6,
0xfc, 0xbb, 0x93, 0x4e, 0x18, 0xed, 0x3e, 0xdc, 0x4a, 0x81, 0xda, 0x5e,
0x5c, 0xd8, 0xa6, 0x3c, 0x35, 0x37, 0x55, 0x58, 0x5a, 0x86, 0xf5, 0x22,
0x6c, 0xef, 0xa7, 0x6e, 0xf2, 0xae, 0x8e, 0x86, 0x02, 0xe9, 0xa4, 0x99,
0x46, 0x20, 0x61, 0x0d, 0xaf, 0xef, 0x0e, 0xc4, 0x86, 0xbc, 0x7e, 0xe8,
0x7b, 0x75, 0xe1, 0x3f, 0x7e, 0xd3, 0x0d, 0xdc, 0xbc, 0xff, 0x6e, 0x06,
0xae, 0x18, 0xac, 0xe3, 0x2f, 0x36, 0x16, 0xbd, 0x31, 0x9f, 0x90, 0xfa,
0x3c, 0x16, 0xa5, 0xd6, 0x22, 0xe9, 0x35, 0x63, 0x59, 0x98, 0x9b, 0xe5,
0x8d, 0xa3, 0xff, 0x62, 0x7c, 0x7c, 0x84, 0x6a, 0x15, 0xd6, 0xd6, 0xa1,
0xab, 0x43, 0xa1, 0xb4, 0x26, 0xe3, 0xbb, 0x9c, 0xda, 0xac, 0xf3, 0x4f,
0xc7, 0x40, 0xa4, 0x66, 0xa4, 0x8c, 0x84, 0x40, 0x95, 0xe1, 0xd7, 0x0e,
0x3b, 0xe1, 0xf7, 0x5d, 0xcf, 0xfe, 0x07, 0xbe, 0x09, 0x7a, 0x1f, 0xe8,
0x1b, 0x5d, 0x12, 0xf6, 0x03, 0x94, 0x94, 0x81, 0x30, 0x7a, 0x3f, 0x04,
0x29, 0x83, 0x84, 0x6e, 0x5d, 0xca, 0x48, 0xc4, 0xb1, 0x65, 0x90, 0x0a,
0x2a, 0xe2, 0x58, 0x37, 0xa4, 0x52, 0xa2, 0xbf, 0xbd, 0x83, 0x3b, 0x7b,
0xfb, 0x78, 0xf1, 0x85, 0xe7, 0x18, 0x1f, 0x1f, 0xa5, 0x58, 0x82, 0xee,
0x2e, 0x1f, 0x4f, 0x67, 0xb0, 0x52, 0x41, 0xa8, 0x6c, 0x94, 0xbe, 0x15,
0x02, 0x0a, 0x97, 0x12, 0xc5, 0x06, 0xa0, 0x7c, 0x0a, 0x6b, 0xce, 0xe7,
0x6f, 0xbe, 0xeb, 0xf3, 0xa0, 0x3e, 0x01, 0xfa, 0x93, 0x80, 0x05, 0x0c,
0x88, 0x71, 0x1c, 0x1b, 0x61, 0x2e, 0x14, 0x96, 0xa6, 0x38, 0xf2, 0xcc,
0xcf, 0x19, 0x7f, 0xeb, 0x25, 0xfc, 0x5c, 0x27, 0xd7, 0xdd, 0xfc, 0x05,
0x86, 0xee, 0xf8, 0x52, 0xea, 0xd3, 0x8d, 0x22, 0xa3, 0x3c, 0x0f, 0xe9,
0xea, 0x46, 0x99, 0x2a, 0x43, 0xd7, 0xdf, 0xc4, 0xe4, 0xc4, 0x28, 0xd6,
0x82, 0xf6, 0xb3, 0x78, 0xd9, 0x0e, 0x8c, 0x59, 0x07, 0x2a, 0xe7, 0x47,
0x20, 0x5e, 0x70, 0xea, 0x08, 0x48, 0xa5, 0xee, 0xdb, 0x1f, 0xd9, 0xb9,
0x1d, 0xf4, 0x6e, 0x90, 0x00, 0x50, 0x48, 0xf5, 0x38, 0x54, 0x4e, 0x3a,
0xcb, 0x46, 0x2e, 0x51, 0x2e, 0x16, 0x79, 0xf6, 0x57, 0x0f, 0x13, 0x06,
0x01, 0x22, 0x50, 0x2e, 0x16, 0x38, 0xf6, 0xd7, 0x27, 0x58, 0x9b, 0x1a,
0xe6, 0xd6, 0xcf, 0xde, 0x95, 0x72, 0x9f, 0x86, 0x0b, 0x49, 0x54, 0x7a,
0xfb, 0xfa, 0xb6, 0xa2, 0xa2, 0xf2, 0xaa, 0x74, 0x06, 0xaf, 0xad, 0x1d,
0x1d, 0x94, 0x9b, 0x0a, 0x0f, 0xa9, 0x4a, 0x9c, 0x70, 0x63, 0x03, 0x62,
0x43, 0x2a, 0xab, 0xc3, 0x8d, 0x2c, 0x62, 0x23, 0xab, 0x53, 0x42, 0xca,
0x47, 0x20, 0x3c, 0x06, 0x26, 0x8c, 0xf9, 0xb9, 0x70, 0xf4, 0xf9, 0xc3,
0x94, 0x23, 0xe1, 0x85, 0xc6, 0x38, 0x33, 0xfc, 0x26, 0x8b, 0xb3, 0xd3,
0x8d, 0x95, 0x44, 0x89, 0x8f, 0x59, 0x50, 0x04, 0xad, 0x5c, 0xf6, 0x51,
0x5e, 0x96, 0x4c, 0x5b, 0x27, 0xda, 0xcb, 0x36, 0x97, 0x3e, 0x8d, 0x80,
0xb5, 0xd4, 0x53, 0x82, 0x31, 0x20, 0x12, 0x62, 0xca, 0x0b, 0x8d, 0xac,
0x62, 0x0c, 0x48, 0x40, 0x25, 0x28, 0x70, 0xe2, 0xcf, 0x3f, 0x65, 0x69,
0x7a, 0x82, 0x81, 0x5d, 0xbb, 0xd9, 0xf3, 0xa9, 0x5b, 0xc8, 0xb6, 0xe5,
0xc0, 0x0a, 0xd3, 0x63, 0x23, 0xce, 0x5a, 0x71, 0x19, 0x23, 0x39, 0x47,
0xcf, 0x9c, 0xa1, 0xb7, 0xaf, 0x1f, 0xac, 0xb0, 0xb6, 0xb2, 0xc2, 0x91,
0x7f, 0xbc, 0xca, 0xda, 0xca, 0x2a, 0x7b, 0xf6, 0x5e, 0xcb, 0xde, 0x3d,
0x7b, 0xea, 0x2e, 0xa0, 0x23, 0xb3, 0x6a, 0x2f, 0x83, 0x97, 0xed, 0x44,
0xf9, 0x4b, 0x2d, 0x11, 0xd8, 0x18, 0xc4, 0x12, 0x53, 0xc0, 0x06, 0x04,
0x0b, 0x47, 0x1b, 0xa9, 0xd2, 0x18, 0x2a, 0xa5, 0x39, 0x5e, 0xfc, 0xcd,
0x37, 0x58, 0x3c, 0x77, 0x0a, 0x11, 0x98, 0x1e, 0x3d, 0xcb, 0xc4, 0xa9,
0xb7, 0xf8, 0xdc, 0x7d, 0xdf, 0x02, 0xb1, 0x14, 0x96, 0x97, 0x1a, 0xe9,
0x38, 0xa5, 0x48, 0xad, 0x27, 0x58, 0x98, 0x9d, 0xe5, 0xf0, 0x53, 0x7f,
0x24, 0x08, 0x42, 0x44, 0x60, 0x72, 0x72, 0x8a, 0xa9, 0xc9, 0x49, 0xee,
0xb8, 0xfd, 0x76, 0x17, 0x13, 0x91, 0x11, 0xb5, 0x9f, 0xc3, 0x6f, 0xeb,
0x40, 0xe9, 0x4c, 0x4b, 0x04, 0x12, 0x2e, 0x24, 0xb1, 0xee, 0xd1, 0x58,
0xe7, 0x42, 0xd6, 0x9a, 0xba, 0x02, 0x62, 0x2c, 0xa7, 0x5e, 0x79, 0x8c,
0x85, 0xa9, 0x53, 0x09, 0xeb, 0x2e, 0xce, 0xbc, 0xcb, 0xd9, 0x37, 0x8f,
0x82, 0xb5, 0x74, 0x74, 0xe7, 0x93, 0x96, 0x4f, 0x0c, 0x37, 0x39, 0xfa,
0xcf, 0x57, 0x09, 0x83, 0x30, 0xa1, 0xe0, 0xdb, 0x6f, 0x9f, 0x62, 0x7e,
0x6e, 0xbe, 0x8e, 0x80, 0xd6, 0xe0, 0x65, 0xdb, 0xf1, 0x32, 0xed, 0xa8,
0xd6, 0x5d, 0x7f, 0x2a, 0x06, 0x24, 0x19, 0x5b, 0x62, 0x03, 0x4a, 0x73,
0x6f, 0x02, 0x91, 0x67, 0x19, 0xc3, 0xcc, 0xd9, 0x23, 0x1b, 0x5b, 0x65,
0x81, 0xf1, 0xd3, 0x27, 0xc1, 0x58, 0x06, 0x06, 0xaf, 0xda, 0xe0, 0x3a,
0x35, 0xda, 0x31, 0xb8, 0x0b, 0xac, 0x65, 0x6a, 0x72, 0xb2, 0x11, 0x23,
0x31, 0x25, 0xce, 0x8e, 0x8c, 0xba, 0x6f, 0x45, 0x06, 0xf3, 0xb3, 0x9d,
0x68, 0x2f, 0x87, 0x6c, 0x72, 0xee, 0x3a, 0x6f, 0x10, 0x57, 0xc3, 0x42,
0xbd, 0xaa, 0x62, 0x0d, 0xd6, 0xda, 0x84, 0xe0, 0xb5, 0xb3, 0x42, 0x39,
0x28, 0x81, 0x35, 0x5c, 0x77, 0xe3, 0xa7, 0x13, 0xc2, 0xc7, 0x95, 0xe9,
0xec, 0xe8, 0x04, 0x6b, 0x09, 0x83, 0xb0, 0xb1, 0xc7, 0xc6, 0xae, 0xba,
0x16, 0xc4, 0x5e, 0xb6, 0x0b, 0x2f, 0xd3, 0x8e, 0x34, 0xea, 0xf6, 0xf9,
0x11, 0xa8, 0xbb, 0x90, 0x01, 0x6b, 0xcb, 0x94, 0x56, 0x26, 0x12, 0x31,
0xd0, 0x91, 0xef, 0x6f, 0x58, 0x3f, 0x76, 0x00, 0xd9, 0x75, 0xf5, 0x1e,
0x30, 0x96, 0x97, 0x9f, 0x3b, 0xec, 0x90, 0x6c, 0xe2, 0x42, 0x4f, 0x3d,
0xf9, 0x7b, 0xca, 0x41, 0x89, 0x1d, 0x3b, 0x07, 0x9b, 0xba, 0x58, 0xff,
0xd6, 0xad, 0x0e, 0x01, 0xed, 0x46, 0x26, 0xd7, 0x83, 0xf6, 0xb7, 0xa4,
0xc5, 0x6c, 0xad, 0x80, 0xa4, 0xba, 0x81, 0xca, 0xfa, 0x39, 0x4c, 0xd4,
0x25, 0xd6, 0x5c, 0x68, 0xf7, 0x0d, 0xb7, 0x26, 0xad, 0x1f, 0xcd, 0x07,
0x76, 0xee, 0xe2, 0xcc, 0xf0, 0x71, 0x16, 0x66, 0x67, 0x9a, 0x9f, 0xc2,
0x04, 0xc2, 0x20, 0xe4, 0x95, 0x97, 0x5e, 0x62, 0xef, 0xde, 0x6b, 0x37,
0x66, 0x29, 0x81, 0xc1, 0x9d, 0x3b, 0x12, 0x08, 0x64, 0xb6, 0xe4, 0xf1,
0x32, 0x9d, 0x88, 0xb4, 0x56, 0x60, 0xd3, 0x34, 0x5a, 0x2e, 0xcc, 0x62,
0x4d, 0xa3, 0x31, 0x13, 0x63, 0x78, 0xe7, 0xe8, 0xcb, 0xf5, 0x6c, 0x25,
0x34, 0xf8, 0x0b, 0xcf, 0x3c, 0xe5, 0x8c, 0x90, 0xf2, 0xff, 0xf8, 0x33,
0x02, 0x23, 0x67, 0x47, 0x98, 0x9b, 0x9d, 0xdf, 0x88, 0x10, 0xf0, 0xa7,
0xa7, 0x9f, 0xe5, 0x6b, 0x5f, 0xbe, 0x07, 0xad, 0xdd, 0xb3, 0xdf, 0xd6,
0x83, 0xf6, 0xdb, 0x11, 0x69, 0xed, 0x42, 0x9b, 0xa6, 0xd1, 0xd2, 0xf2,
0x78, 0x02, 0x81, 0xe9, 0xf1, 0x31, 0x4e, 0xff, 0xfb, 0xef, 0x1b, 0x84,
0x07, 0x58, 0x5b, 0x59, 0x69, 0x54, 0xf2, 0x16, 0x4a, 0x20, 0x10, 0x04,
0x21, 0xc5, 0x52, 0x98, 0xc8, 0xeb, 0xb5, 0x77, 0x66, 0xe7, 0x17, 0x38,
0xf9, 0x9f, 0x33, 0xf5, 0xc2, 0x99, 0xc9, 0xf5, 0xa2, 0xb4, 0xbf, 0x69,
0x10, 0x6f, 0x40, 0xa0, 0xa6, 0xab, 0x35, 0x50, 0x09, 0x0a, 0x18, 0xd3,
0x58, 0x3b, 0x79, 0xfc, 0x88, 0x4b, 0xb5, 0xb5, 0x0f, 0xcb, 0x46, 0x9e,
0x3e, 0x3f, 0x37, 0x43, 0x22, 0xde, 0xb6, 0xa7, 0xd7, 0x86, 0x4f, 0x9e,
0xa6, 0x63, 0x8b, 0xdb, 0xcb, 0xe4, 0x7a, 0xb0, 0x56, 0x36, 0x75, 0xa1,
0x64, 0x0c, 0x44, 0xfe, 0x6a, 0xc5, 0xc5, 0x40, 0x61, 0x7e, 0x14, 0x53,
0x73, 0x2b, 0x05, 0x85, 0xd5, 0xb5, 0x8d, 0xb7, 0x06, 0x31, 0x9e, 0x8e,
0x8b, 0xd6, 0xf5, 0xa0, 0xf5, 0x7b, 0xeb, 0xc5, 0x62, 0x2c, 0x8d, 0xf6,
0xa0, 0x74, 0x16, 0xa5, 0xde, 0x4b, 0x0c, 0x44, 0x64, 0x0c, 0x84, 0x85,
0x65, 0x8c, 0x81, 0x6c, 0x16, 0xaa, 0x15, 0x10, 0xab, 0x92, 0xd6, 0xab,
0x59, 0x3a, 0xcd, 0x63, 0x56, 0x4f, 0x3f, 0x9f, 0x0f, 0x95, 0x9d, 0xdb,
0xb3, 0x88, 0x71, 0x29, 0x34, 0xb3, 0xa5, 0x8f, 0x72, 0x50, 0x42, 0xea,
0x7d, 0xfe, 0x79, 0x10, 0xa8, 0x59, 0xdf, 0x4a, 0x4d, 0x81, 0x55, 0xac,
0x81, 0xbe, 0x1e, 0xb7, 0x3f, 0x33, 0x3b, 0xc3, 0xc0, 0xc0, 0x76, 0xba,
0xbb, 0xf3, 0xc9, 0x7b, 0x9c, 0x88, 0x67, 0xfc, 0x6c, 0xa2, 0x36, 0xc4,
0x11, 0xad, 0x09, 0x98, 0xcd, 0x66, 0x9b, 0x0a, 0xde, 0xd7, 0xdb, 0xc3,
0xbe, 0xeb, 0xb7, 0x81, 0xcc, 0xa1, 0x34, 0x6c, 0xfd, 0xe8, 0xed, 0x64,
0x73, 0xbd, 0x54, 0xc2, 0x22, 0xc6, 0x94, 0xdf, 0x3b, 0x02, 0x41, 0xe8,
0xae, 0x51, 0x00, 0x7a, 0xf3, 0xb0, 0x5a, 0x80, 0xb0, 0x0c, 0x33, 0x33,
0xd3, 0x0e, 0x5e, 0x2f, 0xea, 0x18, 0xb5, 0x83, 0x5b, 0x2b, 0x50, 0xaa,
0x4c, 0xae, 0xcd, 0xb5, 0x01, 0x35, 0x37, 0x88, 0xbf, 0xe3, 0x9e, 0xcb,
0x89, 0xa3, 0x68, 0x7d, 0x9f, 0x15, 0xaa, 0x95, 0x15, 0xb4, 0x82, 0x6c,
0xc7, 0x0e, 0xae, 0xf9, 0xcc, 0x83, 0x88, 0x68, 0xd6, 0x97, 0xce, 0x51,
0x2a, 0xac, 0x5d, 0x18, 0x02, 0xf1, 0x5e, 0x68, 0x79, 0xc5, 0xa1, 0x60,
0x8c, 0x73, 0x83, 0x5d, 0x3b, 0xa0, 0x3f, 0x0f, 0x99, 0x48, 0xe5, 0x7a,
0x75, 0x6e, 0xb0, 0xc6, 0x7a, 0x0b, 0x4a, 0xbf, 0x17, 0x3f, 0x37, 0x3b,
0x9f, 0xef, 0xa2, 0xff, 0x63, 0x77, 0x33, 0x74, 0xcf, 0x1f, 0xc8, 0xf5,
0x5c, 0xc9, 0xea, 0xdc, 0x18, 0x8b, 0x93, 0x27, 0x58, 0x5e, 0x5c, 0x68,
0xf9, 0x37, 0x5b, 0xa6, 0xd1, 0xd9, 0x05, 0x77, 0x2f, 0xe3, 0xc5, 0x54,
0xec, 0xe9, 0x56, 0xe4, 0x7b, 0x5c, 0xa7, 0xa5, 0xb4, 0x46, 0x29, 0x0f,
0xa5, 0xb5, 0xb3, 0x83, 0x72, 0xcf, 0x68, 0x1f, 0xa5, 0x7d, 0x77, 0x18,
0xc9, 0x6c, 0x41, 0xfb, 0x6d, 0x28, 0xdd, 0x86, 0x9f, 0xed, 0x40, 0x67,
0xb6, 0xa0, 0xfd, 0x76, 0xfc, 0x5c, 0x0f, 0x9e, 0xdf, 0x8e, 0x97, 0xe9,
0x20, 0x93, 0xeb, 0xc5, 0x6f, 0xeb, 0xc6, 0xf3, 0x3b, 0x68, 0xeb, 0xdc,
0x46, 0x5b, 0xfb, 0x00, 0xd6, 0x08, 0x8b, 0x13, 0x27, 0x98, 0x7a, 0xfb,
0x2f, 0x2c, 0x4c, 0x9e, 0x60, 0x69, 0xb9, 0x78, 0x81, 0x0a, 0x58, 0x8e,
0x11, 0x5d, 0x5b, 0x84, 0x21, 0x9c, 0x1d, 0x83, 0xab, 0xae, 0x68, 0x28,
0xa1, 0x14, 0x68, 0xdf, 0x43, 0x2b, 0x1f, 0xe5, 0xf9, 0x78, 0x7e, 0x16,
0xe5, 0x39, 0x81, 0xb5, 0x9f, 0x41, 0x7b, 0x59, 0xb4, 0xdf, 0x86, 0xf6,
0x73, 0x68, 0xaf, 0x0d, 0xe5, 0x65, 0xd1, 0x5e, 0x16, 0xa5, 0x6b, 0x6b,
0x6e, 0x5d, 0xfb, 0xed, 0xd1, 0x3c, 0xe7, 0xf2, 0xbc, 0x15, 0x4c, 0xb5,
0x4c, 0x69, 0x65, 0x9a, 0xb5, 0xb9, 0x71, 0xd6, 0x16, 0xc6, 0x59, 0x18,
0x7f, 0x83, 0xf9, 0xc9, 0xe3, 0x8c, 0x8d, 0xcd, 0x50, 0xad, 0x26, 0x82,
0xf8, 0xd8, 0x66, 0x08, 0x3c, 0x4d, 0xec, 0xde, 0xa5, 0x18, 0xc0, 0x3b,
0xa3, 0xee, 0x96, 0xac, 0xb3, 0xdd, 0x65, 0x23, 0x51, 0x0e, 0x24, 0x55,
0x05, 0x94, 0x8b, 0x56, 0xad, 0x0d, 0x56, 0x34, 0xca, 0x54, 0xf0, 0x8c,
0x46, 0x1b, 0x05, 0xda, 0x00, 0x21, 0x28, 0x0f, 0x88, 0x86, 0xf2, 0x80,
0x5a, 0x61, 0xf2, 0x41, 0xf9, 0x80, 0x46, 0x29, 0x1f, 0xa5, 0x32, 0xa0,
0x34, 0xa6, 0x5a, 0x61, 0x6d, 0x61, 0x8a, 0xe9, 0xf1, 0xd3, 0xcc, 0xcd,
0xcc, 0x51, 0xa9, 0x5a, 0x52, 0xf4, 0x74, 0x4b, 0x05, 0xc4, 0x72, 0x10,
0x38, 0x00, 0x8d, 0xeb, 0xc5, 0x72, 0x19, 0xce, 0xcd, 0xd6, 0xdf, 0x00,
0x29, 0x23, 0x94, 0x1b, 0x8f, 0xb5, 0x9d, 0x54, 0x51, 0xfb, 0x80, 0x68,
0x19, 0x38, 0x18, 0x5f, 0x48, 0x04, 0xf1, 0x43, 0x8f, 0xcb, 0x8a, 0x15,
0x0e, 0xd4, 0xd3, 0x69, 0xd4, 0xd8, 0x49, 0x34, 0xe2, 0xc5, 0x2a, 0x3d,
0x8f, 0xd7, 0x87, 0x0f, 0x90, 0x0e, 0xfc, 0xe0, 0x49, 0x59, 0x89, 0x2f,
0x34, 0xfd, 0xff, 0xc0, 0x4f, 0xbe, 0xaa, 0xee, 0xc3, 0x69, 0x9a, 0x8f,
0xaf, 0x7f, 0x08, 0x02, 0xb6, 0xa2, 0x65, 0x9c, 0xf0, 0xbf, 0x4b, 0x6f,
0x34, 0x55, 0x00, 0xe0, 0xc7, 0x5f, 0x51, 0x3d, 0x38, 0x77, 0xda, 0x4f,
0xea, 0x3e, 0xf2, 0x43, 0xa4, 0x63, 0x38, 0x9f, 0x3f, 0x98, 0xb6, 0x7c,
0x8d, 0x5a, 0x2a, 0x70, 0xa9, 0xd0, 0x25, 0xff, 0x4f, 0xbe, 0xcb, 0x0a,
0x5c, 0x6c, 0xba, 0xac, 0xc0, 0xc5, 0xa6, 0xff, 0x01, 0x9c, 0xeb, 0xc5,
0xd9, 0xf7, 0xbc, 0x76, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82,
};
@@ -1,132 +0,0 @@
/* XPM */
static const char *toolbar_fullscreen_xpm[] = {
/* columns rows colors chars-per-pixel */
"48 48 78 1",
" c #0EA437",
". c #0EA539",
"X c #3FAD34",
"o c #74BC1D",
"O c #7BBE1D",
"+ c #54B332",
"@ c #64B72E",
"# c #6FBB29",
"$ c #76BD25",
"% c #7BBF24",
"& c #73BD2A",
"* c #7ABF29",
"= c #7EC027",
"- c #7DC02F",
"; c #80C125",
": c #83C32E",
"> c #82C337",
", c #88C537",
"< c #88C53C",
"1 c #8CC742",
"2 c #95CB56",
"3 c #95CC5E",
"4 c #97CD63",
"5 c #98CD62",
"6 c #A3D274",
"7 c #7FC1E3",
"8 c #ACD78D",
"9 c #AED88F",
"0 c #ADD891",
"q c #B0D994",
"w c #B5DC9F",
"e c #B9DDA4",
"r c #BBDEAB",
"t c #BDDFB0",
"y c #BFE0B3",
"u c #C1E1B5",
"i c #C2E2BB",
"p c #80C1E3",
"a c #8BC6E5",
"s c #8FC9E6",
"d c #92CAE7",
"f c #96CCE8",
"g c #9BCEE8",
"h c #9FD0EA",
"j c #A3D2EB",
"k c #ABD6EC",
"l c #AFD8ED",
"z c #B3DAEE",
"x c #B8DCEF",
"c c #B4DBF0",
"v c #BBDEF0",
"b c #BFE0F1",
"n c #D1D0D0",
"m c #C6E3C2",
"M c #CBE6CD",
"N c #C5E9CF",
"B c #D3EBCE",
"V c #DCEECC",
"C c #CDE7D3",
"Z c #CFE8D8",
"A c #D2EFDE",
"S c #D6ECE6",
"D c #D7ECE9",
"F c #DAEDEE",
"G c #C4E2F3",
"H c #CAE6F6",
"J c #D6EBF6",
"K c #DCEFF6",
"L c #D4EBF9",
"P c #DCEFFC",
"I c #DFF0FC",
"U c #E1E0E0",
"Y c #ECF6EC",
"T c #E2F1FD",
"R c #EAF5FA",
"E c #F4FBF7",
"W c #F3F9FD",
"Q c gray100",
/* pixels */
"nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUn",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"UQWJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJWQU",
"UQT77pppppppppppppppppppppppppppppppppppppp77TQU",
"UQTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTQU",
"UQTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTQU",
"UQTssddddddddddddddddddddddddddddddddddddddssTQU",
"UQTddddddddddddddddddddddddddddddddddddddddddTQU",
"UQRffffffffffffffffffffffffffffffffffffffffffRQU",
"UQRgggggggggggggggggfffgjfgggggggggggggggggggRQU",
"UQRgggggggggggggggggkHHHPcgggggggggggggggggggRQU",
"UQRhhjjjjjjjjjjjjjhjLTTTTTvjjhjjjjjjjjjjjjjhhRQU",
"UQRjjjjjjjjjjjjjjjjkITIIITPPLjjjjjjjjjjjjjjjjRQU",
"UQRjjjjkkkkkkkkkkjjvPIIIIITTTGkjjkkkkkkkkkkjjRQU",
"UQRkkjkjkkkkkkkkkkHTIIIIIIIIIIPHkkkkkkkkkkjkGWQU",
"UQRkkGLGlkkkklkzzlLTIIIIIIIIIITPzkllllllkzGLTWQU",
"UQWHGTTTGzHHvlGPPLLTIIIIIIIIIITPzlzzzzzzlLTTPWQU",
"UQWIIIITLLTTIHPTTTTIIIIIIIIIIIIPGzzzzzzzzLTIPWQU",
"UQWPIIIITTIITTIIIIIIIIIIIIIIIIITTGzxxxxvLPTIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIIITGxvvvvbITIIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIITPGvvvvvHTIIIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILGGGGPTIIIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITHGPPPIIIIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPPPTIIIIIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIITTIIIIIIIPWQU",
"UQWPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPWQU",
"UQWPIIIIIIIIIIIIITTTTTTTTTTTTTTTTTTTTTIIIIIIPWQU",
"UQWPIIIIIIIITTTTTTKSZMmureeweryimMADKTTTTTTIPWQU",
"UQWPIIIITTTTFCt9621,:=OOOOOOOOOOO;:,126qyCFTTWQU",
"UQWPITTTDi83<=OOOO%%%=============%%%OOOO=<50YQU",
"UQWTTAw4>$oo%%***************************%%ooVQU",
"UQEr3-oo$***********************************$VQU",
"UQVoo$*************************************$$VQU",
"UQV&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&VQU",
"UQV&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&VQU",
"UQV##&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&##VQU",
"UQV@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@VQU",
"UQB++++++++++++++++++++++++++++++++++++++++++BQU",
"UQBXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBQU",
"UQN ...................................... NQU",
"UQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQU",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"UQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQU",
"nUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUn"
};
@@ -1,306 +0,0 @@
static const unsigned char toolbar_help_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, 0x87, 0x00, 0x00, 0x00,
0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b,
0x12, 0x00, 0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00,
0x00, 0x25, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
0x72, 0x65, 0x00, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x20, 0x46, 0x69, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20,
0x4d, 0x58, 0x20, 0x32, 0x30, 0x30, 0x34, 0x87, 0x76, 0xac, 0xcf, 0x00,
0x00, 0x00, 0x14, 0x74, 0x45, 0x58, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x00, 0x39, 0x2f, 0x34,
0x2f, 0x30, 0x34, 0x79, 0x5e, 0xa3, 0xd5, 0x00, 0x00, 0x0d, 0x87, 0x49,
0x44, 0x41, 0x54, 0x78, 0x9c, 0xd5, 0x9a, 0x79, 0x8c, 0x5e, 0xd5, 0x79,
0xc6, 0x7f, 0xef, 0x39, 0x77, 0xf9, 0x96, 0xd9, 0xbc, 0x60, 0xb0, 0x01,
0x63, 0xb3, 0x43, 0xb0, 0xec, 0xb6, 0x41, 0xcd, 0x62, 0xc0, 0x04, 0x04,
0xaa, 0x48, 0x30, 0x25, 0x8d, 0x02, 0x6e, 0xab, 0xd8, 0x21, 0xa4, 0x49,
0x93, 0x02, 0x8a, 0xd4, 0x26, 0x55, 0xdb, 0x64, 0xa0, 0x8b, 0x5b, 0x45,
0x6a, 0x9c, 0x45, 0x28, 0x49, 0x17, 0x4c, 0x5a, 0xfa, 0x47, 0x91, 0x5a,
0x20, 0x0d, 0x90, 0x88, 0x76, 0x6c, 0x52, 0xb6, 0x84, 0x80, 0x5d, 0x1b,
0x82, 0xeb, 0x05, 0x0f, 0xe3, 0x05, 0xc6, 0xc6, 0xf6, 0xd8, 0x33, 0xdf,
0x72, 0xef, 0x39, 0xe7, 0xed, 0x1f, 0xf7, 0x7e, 0x9f, 0xc7, 0xe3, 0x05,
0x1b, 0xa2, 0x46, 0x1c, 0xcd, 0xd1, 0x77, 0x46, 0x73, 0xe7, 0xdc, 0xe7,
0x39, 0xcf, 0xf3, 0xbe, 0xe7, 0x3d, 0x67, 0x46, 0x54, 0x95, 0x77, 0x73,
0x33, 0xbf, 0x6c, 0x00, 0xef, 0xb4, 0x45, 0xbf, 0xcc, 0x97, 0xff, 0xe3,
0xc7, 0x7a, 0xa4, 0x33, 0xfe, 0xe4, 0x83, 0xe3, 0x6f, 0xcb, 0x0a, 0xf2,
0x8b, 0xb2, 0xd0, 0x0f, 0x7f, 0x57, 0xe6, 0xa9, 0xb2, 0x24, 0xc0, 0x92,
0x10, 0x98, 0x17, 0x60, 0x61, 0x50, 0x06, 0x82, 0x82, 0x0f, 0x10, 0x94,
0xed, 0x41, 0x19, 0x0e, 0xca, 0x1a, 0xaf, 0xac, 0x77, 0xb6, 0xfe, 0xf0,
0x31, 0xa6, 0x51, 0x38, 0x35, 0x32, 0xef, 0x88, 0xc0, 0xd0, 0x72, 0x19,
0x50, 0xb8, 0x29, 0x28, 0x77, 0xaa, 0xb2, 0x28, 0x28, 0x1c, 0xab, 0xfb,
0xc9, 0xe3, 0xd0, 0x1d, 0x1f, 0xf0, 0xca, 0x23, 0x41, 0xe5, 0x9f, 0x4c,
0x52, 0x5b, 0x5b, 0x82, 0xef, 0x74, 0x00, 0x3d, 0x19, 0x22, 0x6f, 0x9b,
0xc0, 0x93, 0x9f, 0x94, 0x41, 0x2d, 0x80, 0x0f, 0x04, 0xa0, 0x12, 0x43,
0x4f, 0x05, 0xfa, 0x6b, 0x45, 0x60, 0xd5, 0x62, 0xd0, 0x50, 0xf4, 0xcc,
0xc1, 0x78, 0x1b, 0x0e, 0xb6, 0x60, 0x7f, 0x13, 0xf6, 0xb5, 0x21, 0xf3,
0x87, 0xc9, 0x78, 0xe5, 0x49, 0x45, 0xfe, 0x30, 0x4e, 0x6b, 0xeb, 0x4a,
0x02, 0xa1, 0x43, 0xe6, 0xad, 0x48, 0x9c, 0x72, 0x0c, 0x3c, 0x75, 0x9b,
0x2c, 0x01, 0xee, 0x33, 0xc2, 0x3c, 0x63, 0x60, 0x5a, 0x0f, 0xcc, 0x3e,
0xf7, 0x02, 0xaa, 0xf3, 0x3e, 0x80, 0x9d, 0x71, 0x09, 0x26, 0xe9, 0xc3,
0x24, 0x75, 0x70, 0x2d, 0xc8, 0x1b, 0xb8, 0x7d, 0xdb, 0x70, 0xfb, 0x87,
0xe9, 0xdd, 0xb3, 0x95, 0x81, 0xdd, 0x5b, 0x98, 0x93, 0xb5, 0x69, 0x67,
0xb0, 0xb7, 0x09, 0x5b, 0xc7, 0xa0, 0xe1, 0x04, 0x81, 0x2b, 0x83, 0xf2,
0x5c, 0xbb, 0xd5, 0xf8, 0xab, 0xb4, 0x52, 0xfb, 0x73, 0x40, 0x4a, 0x12,
0x1d, 0x22, 0xc7, 0x6d, 0xa7, 0xa4, 0xc0, 0xd3, 0xb7, 0xc9, 0xa0, 0x08,
0x5f, 0x01, 0x98, 0xd1, 0x0f, 0x67, 0x7f, 0xe0, 0x66, 0xd2, 0x4b, 0x6f,
0xc1, 0xf4, 0xce, 0x05, 0xd7, 0x80, 0xbc, 0x59, 0xf4, 0x13, 0x8c, 0x1b,
0x23, 0x1b, 0x18, 0xdb, 0xf6, 0x02, 0xd9, 0xc4, 0x04, 0xde, 0x0b, 0x23,
0x87, 0x60, 0xdb, 0x21, 0x68, 0x97, 0x16, 0x53, 0xe5, 0xc7, 0x62, 0xec,
0xc7, 0x2b, 0x69, 0xfa, 0x26, 0xe0, 0x81, 0x70, 0x22, 0x15, 0x4e, 0x5a,
0x81, 0xa7, 0x6e, 0x93, 0xfb, 0xac, 0xb0, 0x3c, 0x89, 0xe1, 0xbc, 0x85,
0x97, 0xd1, 0x7b, 0xdd, 0x57, 0x31, 0xfd, 0xe7, 0x96, 0xc0, 0x9a, 0x84,
0xfd, 0x9b, 0x71, 0x23, 0x6b, 0xf1, 0x6f, 0xac, 0x23, 0x1c, 0x1a, 0xc5,
0x4d, 0xec, 0x45, 0x3d, 0x84, 0x00, 0xa6, 0x76, 0x3a, 0xb6, 0x3a, 0x93,
0xa8, 0xf7, 0x74, 0x2a, 0x33, 0xe7, 0x52, 0x9b, 0x31, 0x87, 0x83, 0xaf,
0xbd, 0xc4, 0xde, 0xcd, 0x2f, 0x31, 0xa7, 0x0e, 0x03, 0x09, 0x6c, 0xdc,
0x0f, 0x07, 0x1d, 0x28, 0x5c, 0xe1, 0xbd, 0xff, 0x61, 0xb3, 0xd5, 0xbe,
0xbe, 0x5a, 0x49, 0xdf, 0xe4, 0xc8, 0xb8, 0x78, 0x7b, 0x0a, 0xfc, 0xf7,
0x6d, 0x72, 0x9f, 0x11, 0x96, 0xd7, 0x53, 0xb8, 0xe8, 0x23, 0x9f, 0xa1,
0xb2, 0xf8, 0xcb, 0x85, 0x45, 0x5c, 0x0b, 0xbf, 0xe9, 0x5f, 0x71, 0x9b,
0xfe, 0x99, 0xb0, 0x6f, 0x0b, 0x68, 0x01, 0xb8, 0xe3, 0xfd, 0x50, 0x12,
0x50, 0x5f, 0x8c, 0x7d, 0xf9, 0x99, 0xce, 0x98, 0x47, 0xdf, 0xec, 0xf3,
0xf0, 0xcd, 0x71, 0x46, 0x36, 0xbc, 0x80, 0xcb, 0x1d, 0xc1, 0xc3, 0x2b,
0x07, 0x61, 0x77, 0xab, 0x1b, 0xec, 0x1b, 0xac, 0xb5, 0xd7, 0xd5, 0xab,
0xe9, 0x5e, 0xc0, 0x1f, 0x4f, 0x85, 0xb7, 0x54, 0xe0, 0xc9, 0x15, 0x72,
0x9f, 0x31, 0x2c, 0xef, 0xab, 0xc3, 0x45, 0xbf, 0xfd, 0x35, 0xe2, 0x8b,
0x3f, 0x06, 0xae, 0x8d, 0xee, 0xf9, 0x1f, 0xdc, 0xd3, 0x5f, 0x44, 0x0f,
0x6c, 0x42, 0x14, 0x8c, 0x2d, 0x40, 0x1b, 0x0a, 0xe3, 0xa2, 0x20, 0x52,
0x74, 0x2d, 0x3f, 0xa5, 0xfc, 0x61, 0x63, 0xcf, 0x30, 0x87, 0x76, 0x0f,
0xd3, 0x7b, 0xc6, 0x7c, 0xce, 0xbe, 0xf4, 0x52, 0xb6, 0x6f, 0x78, 0x99,
0xe0, 0x3d, 0x17, 0xd4, 0xa1, 0xe9, 0x95, 0x7d, 0x19, 0x00, 0x0b, 0x72,
0xe7, 0xff, 0x0e, 0xf8, 0x2d, 0x4e, 0x10, 0x0b, 0x27, 0xdc, 0x89, 0x87,
0x96, 0xcb, 0x9d, 0x0a, 0xcb, 0x2b, 0x09, 0x5c, 0x78, 0xcb, 0xdf, 0x10,
0x5f, 0x70, 0x23, 0xb8, 0x26, 0x7e, 0xe3, 0x77, 0x71, 0x8f, 0xdd, 0x84,
0x1c, 0xdc, 0x84, 0xb1, 0x74, 0xbb, 0xd8, 0x02, 0xa4, 0x48, 0x31, 0x73,
0x67, 0x2c, 0x02, 0x48, 0x11, 0x99, 0x42, 0x49, 0x0a, 0xd8, 0xb7, 0xf3,
0x55, 0x76, 0x6d, 0xdb, 0xca, 0x9c, 0x73, 0xcf, 0x29, 0x7c, 0x22, 0x70,
0x49, 0x8f, 0x50, 0x39, 0x8c, 0xea, 0xc3, 0xfb, 0x0e, 0x36, 0xee, 0x00,
0xcc, 0xe4, 0x4d, 0x6f, 0x72, 0x3b, 0xae, 0x85, 0x9e, 0xf8, 0x84, 0x2c,
0x32, 0xc2, 0x8b, 0xb1, 0x85, 0x5f, 0xbb, 0xee, 0x46, 0x6a, 0x57, 0xff,
0x25, 0x20, 0xe4, 0x4f, 0xff, 0x09, 0x3a, 0xfc, 0x70, 0x01, 0xb8, 0x04,
0xa8, 0x0a, 0xad, 0x4c, 0xd8, 0x30, 0x92, 0xb0, 0x65, 0x34, 0x66, 0xcf,
0xb8, 0xa5, 0xed, 0x0e, 0xbf, 0x6f, 0x76, 0xaf, 0x63, 0x46, 0xea, 0x79,
0xcf, 0x8c, 0x36, 0x35, 0x13, 0x70, 0x5e, 0xc8, 0x1d, 0x38, 0x07, 0xce,
0x0b, 0x71, 0x52, 0xa5, 0xd2, 0xd3, 0xc3, 0xe8, 0xce, 0x3d, 0x10, 0x60,
0x2c, 0x83, 0xf5, 0x87, 0x14, 0x1f, 0xc0, 0x2b, 0x63, 0x22, 0x72, 0xf9,
0xf4, 0xde, 0xea, 0x96, 0x63, 0xd9, 0xe8, 0xb8, 0x16, 0x52, 0xe5, 0x3e,
0x05, 0x2e, 0x38, 0x6f, 0x36, 0xd5, 0xcb, 0xff, 0x00, 0x5c, 0x93, 0xec,
0x99, 0x7b, 0xd0, 0xe1, 0xff, 0xc0, 0xd8, 0x92, 0xbd, 0x14, 0x2b, 0xff,
0x93, 0x2d, 0x29, 0x4f, 0x6d, 0xae, 0x20, 0xe9, 0x00, 0x0b, 0xae, 0x5d,
0xc6, 0x95, 0xef, 0xbb, 0x81, 0xd3, 0xe7, 0x2f, 0x20, 0xad, 0xf7, 0x75,
0xe7, 0x7b, 0x6d, 0xe3, 0x53, 0x8c, 0x6e, 0xdb, 0xc0, 0xd6, 0xb5, 0x5f,
0xe7, 0x12, 0x36, 0x15, 0xef, 0x28, 0xde, 0x43, 0xa3, 0xd1, 0xc4, 0x05,
0x21, 0x4a, 0x53, 0xb2, 0x66, 0x46, 0x5f, 0xa4, 0xcc, 0x4a, 0x84, 0xdd,
0x6d, 0x05, 0xa5, 0xdf, 0x05, 0xfd, 0x33, 0x60, 0x39, 0xc7, 0xb0, 0xd1,
0x31, 0x15, 0x78, 0xfc, 0x77, 0xe4, 0x13, 0x46, 0x58, 0x3d, 0xbd, 0x07,
0x16, 0xde, 0x7a, 0x0f, 0xf1, 0xdc, 0x2b, 0x71, 0xaf, 0x3e, 0x4e, 0xfe,
0xfc, 0x5f, 0x23, 0x93, 0x2d, 0x63, 0xe0, 0xb1, 0x0d, 0x35, 0x36, 0xee,
0x48, 0xb8, 0x7c, 0xe9, 0x67, 0xb9, 0x62, 0xd9, 0x97, 0x48, 0x6a, 0x7d,
0x47, 0xcd, 0x37, 0xb5, 0xbd, 0xf2, 0xd8, 0xbd, 0x54, 0x1e, 0xff, 0x3c,
0xb9, 0x83, 0xdc, 0x09, 0xce, 0x17, 0x4a, 0x88, 0x58, 0x5c, 0xe6, 0x91,
0xa0, 0x64, 0x1e, 0x9e, 0x3d, 0x58, 0xaa, 0x10, 0x14, 0x55, 0x39, 0xff,
0x8f, 0x9f, 0x08, 0x5b, 0x4f, 0x4a, 0x81, 0x00, 0x83, 0x00, 0xe7, 0x5e,
0x7a, 0x19, 0xf1, 0x19, 0xbf, 0x4a, 0x18, 0xdb, 0x4e, 0xfb, 0x85, 0x6f,
0x22, 0x0a, 0x52, 0xe4, 0x6a, 0x34, 0xc0, 0xc6, 0x9d, 0x09, 0x1b, 0x77,
0x24, 0xdc, 0x70, 0xd7, 0xbd, 0x2c, 0xb8, 0xe6, 0xd6, 0x62, 0x55, 0x0f,
0x0e, 0x93, 0x3f, 0xbf, 0x0a, 0x37, 0xbc, 0x06, 0xbf, 0x6b, 0x1d, 0xc1,
0x83, 0xc6, 0x03, 0xd8, 0xb9, 0x4b, 0xc8, 0xdf, 0xfb, 0x05, 0xa6, 0x5f,
0x74, 0x05, 0x17, 0xff, 0xc6, 0xef, 0xb3, 0xf7, 0x8c, 0xb3, 0xd9, 0xff,
0xf7, 0x4b, 0xcb, 0x1c, 0x29, 0x28, 0xe0, 0x9c, 0x2f, 0xe6, 0x10, 0x43,
0x22, 0x81, 0x19, 0x91, 0x30, 0x9a, 0x29, 0x20, 0x04, 0xf4, 0x0e, 0xe0,
0xce, 0xa9, 0x58, 0x8f, 0x0a, 0xe2, 0xef, 0x2f, 0x93, 0xa5, 0xaa, 0xcc,
0x9b, 0x51, 0x87, 0xfa, 0xfc, 0x2b, 0xc0, 0xb5, 0x68, 0x3d, 0x7f, 0x2f,
0xda, 0x9e, 0xe8, 0x02, 0xef, 0xa4, 0xc5, 0x9f, 0x6d, 0x4f, 0x59, 0x70,
0xcd, 0xb2, 0x2e, 0x78, 0xff, 0xd2, 0xfd, 0xb4, 0x57, 0x2f, 0x22, 0xff,
0xe9, 0x2a, 0xc2, 0xee, 0x75, 0xc5, 0xb3, 0x0a, 0xa1, 0x79, 0x80, 0xec,
0xe5, 0x87, 0xf0, 0xab, 0xaf, 0xe4, 0x67, 0x0f, 0xae, 0x04, 0x60, 0xe6,
0xaf, 0x7c, 0x84, 0xde, 0x5f, 0x5f, 0x0e, 0xe5, 0x82, 0x04, 0x04, 0xc5,
0xa0, 0x65, 0x60, 0xa9, 0x18, 0x66, 0xc6, 0x9d, 0x0c, 0x00, 0x28, 0x4b,
0x8f, 0x15, 0xc8, 0x47, 0x11, 0x50, 0x58, 0xae, 0x0a, 0xa7, 0x0d, 0xd4,
0x48, 0xcf, 0x7e, 0x1f, 0x6e, 0xf7, 0x8b, 0xe4, 0x3b, 0x7f, 0xd2, 0x05,
0x1f, 0x26, 0xe5, 0xf8, 0x3d, 0xe3, 0x96, 0xcb, 0x97, 0x7e, 0xb6, 0x50,
0x6d, 0x6c, 0x98, 0x6d, 0xff, 0xf2, 0x29, 0x7c, 0xf3, 0x40, 0x17, 0x78,
0xa7, 0x33, 0x49, 0xb5, 0x3d, 0x8f, 0xde, 0xc3, 0xe8, 0xab, 0x1b, 0x01,
0x98, 0xf6, 0xa1, 0x3b, 0x8b, 0xdd, 0x97, 0x22, 0xd7, 0x86, 0x12, 0x78,
0x41, 0xc2, 0x30, 0x23, 0x12, 0x8c, 0x08, 0x22, 0x82, 0xc2, 0x39, 0x3b,
0xf6, 0x4e, 0x2c, 0x3a, 0x21, 0x81, 0x7f, 0xbb, 0x45, 0x06, 0x82, 0x72,
0x53, 0x1c, 0xc1, 0xf4, 0x39, 0xe7, 0x83, 0x6b, 0xd1, 0x7e, 0x75, 0xe8,
0x08, 0xe0, 0x93, 0xc7, 0x00, 0xb3, 0xe6, 0x5f, 0x06, 0xc0, 0xe6, 0xb5,
0x0f, 0xf0, 0x83, 0xad, 0x67, 0xf2, 0xa2, 0x5c, 0x7f, 0xd4, 0xf3, 0x53,
0x89, 0xfc, 0xef, 0xb3, 0x3f, 0x00, 0x20, 0x3d, 0x6b, 0x61, 0x37, 0x90,
0x15, 0x83, 0x88, 0x01, 0xb1, 0x88, 0xb1, 0x60, 0x2d, 0xd6, 0x1a, 0x7a,
0xad, 0xe9, 0x46, 0x6e, 0x80, 0xa5, 0x27, 0x24, 0xa0, 0xca, 0x55, 0xaa,
0xd0, 0x13, 0x43, 0x34, 0x7d, 0x3e, 0xda, 0xdc, 0x4f, 0x6b, 0xfb, 0xd3,
0x47, 0xee, 0xac, 0x93, 0xfa, 0xc5, 0xb3, 0xb2, 0xee, 0xef, 0xfa, 0x9e,
0xf9, 0x5c, 0x73, 0xfb, 0x4a, 0x16, 0xff, 0xd1, 0xe3, 0xa4, 0x1f, 0x5e,
0x7d, 0x18, 0xfc, 0x14, 0x22, 0x5b, 0xc6, 0x92, 0x23, 0x00, 0x84, 0x20,
0x85, 0x7d, 0xc4, 0xa0, 0x62, 0xc1, 0x46, 0x88, 0x8d, 0x11, 0xb1, 0x88,
0x58, 0x2a, 0x46, 0x90, 0x32, 0x46, 0x80, 0x85, 0x27, 0x24, 0x10, 0xca,
0x9a, 0xbe, 0x2f, 0x81, 0xa8, 0xe7, 0x34, 0xb2, 0xd7, 0x5f, 0x3a, 0xbc,
0x9a, 0x9e, 0xa3, 0x88, 0x7c, 0x70, 0x6e, 0x93, 0xad, 0x3f, 0x7e, 0x00,
0x80, 0x4b, 0x3f, 0x74, 0x2b, 0x17, 0xbe, 0xff, 0x06, 0x00, 0x24, 0x1d,
0xe8, 0xd6, 0x41, 0x9d, 0xdf, 0x69, 0x3b, 0xe1, 0x3f, 0x77, 0xd4, 0x99,
0x70, 0x86, 0x05, 0xd7, 0x2c, 0x03, 0xa0, 0x35, 0xb2, 0xbe, 0x78, 0x06,
0x5b, 0xd8, 0xc6, 0x44, 0x88, 0x8d, 0x90, 0x28, 0x46, 0xa2, 0x08, 0x31,
0x86, 0xde, 0xc8, 0x80, 0x74, 0xf3, 0xe7, 0xc0, 0x89, 0x15, 0x80, 0x25,
0x41, 0x21, 0x16, 0x48, 0xfa, 0x67, 0x93, 0x8d, 0x6e, 0x3e, 0xc2, 0x36,
0x1d, 0xe0, 0x9d, 0x20, 0x8e, 0x51, 0x4e, 0x7b, 0xe6, 0xf3, 0x34, 0xb7,
0x3d, 0x59, 0x58, 0xa2, 0xd6, 0x87, 0xb6, 0xc6, 0x68, 0xfc, 0xd7, 0xe0,
0x11, 0xe0, 0x37, 0xed, 0x4f, 0x78, 0x70, 0x4b, 0x1f, 0xa3, 0x3a, 0x93,
0x8f, 0xfe, 0xe9, 0x03, 0xf4, 0xcf, 0x3a, 0x1b, 0x80, 0x7d, 0x4f, 0xdd,
0x4f, 0xa0, 0x50, 0x00, 0xb1, 0x18, 0x6b, 0x31, 0x51, 0x8c, 0x89, 0x22,
0xc4, 0x94, 0x56, 0x12, 0x41, 0xb5, 0xcb, 0x60, 0xc9, 0x54, 0x02, 0x47,
0xa4, 0xd1, 0xa0, 0x0c, 0x08, 0x50, 0xb5, 0x80, 0x6b, 0x91, 0x1f, 0xd8,
0x49, 0x08, 0xe5, 0xf6, 0xaf, 0xe5, 0xce, 0xab, 0x47, 0x96, 0x06, 0x7e,
0xfc, 0x00, 0x7e, 0xf5, 0x55, 0x64, 0x67, 0x2c, 0xc2, 0x54, 0x06, 0xc8,
0xb6, 0xad, 0xe9, 0x06, 0xec, 0xae, 0xf1, 0x88, 0xe7, 0x5e, 0xaf, 0xb2,
0xaf, 0x65, 0x59, 0x70, 0xcd, 0x32, 0xae, 0xbd, 0x7d, 0x65, 0x77, 0x73,
0x6b, 0x8d, 0xac, 0xe7, 0xf5, 0x1f, 0x7d, 0x83, 0x10, 0x2c, 0x6a, 0x0d,
0x18, 0x8b, 0xd8, 0x08, 0x63, 0x23, 0xac, 0x08, 0x6a, 0x02, 0x2a, 0xbe,
0xfb, 0xa2, 0xe3, 0x95, 0x9c, 0x53, 0x09, 0x2c, 0x32, 0x02, 0x56, 0x80,
0xbc, 0x49, 0x6b, 0xcf, 0x08, 0xc6, 0x14, 0xd2, 0x50, 0x7e, 0xea, 0x94,
0xda, 0xa6, 0xd3, 0xfc, 0xce, 0x75, 0xdd, 0x20, 0x45, 0xe1, 0x85, 0xd1,
0x0a, 0x2f, 0xee, 0xa9, 0x30, 0x77, 0xc1, 0x62, 0x6e, 0xba, 0x7d, 0x65,
0x37, 0xd8, 0x01, 0xc6, 0xd7, 0x3d, 0xc2, 0xf0, 0x3f, 0xac, 0x28, 0x4e,
0x64, 0x08, 0x5a, 0x06, 0xae, 0xb1, 0x31, 0x36, 0x8a, 0x8b, 0x82, 0xd0,
0x7a, 0x10, 0xd3, 0xad, 0x9b, 0x8e, 0xc7, 0x60, 0x2a, 0x81, 0x62, 0xf5,
0x7c, 0xa1, 0x80, 0x86, 0xa2, 0x0c, 0xec, 0x2a, 0xd0, 0x01, 0x7e, 0x0c,
0x02, 0x9d, 0x97, 0xa8, 0xc2, 0x73, 0xaf, 0x57, 0x79, 0x79, 0x7f, 0xca,
0xe2, 0x65, 0x5f, 0x62, 0xf1, 0xad, 0x5f, 0xec, 0x3e, 0xd3, 0xda, 0xbc,
0x96, 0x3d, 0x8f, 0xdc, 0xcd, 0xd8, 0xcf, 0xd7, 0xd2, 0xf6, 0x42, 0x50,
0x43, 0x30, 0xa6, 0xb0, 0x4b, 0x09, 0xde, 0x46, 0x11, 0x26, 0x14, 0x72,
0x7b, 0x84, 0x56, 0x27, 0x8b, 0x9d, 0xa4, 0x02, 0x18, 0x81, 0xa0, 0x02,
0xae, 0x45, 0x50, 0x41, 0x3a, 0x16, 0x42, 0x8f, 0x28, 0x8f, 0x8f, 0x47,
0x60, 0x3c, 0x33, 0xbc, 0xbc, 0x3f, 0xe5, 0xda, 0xdb, 0x57, 0xf2, 0xde,
0x1b, 0x3f, 0xd3, 0x05, 0x3e, 0xfa, 0xbd, 0x15, 0xb4, 0x46, 0xb7, 0x93,
0x7b, 0xc1, 0x79, 0xc1, 0xa9, 0xe0, 0xd5, 0x10, 0x24, 0x22, 0xb2, 0x31,
0x51, 0x7c, 0x98, 0x80, 0x38, 0x87, 0x22, 0x18, 0x85, 0x86, 0x87, 0x70,
0xb8, 0xdc, 0x59, 0xf7, 0x96, 0x04, 0x44, 0x84, 0x56, 0x2e, 0xb4, 0xf6,
0x8e, 0x40, 0x30, 0x65, 0x81, 0xaf, 0xc5, 0x76, 0x2f, 0xe5, 0xa6, 0xdf,
0x21, 0x32, 0x65, 0x32, 0x55, 0x18, 0x3e, 0x14, 0xd3, 0x3f, 0x6b, 0x6e,
0x17, 0xfc, 0xf8, 0xb3, 0xf7, 0x33, 0x7a, 0xff, 0x0a, 0xbc, 0x07, 0x17,
0x84, 0x3c, 0x40, 0x1e, 0xc0, 0x63, 0x50, 0x13, 0x61, 0x6c, 0x8c, 0x89,
0x13, 0xa2, 0x24, 0x25, 0x8a, 0x13, 0x22, 0x31, 0xa8, 0x0f, 0x84, 0x72,
0x83, 0xd8, 0xe7, 0x94, 0x49, 0xf5, 0xda, 0x81, 0xa9, 0x04, 0xa6, 0xa6,
0xd1, 0x35, 0x8a, 0xd0, 0x74, 0x42, 0x36, 0xf6, 0x66, 0x91, 0xde, 0x88,
0x08, 0x6a, 0x09, 0x18, 0x82, 0x0a, 0x5e, 0x05, 0xef, 0xc1, 0xbb, 0xe2,
0x84, 0xd5, 0xed, 0xe5, 0xf7, 0x2d, 0x27, 0xdd, 0x74, 0x0a, 0xf0, 0xe6,
0xf7, 0xef, 0x26, 0x77, 0x90, 0x79, 0x21, 0xf3, 0x65, 0xf1, 0x86, 0x25,
0x48, 0x84, 0xda, 0x18, 0x1b, 0x57, 0x88, 0xd3, 0x94, 0x38, 0x49, 0x89,
0xe3, 0x18, 0x63, 0x2c, 0x52, 0xde, 0x4b, 0x4c, 0xe4, 0x5a, 0xac, 0xfe,
0xe1, 0x95, 0x5a, 0xf3, 0x56, 0x0a, 0x1c, 0x08, 0x0a, 0x07, 0x9c, 0x61,
0xfc, 0x8d, 0x5d, 0x24, 0xf5, 0x7e, 0xb2, 0x66, 0x83, 0xee, 0x8c, 0x21,
0xa0, 0xc1, 0x13, 0xca, 0xca, 0x65, 0x6a, 0x53, 0x85, 0x99, 0xb1, 0x27,
0xf4, 0x1c, 0xae, 0x48, 0x1b, 0x6f, 0x6c, 0xc7, 0x07, 0xc1, 0x05, 0xc8,
0xd5, 0x90, 0x63, 0x08, 0xc4, 0x60, 0x63, 0xa2, 0xa4, 0x4a, 0x5c, 0xa9,
0x92, 0xa4, 0x55, 0xe2, 0x24, 0xc5, 0x1a, 0x83, 0x66, 0x39, 0x1a, 0x02,
0x78, 0xcf, 0xee, 0xcc, 0xe3, 0x83, 0x3f, 0xa1, 0x85, 0xa6, 0x2a, 0xb0,
0xde, 0x2b, 0x8c, 0xe5, 0x42, 0x7b, 0xa2, 0x05, 0x2a, 0x88, 0x49, 0xc0,
0xa6, 0x60, 0x52, 0xd4, 0x24, 0x04, 0x49, 0x50, 0x8d, 0xf0, 0xc1, 0xe2,
0x82, 0xc1, 0x39, 0x21, 0x77, 0x42, 0x9e, 0x0b, 0xce, 0x09, 0xd3, 0xac,
0xe3, 0xcc, 0x1d, 0x3f, 0x22, 0x34, 0xc7, 0x68, 0x8d, 0xac, 0x27, 0x73,
0x42, 0x16, 0x0c, 0xb9, 0x5a, 0x1c, 0x11, 0x6a, 0x12, 0x24, 0x4e, 0x88,
0xd3, 0x1a, 0x49, 0xb5, 0x46, 0x5a, 0xad, 0x93, 0x56, 0xaa, 0xc4, 0x49,
0x82, 0x35, 0x16, 0x09, 0x8a, 0x3a, 0x4f, 0xc8, 0x3d, 0x3b, 0x32, 0x4f,
0xe8, 0x64, 0x96, 0x93, 0x51, 0x00, 0x31, 0x0f, 0x05, 0xe5, 0x2b, 0xfb,
0xbd, 0xe0, 0x82, 0x21, 0xcf, 0x3d, 0xd8, 0x42, 0xd6, 0xd0, 0x39, 0xb1,
0x93, 0xa3, 0xe4, 0xa8, 0x77, 0x04, 0x0d, 0x04, 0xf5, 0xc5, 0x61, 0xbe,
0xf4, 0x6c, 0x3b, 0x08, 0xaf, 0x3c, 0xff, 0x0c, 0x2f, 0xac, 0x98, 0xcd,
0x99, 0xa9, 0x47, 0x24, 0x2a, 0xfd, 0x6e, 0xc1, 0x94, 0x69, 0x32, 0xa9,
0x10, 0xa7, 0x15, 0xd2, 0x6a, 0xad, 0x00, 0x1f, 0xc7, 0x88, 0x2a, 0x21,
0xcf, 0x08, 0xb9, 0x23, 0x64, 0x39, 0x3b, 0xda, 0x39, 0x2d, 0xef, 0x08,
0x3e, 0x74, 0xb4, 0x7e, 0x68, 0x70, 0x48, 0xc7, 0x4e, 0xa8, 0xc0, 0xa7,
0x1f, 0xf6, 0xeb, 0x42, 0x60, 0x38, 0x04, 0x65, 0x57, 0x0b, 0x9c, 0x13,
0x90, 0x18, 0x89, 0x52, 0x4c, 0x5c, 0xc3, 0x26, 0x35, 0x4c, 0x5a, 0x47,
0x92, 0x1a, 0x44, 0x55, 0xd4, 0x54, 0x50, 0x5b, 0xc1, 0x4b, 0x42, 0x90,
0x18, 0x47, 0xcc, 0x4f, 0xc7, 0xea, 0x6c, 0xe3, 0x74, 0x7a, 0xaf, 0xbd,
0x8b, 0xfc, 0xaa, 0x2f, 0x20, 0xbd, 0xb3, 0x20, 0xae, 0x20, 0x49, 0x0d,
0x5b, 0xad, 0x11, 0xd7, 0x7a, 0xa9, 0xf6, 0xf4, 0x52, 0xeb, 0xe9, 0xa3,
0x5a, 0xef, 0x21, 0xad, 0x54, 0xb0, 0x36, 0x2a, 0xce, 0x19, 0xb9, 0xc3,
0xb7, 0x33, 0xf2, 0x56, 0xc6, 0xd6, 0xa6, 0xc3, 0xfb, 0x30, 0x39, 0x80,
0x57, 0x1f, 0xe5, 0xd9, 0xa3, 0x14, 0x00, 0x14, 0x79, 0xd8, 0x07, 0xbd,
0x63, 0x67, 0x5b, 0x99, 0xe3, 0x15, 0xab, 0x02, 0x12, 0x61, 0xe2, 0xb8,
0x48, 0x3d, 0x21, 0x20, 0x3e, 0xc7, 0x59, 0x87, 0xfa, 0x42, 0x09, 0xf1,
0x1e, 0x2d, 0x2f, 0x3c, 0xf7, 0xe5, 0xca, 0xb2, 0x7b, 0x1e, 0x60, 0xee,
0x65, 0x1f, 0x04, 0xe0, 0xd0, 0xe6, 0x1b, 0xd9, 0xfc, 0xcd, 0x8f, 0x23,
0x51, 0x5c, 0x64, 0x9a, 0x24, 0x25, 0x49, 0x8b, 0xc0, 0x8d, 0xa2, 0x18,
0x01, 0xd4, 0x39, 0x7c, 0x96, 0xe3, 0x5a, 0x2d, 0x42, 0xb3, 0xc5, 0xcf,
0x27, 0x32, 0x1a, 0x2e, 0x9f, 0x4c, 0x60, 0xfb, 0xe0, 0x90, 0x1e, 0xeb,
0x32, 0xf8, 0x68, 0x02, 0x62, 0xec, 0x2a, 0x1f, 0xc2, 0x1d, 0x2d, 0x17,
0x78, 0xad, 0x11, 0x38, 0x3f, 0x51, 0x54, 0x05, 0x31, 0x51, 0x51, 0xa7,
0x88, 0x10, 0x54, 0x91, 0xc4, 0x61, 0x5c, 0x8e, 0x71, 0x0e, 0xe7, 0x3c,
0x12, 0x3c, 0xa2, 0xca, 0x8c, 0xea, 0x44, 0x17, 0x3c, 0x40, 0xef, 0x05,
0xef, 0xa7, 0xd2, 0xdb, 0x8f, 0x4d, 0x12, 0xa2, 0x38, 0x21, 0x4e, 0xd2,
0x22, 0xe7, 0xdb, 0x08, 0x50, 0x42, 0x96, 0x13, 0xda, 0x19, 0xae, 0xd1,
0xc4, 0x35, 0x9a, 0x8c, 0x4c, 0xb4, 0xd8, 0xd5, 0xce, 0x70, 0xb9, 0x27,
0x84, 0xae, 0x7d, 0x06, 0x8f, 0x05, 0xfe, 0x28, 0x0b, 0x01, 0xfc, 0xde,
0xa7, 0x3f, 0xb5, 0xdd, 0x07, 0xfd, 0x5e, 0xe6, 0x3c, 0x23, 0x4d, 0xc7,
0xfe, 0x66, 0x8e, 0xcf, 0x5d, 0x71, 0xc5, 0x2c, 0x06, 0x13, 0xa7, 0x44,
0x95, 0x1a, 0x49, 0xbd, 0x8f, 0xb4, 0x77, 0x80, 0xb4, 0x6f, 0x1a, 0xd5,
0xfe, 0x69, 0x54, 0xfa, 0x8a, 0xbe, 0xf8, 0xc2, 0x39, 0xec, 0xdb, 0xfc,
0x5c, 0x77, 0xbe, 0xd6, 0x6b, 0x2f, 0xd2, 0x33, 0x30, 0x9d, 0x7a, 0xdf,
0x00, 0xb5, 0xde, 0x3e, 0x2a, 0xb5, 0x3a, 0x49, 0x92, 0x62, 0x44, 0xc0,
0xf9, 0xc2, 0x32, 0x13, 0x0d, 0xdc, 0xc4, 0x04, 0xaf, 0x8f, 0x37, 0x78,
0x79, 0xa2, 0x4d, 0x96, 0xe5, 0x78, 0xef, 0x3b, 0xab, 0xbf, 0x6e, 0x70,
0x48, 0xef, 0x3f, 0x1e, 0x81, 0x63, 0x1e, 0xea, 0xbf, 0x73, 0x73, 0xed,
0xdc, 0x3c, 0xcf, 0x5f, 0x48, 0xe2, 0xb8, 0xbf, 0xa7, 0x5a, 0x61, 0x61,
0x7f, 0x8d, 0xde, 0xde, 0x3a, 0x51, 0xbd, 0x4e, 0x94, 0x56, 0x31, 0x69,
0x82, 0xd8, 0x42, 0x3c, 0xa5, 0xd8, 0x29, 0x55, 0xb5, 0xbb, 0xe5, 0x9b,
0x4a, 0x2f, 0xd5, 0x4b, 0xaf, 0x47, 0x44, 0x68, 0x6e, 0x7a, 0x02, 0xc9,
0x5b, 0x88, 0x31, 0x48, 0x79, 0x07, 0xa3, 0xbe, 0x04, 0xde, 0x6c, 0x92,
0x8f, 0x4f, 0x90, 0x8f, 0x8f, 0xb3, 0xfb, 0xe0, 0x38, 0xeb, 0xc7, 0x9a,
0xb4, 0xda, 0x2d, 0xb2, 0xcc, 0xe1, 0x43, 0xd7, 0x3e, 0x8b, 0x06, 0x87,
0x74, 0xfd, 0x29, 0x11, 0xe0, 0xd1, 0xcf, 0xc9, 0x37, 0xee, 0xfd, 0xee,
0x5d, 0x22, 0xf2, 0xb7, 0x95, 0x24, 0xa1, 0xde, 0x25, 0xd1, 0x43, 0x5c,
0xab, 0x63, 0xab, 0x15, 0x6c, 0x92, 0x16, 0x35, 0xbb, 0xb5, 0x80, 0x14,
0x35, 0x48, 0x77, 0x77, 0x90, 0xf2, 0x6b, 0xf2, 0x99, 0x56, 0x09, 0xde,
0x13, 0x5c, 0x19, 0xa8, 0x8d, 0x06, 0x6e, 0xa2, 0x41, 0x3e, 0x3e, 0xce,
0xd6, 0x83, 0x0d, 0x36, 0x8f, 0x37, 0x69, 0xb5, 0x8b, 0xd5, 0x0f, 0x3e,
0x74, 0x72, 0xff, 0x5d, 0x83, 0x43, 0xfa, 0xf5, 0xe3, 0x81, 0x3f, 0x3e,
0x81, 0x92, 0xc4, 0xaa, 0x6f, 0x7d, 0xe7, 0x21, 0x6b, 0xed, 0x8d, 0x69,
0x9a, 0xd0, 0x53, 0xa9, 0xf0, 0x9e, 0xbe, 0x1a, 0x03, 0x3d, 0x75, 0xa2,
0x5a, 0x8d, 0xa8, 0x5a, 0xc1, 0xa6, 0x15, 0x4c, 0x1c, 0x23, 0xd6, 0x22,
0xc6, 0x94, 0xd5, 0x63, 0x59, 0xfe, 0x6a, 0x07, 0x77, 0xb1, 0xe2, 0xc1,
0x39, 0x7c, 0xee, 0xf0, 0xad, 0x16, 0x79, 0xb3, 0x85, 0x6b, 0x4c, 0x70,
0x68, 0xbc, 0xc1, 0xcb, 0x07, 0x9b, 0xec, 0x69, 0x36, 0x69, 0xb7, 0x32,
0x72, 0xe7, 0xbb, 0xd6, 0x51, 0x58, 0x3d, 0x38, 0xa4, 0x2b, 0x4e, 0x04,
0xfe, 0xc4, 0x04, 0x80, 0x6f, 0x7f, 0xb4, 0x77, 0x5a, 0xa3, 0xd1, 0x1c,
0xb2, 0xd6, 0x2e, 0x4c, 0xd2, 0x98, 0x6a, 0x9a, 0x72, 0x4e, 0xbd, 0xca,
0x59, 0x3d, 0x35, 0xd2, 0x5a, 0x15, 0x5b, 0xa9, 0x10, 0xa5, 0x29, 0x26,
0x4e, 0xca, 0x43, 0x88, 0xa1, 0xa8, 0xbf, 0x41, 0x83, 0xa2, 0x21, 0x10,
0x82, 0x27, 0xe4, 0x0e, 0x9f, 0x65, 0xf8, 0x76, 0x1b, 0xd7, 0x6a, 0xd1,
0x98, 0x68, 0x32, 0x3c, 0xd1, 0x62, 0x64, 0xa2, 0x45, 0xb3, 0xdd, 0x26,
0x6b, 0xe7, 0xe4, 0x9d, 0x9c, 0x7f, 0x0a, 0xe0, 0xdf, 0x92, 0x00, 0xc0,
0xbd, 0x37, 0xf7, 0x4e, 0x9b, 0x68, 0x34, 0x87, 0x22, 0x6b, 0x16, 0xc6,
0x51, 0x4c, 0x92, 0xc4, 0xf4, 0x54, 0x53, 0xce, 0xaa, 0x56, 0x99, 0x55,
0x4d, 0xa9, 0xa4, 0x29, 0x36, 0x2d, 0x09, 0x44, 0x51, 0x79, 0x30, 0x2f,
0x08, 0x04, 0xef, 0x8b, 0x14, 0x99, 0x67, 0xf8, 0x76, 0xc6, 0xfe, 0x56,
0xc6, 0x68, 0xb3, 0xcd, 0x8e, 0x46, 0xbb, 0x6b, 0x97, 0xdc, 0x39, 0x9c,
0x2f, 0x76, 0xdc, 0x12, 0xcb, 0x49, 0x83, 0x3f, 0x29, 0x02, 0x00, 0xdf,
0xfa, 0xcd, 0xde, 0x69, 0x8d, 0x46, 0xe3, 0xdf, 0x8d, 0x98, 0xab, 0xa2,
0xc8, 0x12, 0xc5, 0x31, 0x69, 0x5c, 0x90, 0x99, 0x9e, 0xc6, 0xf4, 0xc7,
0x31, 0xfd, 0x71, 0x44, 0x6a, 0x2d, 0xb1, 0x29, 0x3c, 0x9f, 0xab, 0xd2,
0xf6, 0x81, 0xf1, 0xdc, 0x73, 0x20, 0xcb, 0x79, 0xb3, 0xed, 0x68, 0xe4,
0x39, 0x59, 0x9e, 0x93, 0x67, 0x79, 0xd7, 0x2e, 0x3e, 0x04, 0x74, 0x52,
0xba, 0x1c, 0x1c, 0xd2, 0xbb, 0x4f, 0x16, 0xfc, 0x49, 0x13, 0x00, 0xe0,
0xd1, 0xcf, 0xc9, 0xca, 0xaf, 0x7d, 0x7b, 0x50, 0x84, 0x2f, 0x5b, 0x53,
0x5c, 0x79, 0xd8, 0x28, 0x22, 0xb2, 0x96, 0x28, 0xb2, 0x58, 0x6b, 0x31,
0xc6, 0x74, 0x83, 0x56, 0x55, 0xf1, 0x41, 0xf1, 0xde, 0xe3, 0xbc, 0xc7,
0x3b, 0x7f, 0x18, 0xb4, 0x0f, 0x84, 0x50, 0x06, 0x6a, 0x61, 0x99, 0xed,
0xc0, 0xf2, 0xc1, 0x21, 0x5d, 0x7b, 0x2a, 0xe0, 0x4f, 0x8d, 0x40, 0xd9,
0xfe, 0xe2, 0x5a, 0xbb, 0x48, 0x55, 0x57, 0x19, 0x23, 0x57, 0x19, 0x63,
0x30, 0x62, 0x30, 0x46, 0x8a, 0x34, 0x49, 0x71, 0x09, 0x05, 0x9d, 0x8b,
0x5b, 0x2d, 0x80, 0x86, 0x40, 0x08, 0xda, 0x05, 0xad, 0xda, 0xb5, 0xcb,
0x01, 0x60, 0xd5, 0xa9, 0xae, 0xfa, 0x3b, 0x22, 0xd0, 0x69, 0x83, 0x57,
0xcb, 0x55, 0x46, 0x64, 0x85, 0x18, 0x59, 0x2a, 0x22, 0x03, 0x66, 0x0a,
0x01, 0x80, 0xa0, 0xa1, 0x4b, 0xa2, 0x58, 0xec, 0x2e, 0xf0, 0x75, 0xc0,
0x2a, 0x8e, 0x53, 0xa0, 0xfd, 0xbf, 0x10, 0x98, 0xdc, 0x06, 0xaf, 0x96,
0xa5, 0xc0, 0x22, 0x8a, 0x6b, 0x8f, 0x79, 0x65, 0xef, 0xb4, 0x03, 0x14,
0x80, 0xb7, 0x53, 0x94, 0xc3, 0x6b, 0x06, 0x87, 0x74, 0xf8, 0x1d, 0xbf,
0xb4, 0x6c, 0xbf, 0xb0, 0xbf, 0xd4, 0xff, 0xb2, 0xda, 0xbb, 0xfe, 0x9f,
0x3d, 0xde, 0xf5, 0x04, 0xfe, 0x0f, 0x54, 0x13, 0xec, 0xcc, 0x99, 0x7c,
0x3d, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
@@ -1,283 +0,0 @@
/* XPM */
static const char *toolbar_help_xpm[] = {
/* columns rows colors chars-per-pixel */
"48 48 229 2",
" c #121F74",
". c #0F2276",
"X c #062D7C",
"o c #092D7C",
"O c #132376",
"+ c #192677",
"@ c #152678",
"# c #192678",
"$ c #132D7C",
"% c #1C2E7D",
"& c #04307F",
"* c #08317F",
"= c #16317F",
"- c #232F7E",
"; c #292D7E",
": c #362F7F",
"> c #22317E",
", c #012F83",
"< c #0A2E81",
"1 c #023483",
"2 c #093384",
"3 c #00398A",
"4 c #163C87",
"5 c #143D8A",
"6 c #013F90",
"7 c #233482",
"8 c #2B3581",
"9 c #2D3D87",
"0 c #223C88",
"q c #293F88",
"w c #373784",
"e c #303C86",
"r c #473E89",
"t c #00408D",
"y c #0E4089",
"u c #03488F",
"i c #16438B",
"p c #014493",
"a c #014B94",
"s c #0B4D92",
"d c #004F9A",
"f c #134F93",
"g c #055097",
"h c #0B5094",
"j c #01559C",
"k c #00589E",
"l c #085A9E",
"z c #125094",
"x c #115698",
"c c #22458D",
"v c #2C448B",
"b c #2D4A8F",
"n c #33478D",
"m c #3B448B",
"M c #35498F",
"N c #224F95",
"B c #255596",
"V c #2A5194",
"C c #245C9D",
"Z c #2C5E9D",
"A c #395495",
"S c #375798",
"D c #355A9A",
"F c #3A5B9A",
"G c #2D619E",
"H c #3E639E",
"J c #005CA3",
"K c #0D5EA1",
"L c #0262A6",
"P c #0065AB",
"I c #0069AE",
"U c #1563A5",
"Y c #1C66A5",
"T c #1F68A6",
"R c #176BAB",
"E c #0064B2",
"W c #006DB2",
"Q c #106FB0",
"! c #0071B6",
"~ c #0C73B5",
"^ c #0074B9",
"/ c #1273B3",
"( c #1C79B6",
") c #2666A3",
"_ c #2C65A2",
"` c #2569A6",
"' c #2A6AA6",
"] c #266EA9",
"[ c #2C6EA9",
"{ c #3567A2",
"} c #3A65A1",
"| c #336BA5",
" . c #3A69A3",
".. c #336EA8",
"X. c #2C71AA",
"o. c #3373AB",
"O. c #3579AF",
"+. c #3D79AF",
"@. c #2176B2",
"#. c #297DB7",
"$. c #207FBB",
"%. c #3577B0",
"&. c #347AB2",
"*. c #3D7CB2",
"=. c #4F4A91",
"-. c #5B4E92",
";. c #435495",
":. c #465E9B",
">. c #4A5D9B",
",. c #555597",
"<. c #644E91",
"1. c #665898",
"2. c #43629E",
"3. c #49609D",
"4. c #55639E",
"5. c #4165A0",
"6. c #4B6DA5",
"7. c #566FA7",
"8. c #5A6BA4",
"9. c #536FAA",
"0. c #5670A7",
"q. c #5778AC",
"w. c #427CB1",
"e. c #517EB0",
"r. c #6E69A3",
"t. c #6B76AA",
"y. c #7174A9",
"u. c #8272A7",
"i. c #8476AA",
"p. c #8872A8",
"a. c #2580BB",
"s. c #2C83BD",
"d. c #3386BD",
"f. c #3488BF",
"g. c #398ABF",
"h. c #4585B7",
"j. c #4884B7",
"k. c #448BBD",
"l. c #488DBF",
"z. c #5282B3",
"x. c #5B81B1",
"c. c #5688B7",
"v. c #5488B8",
"b. c #7C89B6",
"n. c #738DB8",
"m. c #6091BD",
"M. c #348AC0",
"N. c #3692C8",
"B. c #3E95C9",
"V. c #428DC1",
"C. c #569ECA",
"Z. c #6295C0",
"A. c #679AC4",
"S. c #729CC5",
"D. c #7C9BC2",
"F. c #60A3CE",
"G. c #7DACCF",
"H. c #6CA7D1",
"J. c #6FABD3",
"K. c #8F84B4",
"L. c #998AB7",
"P. c #9B8FB9",
"I. c #A397BE",
"U. c #83ACCE",
"Y. c #8FAFCE",
"T. c #94A7C9",
"R. c #9DA7C9",
"E. c #97AECE",
"W. c #9BABCB",
"Q. c #92B4D2",
"!. c #93BFDC",
"~. c #99BFDA",
"^. c #A2A5C8",
"/. c #A0ABCB",
"(. c #B2A7C9",
"). c #B6AECD",
"_. c #A3B1CF",
"`. c #A6B4D1",
"'. c #AAB5D1",
"]. c #A7B8D4",
"[. c #ABBAD5",
"{. c #A0BED9",
"}. c #AEBFD8",
"|. c #B2BED7",
" X c #95C3DF",
".X c #A3C4DD",
"XX c #B7C2D9",
"oX c #B9C4DC",
"OX c #95C4E0",
"+X c #9DC7E2",
"@X c #9DC9E4",
"#X c #A2C7E0",
"$X c #A5CAE2",
"%X c #AECDE3",
"&X c #B0CCE2",
"*X c #BACCE0",
"=X c #BFD7E8",
"-X c #CDCCCC",
";X c #D0CFCF",
":X c #C7C5DB",
">X c #CDC4DB",
",X c #D4D3D3",
"<X c #DCDBDB",
"1X c #E0DFDF",
"2X c #D6CFE2",
"3X c #C1D3E4",
"4X c #DAD3E3",
"5X c #D3DEEB",
"6X c #D6E2EE",
"7X c #DBE3EE",
"8X c #D1E4F0",
"9X c #DFE6F0",
"0X c #DBE9F2",
"qX c #E3E3E3",
"wX c #E8E7E7",
"eX c #EAE3EE",
"rX c #ECEBEB",
"tX c #E0E6F0",
"yX c #E4EDF4",
"uX c #E8EBF3",
"iX c #F2EDF2",
"pX c #EBF1F7",
"aX c #EFF5F9",
"sX c #F5F4F4",
"dX c #F8F7F7",
"fX c #F2F4F8",
"gX c #F6FAFC",
"hX c #FFFFFF",
"jX c None",
/* pixels */
"jXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjX,X,X,X,X,X,X;X-XjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjX,X<XqXrXsXdXhXhXhXhXdXsXrXqX,X-XjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjXjXjX<XwXsXhXhXhXgXfXuX5X5XuXfXgXhXhXhXsXqX,XjXjXjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjX<XrXhXhXhX5XR.t.;.e 8 - - 8 e ;.t.R.5XhXhXdXwX,XjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjX,XwXhXhXgX'.4.> O # % > > > > % + O > 4.'.gXhXdXqX-XjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjX<XsXhXhX'.;.O O - 9 M ;.;.>.>.>.>.;.;.M 9 > O O ;.'.hXhXrX,XjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXqXdXhX7X8.@ @ 7 M ;.>.>.>.>.>.>.>.>.>.>.>.>.;.M 7 @ @ 8.7XhXsX,XjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXqXhXhXXXv . 7 M >.>.>.:.:.:.:.:.:.:.:.:.:.:.:.>.>.>.M 7 . v XXhXsX<XjXjXjXjXjXjXjX",
"jXjXjXjXjXjXqXhXhX_.% $ q ;.3.:.:.2.2.:.F S S S S S S F F 2.3.:.:.>.;.q @ % _.hXsX,XjXjXjXjXjXjX",
"jXjXjXjXjX<XgXhX_.$ $ b :.3.2.2.2.F D 6.n.T.`.|.oX|./.b.8.A D 2.2.2.3.:.b $ $ _.hXsX,XjXjXjXjXjX",
"jXjXjXjX,XdXhXXX= $ b 2.2.2.2.H D q.}.pXhXhXhXhXhXhXhXhXdX:Xy.n H 5.2.2.3.n $ = oXhXrX-XjXjXjXjX",
"jXjXjXjXrXhX9Xv $ b 2.2.2.H } D D.fXhXhXhXhXhXhXhXhXhXhXhXhXhX).m D 5.2.2.2.b $ v tXhX1XjXjXjXjX",
"jXjXjX1XhXhX0.X c 2.2.H } } Z D.hXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhX>Xw D } H 2.2.c o 7.hXdX,XjXjXjX",
"jXjXjXsXhX[.o 4 F 5.} } { G e.gXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhX(.7 { } } 5.F 4 o [.hXwXjXjXjX",
"jXjXqXhXgXD 2 V } } { { { _ *XhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhX-.V | { } 5.V * S gXdX,XjXjX",
"jXjXsXhX].& i } .{ { | _ z.hXhXhXhXhXhXhXhXeX^.E.3XhXhXhXhXhXhXhXhXI.7 ..{ { } } i X ].hXqXjXjX",
"jX<XhXhX6.1 B .{ | | | ) Y.hXhXhXhXhXhXhX2Xm C ` ) {.hXhXhXhXhXhXhX>X; ..| { { .B 1 6.hXsX-XjX",
"jXwXhX6Xy j _ { | | | | _ 3XhXhXhXhXhXhXhX1.N O.o.' m.hXhXhXhXhXhXhX4X; | | | | { { j y 6XhX,XjX",
"jXrXhXE.1 / %.{ | .........X6XuXgXhXhXhXiX: [ o.X.T U.hXhXhXhXhXhXhX>X; o...| | { O.Q 1 E.hXqXjX",
"jXdXhXx.t ( d...| ....o.o.[ o.w.v.Z.S.U.D.5 l l d *.pXhXhXhXhXhXhXhXL.0 o.....| ..d.( t x.hXrXjX",
"<XhXgXG d a.M.&.| ..o.o.o.o.o.X.Y l d a d k j a j.pXhXhXhXhXhXhXhXsXr _ o.o...| &.f.a.d G gXsX-X",
"<XhXaXz k s.f.M.%...o.o.o.o.T l j j j j k k j A.gXhXhXhXhXhXhXhXhXi.c %.o.o...%.M.f.s.k f fXdX-X",
"qXhXyXs J d.f.f.f.O.o.O.X.K j j j k k k k j G.hXhXhXhXhXhXhXhXhXP.< K [ o.o.O.f.f.f.d.J s yXhX,X",
"qXhX5Xp L d.f.f.M.M.&.` j j j k k J J J j G.hXhXhXhXhXhXhXhXhXK.2 j j j ` &.f.M.f.f.d.L u 5XhX,X",
"qXhX5Xa L d.f.f.f.M.$.J j j k J J J J k k.hXhXhXhXhXhXhXhXsXr.3 J k j j J $.M.f.f.f.d.L a 5XhX,X",
"qXhXyXh L d.f.f.M.a.W W P k k J J J J J =XhXhXhXhXhXhXhXeX,.p L J k k L W W a.M.f.f.d.J s yXhX,X",
"qXhXaXx J s.f.f.s.W W W ! W L J J J J @.gXhXhXhXhXhXhXiX=.p L J J L W ! W W W s.f.f.s.J x fXdX,X",
"1XhXgX' j a.f.d.~ I W W W ! ! W P L J k.hXhXhXhXhXhXhXL., P L P W ! ! W W W I ~ d.f.a.j _ gXsX;X",
"jXdXhXc.a ( g.( I W W W W ! ! ! ^ ! I C.hXhXhXhXhXhXhX<.d ! ! ^ ! ! W W W W I I ( g.( a c.hXrXjX",
"jXsXhXQ.p / d.I I W W W W W ! ! ! ^ ! N.@X@X@X@X@X@X+XD E ^ ! ! ! ! W W W W I I I d./ p Q.hXqXjX",
"jXwXhX6Xg L / I I I W W W W W ! ! ! ^ W E E E E E E E ^ ^ ! ! ! ! W W W W I I I I / L g 6XhX<XjX",
"jXqXhXhX*.j I I I I I W W W W ! ! ! W B.J.H.H.H.H.H.J.o.L ^ ! ! W W W W W I I I I I j +.hXdX,XjX",
"jXjXsXhX{.a P I I I I W W W W W ! ! W @XhXhXhXhXhXhXhXp.p ^ ! W W W W W W I I I I P a {.hXwXjXjX",
"jXjXwXhXgX] k I I I I I W W W W W W W OXhXhXhXhXhXhXhXu.p ^ W W W W W W I I I I I j ] gXhX<XjXjX",
"jXjXjXdXhX.Xd L I I I I I W W W W W E OXhXhXhXhXhXhXhXu.p ^ W W W W W I I I I I L a .XhXrXjXjXjX",
"jXjXjXwXhXhXh.j P I I I I I W W W W I OXhXhXhXhXhXhXhXu.p ! W W W W I I I I I P j h.hXgX<XjXjXjX",
"jXjXjXjXsXhX0XU J I I I I I I W W W P XhXhXhXhXhXhXhXu.p ! W W W I I I I I I J U 0XhXwXjXjXjXjX",
"jXjXjXjX1XgXhX&Xk J I I I I I I I W P +XhXhXhXhXhXhXhXp.6 ! W I I I I I I I J k &XhXsX,XjXjXjXjX",
"jXjXjXjXjXwXhXhX~.k J I I I I I I I P F.$X$X$X$X$X$X$X9.j W I I I I I I P J k ~.hXdX<XjXjXjXjXjX",
"jXjXjXjXjXjXrXhXhX~.J J P I I I I I I P P P P P P P P I W I I I I I P P J J ~.hXhXqXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXrXhXhX%XR J P P I I I I I I I I I I I I I I I I I I P P J R %XhXhXqXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXrXhXhX0Xl.J L P P P I I I I I I I I I I I I I P P L J l.0XhXgXqXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXwXgXhXhX.X#.L L P P P P P I I I I P P P P P L J #..XhXhXdX<XjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXqXsXhXhXgX#XV.I P P P P P P P P P P P P I V..XgXhXhXrX,XjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjXwXdXhXhXhX8X!.C.s./ ~ ! ! ~ / s.C.!.8XhXhXhXsX1XjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjXjXjXwXsXhXhXhXhXgXaXyX8X8XyXaXgXhXhXhXgXiXqXjXjXjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXqXwXsXdXhXhXhXhXhXhXhXhXdXrXwX<XjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjX",
"jXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXqXqXqXqXqXqX1X<XjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjX"
};

Some files were not shown because too many files have changed in this diff Show More