add pkgingo's (Win32) Minimaid driver.
* new makefile config option "HAVE_MINIMAID" * update all Visual Studio projects
This commit is contained in:
@@ -400,6 +400,10 @@ if WINDOWS
|
||||
if HAVE_PARALLEL_PORT
|
||||
Lights += arch/Lights/LightsDriver_Win32Parallel.cpp arch/Lights/LightsDriver_Win32Parallel.h
|
||||
endif
|
||||
|
||||
if HAVE_MINIMAID
|
||||
Lights += arch/Lights/LightsDriver_Win32Minimaid.cpp arch/Lights/LightsDriver_Win32Minimaid.h
|
||||
endif
|
||||
|
||||
if !HAVE_PTHREAD
|
||||
Threads += arch/Threads/Threads_Win32.cpp arch/Threads/Threads_Win32.h
|
||||
|
||||
@@ -2430,6 +2430,14 @@
|
||||
RelativePath="arch\Lights\LightsDriver_SystemMessage.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="arch\Lights\LightsDriver_Win32Minimaid.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="arch\Lights\LightsDriver_Win32Minimaid.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="arch\Lights\LightsDriver_Win32Parallel.cpp"
|
||||
>
|
||||
|
||||
@@ -580,6 +580,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
|
||||
<ClCompile Include="arch\Lights\LightsDriver.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Export.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp" />
|
||||
<ClCompile Include="archutils\Win32\AppInstance.cpp" />
|
||||
<ClCompile Include="archutils\Win32\arch_setup.cpp" />
|
||||
@@ -1898,6 +1899,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)</Command>
|
||||
<ClInclude Include="arch\Lights\LightsDriver.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Export.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h" />
|
||||
<ClInclude Include="archutils\Win32\AppInstance.h" />
|
||||
<ClInclude Include="archutils\Win32\arch_setup.h" />
|
||||
|
||||
@@ -747,6 +747,9 @@
|
||||
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
@@ -2270,6 +2273,9 @@
|
||||
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -606,6 +606,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
|
||||
<ClCompile Include="arch\Lights\LightsDriver.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Export.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp" />
|
||||
<ClCompile Include="archutils\Win32\AppInstance.cpp" />
|
||||
<ClCompile Include="archutils\Win32\arch_setup.cpp" />
|
||||
@@ -1484,6 +1485,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
|
||||
<ClInclude Include="arch\Lights\LightsDriver.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Export.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h" />
|
||||
<ClInclude Include="archutils\Win32\AppInstance.h" />
|
||||
<ClInclude Include="archutils\Win32\arch_setup.h" />
|
||||
|
||||
@@ -735,6 +735,9 @@
|
||||
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
@@ -2108,6 +2111,9 @@
|
||||
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -605,6 +605,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
|
||||
<ClCompile Include="arch\Lights\LightsDriver.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Export.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp" />
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp" />
|
||||
<ClCompile Include="archutils\Win32\AppInstance.cpp" />
|
||||
<ClCompile Include="archutils\Win32\arch_setup.cpp" />
|
||||
@@ -1923,6 +1924,7 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"</Command>
|
||||
<ClInclude Include="arch\Lights\LightsDriver.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Export.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h" />
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h" />
|
||||
<ClInclude Include="archutils\Win32\AppInstance.h" />
|
||||
<ClInclude Include="archutils\Win32\arch_setup.h" />
|
||||
|
||||
@@ -747,6 +747,9 @@
|
||||
<ClCompile Include="arch\Lights\LightsDriver_SystemMessage.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Minimaid.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="arch\Lights\LightsDriver_Win32Parallel.cpp">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClCompile>
|
||||
@@ -2270,6 +2273,9 @@
|
||||
<ClInclude Include="arch\Lights\LightsDriver_SystemMessage.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Minimaid.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="arch\Lights\LightsDriver_Win32Parallel.h">
|
||||
<Filter>StepMania\arch\Lights</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
// LightsDriver_Win32Minimaid - driver for lights on the Minimaid with libmmmagic
|
||||
/* To use, StepMania must be run with root permissions, or udev rule for the
|
||||
* device must be made something like this (but it's not quite right):
|
||||
* echo SUBSYSTEM==\"usb\", ATTR{idVendor}==\"beef\", ATTR{idProduct}==\"5730\", MODE=\"0666\" > /etc/udev/rules.d/50-minimaid
|
||||
*/
|
||||
|
||||
#include "global.h"
|
||||
#include "LightsDriver_Win32Minimaid.h"
|
||||
#include "windows.h"
|
||||
|
||||
REGISTER_SOUND_DRIVER_CLASS( Win32Minimaid );
|
||||
|
||||
HINSTANCE hMMMAGICDLL = NULL;
|
||||
|
||||
LightsDriver_Win32Minimaid::LightsDriver_Win32Minimaid()
|
||||
{
|
||||
_mmmagic_loaded=false;
|
||||
hMMMAGICDLL = LoadLibraryW(L"mmmagic.dll");
|
||||
if(hMMMAGICDLL == NULL)
|
||||
{
|
||||
MessageBox(NULL, "Could not LoadLibrary( mmmagic.dll ).", "ERROR", MB_OK );
|
||||
return;
|
||||
}
|
||||
_mmmagic_loaded=true;
|
||||
|
||||
// Get the function pointers
|
||||
mm_connect_minimaid = (MM_CONNECT_MINIMAID) GetProcAddress(hMMMAGICDLL, "mm_connect_minimaid");
|
||||
mm_setKB = (MM_SETKB) GetProcAddress(hMMMAGICDLL, "mm_setKB");
|
||||
mm_setDDRPad1Light = (MM_SETDDRPAD1LIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRPad1Light");
|
||||
mm_setDDRPad2Light = (MM_SETDDRPAD2LIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRPad2Light");
|
||||
mm_setDDRCabinetLight = (MM_SETCABINETLIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRCabinetLight");
|
||||
mm_setDDRBassLight = (MM_SETDDRBASSLIGHT) GetProcAddress(hMMMAGICDLL, "mm_setDDRBassLight");
|
||||
mm_setDDRAllOn = (MM_SETDDRALLON) GetProcAddress(hMMMAGICDLL, "mm_setDDRAllOn");
|
||||
mm_setDDRAllOff = (MM_SETDDRALLOFF) GetProcAddress(hMMMAGICDLL, "mm_setDDRAllOff");
|
||||
mm_setBlueLED = (MM_SETBLUELED) GetProcAddress(hMMMAGICDLL, "mm_setBlueLED");
|
||||
mm_setMMOutputReports = (MM_SETMMOUTPUTREPORTS) GetProcAddress(hMMMAGICDLL, "mm_setMMOutputReports");
|
||||
mm_sendDDRMiniMaidUpdate= (MM_SENDDDRMINIMAIDUPDATE) GetProcAddress(hMMMAGICDLL, "mm_sendDDRMiniMaidUpdate");
|
||||
mm_connect_minimaid();
|
||||
mm_setKB(true);
|
||||
}
|
||||
|
||||
LightsDriver_Win32Minimaid::~LightsDriver_Win32Minimaid()
|
||||
{
|
||||
if(_mmmagic_loaded)
|
||||
FreeLibrary( hMMMAGICDLL );
|
||||
}
|
||||
|
||||
void LightsDriver_Win32Minimaid::Set( const LightsState *ls )
|
||||
{
|
||||
if(_mmmagic_loaded)
|
||||
{
|
||||
mm_setDDRAllOff();
|
||||
|
||||
// Set the cabinet light values
|
||||
if (ls->m_bCabinetLights[LIGHT_MARQUEE_UP_LEFT]) mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_UPPER_LEFT, 1);
|
||||
if (ls->m_bCabinetLights[LIGHT_MARQUEE_UP_RIGHT]) mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_UPPER_RIGHT, 1);
|
||||
if (ls->m_bCabinetLights[LIGHT_MARQUEE_LR_LEFT]) mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_LOWER_LEFT, 1);
|
||||
if (ls->m_bCabinetLights[LIGHT_MARQUEE_LR_RIGHT]) mm_setDDRCabinetLight(DDR_DOUBLE_MARQUEE_LOWER_RIGHT, 1);
|
||||
if (ls->m_bCabinetLights[LIGHT_BASS_LEFT] || ls->m_bCabinetLights[LIGHT_BASS_RIGHT]) mm_setDDRBassLight(DDR_DOUBLE_BASS_LIGHTS, 1);
|
||||
|
||||
if (ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_LEFT]) mm_setDDRPad1Light(DDR_DOUBLE_PAD_LEFT, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_RIGHT]) mm_setDDRPad1Light(DDR_DOUBLE_PAD_RIGHT, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_UP]) mm_setDDRPad1Light(DDR_DOUBLE_PAD_UP, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_1][DANCE_BUTTON_DOWN]) mm_setDDRPad1Light(DDR_DOUBLE_PAD_DOWN, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_1][GAME_BUTTON_START]) mm_setDDRCabinetLight(DDR_DOUBLE_PLAYER1_PANEL, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_LEFT]) mm_setDDRPad2Light(DDR_DOUBLE_PAD_LEFT, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_RIGHT]) mm_setDDRPad2Light(DDR_DOUBLE_PAD_RIGHT, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_UP]) mm_setDDRPad2Light(DDR_DOUBLE_PAD_UP, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_2][DANCE_BUTTON_DOWN]) mm_setDDRPad2Light(DDR_DOUBLE_PAD_DOWN, 1);
|
||||
if (ls->m_bGameButtonLights[GameController_2][GAME_BUTTON_START]) mm_setDDRCabinetLight(DDR_DOUBLE_PLAYER2_PANEL, 1);
|
||||
|
||||
// Output the information
|
||||
mm_sendDDRMiniMaidUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (c) 2013 pkgingo
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
@@ -0,0 +1,99 @@
|
||||
/* LightsDriver_Win32Minimaid - Minimaid based lights with libmmmagic */
|
||||
|
||||
#ifndef LightsDriver_Win32Minimaid_H
|
||||
#define LightsDriver_Win32Minimaid_H
|
||||
|
||||
#include "LightsDriver.h"
|
||||
|
||||
#define DDR_DOUBLE_BASS_LIGHTS 0 //unknown but guessed
|
||||
#define DDR_DOUBLE_PLAYER1_PANEL 2
|
||||
#define DDR_DOUBLE_PLAYER2_PANEL 3
|
||||
#define DDR_DOUBLE_MARQUEE_LOWER_RIGHT 4
|
||||
#define DDR_DOUBLE_MARQUEE_UPPER_RIGHT 5
|
||||
#define DDR_DOUBLE_MARQUEE_LOWER_LEFT 6
|
||||
#define DDR_DOUBLE_MARQUEE_UPPER_LEFT 7
|
||||
|
||||
//PADX_LIGHTS
|
||||
#define DDR_DOUBLE_PAD_UP 0
|
||||
#define DDR_DOUBLE_PAD_DOWN 1
|
||||
#define DDR_DOUBLE_PAD_LEFT 2
|
||||
#define DDR_DOUBLE_PAD_RIGHT 3
|
||||
#define DDR_DOUBLE_PAD_RESET 4
|
||||
|
||||
#define BIT(i) (1<<(i))
|
||||
#define BIT_IS_SET(v,i) ((v&BIT(i))!=0)
|
||||
|
||||
static bool _mmmagic_loaded=false;
|
||||
|
||||
typedef bool (*__BITVALID)(int);
|
||||
static __BITVALID __bitValid;
|
||||
|
||||
// minimaid prototypes
|
||||
typedef void (*MM_SETDDRPAD1LIGHT)(int, int);
|
||||
typedef void (*MM_SETDDRPAD2LIGHT)(int, int);
|
||||
typedef void (*MM_SETCABINETLIGHT)(int, int);
|
||||
typedef void (*MM_SETDDRBASSLIGHT)(int, int);
|
||||
static MM_SETDDRPAD1LIGHT mm_setDDRPad1Light;
|
||||
static MM_SETDDRPAD2LIGHT mm_setDDRPad2Light;
|
||||
static MM_SETCABINETLIGHT mm_setDDRCabinetLight;
|
||||
static MM_SETDDRBASSLIGHT mm_setDDRBassLight;
|
||||
|
||||
typedef bool (*MM_CONNECT_MINIMAID)();
|
||||
typedef bool (*MM_SETKB)(bool val);
|
||||
static MM_CONNECT_MINIMAID mm_connect_minimaid;
|
||||
static MM_SETKB mm_setKB;
|
||||
|
||||
typedef void (*MM_SETDDRALLON)();
|
||||
typedef void (*MM_SETDDRALLOFF)();
|
||||
static MM_SETDDRALLON mm_setDDRAllOn;
|
||||
static MM_SETDDRALLOFF mm_setDDRAllOff;
|
||||
|
||||
typedef void (*MM_SETBLUELED)(unsigned char);
|
||||
typedef void (*MM_SETMMOUTPUTREPORTS)(unsigned char, unsigned char, unsigned char, unsigned char);
|
||||
typedef bool (*MM_SENDDDRMINIMAIDUPDATE)();
|
||||
static MM_SETBLUELED mm_setBlueLED;
|
||||
static MM_SETMMOUTPUTREPORTS mm_setMMOutputReports;
|
||||
static MM_SENDDDRMINIMAIDUPDATE mm_sendDDRMiniMaidUpdate;
|
||||
|
||||
typedef void (*MM_INIT)();
|
||||
typedef void (*MM_TURNON)(unsigned char, int);
|
||||
typedef bool (*MM_TURNOFF)(unsigned char, int);
|
||||
static MM_INIT mm_init;
|
||||
static MM_TURNON mm_turnON;
|
||||
static MM_TURNOFF mm_turnOFF;
|
||||
|
||||
class LightsDriver_Win32Minimaid : public LightsDriver
|
||||
{
|
||||
public:
|
||||
LightsDriver_Win32Minimaid();
|
||||
|
||||
virtual ~LightsDriver_Win32Minimaid();
|
||||
virtual void Set( const LightsState *ls );
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2013 pkgingo
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
Reference in New Issue
Block a user