Skip to content
This repository
Browse code

Remove dependency on HPL.

  • Loading branch information...
commit 34bfc8f7a6fc87dd60cd0098804935d10064ab2d 1 parent fed4685
James Le Cuirot chewi authored urkle committed
3  TODO
... ... @@ -1,6 +1,3 @@
1 1 * Add a Visual Studio Project file for windows
2   -* remove dependency on HPL1Engine core
3   - - Memory wrappers
4   - - String processing (cString class)
5 2 * Update WAVE loading to not use old Deprecated OpenAL APIs
6 3 * Use system include paths for OpenAL headers instead of dependencies bundle
2  include/OALWrapper/OAL_OggStream.h
@@ -21,8 +21,6 @@
21 21
22 22 #include "OAL_OggHelper.h"
23 23
24   -#include "system/MemoryManager.h"
25   -#include "system/LowLevelSystem.h"
26 24
27 25 //------------------------------------------------------------------------
28 26
2  include/OALWrapper/OAL_Source.h
@@ -26,8 +26,6 @@ class cOAL_SourceManager;
26 26 #include "OAL_Effect.h"
27 27 #include "OAL_Filter.h"
28 28
29   -#include "system/MemoryManager.h"
30   -#include "system/LowLevelSystem.h"
31 29
32 30
33 31 #define OAL_SEND_DIRECT 0x10000000h
5 sources/OAL_AudioData.cpp
@@ -9,7 +9,6 @@
9 9
10 10 #include "OALWrapper/OAL_Buffer.h"
11 11
12   -#include "system/LowLevelSystem.h"
13 12
14 13 //-------------------------------------------------------------------------------
15 14
@@ -20,7 +19,7 @@ iOAL_AudioData::iOAL_AudioData(eOAL_AudioDataType aType, int alBuffersToCreate)
20 19 {
21 20 mType = aType;
22 21 for(int i=0;i<alBuffersToCreate;++i)
23   - mvBuffers.push_back(hplNew(cOAL_Buffer,(this)));
  22 + mvBuffers.push_back(new cOAL_Buffer(this));
24 23
25 24 Reset();
26 25 }
@@ -28,7 +27,7 @@ iOAL_AudioData::iOAL_AudioData(eOAL_AudioDataType aType, int alBuffersToCreate)
28 27 iOAL_AudioData::~iOAL_AudioData()
29 28 {
30 29 for(int i=0;i<(int)mvBuffers.size();++i)
31   - hplDelete(mvBuffers[i]);
  30 + delete mvBuffers[i];
32 31 }
33 32
34 33 //-------------------------------------------------------------------------------
2  sources/OAL_Buffer.cpp
@@ -20,8 +20,6 @@
20 20 #include "OALWrapper/OAL_Helper.h"
21 21 #include "OALWrapper/OAL_Source.h"
22 22
23   -#include "system/MemoryManager.h"
24   -#include "system/LowLevelSystem.h"
25 23
26 24
27 25 //------------------------------------------------------------------
29 sources/OAL_Device.cpp
@@ -23,7 +23,6 @@
23 23 #include "OALWrapper/OAL_Filter.h"
24 24 #include "OALWrapper/OAL_Effect_Reverb.h"
25 25
26   -#include "system/LowLevelSystem.h"
27 26 #include <cstring>
28 27
29 28 //-------------------------------------------------------------------------
@@ -190,18 +189,18 @@ bool cOAL_Device::Init( cOAL_Init_Params& acParams )
190 189 if (acParams.mbUseEFX && IsExtensionAvailable (OAL_ALC_EXT_EFX))
191 190 {
192 191 LogMsg("",eOAL_LogVerbose_Low, eOAL_LogMsg_Info, "Starting EFX on request\n" );
193   - mpEFXManager = hplNew( cOAL_EFXManager, () );
  192 + mpEFXManager = new cOAL_EFXManager;
194 193 mbEFXActive = mpEFXManager->Initialize( acParams.mlNumSlotsHint, mlEFXSends, acParams.mbUseThread, acParams.mlSlotUpdateFreq );
195 194 if (!mbEFXActive)
196 195 {
197 196 mpEFXManager->Destroy();
198   - hplDelete(mpEFXManager);
  197 + delete mpEFXManager;
199 198 }
200 199 }
201 200
202 201 LogMsg("",eOAL_LogVerbose_Low, eOAL_LogMsg_Info, "Creating Source Manager\n" );
203 202 //Create The source manager
204   - mpSourceManager = hplNew( cOAL_SourceManager, () );
  203 + mpSourceManager = new cOAL_SourceManager;
205 204 if ( mpSourceManager->Initialize( acParams.mbVoiceManagement, acParams.mlNumSourcesHint, acParams.mbUseThread, acParams.mlUpdateFreq, mlEFXSends ) == false)
206 205 {
207 206 LogMsg("",eOAL_LogVerbose_None, eOAL_LogMsg_Error, "Error creating Source Manager\n");
@@ -230,14 +229,14 @@ void cOAL_Device::Close ()
230 229 //Delete samples
231 230 {
232 231 for(tSampleListIt it = mlstSamples.begin(); it!=mlstSamples.end(); ++it )
233   - hplDelete((*it));
  232 + delete (*it);
234 233 mlstSamples.clear();
235 234 }
236 235
237 236 LogMsg("",eOAL_LogVerbose_Low, eOAL_LogMsg_Info, "Cleaning up Streams...\n" );
238 237 {
239 238 for (tStreamListIt it=mlstStreams.begin();it!=mlstStreams.end(); ++it )
240   - hplDelete((*it));
  239 + delete (*it);
241 240 mlstStreams.clear();
242 241 }
243 242
@@ -245,7 +244,7 @@ void cOAL_Device::Close ()
245 244 {
246 245 LogMsg("",eOAL_LogVerbose_Low, eOAL_LogMsg_Info, "Cleaning up Source Manager...\n" );
247 246 mpSourceManager->Destroy();
248   - hplDelete(mpSourceManager);
  247 + delete mpSourceManager;
249 248 mpSourceManager = NULL;
250 249 }
251 250
@@ -253,7 +252,7 @@ void cOAL_Device::Close ()
253 252 {
254 253 LogMsg("",eOAL_LogVerbose_Low, eOAL_LogMsg_Info, "Cleaning up EFX Manager...\n" );
255 254 mpEFXManager->Destroy();
256   - hplDelete(mpEFXManager);
  255 + delete mpEFXManager;
257 256 mpEFXManager = NULL;
258 257 }
259 258
@@ -309,15 +308,15 @@ cOAL_Sample* cOAL_Device::LoadSample(const wstring& asFilename)
309 308 // Check file format and load the sample data according to it
310 309 wstring strExt = GetExtensionW(asFilename);
311 310 if(strExt.compare(L"ogg") == 0 ) // Load an Ogg Vorbis sample
312   - pSample = hplNew(cOAL_OggSample,());
  311 + pSample = new cOAL_OggSample;
313 312 else if(strExt.compare(L"wav")==0) // Load a .WAV sample
314   - pSample = hplNew(cOAL_WAVSample,());
  313 + pSample = new cOAL_WAVSample;
315 314
316 315 if(pSample && pSample->CreateFromFile(asFilename) )
317 316 mlstSamples.push_back(pSample);
318 317 else
319 318 {
320   - hplDelete(pSample);
  319 + delete pSample;
321 320 pSample = NULL;
322 321 }
323 322
@@ -340,7 +339,7 @@ cOAL_Stream* cOAL_Device::LoadStream(const wstring &asFilename)
340 339 wstring strExt = GetExtensionW(asFilename);
341 340
342 341 if(strExt.compare(L"ogg")==0)
343   - pStream = hplNew(cOAL_OggStream,());
  342 + pStream = new cOAL_OggStream;
344 343
345 344 if(pStream && pStream->CreateFromFile(asFilename))
346 345 {
@@ -349,7 +348,7 @@ cOAL_Stream* cOAL_Device::LoadStream(const wstring &asFilename)
349 348 }
350 349 else
351 350 {
352   - hplDelete(pStream);
  351 + delete pStream;
353 352 pStream = NULL;
354 353 }
355 354
@@ -365,7 +364,7 @@ void cOAL_Device::UnloadSample(cOAL_Sample* apSample)
365 364 return;
366 365
367 366 mlstSamples.remove(apSample);
368   - hplDelete(apSample);
  367 + delete apSample;
369 368 }
370 369
371 370 //-------------------------------------------------------------------------
@@ -376,7 +375,7 @@ void cOAL_Device::UnloadStream(cOAL_Stream* apStream)
376 375 return;
377 376
378 377 mlstStreams.remove(apStream);
379   - hplDelete(apStream);
  378 + delete apStream;
380 379 }
381 380
382 381 //-------------------------------------------------------------------------
34 sources/OAL_EFXManager.cpp
@@ -13,8 +13,6 @@
13 13 #include "OALWrapper/OAL_Device.h"
14 14
15 15
16   -#include "system/MemoryManager.h"
17   -#include "system/LowLevelSystem.h"
18 16
19 17
20 18 int SlotUpdaterThread(void* alUnusedArg);
@@ -167,7 +165,7 @@ bool cOAL_EFXManager::Initialize(int alNumSlotsHint, int alNumSends, bool abUseT
167 165
168 166 RUN_AL_FUNC(alDeleteAuxiliaryEffectSlots ( mlNumSlots, lTempSlot ));
169 167
170   - mpvSlots = hplNew (tSlotVector ,());
  168 + mpvSlots = new tSlotVector;
171 169 mpvSlots->reserve(mlNumSlots);
172 170
173 171 LogMsg("",eOAL_LogVerbose_Medium, eOAL_LogMsg_Info, "Creating High Level Effect Slots\n" );
@@ -175,7 +173,7 @@ bool cOAL_EFXManager::Initialize(int alNumSlotsHint, int alNumSends, bool abUseT
175 173
176 174 for ( int i = 0; i < mlNumSlots; i++ )
177 175 {
178   - cOAL_EffectSlot *pSlot = hplNew( cOAL_EffectSlot,(this, i) );
  176 + cOAL_EffectSlot *pSlot = new cOAL_EffectSlot(this, i);
179 177 mpvSlots->push_back(pSlot);
180 178 }
181 179
@@ -183,8 +181,8 @@ bool cOAL_EFXManager::Initialize(int alNumSlotsHint, int alNumSends, bool abUseT
183 181
184 182
185 183 LogMsg("",eOAL_LogVerbose_Medium, eOAL_LogMsg_Info, "Creating Filter and Effect containers\n" );
186   - mplstEffectList = hplNew( tOALEffectList, () );
187   - mplstFilterList = hplNew( tOALFilterList, () );
  184 + mplstEffectList = new tOALEffectList;
  185 + mplstFilterList = new tOALFilterList;
188 186
189 187 if (!mplstEffectList || !mplstFilterList)
190 188 {
@@ -237,10 +235,10 @@ void cOAL_EFXManager::Destroy()
237 235 for ( vSlotIterator = mpvSlots->begin(); vSlotIterator != mpvSlots->end(); ++vSlotIterator )
238 236 {
239 237 (*vSlotIterator)->Reset();
240   - hplDelete((*vSlotIterator));
  238 + delete (*vSlotIterator);
241 239 }
242 240 mpvSlots->clear();
243   - hplDelete(mpvSlots);
  241 + delete mpvSlots;
244 242
245 243 mpvSlots = NULL;
246 244 }
@@ -251,10 +249,10 @@ void cOAL_EFXManager::Destroy()
251 249 {
252 250 for ( lstEffectIterator = mplstEffectList->begin(); lstEffectIterator != mplstEffectList->end(); ++lstEffectIterator )
253 251 {
254   - hplDelete ((*lstEffectIterator));
  252 + delete (*lstEffectIterator);
255 253 }
256 254 mplstEffectList->clear();
257   - hplDelete(mplstEffectList);
  255 + delete mplstEffectList;
258 256 mplstEffectList = NULL;
259 257 }
260 258
@@ -264,10 +262,10 @@ void cOAL_EFXManager::Destroy()
264 262 {
265 263 for ( lstFilterIterator = mplstFilterList->begin(); lstFilterIterator != mplstFilterList->end(); ++lstFilterIterator )
266 264 {
267   - hplDelete ((*lstFilterIterator));
  265 + delete (*lstFilterIterator);
268 266 }
269 267 mplstFilterList->clear();
270   - hplDelete(mplstFilterList);
  268 + delete mplstFilterList;
271 269 mplstFilterList = NULL;
272 270 }
273 271
@@ -279,7 +277,7 @@ void cOAL_EFXManager::Destroy()
279 277
280 278 cOAL_Filter* cOAL_EFXManager::CreateFilter()
281 279 {
282   - cOAL_Filter* pFilter = hplNew (cOAL_Filter,());
  280 + cOAL_Filter* pFilter = new cOAL_Filter;
283 281
284 282 if(pFilter && pFilter->GetStatus())
285 283 {
@@ -288,7 +286,7 @@ cOAL_Filter* cOAL_EFXManager::CreateFilter()
288 286 }
289 287 else
290 288 {
291   - hplDelete ( pFilter );
  289 + delete pFilter ;
292 290 pFilter = NULL;
293 291
294 292 return NULL;
@@ -299,7 +297,7 @@ cOAL_Filter* cOAL_EFXManager::CreateFilter()
299 297
300 298 cOAL_Effect_Reverb* cOAL_EFXManager::CreateReverbEffect()
301 299 {
302   - cOAL_Effect_Reverb* pEffect = hplNew (cOAL_Effect_Reverb, () );
  300 + cOAL_Effect_Reverb* pEffect = new cOAL_Effect_Reverb;
303 301
304 302 if (pEffect && pEffect->GetStatus())
305 303 {
@@ -308,7 +306,7 @@ cOAL_Effect_Reverb* cOAL_EFXManager::CreateReverbEffect()
308 306 }
309 307 else
310 308 {
311   - hplDelete (pEffect);
  309 + delete pEffect;
312 310 pEffect = NULL;
313 311
314 312 return NULL;
@@ -324,7 +322,7 @@ void cOAL_EFXManager::DestroyFilter ( cOAL_Filter* apFilter )
324 322 return;
325 323
326 324 mplstFilterList->remove(apFilter);
327   - hplDelete (apFilter);
  325 + delete apFilter;
328 326 }
329 327
330 328 ////////////////////////////////////////////////////////////
@@ -335,7 +333,7 @@ void cOAL_EFXManager::DestroyEffect ( cOAL_Effect *apEffect )
335 333 return;
336 334
337 335 mplstEffectList->remove(apEffect);
338   - hplDelete (apEffect);
  336 + delete apEffect;
339 337 }
340 338
341 339 ////////////////////////////////////////////////////////////
6 sources/OAL_Init.cpp
@@ -18,8 +18,6 @@
18 18 #include "OALWrapper/OAL_Device.h"
19 19 #include "OALWrapper/OAL_SourceManager.h"
20 20
21   -#include "system/MemoryManager.h"
22   -#include "system/LowLevelSystem.h"
23 21
24 22 cOAL_Device* gpDevice = NULL;
25 23
@@ -42,7 +40,7 @@ bool OAL_Init ( cOAL_Init_Params &acParams )
42 40 {
43 41 OAL_Log(eOAL_LogVerbose_None, eOAL_LogMsg_Text,"-------------------------------------\n----- OpenAL Wrapper Log opened -----\n-------------------------------------\n");
44 42
45   - gpDevice = hplNew( cOAL_Device, () );
  43 + gpDevice = new cOAL_Device;
46 44 bool bSuccess = gpDevice->Init( acParams );
47 45 /*asDeviceName , alOutputFreq,
48 46 abUseThread, alUpdateFreq,
@@ -76,7 +74,7 @@ void OAL_Close ()
76 74 // OAL_Source_Stop ( OAL_ALL );
77 75
78 76 gpDevice->Close();
79   - hplDelete(gpDevice);
  77 + delete gpDevice;
80 78 gpDevice = NULL;
81 79
82 80 OAL_Log(eOAL_LogVerbose_Low, eOAL_LogMsg_Text,"-------------------------------------\n----- OpenAL Wrapper Log closed -----\n-------------------------------------\n");
18 sources/OAL_OggSample.cpp
@@ -15,9 +15,8 @@
15 15
16 16 #include "OALWrapper/OAL_OggSample.h"
17 17 #include "OALWrapper/OAL_Buffer.h"
18   -#include "system/MemoryManager.h"
19   -#include "system/LowLevelSystem.h"
20   -#include "system/String.h"
  18 +#include <stdlib.h>
  19 +#include <string>
21 20 #include <cstring>
22 21
23 22 //-------------------------------------------------------------------------------
@@ -50,7 +49,12 @@ bool cOAL_OggSample::CreateFromFile(const wstring &asFilename)
50 49
51 50 msFilename = asFilename;
52 51
53   - FILE *fileHandle = fopen(hpl::cString::To8Char(asFilename).c_str(),"rb");
  52 + std::string sTemp;
  53 + size_t needed = wcstombs(NULL,&asFilename[0],asFilename.length());
  54 + sTemp.resize(needed);
  55 + wcstombs(&sTemp[0],&asFilename[0],asFilename.length());
  56 +
  57 + FILE *fileHandle = fopen(sTemp.c_str(),"rb");
54 58
55 59 // If no file is present, set the error status and return
56 60 if(!fileHandle)
@@ -78,7 +82,7 @@ bool cOAL_OggSample::CreateFromFile(const wstring &asFilename)
78 82
79 83 // Reserve memory for 'mlChannels' channels of 'mlSamples' * 2 bytes of data each
80 84 int lSizeInBytes = mlSamples * mlChannels * GetBytesPerSample();
81   - pPCMBuffer = (char *) hplMalloc (lSizeInBytes);
  85 + pPCMBuffer = (char *) malloc (lSizeInBytes);
82 86 memset (pPCMBuffer, 0, lSizeInBytes);
83 87
84 88 // Loop which loads chunks of decoded data into a buffer
@@ -95,7 +99,7 @@ bool cOAL_OggSample::CreateFromFile(const wstring &asFilename)
95 99 // If we get a negative value, then something went wrong. Clean up and set error status.
96 100 else if(lChunkSize < 0)
97 101 {
98   - hplFree(pPCMBuffer);
  102 + free(pPCMBuffer);
99 103 ov_clear(&ovFileHandle);
100 104 // ov_clear closes the file handle for us
101 105 mbStatus = false;
@@ -111,7 +115,7 @@ bool cOAL_OggSample::CreateFromFile(const wstring &asFilename)
111 115 // If something went wrong, set error status. Clean up afterwards.
112 116 mbStatus = pBuffer->Feed((ALvoid*)pPCMBuffer, lDataSize);
113 117 }
114   - hplFree(pPCMBuffer);
  118 + free(pPCMBuffer);
115 119 ov_clear(&ovFileHandle);
116 120 // ov_clear closes the file handle for us
117 121
10 sources/OAL_OggStream.cpp
@@ -16,8 +16,9 @@
16 16
17 17 #include "OALWrapper/OAL_OggStream.h"
18 18 #include "OALWrapper/OAL_Buffer.h"
19   -#include "system/String.h"
20 19 #include <stdio.h>
  20 +#include <stdlib.h>
  21 +#include <string>
21 22
22 23
23 24 extern ov_callbacks gCallbacks;
@@ -144,8 +145,13 @@ bool cOAL_OggStream::CreateFromFile(const wstring &asFilename)
144 145 if(mbStatus==false)
145 146 return false;
146 147
  148 + std::string sTemp;
  149 + size_t needed = wcstombs(NULL,&asFilename[0],asFilename.length());
  150 + sTemp.resize(needed);
  151 + wcstombs(&sTemp[0],&asFilename[0],asFilename.length());
  152 +
147 153 int lOpenResult;
148   - FILE *pStreamFile = fopen(hpl::cString::To8Char(asFilename).c_str(),"rb");
  154 + FILE *pStreamFile = fopen(sTemp.c_str(),"rb");
149 155
150 156 if (pStreamFile == NULL)
151 157 return false;
2  sources/OAL_Sample.cpp
@@ -20,8 +20,6 @@
20 20 #include "OALWrapper/OAL_Buffer.h"
21 21 #include "OALWrapper/OAL_Source.h"
22 22
23   -#include "system/MemoryManager.h"
24   -#include "system/LowLevelSystem.h"
25 23
26 24
27 25 //------------------------------------------------------------------
6 sources/OAL_Source.cpp
@@ -63,7 +63,7 @@ cOAL_Source::cOAL_Source(cOAL_SourceManager *apSourceManager, int alId, int alSe
63 63 LogMsg("",eOAL_LogVerbose_High, eOAL_LogMsg_Info, "", "Activating EFX Source stuff\n" );
64 64 for (int i=0; i<alSends; ++i)
65 65 {
66   - cOAL_SourceSend* pSend = hplNew(cOAL_SourceSend, ());
  66 + cOAL_SourceSend* pSend = new cOAL_SourceSend;
67 67 mvSends.push_back(pSend);
68 68 }
69 69 }
@@ -95,7 +95,7 @@ cOAL_Source::~cOAL_Source()
95 95 if(mpFilter)
96 96 {
97 97 LogMsg("",eOAL_LogVerbose_High, eOAL_LogMsg_Info, "Destroying Filter...\n" );
98   - hplDelete(mpFilter);
  98 + delete mpFilter;
99 99 mpFilter = NULL;
100 100 }
101 101
@@ -103,7 +103,7 @@ cOAL_Source::~cOAL_Source()
103 103 {
104 104 LogMsg("",eOAL_LogVerbose_High, eOAL_LogMsg_Info, "Destroying Sends...\n" );
105 105 for(unsigned int i = 0; i<mvSends.size(); ++i)
106   - hplDelete(mvSends[i]);
  106 + delete mvSends[i];
107 107 }
108 108 LogMsg("",eOAL_LogVerbose_High, eOAL_LogMsg_Info, "Destroying Low Level Object...\n" );
109 109 DestroyLowLevelID();
6 sources/OAL_SourceManager.cpp
@@ -9,8 +9,6 @@
9 9 #include "OALWrapper/OAL_Source.h"
10 10 #include "OALWrapper/OAL_Device.h"
11 11
12   -#include "system/MemoryManager.h"
13   -#include "system/LowLevelSystem.h"
14 12
15 13 //-----------------------------------------------------------------------------------
16 14
@@ -77,7 +75,7 @@ bool cOAL_SourceManager::Initialize ( bool abManageVoices, int alNumSourcesHint,
77 75 mvSources.resize(mlNumOfVoices);
78 76 for(int i=0; i<mlNumOfVoices; ++i)
79 77 {
80   - cOAL_Source *pSource = hplNew( cOAL_Source,(this, i,alEFXSends) );
  78 + cOAL_Source *pSource = new cOAL_Source(this, i, alEFXSends);
81 79 mvSources[i] = pSource;
82 80 }
83 81
@@ -125,7 +123,7 @@ void cOAL_SourceManager::Destroy()
125 123 //hpl::Log("source: %d\n",pSource);
126 124 //hpl::Log("source id: %d\n",pSource->GetSourceID());
127 125 pSource->Stop();
128   - hplDelete(pSource);
  126 + delete pSource;
129 127 }
130 128 mvSources.clear();
131 129
2  sources/OAL_Stream.cpp
@@ -12,8 +12,6 @@
12 12 #include "OALWrapper/OAL_Source.h"
13 13 #include "OALWrapper/OAL_Buffer.h"
14 14
15   -#include "system/MemoryManager.h"
16   -#include "system/LowLevelSystem.h"
17 15
18 16 //-----------------------------------------------------------------------------------
19 17
5 sources/OAL_WAVSample.cpp
@@ -17,7 +17,6 @@
17 17 #include "OALWrapper/OAL_Buffer.h"
18 18 #include "OALWrapper/OAL_Helper.h"
19 19 #include "OALWrapper/OAL_Device.h"
20   -#include "system/LowLevelSystem.h"
21 20
22 21 //------------------------------------------------------------------
23 22
@@ -70,7 +69,7 @@ bool cOAL_WAVSample::CreateFromFile(const wstring &asFilename)
70 69 if(pBuffer->Feed(pPCMBuffer, lSize)==false)
71 70 {
72 71 mlBuffersUsed = 1;
73   - //hplFree ( pPCMBuffer );
  72 + //free( pPCMBuffer );
74 73 alutUnloadWAV( mFormat, pPCMBuffer, lSize, mlFrequency);
75 74 status = alutGetError();
76 75 mbStatus = false;
@@ -84,7 +83,7 @@ bool cOAL_WAVSample::CreateFromFile(const wstring &asFilename)
84 83 mfTotalTime = ((double)mlSamples)/mlFrequency;
85 84
86 85
87   -// hplFree ( pPCMBuffer );
  86 +// free( pPCMBuffer );
88 87 alutUnloadWAV( mFormat, pPCMBuffer, lSize, mlFrequency);
89 88 status = alutGetError ();
90 89

0 comments on commit 34bfc8f

Please sign in to comment.
Something went wrong with that request. Please try again.