rejetto forum

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - MarkV

Pages: 1 2 3 ... 51
1
Beta / Re: version 2.4
« on: September 01, 2020, 11:14:48 PM »
the default template is targeting chrome 49, which works on XP.
As a general note: I understand some people have lower targets, but there's no limit to compatibillity (netscape?) so i had to set one (and decided XP is enough), and other requirements can be matched by a custom template or by a diff for the default one.
If you want to spend your time to see what's needed to improve your experience with opera 8.54, I can try to help. You tell me.
Oh, I wouldn't touch the current template at all. It is perfect for modern browsers as it is.

The question is: Would it be possible to have HFS serve a different (older) template, based on User Agent of the connecting client? Kind of like they do with mobile versions of websites. You could even serve a mobile template, that way.

Example: If I configure the User Agent of Opera Presto (any version up to 12.17) for the compatibility template, HFS would serve that template if a browser using that User Agent connects. Other User Agents get the current template.

2
Beta / Re: version 2.4
« on: August 25, 2020, 09:40:25 PM »
No problem, we are all on standby and watching this topic. I just had a a few years break - some days more don't add any pain. :)
_____

Unfortunately, the 2.4 template doesn't work correctly on older browsers. Although you can navigate the files and directories as-is, the buttons "Login", "Search", "Selection", "Sort" are missing (maybe the method they are created with is not available). Possibly they could be replaced by text links if the buttons are not supported.
The template of 2.3m works correctly, tested down to Opera 8.54 on Windows 95.

3
Beta / Re: version 2.4
« on: August 04, 2020, 11:31:39 PM »
Hi,

the latest changes in the template seem to have killed the "always dark" diff template you kindly offered. Is it still possible to force dark theme with the new default.tpl?


About the UI freezing, it is unfortunately not the only problem.

At least in conjunction with the nginx reverse proxy (for getting TLS support), as long as that one download runs,
1. the UI is frozen (known),
2. I can not browse anymore, be it on the same or other machines,
3. Further downloads cannot be started.

In any case, as long as the download runs, nginx will give "Gateway timeout", as there is no reply from HFS anymore.

I see only two ways to solve that. First would be to make HFS multithreaded, possibly the programming language won't support it (is it still Delphi?). Second would be separating the interface from the engine, and have both intercommunicate over TCP/IP or UDP connections.
As a hacky workaround, I have enabled nginx' caching facilities. It will locally get the requested download from HFS as fast as possible and store it in the cache. Once the caching is complete, HFS is released and the client is served from the cache until the download completes. HFS will still freeze, but not as long as with non-cached transfers. Same for uploads, although it has less benefits.

4
Beta / Re: version 2.4
« on: June 20, 2020, 10:37:21 PM »
that feature is enabled by default, you should see the original ip if the reverse proxy is on the same machine (localhost)
That works for IPv4, but not at all for IPv6. The headers contain the correct IPv6 address, though. Maybe HFS needs to be adjusted a bit?

Btw., nginx, by default, uses HTTP/1.0 for the reverse proxy. Add the following line under [server]:

proxy_http_version 1.1;

5
Beta / Re: version 2.4
« on: June 20, 2020, 08:16:08 AM »
I did experiment a bit with nginx, as there were a few quirks (such as DualStack not working).

Found out the fix is actually simple: Change the line

listen 443 ssl;

to

listen [::]:443 ssl;


Done, works for me.

_____

One question: The reverse proxy usage of course cloaks the true identities of the connecting machines. Can HFS be configured to show the IP from the X-Forwarded-For (or X-Real-IP) headers, if they exist?

6
Beta / Re: version 2.4
« on: June 10, 2020, 02:56:57 PM »
When I find some time, I'll also document my changes in openssl.cfg, which will greatly ease the creation process, and will allow "Subject Alternate Names (SANs)".

7
Beta / Re: version 2.4
« on: June 09, 2020, 10:30:05 PM »
It seems to work fine. I just changed the ports (my HFS runs on 8080) and used my own self-signed cert (Let's Encrypt only works for Internet-accessible servers, due to the verification process).

I'm using OpenSSL to create my certs, though, so I don't have to rely on a random server in the Internet.

Code: [Select]
openssl.exe req -new -config openssl.cfg -outform PEM -newkey rsa:2048 -x509 -sha384 -days 730 -nodes -verbose -out "cert.crt" -keyout "cert.key"
-new - create new cert
-config openssl.cfg is the name of the OpenSSL config file (you can have many)
-outform PEM - output format PEM
-newkey rsa:2048 - RSA key with 2048 bits strength
-x509 - don't do a certificate request (for CA)
-sha384 - hash used for cert
-days 730 - validity period
 -out "cert.crt" -keyout "cert.key" - names of the created cert and key.

Get OpenSSL for Win here: https://slproweb.com/products/Win32OpenSSL.html

8
Beta / Re: version 2.4
« on: June 08, 2020, 09:55:37 PM »
Seems to work, although it unconditionally forces dark mode (reset to dark at every refresh or directory change as the theme gets re-read). Well, good enough for me!

Just be sure to skip the OS method on non-conforming OS (everything before Windows 10 1803 IIRC).


Edit: Small objection with the dark theme in general. Every refresh or directory change, it flashes bright before returning to dark again. This is very painful for the eyes, especially in dark environments. Maybe it's easy to improve.

9
Beta / Re: version 2.4
« on: June 08, 2020, 08:44:33 PM »

it's saved  as a cookie in the browser.
the 'cycle' could be a plugin, i don't think i will include such feature in the base.
i guess the best would be to detect what you want from the OS, as they are starting to be dark-aware.


Thanks to the new *.diff.tpl feature it will be much easier to make "plugins".
I have many ideas but little time.

My browser kills cookies after a few minutes or session end, thanks for the note. I would like to have at least the option to make dark the default (theme always starts as dark instead of light).

autotheme addon sets dark mode by OS
Will not work for me, I'm on Windows 7. Could be set by day time easily.

10
Beta / Re: version 2.4
« on: June 08, 2020, 05:56:53 PM »
correct, and i knew that, it's in the to-do since long :)
for a later release, we have even too much stuff here. Initially i meant 2.4 just for the mobile tpl ;D
Sorry, I was long absent. Lost quite some (dev) time.

i see you are using some other way to have it dark :) but i trust you know that you get a similar result by clicking the bulb icon on the top-right corner
It's an extension in my browser. :)

Will pressing the bulb be saved, possibly by account? Is it controllable, possibly even by day/night cycle?

11
Beta / Re: version 2.4
« on: June 08, 2020, 05:39:41 PM »
thanks mark but it's not randomness we need for this (salt excluded)
Oh, so I didn't understand right. You want to encrypt the new password with the old one, send it and have HFS decrypt it, before replaceing and dispose of the old credentials.

That's good, however, one small thing to consider. If HFS follows good security practices, it will NEVER store the password itself. Instead, it will calculate a strong digest (like SHA512) and store that, probably salted. When a client sends the password, calculate the SHA512 digest of the sent password and then compare the two hashes.
Advantages: Passwords cannot be stolen from the server configs as the server doesn't store them; strong hashes are irreversible and have no known collisions.

In that case, you would encrypt the new password with the old password's hash, not with the password itself.


Edit: Default template also looks good in dark:

12
Beta / Re: version 2.4
« on: June 08, 2020, 09:46:07 AM »
as an alternative method, we can just use the old password to encrypt the new one (no openssl required).
You can also use the current wall clock time string from the system, as a source of randomness. Could also be used to salt the password if necessary.

13
Beta / Re: version 2.4
« on: June 04, 2020, 10:33:24 PM »
Small note regarding the representation of IPv6 in address lines and logs. As you know, IPv6 uses colons as separators, unless IPv4, which uses dots. In order to solve the ambiguity that arises with appended ports (which, stupidly, also use a colon as separator), literal IPv6 addresses are written inside of square brackets "[" and "]".

HFS shows the IPv6 correctly in its address line, but incorrectly in the log. The square brackets need to be added to logged IPv6 addresses, too. Otherwise, serious confusion might arise while analyzing the HFS log, especially with shorted IPv6 addresses.


Example: 2001:db8::7:2:8080 is bad to read, as you won't know if the port is part of the IPv6 address or not. Showing [2001:db8::7:2]:8080 is much better, and, by the way, the only correct syntax.


That's my 2 cents for today.  ;)


Edit: Btw, does the Boru_V1 theme have a few image errors or is it my browser?

https://rejetto.com/forum/Themes/Boru_v1/images/useron.gif

The image above will only display an error message.

14
Beta / Re: version 2.4
« on: May 26, 2020, 10:30:17 PM »
Yes, the 2.3m build #300 works fine on that vanilla W2K SP4. So, there is at least a working fallback build.

No clue if it helps. but here's the Dr. Watson (drwtsn32.exe) report for the crash:
Code: [Select]


Application exception occurred:
        App:  (pid=1140)
        When: 5/27/2020 @ 00:10:25.788
        Exception number: c0000025
()

*----> System Information <----*
        Computer Name: VBX-W2KTEST
        User Name: Test
        Number of Processors: 1
        Processor Type: x86 Family 15 Model 2 Stepping 0
        Windows 2000 Version: 5.0
        Current Build: 2195
        Service Pack: 4
        Current Type: Uniprocessor Free
        Registered Organization: *
        Registered Owner: Test

*----> Task List <----*
   0 Idle.exe
   8 System.exe
 180 smss.exe
 208 csrss.exe
 228 WINLOGON.exe
 256 SERVICES.exe
 268 LSASS.exe
 392 VBoxService.exe
 480 svchost.exe
 508 spoolsv.exe
 536 AvastSvc.exe
 568 svchost.exe
 608 regsvc.exe
 624 mstask.exe
 540 winmgmt.exe
 704 svchost.exe
1168 explorer.exe
1280 VBoxTray.exe
1336 AvastUI.exe
1340 internat.exe
1564 explorer.exe
1140 hfs.exe
 784 drwtsn32.exe
   0 _Total.exe

(00400000 - 00979000)
(77F80000 - 77FFC000)
(77570000 - 775A0000)
(77E10000 - 77E6F000)
(7C570000 - 7C624000)
(77F40000 - 77F7D000)
(7C2D0000 - 7C335000)
(77D30000 - 77D9F000)
(77800000 - 7781E000)
(76620000 - 76631000)
(76B30000 - 76B6E000)
(70A70000 - 70AD6000)
(78000000 - 78045000)
(71710000 - 71794000)
(7CF30000 - 7D176000)
(77820000 - 77827000)
(759B0000 - 759B6000)
(779B0000 - 77A4C000)
(7CE20000 - 7CF0F000)
(7CDC0000 - 7CE10000)
(7C340000 - 7C34E000)
(77BF0000 - 77C01000)
(77980000 - 779A5000)
(75050000 - 75058000)
(75030000 - 75044000)
(75020000 - 75028000)
(77950000 - 7797B000)
(751C0000 - 751C6000)
(75150000 - 75160000)
(75E60000 - 75E7A000)
(6E420000 - 6E426000)
(7C950000 - 7C9DF000)
(64E40000 - 64E61000)
(78B20000 - 78DDE000)
(77840000 - 7787E000)
(770C0000 - 770E3000)
(772B0000 - 7731D000)
(782C0000 - 782CC000)
(77340000 - 77353000)
(77520000 - 77525000)
(77320000 - 77337000)
(773B0000 - 773DF000)
(77380000 - 773A3000)
(77830000 - 7783E000)
(77880000 - 7790E000)
(7C0F0000 - 7C154000)
(774E0000 - 77514000)
(774C0000 - 774D1000)
(77530000 - 77552000)
(77360000 - 77379000)
(777E0000 - 777E8000)
(777F0000 - 777F5000)

State Dump for Thread Id 0x5b8

eax=0012f914 ebx=0012ffb0 ecx=00000000 edx=ffffffff esi=0012f98c edi=00000000
eip=77facc94 esp=0012f908 ebp=0012f974 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00200202


function: RtlTraceDatabaseEnumerate
        77facc6f eb23             jmp RtlConvertUlongToLargeInteger+0x10c4 (77fbc294)
        77facc71 f6460401         test    byte ptr [esi+0x4],0x1       ds:00bb9872=??
        77facc75 742a             jz      wcstombs+0x16a9 (77fb93a1)
        77facc77 c745a0250000c0                                  ss:00bb985a=????????
                                  mov     dword ptr [ebp+0xa0],0xc0000025
        77facc7e 8d45a0           lea     eax,[ebp+0xa0]         ss:00bb985a=????????
        77facc81 c745a401000000   mov   dword ptr [ebp+0xa4],0x1 ss:00bb985a=????????
        77facc88 50               push    eax
        77facc89 8975a8           mov     [ebp+0xa8],esi         ss:00bb985a=????????
        77facc8c 894db0           mov     [ebp+0xb0],ecx         ss:00bb985a=????????
        77facc8f e80cf8ffff       call    RtlRaiseException (77fac4a0)
FAULT ->77facc94 8b1b             mov     ebx,[ebx]              ds:0012ffb0=0012ffe0
        77facc96 83fbff           cmp     ebx,0xff
        77facc99 0f8540ffffff     jne     RtlTraceDatabaseEnumerate+0xb3 (77facbdf)
        77facc9f eb08             jmp     wcstol+0x183 (77fb7ca9)
        77facca1 b001             mov     al,0x1
        77facca3 eb06             jmp     allmul+0xb (77fb4fab)
        77facca5 834e0408         or     dword ptr [esi+0x4],0x8 ds:00bb9872=????????
        77facca9 32c0             xor     al,al
        77faccab 5f               pop     edi
        77faccac 5e               pop     esi
        77faccad 5b               pop     ebx
        77faccae c9               leave

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1  Param#2  Param#3  Param#4  Function Name
0012F974 77F91BC6 0012F98C 0012F9BC 0012F98C 0012F9BC ntdll!RtlTraceDatabaseEnumerate
0012FCE0 00682EE2 0EEDFADE 00000001 00000007 0012FCF8 ntdll!KiUserExceptionDispatcher
0012FD4C 00683D83 0012FDD8 00000000 012B948C 0012FD88 !TMethodImplementationIntercept
0012FD60 006AD7DB 0012FE04 0012FD94 006AD7F1 0012FD88 !TMethodImplementationIntercept
0012FD88 006B5341 0012FE04 0012FDA0 006B5486 0012FE10 !TMethodImplementationIntercept
0012FE10 00799606 00000000 0012FE48 007A1D2B 0012FE50 !TMethodImplementationIntercept
0012FE1C 007A1D2B 0012FE50 007A1DA3 0012FE48 0089050C !TMethodImplementationIntercept
0012FE48 007A9AF7 0012FED8 007A9C8C 0012FED0 00000000 !TMethodImplementationIntercept
0012FED0 007BF53B 0012FF00 007BF5ED 0012FEF4 01396A7C !TMethodImplementationIntercept
0012FEF4 007BFA28 0012FF8C 0012FF94 007BFF1E 0012FF8C !TMethodImplementationIntercept
0012FF8C 007D653E 0012FFB0 007D6560 0012FFC0 00000000 !TMethodImplementationIntercept
0012FFC0 7C5989D5 00000000 00000000 7FFDF000 00000000 !TMethodImplementationIntercept
0012FFF0 00000000 007D6380 00000000 000000C8 00000100 kernel32!ProcessIdToSessionId

*----> Raw Stack Dump <----*
0012f908  c0 fc 12 00 14 fd 12 00 - 8c f9 12 00 25 00 00 c0  ............%...
0012f918  01 00 00 00 8c f9 12 00 - 94 cc fa 77 00 00 00 00  ...........w....
0012f928  e8 56 13 00 f8 f9 12 00 - 64 f9 12 00 60 f9 12 00  .V......d...`...
0012f938  88 f9 12 00 00 00 00 00 - cc fc 12 00 00 00 00 00  ................
0012f948  48 31 f8 77 ff ff ff ff - a8 f6 12 00 14 00 00 00  H1.w............
0012f958  8c f9 12 00 1f 00 00 00 - 14 00 16 00 38 b4 16 00  ............8...
0012f968  00 00 13 00 00 70 12 00 - 00 00 00 00 e0 fc 12 00  .....p..........
0012f978  c6 1b f9 77 8c f9 12 00 - bc f9 12 00 8c f9 12 00  ...w............
0012f988  bc f9 12 00 de fa ed 0e - 01 00 00 00 00 00 00 00  ................
0012f998  b1 bc 59 7c 07 00 00 00 - e2 2e 68 00 e0 45 2a 01  ..Y|......h..E*.
0012f9a8  a8 3d 68 00 00 00 00 00 - d8 fd 12 00 4c fd 12 00  .=h.........L...
0012f9b8  14 fd 12 00 3f 00 01 00 - 00 00 00 00 00 00 00 00  ....?...........
0012f9c8  00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  ................
0012f9d8  72 13 ff ff 00 01 ff ff - ff ff ff ff 02 74 40 00  r............t@.
0012f9e8  1b 00 3a 07 74 ba 29 01 - 23 00 ff ff 00 00 00 00  ..:.t.).#.......
0012f9f8  00 00 00 00 00 00 00 d4 - 01 d0 01 e8 00 80 34 40  ..............4@
0012fa08  00 d2 00 da 00 ca 00 de - 35 40 00 c8 00 e6 00 40  ........5@.....@
0012fa18  00 e8 35 40 00 e6 00 e8 - 00 c2 00 dc 35 40 00 cc  ..5@........5@..
0012fa28  00 de 00 ea 00 dc 35 40 - 00 de 00 ea 00 dc 00 c8  ......5@........
0012fa38  35 40 00 50 01 a0 01 94 - 01 80 34 40 00 00 00 00  5@.P......4@....

State Dump for Thread Id 0x3fc

eax=77d37dd0 ebx=00145560 ecx=0012dce8 edx=00000000 esi=00145400 edi=00000100
eip=77f88b37 esp=015bfe28 ebp=015bff74 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000206


function: ZwReplyWaitReceivePortEx
        77f88b2c b8ac000000       mov     eax,0xac
        77f88b31 8d542404         lea     edx,[esp+0x4]          ss:02049d0f=????????
        77f88b35 cd2e             int     2e
        77f88b37 c21400           ret     0x14
        77f88b3a 8bff             mov     edi,edi

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1  Param#2  Param#3  Param#4  Function Name
015BFF74 77D58E4A 77D3AEED 00145400 77D50101 00130000 ntdll!ZwReplyWaitReceivePortEx
015BFFA8 77D37DE8 00144C38 015BFFEC 7C57B3BC 00145560 rpcrt4!TowerConstruct
015BFFB4 7C57B3BC 00145560 77D50101 00130000 00145560 rpcrt4!I_RpcConnectionInqSockBuffSize2
015BFFEC 00000000 00000000 00000000 00000000 00000000 kernel32!lstrcmpiW

State Dump for Thread Id 0x2f8

eax=7ce20000 ebx=00000102 ecx=00147b28 edx=00000000 esi=77f88398 edi=016bff74
eip=77f883a3 esp=016bff60 ebp=016bff7c iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000206


function: NtDelayExecution
        77f88398 b832000000       mov     eax,0x32
        77f8839d 8d542404         lea     edx,[esp+0x4]          ss:02149e47=????????
        77f883a1 cd2e             int     2e
        77f883a3 c20800           ret     0x8
        77f883a6 8bff             mov     edi,edi

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1  Param#2  Param#3  Param#4  Function Name
016BFF7C 7C59A2CC 0000EA60 00000000 7CE89ACC 0000EA60 ntdll!NtDelayExecution
00007530 00000000 00000000 00000000 00000000 00000000 kernel32!Sleep

*----> Raw Stack Dump <----*
016bff60  01 a3 59 7c 00 00 00 00 - 74 ff 6b 01 31 a0 59 7c  ..Y|....t.k.1.Y|
016bff70  28 7b 14 00 00 ba 3c dc - ff ff ff ff 30 75 00 00  ({....<.....0u..
016bff80  cc a2 59 7c 60 ea 00 00 - 00 00 00 00 cc 9a e8 7c  ..Y|`..........|
016bff90  60 ea 00 00 a7 5b e8 7c - 00 00 00 00 00 00 e2 7c  `....[.|.......|
016bffa0  28 7b 14 00 ec ff 6b 01 - 28 7b 14 00 ff 5a e8 7c  ({....k.({...Z.|
016bffb0  85 7d e3 7c 70 7d e3 7c - bc b3 57 7c 28 7b 14 00  .}.|p}.|..W|({..
016bffc0  85 7d e3 7c 70 7d e3 7c - 28 7b 14 00 00 c0 fd 7f  .}.|p}.|({......
016bffd0  62 00 64 00 c0 ff 6b 01 - 62 00 64 00 ff ff ff ff  b.d...k.b.d.....
016bffe0  60 21 5c 7c 08 2b 57 7c - 00 00 00 00 00 00 00 00  `!\|.+W|........
016bfff0  00 00 00 00 e5 5a e8 7c - 28 7b 14 00 00 00 00 00  .....Z.|({......
016c0000  c8 00 00 00 00 01 00 00 - ff ee ff ee 02 10 00 00  ................
016c0010  00 00 00 00 00 fe 00 00 - 00 00 10 00 00 20 00 00  ............. ..
016c0020  00 02 00 00 00 20 00 00 - 9e 01 00 00 ff ef fd 7f  ..... ..........
016c0030  06 00 08 06 00 00 00 00 - 00 00 00 00 00 00 00 00  ................
016c0040  00 00 00 00 98 05 6c 01 - 0f 00 00 00 f8 ff ff ff  ......l.........
016c0050  50 00 6c 01 50 00 6c 01 - 40 06 6c 01 00 00 00 00  P.l.P.l.@.l.....
016c0060  00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  ................
016c0070  00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  ................
016c0080  00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  ................
016c0090  00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  ................

State Dump for Thread Id 0x41c

eax=778321fe ebx=00000003 ecx=0012f258 edx=00000000 esi=77f88ef8 edi=00000003
eip=77f88f03 esp=0182fd24 ebp=0182fd70 iopl=0         nv up ei pl zr na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246


function: NtWaitForMultipleObjects
        77f88ef8 b8e9000000       mov     eax,0xe9
        77f88efd 8d542404         lea     edx,[esp+0x4]          ss:022b9c0b=????????
        77f88f01 cd2e             int     2e
        77f88f03 c21400           ret     0x14
        77f88f06 8bff             mov     edi,edi

*----> Stack Back Trace <----*

FramePtr ReturnAd Param#1  Param#2  Param#3  Param#4  Function Name
0182FD70 7C59A180 0182FD48 00000001 00000000 00000000 ntdll!NtWaitForMultipleObjects
0182FFB4 7C57B3BC 00000004 000B000A 7C3280D0 0016D3D0 kernel32!WaitForMultipleObjects
0182FFEC 00000000 00000000 00000000 00000000 00000000 kernel32!lstrcmpiW


Version 2.4 beta05 seems to work fine on vanilla XP SP3 (no POS hack).

Edit: 2.4beta05 crashes with the same report on my old W2K, too. Think it's end of the line and will keep using 2.3m.

Minimum OS is now Windows XP SP3!

15
Beta / Re: version 2.4
« on: May 26, 2020, 09:37:50 AM »
First results are in:

I couldn't get it to run on Windows 2000 SP4, so far. Have to check what the fresh system still lacks, in comparison to the established one that runs HFS fine. Maybe it is the IPv6 TP.

Important hint for Windows XP users:

On a standard Windows XP installation with SP3, HFS will start, no problem, but it will be disabled and unable to be put online. That's because a standard install is missing the IPv6 component.
Server will be permanently OFFLINE until you:
1. Open a command prompt,
2. issue a
Code: [Select]
netsh int ipv6 install command, and
3. reboot.

With activated IPv6, HFS will  be started and online.

Pages: 1 2 3 ... 51