Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
58b1d5e
Add initial boilerplate
frysee Dec 10, 2025
0cc3464
Add tg5050 to CI builds
frysee Dec 10, 2025
bcff542
Basic UI works
frysee Dec 11, 2025
f6c375f
Drop modernize branch, we are back on main
frysee Dec 12, 2025
31eb26e
Enabled tg5040 target again
frysee Dec 12, 2025
ac6099a
Provide a fallback for symbolic ref when building on detached HEAD (e…
frysee Dec 12, 2025
a51a794
Revert make order
frysee Dec 12, 2025
b657f5a
Fix minarch build
frysee Dec 12, 2025
2ebe296
Fix FN switch/rumble motor gpios
frysee Dec 12, 2025
fa38645
Fix volume controls, display brightness
frysee Dec 12, 2025
4acda55
Fix remaining pixel format mismatches
frysee Dec 17, 2025
44edecc
Unified tg5040/5050 pixel formats
frysee Dec 17, 2025
8e03cf0
Added file manager
frysee Dec 17, 2025
760337e
Add L3/R3 to minput
frysee Dec 17, 2025
f6ce47e
Fix rumble motor activation path
frysee Dec 17, 2025
d632778
Shortened boot time a bit
frysee Dec 17, 2025
7353626
Fix Remove Loading.pak
frysee Dec 17, 2025
50ac6aa
Fix sound
frysee Dec 17, 2025
56b188f
Add back in tg5040
frysee Dec 17, 2025
42f8f80
Correct CPU frequencies and OPPs
frysee Dec 17, 2025
5548617
Fix build issue on CI
frysee Dec 17, 2025
b27aa86
Clean up settings for tg5050
frysee Dec 18, 2025
0f91294
Expose fan speed in settings
frysee Dec 18, 2025
ab50477
Add generic wifi implementation (no trimui libs this time)
frysee Dec 18, 2025
e0588ab
Fix missing fallbacks
frysee Dec 18, 2025
756a83a
Fix missing define
frysee Dec 18, 2025
0c7d7b2
Drastically improved boot time
frysee Dec 18, 2025
88aaa71
Settings startup time should be instant again
frysee Dec 18, 2025
df00660
Fix build
frysee Dec 18, 2025
5188d68
Fix suspend
frysee Dec 18, 2025
6f5f6ae
Move audiomon to common code, avoid duplication
frysee Dec 19, 2025
2e4dfed
Housekeeping, remove unused platform functions
frysee Dec 19, 2025
413e3e5
Started factoring out platform code thats not really device-specific
frysee Dec 19, 2025
311c3fa
Wifi: correctly manage dhcp
frysee Dec 19, 2025
160f405
Clean up mainui boot script a bit
frysee Dec 20, 2025
d7e1298
Fix render loop in various paks
frysee Dec 20, 2025
2342dd7
Add generic bluetooth implementation (no trimui libs this time)
frysee Dec 20, 2025
cf1aa08
Drop superfluous wifi/bt handling for off state, services are not aut…
frysee Dec 20, 2025
cddeaa5
Fix bt init and discovery
frysee Dec 22, 2025
f31aff4
Enable audiomon
frysee Dec 24, 2025
7b003b8
Add simplistic pairing agent for BT
frysee Dec 24, 2025
277293c
Fix: bluetooth connect/disconnect events being missed
frysee Dec 29, 2025
b499d9f
Feat: Designate new home button as additional Menu button (for now)
frysee Dec 29, 2025
50fc547
Fix: BT volume controls
frysee Dec 29, 2025
8870ffb
Fix: Rumble
frysee Dec 30, 2025
3b1ac62
Chore: Make the pill animation code slightly more readable (I said sl…
frysee Jan 8, 2026
e4fd554
Chore: Removed unused battery overlay code
frysee Jan 9, 2026
167dc35
Chore: Slightly more logging for Video init
frysee Jan 9, 2026
8bd2c95
Fix: Fake-08: Remove obsolete workaround
frysee Jan 9, 2026
8f7aee2
Chore: Remove unused stuff
frysee Jan 9, 2026
72b9a62
Fix: undefined behavior (overlapping memory regions)
frysee Jan 9, 2026
50729fc
Fix: double free (using font object from different threads)
frysee Jan 9, 2026
1963b92
Chore: migrate desktop platform code to use generic_video
frysee Jan 9, 2026
9f595ac
Fix: data race on battery status reporting
frysee Jan 9, 2026
74b0e3a
Fix: data race on wifi status, move to PWR context
frysee Jan 9, 2026
23f7a25
Fix: data race on condition variables that are still in use
frysee Jan 9, 2026
ea31723
Fix: thread leaks
frysee Jan 9, 2026
e7536a0
Fix: more threading issues
frysee Jan 9, 2026
c35f10b
Fix: remaining races and false-positives
frysee Jan 9, 2026
58833e7
Fix: tg5040 build
frysee Jan 9, 2026
d260751
Chore: Precreate overlays folders to avoid confusion
frysee Jan 9, 2026
ee753af
Chore: Removed irelevant special case
frysee Jan 9, 2026
21acdf3
Chore: Remove unmaintained code
frysee Jan 10, 2026
f5c7342
Chore: Compile at least one desktop core
frysee Jan 10, 2026
50ac2c4
Fix: data race in audio callback
frysee Jan 10, 2026
9763c0b
Feat: Add auto fan control daemon
frysee Jan 12, 2026
2add9b1
Feat: allow setting fixed speeds manually, hook up to msettings
frysee Jan 12, 2026
a2d5c43
Fix: attribution for GPLv2 (Knulli)
frysee Jan 12, 2026
684df69
Chore: formatting
frysee Jan 12, 2026
332fe2c
Chore: Disable cores for desktop target, no need to build them on CI …
frysee Jan 12, 2026
226714a
Fix shader reset mechanism and improve video color format handling
frysee Jan 12, 2026
fce48e5
Fix: removed misleading error message
frysee Jan 12, 2026
90bef47
Chore: Slight cleanup
frysee Jan 12, 2026
bd98045
Fix: Clean up all font resources properly
frysee Jan 12, 2026
338f1b6
Fix: skip hidden MacOS garbage when parsing folder content
frysee Jan 12, 2026
2f8e7b6
Chore: Remove unused variables
frysee Jan 13, 2026
49eb93d
Chore: Trim more unused crap out of minarch
frysee Jan 13, 2026
fdfaeea
Fix: Random game close on GBA
frysee Jan 13, 2026
412db06
Chore: A bit more cleanup, no functional changes
frysee Jan 13, 2026
2a89976
Fix: Reverted some code that was actually needed
frysee Jan 13, 2026
f4fa342
Fix: Disable fortification on newer gcc, which triggers some hard to …
frysee Jan 13, 2026
87bf8c6
Chore: Some leftovers
frysee Jan 13, 2026
2317e55
Chore: Keep the sanitizers in place for next time
frysee Jan 13, 2026
bc6bfd2
Chore: Replace printfs with LOG
frysee Jan 13, 2026
ba035b4
Fix: unbound framebuffer after swap
frysee Jan 13, 2026
b0f2789
Chore: Hide shader info in debug hud if no shader is active
frysee Jan 14, 2026
262280f
Fix: Speaker pop
frysee Jan 14, 2026
5a2f4b9
Fix: Build issue
frysee Jan 14, 2026
54faae3
Feat: Replace show.elf with something that can show flexible content
frysee Jan 14, 2026
30460ef
Fix: Desktop build
frysee Jan 14, 2026
33a1a39
Fix: Overlay hidden after scale change via shortcut
frysee Jan 14, 2026
c7145c3
Fix: Another data race on extracting games
frysee Jan 14, 2026
b337ca3
Chore: get tg5040 up to date again
frysee Jan 14, 2026
778f9d2
Chore: Reduce log spam a bit
frysee Jan 15, 2026
856b3d9
Fix: Remove explicit wifi init on tg5040, no longer needed
frysee Jan 15, 2026
6809aa5
Fix: Skip overlay load if no path given
frysee Jan 15, 2026
4239e31
Fix: Drop unused dependency
frysee Jan 15, 2026
7970c86
Fix: Properly kill backgrounded tasks
frysee Jan 15, 2026
449eca6
Chore: Cull AutoCpu steps
frysee Jan 15, 2026
a23bf26
Chore: Shader debugging
frysee Jan 15, 2026
6d558fc
Fix: Set a default text
frysee Jan 15, 2026
bcb0726
Fix: Hopefully improve shader flickering
frysee Jan 15, 2026
4373851
Chore: Refactor debug hud externs into a struct
frysee Jan 15, 2026
b37bcf6
Fix: Add missing glyphs
frysee Jan 15, 2026
0814010
Feat: Frame time tracking in debug hud
frysee Jan 15, 2026
6a90723
Feat: Uncapped fps when FFing with debug hud open
frysee Jan 15, 2026
4cc3932
Chore: Add profiler launch config (desktop)
frysee Jan 15, 2026
c4ce4bb
Chore: Add launch targets with two-core limit and gperftools
frysee Jan 15, 2026
c300417
Chore: Reduce debug hud in bench mode, render overhead taints profili…
frysee Jan 15, 2026
ef46c90
Chore: Bind L1 to tab to use as a FF button
frysee Jan 15, 2026
408e8bb
Chore: Optimize resampling code
frysee Jan 15, 2026
3b72bfd
Chore: Add tsan target for minarch debugging
frysee Jan 16, 2026
bea0c8d
Chore: A couple more desktop cores
frysee Jan 16, 2026
7ef0812
Fix: audio data race, thread leak
frysee Jan 16, 2026
2f3b131
Fix: prepareFrameThread synchronization (its not pretty)
frysee Jan 16, 2026
e90c618
Chore: ASAN desktop target
frysee Jan 16, 2026
3ea7e30
Chore: Suppress some false positives
frysee Jan 16, 2026
2cbb836
Chore: More launch target fuckery
frysee Jan 17, 2026
4413102
Feat: NEON-optimized RGB conversions (should probably just swizzle in…
frysee Jan 17, 2026
5c03606
Chore: Remove some dead code
frysee Jan 17, 2026
6bc0cf2
Fix: Crash on core sync
frysee Jan 18, 2026
b6c4324
Chore: Remove unneccesary reset function
frysee Jan 19, 2026
35a752e
Fix: Gauge background
frysee Jan 19, 2026
3dbb0d4
Fix: flickering due to overzealous property reset
frysee Jan 19, 2026
826aba5
Chore: Disable some performance logging
frysee Jan 19, 2026
310eea1
Chore: Remove references to old tearing options (no longer in use)
frysee Jan 19, 2026
aaac2f9
Fix: Actual display refresh rate of tg5050
frysee Jan 19, 2026
d34c23c
Fix: Cleaned up auto scaling code a bit, print actual cpu frequencies…
frysee Jan 20, 2026
d3e525a
Fix: desktop build
frysee Jan 21, 2026
682335e
Revert "Chore: Optimize resampling code"
frysee Jan 21, 2026
293981d
Chore: Optimize resampling code
frysee Jan 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion .env_desktop
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ PLATFORM=desktop
LD_LIBRARY_PATH=/var/tmp/nextui/lib
DYLD_LIBRARY_PATH=/var/tmp/nextui/lib
SHARED_USERDATA_PATH=/var/tmp/nextui/sdcard/.userdata/shared
USERDATA_PATH=/var/tmp/nextui/sdcard/.userdata/desktop
USERDATA_PATH=/var/tmp/nextui/sdcard/.userdata/desktop
#SDL_AUDIODRIVER=alsa
#SDL_VIDEODRIVER=wayland
33 changes: 21 additions & 12 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
matrix:
toolchain:
- tg5040
- tg5050

steps:
- name: Checkout
Expand All @@ -62,6 +63,7 @@ jobs:
matrix:
toolchain:
- tg5040
- tg5050
core: ${{ fromJson(needs.core-matrix.outputs.cores) }}
steps:
- name: Checkout
Expand All @@ -85,14 +87,7 @@ jobs:
- build-core
runs-on: ubuntu-24.04-arm
env:
PLATFORM: ${{ matrix.toolchain }}
RELEASE_NAME: ${{ needs.prepare.outputs.release-name }}
strategy:
fail-fast: true
matrix:
toolchain:
- tg5040

steps:
- name: Checkout
uses: actions/[email protected]
Expand All @@ -105,15 +100,29 @@ jobs:
- name: Setup
run: make setup

- name: Download Cores
- name: Download Cores (tg5040)
uses: actions/[email protected]
with:
path: workspace/${{ env.PLATFORM }}/cores/output/
pattern: core-${{ matrix.toolchain }}-*
path: workspace/tg5040/cores/output/
pattern: core-tg5040-*
merge-multiple: true

- name: Build (tg5040)
run: make tg5040
env:
PLATFORM: tg5040

- name: Download Cores (tg5050)
uses: actions/[email protected]
with:
path: workspace/tg5050/cores/output/
pattern: core-tg5050-*
merge-multiple: true

- name: Build
run: make ${{ matrix.toolchain }}
- name: Build (tg5050)
run: make tg5050
env:
PLATFORM: tg5050

- name: Special
run: make special
Expand Down
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ libretro-common
**/other/rsce-go
bl_enable
bl_disable
workspace/tg5040/wifimanager/daemon/wifi_daemon
workspace/tg5040/audiomon/audiomon.elf
audiomon.elf

**/tmp

Expand Down
16 changes: 16 additions & 0 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,22 @@
"compilerArgs": [
"-DUSE_SDL2"
]
},
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/workspace/all/common"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode":"gcc-arm64",
"configurationProvider": "ms-vscode.makefile-tools",
"compilerArgs": [
"-DUSE_SDL2"
]
}
],
"version": 4
Expand Down
156 changes: 153 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
"envFile": "${workspaceFolder}/.env_desktop",
},
{
"name": "Minarch",
"name": "Minarch (gpsp)",
"request": "launch",
"type": "cppdbg",
"osx": {
Expand All @@ -94,10 +94,160 @@
"preLaunchTask": "make desktop",
"envFile": "${workspaceFolder}/.env_desktop",
"args": [
"${workspaceFolder}/workspace/desktop/cores/output/gambatte_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Color (GBC)/Tetris DX (SGB Enhanced) (GB Compatible).zip"
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
],
},
{
"name": "Minarch (mgba)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"preLaunchTask": "make desktop",
"envFile": "${workspaceFolder}/.env_desktop",
"args": [
"${workspaceFolder}/workspace/desktop/cores/output/mgba_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
],
},
{
"name": "Minarch (Profile)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"preLaunchTask": "make desktop profile",
"envFile": "${workspaceFolder}/.env_desktop",
"args": [
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
],
"postDebugTask": "show profile results"
},
{
"name": "Minarch (Profile 2-Core)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "/usr/bin/taskset",
"preLaunchTask": "make desktop profile",
"envFile": "${workspaceFolder}/.env_desktop",
"args": [
"-c", "0,1",
"${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
],
"postDebugTask": "show profile results"
},
{
"name": "Minarch (GPerfTools)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"preLaunchTask": "make desktop gperftools",
"envFile": "${workspaceFolder}/.env_desktop",
"environment": [
{
"name": "CPUPROFILE",
"value": "${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.prof"
},
{
"name": "LD_PRELOAD",
"value": "/usr/lib/aarch64-linux-gnu/libprofiler.so.0"
}
],
"args": [
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
],
"postDebugTask": "show gperftools results"
},
{
"name": "Minarch (GPerfTools 2-Core)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "/usr/bin/taskset",
"preLaunchTask": "make desktop gperftools",
"envFile": "${workspaceFolder}/.env_desktop",
"environment": [
{
"name": "CPUPROFILE",
"value": "${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.prof"
},
{
"name": "LD_PRELOAD",
"value": "/usr/lib/aarch64-linux-gnu/libprofiler.so.0"
}
],
"args": [
"-c", "0,1",
"${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
],
"postDebugTask": "show gperftools results"
},
{
"name": "Minarch (TSAN 2-Core)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "/usr/bin/taskset",
"preLaunchTask": "make desktop tsan",
"envFile": "${workspaceFolder}/.env_desktop",
"environment": [
{
"name": "TSAN_OPTIONS",
"value": "suppressions=${workspaceFolder}/tsan.supp"
}
],
"args": [
"-c", "0,1",
"${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
]
},
{
"name": "Minarch (ASAN 2-Core)",
"request": "launch",
"type": "cppdbg",
"osx": {
"MIMode": "lldb"
},
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop",
"program": "/usr/bin/taskset",
"preLaunchTask": "make desktop asan",
"envFile": "${workspaceFolder}/.env_desktop",
"args": [
"-c", "0,1",
"${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf",
"${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so",
"/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip"
]
},
{
"name": "Remote debug minarch",
"type": "cppdbg",
Expand Down
59 changes: 59 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,65 @@

"problemMatcher": "$gcc"
},
{
"label": "make desktop profile",
"type": "shell",
"command": "PROFILE=1 make setup common PLATFORM=desktop",
"group": {
"kind": "build"
},
"problemMatcher": "$gcc"
},
{
"label": "make desktop gperftools",
"type": "shell",
"command": "GPERFTOOLS=1 make setup common PLATFORM=desktop",
"group": {
"kind": "build"
},
"problemMatcher": "$gcc"
},
{
"label": "make desktop tsan",
"type": "shell",
"command": "TSAN=1 make setup common PLATFORM=desktop",
"group": {
"kind": "build"
},
"problemMatcher": "$gcc"
},
{
"label": "make desktop asan",
"type": "shell",
"command": "ASAN=1 make setup common PLATFORM=desktop",
"group": {
"kind": "build"
},
"problemMatcher": "$gcc"
},
{
"label": "show profile results",
"type": "shell",
"command": "gprof ${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf ${workspaceFolder}/workspace/all/minarch/build/desktop/gmon.out > ${workspaceFolder}/workspace/all/minarch/build/desktop/profile.txt",
"problemMatcher": []
},
{
"label": "show gperftools results",
"type": "shell",
"command": "cd ${workspaceFolder}/workspace/all/minarch/build/desktop && if [ -f minarch.prof ]; then export PATH=$PATH:~/go/bin && pprof --text minarch.elf minarch.prof > gperftools.txt && pprof --svg minarch.elf minarch.prof > gperftools.svg && echo 'GPerfTools results generated: gperftools.txt and gperftools.svg'; else echo 'ERROR: minarch.prof not found. Make sure CPUPROFILE environment variable was set during execution.'; echo 'Try running: CPUPROFILE=minarch.prof ./minarch.elf [args]'; fi",
"problemMatcher": []
},
{
"label": "run minarch 2-core profile",
"type": "shell",
"command": "taskset -c 0,1 ${workspaceFolder}/workspace/all/minarch/build/desktop/minarch.elf ${workspaceFolder}/workspace/desktop/cores/output/gpsp_libretro.so '/var/tmp/nextui/sdcard/Roms/Game Boy Advance (GBA)/Advance Wars 2 - Black Hole Rising (USA).zip'",
"options": {
"cwd": "${workspaceFolder}/workspace/all/minarch/build/desktop"
},
"group": "test",
"dependsOn": "make desktop profile",
"problemMatcher": []
},
{
"label": "launch minarch",
"type": "shell",
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ Our community has currated a [list of favorite Paks](https://nextui.loveretro.ga

## Credits

[@josegonzalez](https://github.com/josegonzalez) for [minui-keyboard](https://github.com/josegonzalez/minui-keyboard)
- [josegonzalez](https://github.com/josegonzalez) for [minui-keyboard](https://github.com/josegonzalez/minui-keyboard)
- [knulli-cfw](https://github.com/knulli-cfw)/[Mikhailzrick](https://github.com/Mikhailzrick) for [fan-control-daemon](https://github.com/knulli-cfw/knulli-linux/commit/5c1b4724330b59cbe8af79d0a7f1dac86f1c221a)

---

Expand Down
Loading
Loading