| View previous topic :: View next topic |
| Author |
Message |
J.F.
Joined: 22 Feb 2004 Posts: 2906
|
Posted: Wed Oct 03, 2007 11:49 am Post subject: |
|
|
Well, look at the way certain kernel mode prxs have to be done:
| Code: | int InitME(volatile struct me_struct *mei, int devkitVersion)
{
unsigned int k1;
k1 = pspSdkSetK1(0);
if (mei == 0)
{
pspSdkSetK1(k1);
return -1;
}
// initialize the MediaEngine Instance
mei->start = 0;
mei->done = 1;
mei->func = 0;
mei->param = 0;
mei->result = 0;
mei->signals = 0;
mei->init = 1;
// start the MediaEngine
memcpy((void *)0xbfc00040, me_stub, (int)(me_stub_end - me_stub));
_sw((unsigned int)me_loop, 0xbfc00600); // k0
_sw((unsigned int)mei, 0xbfc00604); // a0
sceKernelDcacheWritebackAll();
if (devkitVersion < 0x03070110)
{
sceSysregMeResetEnable();
sceSysregMeBusClockEnable();
sceSysregMeResetDisable();
}
else
{
sceSysregMeResetEnable371();
sceSysregMeBusClockEnable371();
sceSysregMeResetDisable371();
}
pspSdkSetK1(k1);
return 0;
}
|
Every time the nids change, another case will have to be added that handles the new nids. I agree it could be a lot of work, but we can cut down the work considerably by only doing certain functions. We only need the ME functions, the audio frequency function, and maybe a few others.
Another way to keep the work down lies in the "new" way of doing homebrew - since we aren't doing kernel mode programs anymore, only the kernel mode prx has to change. For example, if one were using the mediaengine.prx the code above is from, one merely needs to update the mediaengine.prx, not every program using it. |
|
| Back to top |
|
 |
TyRaNiD
Joined: 18 Jan 2004 Posts: 918
|
Posted: Wed Oct 03, 2007 11:59 am Post subject: |
|
|
| Please no more in software hacks unless really necessary, this is part of the reason we have such an issue as it is and it is only luck that undefined nids don't cause load failures. |
|
| Back to top |
|
 |
Viper8896
Joined: 26 Jan 2006 Posts: 110
|
Posted: Thu Oct 04, 2007 11:09 am Post subject: |
|
|
Hi I was hunting NIDs for 371 using 350 NIDs and before I go any further this is what I came up with:
| Code: | 3.71nid 3.5name 3.5nid
-------------------------------------------------------------------------------------------------
scePopsMan_0090B2C8 scePopsManExitVSHKernel 0x0090B2C8 //unchanged
sceMeAudio_F276E7DB scePopsManDocClose 0x03971322
sceMeAudio_9F3595DC scePopsManEnd 0x04B14718
sceMeAudio_D9BE95CD scePopsManImposeGetParam 0x065C7F0B
scePopsMan_29B3FB24 scePopsManLoadModule 0x29B3FB24 //unchanged
sceMeAudio_B9DF0545 scePopsManCheckData 0x2E18E4E9
sceMeAudio_D3B3005C ??????????????? 0x4F7628CC //probably
sceMeAudio_36AF1E2A scePopsManDocOpen 0x53F9ABD2 //probably
sceMeAudio_B50BD5E0 ??????????????? 0x56EEB969
sceMeAudio_A53D2D54 ??????????????? 0x6768B22F //probably
sceMeAudio_2ECC88B3 scePopsManDocLseek 0x875F4C05
sceMeAudio_DE6E171E scePopsManImposeChanges 0xB262B44F
sceMeAudio_5F7724D9 scePopsManImposeGetBatteryIconStatus 0xEC94C50C
sceMeAudio_2335762C ??????????????? 0xEF8F686E
sceMeAudio_12A811F9 scePopsManInit 0xF03F1227
sceMeAudio_902F30D8 scePopsManDocRead 0xFC56480E |
Is this just part of sony's little game game of cat and mouse when they have scePopsMan as sceMeAudio or have I messed up? |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Thu Oct 04, 2007 10:03 pm Post subject: |
|
|
| Viper8896 wrote: | Hi I was hunting NIDs for 371 using 350 NIDs and before I go any further this is what I came up with:
| Code: | 3.71nid 3.5name 3.5nid
-------------------------------------------------------------------------------------------------
scePopsMan_0090B2C8 scePopsManExitVSHKernel 0x0090B2C8 //unchanged
sceMeAudio_F276E7DB scePopsManDocClose 0x03971322
sceMeAudio_9F3595DC scePopsManEnd 0x04B14718
sceMeAudio_D9BE95CD scePopsManImposeGetParam 0x065C7F0B
scePopsMan_29B3FB24 scePopsManLoadModule 0x29B3FB24 //unchanged
sceMeAudio_B9DF0545 scePopsManCheckData 0x2E18E4E9
sceMeAudio_D3B3005C ??????????????? 0x4F7628CC //probably
sceMeAudio_36AF1E2A scePopsManDocOpen 0x53F9ABD2 //probably
sceMeAudio_B50BD5E0 ??????????????? 0x56EEB969
sceMeAudio_A53D2D54 ??????????????? 0x6768B22F //probably
sceMeAudio_2ECC88B3 scePopsManDocLseek 0x875F4C05
sceMeAudio_DE6E171E scePopsManImposeChanges 0xB262B44F
sceMeAudio_5F7724D9 scePopsManImposeGetBatteryIconStatus 0xEC94C50C
sceMeAudio_2335762C ??????????????? 0xEF8F686E
sceMeAudio_12A811F9 scePopsManInit 0xF03F1227
sceMeAudio_902F30D8 scePopsManDocRead 0xFC56480E |
Is this just part of sony's little game game of cat and mouse when they have scePopsMan as sceMeAudio or have I messed up? |
yes they thought that thing would stop me or delay me, but the delay was of minutes, if they are happy with delaying minutes...
Probably I shouldn't have been releasing a cfw for each Sony firmware, it is actually better to wait more than 2 versions to create a new one, so they don't change so many things in a single update ;) |
|
| Back to top |
|
 |
jas0nuk
Joined: 27 Apr 2006 Posts: 137
|
Posted: Thu Oct 04, 2007 10:41 pm Post subject: |
|
|
| Hah... a very lame attempt at hiding their PSX DRM routines :p |
|
| Back to top |
|
 |
cory1492
Joined: 10 Dec 2004 Posts: 216
|
Posted: Sat Oct 06, 2007 7:30 pm Post subject: |
|
|
I have to say, around 90% of these functions appear to be binary identical to 3.51. Mainly NID changes, some "dummy" functions (they return "not supported" error, apparently) thrown in and 1 totally new function... the names in () are from lib doc project site 3.51 bit, I started this before freeplay had let out the libdoc update. Tedious doesn't even begin to describe the process of verifying these.
syscon.prx
| Code: | 3.71 NID, offset, Name sceSyscon_driver (== compared to 3.51), notes
0x02F86AF6 [0x00001A28] - sceSyscon_driver_02F86AF6 == sceSyscon_driver_A6776FB4 (sceSysconGetBtSwitch)
0x081826B4 [0x000016E8] - sceSysconSuspend // no change
0x08234E6D [0x00002200] - sceSysconReceiveSetParam // no change
0x0A771482 [0x00000000] - sceSysconInit // no change
0x0AAE5C7E [0x00002BA0] - sceSyscon_driver_0AAE5C7E // new dummy?
0x0C836778 [0x000019DC] - sceSysconGetPowerSwitch
0x0D87AA65 [0x00001A1C] - sceSysconGetWlanSwitch
0x0E983319 [0x00001ACC] - sceSyscon_driver_0E983319 == sceSyscon_driver_CE76F93E
0x0EDF1DB6 [0x000033AC] - sceSysconBatteryGetElec
0x1291DF24 [0x00001934] - sceSysconSetUmdSwitchCallback
0x13195616 [0x000017AC] - sceSyscon_driver_13195616 == sceSyscon_driver_58531E69
0x138747DE [0x00001A40] - sceSysconGetUmdSwitch // no change
0x150B626A [0x00003534] - sceSysconBatteryGetElecAD
0x154BA0A7 [0x00002BB8] - sceSysconGetPowerStatus
0x157AFBA4 [0x0000171C] - sceSyscon_driver_157AFBA4 == sceSyscon_driver_5FF1D610
0x1602ED0D [0x00001178] - sceSysconCmdCancel // no change
0x18BFBE65 [0x000027E0] - sceSysconCtrlLED // no change
0x1BB1681D [0x00002C70] - sceSysconGetPowerError
0x1DE07144 [0x0000260C] - sceSysconReadClock
0x1E22F5FD [0x000019CC] - sceSysconIsLowBattery
0x204F23FF [0x000019B0] - sceSyscon_driver_204F23FF // no change
0x208E55DF [0x000028B4] - sceSyscon_driver_208E55DF == sceSyscon_driver_1A08CD66
0x22EACEC8 [0x00003554] - sceSysconBatteryGetTotalElec
0x2749A528 [0x00002CB8] - sceSysconCtrlMsPower
0x2BDD48E2 [0x00002E9C] - sceSyscon_driver_2BDD48E2 == sceSyscon_driver_C5075828
0x2FBE6E8C [0x00001B2C] - sceSysconGetWlanLedCtrl
0x303B9A4F [0x000018A8] - sceSysconSetWlanPowerCallback
0x308F8DE1 [0x00002544] - sceSysconGetPowerSupplyStatus
0x3757AE24 [0x00001A5C] - sceSyscon_driver_3757AE24 == sceSyscon_driver_F953EF93 (sceSysconGetHRWakeupStatus)
0x3869AC67 [0x00001B14] - sceSysconGetLcdPowerCtrl
0x3A1C0E7B [0x000033EC] - sceSysconBatteryGetCap
0x3AC3D2A4 [0x00000EE8] - sceSysconCmdExecAsync // no change
0x3DCDA8AD [0x0000173C] - sceSyscon_driver_3DCDA8AD == sceSyscon_driver_E00BFC9E
0x3DE38336 [0x00002C08] - sceSysconReadPommelReg // no change
0x40CBBD46 [0x0000318C] - sceSyscon_driver_40CBBD46 == sceSyscon_driver_1165C864
0x43E416B5 [0x00002D64] - sceSyscon_driver_43E416B5 == sceSyscon_driver_A975F224
0x4556BC82 [0x0000338C] - sceSysconBatteryGetVolt
0x483D6DBC [0x0000188C] - sceSysconSetWlanSwitchCallback
0x48C6D1F5 [0x00001AF0] - sceSyscon_driver_48C6D1F5 == sceSyscon_driver_8DDA4CA6
0x4C3AE600 [0x00002920] - sceSyscon_driver_4C3AE600 == sceSyscon_driver_19D5A97A
0x4C97D701 [0x00001768] - sceSyscon_driver_4C97D701 == sceSyscon_driver_64FA0B22
0x4E5C5F26 [0x0000299C] - sceSyscon_driver_4E5C5F26 == sceSyscon_driver_E5E35721
0x509B3BAA [0x00002F70] - sceSysconCtrlLcdPower
0x51E062D0 [0x000026C0] - sceSyscon_driver_51E062D0 == sceSyscon_driver_882F0AAB
0x55400D76 [0x0000329C] - sceSyscon_driver_55400D76 // new function??
0x55DD00A3 [0x0000172C] - sceSyscon_driver_55DD00A3 == sceSyscon_driver_9E6E060F
0x56931095 [0x000003A8] - sceSysconResume // no change
0x56D3B236 [0x00001838] - sceSysconSetHPConnectCallback
0x596D450C [0x00001A8C] - sceSyscon_driver_596D450C == sceSyscon_driver_56A73EDD (sceSysconGetBtPowerStatus)
0x597E44AB [0x00002EB8] - sceSyscon_driver_597E44AB == sceSyscon_driver_3C6DB1C5
0x59AE4325 [0x00002F14] - sceSysconCtrlTachyonAwPower
0x5A369F60 [0x00001A00] - sceSyscon_driver_5A369F60 == sceSyscon_driver_E20D08FE
0x5A91FE67 [0x00002790] - sceSysconCtrlPower
0x5B9ACC97 [0x00000E34] - sceSysconCmdExec // no change
0x5BB2FE1A [0x000026DC] - sceSyscon_driver_5BB2FE1A == sceSyscon_driver_00E7B6C2
0x5D4A1319 [0x0000340C] - sceSysconBatteryGetFullCap
0x5EE92F3C [0x0000170C] - sceSysconSetDebugHandlers // no change
0x6044AF57 [0x00002684] - sceSyscon_driver_6044AF57 == sceSyscon_driver_E9FF8226 (sceSysconSetUSBStatus)
0x60C5CCE7 [0x00001A10] - sceSysconGetHPConnect
0x618341C8 [0x000017E4] - sceSysconSetPowerSwitchCallback
0x634BF9C0 [0x00002DC0] - sceSyscon_driver_634BF9C0 == sceSyscon_driver_9C4266FC (sceSysconCtrlBtPower)
0x6448D8B7 [0x00002560] - sceSyscon_driver_6448D8B7 // new dummy?
0x65EB6096 [0x00001F38] - sceSyscon_driver_65EB6096 // no change
0x70370993 [0x000033CC] - sceSysconBatteryGetRCap
0x73415705 [0x00002648] - sceSysconReadAlarm
0x7587FE46 [0x00002E80] - sceSyscon_driver_7587FE46 == sceSyscon_driver_EAB13FBE
0x75F401C4 [0x000025A4] - sceSyscon_driver_75F401C4 == sceSyscon_driver_25F47F96
0x76505A07 [0x00001AFC] - sceSysconGetTachyonAwPowerCtrl
0x765F7E9B [0x00002CF0] - sceSysconCtrlWlanPower
0x7ABD8FB5 [0x000018C4] - sceSyscon_driver_7ABD8FB5 == sceSyscon_driver_04EEFD03
0x7BCC5EAE [0x00001EAC] - sceSyscon_driver_7BCC5EAE // no change
0x7EC5A957 [0x0000251C] - sceSysconGetBaryonVersion // no change
0x806D4D6C [0x00002FE0] - sceSyscon_driver_806D4D6C == sceSyscon_driver_07A0C260
0x80B88F0C [0x00001A6C] - sceSysconGetWlanPowerStatus
0x81BE45A8 [0x00001A9C] - sceSysconGetLeptonPowerCtrl
0x83D3C8B3 [0x00002BAC] - sceSyscon_driver_83D3C8B3 // new dummy?
0x86D4CAD8 [0x000019A4] - sceSysconGetBaryonStatus // no change
0x88833E7E [0x00003088] - sceSyscon_driver_88833E7E // new dummy?
0x8A4519F5 [0x00002C80] - sceSysconCtrlLeptonPower // no change
0x8AAD0246 [0x00002734] - sceSysconPowerStandby
0x8AE7E22C [0x000019EC] - sceSysconIsAlarmed
0x8CBC7987 [0x00002344] - sceSysconResetDevice // no change
0x8D5D0186 [0x0000342C] - sceSysconBatteryGetIFC
0x8FC7A4ED [0x00002DF8] - sceSyscon_driver_8FC7A4ED == sceSyscon_driver_3987FEA3 (sceSysconCtrlUsbPower)
0x92D16FC7 [0x00001638] - sceSysconEnd // no change
0x93022A19 [0x00001AD8] - sceSyscon_driver_93022A19 == sceSyscon_driver_8EDF1AD7 (sceSysconGetBtPowerCtrl)
0x94F9F2FC [0x000019BC] - sceSyscon_driver_94F9F2FC == sceSyscon_driver_3357EE5C
0x96551F0B [0x00001B08] - sceSyscon_driver_96551F0B == sceSyscon_driver_1B17D3E3
0x9717363A [0x000034B4] - sceSysconBatteryGetCycle
0x98F76204 [0x00003514] - sceSysconBatteryGetVoltAD
0x992C22C2 [0x000020E8] - sceSysconSendSetParam // no change
0x99589E82 [0x00003094] - sceSysconBatteryGetStatusCap
0x9AAD9503 [0x0000346C] - sceSysconBatteryGetStatus
0x9BC95744 [0x00001AB4] - sceSysconGetWlanPowerCtrl
0xA0A63470 [0x00002B2C] - sceSysconCtrlVoltage
0xA4BC8211 [0x00001AC0] - sceSyscon_driver_A4BC8211 == sceSyscon_driver_051186F3
0xA4DDA869 [0x00001AA8] - sceSysconGetMsPowerCtrl
0xAC693480 [0x00003594] - sceSyscon_driver_AC693480 == sceSyscon_driver_25F47F96 // ?? slight changes
0xB38A3C23 [0x0000372C] - sceSysconCtrlTachyonVoltage
0xB630C294 [0x00003258] - sceSysconBatteryAuth
0xB6469C36 [0x0000256C] - sceSyscon_driver_B6469C36 == sceSyscon_driver_F775BC34
0xB89F72F7 [0x00002FC8] - sceSyscon_driver_B89F72F7 // new dummy?
0xB9C1B0AC [0x000031F4] - sceSyscon_driver_B9C1B0AC == sceSyscon_driver_68EF0BEF
0xBB741B1F [0x00002538] - sceSyscon_driver_BB741B1F // new dummy?
0xBE3EE489 [0x00003110] - sceSysconBatteryGetInfo
0xBE5790E2 [0x00001B20] - sceSysconGetHRPowerCtrl
0xBFF91302 [0x00003574] - sceSysconBatteryGetChargeTime
0xC3F0112E [0x000018E0] - sceSyscon_driver_C3F0112E == sceSyscon_driver_88FDB279 (sceSysconSetBtSwitchCallback)
0xC4249D8F [0x00002664] - sceSysconWriteAlarm
0xC4D1ABF7 [0x00001800] - sceSysconSetAlarmCallback
0xC5030F49 [0x00001918] - sceSysconSetHoldSwitchCallback
0xCEEF7D84 [0x00001854] - sceSysconSetHRPowerCallback
0xCF9A69B8 [0x000022FC] - sceSyscon_driver_CF9A69B8 == sceSyscon_driver_2EE82492
0xD0A53FA1 [0x00003334] - sceSysconBatteryNop
0xD1B501E8 [0x00002BD4] - sceSysconWritePommelReg // no change
0xD2A651B3 [0x000034F4] - sceSysconBatteryGetTempAD
0xD2EAFD3B [0x0000344C] - sceSysconBatteryGetLimitTime
0xD3E1CD1F [0x000038C0] - sceSysconGetDigitalKey
0xD71FFC69 [0x000017C8] - sceSysconSetLowBatteryCallback
0xD8471760 [0x00003014] - sceSyscon_driver_D8471760 == sceSyscon_driver_3AB3AEEF
0xDAE75283 [0x00001748] - sceSyscon_driver_DAE75283 == sceSyscon_driver_C8D97773
0xDCB05807 [0x0000307C] - sceSyscon_driver_DCB05807 // new dummy?
0xE120B4CC [0x000034D4] - sceSysconBatteryGetSerial
0xE2C1632D [0x00002628] - sceSysconWriteClock
0xE31CA09E [0x0000181C] - sceSysconSetAcSupplyCallback
0xE34122E7 [0x000018FC] - sceSyscon_driver_E34122E7 == sceSyscon_driver_BAAECDF8 (sceSysconSetBtPowerCallback)
0xE5834767 [0x00001A7C] - sceSyscon_driver_E5834767 == sceSyscon_driver_F9FDAFA5
0xE6B74CB9 [0x000024F0] - sceSysconNop // no change
0xE7E87741 [0x00002AF4] - sceSysconGetPommelVersion
0xEB277C88 [0x00002008] - sceSyscon_driver_EB277C88 // no change
0xEDA507CD [0x000026FC] - sceSysconCtrlHRPower
0xEFCBFEF2 [0x00002588] - sceSyscon_driver_EFCBFEF2 == sceSyscon_driver_A9AEF39F
0xF1275EC9 [0x00001A34] - sceSysconGetHoldSwitch
0xF2D2F25C [0x000023FC] - sceSysconPowerSuspend
0xF32FE17B [0x0000336C] - sceSysconBatteryGetTemp
0xF350F666 [0x00001298] - sceSysconCmdSync // no change
0xF9F62BE0 [0x00001870] - sceSyscon_driver_F9F62BE0 == sceSyscon_driver_A8E34316 (sceSysconSetHRWakeupCallback)
0xFAFAE8C4 [0x00002FD4] - sceSyscon_driver_FAFAE8C4 // new dummy?
0xFB148FB6 [0x00002B10] - sceSyscon_driver_FB148FB6 // no change
0xFBBAAEC2 [0x00001A4C] - sceSysconGetHRPowerStatus
0xFDCB487E [0x00001AE4] - sceSyscon_driver_FDCB487E == sceSyscon_driver_EE81C5B1 (sceSysconGetUsbPowerCtrl) |
|
|
| Back to top |
|
 |
jas0nuk
Joined: 27 Apr 2006 Posts: 137
|
Posted: Sun Oct 14, 2007 5:26 am Post subject: |
|
|
Hi
Does anyone know if sceKernelGzipDecompress and sceKernelLzrcDecode have changed? Thanks. |
|
| Back to top |
|
 |
Cpasjuste
Joined: 29 May 2005 Posts: 214
|
Posted: Sun Oct 14, 2007 5:47 am Post subject: |
|
|
| I think that no sceKernel nids have changed. |
|
| Back to top |
|
 |
KickinAezz
Joined: 03 Jun 2007 Posts: 328
|
Posted: Fri Dec 21, 2007 7:27 am Post subject: |
|
|
Nice work. _________________ Intrigued by PSP system Since December 2006.
Use it more for Development than for Gaming.
Last edited by KickinAezz on Sat Jan 26, 2008 1:10 am; edited 1 time in total |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Fri Dec 21, 2007 7:47 am Post subject: |
|
|
| Cpasjuste wrote: | | I think that no sceKernel nids have changed. |
Sony heard you and they have changed them in 3.80 lol
I better finish that nid resolver or 3.XX kernel programming will be a hell. |
|
| Back to top |
|
 |
FreePlay
Joined: 04 Jan 2006 Posts: 71 Location: Schenectady, New York, USA
|
Posted: Fri Dec 21, 2007 10:43 pm Post subject: |
|
|
| KickinAezz wrote: | * 0x80020139 = exclusiveload
What does the above mean? [for sceKernelloadmodule] | From what I've seen, usually that it's already loaded, or there are restrictions on the context you must be in to load it. |
|
| Back to top |
|
 |
KickinAezz
Joined: 03 Jun 2007 Posts: 328
|
Posted: Sat Jan 26, 2008 1:12 am Post subject: |
|
|
I am looking for these ones but none of these seem to work for 3.80 M33 [which ofcourse has a NID resolver]
EDIT: 3.80M33 Doesn't resolve for sceAudio_driver. I am looking 3.80 versions of these:
for 3.71 ?
"sceAudio_driver",0xE4A9D621,sceAudioChReserve
"sceAudio_driver",0xC2031226,sceAudioChRelease
"sceAudio_driver",0x798FB2A3,sceAudioOutputBlocking
1.5
"sceAudio_driver",0x5EC81C55,sceAudioChReserve
"sceAudio_driver",0x6FC46853,sceAudioChRelease
"sceAudio_driver",0x136CAF51,sceAudioOutputBlocking
Any help appreciated _________________ Intrigued by PSP system Since December 2006.
Use it more for Development than for Gaming. |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Sat Jan 26, 2008 2:42 am Post subject: |
|
|
Oh well, I may resolve it in a future version, i forgot that one.
Anwyays, those functions are also in user mode version of audio, and 3.80 M33 supports user functions in kernel mode, so you could use them and no need to have the new nids. |
|
| Back to top |
|
 |
KickinAezz
Joined: 03 Jun 2007 Posts: 328
|
Posted: Sat Jan 26, 2008 3:00 am Post subject: |
|
|
| moonlight wrote: | Oh well, I may resolve it in a future version, i forgot that one.
Anwyays, those functions are also in user mode version of audio, and 3.80 M33 supports user functions in kernel mode, so you could use them and no need to have the new nids. |
Ah thanks. I noticed that(user import access in kernel modules - but dint think of this idea) too
Is it a self made patch or did sony become Homebrew friendly to some extent? _________________ Intrigued by PSP system Since December 2006.
Use it more for Development than for Gaming. |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Sat Jan 26, 2008 3:30 am Post subject: |
|
|
| It is a patch that was in OE, but was broken since 3.30 and i made again in 3.71 M33-3 when I noticed why it stopped working in 3.40. |
|
| Back to top |
|
 |
|