00:52 < bridge> something which will never be merged 01:17 < bridge> check how rust does it ^^ 07:37 < bridge> :owo: me rn 08:01 < bridge> hi fred 08:01 < bridge> what's good in the hood 08:02 < bridge> nothing 08:30 < bridge> its raining 08:48 < bridge> it's foggy 08:51 < bridge> raining 08:51 < bridge> it's cold 09:29 < bridge> I'm bored πŸ₯± 09:29 < bridge> Someone bring up a controversial topic pls 09:36 < bridge> rust is better than c 09:41 < bridge> UFOs are real 09:55 < bridge> I'm sure the are some unidentifizierte Flugobjekte 09:57 < bridge> you can still write shit slow code even if you write it in ASM. Not a worthy convo 09:57 < bridge> @teero777 u said controversial not worthy 09:57 < bridge> Hmm okay mb 09:58 < bridge> german sounds alien 09:58 < bridge> Which people do you think are botting? 09:59 < bridge> *that are publicly seen as legit players 10:00 < bridge> Aggressive alien 10:00 < bridge> he said controversial xd 10:01 < bridge> not truth 10:01 < bridge> xdd 10:01 < bridge> untruth 10:01 < bridge> I'm a C fan 10:01 < bridge> πŸͺ­ 10:01 < bridge> then u can upgrade 10:01 < bridge> to rust fan 10:01 < bridge> If you don't have a long beard 10:01 < bridge> You're not a C fan 10:02 < bridge> 😭 10:04 < bridge> Usually I would try to remove as much rust as possible from old objects when I need to use them. And then add some wd40 into the mix and then everything is working again 10:05 < bridge> On the other hand carbon is a very good material 10:05 < bridge> the name rust is ambiguous 10:06 < bridge> in this case Rust means a mushroom 10:06 < bridge> its a mushroom yes 10:06 < bridge> not the metal rusting stuff 10:06 < bridge> https://tenor.com/view/ferris-rust-rustlang-crab-cute-gif-26396486 10:07 < bridge> https://youtu.be/7wp1xknPA5A?si=jgPnNZQ4qtzL-ZWq 10:07 < bridge> me when coding rust 10:07 < bridge> Hmm who would name a programming language like one of most annoying things in the wolrd 10:07 < bridge> bcs it makes u high 10:08 < bridge> You mean a rusty syringe? Xd 10:08 < bridge> You mean a rusty syringe? XD 10:08 < bridge> xd 10:09 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1163388116103610449/image0.jpg?ex=653f649d&is=652cef9d&hm=bdc5085f2683a20b77bd20ef0b3ec4f59b5ca70abaca6b683eeadf8ac4397fc5& 10:09 < bridge> a rusty syringe with rust elixir 10:09 < bridge> Look at that beautiful C 10:09 < bridge> Sudden 10X dev potion 10:09 < bridge> yes, that C is beatiful. but it's a capital C.. nothing to do with c 10:09 < bridge> xd 10:09 < bridge> C is a capital C 10:10 < bridge> better learn this: 10:10 < bridge> 10:10 < bridge> https://en.wikipedia.org/wiki/C-- 10:11 < bridge> where is c// and c** 10:11 < bridge> at least there is c:// on windows xd 10:11 < bridge> There is also c-hashtag :troll: 10:12 < bridge> 😬 10:12 < bridge> The C on windows is fake 10:12 < bridge> The c on windows is fake 10:13 < bridge> Any good words starting with C? 10:14 < bridge> wtf is clunking? 10:14 < bridge> Cool 10:14 < bridge> cock 10:14 < bridge> πŸ“ 10:15 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1163389677546516520/Screenshot_20231016-101504.png?ex=653f6611&is=652cf111&hm=54aa0ab30fb75c38e83ea86426374e9af4c23ee012c243c15373da95dca27c2b& 10:15 < bridge> New favourite word 10:15 < bridge> tf is that translator 10:16 < bridge> huh? Deepl 10:16 < bridge> tf is that phone 10:16 < bridge> nothing 1 10:17 < bridge> whats your reason for having bought that 10:17 < bridge> needed a phone 10:17 < bridge> Hipster 10:17 < bridge> specifically this, i mean 10:17 < bridge> Was easy to jailbreak 10:18 < bridge> Arent all phones easy to jailbreak 10:18 < bridge> android* 10:19 < bridge> I was looking at phones and this one looked good and it has good performance 10:19 < bridge> @fokkonaut leak urs 10:20 < bridge> I was just about to write an essay of my current phone dilemma 10:20 < bridge> fokkonaut is chatting from the landline 10:21 < bridge> Haustelefon ftw 10:21 < bridge> Telefonzelle 10:21 < bridge> So, I have had a S9 for 5 years now and its broken now so I really need a new one. Been looking at the S23 lately as its dropping in price more and more, but it has no SD card slot and no headphone jack, and I hate that companies follow Apple on this shit 10:21 < bridge> Got my phone for 200 10:22 < bridge> Don't buy Samsung 10:22 < bridge> I'll be happy to pay 550€+ for the S23, but those two things suck 10:22 < bridge> Ofc I'll buy Samsung 10:22 < bridge> I have pocophone f5 10:22 < bridge> Snapdragon 8 pro 10:22 < bridge> so efficient cpu 10:23 < bridge> Nothing phone cuz they 're not that expensive or google pixel 8 10:23 < bridge> gen 2* 10:23 < bridge> I have the snapdragon 7 gen 2 10:23 < bridge> (Yay started a controversial topic) 10:23 < bridge> 4nm 10:23 < bridge> No 10:23 < bridge> Sadly nothing phone doesnt have a headphone jack either 10:23 < bridge> snapdragon 8 gen 2 has been adjusted to samsungs software 10:23 < bridge> to be more efficient 10:24 < bridge> I'm thinking between Google pixel 8 or 8 pro 10:24 < bridge> I don't want Samsung software 10:24 < bridge> Lmao 10:24 < bridge> Native Android> all 10:24 < bridge> samsung phones are the best android phones 10:24 < bridge> What do you need to be efficient about? I play minesweeper on my phone and tats the only game xd 10:24 < bridge> I jailbreak it and put custom rom 10:24 < bridge> Lol no 10:24 < bridge> lol yes 10:24 < bridge> I like Samsung most 10:25 < bridge> In what exactly, cuz they're never above google in dxomark lmao 10:25 < bridge> same. native android there isn't much to control 10:25 < bridge> Its pretty expensive for what it delivers 10:25 < bridge> But they have quite good phones 10:25 < bridge> True, but UX is on point 10:25 < bridge> Feature wise 10:25 < bridge> Thats why I'm waiting a little for the price to drop even more 10:26 < bridge> Might buy it on black friday 10:26 < bridge> hey fellas 10:26 < bridge> Currently Google pixel 8 has the best screen + probably best photoshoot phone, just waiting for dxomark to release it 10:26 < bridge> or earlier, if its cheap enough 10:26 < bridge> I have 120hz. That's all i ever needed 10:26 < bridge> Xd 10:26 < bridge> so good for the eyes 10:26 < bridge> And big barriers 10:26 < bridge> Battery 10:26 < bridge> best screen? doubt, samsungs amoled is pro 10:27 < bridge> And 12gb ram 😬 10:27 < bridge> same but it sucks on my battery like a Capri sun 10:27 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1163392740617359391/Screenshot_20231016_102712_Samsung_Internet.jpg?ex=653f68ec&is=652cf3ec&hm=c9c5549bea68d25065a7a342b8fed2388295db208f0b6dc35b79dcc7693025f6& 10:27 < bridge> @fokkonaut sorry for you but dxomark is a reference since years for everyone 10:27 < bridge> same but it sucks on my battery like it's a Capri sun 10:28 < bridge> Don't they all use Samsung screens xd 10:28 < bridge> its fine, samsung is just right after google 10:28 < bridge> im getting stack corruption from an in-bounds write to a locked SDL_Surface's pixels 10:28 < bridge> ```cpp 10:28 < bridge> void RenderUtilities::FadeSurfaceOut(SDL_Surface *surf, const SDL_Rect *rect, bool axis, bool direction) { 10:28 < bridge> if (!SDLUtilities::SurfaceIsValid(surf) || surf->format->Amask == 0) // surface is invalid or doesn't have an alpha channel 10:28 < bridge> return; 10:28 < bridge> 10:28 < bridge> SDL_LockSurface(surf); 10:28 < bridge> 10:28 < bridge> int x_start = rect->x + (axis ? 0 : rect->w); 10:28 < bridge> int x_target = rect->x + (axis ? rect->w : 0); 10:28 < bridge> int y_start = rect->y + (axis ? 0 : rect->h); 10:28 < bridge> int y_target = rect->y + (axis ? rect->h : 0); 10:28 < bridge> 10:28 < bridge> if (x_target > surf->w || y_target > surf->h) 10:28 < bridge> return; 10:28 < bridge> 10:28 < bridge> auto AdjustPixelAlpha = [&](int a_x, int a_y) { 10:28 < bridge> static uint32_t *pixels, *target_pixel = nullptr; 10:28 < bridge> static uint8_t r, g, b, src_a, new_a; 10:28 < bridge> static float fraction; 10:28 < bridge> 10:28 < bridge> pixels = reinterpret_cast(surf->pixels); 10:28 < bridge> target_pixel = &pixels[((a_y * surf->pitch) / surf->format->BytesPerPixel) + a_x]; 10:28 < bridge> 10:28 < bridge> if (axis) 10:29 < bridge> fraction = direction ? (float(a_x - x_start) / float(x_target - x_start)) 10:29 < bridge> : (float(a_y - y_start) / float(y_target - y_start)); 10:29 < bridge> else 10:29 < bridge> fraction = direction ? (float(x_start - a_x) / float(x_start - x_target)) 10:29 < bridge> : (float(y_start - a_y) / float(y_start - y_target)); 10:29 < bridge> 10:29 < bridge> SDL_GetRGBA(*target_pixel, surf->format, &r, &g, &b, &src_a); 10:29 < bridge> WTF 10:29 < bridge> Ban 10:29 < bridge> wdym ban 10:29 < bridge> ban 10:29 < bridge> Ban 10:29 < bridge> Nab 10:29 < bridge> ban ban caliban 10:29 < bridge> tali 10:29 < bridge> Seems like not 10:29 < bridge> i cannot fathom why 10:29 < bridge> experts help me 10:30 < bridge> It's Samsung, lg or boe 10:30 < bridge> And the camera on the 8 pro damn 10:31 < bridge> Will get 1st probably on dxomark 10:31 < bridge> google fanboy 10:31 < bridge> btw in the last else thing in the loop shouldn't it be a >= instead of a >? 10:31 < bridge> Native is Always better 10:31 < bridge> Less shit 10:31 < bridge> perhaps 10:31 < bridge> thats true yes 10:32 < bridge> it was but then i changed it to see if it was making an oob access (and it wasn't) 10:32 < bridge> but i forgot to change it back 10:34 < bridge> btw in the last else thing in the loop shouldn't it be a >= instead of a >? Else it misses the 0 index 10:34 < bridge> Same for the other backwards forloops 10:34 < bridge> btw in the last else thing in the loop shouldn't it be a >= instead of a >? 10:35 < bridge> Btw when you return you want to unlock the surface again if that's a thing 10:36 < bridge> um i did 10:36 < bridge> In the exceptions 10:36 < bridge> The if after the lock 10:36 < bridge> oh yeah i missed that 10:36 < bridge> thanks 10:37 < bridge> not the issue tho 10:39 < bridge> Hmm 10:41 < bridge> Well you just can't write to a locked surface with SDL_MapRGBA right? 10:42 < bridge> nop 10:43 < bridge> ah wait 10:44 < bridge> i also tried a SDL_memcpy 10:44 < bridge> which did not work 10:44 < bridge> cuz it wouldn't do anything differently 10:44 < bridge> Why use Sdl functions anyway? 10:44 < bridge> wdym 10:45 < bridge> unknown endianness and pixel format 10:45 < bridge> sdl accounts for all of that 10:45 < bridge> sdl functions account for all of that 10:45 < bridge> ah ok 11:07 < bridge> i'll have to sleep on it 12:14 < bridge> Seems the 8 pro does use a samsung oled panel, I wonder how dxomark grades the display 15:12 < bridge> what's the best UX for the ipv6 registering? perhaps only show errors the first time? 16:29 < bridge> Yes, would be nice to have a message "ipv6 registering failed, will ignore it from now on" 16:30 < bridge> Also maybe a message that this doesn't mean that the registering failed in total. Would be best to wait until both register attempts are finished, then print `registered on ipv4, ipv6` if both worked, or `registered on ipv4` if only that worked. I think many won't even know what ipv6 is and just read the error as "registering failed" 16:52 < bridge> @learath2 is C `__uint128_t` something i can expect to be in most modern compilers? 16:52 < bridge> or should i use `unsigned __int128` 16:55 < bridge> If int128 is there uint128 will be there too 16:55 < bridge> but apparently `unsigned __int128` is the way 16:55 < bridge> there is no `__uint128` 16:55 < bridge> iirc 16:55 < bridge> without the _t 16:56 < bridge> https://stackoverflow.com/questions/16088282/is-there-a-128-bit-integer-in-gcc 16:56 < bridge> Oh without the t hmm 16:56 < bridge> `typedef unsigned _BitInt(128) u128` 16:56 < bridge> this is C23 feature 16:56 < bridge> i wish it was earlier 16:56 < bridge> arbitrary precision ints 16:57 < bridge> arbitrary bit ints 16:57 < bridge> https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types 17:00 < bridge> ``` 17:00 < bridge> #define __GLIBCXX_TYPE_INT_N_0 __int128 17:00 < bridge> #define __GLIBCXX_BITSIZE_INT_N_0 128 17:00 < bridge> ``` 17:00 < bridge> apparently u need this if u want libstdc++ to handle them too 17:02 < bridge> https://www.openbsd.org/74.html 17:09 < bridge> @jupeyy_keks new pfp 17:09 < bridge> i think its better 17:21 < bridge> :poggers2: 17:23 < bridge> The only piece of code I ever used a 128 bit integer in seems to use the uint128_t 17:25 < bridge> epic 17:26 < bridge> i also changed it on gh 17:26 < bridge> cuz i was bored of the fish 17:26 < bridge> no more fish 17:28 < bridge> +30% coding skill 17:29 < bridge> Is it anime girl on gh? 17:29 < bridge> If so you are now the bestest programmist among us 17:29 < bridge> @ryozuki when v-tuber rust coding stream? 17:29 < bridge> <_voxeldoesart> ryozuki still has anime pfp on gh 17:29 < bridge> :justatest: 17:29 < bridge> i mean i just put it now 17:29 < bridge> before i had a fish 17:30 < bridge> it is 17:30 < bridge> i have no fear 17:30 < bridge> <_voxeldoesart> ok now fix all 512+ issues 17:31 < bridge> since i have a anime pfp i can only code in rust 17:31 < bridge> as its a weeb lang 17:32 < bridge> <_voxeldoesart> fake programmer 17:32 < bridge> Fearless concurrency? 17:32 < bridge> fearless weebency 17:36 < bridge> @learath2 know a tool that can show me the dependencies of a dll on windows? 17:38 < bridge> wine-dump 17:38 < bridge> xd 17:38 < bridge> its hilarious u need wine 17:38 < bridge> wine better than win itself 17:38 < bridge> I don't have that installed, where do I get it? 17:39 < bridge> unlikely that you need wine, probably just because we're mostly using linux here 17:39 < bridge> i dunno, mingw package manager 17:39 < bridge> u can download the packages 17:39 < bridge> without pacman 17:39 < bridge> my coffee got cold again 17:39 < bridge> ah, on windows? tried on my arch linux 17:41 < bridge> <_voxeldoesart> sometimes i wonder when someone will ask for how to do something on windows and one of you guys will send the arch/gentoo installation website 17:42 < bridge> already happened, I think 17:43 < bridge> <_voxeldoesart> πŸ’€ 17:49 < bridge> actually sounds like something where chatgpt might be helpful 17:52 < bridge> indeed: it suggested dependency walker 17:52 < bridge> On windows or on linux? 17:52 < bridge> it's right there in the question πŸ˜„ "on windows" 17:53 < bridge> 500 KiB tool 17:53 < bridge> I wonder how they build it 17:53 < bridge> If you have VC there is a dumpbin 17:54 < bridge> I used this too, it's much more userfriendly 17:56 < bridge> is there an equivalent to rpath on windows/ 17:56 < bridge> is there an equivalent to rpath on windows? 17:58 < bridge> No 17:59 < bridge> @learath2 do you know whether I can get a more useful error than "File not found" from `LoadLibrary`? 17:59 < bridge> I guess tracing the dynamic linker… don't want to do that 18:00 < bridge> Uhhhhm, where do you get the "File not found"? 18:01 < bridge> I'm guessing GetLastError 18:02 < bridge> yup, `GetLastError` 18:02 < bridge> I'm afraid that's all I know aswell. You'll have to trace 18:03 < bridge> API Monitor is the only tool I know for it 18:04 < bridge> Or maybe you can intercept a couple file opening functions and hope you get lucky? 18:05 < bridge> https://www.rohitab.com/apimonitor 18:05 < bridge> > Secure Connection Failed 18:05 < bridge> > 18:05 < bridge> > An error occurred during a connection to www.rohitab.com. Peer using unsupported version of security protocol. 18:05 < bridge> > 18:05 < bridge> > Error code: SSL_ERROR_UNSUPPORTED_VERSION 18:05 < bridge> > 18:05 < bridge> > The page you are trying to view cannot be shown because the authenticity of the received data could not be verified. 18:05 < bridge> > Please contact the website owners to inform them of this problem. 18:05 < bridge> > 18:05 < bridge> > This website might not support the TLS 1.2 protocol, which is the minimum version supported by Firefox. 18:07 < bridge> Apparently ProcMon can trace api calls too 18:08 < bridge> Yeah, it's ancient 😭 18:08 < bridge> Windows debugging tooling is all from a couple decades ago 18:08 < bridge> average windows dev experience 18:08 < bridge> but the tooling is kinda nice, quite polished IME 18:09 < bridge> whats ime 18:09 < bridge> in my experience 18:09 < bridge> Windbg has a logger but idk if it ever became 64bit aware 18:09 < bridge> the certificate for rohitab.com also expired in 2020 18:09 < bridge> Except for visual studio, what tooling is there even? Most everything is ancient broken tools 18:09 < bridge> how is that servers still online? ^^ 18:10 < bridge> random tools from third parties that work nicely for what they do, also with polished UIs 18:10 < bridge> e.g. x64dbg 18:10 < bridge> or the .net decompiler whose name I forgot 18:11 < bridge> Oh this one is a nice tool indeed 18:14 < bridge> I'm honestly far more used to gdb, but I do see the charm to the nice ui 18:16 < bridge> CFF Explorer is nice too now that I think about it 18:16 < bridge> how are we gonna fix up strace to work with uring btw? 18:17 < bridge> On linux or without it I'm stuck with python and pefile, which is nice but definitely not as pretty and simple πŸ˜„ 18:17 < bridge> what's cff explorer? 18:17 < bridge> A PE file editor 18:17 < bridge> ah, nice πŸ™‚ 18:17 < bridge> does it work with obfuscated binaries? 18:18 < bridge> I don't think there is any decent fix to it tbf 18:18 < bridge> If it's a valid or atleast runnable PE file, it'll work. It's very aggressive. But it does crash if some kinds of binary trickery is employed 18:19 < bridge> One bot client we encountered broke it. It's the ghidra PR I made πŸ˜„ 18:19 < bridge> It broke ghidra too 18:21 < bridge> ^^ 19:20 < bridge> `objdump -p program.exe | grep "DLL Name:"` ? 19:25 < bridge> using git bash u can simply do `ldd prog.exe` 19:25 < bridge> ``` 19:25 < bridge> $ ldd DDNet.exe 19:25 < bridge> ntdll.dll => /c/Windows/SYSTEM32/ntdll.dll (0x7ff832230000) 19:25 < bridge> KERNEL32.DLL => /c/Windows/System32/KERNEL32.DLL (0x7ff830f60000) 19:25 < bridge> KERNELBASE.dll => /c/Windows/System32/KERNELBASE.dll (0x7ff82f810000) 19:25 < bridge> ADVAPI32.dll => /c/Windows/System32/ADVAPI32.dll (0x7ff831db0000) 19:25 < bridge> msvcrt.dll => /c/Windows/System32/msvcrt.dll (0x7ff831890000) 19:25 < bridge> libcurl.dll => /d/Games/DDNet/libcurl.dll (0x7ff8104c0000) 19:25 < bridge> sechost.dll => /c/Windows/System32/sechost.dll (0x7ff830630000) 19:25 < bridge> discord_game_sdk.dll => /d/Games/DDNet/discord_game_sdk.dll (0x7fffb8320000) 19:25 < bridge> avcodec-60.dll => /d/Games/DDNet/avcodec-60.dll (0x7ff80f0e0000) 19:25 < bridge> CRYPT32.dll => /c/Windows/System32/CRYPT32.dll (0x7ff82fd10000) 19:25 < bridge> WS2_32.dll => /c/Windows/System32/WS2_32.dll (0x7ff830ee0000) 19:25 < bridge> ole32.dll => /c/Windows/System32/ole32.dll (0x7ff830a70000) 19:25 < bridge> RPCRT4.dll => /c/Windows/System32/RPCRT4.dll (0x7ff830d40000) 19:25 < bridge> ucrtbase.dll => /c/Windows/System32/ucrtbase.dll (0x7ff82fbc0000) 19:25 < bridge> msvcp_win.dll => /c/Windows/System32/msvcp_win.dll (0x7ff82fe80000) 19:25 < bridge> SHELL32.dll => /c/Windows/System32/SHELL32.dll (0x7ff831030000) 19:25 < bridge> IMM32.dll => /c/Windows/System32/IMM32.dll (0x7ff830e70000) 19:25 < bridge> GDI32.dll => /c/Windows/System32/GDI32.dll (0x7ff831ee0000) 19:25 < bridge> win32u.dll => /c/Windows/System32/win32u.dll (0x7ff82fce0000) 19:26 < bridge> USER32.dll => /c/Windows/System32/USER32.dll (0x7ff82ffa0000) 19:26 < bridge> gdi32full.dll => /c/Windows/System32/gdi32full.dll (0x7ff82f6f0000) 19:26 < bridge> avformat-60.dll => /d/Games/DDNet/avformat-60.dll (0x7ff810550000) 19:26 < bridge> SHLWAPI.dll => /c/Windows/System32/SHLWAPI.dll (0x7ff830ce0000) 19:26 < bridge> combase.dll => /c/Windows/System32/combase.dll (0x7ff8306e0000) 19:26 < bridge> avutil-58.dll => /d/Games/DDNet/avutil-58.dll (0x7ff80f8d0000) 19:26 < bridge> swresample-4.dll => /d/Games/DDNet/swresample-4.dll (0x7ff8106a0000) 19:26 < bridge> swscale-7.dll => /d/Games/DDNet/swscale-7.dll (0x7ff810410000) 19:26 < bridge> libfreetype.dll => /d/Games/DDNet/libfreetype.dll (0x7ff80f820000) 19:26 < bridge> libopusfile.dll => /d/Games/DDNet/libopusfile.dll (0x7ff810650000) 19:26 < bridge> ``` 19:26 < bridge> $ ldd DDNet.exe 19:26 < bridge> ntdll.dll => /c/Windows/SYSTEM32/ntdll.dll (0x7ff832230000) 19:26 < bridge> KERNEL32.DLL => /c/Windows/System32/KERNEL32.DLL (0x7ff830f60000) 19:26 < bridge> KERNELBASE.dll => /c/Windows/System32/KERNELBASE.dll (0x7ff82f810000) 19:26 < bridge> ADVAPI32.dll => /c/Windows/System32/ADVAPI32.dll (0x7ff831db0000) 19:26 < bridge> msvcrt.dll => /c/Windows/System32/msvcrt.dll (0x7ff831890000) 19:26 < bridge> ... 19:26 < bridge> ``` 19:35 < bridge> I'm very confused about Windows. The client seems to consistently use 5-10 MB less RAM when I rename it to `DDNet_2.exe` 19:35 < bridge> My measurements for #7353 first made me think that using more threads makes the client use less RAM 19:35 < bridge> https://github.com/ddnet/ddnet/pull/7353 19:36 < bridge> That `exe` has a different name, so somehow this influences the memory usage :pepeW: 19:57 < bridge> its the sign that ddnet 2 has to happen 21:57 < bridge> dependency walker 22:03 < bridge> oh sorry you found it already 22:41 < bridge> Me rn 22:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1163577448038940692/RDT_20231016_2241042502841654398182657.jpg?ex=654014f1&is=652d9ff1&hm=350948ac415d1c51ad86dd351274b8e8201058e02b0f11db8b18b63a56aa3468&