[DISCUSSION] Patch WMC to run on Windows 10 final & possible alternatives

Discussion in 'Windows 10' started by ricktendo64, May 8, 2015.

  1. DavidinCT

    DavidinCT MDL Addicted

    May 9, 2015
    536
    100
    30
    #241 DavidinCT, Aug 19, 2015
    Last edited: Aug 19, 2015
    It would be interesting if a patch that worked for ehshell.exe on Windows XP, would work on 7 or 8.1's version. As Windows Media Center for Vista was completely re-written and again (not fully) on Windows 7.

    No, I missed your post for some reason but, I just checked out, good idea!!!!, on Windows 7 now, I'll reboot to 10 later tonight and check it out. I checked it out on my 7 machine (I installed it to this machine for the heck of it, never noticed that) looking forward to checking it out on 10....

    I'm wondering if this is the KEY we are looking for here. As I understand it Windows 7 still had the kernel checks(thought this started in XP), this version I have DID run (maybe changing version would fix it) and it's version 6.1.XXX. The ONLY way they could of gotten it to work was to PATCH the file.

    I assure you when Windows 8 first came out, this little program did install WMC and it did work (never tested with cablecards but, a standard QAM tuner did work).

    I will provide it to devs trying to help here but, I don't want this out everywhere. So public download not going to happen.

    Let me do some testing tonight and I will post back.

    Edit: Tried that, I changed that line to newVersion="10.0.10240" and went through all the config files in folder where it's installed. No go, still does the same thing, also confirmed that the correct .NET is installed, so that cant be a factor.

    As it didn't work in Windows 8 last time I used it I will try this with a plain no WMC install of Windows 8 and change the version to see if that helps (if I runs, then I know it's something in 10 that is causing this.
     
  2. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    It appears that Media Center is controlled by Software Plateform Protection and blocked by it if MediaCenter-EnabledSku is not set. Or maybe it is Media Center which checks against SPP if it is autorized to run.

    Changing ProductPolicy registry key requires to disable sppsvc, and disabling sppsvc seems to blocks Media Center (ehshell.exe does nothing at all).

    According to forums.mydigitallife.net/threads/39411-Windows-Product-Policy-Editor sppsvc reads licenses located in System32\spp. It tried to copy ProfessionalWMC licences/tokens to Professional but nothing worked.

    Links are dead
     
  3. MSMG

    MSMG MDL Developer

    Jul 15, 2011
    6,414
    15,608
    210
    #243 MSMG, Aug 20, 2015
    Last edited by a moderator: Apr 20, 2017
    No I'm not saying to use XP MediaCenter on Windows 7 or 10 but instead using the method used for XP to patch the Windows 10 Pre-RTM Media Center files.

    Opening eshell.exe with ildasm.exe tool gives this error "has no valid CLR header and cannot be disassembled".

    But eshell.dll opens with ildasm.exe tool and can be dumped to eshell.il format which can be opened with notepad.

    In the same site there's a topic about patching eshell.exe for only running MCE on Non-MCE OS, it says like this

    Code:
    11) Optional/Not Necessary In Most Cases -> (Not necessary for converted and original Xp MCE 2005 OS) Porting MCE executable (ehshell.exe) to work on any non Xp MCE 2005 OS (Xp Pro, Home, Tablet PC, 2003, Home Server, even maybe Vista Basic) as well as my Windows Media Center installer :
    OK, Here are the steps (Just for your information/knowledge):
    
    - After disassembling ehshell.exe by ildasm, open ehshell.il by using above way (text editor) then find string "StartupError.NotFreestylePID" (without quotes), using Find and Replace function, then you should see the routines like this:
    
       IL_0019:  call    int32 [EhCM]eHome.Native.Win32::GetSystemMetrics(int32)
       IL_001e:  brtrue.s   IL_002d
       IL_0020:  ldc.i4.1
       IL_0021:  stloc.0
       IL_0022:  ldstr   "#StartupError.NotFreestylePID"
       IL_0027:  starg.s id
       IL_0029:  br.s
    
    - look at "GetSystemMetrics" function call string, In MSDN here, it's just the function to retrieves various system metrics and system configuration settings (Note: System metrics are the dimensions (widths and heights) of Windows display elements). But here it's actually an internal function to recognize the OS is MCE or not (e.g Xp Pro, Home, etc). 
    
    So i just reversed the call (make it would recognize non Xp MCE as Xp MCE, but if you used it on original Xp MCE, of course the load string function (below that) would give error message (small window) like "Media Center only works in Windows Xp MCE" or something stupid like that, (So it's just optional, as you can also totally disable and skip this step on Xp MCE 2005)
    
    change 
    IL_001e:  brtrue.s   IL_002d
    to
    IL_001e:  brfalse.s  IL_002d
    
    save and recompile it as usual as the above way (step 6 & 9). Done.
    
    
    I'm using the same method to find any values that is checking for the OS is MCE or not.

    I'm trying with eshell.dll for possible solution, will update later with the results.



     
  4. T-S

    T-S MDL Guru

    Dec 14, 2012
    3,984
    1,331
    120

    I read somewhere that someone was able to run the WMC from vista on Server2008 doing a token exchange . But now W10 surely stores those info somewhwere else (at least in part) Indeed the old tools to backup/restore the activation aren't working in W10
     
  5. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    #245 Graznok, Aug 20, 2015
    Last edited by a moderator: Apr 20, 2017
    I tried that and ehshell.exe shown the same error message. I also removed parts of code and nothing changed. By removing more parts of code ehshell.dll finally doesn't compile (so I wasn't dumb and I changed the good file).
    This code seems not to be used at all:
    Code:
        IL_0017:  call       int32 [Microsoft.MediaCenter.UI]Microsoft.MediaCenter.Interop.UIHelper::GetMCSkuPolicyFromLicense()
        IL_001c:  brtrue.s   IL_002b
        IL_001e:  ldc.i4.1
        IL_001f:  stloc.0
        IL_0020:  ldstr      "#StartupError.NotFreestylePID"
        IL_0025:  starg.s    id
        IL_0027:  br.s       IL_002b
    
     
  6. MSMG

    MSMG MDL Developer

    Jul 15, 2011
    6,414
    15,608
    210
    #246 MSMG, Aug 20, 2015
    Last edited by a moderator: Apr 20, 2017
    I didn't mean exactly the same code but smiliar to that which may have changed post XP MCE versions.

    Here, it's not just modified eshell.il but even the dumped original eshell.il is not able to compile back to eshell.dll using the ilasm.exe tool, it's giving error for both patched and unpatched files.

    May be there might some more files to be patched but the proper piece code has to be patched which is yet to be found.

    Edit: Sorry that's the same code you had specified, I didn't see it properly.

     
  7. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    #247 Graznok, Aug 20, 2015
    Last edited by a moderator: Apr 20, 2017
    Did you change ilasm command line in order to compile a dll not an exe?
    Code:
    
    D:\Username\Desktop>dir ehshell.*
    
    20/08/2015  12:18        63 378 717 ehshell.il
    20/08/2015  10:28           702 804 ehshell.res
    
    D:\Username\Desktop>C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm /resource:ehshell.res /dll ehshell.il
    
    [---8<--- snip ---8<---]
    
    Method Implementations (total): 446
    Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved
    Writing PE file
    Operation completed successfully
    
    D:\Username\Desktop>dir ehshell.*
    
    20/08/2015  12:18         6 316 544 ehshell.dll
    20/08/2015  12:18        63 378 717 ehshell.il
    20/08/2015  10:28           702 804 ehshell.res
    
    Is this correct?
     
  8. MSMG

    MSMG MDL Developer

    Jul 15, 2011
    6,414
    15,608
    210
    #248 MSMG, Aug 20, 2015
    Last edited by a moderator: Apr 20, 2017
    Yes I used the same command dll and not an exe but's not working here don't know why?

    Installed VS2015 and used the ildasm.exe from C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

    Then using ildasm.exe dumped the eshell.il then edited the eshell.il using Notepad2 and saved it.

    Then tried ilasm /resource:ehshell.res /dll ehshell.il to compile back to dll but it's giving error.

    May be something else might be the error, will check again with the sdk files and try out.


     
  9. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    ilasm.exe from v4.0.30319 or from another Framework version?
     
  10. ricktendo64

    ricktendo64 MDL Expert

    Apr 20, 2008
    1,396
    2,025
    60
    Good idea, maybe try 4.5 as well
     
  11. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    I have to post something to reach 20 posts.
     
  12. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    #252 Graznok, Aug 21, 2015
    Last edited by a moderator: Apr 20, 2017
  13. Mehdi98

    Mehdi98 MDL Novice

    Sep 6, 2013
    1
    0
    0
    Hi guys;
    did anyone find the solution?o_O
    I did not read this topic completely! :D
    Thnx...
     
  14. ricktendo64

    ricktendo64 MDL Expert

    Apr 20, 2008
    1,396
    2,025
    60
    #254 ricktendo64, Aug 22, 2015
    Last edited by a moderator: Apr 20, 2017
    (OP)
    After patching ehshell.exe are you guys also running this?

    Code:
    sn -Vr ehshell.exe
     
  15. sevenacids

    sevenacids MDL Addicted

    Aug 17, 2012
    667
    232
    30
    I didn't read through all of this but it's interesting that you guys keep trying, so just some thoughts that come into mind...

    For recompilation of IL sources, I'd suggest to use the same version of the IL assembler of the original target runtime version. In case of MCE, I assume it was built on the v2.0 rather than the v4.0 CLR because .NET 4.x wasn't RTM before April 2010.

    About the ehshell.EXE - if that's not a managed assembly, it must be a native executable that is hosting the CLR inside to load MCE, so it's possible that the actual (or additional) license checking is happening in native code before the managed part is run. I mean, it would make sense to do it in native code instead of easy-to-disassemble IL. Is it proven it's done on the managed side?

    Keep it up, and good luck ;)
     
  16. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    #256 Graznok, Aug 22, 2015
    Last edited by a moderator: Apr 20, 2017
    Not needed, actually I just discovered that ehshell.dll is also located in
    Code:
    C:\Windows\Microsoft.NET\assembly\GAC_MSIL\ehshell\v4.0_10.0.0.0__31bf3856ad364e35
    We have to rename it in order to use the first one located in ehome directory.

    Thank for your advice. ehshell.exe (native) loads ehshell.dll (managed) and license checking is done by GetMCSkuPolicyFromLicense() method. Bypassing this method prevent the message box to show but MCE doesn't run either.
     
  17. abbodi1406

    abbodi1406 MDL KB0000001

    Feb 19, 2011
    17,190
    90,666
    340
    #257 abbodi1406, Aug 22, 2015
    Last edited by a moderator: Apr 20, 2017
    The Win8.1/Win10 package is using NET 4 assemblies, so i guess it was recompiled on v4.0 CLR

    That one is just a copy of the one in ehome directory
    it's used by .NET to create the NativeImage

    so, when patching ehshell.dll it should replaced in both folders :D
     
  18. Graznok

    Graznok MDL Member

    Jan 29, 2013
    214
    120
    10
    #258 Graznok, Aug 22, 2015
    Last edited by a moderator: Apr 20, 2017
    Good idea!

    With patched version of ehshell.dll, ehshell.exe does nothing but a WER file is created:
    Code:
    Version=1
    EventType=CLR20r3
    EventTime=130847209414830736
    ReportType=2
    Consent=1
    UploadTime=130847209417175080
    ReportIdentifier=3aa649d9-48cb-11e5-a9f3-b4b676cd93e3
    IntegratorReportIdentifier=c066d6f1-c852-405a-b61b-aea1316119f8
    NsAppName=ehshell.exe
    Response.BucketId=526fc62f6468d5838a1753ffd5c876d1
    Response.BucketTable=5
    Response.LegacyBucketId=128898398312
    Response.type=4
    Sig[0].Name=Problem Signature 01
    Sig[0].Value=ehshell.exe
    Sig[1].Name=Problem Signature 02
    Sig[1].Value=10.0.10135.0
    Sig[2].Name=Problem Signature 03
    Sig[2].Value=556bc9d1
    Sig[3].Name=Problem Signature 04
    Sig[3].Value=mscorlib
    Sig[4].Name=Problem Signature 05
    Sig[4].Value=4.6.76.2
    Sig[5].Name=Problem Signature 06
    Sig[5].Value=555037df
    Sig[6].Name=Problem Signature 07
    Sig[6].Value=328
    Sig[7].Name=Problem Signature 08
    Sig[7].Value=10
    Sig[8].Name=Problem Signature 09
    Sig[8].Value=System.Security.Security
    DynamicSig[1].Name=OS Version
    DynamicSig[1].Value=10.0.10135.2.0.0.256.48
    DynamicSig[2].Name=Locale ID
    DynamicSig[2].Value=1036
    DynamicSig[22].Name=Additional Information 1
    DynamicSig[22].Value=2b67
    DynamicSig[23].Name=Additional Information 2
    DynamicSig[23].Value=2b673111b13284750fd073fe2abf7f18
    DynamicSig[24].Name=Additional Information 3
    DynamicSig[24].Value=3ba6
    DynamicSig[25].Name=Additional Information 4
    DynamicSig[25].Value=3ba65c3f214abcfe4ca896c84bd1a1db
    UI[2]=C:\Windows\ehome\ehshell.exe
    UI[3]=Windows Media Center has stopped working
    UI[4]=Windows can check online for a solution to the problem.
    UI[5]=Check online for a solution and close the program
    UI[6]=Check online for a solution later and close the program
    UI[7]=Close the program
    LoadedModule[0]=C:\Windows\ehome\ehshell.exe
    LoadedModule[1]=C:\Windows\SYSTEM32\ntdll.dll
    LoadedModule[2]=C:\Windows\system32\KERNEL32.DLL
    LoadedModule[3]=C:\Windows\system32\KERNELBASE.dll
    LoadedModule[4]=C:\Windows\system32\msvcrt.dll
    LoadedModule[5]=C:\Windows\system32\ole32.dll
    LoadedModule[6]=C:\Windows\system32\combase.dll
    LoadedModule[7]=C:\Windows\system32\RPCRT4.dll
    LoadedModule[8]=C:\Windows\system32\sechost.dll
    LoadedModule[9]=C:\Windows\system32\GDI32.dll
    LoadedModule[10]=C:\Windows\system32\USER32.dll
    LoadedModule[11]=C:\Windows\system32\OLEAUT32.dll
    LoadedModule[12]=C:\Windows\system32\SHLWAPI.dll
    LoadedModule[13]=C:\Windows\system32\ADVAPI32.dll
    LoadedModule[14]=C:\Windows\SYSTEM32\mscoree.dll
    LoadedModule[15]=C:\Windows\system32\IMM32.DLL
    LoadedModule[16]=C:\Windows\system32\MSCTF.dll
    LoadedModule[17]=C:\Windows\system32\kernel.appcore.dll
    LoadedModule[18]=C:\Windows\SYSTEM32\bcryptPrimitives.dll
    LoadedModule[19]=C:\Windows\system32\uxtheme.dll
    LoadedModule[20]=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll
    LoadedModule[21]=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
    LoadedModule[22]=C:\Windows\SYSTEM32\MSVCR120_CLR0400.dll
    LoadedModule[23]=C:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlib\014890703e5c42c2722328563df2e1a6\mscorlib.ni.dll
    LoadedModule[24]=C:\Windows\system32\clbcatq.dll
    LoadedModule[25]=C:\Windows\SYSTEM32\sxs.dll
    LoadedModule[26]=C:\Windows\SYSTEM32\VERSION.dll
    LoadedModule[27]=C:\Windows\SYSTEM32\CRYPTSP.dll
    LoadedModule[28]=C:\Windows\SYSTEM32\bcrypt.dll
    LoadedModule[29]=C:\Windows\system32\rsaenh.dll
    LoadedModule[30]=C:\Windows\SYSTEM32\CRYPTBASE.dll
    LoadedModule[31]=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clrjit.dll
    LoadedModule[32]=C:\Windows\assembly\NativeImages_v4.0.30319_64\System\ec17f3882fadad0b2fa421b559d7c7ef\System.ni.dll
    LoadedModule[33]=C:\Windows\assembly\NativeImages_v4.0.30319_64\Microsoft.M1fb29482#\cc4e727b71e45cd60bd8f323484abc50\Microsoft.MediaCenter.UI.ni.dll
    LoadedModule[34]=C:\Windows\assembly\NativeImages_v4.0.30319_64\mcstore\9c5837b9f983c9a43acbe777da1a87ef\mcstore.ni.dll
    LoadedModule[35]=C:\Windows\assembly\NativeImages_v4.0.30319_64\Microsoft.Mac4b2f20#\dbc8a64a01a97cd1b97bbc83451f8a4c\Microsoft.MediaCenter.Shell.ni.dll
    LoadedModule[36]=C:\Windows\ehome\EhUI.dll
    LoadedModule[37]=C:\Windows\system32\POWRPROF.dll
    LoadedModule[38]=C:\Windows\system32\WS2_32.dll
    LoadedModule[39]=C:\Windows\system32\NSI.dll
    LoadedModule[40]=C:\Windows\system32\SHELL32.dll
    LoadedModule[41]=C:\Windows\system32\windows.storage.dll
    LoadedModule[42]=C:\Windows\system32\shcore.dll
    LoadedModule[43]=C:\Windows\system32\profapi.dll
    LoadedModule[44]=C:\Windows\system32\SETUPAPI.dll
    LoadedModule[45]=C:\Windows\system32\CFGMGR32.dll
    LoadedModule[46]=C:\Windows\SYSTEM32\d3d9.dll
    LoadedModule[47]=C:\Windows\SYSTEM32\dxgi.dll
    LoadedModule[48]=C:\Windows\SYSTEM32\DSOUND.dll
    LoadedModule[49]=C:\Windows\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.10135.0_none_04423f32705deafa\gdiplus.dll
    LoadedModule[50]=C:\Windows\SYSTEM32\MSIMG32.dll
    LoadedModule[51]=C:\Windows\SYSTEM32\WINMM.dll
    LoadedModule[52]=C:\Windows\SYSTEM32\WTSAPI32.dll
    LoadedModule[53]=C:\Windows\SYSTEM32\dwmapi.dll
    LoadedModule[54]=C:\Windows\SYSTEM32\WINMMBASE.dll
    LoadedModule[55]=C:\Windows\SYSTEM32\DEVOBJ.dll
    LoadedModule[56]=C:\Windows\ehome\ehtrace.dll
    LoadedModule[57]=C:\Windows\SYSTEM32\msftedit.DLL
    LoadedModule[58]=C:\Windows\ehome\ehuihlp.dll
    LoadedModule[59]=C:\Windows\system32\WINTRUST.dll
    LoadedModule[60]=C:\Windows\system32\MSASN1.dll
    LoadedModule[61]=C:\Windows\system32\CRYPT32.dll
    LoadedModule[62]=C:\Windows\SYSTEM32\ATL.DLL
    LoadedModule[63]=C:\Windows\SYSTEM32\SLC.dll
    LoadedModule[64]=C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10135.0_none_39f9c1ef56881315\COMCTL32.dll
    LoadedModule[65]=C:\Windows\SYSTEM32\NETAPI32.dll
    LoadedModule[66]=C:\Windows\SYSTEM32\WINSTA.dll
    LoadedModule[67]=C:\Windows\SYSTEM32\WINSPOOL.DRV
    LoadedModule[68]=C:\Windows\SYSTEM32\IPHLPAPI.DLL
    LoadedModule[69]=C:\Windows\SYSTEM32\sppc.dll
    LoadedModule[70]=C:\Windows\SYSTEM32\wkscli.dll
    LoadedModule[71]=C:\Windows\SYSTEM32\srvcli.dll
    LoadedModule[72]=C:\Windows\SYSTEM32\netutils.dll
    LoadedModule[73]=C:\Windows\SYSTEM32\WINNSI.DLL
    LoadedModule[74]=C:\Windows\SYSTEM32\ntmarta.dll
    LoadedModule[75]=C:\Windows\ehome\ehres.dll
    LoadedModule[76]=C:\Windows\SYSTEM32\SspiCli.dll
    LoadedModule[77]=C:\Windows\SYSTEM32\samcli.dll
    LoadedModule[78]=C:\Windows\SYSTEM32\SAMLIB.dll
    LoadedModule[79]=C:\Windows\SYSTEM32\sqmapi.dll
    LoadedModule[80]=C:\Windows\System32\MMDevApi.dll
    LoadedModule[81]=C:\Windows\System32\PROPSYS.dll
    LoadedModule[82]=C:\Windows\SYSTEM32\AUDIOSES.DLL
    LoadedModule[83]=C:\Windows\SYSTEM32\wintypes.dll
    LoadedModule[84]=C:\Windows\Microsoft.Net\assembly\GAC_64\mcstoredb\v4.0_10.0.0.0__31bf3856ad364e35\mcstoredb.dll
    LoadedModule[85]=C:\Windows\SYSTEM32\RASAPI32.dll
    LoadedModule[86]=C:\Windows\SYSTEM32\rasman.dll
    LoadedModule[87]=C:\Windows\system32\psapi.dll
    LoadedModule[88]=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\diasymreader.dll
    State[0].Key=Transport.DoneStage1
    State[0].Value=1
    FriendlyEventName=Stopped working
    ConsentKey=CLR20r3
    AppName=Windows Media Center
    AppPath=C:\Windows\ehome\ehshell.exe
    NsPartner=windows
    NsGroup=windows8
    ApplicationIdentity=56FA83629436B0D95CD66B6A5ACF38AB
    
    A .NET Runtime event is logged:
    Code:
    Application: ehshell.exe
    Framework Version: v4.0.30319
    Description: The process was terminated due to an unhandled exception.
    Exception Info: System.Security.SecurityException
    Stack:
       at System.ThrowHelper.ThrowSecurityException(System.ExceptionResource)
       at Microsoft.Win32.RegistryKey.OpenSubKey(System.String, Boolean)
       at Microsoft.MediaCenter.Store.ObjectStore.GetClientId(Boolean)
       at MediaCenter.Store.SqlLite.ObjectStore.Open(System.String)
       at MediaCenter.Store.SqlLite.ObjectStoreManager.Open(System.String, Boolean)
       at Microsoft.MediaCenter.Store.ObjectStore.Open(System.String, System.String, System.String, System.Reflection.Assembly, Boolean)
       at Microsoft.MediaCenter.Store.ObjectStore.Open(System.String, System.String, System.String, Boolean)
       at Microsoft.MediaCenter.Store.ObjectStore.AddObjectStoreReference()
       at Microsoft.MediaCenter.Store.ObjectStore.get_DefaultSingleton()
       at ServiceBus.UIFramework.UserControlPoint.Launch(System.String)
    
    An application error event is logged:
    Code:
    Faulting application name: ehshell.exe, version: 10.0.10135.0, time stamp: 0x556bc9d1
    Faulting module name: KERNELBASE.dll, version: 10.0.10135.0, time stamp: 0x556bca96
    Exception code: 0xe0434352
    Fault offset: 0x0000000000031928
    Faulting process id: 0x63c
    Faulting application start time: 0x01d0dcd7fcc7bbc5
    Faulting application path: C:\Windows\ehome\ehshell.exe
    Faulting module path: C:\Windows\system32\KERNELBASE.dll
    Report Id: c066d6f1-c852-405a-b61b-aea1316119f8
    Faulting package full name: 
    Faulting package-relative application ID: 
    
     
  19. T-S

    T-S MDL Guru

    Dec 14, 2012
    3,984
    1,331
    120
    #259 T-S, Aug 22, 2015
    Last edited by a moderator: Apr 20, 2017
  20. T-S

    T-S MDL Guru

    Dec 14, 2012
    3,984
    1,331
    120