{"id":137823,"date":"2026-10-11T10:27:10","date_gmt":"2026-10-11T08:27:10","guid":{"rendered":"https:\/\/www.emu-france.com\/?p=137823"},"modified":"2026-10-11T10:27:10","modified_gmt":"2026-10-11T08:27:10","slug":"consoles-de-salon-prosper-v0-2-4","status":"publish","type":"post","link":"https:\/\/www.emu-france.com\/?p=137823","title":{"rendered":"[Consoles de salon] Prosper v0.2.4"},"content":{"rendered":"<p>Prosper (ps5ys) est une couche de compatibilit\u00e9 open-source permettant de faire tourner des logiciels et des jeux PS5 sous Linux et Windows.<\/p>\n<p>&nbsp;<\/p>\n<p>Ce n&rsquo;est pas un \u00e9mulateur: la PS5 et les PC partageant la m\u00eame architecture processeur (x86-64), le code des jeux tourne nativement sur le processeur du PC. Prosper agit comme Wine ou Proton en traduisant les appels syst\u00e8me, les biblioth\u00e8ques internes et l&rsquo;API graphique (AGC vers Vulkan) de l&rsquo;OS de la PS5 pour les rendre lisibles par votre ordinateur.<br \/>\n&nbsp;<\/p>\n<p><a href=\"https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-136514\" src=\"https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper.png\" alt=\"\" width=\"413\" height=\"464\" srcset=\"https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper.png 1920w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-267x300.png 267w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-910x1024.png 910w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-768x864.png 768w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-1365x1536.png 1365w, https:\/\/www.emu-france.com\/wp-content\/uploads\/2026\/09\/prosper-1820x2048.png 1820w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/a><br \/>\n&nbsp;<\/p>\n<p>Les changements sont les suivants:<br \/>\n&nbsp;<\/p>\n<div style=\"\n    max-height: 390px;\n    overflow-y: auto;\n    border: 1px solid #ccc;\n    padding: 8px;\n    font-family: Verdana, sans-serif;\n    font-style: italic;\">&#8211; ci: add the platform-stub ratchet rule for HLE(*_stub) platform-arm handlers by @ymatrix1 in #4366<br \/>\n&#8211; gpu: preserve independent logical64 WAITCNT completion by @mattias800 in #4372<br \/>\n&#8211; docs: list all eleven ratchet rules in the charter and state the platform-arm rule by @ymatrix1 in #4367<br \/>\n&#8211; docs: clarify APR proposal and preserve historical Dragon Quest observations by @ymatrix1 in #4365<br \/>\n&#8211; fix(gpu): retain producing raster launch controls through capture replay by @mattias800 in #4376<br \/>\n&#8211; ci: enforce pytest policy on new Python tests by @ymatrix1 in #4314<br \/>\n&#8211; Bound native shader walkers by authentic readable source windows by @mattias800 in #4377<br \/>\n&#8211; docs: record current GTA Stage 2 ABBA checkpoint by @mattias800 in #4379<br \/>\n&#8211; docs: record Sonic deferred-wait world falsification by @mattias800 in #4380<br \/>\n&#8211; docs: record GTA warm target-count checkpoint by @mattias800 in #4381<br \/>\n&#8211; feat(gpu): connect original scalar-buffer reads to shared wave64 bank by @mattias800 in #4374<br \/>\n&#8211; test: use SDK-relative pointers in scalar-bank fixtures by @mattias800 in #4382<br \/>\n&#8211; test: adversarial pins for rdna2 closed-tail block admission by @ymatrix1 in #4386<br \/>\n&#8211; test: LLVM oracle pins for SOP2 destination widths by @ymatrix1 in #4390<br \/>\n&#8211; test: follow v71 capture tail and Wave32 eager routing so main&rsquo;s Linux CI is green by @mattias800 in #4396<br \/>\n&#8211; test: pin mandatory-literal K capture for VOP2 mul-adds and SOPK setreg by @ymatrix1 in #4401<br \/>\n&#8211; feat(gpu): implement VOP3P integer dot product lowering (v_dot2, v_dot4, v_dot8) by @ymatrix1 in #4400<br \/>\n&#8211; test: pin SOPP direct-branch set against the ISA table by @ymatrix1 in #4405<br \/>\n&#8211; test: oracle pins for scalar opcode predicates by @ymatrix1 in #4408<br \/>\n&#8211; feat(gpu): implement v_min3_i32, v_max3_i32, and v_med3_i32 lowering by @ymatrix1 in #4404<br \/>\n&#8211; feat(gpu): implement subword SAD instructions (v_sad_u8, v_sad_hi_u8, v_sad_u16, v_msad_u8) by @ymatrix1 in #4388<br \/>\n&#8211; feat(gpu): implement v_perm_b32 byte permutation lowering by @ymatrix1 in #4389<br \/>\n&#8211; feat(gpu): implement image_gather4 texture gather lowering by @ymatrix1 in #4392<br \/>\n&#8211; test: ISA-table pins for memory-writer classification by @ymatrix1 in #4393<br \/>\n&#8211; feat(gpu): implement v_div_fixup_f32 division fixup lowering by @ymatrix1 in #4391<br \/>\n&#8211; feat(gpu): implement s_movrels_b32 relative SGPR move lowering by @ymatrix1 in #4394<br \/>\n&#8211; perf: emit opt-in per-flip stage timing samples by @ymatrix1 in #4406<br \/>\n&#8211; feat(gpu): implement v_mad_i64_i32 lowering by @ymatrix1 in #4387<br \/>\n&#8211; gpu: bound s_movrels_b32&rsquo;s constant M0 before adding it to the base by @mattias800 in #4413<br \/>\n&#8211; test: migrate normal_magnitude_predicate to GTest by @ymatrix1 in #4414<br \/>\n&#8211; test: extract minmax3 kernels from rdna2_to_spirv main (pilot split) by @ymatrix1 in #4415<br \/>\n&#8211; gpu: recover GTA V&rsquo;s #4270 bank-scene regression (2.9 -> 6.5 fps) by @mattias800 in #4421<br \/>\n&#8211; feat(hle): implement libSceAudio3d\/AudioPropagation\/Acm spatial audio stubs by @ymatrix1 in #4418<br \/>\n&#8211; recompiler: stop phantom raw-wide refusals of register-offset descriptor loads (#4422) by @mattias800 in #4425<br \/>\n&#8211; feat(hle): implement libSceNet sockets and libSceNp offline stubs by @ymatrix1 in #4417<br \/>\n&#8211; gpu: seed BGRA render targets into compute storage on the device (+ lift live compute&rsquo;s storage codec) by @mattias800 in #4428<br \/>\n&#8211; gpu: read back the span before an ordered DMA only when the copy touches it (Alex Kidd holds 60 fps) by @mattias800 in #4459<br \/>\n&#8211; docs: Alex Kidd plateau finding and async pair outcome by @mattias800 in #4461<br \/>\n&#8211; test: migrate 8 host\/loader\/HLE suites to GoogleTest by @ymatrix1 in #4430<br \/>\n&#8211; test: migrate the fragment float-flag identity suites to GoogleTest by @ymatrix1 in #4441<br \/>\n&#8211; test: migrate the select\/pselect pure-sleep suite to GoogleTest by @ymatrix1 in #4446<br \/>\n&#8211; test: migrate the guest-facing HLE handler contracts to GoogleTest by @ymatrix1 in #4434<br \/>\n&#8211; test: migrate the diagnostics enabled-path and JSON suites to GoogleTest by @ymatrix1 in #4449<br \/>\n&#8211; test: extract scalar-ALU kernels from rdna2_to_spirv main by @ymatrix1 in #4431<br \/>\n&#8211; test: migrate the pthread-key destructor suite to GoogleTest by @ymatrix1 in #4443<br \/>\n&#8211; test: extract VOP3 batch kernels from rdna2_to_spirv main by @ymatrix1 in #4432<br \/>\n&#8211; test: migrate the clock and timed-wait HLE contracts to GoogleTest by @ymatrix1 in #4437<br \/>\n&#8211; test(gpu): pin f64 transcendental refusal with rcp_f32 control by @ymatrix1 in #4453<br \/>\n&#8211; test(gpu): pin div-fmas refusal with fixup control by @ymatrix1 in #4454<br \/>\n&#8211; test(gpu): pin scalar-misc refusal with movk\/mov controls by @ymatrix1 in #4451<br \/>\n&#8211; test(gpu): pin float-dot refusal with integer-dot control by @ymatrix1 in #4456<br \/>\n&#8211; test(gpu): pin x2 buffer-atomic refusal with 32-bit control by @ymatrix1 in #4460<br \/>\n&#8211; test(gpu): pin SOPP halt\/kill refusal with s_nop control by @ymatrix1 in #4445<br \/>\n&#8211; test(gpu): pin 64-bit DS refusal with ds_add_u32 control by @ymatrix1 in #4448<br \/>\n&#8211; test(gpu): pin WRXCHG2 DS refusal with write2 control by @ymatrix1 in #4450<br \/>\n&#8211; test(gpu): pin multi-level IMAGE_LOAD_MIP refusal with plain-load control by @ymatrix1 in #4438<br \/>\n&#8211; test(gpu): pin NSA IMAGE_STORE_MIP refusal with consecutive-store control by @ymatrix1 in #4444<br \/>\n&#8211; feat(hle): register remaining dialog entry points (Login\/MsgProgress\/WebBrowser) by @ymatrix1 in #4458<br \/>\n&#8211; feat(hle): register Trophy2 icon getters alongside the info queries by @ymatrix1 in #4440<br \/>\n&#8211; feat(hle): register Http option setters, epoll lifecycle and Https setup by @ymatrix1 in #4442<br \/>\n&#8211; gpu: bound MSAA\/unusual-swizzle colour targets so ordered DMAs skip the span readback (Summer Sports) by @mattias800 in #4464<br \/>\n&#8211; feat(hle): register sceSaveDataLoadIcon completing the icon round-trip by @ymatrix1 in #4436<br \/>\n&#8211; feat(hle): register UDS DestroyHandle\/SetInt32 and sceSaveDataDelete by @ymatrix1 in #4433<br \/>\n&#8211; feat(hle): register remaining UDS setters, lifecycle and stats (25 exports) by @ymatrix1 in #4455<br \/>\n&#8211; feat(hle): register libSceNpWebApi2 request and push-event surface by @ymatrix1 in #4435<br \/>\n&#8211; feat(hle): implement libSceRtc calendar arithmetic (22 exports) by @ymatrix1 in #4447<br \/>\n&#8211; hle: fix np.cpp splice that broke the build (GetStorageStat body) by @mattias800 in #4468<br \/>\n&#8211; feat(hle): register libSceNpManager remainder (14 exports) by @ymatrix1 in #4476<br \/>\n&#8211; feat(hle): register notice-skip setters, PowerTick and privacy\/Init2 by @ymatrix1 in #4478<br \/>\n&#8211; feat(hle): report voice unavailable across the port surface by @ymatrix1 in #4473<br \/>\n&#8211; feat(hle): register MouseClose and pad mic-in-use vibration quirk by @ymatrix1 in #4471<br \/>\n&#8211; feat(hle): register Net epoll\/introspection\/resolver and Rudp setup by @ymatrix1 in #4482<br \/>\n&#8211; test(gpu): pin float image-atomic refusal with add control by @ymatrix1 in #4470<br \/>\n&#8211; test(gpu): pin arithmetic x2 buffer-atomic refusal with 32-bit control by @ymatrix1 in #4474<br \/>\n&#8211; test(gpu): pin swappc\/code-end refusal with mov\/nop controls by @ymatrix1 in #4475<br \/>\n&#8211; test(gpu): pin bfe64\/mode-set refusal with mov\/nop controls by @ymatrix1 in #4477<br \/>\n&#8211; test(gpu): pin endpgm-variant refusal with endpgm control by @ymatrix1 in #4479<br \/>\n&#8211; test(gpu): pin setreg-imm32 refusal with flat-scratch control by @ymatrix1 in #4480<br \/>\n&#8211; test(gpu): pin deferred 32-bit atomic refusal with add control by @ymatrix1 in #4481<br \/>\n&#8211; test(gpu): pin image_atomic_fcmpswap and image_atomic_dec refusals (supersedes #4472) by @mattias800 in #4488<br \/>\n&#8211; memory: a fixed direct map replaces tracked direct memory on both platforms (replaces #4189) by @ymatrix1 in #4486<br \/>\n&#8211; feat(hle): implement NGS2 allocator-create\/destroy\/grain\/lock lifecycle (6 exports) by @ymatrix1 in #4487<br \/>\n&#8211; feat(hle): implement Fiber\/Ult remainder (7 exports) by @ymatrix1 in #4491<br \/>\n&#8211; feat(hle): implement AvPlayer trick-speed\/bandwidth\/printf remainder (4 exports) by @ymatrix1 in #4490<br \/>\n&#8211; feat(hle): implement Font render-state remainder (13 exports) by @ymatrix1 in #4494<br \/>\n&#8211; feat(hle): implement GameUpdate request lifecycle (5 exports) by @ymatrix1 in #4497<br \/>\n&#8211; gpu: restore the Unity UI vertex shader (Greak, Alex Kidd, Summer Sports menus and HUDs) + fix the macOS build by @mattias800 in #4495<br \/>\n&#8211; gpu: Summer Sports&rsquo; track is the right colour again (BC6H lightmaps clamp until the pipeline is linear) by @mattias800 in #4501<br \/>\n&#8211; feat(hle): register AJM direct-job shapes (14 exports) by @ymatrix1 in #4484<br \/>\n&#8211; feat(hle): implement Ime text-entry session (11 exports) by @ymatrix1 in #4503<br \/>\n&#8211; feat(hle): implement libSceCesCs conversion and libScePngDec decode by @ymatrix1 in #4452<br \/>\n&#8211; hle: sceRtcGetTick is the same on every host (fixes the Rtc tests on macOS and Windows) by @mattias800 in #4505<br \/>\n&#8211; host(win): keep the host&rsquo;s allocations out of the guest&rsquo;s address range \u2014 the UE4 launch hang (#4426) by @mattias800 in #4507<br \/>\n&#8211; hle: re-derive NGS2\/AvPlayer\/Font contracts from the .native modules PS5 titles link by @mattias800 in #4524<br \/>\n&#8211; feat(hle): implement NGS2 waveform parse\/calc\/reset-option (3 exports) by @ymatrix1 in #4510<br \/>\n&#8211; hle(apr): a counter completion is never delivered below one already delivered \u2014 Kena&rsquo;s boot crash (#4504) by @mattias800 in #4517<br \/>\n&#8211; docs(kena): Windows -> Linux\/AMD handoff of the title-screen 3D bring-up by @mattias800 in #4500<br \/>\n&#8211; gpu: Space Adventure Cobra&rsquo;s in-game 3D renders again (two recompiler defects in its per-light loop) by @mattias800 in #4522<br \/>\n&#8211; recompiler: accept UE4&rsquo;s save-then-v_cmpx EXEC guard around a counted loop (Kena, #4427) by @mattias800 in #4534<br \/>\n&#8211; gpu: close two raw-wide classifier gaps found in review (wrong relative-move opcodes, implicit VCC readers) by @mattias800 in #4535<br \/>\n&#8211; gpu: a loop exit drops the scratch a mask overwrote, for every loop by @mattias800 in #4542<br \/>\n&#8211; tools\/ci: decode git and ruff I\/O as UTF-8 in check_python_quality by @ymatrix1 in #4539<br \/>\n&#8211; feat(hle): implement Ult pool\/runtime destroys (2 exports) by @ymatrix1 in #4528<br \/>\n&#8211; recompiler: admit several bottom-tested SCC do-while loops in one program (#4518) by @mattias800 in #4546<br \/>\n&#8211; tools: static HLE progress census by @ymatrix1 in #4532<br \/>\n&#8211; diagnostics: say whether Wave64 was the GPU&rsquo;s doing or prosper&rsquo;s by @mattias800 in #4531<br \/>\n&#8211; docs: architecture spec and decision records (ADRs 0001-0021), gated by check_arch_docs by @ymatrix1 in #4536<br \/>\n&#8211; gpu: s_movrels_b32 reads a range of registers, and the liveness proofs now know it (#4538) by @mattias800 in #4547<br \/>\n&#8211; tools\/docs: unbreak the Docs job (check_arch_docs&rsquo; \u00ab\u00a0ctest\u00a0\u00bb kind is not a ctest invocation) by @mattias800 in #4561<br \/>\n&#8211; docs: add Rayman 30th Anniversary Edition and MOUSE: P.I. For Hire with their first captures by @mattias800 in #4558<br \/>\n&#8211; gpu: two leftovers from the #4547 review (raw-x2 escape list; dispatcher SCC after a relative read) (#4559) by @mattias800 in #4562<br \/>\n&#8211; gpu: keep the program a draw lost to the owned-wave gate, and the gate&rsquo;s reason (#4555) by @mattias800 in #4565<br \/>\n&#8211; gpu: AGC&rsquo;s eliminate-fast-clear rectangle writes no colour (#1588) by @mattias800 in #4568<br \/>\n&#8211; gpu: four raw-wide classifier gaps, and one emitter fix they depend on, that put GTA V&rsquo;s and MOUSE&rsquo;s fragment programs on the owned-wave path (#4555) by @mattias800 in #4569<br \/>\n&#8211; hle\/agc: sceAgcCbBranch builds its packet; the branch runs where the guest put it (#4540) by @mattias800 in #4576<br \/>\n&#8211; tools\/env: register every PROSPER_* switch and require new ones be classified by @ymatrix1 in #4543<br \/>\n&#8211; live compute: publish an RGB10A2 compute result into the renderer target by @ymatrix1 in #4571<br \/>\n&#8211; revision: see through a ccache\/sccache compiler wrapper in the dependency identity (#4356, #4187) by @mattias800 in #4581<br \/>\n&#8211; tools\/env: drop the stale PROSPER_AGC_SPLIT_FINAL_STATE registry row (main is red) by @ymatrix1 in #4582<br \/>\n&#8211; gpu: a clashed constant-buffer key is published per consumer, not per key by @mattias800 in #4584<br \/>\n&#8211; gpu: key a fold descriptor use the way the recompiler tags it (#4585) by @mattias800 in #4588<br \/>\n&#8211; docs: record that holding the EOP pulse does not stop DQ7&rsquo;s label recycle (#2982) by @ymatrix1 in #4583<br \/>\n&#8211; gpu: an x2 load can be the latched source of a raw-wide register offset (#4578) by @mattias800 in #4587<br \/>\n&#8211; docs: blog Beast and DQ7 after the eliminate-fast-clear fix; record Kena&rsquo;s refusal progress by @mattias800 in #4589<br \/>\n&#8211; feat(hle): implement Font StyleFrame cluster (15 exports) by @ymatrix1 in #4572<br \/>\n&#8211; docs: every document declares its kind; every relative link resolves by @ymatrix1 in #4567<br \/>\n&#8211; gpu: a register-offset raw-wide load&rsquo;s pointer need only survive until the load; a branch before its source is harmless unless it lands inside by @mattias800 in #4593<br \/>\n&#8211; spv_validate: rdna2_proven_raw_register_wide_entry_loads is not an emitter (main red after #4593) by @mattias800 in #4595<br \/>\n&#8211; gpu: a base-zero T# with constant-zero selectors is the null image (#4592) by @mattias800 in #4596<br \/>\n&#8211; gpu: merged-NGG subgroup planner and launch values (#3135 P1) by @mattias800 in #4597<br \/>\n&#8211; gpu: fall back to the general CFG route when a counted loop&rsquo;s prelude declines (Kena 0x5006fb0000) by @mattias800 in #4594<br \/>\n&#8211; revision: write the compiler-wrapper test in pytest conventions (Python quality red after #4581) by @mattias800 in #4601<br \/>\n&#8211; gpu: NGG evidence for the merged-NGG lowering (#3135 P0) by @mattias800 in #4599<br \/>\n&#8211; gpu: read PROSPER_DBG live for the null-image line (main red after #4596) by @mattias800 in #4604<br \/>\n&#8211; gpu: close three CFG-dispatcher Wave64 gaps so Kena&rsquo;s compute 0x5008ec0000 recompiles by @mattias800 in #4603<br \/>\n&#8211; gpu: merged-NGG subgroup shell, compile and offline execution (#3135 P2) by @mattias800 in #4605<br \/>\n&#8211; gpu: publish an over-cap buffer window clamped to its mapped run by @ymatrix1 in #4566<br \/>\n&#8211; gpu: a plain copy of loaded words into EXEC, and a wide load into the special registers, are numeric uses in the raw-wide walk (#4574) by @mattias800 in #4579<br \/>\n&#8211; feat(hle): implement NGS2 system lock\/unlock\/sample-rate (3 exports) by @ymatrix1 in #4521<br \/>\n&#8211; feat(hle): implement Font kerning\/library\/rewind\/back-link (4 exports) by @ymatrix1 in #4520<br \/>\n&#8211; feat(hle): implement Font pixel-resolution\/cache\/library back-link (3 exports) by @ymatrix1 in #4548<br \/>\n&#8211; feat(hle): implement Font DPI\/glyph-form\/scale\/kerning queries (5 exports) by @ymatrix1 in #4570<br \/>\n&#8211; feat(hle): implement Font renderer-outline\/DPI\/rewind\/mask (6 exports) by @ymatrix1 in #4573<br \/>\n&#8211; recompiler: prove two-T# x16 bundles through image stores; disjoint stores keep the split-T# proof by @ymatrix1 in #4564<br \/>\n&#8211; feat(hle): implement Ult queues and semaphores (14 exports) by @ymatrix1 in #4544<br \/>\n&#8211; gpu: merged-NGG raster commit: pass-through vertex stage and layer routes (#3135 P3) by @mattias800 in #4611<br \/>\n&#8211; gpu: type CFG-dispatcher spill reloads, and keep a mask reloaded into its own register (#4600) by @mattias800 in #4607<br \/>\n&#8211; gpu: a 64-lane fragment launch is not sent to the owned-wave path for a load that is numeric only at 32 lanes (#4555) by @mattias800 in #4609<br \/>\n&#8211; docs: regenerate PROGRESS_TRACKER.md (MOUSE&rsquo;s blockers after #4609) by @mattias800 in #4614<br \/>\n&#8211; gpu: lower ds_read_b32 &#8230; gds in compute, the read MOUSE&rsquo;s per-frame counter copy was refused at (#4553) by @mattias800 in #4615<br \/>\n&#8211; docs: MOUSE: P.I. For Hire after #4609 and #4615: route, captures, and what is ruled out by @mattias800 in #4616<br \/>\n&#8211; vk: run merged-NGG draws in the backend: fill, shell dispatches, pass-through runs, no CPU wait (#3135 P4) by @mattias800 in #4617<br \/>\n&#8211; gpu: let replay admit a conditional branch out of the program (MOUSE frames could not be replayed) by @mattias800 in #4622<br \/>\n&#8211; gpu: MOUSE&rsquo;s world renders: a DCC clear reaches the target a pass renders to, and a Z_16 depth plane keeps its size by @mattias800 in #4621<br \/>\n&#8211; docs: MOUSE&rsquo;s second depth target is refused before gameplay only (correcting #4621&rsquo;s docs and #4620) by @mattias800 in #4626<br \/>\n&#8211; gpu: replay asks whether a write lands in a retained depth plane by address (replayed frames lost every depth target) by @mattias800 in #4628<br \/>\n&#8211; gpu: reuse a draw&rsquo;s render state while its registers are unchanged by @mattias800 in #4630<br \/>\n&#8211; gpu: BOOL64 predicated jumps run on a non-zero condition (DQ7 title clouds\/sea) by @mattias800 in #4610<br \/>\n&#8211; compute: honour a fast-cleared target&rsquo;s control plane and a padded linear image&rsquo;s row pitch by @ymatrix1 in #4586<br \/>\n&#8211; test: the savedata tmpfs check names the old fixed roots, not any \/tmp prefix by @mattias800 in #4640<br \/>\n&#8211; docs: Tomb Raider&rsquo;s rung-3 manor is Tomb Raider II&rsquo;s; Tomb Raider I&rsquo;s does not render by @mattias800 in #4644<br \/>\n&#8211; gpu: borrow the readable start of a draw buffer declared past mapped memory by @mattias800 in #4633<br \/>\n&#8211; gpu: run merged ES+GS NGG draws live: admission, linked fold, cached producer (#3135 P5) by @mattias800 in #4634<br \/>\n&#8211; gpu: publish a renderer-claimed volume before compute reads it (#4625) by @mattias800 in #4651<br \/>\n&#8211; gpu: count draw-disposition seen at the pass entry so silent refusals raise unaccounted-draws by @mattias800 in #4655<br \/>\n&#8211; gpu: refuse a cached render target for a sampled view needing more bytes per texel (AC Black Flag red frame, #4197) by @ymatrix1 in #4648<br \/>\n&#8211; Sink vote-lowering diagnostic types to src\/diagnostics by @ymatrix1 in #4646<br \/>\n&#8211; windows: read the SSE4a-log and stub-dump switches through one helper each (getenv 14 to 10) by @ymatrix1 in #4639<br \/>\n&#8211; Move shared diagnostics helpers down to src\/diagnostics by @ymatrix1 in #4641<br \/>\n&#8211; ci: keep reviewer notes through arch-ratchet &#8211;update by @ymatrix1 in #4636<br \/>\n&#8211; Move COMPUTELOG diagnostics out of gpu_executor.cpp by @ymatrix1 in #4642<br \/>\n&#8211; compute: move execute_item&rsquo;s post-wait tail into finish_dispatch_tail (preparatory for ADR 0009, proposed) by @ymatrix1 in #4650<br \/>\n&#8211; fix(prosper-app): list and boot dumps at drive roots by @ymatrix1 in #4658<br \/>\n&#8211; ADR 0009 Stage 1: design note and a tested retirement-order contract by @ymatrix1 in #4645<br \/>\n&#8211; docs: Black Flag&rsquo;s measured frame cost and the bounded-buffer null result by @ymatrix1 in #4632<br \/>\n&#8211; hle: NetCtl\/Np state callbacks on every host; sceVoiceQoSInit refuses honestly by @ymatrix1 in #4577<br \/>\n&#8211; feat(prosper-app): Prosper window title and baked-in mark icon by @ymatrix1 in #4659<br \/>\n&#8211; ratchet: fix hle_kernel.cpp file-size row (5561 -> 5555) by @ymatrix1 in #4662<br \/>\n&#8211; ci: fix main&rsquo;s red Docs and Python quality jobs (note frontmatter, stale switch row) by @ymatrix1 in #4661<br \/>\n&#8211; test: NGG shell-pipeline cache eviction no longer depends on native Wave64 by @mattias800 in #4663<br \/>\n&#8211; fix: retry transient Windows replace failures saving the pipeline cache by @ymatrix1 in #4667<br \/>\n&#8211; test: Windows cold-target repeat honours PROSPER_NO_SKIP_SEED by @ymatrix1 in #4666<br \/>\n&#8211; feat(prosper-app): game list with search, menus and controls view by @ymatrix1 in #4665<br \/>\n&#8211; ADR 0009 step 2: observe what pipelining would allow (PROSPER_PIPELINE_OBSERVE) by @ymatrix1 in #4664<br \/>\n&#8211; feat(prosper-app): persisted host settings for library-started boots by @ymatrix1 in #4670<br \/>\n&#8211; docs(prosper-app): add library view screenshot by @ymatrix1 in #4673<br \/>\n&#8211; compute: refresh a cached buffer by differing 64 KiB blocks (with a control switch) by @ymatrix1 in #4660<br \/>\n&#8211; compute: mirror R8Unorm storage results on the GPU (no CPU round trip) by @ymatrix1 in #4656<br \/>\n&#8211; feat(prosper-app): use Explorer folder picker on Windows by @ymatrix1 in #4672<br \/>\n&#8211; ci: exempt bench_*.cpp from the gtest policy; keep the NGG cache test&rsquo;s push range valid by @mattias800 in #4675<br \/>\n&#8211; feat(prosper-app): add Game Log panel with bounded ring capture by @ymatrix1 in #4671<br \/>\n&#8211; compute: share one resident arena between overlapping read-only buffer windows (interim, not ADR 0010) by @ymatrix1 in #4635<br \/>\n&#8211; ci: spv_validate&rsquo;s coverage scan exempts parent_scan.hpp&rsquo;s two local vectors by @mattias800 in #4676<br \/>\n&#8211; test: compute buffer runtime tests expect #4660&rsquo;s block-sync refresh, and detect a stale far block by @mattias800 in #4678<br \/>\n&#8211; feat(prosper-app): picker answers join the library; folders accumulate by @ymatrix1 in #4674<br \/>\n&#8211; perf: read hot-path diagnostic switches once per submit, not once per call by @ymatrix1 in #4677<br \/>\n&#8211; docs(kena): the title-menu world renders on main; #3835&rsquo;s NaN half image was AGC&rsquo;s helper rectangle by @mattias800 in #4679<br \/>\n&#8211; docs, tools: a path convention for screenshots, enforced for new captures by @ymatrix1 in #4629<br \/>\n&#8211; charter: point the architecture rules at docs\/spec and docs\/adr by @ymatrix1 in #4541<br \/>\n&#8211; docs, tools: architecture follow-ups from the PortPS5 docs comparison by @ymatrix1 in #4557<br \/>\n&#8211; diag: validation mapping census (which memory backs full compares) + GetWriteWatch ruled out by @ymatrix1 in #4681<br \/>\n&#8211; gpu: render layered volume passes with more than one colour target (#4643) by @mattias800 in #4685<br \/>\n&#8211; diag: always-on validation census with a size histogram; drop PROSPER_VALIDATION_MAPPING_CENSUS by @ymatrix1 in #4684<br \/>\n&#8211; cmake: prosper_add_gtest keeps list-valued test properties intact (#4682) by @mattias800 in #4690<br \/>\n&#8211; gpu: a resource-order refusal clears the colour-target stats too (#4687) by @mattias800 in #4692<br \/>\n&#8211; Kena: zero refused fragment programs (AGC helper no-effect before shader work; counted-loop VCC_HI counter) by @mattias800 in #4688<br \/>\n&#8211; perf: convert RGB10A2 compute results with a lookup table into a pooled buffer by @ymatrix1 in #4691<br \/>\n&#8211; present: read a display buffer&rsquo;s guest bytes in its VideoOut pixel format (#4686) by @mattias800 in #4689<br \/>\n&#8211; present: guest-order DMA reads of ALT targets; name format declines; count the scanout swap (#4686 follow-up) by @mattias800 in #4695<br \/>\n&#8211; test: sequence schedstat_probe fixture on a virtual clock, drop RUN_SERIAL (#4142) by @mattias800 in #4697<br \/>\n&#8211; docs: restore a dropped table cell separator in RECOMPILER_REMAINING.md by @mattias800 in #4698<br \/>\n&#8211; test: keep the schedstat probe docstring out of the ctest gate by @mattias800 in #4702<br \/>\n&#8211; gpu: [t8-dropped] keeps the words of an image descriptor the fold declines (Kena #4700) by @mattias800 in #4701<br \/>\n&#8211; diag: census of compute publications that repeat the previous bytes (F8 window, no switch) by @ymatrix1 in #4705<br \/>\n&#8211; docs: propose ADR 0029, first-use graphics pipelines by library link (refines ADR 0014) by @ymatrix1 in #4722<br \/>\n&#8211; docs: propose ADR 0032, page-granular write tracking on Windows hosts by @ymatrix1 in #4724<br \/>\n&#8211; Kena past New Game: ldexp CLAMP and entry-M0 KILL; translator reject in the refused index by @mattias800 in #4711<br \/>\n&#8211; docs: propose ADR 0028, one per-shader policy for Wave64 programs on 32-lane hosts by @ymatrix1 in #4717<br \/>\n&#8211; docs: propose ADR 0030, a descriptor heap behind one binding interface by @ymatrix1 in #4721<br \/>\n&#8211; docs: propose ADR 0031, GPU-resident detile, retile and conversion by @ymatrix1 in #4723<br \/>\n&#8211; docs: propose ADR 0027, one phi-aware descriptor provenance analysis with a runtime fallback by @ymatrix1 in #4716<br \/>\n&#8211; docs: ADR 0028\/0030\/0031 review nits that missed their merges by @ymatrix1 in #4729<br \/>\n&#8211; gpu: implement the guest depth-bounds test (DB_DEPTH_CONTROL.DEPTH_BOUNDS_ENABLE) by @mattias800 in #4704<br \/>\n&#8211; texture: fast-cleared one- and two-component DCC surfaces sample the clear colour by @ymatrix1 in #4699<br \/>\n&#8211; docs: propose ADR 0033, GPU reads guest buffers in place (zero-copy) by @ymatrix1 in #4726<br \/>\n&#8211; docs: propose ADR 0034, guest async compute on a dedicated host queue by @ymatrix1 in #4727<br \/>\n&#8211; docs: propose ADR 0035, indirect arguments resolved on the GPU by @ymatrix1 in #4728<br \/>\n&#8211; recompiler: Wave64 fragment scalar-pair projection behind a definite-assignment proof (#4706 fix 2) by @mattias800 in #4725<br \/>\n&#8211; capture: record a draw buffer the live source gate refuses as a placeholder (#3807) by @mattias800 in #4707<br \/>\n&#8211; gpu: honour SPI_SHADER_COL_FORMAT and integer colour targets (Kena&rsquo;s sun, #4703) by @mattias800 in #4715<br \/>\n&#8211; recompiler: refuse the projection in unreached dispatcher cases; compare results are ballots (Kena f1d1baa8 live) by @mattias800 in #4730<br \/>\n&#8211; perf: mirror packed R10G10B10A2 compute results into the renderer on the GPU by @ymatrix1 in #4709<br \/>\n&#8211; nid_census: name NIDs from a flat community database, not only the firmware dump by @ymatrix1 in #4731<br \/>\n&#8211; gpu: indexed and instanced merged-NGG draws (#3135 P6) by @mattias800 in #4733<br \/>\n&#8211; Kena title scene: fog gets its shadows (UNORM16 depth to compute) and foliage draws (POS_W is clip w) by @mattias800 in #4734<br \/>\n&#8211; gpu: admit Kena&rsquo;s downstream merged-NGG producers: immediate-offset selector source, s0:s1 user-data address, nested EXEC saves (#3135) by @mattias800 in #4735<br \/>\n&#8211; recompiler: carry v_writelane spill slots through structured loops and if merges (Kena&rsquo;s level-load device loss) by @mattias800 in #4740<br \/>\n&#8211; agc: implement sceAgcDriverSubmitMultiAcbs, folded into the queue&rsquo;s compute context by @ymatrix1 in #4742<br \/>\n&#8211; console_oracle: check the HLE against a real PS5, and fix what it finds by @ymatrix1 in #4744<br \/>\n&#8211; Kena title scene: depth of field works (fold restores across compacted targets; narrow FP16 sampled natively) by @mattias800 in #4736<br \/>\n&#8211; agc: SubmitAcb keys its queue on 32 bits; SubmitMultiDcbs answers an empty batch by @ymatrix1 in #4748<br \/>\n&#8211; nid names: choose the verified flat-db candidate; label a missing source honestly by @ymatrix1 in #4756<br \/>\n&#8211; docs: accept ADR 0028 (Wave64 on 32-lane hosts) by @mattias800 in #4761<br \/>\n&#8211; console_oracle: measure the kernel and user service families, and fix what they find by @ymatrix1 in #4747<br \/>\n&#8211; diagnostics: route= field and per-route Wave64 counters (ADR 0028 step 2) by @ymatrix1 in #4754<br \/>\n&#8211; recompiler: ADR 0028 step 1, the s_cbranch_execz any-vote certificate by @ymatrix1 in #4755<br \/>\n&#8211; docs: propose ADR 0036, link allowlisted local-compute system libraries from the user&rsquo;s firmware dump by @ymatrix1 in #4764<br \/>\n&#8211; recompiler: classify Wave64 compute cross-lane ops and name the route (ADR 0028 step 3, analysis) by @ymatrix1 in #4760<br \/>\n&#8211; console_oracle: measure the AGC packet-size queries, and answer the ones prosper left at 0 by @ymatrix1 in #4759<br \/>\n&#8211; recompiler: PROSPER_WAVE64_EXCHANGE retries a narrow-host-refused Wave64 compute module through the exact dispatcher (ADR 0028 step 3) by @ymatrix1 in #4763<br \/>\n&#8211; console_oracle: a second destroy is EINVAL, and sceUserServiceInitialize2 validates its priority by @ymatrix1 in #4771<br \/>\n&#8211; recompiler: drop the cached PROSPER_DBG tag line that reddened main by @ymatrix1 in #4777<br \/>\n&#8211; gpu: NGG without a GS through the subgroup shell; a layered draw needs every attachment proven one slice (#3135 P7) by @mattias800 in #4750<br \/>\n&#8211; recompiler: a MUBUF format store writes only its V# format&rsquo;s components; Kena exposure settled by @mattias800 in #4773<br \/>\n&#8211; console_oracle: measure the AGC builders, libkernel, POSIX names and net\/http helpers by @ymatrix1 in #4780<br \/>\n&#8211; test: per-platform baseline row for kx_attr_getstack_default (fixes red macOS CI on main) by @mattias800 in #4785<br \/>\n&#8211; docs: Kena&rsquo;s distance-field AO is empty because the mesh-SDF atlas upload is skipped (#4766, paused) by @mattias800 in #4788<br \/>\n&#8211; hle\/fs: a guest path outside every mount never reaches the host filesystem by @mattias800 in #4784<br \/>\n&#8211; tools: local save fixtures and a snapshot.py save_fixture field by @mattias800 in #4789<br \/>\n&#8211; gpu: replay a layered depth-only NGG draw once per depth slice (#3135, Kena shadow cubes) by @mattias800 in #4778<br \/>\n&#8211; gpu: memoize the compute nested wide-data inventory per program (Dawnwalker +44% presented fps) by @mattias800 in #4794<br \/>\n&#8211; fix(tools): report reconstruction size in bytes by @AaravMehta-07 in #4797<br \/>\n&#8211; tools: skip split_file&rsquo;s CLI self-test arm on Windows (fixes red MinGW on main) by @mattias800 in #4798<br \/>\n&#8211; tests: materialize deep_scan&rsquo;s pad frame so DmemCallerWalk.Contract passes under AppleClang -O3 by @esdras-kyo in #4800<br \/>\n&#8211; gpu: GPU-retile compute-written SW_64KB_R_X volumes (Kena compute writeback -20%); Stage 1 ceiling measured by @mattias800 in #4804<br \/>\n&#8211; test: multi-block-y volume shape for the GPU retile byte-equal test (#4804 review gap) by @mattias800 in #4807<br \/>\n&#8211; docs: 2026-10-09 status sweep \u2014 three new titles; PGA TOUR 2K25 and Beast of Reincarnation reach title screens by @mattias800 in #4806<br \/>\n&#8211; gpu: bind a null image for an unusable T# read only by a skippable instruction (deterministic admission) by @mattias800 in #4801<br \/>\n&#8211; gpu: lower image_sample_cd like image_sample_d; dump backend-declined compute programs (#4808) by @mattias800 in #4813<br \/>\n&#8211; tools: extract nested AMDGPU shader ELFs from game eboots by @ymatrix1 in #4812<br \/>\n&#8211; console_oracle: add offline coverage report tool and test suite by @ymatrix1 in #4809<br \/>\n&#8211; tools: add console_capture client and tests for ps5debug-NG by @ymatrix1 in #4817<br \/>\n&#8211; tools: console_capture breakpoint opt-in, bounded replies, restored status-doc text (#4817 review) by @mattias800 in #4820<br \/>\n&#8211; docs: escape a pipe that broke a GRIS_SONIC_COBRA table row (main Docs red) by @ymatrix1 in #4821<br \/>\n&#8211; gpu: split-T# proof keeps provenance across EXEC saves and analyses large programs once by @ymatrix1 in #4712<br \/>\n&#8211; recompiler: admit direct-EXEC-write wave-empty guards in counted loops by @ymatrix1 in #4818<br \/>\n&#8211; gpu: decode PM4 IT_LOAD_SH_REG and IT_LOAD_CONTEXT_REG indirect register packets by @ymatrix1 in #4822<br \/>\n&#8211; recompiler: compute Wave64 scalar-pair projection refuses a fabricated-zero word (#4714) by @ymatrix1 in #4749<br \/>\n&#8211; adr: 0037 amends Wave64 routes with what steps 1-3 measured (proposed) by @ymatrix1 in #4776<br \/>\n&#8211; gpu: admit Yakuza Kiwami&rsquo;s Wave32 and The Pathless&rsquo;s merged NGG draws (#4808 cause #3) by @mattias800 in #4819<br \/>\n&#8211; gpu: view a borrowed compute image in its own format, not the renderer&rsquo;s folded host format (#4810) by @mattias800 in #4832<br \/>\n&#8211; gpu: lower the NSA image_sample_c, image_sample_o and image_get_lod forms in fragments (#4808) by @mattias800 in #4835<br \/>\n&#8211; gpu: decode hardware PM4 IT_ACQUIRE_MEM and IT_RELEASE_MEM synchronization packets by @ymatrix1 in #4823<br \/>\n&#8211; docs: rewrite root README using PortPS5 structure as reference by @ymatrix1 in #4824<br \/>\n&#8211; gpu: decode hardware PM4 IT_DISPATCH_DIRECT and IT_DISPATCH_INDIRECT compute packets by @ymatrix1 in #4825<br \/>\n&#8211; gpu: decode hardware PM4 IT_DRAW_INDEX_AUTO, IT_DRAW_INDIRECT, IT_SET_BASE, and IT_WRITE_DATA packets by @ymatrix1 in #4826<br \/>\n&#8211; gpu: decode hardware PM4 IT_WAIT_REG_MEM polling packets by @ymatrix1 in #4827<br \/>\n&#8211; gpu: decode hardware PM4 IT_CLEAR_STATE, IT_INDEX_BUFFER_SIZE, IT_ATOMIC_MEM, and IT_PFP_SYNC_ME packets by @ymatrix1 in #4828<br \/>\n&#8211; gpu: decode hardware PM4 IT_COND_EXEC, IT_DRAW_INDEX_INDIRECT_MULTI, and IT_WAIT_REG_MEM64 packets by @ymatrix1 in #4829<br \/>\n&#8211; docs: record hardware PM4 packet decode coverage for Black Flag by @ymatrix1 in #4830<br \/>\n&#8211; tests: pin Black Flag 32^3 R8 3D mip-pyramid T# decode and view refusals by @ymatrix1 in #4833<br \/>\n&#8211; build: gate movexec guard test on Vulkan availability by @ymatrix1 in #4834<br \/>\n&#8211; tools\/rdna2_ref: independent RDNA2 reference interpreter with LLVM cross-check by @ymatrix1 in #4836<br \/>\n&#8211; gpu: record s_bfm_b64 architectural scalar data alongside lane mask (#4694) by @ymatrix1 in #4837<br \/>\n&#8211; gpu: step over non-SCC writers in scc_branch_is_workgroup_uniform by @ymatrix1 in #4839<br \/>\n&#8211; gpu: admit live EXEC mask source in scalar_source_projectable by @ymatrix1 in #4841<br \/>\n&#8211; recompiler: place thick-3D tail views and sample them at explicit LOD by @ymatrix1 in #4843<br \/>\n&#8211; recompiler: flip 3D tail refusal arms and gate storage paths (#4814 review follow-up) by @ymatrix1 in #4844<br \/>\n&#8211; gpu: admit a Wave64 VCC_LO cselect that reads a scalar-data VCC_HI (#4808) by @mattias800 in #4853<br \/>\n&#8211; gpu\/recompiler: a Wave64 B32 VCC write after an unrelated merge keeps its SCC (#4846) by @mattias800 in #4854<br \/>\n&#8211; hle: implement AMM unmap and command-buffer destruction by @mattias800 in #4856<br \/>\n&#8211; video: publish Videodec2 decoded plane pitches by @mattias800 in #4859<br \/>\n&#8211; gpu: let the raw-wide load proof admit loops whose back edges land after the load (#4847) by @mattias800 in #4862<br \/>\n&#8211; test: make reallocf release checks independent of allocator reuse by @mattias800 in #4867<br \/>\n&#8211; gpu: preserve chroma in separately allocated tiled NV12 planes by @mattias800 in #4863<br \/>\n&#8211; gpu\/recompiler: admit loops whose direct break leaves VCC dead at the exit (#4848) by @mattias800 in #4864<br \/>\n&#8211; gpu: route indexed user-config loads to the UC register file by @mattias800 in #4868\n<\/div>\n<p>&nbsp;<\/p>\n<p class=\"p_telecharger_icone_zip\"><a class=\"telecharger_icone_zip\" href=\"https:\/\/www.emu-france.com\/?wpfb_dl=8398\" title=\"Download Prosper\">T\u00e9l\u00e9charger Prosper v0.2.4 (103 Mo)<\/a><\/p>\n<p class=\"p_site_officiel\"><a class=\"site_officiel\" href=\"https:\/\/github.com\/mattias800\/prosper\" target=\"_blank\" rel=\"noopener\">Site Officiel<\/a><\/p>\n<p class=\"p_en_savoir_plus\"><a class=\"en_savoir_plus\" href=\"https:\/\/www.emu-france.com\/emulateurs\/5-consoles-de-salon\/476-sony-playstation-5\/\">En savoir plus&#8230;<\/a><\/p>\n<div class=\"fcbkbttn_buttons_block\" id=\"fcbkbttn_left\"><div class=\"fb-share-button  \" data-href=\"https:\/\/www.emu-france.com\/?p=137823\" data-type=\"button_count\" data-size=\"small\"><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Prosper (ps5ys) est une couche de compatibilit\u00e9 open-source permettant de faire tourner des logiciels et des jeux PS5 sous Linux et Windows. &nbsp; Ce n&rsquo;est pas un \u00e9mulateur: la PS5 et les PC partageant la m\u00eame architecture processeur (x86-64), le &#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-137823","post","type-post","status-publish","format-standard","hentry","category-par-defaut","uentry","postonpage-1","odd","post-author-Jets"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pKi2R-zQX","jetpack_likes_enabled":false,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/137823","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=137823"}],"version-history":[{"count":1,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/137823\/revisions"}],"predecessor-version":[{"id":137824,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=\/wp\/v2\/posts\/137823\/revisions\/137824"}],"wp:attachment":[{"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=137823"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=137823"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.emu-france.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=137823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}