<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Sadiq Jaffer</title><link href="https://www.toao.com/" rel="alternate"></link><link href="https://www.toao.com/feeds/all.atom.xml" rel="self"></link><id>https://www.toao.com/</id><updated>2026-04-04T19:38:56+01:00</updated><entry><title>Free Hardware Performance Counters in OxCaml Runtime Events</title><link href="https://www.toao.com/blog/free-performance-counters-runtime-events" rel="alternate"></link><published>2026-04-04T19:37:00+01:00</published><updated>2026-04-04T19:38:56+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2026-04-04:/blog/free-performance-counters-runtime-events</id><summary type="html">&lt;p&gt;A prototype extending OxCaml's Runtime Events to sample hardware performance counters at span boundaries, letting you correlate IPC, cache misses and branch mispredictions with specific GC and program phases with overhead indistinguishable from noise.&lt;/p&gt;</summary><content type="html">&lt;p&gt;At ICFP in Singapore last year I had lunch with Stephen Dolan and we got talking about hardware performance counters. Specifically, about how useful it would be to have them integrated into OxCaml's Runtime Events so you could ask questions like "which phases of my program have the lowest instructions-per-clock?" or "what is causing my TLB misses?". This post covers a prototype I've been working on since then.&lt;/p&gt;
&lt;p&gt;OCaml's &lt;a href="https://ocaml.org/manual/5.3/runtime-tracing.html"&gt;Runtime Events&lt;/a&gt; already gives you lightweight tracing of GC phases and user-defined spans in every OCaml binary. The prototype extends this to sample user-specified hardware counters at the start and end of each span, so you get performance data for free alongside the events you were already collecting. This works for built-in runtime events but also for custom events you can add around any logical section in your own code. Since spans can be continuously consumed, you can gather performance counter data on specific program or runtime phases across large numbers of long-running services. The overhead is indistinguishable from noise.&lt;/p&gt;
&lt;h2&gt;Why hardware performance counters?&lt;/h2&gt;
&lt;p&gt;Modern CPUs look like they execute instructions sequentially, but underneath they're parallel execution engines, reordering and speculatively executing instructions across deep pipelines. Multiple tiers of cache hide the fact that main memory is hundreds of cycles away and a single CPU might have dozens of cores that all need their caches kept coherent. To expose what's really going on, CPUs provide hardware performance counters. My 'Alder Lake' Intel i7-12700F has hundreds of them&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt;, covering everything from cache misses at each level to branch mispredictions to instructions retired.&lt;/p&gt;
&lt;p&gt;On Linux the standard way to access these is through perf. You can run &lt;code&gt;perf stat&lt;/code&gt; to get aggregate counter values for a whole program, or use &lt;code&gt;perf record -e ..&lt;/code&gt; to do sampling based on counter overflow, which gives you a profile showing which lines of code are responsible for the event you're monitoring&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;. These work well for standalone questions like finding the code causing the most L1 cache misses but they are unsuitable for continuous monitoring of long-running programs, and they can't easily correlate multiple counters with specific program phases, like asking which GC phases have the lowest instructions-per-clock.&lt;/p&gt;
&lt;p&gt;Runtime Events already traces GC phases and user-defined spans in every binary. It also supports Custom Events, which let you emit spans and counters from your own code. If we extend it to capture hardware counters at span boundaries, we get continuous monitoring of both the runtime and user code, correlating hardware performance with logical program phases on real production traffic.&lt;/p&gt;
&lt;h2&gt;The implementation&lt;/h2&gt;
&lt;p&gt;The implementation has two sides: changes to the C runtime to set up and sample the counters, and changes to the OCaml API to expose the samples to consumers.&lt;/p&gt;
&lt;h3&gt;Runtime&lt;/h3&gt;
&lt;p&gt;We need to call &lt;a href="https://man7.org/linux/man-pages/man2/perf_event_open.2.html"&gt;perf_event_open&lt;/a&gt; for each counter we want to monitor on every thread and domain, and clean up when threads and domains exit. To handle this we add domain_start/stop, thread_start/stop hooks in the appropriate places in systhreads, covering both newly spawned threads and existing threads being registered.&lt;/p&gt;
&lt;p&gt;When a Runtime Events span is started or stopped, we use &lt;a href="https://www.felixcloutier.com/x86/rdpmc"&gt;rdpmc&lt;/a&gt; to sample the counters and append the values to the event data as it's written to the ring buffer. &lt;code&gt;rdpmc&lt;/code&gt; takes around 20-40 cycles&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;, which is what makes the whole approach viable. That's very small compared to the useful work any span is doing.&lt;/p&gt;
&lt;p&gt;The sampling is cheap but the configuration interface is less elegant. Counters to monitor are specified via the &lt;code&gt;OCAML_RUNTIME_EVENTS_PERF_COUNTERS&lt;/code&gt; environment variable as a list of hex-encoded event codes and umasks. You need to look up the codes in the Intel Software Developer's Manual, from perfmon-events.intel.com or by running &lt;code&gt;perf list&lt;/code&gt; and extracting the event code from &lt;code&gt;perf stat -vv -e &amp;lt;counter name&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example, to count instructions, cpu-cycles, L2 cache misses (l2_request.miss) and L3 cache misses (longest_lat_cache.miss) on a Performance Core of a 12th Gen Intel Core i3-1220P: &lt;code&gt;OCAML_RUNTIME_EVENTS_PERF_COUNTERS=r00c0,r003c,r3f24,r412e&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;OCaml API side&lt;/h3&gt;
&lt;p&gt;Consumers receive an additional &lt;code&gt;local_ perf_sample array&lt;/code&gt; parameter on &lt;code&gt;runtime_begin&lt;/code&gt; and &lt;code&gt;runtime_end&lt;/code&gt; callbacks. This is an array of unboxed int64 pairs: the event code from the environment variable and the current counter value, in the same order as specified. The same parameter is available on &lt;code&gt;add_user_event&lt;/code&gt; callbacks for custom events, and the samples are also accessible through the C API.&lt;/p&gt;
&lt;h2&gt;Taking it for a spin&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/ocaml-bench/sandmark/pull/480"&gt;ahrefs benchmarks&lt;/a&gt; from Sandmark exercise code used heavily by their crawler and are known to be memory intensive, which is what we want for correlating GC behaviour with hardware performance. I had Claude port four of them (htmlStream, network, gzip, stre) to OxCaml, fixing up dependencies and using Anil's &lt;a href="https://github.com/avsm/oxmono"&gt;Oxmono&lt;/a&gt; to create a monorepo. You can find the benchmarks and the code to run them here: &lt;a href="https://github.com/sadiqj/runtime-events-pmc-benchmarks"&gt;https://github.com/sadiqj/runtime-events-pmc-benchmarks&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;GC phases by instructions-per-clock&lt;/h3&gt;
&lt;p&gt;Across all four benchmarks I monitored instructions and cpu-cycles for every runtime event span. The table below shows GC phases ordered by their total cycles, with the 5th, 50th and 95th percentile instructions-per-clock (IPC).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th style="text-align: right;"&gt;N&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Cycles&lt;/th&gt;
&lt;th style="text-align: right;"&gt;%&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPC p5&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPC p50&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPC p95&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;major&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10,728&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.91B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;19.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.237&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.748&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.994&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_slice&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10,728&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.60B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;18.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.191&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.720&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.184&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stw_leader&lt;/td&gt;
&lt;td style="text-align: right;"&gt;11,760&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.76B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;11.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.541&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.486&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.249&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.59B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.650&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.955&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.917&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_remembered_set&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.49B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.709&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.112&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.378&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_mark&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2,622&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.38B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;9.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.612&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.639&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.029&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_remembered_set_promote&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.27B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;9.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.614&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.150&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.748&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_sweep&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,216&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.19B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.096&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.762&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.317&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_gc_cycle_domains&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1,689&lt;/td&gt;
&lt;td style="text-align: right;"&gt;288M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.917&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.706&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.359&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_local_roots&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;85M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.411&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.145&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.823&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_mark_roots&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1,680&lt;/td&gt;
&lt;td style="text-align: right;"&gt;65M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.859&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.233&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.987&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_local_roots_promote&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;50M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.702&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;1.906&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.139&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minor_finalized&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6,093&lt;/td&gt;
&lt;td style="text-align: right;"&gt;28M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.763&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;2.051&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.444&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;major_gc_stw&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1,689&lt;/td&gt;
&lt;td style="text-align: right;"&gt;16M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.837&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#cc6a1a"&gt;&lt;strong&gt;1.438&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.415&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The p5-to-p95 spread is wide across most phases. &lt;code&gt;major_sweep&lt;/code&gt; ranges from 0.10 to 4.32 IPC, which likely reflects variability in dense versus sparse shared heap pools. A sparse heap pool could be difficult to branch predict, leading to pipeline stalls and low IPC. The next step to investigate would be to add a runtime/custom events counter inside the sweeping code that emitted the occupancy of pools. This would tell you whether the issue is sparse or dense pools, or possibly even the number of pools swept within a &lt;code&gt;major_sweep&lt;/code&gt; phase.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;minor_local_roots&lt;/code&gt; and &lt;code&gt;major_mark_roots&lt;/code&gt; have the lowest median IPC at 1.15 and 1.23 respectively. Root scanning involves chasing pointers through the stack and globals which is unfriendly to caches and branch predictors, so low IPC is expected here.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;major_mark&lt;/code&gt; has the highest median IPC at 2.64, with a p95 of 5.03. Marking does more computation per memory access than sweeping or root scanning, so the CPU has more useful work to keep its pipelines busy. There was also significant optimisation work done by Stephen Dolan on &lt;a href="https://github.com/ocaml/ocaml/pull/10195"&gt;prefetching during marking&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since consumers get counter values at the start and end of every span, you aren't restricted to looking at aggregates. You can dump out individual traces and inspect them too:&lt;/p&gt;
&lt;div id="pmc_trace_embed" style="background:#1e1e2e;border-radius:8px;padding:16px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:#ccc;margin:16px 0"&gt;
&lt;div style="font-size:14px;font-weight:600;color:#ccccdd;margin-bottom:4px"&gt;htmlStream — GC pause (211.8us, 46 phases, IPC 2.91)&lt;/div&gt;
&lt;div style="display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:11px;color:#888"&gt;
&lt;span&gt;IPC:&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;
&lt;div style="width:180px;height:10px;border-radius:2px;background:linear-gradient(to right,rgb(217,46,38),rgb(217,115,31),rgb(191,153,13),rgb(128,173,38),rgb(51,166,51),rgb(26,140,115))"&gt;&lt;/div&gt;
&lt;span&gt;4.5+&lt;/span&gt;
&lt;/div&gt;
&lt;div style="position:relative;width:100%;height:196px;margin-bottom:24px"&gt;
&lt;div style="position:absolute;left:0.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;0ns&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:10.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;25us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:20.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;51us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:30.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;76us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:40.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;102us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:50.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;127us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:60.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;152us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:70.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;178us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:80.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;203us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:90.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;229us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:100.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;254us&lt;/span&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;128.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.902&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448,580&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;853,318&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.333%;width:50.547%;top:5px;height:28px;background:rgb(137,169,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stw_leader &amp;mdash; 128.5us &amp;mdash; IPC 1.90&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;112.0us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.020&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;391,068&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;789,888&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.461%;width:44.063%;top:36px;height:28px;background:rgb(125,172,38);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;minor &amp;mdash; 112.0us &amp;mdash; IPC 2.02&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;157ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.031&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;548&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;565&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;69.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;15.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.482%;width:0.250%;top:67px;height:28px;background:rgb(214,118,29);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;110.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.034&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;385,581&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;784,349&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.565%;width:43.447%;top:67px;height:28px;background:rgb(123,172,38);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;m_remembered_set &amp;mdash; 110.4us &amp;mdash; IPC 2.03&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;144ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.938&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;497&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;466&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;42.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.791%;width:0.250%;top:98px;height:28px;background:rgb(217,111,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;395ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.408&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,368&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;558&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;37.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:8.869%;width:0.250%;top:98px;height:28px;background:rgb(217,74,35);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;109.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.051&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;381,139&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;781,546&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:9.047%;width:42.938%;top:98px;height:28px;background:rgb(122,172,38);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;m_rs_promo &amp;mdash; 109.1us &amp;mdash; IPC 2.05&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;975ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.734&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,408&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,500&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;60.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.036%;width:0.384%;top:67px;height:28px;background:rgb(217,97,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;124ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.057&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;463&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;30.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.349%;width:0.250%;top:98px;height:28px;background:rgb(213,120,28);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;148ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.106&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;521&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;38.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;15.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.543%;width:0.250%;top:36px;height:28px;background:rgb(210,123,26);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.479&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;30,110&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;44,543&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.641%;width:3.385%;top:36px;height:28px;background:rgb(191,152,13);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_mark_roots&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.335&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;239&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;558&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.050%;width:0.250%;top:36px;height:28px;background:rgb(101,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;59ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.103&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;213&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.113%;width:0.250%;top:36px;height:28px;background:rgb(118,172,39);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;130ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.960&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;449&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;431&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;16.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.157%;width:0.250%;top:36px;height:28px;background:rgb(217,112,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.774&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;243&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;431&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:56.229%;width:0.250%;top:36px;height:28px;background:rgb(154,164,27);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;122ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.360&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;417&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;567&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:58.618%;width:0.250%;top:36px;height:28px;background:rgb(197,143,17);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;58.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.092&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;204,841&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,043,135&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:58.924%;width:23.075%;top:5px;height:28px;background:rgb(26,140,115);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major &amp;mdash; 58.6us &amp;mdash; IPC 5.09&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;51.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.545&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;180,720&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,002,028&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:59.052%;width:20.356%;top:36px;height:28px;background:rgb(26,140,115);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_slice &amp;mdash; 51.7us &amp;mdash; IPC 5.54&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;50.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.673&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;175,121&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;993,492&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:59.091%;width:19.725%;top:67px;height:28px;background:rgb(26,140,115);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_mark &amp;mdash; 50.1us &amp;mdash; IPC 5.67&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;506ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.261&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,770&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,232&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:78.856%;width:0.250%;top:67px;height:28px;background:rgb(202,135,21);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;126ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.072&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;430&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:78.916%;width:0.250%;top:98px;height:28px;background:rgb(212,121,28);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_first&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;126ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.982&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;437&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;429&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.086%;width:0.250%;top:67px;height:28px;background:rgb(217,114,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;421ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.523&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,478&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,251&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.165%;width:0.250%;top:67px;height:28px;background:rgb(186,154,14);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;128ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.024&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;455&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;466&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.188%;width:0.250%;top:98px;height:28px;background:rgb(215,117,29);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_last&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.305&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;190&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;9.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.358%;width:0.250%;top:67px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.691&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;22,286&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;37,690&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.449%;width:2.512%;top:36px;height:28px;background:rgb(164,161,23);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stw_leader&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;154ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.047&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;536&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;561&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.476%;width:0.250%;top:67px;height:28px;background:rgb(214,119,28);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_cycle_domains&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.704&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20,477&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34,900&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;36.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.557%;width:2.306%;top:67px;height:28px;background:rgb(163,161,24);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.624&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;9,974&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;16,194&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;27.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.611%;width:1.124%;top:98px;height:28px;background:rgb(173,158,20);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;84ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.836&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;298&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;547&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;25.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.631%;width:0.250%;top:129px;height:28px;background:rgb(146,167,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;425ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.141&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,487&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,183&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.687%;width:0.250%;top:129px;height:28px;background:rgb(116,171,40);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;60ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.123&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;211&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.711%;width:0.250%;top:160px;height:28px;background:rgb(117,172,39);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.252&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;246&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;554&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.755%;width:0.250%;top:160px;height:28px;background:rgb(107,171,41);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;81ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.623&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;284&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;19.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:79.803%;width:0.250%;top:160px;height:28px;background:rgb(173,158,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;282ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.546&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;982&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,500&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.564%;width:0.250%;top:129px;height:28px;background:rgb(85,169,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.389&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;190&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;454&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;26.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.634%;width:0.250%;top:160px;height:28px;background:rgb(97,170,43);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;72ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.313&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;249&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.755%;width:0.250%;top:98px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.370&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.806%;width:0.250%;top:98px;height:28px;background:rgb(98,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.328&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;440&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.847%;width:0.250%;top:98px;height:28px;background:rgb(102,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.210&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;195&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;431&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.889%;width:0.250%;top:98px;height:28px;background:rgb(110,171,40);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;62ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.523&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;216&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;545&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.931%;width:0.250%;top:98px;height:28px;background:rgb(87,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_stw&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.664&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,634&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12,704&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;59.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;14.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:80.982%;width:0.861%;top:98px;height:28px;background:rgb(168,160,22);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;430ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.916&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,497&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,371&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.024%;width:0.250%;top:5px;height:28px;background:rgb(217,109,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.8us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.771&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;82,995&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;312,971&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.372%;width:9.350%;top:5px;height:28px;background:rgb(38,152,83);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major &amp;mdash; 23.8us &amp;mdash; IPC 3.77&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.787&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;81,893&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;310,137&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.461%;width:9.227%;top:36px;height:28px;background:rgb(38,152,84);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_slice &amp;mdash; 23.5us &amp;mdash; IPC 3.79&lt;/div&gt;
&lt;div class="pmc_trace_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_sweep&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.3us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.794&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;81,524&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;309,294&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:82.482%;width:9.185%;top:67px;height:28px;background:rgb(37,152,84);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_sweep &amp;mdash; 23.3us &amp;mdash; IPC 3.79&lt;/div&gt;
&lt;/div&gt;
&lt;div id="pmc_trace_embed_tt" style="display:none;position:fixed;background:#1a1a2a;border:1px solid #555;border-radius:6px;padding:8px 12px;font-size:12px;color:#ddd;line-height:1.6;pointer-events:none;z-index:9999;box-shadow:0 4px 16px rgba(0,0,0,0.5);max-width:320px;min-width:180px"&gt;&lt;/div&gt;
&lt;style&gt;
#pmc_trace_embed .pmc_trace_embed_bar:hover {
  filter: brightness(1.25);
  border-color: rgba(255,255,255,0.5) !important;
  z-index: 100;
}
&lt;/style&gt;
&lt;script&gt;
(function() {
  var tt = document.getElementById('pmc_trace_embed_tt');
  var active = null;
  var container = document.getElementById('pmc_trace_embed');
  container.addEventListener('mousemove', function(e) {
    var bar = e.target.closest('.pmc_trace_embed_bar');
    if (bar &amp;&amp; bar.dataset.tt) {
      if (bar !== active) {
        active = bar;
        tt.innerHTML = bar.dataset.tt;
      }
      tt.style.display = 'block';
      var pad = 14;
      var x = e.clientX + pad;
      var y = e.clientY + pad;
      var r = tt.getBoundingClientRect();
      if (x + r.width &gt; window.innerWidth - 8) x = e.clientX - r.width - pad;
      if (y + r.height &gt; window.innerHeight - 8) y = e.clientY - r.height - pad;
      tt.style.left = x + 'px';
      tt.style.top = y + 'px';
    } else if (active) {
      active = null;
      tt.style.display = 'none';
    }
  });
  container.addEventListener('mouseleave', function() {
    active = null;
    tt.style.display = 'none';
  });
})();
&lt;/script&gt;
&lt;/div&gt;

&lt;h2&gt;Beyond the GC — profiling your own code&lt;/h2&gt;
&lt;p&gt;Performance counters are also emitted for Custom Events. Adding a custom event around a section of code is straightforward:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nn"&gt;Runtime_events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nn"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;span_name&lt;/span&gt; &lt;span class="nc"&gt;Begin&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="c"&gt;(* your code here *)&lt;/span&gt;
&lt;span class="nn"&gt;Runtime_events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nn"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;span_name&lt;/span&gt; &lt;span class="nc"&gt;End&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We added custom events around each benchmark phase in the ahrefs benchmarks. This time I monitored L2 and last-level cache (LLC) misses alongside cycles. The table below shows LLC misses and L2 misses per 1,000 instructions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th style="text-align: right;"&gt;N&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Cycles&lt;/th&gt;
&lt;th style="text-align: right;"&gt;%&lt;/th&gt;
&lt;th style="text-align: right;"&gt;LLC/ki&lt;/th&gt;
&lt;th style="text-align: right;"&gt;L2/ki&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;bench:large_blocks&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;54.89B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;32.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:generational_violation&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;29.77B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;17.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:morphing_heap&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;14.81B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;8.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:complex_network_ops&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.62B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#b08a00"&gt;&lt;strong&gt;5.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;12.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:variable_rate&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.49B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;1.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:range_operations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;7.99B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.7%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.2&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:attribute_lists&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6.51B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.9%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:complex_references&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.83B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.4%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:fragmentation&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.50B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.7%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:cidr_calculations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.25B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.9%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:small_buffer_storm&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.21B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.9%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:mixed_size_patterns&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.99B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:compression_pipelines&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.63B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:ip_sorting&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.81B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:large_block_compression&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.61B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.0%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:split_storm&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.30B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.8%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:streaming_operations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.16B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.7%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:buffer_recycling&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.06B&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.6%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:broadcast_calculations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;925M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:ipv4_parsing&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;855M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.5%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:concurrent_style&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;553M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:small_strings&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;432M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.3%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:pattern_operations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;384M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:mixed_format_parsing&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;350M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.2%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:nat_tables&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;250M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#5a9a2a"&gt;&lt;strong&gt;1.1&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;10.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:headers_metadata&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;235M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:enum_string_ops&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;201M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:mixed_size_allocations&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;201M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:string_building&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;127M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.8&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:transformation_chains&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;94M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.1%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:concatenation_chains&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;32M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.0%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.3&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bench:substring_slicing&lt;/td&gt;
&lt;td style="text-align: right;"&gt;3&lt;/td&gt;
&lt;td style="text-align: right;"&gt;6M&lt;/td&gt;
&lt;td style="text-align: right;"&gt;0.0%&lt;/td&gt;
&lt;td style="text-align: right;"&gt;&lt;span style="color:#1a8a1a"&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="text-align: right;"&gt;5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most phases have very low LLC miss rates, well under 1.0 per 1,000 instructions. &lt;code&gt;bench:complex_network_ops&lt;/code&gt; is the exception at 5.6 LLC misses per 1,000 instructions, roughly 10x the rate of most other phases. Its L2 miss rate of 12.7 is also the highest in the table, so if you were chasing memory access patterns this is where you'd start.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bench:nat_tables&lt;/code&gt; stands out too. Its LLC miss rate of 1.1 is modest but its L2 miss rate of 10.7 is among the highest, suggesting a working set that fits in LLC but not in L2.&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;perf&lt;/code&gt; alone you would need to run separate profiling passes for each counter and then try to correlate them with specific sections of your code. Here you get it all in one continuous stream.&lt;/p&gt;
&lt;p&gt;Like the runtime events, we can look at individual traces. Here are some operations from the gzip benchmark, showing user events alongside runtime ones. You can mouseover for more detail:&lt;/p&gt;
&lt;div id="pmc_custom_embed" style="background:#1e1e2e;border-radius:8px;padding:16px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;color:#ccc;margin:16px 0"&gt;
&lt;div style="font-size:14px;font-weight:600;color:#ccccdd;margin-bottom:4px"&gt;gzip / streaming_operations &amp;mdash; GC interrupting application sub-phases (284.7us, 54 spans)&lt;/div&gt;
&lt;div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;font-size:11px;color:#888"&gt;
&lt;span&gt;IPC:&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;
&lt;div style="width:160px;height:10px;border-radius:2px;background:linear-gradient(to right,rgb(217,46,38),rgb(217,115,31),rgb(191,153,13),rgb(128,173,38),rgb(51,166,51),rgb(26,140,115))"&gt;&lt;/div&gt;
&lt;span&gt;4.5+&lt;/span&gt;
&lt;span style="margin-left:12px;color:#666"&gt;thick border = application span&lt;/span&gt;
&lt;/div&gt;
&lt;div style="position:relative;width:100%;height:227px;margin-bottom:24px"&gt;
&lt;div style="position:absolute;left:0.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;0ns&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:10.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;28.5us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:20.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;56.9us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:30.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;85.4us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:40.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;113.9us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:50.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;142.3us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:60.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;170.8us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:70.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;199.3us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:80.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;227.7us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:90.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;256.2us&lt;/span&gt;&lt;/div&gt;
&lt;div style="position:absolute;left:100.00%;bottom:0;height:100%;border-left:1px solid rgba(255,255,255,0.06);pointer-events:none"&gt;&lt;span style="position:absolute;bottom:-16px;left:-1px;font-size:10px;color:#555;white-space:nowrap;transform:translateX(-50%)"&gt;284.7us&lt;/span&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:streaming_operations&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;91.6ms&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.685&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;391,713,260&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,443,358,299&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:0.000%;width:100.000%;top:5px;height:28px;background:rgb(39,154,79);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;streaming_operations &amp;mdash; 91.6ms &amp;mdash; IPC 3.68&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;32.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.898&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;142,196&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;412,150&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:0.000%;width:2.764%;top:36px;height:28px;background:rgb(59,166,49);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_w&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_read&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.0us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.778&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;57,198&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;158,882&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:2.855%;width:4.570%;top:36px;height:28px;background:rgb(68,167,48);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_r&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;43.2us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.988&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189,455&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;566,158&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:19.475%;width:15.163%;top:36px;height:28px;background:rgb(52,166,50);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_write &amp;mdash; 43.2us &amp;mdash; IPC 2.99&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.857&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;154,131&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;132,039&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;57.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;23.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.126%;width:12.330%;top:36px;height:28px;background:rgb(217,105,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stw_leader &amp;mdash; 35.1us &amp;mdash; IPC 0.86&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.449&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54,926&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24,670&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;80.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;36.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.254%;width:4.389%;top:67px;height:28px;background:rgb(217,77,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;minor&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;525ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.242&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,297&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;556&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;143.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;50.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.289%;width:0.250%;top:98px;height:28px;background:rgb(217,62,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.478&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;28,975&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13,863&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;75.1&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.488%;width:2.316%;top:98px;height:28px;background:rgb(217,79,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;131ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.799&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;577&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;26.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.528%;width:0.250%;top:129px;height:28px;background:rgb(217,101,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.525&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;335&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;511&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;25.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:35.589%;width:2.144%;top:129px;height:28px;background:rgb(185,154,15);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;112ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.923&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;494&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;26.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:37.750%;width:0.250%;top:129px;height:28px;background:rgb(217,110,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.6us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.381&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20,362&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,755&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;103.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;82.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:37.819%;width:1.626%;top:98px;height:28px;background:rgb(217,72,35);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.8us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.472&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,869&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,717&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;19.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:38.802%;width:0.628%;top:129px;height:28px;background:rgb(217,78,34);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;199ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.668&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;876&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;585&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:39.658%;width:0.250%;top:67px;height:28px;background:rgb(217,92,33);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.003&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39,171&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39,294&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;40.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:39.795%;width:3.137%;top:67px;height:28px;background:rgb(216,116,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_mark_roots&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;52ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.560&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;225&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:42.947%;width:0.250%;top:67px;height:28px;background:rgb(84,169,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.8us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.277&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;47,434&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;60,576&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;62.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;22.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:43.022%;width:3.799%;top:67px;height:28px;background:rgb(201,137,20);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;m_finalized&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;116ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.861&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;511&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;440&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:46.836%;width:0.250%;top:67px;height:28px;background:rgb(217,106,31);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;49ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.079&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;216&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;449&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:46.892%;width:0.250%;top:67px;height:28px;background:rgb(120,172,39);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;699ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.181&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,061&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;554&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;39.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;16.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:46.950%;width:0.250%;top:67px;height:28px;background:rgb(217,58,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.251&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;56,705&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70,957&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;18.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:47.509%;width:4.531%;top:36px;height:28px;background:rgb(203,135,21);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.998&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;29,512&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;29,464&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:47.625%;width:2.359%;top:67px;height:28px;background:rgb(216,115,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_mark&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.095&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12,579&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13,780&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;13.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;6.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:47.668%;width:1.005%;top:98px;height:28px;background:rgb(211,123,27);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;359ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.423&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,578&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,246&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:48.815%;width:0.250%;top:98px;height:28px;background:rgb(194,148,15);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;111ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.000&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;532&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;532&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:48.838%;width:0.250%;top:129px;height:28px;background:rgb(216,115,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_first&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;130ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.768&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;570&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:48.993%;width:0.250%;top:98px;height:28px;background:rgb(217,99,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.624&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,370&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2,225&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:49.060%;width:0.581%;top:98px;height:28px;background:rgb(173,158,20);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_phase_change&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;56ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.822&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;258&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;470&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:49.558%;width:0.250%;top:129px;height:28px;background:rgb(148,166,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;finalise_update_last&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;40ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.307&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;186&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;429&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:49.699%;width:0.250%;top:98px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.527&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24,899&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;38,010&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.016%;width:1.992%;top:67px;height:28px;background:rgb(185,154,15);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;160ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.825&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;691&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;570&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;43.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.066%;width:0.250%;top:98px;height:28px;background:rgb(217,103,32);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_cycle_domains&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.564&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;22,524&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35,229&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;24.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.135%;width:1.802%;top:98px;height:28px;background:rgb(180,156,16);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.1us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.952&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4,763&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;9,295&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;11.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.185%;width:0.380%;top:129px;height:28px;background:rgb(131,171,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_global_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;52ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.471&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;225&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;556&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;21.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.200%;width:0.250%;top:160px;height:28px;background:rgb(91,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;312ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.315&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,373&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,178&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.232%;width:0.250%;top:160px;height:28px;background:rgb(103,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_oldify&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;44ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.370&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;448&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;17.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.249%;width:0.250%;top:191px;height:28px;background:rgb(98,170,42);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;50ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.518&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;220&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;554&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.279%;width:0.250%;top:191px;height:28px;background:rgb(87,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_remembered_set_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;46ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.271&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;203&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;461&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.311%;width:0.250%;top:191px;height:28px;background:rgb(106,171,41);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;359ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.942&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,572&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3,053&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;5.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.356%;width:0.250%;top:160px;height:28px;background:rgb(132,171,36);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_local_roots_promote&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.900&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;239&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;454&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.449%;width:0.250%;top:191px;height:28px;background:rgb(138,169,33);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_memprof_clean&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;54ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.438&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;240&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;585&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.581%;width:0.250%;top:129px;height:28px;background:rgb(93,169,43);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalized&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;55ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.822&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;241&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;439&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.617%;width:0.250%;top:129px;height:28px;background:rgb(148,166,30);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_dependent&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;40ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.525&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;183&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;462&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.652%;width:0.250%;top:129px;height:28px;background:rgb(87,169,44);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_finalizers_admin&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;42ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.540&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;189&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;480&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.680%;width:0.250%;top:129px;height:28px;background:rgb(86,169,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;minor_clear&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;48ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.760&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;4,450&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7,833&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:50.710%;width:0.250%;top:129px;height:28px;background:rgb(155,164,26);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_gc_stw&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.228&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10,385&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12,753&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;55.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;20.3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:51.091%;width:0.827%;top:129px;height:28px;background:rgb(204,133,22);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;stw_leader&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;176ns&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.780&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;770&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1,371&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;8.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.062%;width:0.250%;top:36px;height:28px;background:rgb(153,164,27);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;36.0us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.301&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;158,001&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;205,491&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;70.7&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.314%;width:12.646%;top:36px;height:28px;background:rgb(200,138,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;major &amp;mdash; 36.0us &amp;mdash; IPC 1.30&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_slice&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35.7us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.294&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;156,797&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;202,816&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;71.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.380%;width:12.543%;top:67px;height:28px;background:rgb(201,138,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_slice &amp;mdash; 35.7us &amp;mdash; IPC 1.29&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;major_sweep&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;35.4us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.298&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;155,538&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;201,906&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;71.8&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;33.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:52.429%;width:12.445%;top:98px;height:28px;background:rgb(200,138,19);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:1px solid rgba(255,255,255,0.08);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;M_sweep &amp;mdash; 35.4us &amp;mdash; IPC 1.30&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_read&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;12.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.232&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;56,472&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;126,047&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;7.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.4&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:65.080%;width:4.524%;top:36px;height:28px;background:rgb(109,171,41);color:#fff;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_r&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;25.9us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.546&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;113,951&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;404,019&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.0&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.6&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:76.195%;width:9.114%;top:36px;height:28px;background:rgb(42,156,73);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_write 3.55&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_read&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;10.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;2.571&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;45,839&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;117,873&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;1.2&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:85.457%;width:3.672%;top:36px;height:28px;background:rgb(83,168,45);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_r&lt;/div&gt;
&lt;div class="pmc_custom_embed_bar" data-tt="&amp;lt;div style=&amp;quot;font-weight:700;color:#fff;font-size:13px;margin-bottom:4px;border-bottom:1px solid #444;padding-bottom:4px&amp;quot;&amp;gt;bench:stream_chunked_write&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Duration&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;34.5us&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;IPC&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;3.230&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Cycles&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;151,590&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;Instructions&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;489,568&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;L2/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;gap:16px&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#999&amp;quot;&amp;gt;LLC/ki&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#eee;font-variant-numeric:tabular-nums&amp;quot;&amp;gt;0.5&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;" style="position:absolute;left:95.399%;width:4.601%;top:36px;height:28px;background:rgb(47,162,60);color:#1a1a1a;border-radius:4px;font-size:11px;line-height:28px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;cursor:default;border:2px solid rgba(255,255,255,0.3);font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,0.3);transition:filter 0.1s,border-color 0.1s"&gt;stream_chunked_w&lt;/div&gt;
&lt;/div&gt;
&lt;div id="pmc_custom_embed_tt" style="display:none;position:fixed;background:#1a1a2a;border:1px solid #555;border-radius:6px;padding:8px 12px;font-size:12px;color:#ddd;line-height:1.6;pointer-events:none;z-index:9999;box-shadow:0 4px 16px rgba(0,0,0,0.5);max-width:320px;min-width:180px"&gt;&lt;/div&gt;
&lt;style&gt;#pmc_custom_embed .pmc_custom_embed_bar:hover { filter:brightness(1.25);border-color:rgba(255,255,255,0.6) !important;z-index:100; }&lt;/style&gt;
&lt;script&gt;
(function(){
  var tt=document.getElementById('pmc_custom_embed_tt'),active=null,
      el=document.getElementById('pmc_custom_embed');
  el.addEventListener('mousemove',function(e){
    var bar=e.target.closest('.pmc_custom_embed_bar');
    if(bar&amp;&amp;bar.dataset.tt){
      if(bar!==active){active=bar;tt.innerHTML=bar.dataset.tt;}
      tt.style.display='block';
      var p=14,x=e.clientX+p,y=e.clientY+p,r=tt.getBoundingClientRect();
      if(x+r.width&gt;window.innerWidth-8)x=e.clientX-r.width-p;
      if(y+r.height&gt;window.innerHeight-8)y=e.clientY-r.height-p;
      tt.style.left=x+'px';tt.style.top=y+'px';
    }else if(active){active=null;tt.style.display='none';}
  });
  el.addEventListener('mouseleave',function(){active=null;tt.style.display='none';});
})();
&lt;/script&gt;
&lt;/div&gt;

&lt;h2&gt;How expensive is it?&lt;/h2&gt;
&lt;p&gt;Each benchmark was run three ways: with runtime events off entirely, with runtime events on but no performance counters, and with runtime events on and four performance counters. Each configuration was run 20 times, pinned to a single P-core on my i3-1220p server, measuring wall-clock time.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Baseline&lt;/th&gt;
&lt;th&gt;Events Overhead&lt;/th&gt;
&lt;th&gt;PMC Overhead&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;htmlStream&lt;/td&gt;
&lt;td&gt;29.26 +/- 0.16s&lt;/td&gt;
&lt;td&gt;-0.0% [-0.5, 0.3]&lt;/td&gt;
&lt;td&gt;+0.0% [-0.5, 0.5]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stre&lt;/td&gt;
&lt;td&gt;5.32 +/- 0.04s&lt;/td&gt;
&lt;td&gt;+0.1% [-0.4, 1.1]&lt;/td&gt;
&lt;td&gt;+0.5% [-0.0, 1.5]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;network&lt;/td&gt;
&lt;td&gt;6.03 +/- 0.16s&lt;/td&gt;
&lt;td&gt;+0.1% [-1.1, 0.5]&lt;/td&gt;
&lt;td&gt;+0.0% [-0.6, 1.0]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;td&gt;2.79 +/- 0.02s&lt;/td&gt;
&lt;td&gt;+0.3% [-0.2, 0.9]&lt;/td&gt;
&lt;td&gt;+0.4% [-1.6, 1.6]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The 5th and 95th percentiles are in square brackets. In every case the range crosses zero, which means the overhead is not distinguishable from noise. The numbers confirm what the cycle counts predict, that &lt;code&gt;rdpmc&lt;/code&gt; adds around 30 cycles per counter per span. Even with four counters that's roughly 120 cycles at each span boundary, which is tiny compared to the work any GC phase is doing. The longest benchmark here runs for nearly 30 seconds.&lt;/p&gt;
&lt;p&gt;This makes it practical to leave performance counters enabled on long-running services and collect hardware-level data continuously.&lt;/p&gt;
&lt;h2&gt;Trying it yourself&lt;/h2&gt;
&lt;p&gt;Note that this is currently x86-only and Linux-only since it relies on &lt;code&gt;rdpmc&lt;/code&gt; and &lt;code&gt;perf_event_open&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To install the prototype, create an opam switch from the branch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;opam&lt;span class="w"&gt; &lt;/span&gt;switch&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;oxcaml-dev&lt;span class="w"&gt; &lt;/span&gt;--empty
opam&lt;span class="w"&gt; &lt;/span&gt;pin&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;-ny&lt;span class="w"&gt; &lt;/span&gt;git+https://github.com/sadiqj/oxcaml#runtime_events_pmc
opam&lt;span class="w"&gt; &lt;/span&gt;switch&lt;span class="w"&gt; &lt;/span&gt;set-invariant&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;--packages&lt;span class="w"&gt; &lt;/span&gt;oxcaml-dev
&lt;span class="nb"&gt;eval&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;opam&lt;span class="w"&gt; &lt;/span&gt;env&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Build your program as normal. To specify which counters to monitor, set &lt;code&gt;OCAML_RUNTIME_EVENTS_PERF_COUNTERS&lt;/code&gt; with the hex event codes as described above.&lt;/p&gt;
&lt;p&gt;You'll also need a consumer to read the events. There's &lt;a href="https://github.com/sadiqj/runtime-events-pmc-benchmarks/tree/main/examples"&gt;an example consumer&lt;/a&gt; in the benchmarks repo that connects to a running program given its executable directory and PID, and writes a CSV of all events with their durations and counter values.&lt;/p&gt;
&lt;p&gt;If you try it out, &lt;a href="https://bsky.app/profile/sadiq.toao.com"&gt;let me know&lt;/a&gt; what you find.&lt;/p&gt;
&lt;h2&gt;Next steps&lt;/h2&gt;
&lt;p&gt;This is a prototype and isn't merged upstream to OxCaml yet. There are a few things I want to address before proposing it:&lt;/p&gt;
&lt;p&gt;The counter configuration needs to be less clunky. Requiring hex event codes works but ideally you'd be able to specify counters by name, similar to how &lt;code&gt;perf&lt;/code&gt; lets you write &lt;code&gt;cache-misses&lt;/code&gt; instead of &lt;code&gt;r412e&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The API could also be cleaner. Right now the performance samples are passed as an additional parameter on every callback, which makes the signature noisier even when you don't care about counters.&lt;/p&gt;
&lt;p&gt;I'd like to explore the arm64 equivalents. arm64 has comparable facilities through the PMU.&lt;/p&gt;
&lt;p&gt;Finally it would be worth extending &lt;a href="https://github.com/tarides/runtime_events_tools"&gt;Olly&lt;/a&gt; to support collecting the counters and pushing them through to traces, which would make this accessible without writing a custom consumer.&lt;/p&gt;
&lt;p&gt;Longer term, the fact that the overhead is negligible means you could leave counters enabled across an entire fleet of services. Aggregating hardware counter data across hundreds of instances would let you ask questions that are impossible on a single machine, like which program phases have the worst cache behaviour on a specific microarchitecture, or whether certain workloads cause specific GC phases to degrade.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;In reality it has nearly twice as many because there's one set for the P-cores and one set for the E-cores - you have to be reasonably careful to pin to a specific set of cores.&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;This isn't entirely true because as we mentioned earlier, modern CPUs are parallel execution engines, so what does it even mean when an event happens but there's 100s of instructions in-flight? Sometimes we've already executed a number of instructions before the interrupt that captures the stack. A subset of the Intel counters are able to more precisely determine their causing instruction. I recommend &lt;a href="https://easyperf.net/blog/2018/06/08/Advanced-profiling-topics-PEBS-and-LBR"&gt;these&lt;/a&gt; &lt;a href="https://travisdowns.github.io/blog/2019/08/20/interrupts.html"&gt;articles&lt;/a&gt;.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Agner Fog has cycle counts in his excellent &lt;a href="https://www.agner.org/optimize/instruction_tables.pdf"&gt;data tables&lt;/a&gt;&amp;#160;&lt;a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="posts"></category></entry><entry><title>Earth Observation on a Budget: Finding Solar Farms with a 42k-Parameter Model</title><link href="https://www.toao.com/blog/earth-observation-budget-solar-farms-tiny-model" rel="alternate"></link><published>2026-01-14T17:38:00+00:00</published><updated>2026-01-16T21:18:01+00:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2026-01-14:/blog/earth-observation-budget-solar-farms-tiny-model</id><summary type="html">&lt;p&gt;Satellite imagery analysis doesn't always require massive data and compute. We show how to combine open data from OpenStreetMap and the UK Government's Renewable Energy Planning database with Tessera foundation model embeddings to map solar farms across the UK using a lightweight neural network.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Solar farms are expanding rapidly across the UK, but keeping track of where they are, and when they appeared, isn't straightforward. In this post, we'll map them using satellite imagery and a surprisingly small neural network with only ~42k parameters.&lt;/p&gt;
&lt;p&gt;We're going to do this using the &lt;a href="https://arxiv.org/abs/2506.20380"&gt;Tessera foundation model&lt;/a&gt;, a pre-trained AI model that already understands satellite imagery in a similar way to how Large Language Models 'understand' text. Using Tessera is a little different from a Large Language Model in that you don't interact with the model directly but rather use pre-generated embeddings for the areas you want to analyse. These embeddings are available at 10m resolution and form a rich summary of that point on Earth's light and radar reflectance over a calendar year, its temporal-spectral characteristics.&lt;/p&gt;
&lt;p&gt;We actually used Tessera when we went &lt;a href="https://toao.com/blog/can-we-really-see-brambles-from-space"&gt;hunting brambles&lt;/a&gt; a few months back. In that instance, we created a pixel-wise model to predict whether a specific 10-meter square contained brambles. This is very easy to do with the &lt;a href="https://anil.recoil.org/notes/geotessera-python-0-7"&gt;efficient sampling support in Geotessera&lt;/a&gt; and works fine when the entity is defined purely by its surface temporal-spectral characteristics. But what if the entity you are looking for is defined by its shape and surroundings? For example, a single pixel might be asphalt but whether it is part of a car park or a road must take into consideration its surroundings. In this post we're going to classify solar farms, which exhibit this property. Despite having similar spectral characteristics what separates a solar farm pixel from a rooftop solar install is the size and shape of the solar panels &lt;em&gt;around&lt;/em&gt; them.&lt;/p&gt;
&lt;p&gt;We could simply classify whether a 1km tile contains a solar farm. However, it's usually more useful to map the exact shape of the farm pixel-by-pixel. This technique is called semantic segmentation, a specific type of &lt;em&gt;dense prediction&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So step one, we need to find some solar farms. For this we use two data sources: &lt;a href="https://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt; and the UK government's &lt;a href="https://www.gov.uk/government/publications/renewable-energy-planning-database-monthly-extract"&gt;Renewable Energy Planning Database&lt;/a&gt;. We join the OSM solar farm polygons with the REPD to find farms that have an operational date in REPD or a start date in OSM before 2024, this helps filter out farms built in 2024 or 2025. We want to find solar farms that existed throughout 2024.&lt;/p&gt;
&lt;p&gt;Now we have a set of solar farm polygons, we need to divide this into train, validation and test sets. For this we use a 25km checkerboard split with roughly 78%, 11% and 11% train, validation and test respectively. We split this way to avoid leaking data from partial and neighbouring polygons. This results in 760 train polygons, 112 validation and 118 test.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/checkerboard_split.png" alt="Checkerboard spatial split pattern"&gt;
&lt;figcaption&gt;Checkerboard spatial split pattern&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We then produce a set of tiles around each polygon, each 160x160 (so 1.6km x 1.6km). As the Tessera embedding is 128 dimensions, this effectively gives us 128 channel images. Here are a couple with just the first 3 channels of the Tessera embeddings.&lt;/p&gt;
&lt;style&gt;
.img-hover-swap { position: relative; display: inline-block; }
.img-hover-swap img { transition: opacity 0.2s; }
.img-hover-swap img:last-child { position: absolute; top: 0; left: 0; opacity: 0; }
.img-hover-swap:hover img:last-child { opacity: 1; }
.img-hover-swap:hover img:first-child { opacity: 0; }
&lt;/style&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000000_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000000_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000001_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000001_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000002_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000002_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000003_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000003_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000004_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000004_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000005_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000005_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000006_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000006_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000007_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000007_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;div class="img-hover-swap"&gt;
  &lt;img src="/static/patch_000008_rgb.png" alt="Tile of first three Tessera dimensions"&gt;
  &lt;img src="/static/patch_000008_rgb_masked.png" alt="Tile with solar farm highlighted"&gt;
&lt;/div&gt;
&lt;figcaption&gt;Tile with first three Tessera dimensions (hover to highlight solar farm)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;For training targets, we have a binary true/false for each pixel in the image depending on whether it is contained within a solar farm polygon or not.&lt;/p&gt;
&lt;p&gt;Now we have these tiles we can train a model using them. For this we use a &lt;a href="https://en.wikipedia.org/wiki/Convolutional_neural_network"&gt;Convolutional Neural Network&lt;/a&gt; (CNN), specifically a &lt;a href="https://en.wikipedia.org/wiki/U-Net"&gt;UNet&lt;/a&gt;. This network design has an encoder-bottleneck-decoder structure with skip connections between the stages and crucially lets us do dense prediction, that is, gives us a prediction at every point. We use a &lt;a href="https://github.com/sadiqj/tessera-cnn-example/blob/blog_post/models.py#L161-L164"&gt;nano-sized UNet configuration&lt;/a&gt;, which is only ~42k parameters. It may seem surprising to use such a small model but we've found the richness of Tessera's embeddings means we often don't need very large models. Smaller models mean fewer parameters to fit and in general, less training data. They're also much faster to train, this nano-sized model can be trained in about 15 minutes on CPU alone.&lt;/p&gt;
&lt;p&gt;To train the model we use &lt;a href="https://github.com/sadiqj/tessera-cnn-example/blob/main/train.py#L36-L45"&gt;a combination of the Dice loss and the Binary Cross Entropy (BCE) loss&lt;/a&gt;. The Dice loss encourages the model to overlap the predicted solar farm regions with our ground-truth regions whilst BCE penalises the model pixel-by-pixel for being wrong, this &lt;a href="https://arxiv.org/abs/2312.05391"&gt;survey paper&lt;/a&gt; has a list of all the possible losses one could use and their properties. We also apply label smoothing (a technique that makes the model less confident in its predictions), which helps it tolerate labelling errors, the kind we probably have through our assumptions about the negatives surrounding solar farms as well as any missing solar farms in OSM that might be in our training tiles.&lt;/p&gt;
&lt;p&gt;A final trick is that we 'stretch' our training data through augmentations: random cropping, flipping, and rotating the tiles. This forces the model to learn the essential features of solar farms rather than memorising specific orientations or positions. I was concerned that the orientation of solar panels was actually a strong signal and the rotational and flip augmentations would be harmful but they seem to give a small benefit instead.&lt;/p&gt;
&lt;p&gt;Training this takes less than 4 minutes on a Ryzen 9950X + NVIDIA RTX 5090 machine. I'm fairly sure this could go faster with a bit more optimisation. To evaluate the model we focus on the Intersection-over-Union (IoU) which measures the overlap between the model's prediction and the ground truth and divides this by their combined union. The trained model reaches 0.76 IoU on the evaluation set, with a precision of 0.80 and recall of 0.93, which isn't bad at all for a model where we've had to make some strong assumptions around our training data.&lt;/p&gt;
&lt;p&gt;Now we have a small trained model, we can use it to do inference. I've run the model over 2017-2024 in the UK. Here's some animations showing growth of solar farms (many of these existed before 2017) in Cornwall and Devon:&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/cornwall_3_solar_farms.webp" alt="Solar farms 2017-2024 in Cornwall"&gt;
&lt;figcaption&gt;Solar farms 2017-2024 in Cornwall&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/devon_solar_farms.webp" alt="Solar farms 2017-2024 in Devon"&gt;
&lt;figcaption&gt;Solar farms 2017-2024 in Devon&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;small&gt;(Both of the above use cloudfree composites from https://s2maps.eu by EOX IT Services GmbH which contains modified Copernicus Sentinel data 2017-2024)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Here's a picture of a chunk of England and Wales, the black areas are solar farms the model identified:&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/solar_england.png" alt="Solar farms detected by the model across England and Wales"&gt;
&lt;figcaption&gt;Solar farms detected by the model across England and Wales&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can also download the &lt;a href="/static/uk_solar_farms.geojson"&gt;model-generated geojson for the whole of the UK&lt;/a&gt;, though this has not been validated and almost certainly contains some level of false positives.&lt;/p&gt;
&lt;p&gt;Lastly, inferring tiles that are not in the train/validation/test set has revealed a few detected solar farms that don't seem to be in OSM. Determining that is tricky from Sentinel 2 alone, once we have access to a higher resolution source of imagery we should submit the missing ones.&lt;/p&gt;
&lt;p&gt;This demonstrates that effective Earth observation doesn't necessarily require massive compute resources. By leveraging the rich, compressed information in Tessera's embeddings, we were able to train a model with only ~42k parameters to identify solar farms across the UK.&lt;/p&gt;
&lt;p&gt;There's a general recipe here for using Tessera to detect almost anything that's visible from space:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Get your Ground Truth&lt;/em&gt;: Start with a dataset of polygons for the thing you want to find. We used OpenStreetMap and the REPD, but you could use any GIS database or even hand-label a small region.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Split Spatially&lt;/em&gt;: Don't just split your data randomly into train/validation/test sets. Use a spatial split (like our 25km checkerboard) to ensure your model learns to generalize rather than just memorizing the landscape. This is especially important when you are doing classification in very dense areas and where entities can end up very close to each other.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Start with the smallest model you can, it may surprise you&lt;/em&gt;: As we saw in our solar farm example, even a ~42k parameter model produced good results. We found in our &lt;a href="https://arxiv.org/abs/2506.20380"&gt;Tessera paper&lt;/a&gt; even linear models performed reasonably. This makes inference very cheap, when inferring over large landscapes you may find your bottleneck is actually bandwidth.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Give it a go and &lt;a href="https://bsky.app/profile/sadiq.toao.com"&gt;let me know&lt;/a&gt; what you find.&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>Three Steps for OCaml to Crest the AI Humps</title><link href="https://www.toao.com/blog/ai-existential-ocaml" rel="alternate"></link><published>2025-10-24T17:38:00+01:00</published><updated>2025-11-16T11:33:48+00:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-10-24:/blog/ai-existential-ocaml</id><summary type="html">&lt;p&gt;OCaml represents less than 0.01% of training data for many large language models, creating an existential threat for the language community. This talk outlines three concrete steps the OCaml community can take to improve AI coding agent support and ensure the language's future relevance.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I gave the talk "Three Steps for OCaml to Crest the AI Humps" at the 2025 OCaml Workshop at ICFP/SPLASH. In it I discussed the challenges and opportunities for OCaml in the age of AI coding assistants.&lt;/p&gt;
&lt;p&gt;You can find a &lt;a href="https://youtu.be/Xh5PNe0SxDY?t=24014"&gt;video of the talk here&lt;/a&gt;. There's also an &lt;a href="/static/papers/ocaml-workshop2025-abstract.pdf"&gt;extended abstract&lt;/a&gt;. This blog post has a copy of the slides along with some commentary taken from the speaker notes and other links.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-03.png" alt="Slide 3"&gt;
&lt;figcaption&gt;OCaml in training data: ~0.003% of The Stack v2&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;OCaml represents approximately 0.003% of The Stack v2, a major code corpus used for training large language models. Compare this to Python, which makes up about 8% of the same dataset. There are consequences for having so little data available..&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-04.png" alt="Slide 4"&gt;
&lt;figcaption&gt;5x performance difference between Python and OCaml&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The disparity translates in a difference in problem solving ability between languages. &lt;a href="https://dl.acm.org/doi/10.1145/3689735"&gt;Cassano et al&lt;/a&gt; found a 5x difference in Pass@1 HumanEval performance using Starcoder 15B between OCaml and Python. This performance gap has real consequences for developer productivity.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-05.png" alt="Slide 5"&gt;
&lt;figcaption&gt;An existential threat to smaller language communities&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The gap between coding agent performance on mainstream versus niche languages could prove fatal to smaller language communities. New developers increasingly judge a programming language not just on its traditional tooling (compilers, debuggers, libraries) but also on how well AI coding agents support it. If agents struggle with OCaml, fewer new developers will choose to learn it, creating a vicious cycle.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-06.png" alt="Slide 6"&gt;
&lt;figcaption&gt;Three steps forward&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Rather than accept this fate, there are concrete steps the OCaml community can take to improve AI agent support. The talk outlines three actionable strategies that work together to address the training data gap and knowledge accessibility problems.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-07.png" alt="Slide 7"&gt;
&lt;figcaption&gt;Step 1: Where are the deficiencies?&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The first step is to systematically determine where AI agents are deficient for your specific, real-world use cases. You can't improve what you don't measure, and generic benchmarks might not capture the specific ways your community uses the language.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-08.png" alt="Slide 8"&gt;
&lt;figcaption&gt;Define success for your use case&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;To measure agent performance, you first need to define what "well" means for your particular use case. Everyone has different use cases e.g sync vs async, hosted vs local, fine-tunable.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-09.png" alt="Slide 9"&gt;
&lt;figcaption&gt;Our specific needs&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;For our evaluation at Cambridge, we had specific requirements: the models needed to run locally or on university servers (no reliance on external APIs), support teaching environments (helping students learn, not just solving problems), be reproducible and have provenance, and be fine-tunable for our specific needs.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-10.png" alt="Slide 10"&gt;
&lt;figcaption&gt;Our benchmark approach&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We chose to evaluate models using the first-year Computer Science Jupyter exercises ("ticks") from Cambridge's Foundations of Computer Science course. These exercises measure introductory CS problem-solving skills in OCaml and are directly relevant to our use case of supporting student learning. The exercises test concepts like recursion, data structures, and streams.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-11.png" alt="Slide 11"&gt;
&lt;figcaption&gt;Example: Finding subscripts of even elements&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This slide shows an actual exercise from the benchmark. Students need to write a function &lt;code&gt;getSubsOfEvens&lt;/code&gt; that returns the subscript positions of even integers in an array. The notebook provides test cases and automatically checks solutions - the same setup we used for evaluating AI models.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-12.png" alt="Slide 12"&gt;
&lt;figcaption&gt;More exercises: Binary trees and sets&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The exercises cover a range of computer science fundamentals. Here we see problems involving binary search tree operations (intersection) and set operations (remove). These test both algorithmic thinking and familiarity with OCaml's syntax and type system.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-13.png" alt="Slide 13"&gt;
&lt;figcaption&gt;Results: Model parameter count vs. success rate&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We benchmarked 19 different open-weight models, from 7B to 70B parameters. Within a family, larger models generally perform better, but there are interesting outliers. The Qwen3 family of models consistently perform well especially when using "thinking" mode. Claude-3.7-Sonnet (96.4%) sits at the top as our reference point for proprietary models.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-14.png" alt="Slide 14"&gt;
&lt;figcaption&gt;Key finding: Qwen3 performance with reasoning&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Qwen3-32b with thinking mode achieved 94.2% success rate, nearly matching Claude-3.7 Sonnet's 96.4%. Without thinking mode, the same model scores only 62.4%. This demonstrates that reasoning significantly improves performance on OCaml tasks, and that, on this task, self-hostable models can achieve near-frontier performance when given space to reason. The cost is increased latency and higher token usage.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-15.png" alt="Slide 15"&gt;
&lt;figcaption&gt;Common mistakes AI models make&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Smaller models frequently make syntax errors. Type system confusion is very common - using integer operators (like &lt;code&gt;+&lt;/code&gt;) on floats is a recurring issue. Models hallucinate functions that don't exist in the standard library, such as &lt;code&gt;List.sub&lt;/code&gt; or &lt;code&gt;List.combinations&lt;/code&gt;, and often assume the Core library or Format module are available when they're not. Recursion errors are also frequent: forgetting the &lt;code&gt;rec&lt;/code&gt; keyword, using incorrect base cases, or failing to make recursive progress.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-16.png" alt="Slide 16"&gt;
&lt;figcaption&gt;Step 2: Contribute to benchmarks&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Once you've identified deficiencies for your use cases, the second step is to contribute those tasks to public benchmarks. This is how you signal to AI labs what matters to your community.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-17.png" alt="Slide 17"&gt;
&lt;figcaption&gt;Add OCaml use cases to public benchmarks&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;AI organizations report performance on public benchmarks like &lt;a href="https://www.swebench.com/"&gt;SWE-bench&lt;/a&gt; and &lt;a href="https://github.com/laude-institute/terminal-bench"&gt;terminal-bench&lt;/a&gt; when releasing new models. They actively train their models to improve on these benchmarks. By adding OCaml-specific tasks that you care about to these benchmarks, you create an incentive for labs to improve their OCaml capabilities. If OCaml tasks are on the benchmark, models will get better at OCaml.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-18.png" alt="Slide 18"&gt;
&lt;figcaption&gt;Example: OCaml GC bug fix task&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;As a concrete example, I spend a significant amount of time debugging the garbage collector in OCaml and I found frontier models were still very poor at aiding me do that. So I contributed a task to terminal-bench that requires an agent to debug a segmentation fault in the OCaml garbage collector. In hindsight I worry this was a short-sighted career move (since I'm teaching agents to replace my debugging work).&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-19.png" alt="Slide 19"&gt;
&lt;figcaption&gt;What the GC debugging task requires&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The task is genuinely difficult and tests multiple capabilities: (1) build the OCaml compiler and runtime, (2) reproduce a GC failure, (3) debug with gdb, (4) patch C code, and (5) verify the fix. Completing this requires reading HACKING.adoc to understand the build system, navigating OCaml's runtime C code, and using debugging tools effectively - exactly the kind of complex, multi-step reasoning we want agents to excel at.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-20.png" alt="Slide 20"&gt;
&lt;figcaption&gt;The agents are finding it challenging&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The task is proving quite difficult for agents. As evidenced by these GitHub PRs, the timeout for the fix-ocaml-gc task has been increased multiple times because agents are struggling to complete it within the time limit. This is actually good - it means the task is pushing the boundaries of current agent capabilities and driving improvement.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-21.png" alt="Slide 21"&gt;
&lt;figcaption&gt;Continuous effort required&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Contributing to benchmarks isn't a one-time activity. It needs to be done constantly because benchmarks eventually get "saturated" (models overfit to them) or are leaked into new training sets. The community needs to continuously create new, challenging tasks that represent real OCaml development work to maintain pressure on AI labs to improve their OCaml support.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-22.png" alt="Slide 22"&gt;
&lt;figcaption&gt;Step 3: Tools and documentation&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The third step addresses the immediate problem: even if we can't add more OCaml to training data, we can bridge the knowledge gap by providing good agent-friendly tools and documentation. This can compensate for the lack of training exposure.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-23.png" alt="Slide 23"&gt;
&lt;figcaption&gt;Two complementary approaches&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;There are two main approaches: agent-friendly documentation and tools built on the Model Context Protocol (MCP). Documentation needs to be clean and parseable, while tools give agents the ability to search, discover, and navigate the OCaml ecosystem programmatically.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-24.png" alt="Slide 24"&gt;
&lt;figcaption&gt;What humans see: clean documentation&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;When we visit ocaml.org documentation, we see nicely formatted pages with the information we need. The HTML rendering makes it easy for humans to navigate and understand the API documentation.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-25.png" alt="Slide 25"&gt;
&lt;figcaption&gt;What agents see: HTML soup&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The problem is that when an agent accesses the same documentation, it sees a mix of content and messy HTML markup. This wastes valuable space in the model's limited context window and makes it harder to extract the relevant information. The signal-to-noise ratio is terrible for agents trying to understand OCaml APIs.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-26.png" alt="Slide 26"&gt;
&lt;figcaption&gt;What we should provide: clean markdown&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The solution is to provide clean, markdown-only versions of documentation. This gives agents the information they need without the HTML clutter. Recent improvements to odoc have merged the capability to generate markdown output, and emerging standards like LLMs.txt files provide additional ways to make documentation agent-accessible.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-27.png" alt="Slide 27"&gt;
&lt;figcaption&gt;odoc-llm: MCP tools for OCaml&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Beyond documentation, we can provide tools that agents can actively use. Along with &lt;a href="https://jon.recoil.org"&gt;Jon Ludlam&lt;/a&gt; I've built a prototype called odoc-llm that uses the Model Context Protocol to give agents a set of tools for interacting with the OCaml ecosystem. These tools allow agents to search for packages by functionality, get concise summaries of modules, and search through local project documentation using Sherlocode. This is critical for helping agents discover and use packages they were never trained on. The search uses a hybrid dense and sparse approach. Finding functionality in the OCaml ecosystem is genuinely hard, even for humans.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/ocaml_ai/slide-28.png" alt="Slide 28"&gt;
&lt;figcaption&gt;Recap: Three actionable steps&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;To summarize: the OCaml community can fight back against the existential threat posed by poor AI agent support through three concrete steps. First, determine where agents are deficient for your specific use cases through systematic evaluation. Second, contribute those use cases to public benchmarks to incentivize AI labs to improve. Third, bridge the knowledge gap with agent-friendly documentation and tools that compensate for the lack of training data. With these steps we can try to close the performance gap.&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>Can a model trained on satellite data really find brambles on the ground?</title><link href="https://www.toao.com/blog/can-we-really-see-brambles-from-space" rel="alternate"></link><published>2025-09-24T21:04:00+01:00</published><updated>2025-09-24T21:17:18+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-09-24:/blog/can-we-really-see-brambles-from-space</id><summary type="html">&lt;p&gt;Can a model trained on satellite data really find brambles on the ground? We put a new model to the test with a field trip around Cambridge. The results were surprisingly good and taught us a lot about the model's strengths and weaknesses.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Over the summer &lt;a href="https://gabrielmahler.org"&gt;Gabriel Mahler&lt;/a&gt; has been conducting research on &lt;a href="https://gabrielmahler.org/environment/ai/ml/%F0%9F%A6%94/2025/07/04/hedgehogs01.html"&gt;hedgehog habitat mapping&lt;/a&gt; using &lt;a href="https://gabrielmahler.org/environment/ai/ml/%F0%9F%A6%94/2025/07/13/hedgehogs02.html"&gt;Agent Based Models (ABMs)&lt;/a&gt; and remote sensing. Hedgehogs seem to like &lt;a href="https://en.wikipedia.org/wiki/Rubus"&gt;brambles&lt;/a&gt; and so as part of his work he has produced a &lt;a href="https://gabrielmahler.org/environment/ai/ml/%F0%9F%A6%94/2025/08/07/summer5.html"&gt;bramble map&lt;/a&gt;. He did this by combining the &lt;a href="https://arxiv.org/abs/2506.20380"&gt;TESSERA earth representation embeddings&lt;/a&gt; (using the &lt;a href="https://github.com/ucam-eo/geotessera"&gt;geotessera&lt;/a&gt; library) with data from &lt;a href="https://www.inaturalist.org/"&gt;iNaturalist&lt;/a&gt;. The current model is an ensemble of &lt;a href="https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html"&gt;logistic regression&lt;/a&gt; and a &lt;a href="https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html"&gt;knn&lt;/a&gt; classifier.&lt;/p&gt;
&lt;p&gt;Can we really see brambles from space? What better way to test the model than a quick field trip around Cambridge. Gabriel, &lt;a href="https://anil.recoil.org/"&gt;Anil&lt;/a&gt;, &lt;a href="https://www.shaneweisz.com/"&gt;Shane&lt;/a&gt; and I did just that today.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_140445.jpg" alt="Gabriel's model overlaid on a map - which was quite hard to read in outdoor sunlight"&gt;
&lt;figcaption&gt;Gabriel's model overlaid on a map - which was quite hard to read in outdoor sunlight&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We started at Milton Community Centre, as the model was relatively confident there were brambles near the car park and along the path to Milton Park. It took us about 20 seconds to find the first one in an area indicated by the model.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_130422.jpg" alt="Our first bramble!"&gt;
&lt;figcaption&gt;Our first bramble!&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;So it turns out that there's a lot of bramble between the community center and entrance to Milton Country Park. We stopped six or seven times before reaching the park entrance. While the model predicted we'd find brambles all over the park, we went for the few areas of very high confidence near the entrance. In every place we checked, we found pretty significant amounts of bramble.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_131517.jpg" alt="Some bramble on both sides of the path near the park entrance"&gt;
&lt;figcaption&gt;Some bramble on both sides of the path near the park entrance&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/4bad2b6d-8b50-476d-9626-108ae1533a90_1_105_c.jpeg" alt="Trying to navigate using the model"&gt;
&lt;figcaption&gt;Trying to navigate using the model&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/b268335a-6128-4ffa-8895-d1eb4eabc224_1_105_c.jpeg" alt="I was fairly sure it was that way"&gt;
&lt;figcaption&gt;I was fairly sure it was in that direction (and thankfully it was)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We collected photos of all the places we stopped, as well as recording our GPS location. One thought while out exploring is that the model did a great job predicting where we would find very large quantities of bramble without any cover. It didn't have high confidence in other areas where we found smaller brambles under partial cover. Since TESSERA is learned representation from remote sensing data (Sentinel 1 and 2), it would make sense that bramble partially obscured from above might be harder to spot. This is something we can potentially tease apart when we have more validation data.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_131651.jpg" alt="And more bramble"&gt;
&lt;figcaption&gt;And more bramble&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/20250924_130606.jpg" alt="Stopping to check the model"&gt;
&lt;figcaption&gt;Stopping to check the model&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src="/static/20250924_134801.jpg" alt="Stopping to take a photo of a very photogenic bee"&gt;
&lt;figcaption&gt;Stopping to take a photo of a very photogenic bee&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Finally, we were satisfied the model was doing a good job in the park area and decided to pick a hotspot the model was predicting in part of a residential street. We drove over to find an empty plot that did indeed have a lot of bramble!&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_141728.jpg" alt="Empty area that had a lot of bramble"&gt;
&lt;figcaption&gt;Empty area that had a lot of bramble&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Another hotspot was on Fen Road and we stopped by to find this absolute unit:&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_140247.jpg" alt="Absolute unit of bramble"&gt;
&lt;figcaption&gt;Absolute unit of bramble&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Finally, we headed back in to Cambridge to see what one of the big hotspots in North Cambridge was like. To our amusement we ended up at the local nature reserve Bramblefields, which, true to its name, has a lot of bramble.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="/static/20250924_143514.jpg" alt="Bramblefields"&gt;
&lt;figcaption&gt;Bramblefields&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I was pleasantly surprised by how good Gabriel's model was for its simplicity. Great work!&lt;/p&gt;
&lt;p&gt;We had hoped to actually re-run the model based on the data we were gathering but that proved tricky on a laptop, in a park. Given the richness of the TESSERA embeddings and the simplicity of the classifiers being used, a mobile phone-based human-in-the-loop active learning setup could be practical..&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>Adding an OCaml GC debugging task to terminal-bench</title><link href="https://www.toao.com/blog/gc-debug-terminal-bench" rel="alternate"></link><published>2025-08-20T10:01:00+01:00</published><updated>2025-08-20T17:48:52+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-08-20:/blog/gc-debug-terminal-bench</id><summary type="html">&lt;p&gt;I stumbled onto &lt;a href="https://www.tbench.ai/"&gt;terminal-bench&lt;/a&gt; a few weeks ago while researching datasets to evaluate agents. It contains around 120 tasks that need to be completed using a terminal..&lt;/p&gt;</summary><content type="html">&lt;p&gt;I stumbled onto &lt;a href="https://www.tbench.ai/"&gt;terminal-bench&lt;/a&gt; a few weeks ago while researching datasets to evaluate agents. It contains around 120 tasks that need to be completed using a terminal, they range from easy things like &lt;a href="https://github.com/laude-institute/terminal-bench/tree/main/tasks/fix-permissions"&gt;fixing permissions&lt;/a&gt; to more tricky things like &lt;a href="https://github.com/laude-institute/terminal-bench/tree/main/tasks/fix-git"&gt;finding lost changes in git&lt;/a&gt; and &lt;a href="https://github.com/laude-institute/terminal-bench/tree/main/tasks/install-windows-xp"&gt;installing windows xp (!)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To that collection, we can now add a freshly-merged task focused on finding and fixing &lt;a href="https://github.com/laude-institute/terminal-bench/tree/main/tasks/fix-ocaml-gc"&gt;a bug in the OCaml GC&lt;/a&gt;. This task is designed to be difficult; it involves a subtle change that isn't obvious at first pass even for experts and mirrors a similar real issue I encountered earlier in the year. Solving it requires interactive debugging.&lt;/p&gt;
&lt;p&gt;As more model providers report performance on terminal-bench, it's a great opportunity to add tasks for common development workflows that aren't currently covered. This could include more native debugging tasks, as well as some general sysadmin tasks - though the latter might be tricky because the containers tasks run in are unprivileged. I'm sure &lt;a href="https://www.tunbury.org/"&gt;Mark Elvers&lt;/a&gt; has some good ideas..&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>Last three months in OCaml (July 2025)</title><link href="https://www.toao.com/blog/ocaml-0725" rel="alternate"></link><published>2025-07-15T10:01:00+01:00</published><updated>2025-11-16T11:05:03+00:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-07-15:/blog/ocaml-0725</id><summary type="html">&lt;p&gt;A look at recent OCaml projects, from benchmarking AI code models and building new agentic tools to improvements in the garbage collector.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Thanks to sponsorship from &lt;a href="https://www.tarides.com"&gt;Tarides&lt;/a&gt; I've been able to spend some time over the last few months hacking on various OCaml-related projects. Some of these I've already published as blog posts, while others are still works in progress but this post gives brief summaries and ties some of them together for a bigger picture.&lt;/p&gt;
&lt;h1&gt;AI Coding Agents&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://jon.recoil.org/"&gt;Jon Ludlam&lt;/a&gt;, &lt;a href="https://anil.recoil.org/"&gt;Anil Madhavapeddy&lt;/a&gt; and I have spent a fair amount of time thinking broadly about AI coding agents. In addition to this post it's worth checking this &lt;a href="https://www.cl.cam.ac.uk/~avsm2/2025-ocaml-ai-draft1.pdf"&gt;short draft paper&lt;/a&gt; we've written that summaries our work so far and our thoughts for what could be needed going forward for OCaml to work well with AI tooling.&lt;/p&gt;
&lt;h2&gt;Benchmarking&lt;/h2&gt;
&lt;p&gt;Anil and Jon lecture the first year &lt;a href="https://www.cl.cam.ac.uk/teaching/2425/FoundsCS/"&gt;Foundation of Computer Science&lt;/a&gt; here at Cambridge, so we &lt;a href="https://toao.com/blog/ocaml-local-code-models"&gt;tested how well self-hostable models performed on first year coding exercises&lt;/a&gt;. We found the Qwen3 models were very effective, rivaling much bigger and older models. We plan to do some more benchmarking, especially as we've heard good things from community members about newer models like &lt;a href="https://mistral.ai/news/devstral"&gt;Mistral's devstral&lt;/a&gt; which has &lt;a href="https://mistral.ai/news/devstral-2507"&gt;just been updated&lt;/a&gt;. Before we can do that though, we want to build a more extensive set of benchmarks. A step in that direction is &lt;a href="https://toao.com/blog/opam-archive-dataset"&gt;opam-archive-dataset&lt;/a&gt; which is a continuously-updated parquet dataset of all source code in opam. We've also been looking at &lt;a href="https://arxiv.org/abs/2504.14757"&gt;SWE-Synth&lt;/a&gt; and how we would apply a similar method for synthesising across community OCaml projects.&lt;/p&gt;
&lt;h2&gt;Agentic tooling&lt;/h2&gt;
&lt;p&gt;There are coding models that we can't modify ourselves&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt; and which users access remotely. Nearly all agents using these coding models support tool use through the &lt;a href="https://modelcontextprotocol.io/introduction"&gt;Model Context Protocol&lt;/a&gt;. We've started working on a tool &lt;a href="https://github.com/sadiqj/odoc-llm"&gt;odoc-llm&lt;/a&gt; which enables natural language search of functionality over all packages and libraries in opam - in a way that can be hosted centraly as a remote MCP server. It's still a work in progress and Jon is planning to write something more extensive once we've fixed the last few issues. We've mentioned a few other potential tools in the &lt;a href="https://www.cl.cam.ac.uk/~avsm2/2025-ocaml-ai-draft1.pdf"&gt;draft piece&lt;/a&gt; and if anyone in the community is working on any of them or would like to collaborate then please do get in touch!&lt;/p&gt;
&lt;p&gt;I've also been exploring using simple collaboration between coding models and created &lt;a href="https://github.com/sadiqj/check-with-gemini"&gt;a very simple MCP server&lt;/a&gt; that lets you use gemini-cli as tool in another agent. Mostly I use this to have Claude Code call Gemini to check it's work - this can be helpful for tasks that involve analysing larger code bases where Gemini's larger context window is useful.&lt;/p&gt;
&lt;h1&gt;The OCaml runtime&lt;/h1&gt;
&lt;p&gt;In addition to the forward-looking work around AI models I've also been doing a bit of runtime maintenance. The &lt;a href="https://github.com/ocaml/ocaml/pull/13616"&gt;change to the shared heap's free list representation&lt;/a&gt; has gone through two stages of review and should land fairly soon. We're just waiting on some final performance testing before merging.&lt;/p&gt;
&lt;p&gt;I had a fun debugging session with &lt;a href="https://janmidtgaard.dk/"&gt;Jan Midtgaard&lt;/a&gt; trying to figure out what could have caused &lt;a href="https://github.com/ocaml/ocaml/issues/13739"&gt;ocaml issue 13739&lt;/a&gt;. It turned out that terminating domains could orphan shared pools in parallel with a running stop-the-world section, which was unexpected and bad as it could lead to a segfault or memory corruption if you were very unfortunate. &lt;a href="https://gallium.inria.fr/~scherer/"&gt;Gabriel Scherer&lt;/a&gt; fixed this in &lt;a href="https://github.com/ocaml/ocaml/pull/14025"&gt;ocaml pr 14025&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lastly with the GC there is the long-running compactor unification between the &lt;a href="https://github.com/ocaml/ocaml/blob/trunk/runtime/shared_heap.c#L1066"&gt;trunk ocaml compactor&lt;/a&gt; and &lt;a href="https://github.com/oxcaml/oxcaml/blob/main/runtime/shared_heap.c#L2166"&gt;OxCaml compactor&lt;/a&gt;&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;. The OxCaml compactor is a bit more expensive than trunk but plays much better with virtual memory. This helps reduce memory usage and improve performance in large, long-running applications. I suspect proposing the OxCaml compactor for trunk will be something worth doing next quarter.&lt;/p&gt;
&lt;p&gt;Finally, there have a number of &lt;a href="https://github.com/ocaml/ocaml/pull/14035"&gt;small&lt;/a&gt; &lt;a href="https://github.com/ocaml/ocaml/pull/13970"&gt;fixes&lt;/a&gt; &lt;a href="https://github.com/ocaml/ocaml/pull/13785"&gt;to&lt;/a&gt; runtime events. It's nice to see these and new feature requests appearing.&lt;/p&gt;
&lt;h2&gt;Projects&lt;/h2&gt;
&lt;p&gt;I had hoped to kick off a couple of undergraduate or masters projects along with &lt;a href="https://kcsrk.info/"&gt;KC Sivaramakrishnan&lt;/a&gt;, either at Cambridge or at IIT Madras. These are intended to be ways of mentoring students who think they might like to become contributors to the OCaml runtime. Unfortunately, February and March are a bit late for picking projects on academic courses.&lt;/p&gt;
&lt;p&gt;The first is implementing 'Early Release' for the OCaml minor collector. At present, all domains pause for a minor collection and wait until all domains have finished promoting their minor heaps before resuming. Consider each domain, it's minor heap consists of values that are reachable from other domains but also values that only it can reach. If all domains have promoted the global roots, their local roots, and their remembered set, then any domain that has finished promoting everything in their minor heap should be free to leave the minor collection and resume the mutator. This should mean that domains that do few minor heap allocations spend very little time in minor collections. We had an early prototype of this implemented a few years ago on the ocaml-multicore repo but we weren't convinced it was correct and ran out of time to fix it before upstreaming multicore. I think now is a good time to try again.&lt;/p&gt;
&lt;p&gt;The second project is 'Domain runtime work-sharing'. At present the number of domains needs to be less than the number of available physical cores. Going over that number can significantly reduce performance as domains wait to enter or complete a stop-the-world section in the runtime. Could we address this by restricting the number of domains running in a stop-the-world section to the number of physical cores and have that set of domains take on the work of all stopped domains? This is probably most advantageous for minor collections but could be done for major stop-the-world sections too.&lt;/p&gt;
&lt;p&gt;A third wild card project is exploring how we could use information from the GC and &lt;a href="https://docs.kernel.org/scheduler/sched-ext.html"&gt;Linux's sched_ext&lt;/a&gt; to better schedule highly parallel OCaml programs. This is a lot more speculative but might make for an interesting Masters project.&lt;/p&gt;
&lt;p&gt;If you are interested in any of these projects for the next academic year, please do get in touch with me or &lt;a href="https://kcsrk.info/"&gt;KC&lt;/a&gt;.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Mainly models from proprietary providers like OpenAI, Anthropic and Google or where the models are huge and uneconomical to run in anything less than large multi-user deployments, like Deepseek V3/R1 or Kimi 2.&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;OxCaml actually has two compactors, the trunk compactor and a new one. I only mean the new one here.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="posts"></category></entry><entry><title>Letting Claude Code check with Gemini</title><link href="https://www.toao.com/blog/check-with-gemini" rel="alternate"></link><published>2025-06-27T10:01:00+01:00</published><updated>2025-07-20T22:53:36+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-06-27:/blog/check-with-gemini</id><summary type="html">&lt;p&gt;A simple MCP server that enables Claude Code (or any MCP host) to check things with gemini-cli&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://github.com/google-gemini/gemini-cli"&gt;gemini-cli&lt;/a&gt; was released a few days ago with a very ample free tier that gives access to Gemini 2.5 Pro, a model with a million token context window. I'm already a user of &lt;a href="https://www.anthropic.com/claude-code"&gt;Claude Code&lt;/a&gt; so I wondered if I could have the two talk to each other. Enter &lt;a href="https://github.com/sadiqj/check-with-gemini/"&gt;check-with-gemini&lt;/a&gt; which is a simple mcp server and lets Claude Code call Gemini to help analyse codebases or check plans.&lt;/p&gt;
&lt;p&gt;The MCP server has a single tool &lt;code&gt;check_with_gemini&lt;/code&gt; which takes a prompt and content. Here's some examples of it in use.&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;I asked Claude Code to explain a codebase to me without Gemini:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Produce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll analyze this codebase to understand its structure and purpose, then provide a summary for potential contributors.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;tool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;44.6&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;28.6&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                                                                                                                                                  &lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pipeline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;creates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;academic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;their&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;relationships&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Built&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renders&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;thousands&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;space&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grouped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;representing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;semantic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;topics&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;containing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;titles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;coordinates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assignments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;multiple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depths&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;provides&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;showing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;camera&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;controls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dynamic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;follows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;architecture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;separation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;concerns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaperLoader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parsing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusterRenderer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;manages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;framework&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;provides&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;efficient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CMake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLFW3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FreeType2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Assimp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;areas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contribution&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;improving&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Windows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;currently&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;incomplete&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;optimizing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;larger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;datasets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;additional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enhancing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;algorithms&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;well&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;structured&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;organization&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;making&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;approachable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;developers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;familiar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;programming&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now with &lt;code&gt;check_with_gemini&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Produce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll analyze this codebase in depth and verify my understanding with Gemini before providing a summary for potential contributors.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Listed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1119&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paths&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;**/*&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;README&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;92&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;557&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csv_loader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;174&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Bash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;oneline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;903&lt;/span&gt;&lt;span class="n"&gt;a1c0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paused&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;ab728d8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Reduce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vignette&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="n"&gt;cb10e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;README&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;paper_loader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;122&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;112&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check_with_gemini&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;check_with_gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MCP&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Review this analysis of a C++ OpenGL visualization project for scientific papers. Is my understanding correct?&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;This is an AI Pipeline Visualization project&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Loads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scientific&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;containing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;titles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inclusion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assignments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depths&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;n2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Visualizes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;diffuse&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ambient&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lighting&lt;/span&gt;\&lt;span class="n"&gt;n3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Groups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;represented&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparent&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;\&lt;span class="n"&gt;n4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Provides&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;progresses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chronologically&lt;/span&gt;\&lt;span class="n"&gt;n5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Features&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;charts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;showing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;distributions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;viewing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;toggles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;controls&lt;/span&gt;\&lt;span class="n"&gt;n6&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CMake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;libraries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLFW3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLAD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Assimp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FreeType2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convhull_3d&lt;/span&gt;\&lt;span class="n"&gt;n7&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;focused&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;improvements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vignette&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;effects&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;processing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;updates&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nThe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;appears&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;designed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;exploring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;relationships&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;between&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scientific&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;space&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assessment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accurate&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;, content: &amp;quot;&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;manages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper_loader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Loads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;manages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustering&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;hierarchy&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Renders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hulls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Assimp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;loaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;opengl&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Contains&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mesh&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fonts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;focused&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Windows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;marked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;faulty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;generated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shaders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fonts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;textures&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Yes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assessment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;highly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accurate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;indeed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;tool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustered&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scientific&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;Your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;breakdown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;their&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;tool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustered&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scientific&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;research&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pipelines&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;thousands&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;colored&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;space&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;their&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assignments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;derived&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dimensionality&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reduction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;techniques&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grouped&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;multiple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;levels&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allowing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;researchers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;relationships&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;between&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;navigation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;progresses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chronologically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CMake&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;targeting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Windows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;incomplete&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dependencies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLFW3&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;GLAD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Assimp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FreeType2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;architecture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cleanly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;separates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;concerns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generation&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overlays&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;showing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;distributions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;focused&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;processing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;effects&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;improvements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enhance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;experience&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;identify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Examine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;functionality&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understanding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verification&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;commits&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We can also have Gemini do the initial work and have Claude Code check it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resutls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;gives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;they&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Produce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;short&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll analyze this codebase using Gemini and provide a comprehensive summary for potential contributors.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Listed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1119&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paths&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;92&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;557&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;**/*.{cpp,h,hpp,c,txt,md,json}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;README&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;tool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;50.0&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6.4&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;                                                                                                                                                                   &lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll have Gemini analyze the codebase comprehensively:&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check_with_gemini&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;check_with_gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MCP&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Please provide a comprehensive analysis of this codebase. This is a 3D visualization application for academic papers that uses OpenGL. I want you to analyze&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;architecture&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;provide&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insights&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;its&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;design&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patterns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;implementation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;approaches&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Consider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;organization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;\&lt;span class="n"&gt;n2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;graphics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;programming&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;best&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;practices&lt;/span&gt;\&lt;span class="n"&gt;n3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;\&lt;span class="n"&gt;n4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Performance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;considerations&lt;/span&gt;\&lt;span class="n"&gt;n5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;robustness&lt;/span&gt;\&lt;span class="n"&gt;n6&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maintainability&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extensibility&lt;/span&gt;\&lt;span class="n"&gt;n7&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;potential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stability&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;issues&lt;/span&gt;\&lt;span class="n"&gt;n8&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Overall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;software&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nBe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;thorough&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;critical&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analysis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Point&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strengths&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;weaknesses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;, content: &amp;quot;&lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;called&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;AI Pipeline Visualisation&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt; that renders&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="n"&gt;academic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;space&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;organized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Here&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s the key information:&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s1"&gt;## Core Architecture:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;- Built with C++20, OpenGL 4.1, CMake build&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLFW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;windowing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLAD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Assimp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FreeType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fonts&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapper&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaperLoader&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Shader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;## Main Files Structure:\n- main.cpp: Main application loop with animation, rendering, and&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opengl&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Core&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;framework&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;paper_loader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Loads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Generates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renders&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hulls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opengl&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;shader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Shader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;program&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;## Key Code Snippets:\n\n### main.cpp (main loop):\n```cpp\n// Main rendering loop&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;\&lt;span class="n"&gt;nwhile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shouldClose&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;handleInput&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enablePostProcessing&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Render&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pointShader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pointShader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setMat4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;projection&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;, app.getPerspectiveMatrix());&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    pointShader.setMat4(&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;view&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;, app.getViewMatrix());&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;span class="w"&gt;                                              &lt;/span&gt;&lt;span class="n"&gt;glDrawArraysInstanced&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_TRIANGLES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;static_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paperData&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Render&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sorting&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sortedClusters&lt;/span&gt;&lt;span class="p"&gt;{};&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CLUSTER_DEPTH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Sort&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparency&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                                  &lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getCameraPosition&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusterData&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sortedClusters&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;make_pair&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;Animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;updates&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;animationProgress&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ANIMATION_SPEED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getDeltaTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;### src/opengl/app.cpp (OpenGL framework):\n```cpp\nclass App {\n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;GLFWwindow&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Camera&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;PostProcessor&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;postProcessor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb nb-Type"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;glfwInit&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;glfwWindowHint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GLFW_CONTEXT_VERSION_MAJOR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;glfwWindowHint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GLFW_CONTEXT_VERSION_MINOR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="n"&gt;glfwWindowHint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GLFW_OPENGL_PROFILE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLFW_OPENGL_CORE_PROFILE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glfwCreateWindow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_str&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;gladLoadGLLoader&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;GLADloadproc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;glfwGetProcAddress&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;### src/paper_loader.cpp (data&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;\&lt;span class="n"&gt;nclass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaperLoader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Paper&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Cluster&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb nb-Type"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loadFromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Parse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wide&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;wifstream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imbue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;en_US.UTF-8&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;));&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;        &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;        // Process each paper line&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;        while (std::getline(file, line)) {&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;            Paper paper;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;span class="w"&gt;                                             &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Parse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;coordinates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inclusion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;stof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;stof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb nb-Type"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generateClusters&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Generate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;levels&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generateClusterLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;###&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;\&lt;span class="n"&gt;nclass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusterRenderer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusterData&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusterData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb nb-Type"&gt;void&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;generateClusters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Cluster&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;levelClusters&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;levelClusters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Generate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;positions&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;ConvexHull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convhull_3d_build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vertices&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                                          &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ofstream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;objFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;data/cluster_models/cluster_&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt; + &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;_&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt; + std::to_string(id) + &lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;.obj&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;);&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;                // Write vertices and faces&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;            }&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;        }&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    }&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    void&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;renderCluster&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Shader&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shader&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;mat4&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;projection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;mat4&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;ClusterData&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getClusterData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;shader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setVec3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;color&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;, color);&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;        shader.setMat4(&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;model&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;, data-&amp;gt;modelMatrix);&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;glBindVertexArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;VAO&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;glDrawElements&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_TRIANGLES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;indexCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GL_UNSIGNED_INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;### Shader&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;examples&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;glsl&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;#version 410 core\nlayout (location = 0) in vec3 aPos;\nlayout (location = 1) in vec3 aNormal;\nlayout&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;\&lt;span class="n"&gt;nlayout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aIncluded&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inclusion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nuniform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mat4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;projection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;nout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FragPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;nout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Included&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nvoid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;worldPos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aPos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aOffset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;gl_Position&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;projection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;vec4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;worldPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;FragPos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;worldPos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aNormal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Included&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aIncluded&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;frag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Transparent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;#version 410&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;\&lt;span class="n"&gt;nin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FragPos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;nuniform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CameraPos&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nvoid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Blinn&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Phong&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lighting&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lightDir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CameraPos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FragPos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lightDir&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;gl_FragColor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;vec4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Semi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;transparent&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;##&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;CMakeLists&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cmake&lt;/span&gt;\&lt;span class="n"&gt;nproject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VERSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DESCRIPTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;AI Pipeline Visualisation&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt; LANGUAGES CXX)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;set(CMAKE_CXX_STANDARD 20)&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;Cross&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;linking&lt;/span&gt;\&lt;span class="n"&gt;nif&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CMAKE_SYSTEM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MATCHES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_LIBS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLU&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glfw3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assimp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;freetype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;include_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;nendif&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="c1"&gt;# Copy assets and shaders to build directory\nadd_custom_target(copy_assets\n    COMMAND&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CMAKE_COMMAND&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;copy_directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CMAKE_CURRENT_LIST_DIR&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CMAKE_CURRENT_BINARY_DIR&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nThe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;academic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;them&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;groups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;them&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;provides&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;controls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploration&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;timed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;more&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;concise&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analysis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;check_with_gemini&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;check_with_gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MCP&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Analyze this 3D visualization codebase for code quality, architecture, and potential issues. Focus on OpenGL best practices, memory management, error handling,&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;software&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Provide&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;both&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strengths&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;weaknesses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;, content: &amp;quot;&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;academic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;these&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Architecture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;GLFW&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaperLoader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusterRenderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generation&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Shader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Patterns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nMain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;\&lt;span class="n"&gt;nwhile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shouldClose&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;handleInput&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;glDrawArraysInstanced&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_TRIANGLES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paperCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Transparent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sorting&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vec3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sortedClusters&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cameraPos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusterPos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sortedClusters&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusterData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Render&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;back&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nResource&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;\&lt;span class="n"&gt;nclass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;GLFWwindow&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;framebuffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;colorTexture&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depthTexture&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;glDeleteFramebuffers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                                            &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;framebuffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;glfwTerminate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wide&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;\&lt;span class="n"&gt;nvoid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaperLoader&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;loadFromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb nb-Type"&gt;float&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;wifstream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imbue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;\&lt;span class="s2"&gt;&amp;quot;en_US.UTF-8&lt;/span&gt;&lt;span class="se"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="s2"&gt;));&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    // Parse CSV data, handle UTF-8 paper titles&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;```&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;OpenGL state&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;\&lt;span class="n"&gt;nvoid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;enableDepthTesting&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;glEnable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_DEPTH_TEST&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;glDepthFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_LESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;nvoid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;enableBlending&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;glEnable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_BLEND&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;glBlendFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GL_SRC_ALPHA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GL_ONE_MINUS_SRC_ALPHA&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;```&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Libraries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLFW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLAD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GLM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Assimp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FreeType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvexHull3D&lt;/span&gt;\&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Features&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;span class="w"&gt;                                           &lt;/span&gt;&lt;span class="n"&gt;Instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;processing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;First&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll conduct a comprehensive search of the codebase to identify all C++ and header files. This will give me a complete picture of the project&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;its&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Okay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s a lot of fi&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;les&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll focus on the core application logic in the `src` directory and the root-level `.cpp` files. The `include` and `lib` directories appear to contain third-p&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;arty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;libraries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ll exclude those from the primary analysis.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;



&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis by examining specific code examples to verify the claims:&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opengl&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;183&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opengl&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;delete|new|malloc|free&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*.cpp&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☐&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;After&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis against the actual codebase, I found it to be largely accurate and insightful. The analysis correctly identifies the use of raw pointers (_defaultShader and&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;_postProcessor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;146&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;151&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;issue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wstring2string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;503&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hardcoded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paths&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;throughout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assessment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;best&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;practices&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparency&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;also&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Todos&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;⎿&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Explore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;structure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Critically&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Gemini&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s analysis&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="err"&gt;☒&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;

&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Contributors&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sophisticated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;built&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;that&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;academic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;papers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;animated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cubes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;space&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;organized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clusters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hull&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;visualizations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;demonstrates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;solid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;software&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;practices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;separation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;concerns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;across&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;its&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;manages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;PaperLoader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ingestion&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;generation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ClusterRenderer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;creates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;convex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hulls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvexHull3D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;comprehensive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;techniques&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;including&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instanced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rendering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;proper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transparency&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sorting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;processing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;effects&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;supporting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;animation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;controls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;navigation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;architecture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;well&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;organized&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;appropriate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modern&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAII&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;principles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;management&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;established&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;graphics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;programming&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;patterns&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;though&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;some&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;areas&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;improvement&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;including&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inconsistent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;occasional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;smart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pointers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hardcoded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;contributors&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;should&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;comfortable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenGL&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;graphics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;programming&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;concepts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;understand&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mathematics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GLM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;familiar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;systems&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CMake&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;codebase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;includes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;comprehensive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;asset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;handling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shaders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fonts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;textures&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;supports&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;cross&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;focus&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Windows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;compatibility&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;complete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CSV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;loading&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;through&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hierarchical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clustering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;visualization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interactive&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;controls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exploring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;academic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;datasets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As you can see one of the downsides is that some of the calls to &lt;code&gt;check_with_gemini&lt;/code&gt; take longer than 30 seconds and so timeout.&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>Qwen3 Leads the Pack: Evaluating how Local LLMs tackle First Year CS OCaml exercises</title><link href="https://www.toao.com/blog/ocaml-local-code-models" rel="alternate"></link><published>2025-05-06T17:52:00+01:00</published><updated>2025-06-27T14:55:09+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-05-06:/blog/ocaml-local-code-models</id><summary type="html">&lt;p&gt;How well can locally-runnable language models handle OCaml code generation? We evaluate 19 open-weight LLMs on first-year Computer Science exercises, exploring the balance between model size, architecture, and reasoning capabilities for less mainstream programming languages.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;TL;DR&lt;/em&gt; Qwen3's self-hostable sized models are very strong and would score top-marks on Cambridge's first year Computer Science OCaml exercises.&lt;/p&gt;
&lt;p&gt;Large language models (LLMs) are transforming software development. What if you use a language outside the mainstream that has relatively little training data though? Worse, what if you want to use features that are still under development or only recently released? The model can't have seen those features during training and so won't make use of them when generating unless explicitly prompted to do so. My colleague &lt;a href="https://www.cst.cam.ac.uk/people/jjl25"&gt;Jon Ludlam&lt;/a&gt;, Anil Madhavapeddy and I &lt;a href="https://anil.recoil.org/notes/claude-copilot-sandbox"&gt;have been thinking about this&lt;/a&gt; in the context of OCaml and some of the &lt;a href="https://blog.janestreet.com/oxidizing-ocaml-locality/"&gt;new extensions under development at Jane Street&lt;/a&gt;. Having a process for teaching models to use novel language features would not just be useful for interactive code generation but could also enable retrofitting existing codebases or if cheap enough, could be used in the design process for the features themselves.&lt;/p&gt;
&lt;p&gt;Before we dived in though we wanted to understand just how good the kind of models are that a developer could run either locally or on a shared local inference server? To do that we used the OCaml tutorial problems first year Computer Science students at the university tackle on the &lt;a href="https://www.cl.cam.ac.uk/teaching/2425/FoundsCS/"&gt;Foundations of Computer Science&lt;/a&gt; course taught by Anil and Jon. These are &lt;a href="https://jon.recoil.org/blog/2025/04/this-site.html"&gt;interactive jupyter notebooks&lt;/a&gt; where students populate answer cells and their solutions are automatically checked. Each tutorial is known as a 'tick' and has one or more questions. Students must complete earlier questions in order to progress to later questions. There are also 'starred' ticks which are essentially stretch goals and harder than the non-starred ones.&lt;/p&gt;
&lt;h1&gt;Terminology&lt;/h1&gt;
&lt;p&gt;A quick bit of terminology that will help in the later sections:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tokens&lt;/em&gt; are the units that Large Language Models take as input and output. A token is roughly three quarters of a word in length on average and they come from a fixed vocabulary for a given model. Here's &lt;a href="https://huggingface.co/deepseek-ai/DeepSeek-R1/raw/main/tokenizer.json"&gt;Deepseek R1's vocab&lt;/a&gt; (warning it's about 8mb of json).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Reasoning models&lt;/em&gt; or a thinking mode when the model is given some space in which to reason through its approach to the problem before it generates an answer. After pre-training on very large text corpora reasoning models undergo a phase of Reinforcement Learning. If you want to know more, Sebastian Raschka has a &lt;a href="https://sebastianraschka.com/blog/2025/the-state-of-reinforcement-learning-for-llm-reasoning.html"&gt;great overview article&lt;/a&gt;. The latest Qwen3 models from Alibaba have the ability to selectively enable thinking mode. This lets you trade off latency and performance. More on this later.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;OpenRouter&lt;/em&gt; is a marketplace for LLM providers. It provides a unified OpenAI-compatible API and then routes requests to different model providers based on the model you specify and any filtering options (e.g., no training on data, support for certain features). If you only use proprietary models then this is less interesting, they are often only available via a small handful of APIs that largely have similar pricing (e.g., for Gemini you can go via the Gemini or Vertex API). If you use open weights models though, there are a plethora of providers all competing on price, latency and throughput. For example if you want &lt;a href="https://openrouter.ai/meta-llama/llama-3.3-70b-instruct"&gt;Llama 3.3 70B&lt;/a&gt; you can currently choose the cheapest (inference.net) at $0.10 per million tokens input and $0.25 per million tokens output with 1.02s time-to-first-token and 28.41 tokens per second throughput. On the other hand, if throughput is your primary concern then there's Groq at 372.2 tokens per second but you'll pay a premium at $0.59 in and $0.79 out.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Distillation&lt;/em&gt; is when you use the output of a much larger model to improve the performance of a smaller model. When releasing Deepseek-R1, Deepseek also released a series of smaller (originally non-Deepseek) models that had been fine-tuned on the outputs of Deepseek-R1.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mixture of experts&lt;/em&gt; is a type of architecture where only a subset of the network weights are activated for each token processed. This can lead to a performance win at inference time and is in contrast to a &lt;em&gt;dense&lt;/em&gt; model in which every process token interacts with every non-embedding model parameter.&lt;/p&gt;
&lt;h1&gt;Models&lt;/h1&gt;
&lt;p&gt;We took the following open weight models, using instruct variants models where available:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Google Gemma3 12B and 27B&lt;/li&gt;
    &lt;li&gt;Deepseek-R1-Llama 70B&lt;/li&gt;
    &lt;li&gt;Meta Llama-3.1 8B and 70B&lt;/li&gt;
    &lt;li&gt;Microsoft Phi-4&lt;/li&gt;
    &lt;li&gt;Mistral 8B&lt;/li&gt;
    &lt;li&gt;Mistral Nemo (12B)&lt;/li&gt;
    &lt;li&gt;Mistral Small 24B&lt;/li&gt;
    &lt;li&gt;Qwen 2.5 7B and 72B&lt;/li&gt;
    &lt;li&gt;Qwen 2.5 Coder 7B and 32B&lt;/li&gt;
    &lt;li&gt;Qwen 3 8B, 14B, 32B and 30BA3B (Thinking and non-thinking)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We gave models a similar setup to students. Each model had 3 attempts to complete each question by producing a code block that would pass the notebook's tests. If they produced a passing block of code they proceeded to the next question. We repeated this 5 times per model per tick. We used OpenRouter for inference.&lt;/p&gt;
&lt;p&gt;The tick questions tested a range of concepts such as recursion, data structures, streams etc.. We'll look at them in more depth in the results.&lt;/p&gt;
&lt;h1&gt;Results&lt;/h1&gt;
&lt;p&gt;Here's a graph of the success rate against parameter count for all models. Note the logarithmic x-axis:&lt;/p&gt;
&lt;style&gt;
.centered-graph {
    display: block;
    margin: 0 auto;
    max-width: 100%;
    padding: 10px;
}
&lt;/style&gt;

&lt;p&gt;&lt;img src="/static/model_parameters.png" alt="Performance against model parameters" class="centered-graph"&gt;&lt;/p&gt;
&lt;p&gt;And a table of &lt;b&gt;overall success rate&lt;/b&gt;. This is the percentage of tick-question pairs that a model was able to solve given 3 attempts.&lt;/p&gt;
&lt;style&gt;
.table-container {
    padding: 15px;
    margin: 0 auto;
    max-width: 830px; /* slightly wider than table to account for padding */
}

.stats-table {
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    width: 800px;
    max-width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    margin: 0 auto;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
    border-radius: 8px;
    overflow: hidden;
}

.stats-table thead tr {
    background-color: #4a5568; /* Slightly softer dark header */
    color: white;
    font-weight: 600; /* Slightly bolder */
    text-align: left;
}

.stats-table th, .stats-table td {
    padding: 14px 18px; /* Increased padding */
    border-bottom: 1px solid #e2e8f0; /* Lighter border */
    text-align: left; /* Ensure alignment */
}

.stats-table th:first-child, .stats-table td:first-child {
    text-align: left;
}


.stats-table tbody tr:nth-child(even) {
    background-color: #f7fafc; /* Lighter even row color */
}

.stats-table tbody tr:hover {
    background-color: #edf2f7; /* Softer hover color */
}

.stats-table td:first-child {
    font-weight: 500;
    color: #2d3748; /* Darker text for model names */
    max-width: 220px;
    word-break: break-word;
}

/* Adjusted success colors for better contrast/visual appeal */
.low-success { color: #e53e3e; } /* Slightly brighter red */
.med-success { color: #3182ce; font-weight: 600; } /* Bolder blue */
.high-success { color: #38a169; font-weight: 600; } /* Bolder green */

/* Center align percentage columns */
.stats-table th:not(:first-child), .stats-table td:not(:first-child) {
    text-align: center;
}
&lt;/style&gt;

&lt;div class="table-container"&gt;
&lt;table class="stats-table model-summary"&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;Model&lt;/th&gt;
                    &lt;th&gt;Overall Success Rate&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;anthropic/claude-3.7-sonnet:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;96.4%&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-32b:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;95.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-14b:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;84.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-30b-a3b:thinking&lt;/td&gt;
                    &lt;td class="high-success"&gt;83.0%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen-2.5-coder-32b-instruct&lt;/td&gt;
                    &lt;td class="med-success"&gt;77.6%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;meta-llama/llama-3.3-70b-instruct&lt;/td&gt;
                    &lt;td class="med-success"&gt;69.1%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-8b:thinking&lt;/td&gt;
                    &lt;td class="med-success"&gt;66.9%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-32b&lt;/td&gt;
                    &lt;td class="med-success"&gt;62.4%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;mistralai/mistral-small-3.1-24b-instruct&lt;/td&gt;
                    &lt;td class="med-success"&gt;58.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-14b&lt;/td&gt;
                    &lt;td class="med-success"&gt;56.4%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-30b-a3b&lt;/td&gt;
                    &lt;td class="med-success"&gt;48.5%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;deepseek/deepseek-r1-distill-llama-70b&lt;/td&gt;
                    &lt;td class="med-success"&gt;44.2%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;google/gemma-3-27b-it&lt;/td&gt;
                    &lt;td class="low-success"&gt;33.9%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;qwen/qwen3-8b&lt;/td&gt;
                    &lt;td class="low-success"&gt;33.9%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;microsoft/phi-4&lt;/td&gt;
                    &lt;td class="low-success"&gt;32.1%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;google/gemma-3-12b-it&lt;/td&gt;
                    &lt;td class="low-success"&gt;28.5%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;mistralai/mistral-nemo&lt;/td&gt;
                    &lt;td class="low-success"&gt;26.1%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;meta-llama/llama-3.1-8b-instruct&lt;/td&gt;
                    &lt;td class="low-success"&gt;25.5%&lt;/td&gt;
                &lt;/tr&gt;

                &lt;tr&gt;
                    &lt;td&gt;mistral/ministral-8b&lt;/td&gt;
                    &lt;td class="low-success"&gt;15.8%&lt;/td&gt;
                &lt;/tr&gt;

            &lt;/tbody&gt;
        &lt;/table&gt;
&lt;/div&gt;

&lt;h1&gt;High-level takeaways&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;Qwen 3 models performed very well&lt;/b&gt; The best performing model was qwen3-32b in thinking mode at 95.2%. This is very close to Anthropic's Claude 3.7 Sonnet with thinking. At Qwen3 32B's current &lt;a href="https://openrouter.ai/qwen/qwen3-32b"&gt;$0.10 per million input tokens and $0.30 per million output tokens&lt;/a&gt; this is up to 50x cheaper than &lt;a href="https://www.anthropic.com/pricing#api"&gt;Claude 3.7's $3 M in / $15 M out pricing&lt;/a&gt;. Even better the Qwen3 32B model is Apache2 licensed and so can be self-hosted. In addition, all Qwen3 models in non-thinking mode outperformed comparably-sized models from other families.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Qwen2.5's coding variant was the best non-thinking model.&lt;/b&gt; The Qwen2.5-Coder-32B model performed well at 77.6% and was the best non-thinking model. It outperformed Qwen3 32B and this means &lt;a href="https://x.com/ggerganov/status/1918373399891513571"&gt;the upcoming Qwen3-Coder model&lt;/a&gt; should be very strong.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Qwen3 with thinking on performed better than non-thinking variants.&lt;/b&gt; In every case allowing Qwen3 to think significantly improved performance. The qwen3-8b model with thinking on was very close in performance to llama-3.3-70b, a model almost an order of magnitude larger. Note though that this comes at the expense of increased latency and cost. In most cases thinking added 2-3,000 tokens of reasoning before the model produced its final answer, for Qwen3 32B on openrouter that is roughly a minute of thinking. There were also cases where the model entered a loop and kept reasoning until it hit the token limit.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Qwen3 30B-A3B MoE model could be a good compromise&lt;/b&gt; Whilst it has 30 billion parameters the MoE model only activates about 3 billion of them for each token processed. This can be a substantial performance win when doing inference and indeed you can see the throughput ratio on OpenRouter between &lt;a href="https://openrouter.ai/qwen/qwen3-32b"&gt;Qwen3 32B&lt;/a&gt; and &lt;a href="https://openrouter.ai/qwen/qwen3-30b-a3b"&gt;Qwen3 30B-A3B&lt;/a&gt;. I suspect that gap will widen as providers do more optimisation of their MoE serving code.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Within a family more parameters means better performance.&lt;/b&gt; Within the Gemma and Qwen families, larger parameter counts generally led to better performance, as seen in the graph. Presumably there is &lt;em&gt;some&lt;/em&gt; OCaml in the pretraining corpus and the larger models have a higher chance of retaining information from it?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Deepseek R1's distilled Llama 3.3 70B reasoning model did not beat base model.&lt;/b&gt; The Deepseek-R1-Llama-3.3-70B model which was produced by Deepseek by distilling from their large Deepseek R1 model had worse performance than the model it was based on Llama-3.3-70B.&lt;/p&gt;
&lt;h1&gt;What went wrong?&lt;/h1&gt;
&lt;p&gt;There were some consistent themes amongst failures across especially the smaller models. Here are some of the most common:&lt;/p&gt;
&lt;h2&gt;Syntax errors&lt;/h2&gt;
&lt;p&gt;Many models had basic syntax errors in their solutions, such as incorrect comment syntax or a lack of &lt;code&gt;in&lt;/code&gt;. There were also cases of incorrect function application syntax. A very common mistake was not including &lt;code&gt;rec&lt;/code&gt; for recursive functions.&lt;/p&gt;
&lt;h2&gt;Type system confusion&lt;/h2&gt;
&lt;p&gt;On several of the tick questions this involved confusing the int and float operators (+/+., &lt;em&gt;/&lt;/em&gt;.). A common pattern was changing just one of the operators in response to a compile error, then changing another on the next error, etc..&lt;/p&gt;
&lt;h2&gt;Hallucinated functions&lt;/h2&gt;
&lt;p&gt;Some failures came from hallucinating functions such as &lt;code&gt;List.sub&lt;/code&gt; or &lt;code&gt;List.combinations&lt;/code&gt;, as well as assuming things like &lt;code&gt;Core&lt;/code&gt; and &lt;code&gt;Format&lt;/code&gt; were available. This is curious as even small models (like Qwen2.5-Coder-7B) assumed Core was available and yet still made fundamental OCaml syntactic errors.&lt;/p&gt;
&lt;h2&gt;Recursion&lt;/h2&gt;
&lt;p&gt;Beyond the failure to include &lt;code&gt;rec&lt;/code&gt; the models struggled with recursion. There were several incorrect base cases in questions involving streams which resulted in a fair bit of non-termination in those questions. It would be interesting to try rewriting some of the tick questions as iterative and seeing whether success rates increase.&lt;/p&gt;
&lt;h1&gt;Limitations&lt;/h1&gt;
&lt;p&gt;These are only introductory tasks aimed at first year Computer Science students and so are not representative of the complexity of larger OCaml codebases that may also use advanced language features.&lt;/p&gt;
&lt;h1&gt;Summary&lt;/h1&gt;
&lt;p&gt;Qwen3 had an impressive showing. I had actually already written a draft of this blog post before Qwen3 was released, and re-running the evaluation to include it led to a very different outcome!&lt;/p&gt;
&lt;p&gt;So what next? It would be interesting to understand where the gap in performance is when thinking mode is on and off. Are there common mistakes Qwen3 is making when thinking is off?&lt;/p&gt;
&lt;p&gt;As a next step we clearly need to move beyond first-year Computer Science questions, especially as the top models are already saturating on this test. Anil reports performance on OCaml vibe-coded projects through Claude lags behind its abilities in Python.&lt;/p&gt;
&lt;p&gt;Next, how do we improve their performance? For this we really need more data. We now have a dataset of &lt;a href="https://huggingface.co/datasets/sadiqj/opam-archive-dataset"&gt;OCaml code extracted from opam&lt;/a&gt; that is regularly updated but still small (~80k ml/mli files) and it is unclear as to the difficulty level of each bit of code. This is important because there is good evidence (&lt;a href="https://arxiv.org/abs/2403.09472"&gt;Sun et al&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2504.00829"&gt;Ji et al&lt;/a&gt;) that going from easy to difficult examples when training via reinforcement learning can improve performance.&lt;/p&gt;
&lt;p&gt;One promising avenue is &lt;a href="https://arxiv.org/abs/2308.09895"&gt;Cassano et al&lt;/a&gt; who have done some work leveraging training data from 'high resource' languages to generate code and validation tests in target 'low resource' languages. This approach could be extended to novel language features, as well as being used for reinforcement learning rather than just fine-tuning.&lt;/p&gt;
&lt;p&gt;Unrelated to OCaml, I'm looking forward to testing out how these models perform on the &lt;a href="https://anil.recoil.org/projects/ce/"&gt;Conservation Evidence work&lt;/a&gt; that Anil and I are involved in. We currently self-host Deepseek-R1-Llama-3.3-70B and switching to Qwen3 32B could substantially improve the performance at one of our crucial bottlenecks.&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>A dataset of OCaml's Opam</title><link href="https://www.toao.com/blog/opam-archive-dataset" rel="alternate"></link><published>2025-05-01T10:01:00+01:00</published><updated>2025-06-27T14:55:09+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-05-01:/blog/opam-archive-dataset</id><summary type="html">&lt;p&gt;Introducing opam-archive-dataset: a Parquet dataset containing code from OCaml packages, designed to improve performance of language models for OCaml development through better training data&lt;/p&gt;</summary><content type="html">&lt;p&gt;If you have tried to use locally-hostable language models to develop OCaml code, then you will have noticed their performance significantly lags in more niche languages compared to Python or Javascript. &lt;a href="https://www.cst.cam.ac.uk/people/jjl25"&gt;Jon Ludlam&lt;/a&gt;, &lt;a href="https://anil.recoil.org/"&gt;Anil Madhavapeddy&lt;/a&gt; and I have been doing some work on this recently and there will be more on that soon.&lt;/p&gt;
&lt;p&gt;To improve code models, we first need data. To help with that I've created &lt;a href="https://huggingface.co/datasets/sadiqj/opam-archive-dataset"&gt;opam-archive-dataset&lt;/a&gt; which periodically takes the code for all packages from the &lt;a href="https://hub.docker.com/r/ocaml/opam/tags?name=archive"&gt;ocaml/opam:archive&lt;/a&gt; docker image, filters for the most recent version of each package, and then converts everything into the columnar parquet format. This is a very efficient format and results in a ~800MB set of files.&lt;/p&gt;
&lt;p&gt;To use the dataset and run queries over it, you can use the &lt;a href="https://huggingface.co/docs/datasets/en/load_hub"&gt;Hugging Face datasets library&lt;/a&gt; or if you prefer SQL then you can do the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gp"&gt;# &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;dataset&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;huggingface
&lt;span class="gp"&gt;sadiq@server:opam-archive$ &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://huggingface.co/datasets/sadiqj/opam-archive-dataset
&lt;span class="go"&gt;Cloning into &amp;#39;opam-archive-dataset&amp;#39;...&lt;/span&gt;
&lt;span class="go"&gt;remote: Enumerating objects: 17, done.&lt;/span&gt;
&lt;span class="go"&gt;remote: Total 17 (delta 0), reused 0 (delta 0), pack-reused 17 (from 1)&lt;/span&gt;
&lt;span class="go"&gt;Unpacking objects: 100% (17/17), 4.31 KiB | 315.00 KiB/s, done.&lt;/span&gt;
&lt;span class="go"&gt;Filtering content: 100% (3/3), 388.79 MiB | 14.30 MiB/s, done.&lt;/span&gt;

&lt;span class="gp"&gt;# &lt;/span&gt;grab&lt;span class="w"&gt; &lt;/span&gt;clickhouse
&lt;span class="gp"&gt;sadiq@server:opam-archive$ &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;https://clickhouse.com/&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sh
&lt;span class="go"&gt;Successfully downloaded the ClickHouse binary, you can run it as:&lt;/span&gt;
&lt;span class="go"&gt;    ./clickhouse&lt;/span&gt;

&lt;span class="go"&gt;You can also install it:&lt;/span&gt;
&lt;span class="go"&gt;sudo ./clickhouse install&lt;/span&gt;

&lt;span class="gp"&gt;# &lt;/span&gt;we&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;need&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;it!&lt;span class="w"&gt; &lt;/span&gt;We&lt;span class="w"&gt; &lt;/span&gt;use&lt;span class="w"&gt; &lt;/span&gt;clickhouse&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;
&lt;span class="gp"&gt;sadiq@server:opam-archive$ &lt;/span&gt;./clickhouse&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;

&lt;span class="go"&gt;./clickhouse local&lt;/span&gt;
&lt;span class="go"&gt;ClickHouse local version 25.5.1.1804 (official build).&lt;/span&gt;

&lt;span class="go"&gt;:) -- let&amp;#39;s have a look at a few rows&lt;/span&gt;
&lt;span class="go"&gt;SELECT * FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet) LIMIT 1;&lt;/span&gt;

&lt;span class="go"&gt;Query id: 0f786705-1568-40ac-837b-004457c3519d&lt;/span&gt;

&lt;span class="go"&gt;Row 1:&lt;/span&gt;
&lt;span class="go"&gt;──────&lt;/span&gt;
&lt;span class="go"&gt;package_name:  dune-action-plugin&lt;/span&gt;
&lt;span class="go"&gt;version:       3.18.1&lt;/span&gt;
&lt;span class="go"&gt;license:       MIT&lt;/span&gt;
&lt;span class="go"&gt;homepage:      https://github.com/ocaml/dune&lt;/span&gt;
&lt;span class="go"&gt;dev_repo:      git+https://github.com/ocaml/dune.git&lt;/span&gt;
&lt;span class="go"&gt;file_type:     dune&lt;/span&gt;
&lt;span class="go"&gt;file_path:     dune-3.18.1/test/blackbox-tests/test-cases/formatting/feature.t/enabled/dune-ocaml-syntax/dune&lt;/span&gt;
&lt;span class="go"&gt;file_contents: (* -*- tuareg -*- *)&lt;/span&gt;

&lt;span class="go"&gt;let&lt;/span&gt;
&lt;span class="gp gp-VirtualEnv"&gt;()&lt;/span&gt; &lt;span class="go"&gt;=&lt;/span&gt;
&lt;span class="go"&gt;Jbuild_plugin.V1.send {|&lt;/span&gt;
&lt;span class="go"&gt;(alias&lt;/span&gt;
&lt;span class="go"&gt; (name runtest)&lt;/span&gt;
&lt;span class="go"&gt; (action (echo &amp;quot;ocaml syntax&amp;quot;)))&lt;/span&gt;
&lt;span class="go"&gt;|}&lt;/span&gt;

&lt;span class="go"&gt;:) -- Let&amp;#39;s count how many rows we have&lt;/span&gt;
&lt;span class="go"&gt;SELECT COUNT(*) FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet);&lt;/span&gt;

&lt;span class="go"&gt;SELECT COUNT(*)&lt;/span&gt;
&lt;span class="go"&gt;FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet)&lt;/span&gt;

&lt;span class="go"&gt;Query id: 3ee6eb4b-13b7-47aa-be67-d027c81b47b0&lt;/span&gt;

&lt;span class="go"&gt;   ┌─COUNT()─┐&lt;/span&gt;
&lt;span class="go"&gt;1. │  198862 │&lt;/span&gt;
&lt;span class="go"&gt;   └─────────┘&lt;/span&gt;

&lt;span class="go"&gt;1 row in set. Elapsed: 0.013 sec. &lt;/span&gt;

&lt;span class="go"&gt;:) -- How many unique packages are spawning Domains?&lt;/span&gt;
&lt;span class="go"&gt;SELECT COUNT(DISTINCT package_name) FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet) WHERE position(&amp;#39;Domain.spawn&amp;#39;, file_contents) &amp;gt; 0;&lt;/span&gt;

&lt;span class="go"&gt;SELECT COUNTDistinct(package_name)&lt;/span&gt;
&lt;span class="go"&gt;FROM file(&amp;#39;opam-archive-dataset/data/&amp;#39;, Parquet)&lt;/span&gt;
&lt;span class="go"&gt;WHERE position(&amp;#39;Domain.spawn&amp;#39;, file_contents) &amp;gt; 0&lt;/span&gt;

&lt;span class="go"&gt;Query id: 6f0978d9-3907-4572-bf5e-99aa4e2fceb8&lt;/span&gt;

&lt;span class="go"&gt;   ┌─COUNTDistinct(package_name)─┐&lt;/span&gt;
&lt;span class="go"&gt;1. │                         193 │&lt;/span&gt;
&lt;span class="go"&gt;   └─────────────────────────────┘&lt;/span&gt;

&lt;span class="go"&gt;1 row in set. Elapsed: 0.723 sec. Processed 197.86 thousand rows, 402.85 MB (273.81 thousand rows/s., 557.48 MB/s.)&lt;/span&gt;
&lt;span class="go"&gt;Peak memory usage: 385.88 MiB.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We currently extract the package name, version, license, dev repo, file type (dune, opam, mli, ml, .c and .h), file path and the contents itself.&lt;/p&gt;
&lt;p&gt;If there are any extra fields that would be useful, let &lt;a href="https://bsky.app/profile/sadiq.toao.com"&gt;me&lt;/a&gt; know. Enjoy!&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>JSON output from Deepseek R1 and distills with llama.cpp</title><link href="https://www.toao.com/blog/json-output-from-deepseek-r1-and-distills-with-llamacpp" rel="alternate"></link><published>2025-01-30T17:52:00+00:00</published><updated>2025-01-30T18:36:52+00:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2025-01-30:/blog/json-output-from-deepseek-r1-and-distills-with-llamacpp</id><summary type="html">&lt;p&gt;Here's a workaround to get JSON output from Deepseek R1 and distills when using the llama.cpp OpenAI-compatible server endpoint&lt;/p&gt;</summary><content type="html">&lt;p&gt;We're evaluating Deepseek R1 and its distills for our project on &lt;a href="https://anil.recoil.org/projects/ce"&gt;identifying and extracting evidence from literature&lt;/a&gt;. One part of our pipeline needs a strong reasoning model with JSON structured output.&lt;/p&gt;
&lt;p&gt;Using llama-server's OpenAI compatible completion endpoint with response_format and JSON schema conflicts with the model's reasoning in &amp;lt;think&amp;gt; tags. Here's a workaround using the grammar functionality.&lt;/p&gt;
&lt;p&gt;First, grab &lt;a href="https://github.com/ggerganov/llama.cpp/blob/master/examples/json_schema_to_grammar.py"&gt;json_schema_to_grammar&lt;/a&gt; from the llama.cpp repo.&lt;/p&gt;
&lt;p&gt;Next you can use the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;convert_schema_to_grammar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json_schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;converter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json_schema_to_grammar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SchemaConverter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;prop_order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;
        &lt;span class="n"&gt;allow_fetch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;dotall&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;raw_pattern&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;converter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json_schema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;json-schema&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;json_grammar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;converter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format_grammar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# do the root gbnf grammar that handles the &amp;lt;think&amp;gt; and &amp;lt;/think&amp;gt; tags&lt;/span&gt;
    &lt;span class="c1"&gt;# lack of less-than didn&amp;#39;t hinder performance for us but ymmv!&lt;/span&gt;
    &lt;span class="n"&gt;base_rules&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="s2"&gt;root ::= &amp;quot;&amp;lt;think&amp;gt;&amp;quot; [^&amp;lt;]+ &amp;quot;&amp;lt;/think&amp;gt;&amp;quot; [&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;n]* json-schema&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_rules&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;json_grammar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then use the 'extra_body' parameter in your request:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;model&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;extra_body&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;grammar&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grammar&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Example below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Provide a fictional name and address using the following JSON schema:

{
  &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,
  &amp;quot;properties&amp;quot;: {
    &amp;quot;name&amp;quot;: {
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
    },
    &amp;quot;age&amp;quot;: {
      &amp;quot;type&amp;quot;: &amp;quot;integer&amp;quot;
    },
    &amp;quot;address&amp;quot;: {
      &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,
      &amp;quot;properties&amp;quot;: {
        &amp;quot;street&amp;quot;: {
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
        },
        &amp;quot;city&amp;quot;: {
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
        },
        &amp;quot;zip&amp;quot;: {
          &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;
        }
      }
    }
  }
}

&amp;lt;think&amp;gt;
Okay, so the user wants me to provide a fictional name and address following a specific JSON schema. Let me break this down.

First, the schema has an object with name, age, and address. The address itself is another object containing street, city, and zip. I need to make sure each field is of the correct type: strings for name, street, city, zip, and an integer for age.

I should come up with a plausible name. Maybe something common like Emily Carter. Age should be an adult, say 32. For the address, I&amp;#39;ll pick a street name, perhaps Maple Street, a number like 147. The city could be something like Riverton, and the zip code needs to be a 5-digit number, maybe 12345.

Wait, is Riverton a real city? I think there are places named Riverton in various states, but since it&amp;#39;s fictional, it doesn&amp;#39;t matter. Alternatively, I could make up a city name, but using a real one might be easier.

Putting it all together, I&amp;#39;ll structure the JSON with these values. I need to ensure that the syntax is correct, with proper commas and brackets. Also, the keys should match exactly: name, age, address, street, city, zip.

I should double-check that all the types are correct. Name is a string, age is an integer, and each part of the address is a string. That should satisfy the schema requirements.

I think that&amp;#39;s all. Time to put it together in the response.
&amp;lt;/think&amp;gt;

{
  &amp;quot;name&amp;quot;: &amp;quot;Emily Carter&amp;quot;,
  &amp;quot;age&amp;quot;: 32,
  &amp;quot;address&amp;quot;: {
    &amp;quot;street&amp;quot;: &amp;quot;147 Maple Street&amp;quot;,
    &amp;quot;city&amp;quot;: &amp;quot;Riverton&amp;quot;,
    &amp;quot;zip&amp;quot;: &amp;quot;12345&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This approach lets you preserve model reasoning while enforcing JSON output structure. Enjoy!&lt;/p&gt;</content><category term="posts"></category></entry><entry><title>Teaching Bloom Filters new tricks</title><link href="https://www.toao.com/blog/teaching-bloom-filters-new-tricks" rel="alternate"></link><published>2020-12-25T00:52:00+00:00</published><updated>2024-06-25T20:59:56+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2020-12-25:/blog/teaching-bloom-filters-new-tricks</id><summary type="html">&lt;p&gt;In this post we're going to discuss how to teach Bloom Filters new tricks. We'll start with examining Partitioned Bloom Filters and then look at ways we can generalise Bloom Filters to new and interesting uses. By the end of the post you will be able to use this generalised framework to come up with novel probabilistic data structures.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've had a few interesting conversations around text indexing recently with friends and something that's fallen out is that there are some really cool data structures you build that are extensions of Bloom filters. The techniques for constructing them don't seem to be that widely known so this blog post intends to remedy that.&lt;/p&gt;
&lt;p&gt;We will start by examining a variant of the traditional Bloom filter and then we'll look at ways we can generalise the model to produce new types of probabilistic data structures and understand what properties they might have.&lt;/p&gt;
&lt;h3&gt;Bloom Filters&lt;/h3&gt;
&lt;p&gt;To begin with, let's take a look at what a Bloom filter is and how it works so we're all on the same page.&lt;/p&gt;
&lt;p&gt;Loosely a Bloom filter is a data structure into which you can add a set of elements. Later you can query it with any of those elements and it will return true. Crucially it &lt;em&gt;might&lt;/em&gt; also return true for elements that weren't in the set with some (tunable) probability. The benefit you get from this trade-off is that Bloom filters can be very compact.&lt;/p&gt;
&lt;h4&gt;Trade-offs&lt;/h4&gt;
&lt;p&gt;How big this benefit is depends on two things. First, how high a probability of an incorrect answer (a false positive) your application can tolerate and second, how large the items are in the set you want to track.&lt;/p&gt;
&lt;p&gt;For the first case, let's look at a simple example. Imagine if you were a social network and you want to maintain a cache of your most active ten million users. Each user has is identified by a 32-bit integer. If we naively stored the identifiers of our most active million users we're need 320 million bits or 40 megabytes. On the other hand, if we're willing to accept a 1% false positive rate then a Bloom filter needs just over 11 megabytes. A decent win.&lt;/p&gt;
&lt;p&gt;The benefits become much greater as soon as you have large keys. As we'll see in a minute this is because Bloom filters use hashing to avoid storing the keys themselves. If instead of 32-bit user identifiers we are storing urls which could be 320 bits upwards then the win becomes significantly greater. Storing ten million is suddenly &amp;gt;400 megabytes but a bloom filter still clocks in at 11 megabytes for a 1% false positive rate or 17 megabytes for a 0.1% false positive rate.&lt;/p&gt;
&lt;h4&gt;False positives&lt;/h4&gt;
&lt;p&gt;Bloom filters are suited to situations where they can filter out the need to do some work and where a false positive just means some wasted work. A good example would be a local Bloom filter sitting in front of a remote key-value cache. The filter can contain the set of keys the remote cache holds the values for and can filter out needless network requests for keys that aren't present. A false positive in this case means we end up doing a request to the remote cache when not necessary.&lt;/p&gt;
&lt;h4&gt;How they work&lt;/h4&gt;
&lt;p&gt;Let's look at how a Bloom filter actually works. For those already familiar with Bloom filters, for presentation purposes we're only going to discuss Partitioned Bloom filters as this makes the mathematics simpler and exact.&lt;/p&gt;
&lt;p&gt;A Bloom filter consists of an array of &lt;span class="math"&gt;\(m\)&lt;/span&gt; bits &lt;span class="math"&gt;\(B\)&lt;/span&gt; and &lt;span class="math"&gt;\(k\)&lt;/span&gt; hash functions &lt;span class="math"&gt;\(h_0..h_{k-1}\)&lt;/span&gt;. The hash functions take a key &lt;span class="math"&gt;\(x\)&lt;/span&gt; and map it to a location in &lt;span class="math"&gt;\(B\)&lt;/span&gt;. The hash functions are assumed to be independent of each other. That is if we hash some value "foo" with &lt;span class="math"&gt;\(h_0\)&lt;/span&gt; then the result should give us no information about the result from hashing with &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;.&lt;/p&gt;
&lt;h4&gt;Adding to a filter&lt;/h4&gt;
&lt;p&gt;To add to the Bloom filter we hash the key with the hash functions and use their results to set bits in the array &lt;span class="math"&gt;\(B\)&lt;/span&gt;. More specifically:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Each hash function indexes into a subrange of size &lt;span class="math"&gt;\(\frac{m}{k}\)&lt;/span&gt; i.e if there are 4 hash functions and array &lt;span class="math"&gt;\(B\)&lt;/span&gt; is 256 bits then the first hash function picks a position in 0 to 63, the second hash function 64 to 127 and so on. These are later referred to as a hash function's &lt;em&gt;partition&lt;/em&gt;.&lt;/p&gt;
&lt;h4&gt;Querying a filter&lt;/h4&gt;
&lt;p&gt;To check a Bloom filter for an element we again use the hash functions to hash the key (resulting in the same positions we would have had if we had added the element) and check the array positions they generate in &lt;span class="math"&gt;\(B\)&lt;/span&gt;. Again, some some pseudo code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* whether the element is present or not */&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Why they work&lt;/h4&gt;
&lt;p&gt;Let's reason out how this works. If we have the element "foo" and add it to a Bloom filter, it will result in a number (&lt;span class="math"&gt;\(k\)&lt;/span&gt;) of positions in the array &lt;span class="math"&gt;\(B\)&lt;/span&gt; being set to true. If we then test that same Bloom filter with "foo" we check those same positions and if they are all true then we probably added "foo" at some point in the past to the filter. There can never be a false negative, if we added "foo" those bits &lt;em&gt;must&lt;/em&gt; have been set.&lt;/p&gt;
&lt;p&gt;There can however be false positives, we may have added some other keys which just so happened to generate positions that covered all the ones that "foo" would hash to. This is the source of false positives in Bloom filters. We can actually calculate the probability that this will occur.&lt;/p&gt;
&lt;h4&gt;False positive probability for k=1&lt;/h4&gt;
&lt;p&gt;To simplify let us have a Bloom filter with a single hash function (so &lt;span class="math"&gt;\(k=1\)&lt;/span&gt;) and with array &lt;span class="math"&gt;\(B\)&lt;/span&gt; of size &lt;span class="math"&gt;\(m\)&lt;/span&gt; bits.&lt;/p&gt;
&lt;p&gt;A single element is added with the routine we specified above. What is the probability that a bit in &lt;span class="math"&gt;\(B\)&lt;/span&gt; is set? Since &lt;span class="math"&gt;\(h_{0}\)&lt;/span&gt; can pick any position&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt; then the probability that a bit is set is &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now comes testing. We test the single element we added. The position will be the same as when we added it, so we'll correctly return that it is present. What if we tested a different element to the one we just added to the Bloom filter? What is the probability that we get a false positive? For a false positive to occur the element we are testing must map to a position that was already set in the array &lt;span class="math"&gt;\(B\)&lt;/span&gt;. We've already calculated that as &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now instead of a single element, let us consider what happens if we add &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements and then test something not in those elements.&lt;/p&gt;
&lt;p&gt;For each element we add, the probability that a bit position &lt;em&gt;won't&lt;/em&gt; be set is &lt;span class="math"&gt;\(1-\frac{1}{m}\)&lt;/span&gt;. After adding &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements, the probability the bit hasn't been set is &lt;span class="math"&gt;\((1 - \frac{1}{m})^n\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Testing an element that wasn't one we added, we want to know the probability that the bit has been set by one of the previous &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements. This is complement of the event that it hasn't been set previously, so:&lt;/p&gt;
&lt;div class="math"&gt;$$1 - (1 - \frac{1}{m})^n$$&lt;/div&gt;
&lt;p&gt;An intuitive way of looking at this is that it is the percentage of 1s set in &lt;span class="math"&gt;\(B\)&lt;/span&gt; after we add &lt;span class="math"&gt;\(n\)&lt;/span&gt; items. To test out our simple filter, if the size of &lt;span class="math"&gt;\(B\)&lt;/span&gt; (&lt;span class="math"&gt;\(m\)&lt;/span&gt;) is 512 bits and we add 32 elements then the false positive rate if we test a new element that wasn't in the original set is:&lt;/p&gt;
&lt;div class="math"&gt;$$1 - (1 - \frac{1}{512})^{32} = 0.061$$&lt;/div&gt;
&lt;p&gt;So about 6.1%. If we add another 32 elements this increases to 11.8% and so on.&lt;/p&gt;
&lt;h4&gt;Generalising to multiple hash functions&lt;/h4&gt;
&lt;p&gt;How do we extend this to multiple hash functions? For partitioned Bloom filters we don't need to deal with collisions between hash functions e.g where &lt;span class="math"&gt;\(h_0("foo")\)&lt;/span&gt; and &lt;span class="math"&gt;\(h_1("foo")\)&lt;/span&gt; give the same result. To reiterate, a false positive is where all bit positions in &lt;span class="math"&gt;\(B\)&lt;/span&gt; for an element tested, but not initially added, are set.&lt;/p&gt;
&lt;p&gt;Let's add a second hash function to our simple filter. Now we have &lt;span class="math"&gt;\(h_0\)&lt;/span&gt; and &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;. To get a false positive we would have needed the bit in &lt;span class="math"&gt;\(h_0\)&lt;/span&gt;'s partition to be set &lt;em&gt;and&lt;/em&gt; the bit in &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;'s partition. The probability that a bit is set in the 0th partition when an element is added is &lt;span class="math"&gt;\(\frac{1}{\frac{m}{2}} = \frac{2}{m}\)&lt;/span&gt; because each partition is now &lt;span class="math"&gt;\(m/2\)&lt;/span&gt; in size as there are two) That the bit is not set after &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements are added is &lt;span class="math"&gt;\((1 - \frac{2}{m})^n\)&lt;/span&gt;. For the two (independent) hash functions we end up with:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{2}{m})^n)^2$$&lt;/div&gt;
&lt;p&gt;This generalises to:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;We can quickly work our earlier example again. If B is 512 bits (&lt;span class="math"&gt;\(m = 512\)&lt;/span&gt;), have 4 hash functions (&lt;span class="math"&gt;\(k = 4\)&lt;/span&gt;) and we add 32 elements (&lt;span class="math"&gt;\(n = 32\)&lt;/span&gt;) then we end up with:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{4}{512})^{32})^4 = $$&lt;/div&gt;
&lt;p&gt;Which is 0.2%. Increasing k initially reduces the false positive rate but there's an optimum number (&lt;span class="math"&gt;\(k_{opt}\)&lt;/span&gt;) before the rate starts to rise. In this example that is &lt;span class="math"&gt;\(k = 11\)&lt;/span&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Graph of k vs false positive rate for m = 512, n = 32" src="/static/bloom_false_positive_graph.png"&gt;&lt;/p&gt;
&lt;h3&gt;Generalising Bloom filters&lt;/h3&gt;
&lt;p&gt;Now we understand how a Bloom filter works, let's look at how we can generalise the technique and apply it to create some data structures with interesting properties. We'll start by sketching out a general structure and then look at how traditional Bloom filters fit within it.&lt;/p&gt;
&lt;p&gt;For the generalised data structure we have an array &lt;span class="math"&gt;\(B\)&lt;/span&gt; as before but instead of bits we have state of type &lt;span class="math"&gt;\(T\)&lt;/span&gt; i.e &lt;span class="math"&gt;\(B[0]\)&lt;/span&gt; is data of type T at the first position in array &lt;span class="math"&gt;\(B\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To add to the generalised Bloom filter we have an input element &lt;span class="math"&gt;\(x\)&lt;/span&gt; and associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt;. We use &lt;span class="math"&gt;\(k\)&lt;/span&gt; hash functions (&lt;span class="math"&gt;\(h_0\)&lt;/span&gt;, &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;, etc..) as before. The algorithm is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So the main difference from before is that we use the &lt;em&gt;combine&lt;/em&gt; function and element's associated data to update the state at the hash partition location.&lt;/p&gt;
&lt;p&gt;Now let's look at how we would query the generalised Bloom filter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* empty list */&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here we take the state each hash partition location, make a list of them and pass them to a &lt;em&gt;reduce&lt;/em&gt; function. The &lt;em&gt;reduce&lt;/em&gt; function returns a result that is some value &lt;span class="math"&gt;\(d\)&lt;/span&gt; or none.&lt;/p&gt;
&lt;p&gt;Lastly we're going to state that the result from querying our generalised Bloom filter will have a &lt;em&gt;one-sided&lt;/em&gt; error. We define a third function &lt;em&gt;error&lt;/em&gt; and say that if an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; with associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; is added to the generalised Bloom filter then querying for element &lt;span class="math"&gt;\(x\)&lt;/span&gt;, will always contain some value &lt;span class="math"&gt;\(d\)&lt;/span&gt; and the function error(&lt;span class="math"&gt;\(y\)&lt;/span&gt;, &lt;span class="math"&gt;\(d\)&lt;/span&gt;) will always return true. If an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; with associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; was not added to the filter then querying will return none or with some (tunable) probability a value &lt;span class="math"&gt;\(d\)&lt;/span&gt; which error(&lt;span class="math"&gt;\(y\)&lt;/span&gt;, &lt;span class="math"&gt;\(d\)&lt;/span&gt;) could return true or false for.&lt;/p&gt;
&lt;p&gt;So to summarise, our parameters are a type &lt;span class="math"&gt;\(T\)&lt;/span&gt; for the data array and three functions &lt;em&gt;combine&lt;/em&gt;, &lt;em&gt;reduce&lt;/em&gt; and &lt;em&gt;error&lt;/em&gt;. It turns out that if we pick those four parameters carefully, we can maintain a one-sided error. We'll start with the traditional Bloom filter and then get more adventurous.&lt;/p&gt;
&lt;h3&gt;Fitting the traditional filter&lt;/h3&gt;
&lt;p&gt;&lt;span class="math"&gt;\(T\)&lt;/span&gt; in the traditional filter is a single bit. &lt;em&gt;combine&lt;/em&gt; is the max function&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;2&lt;/a&gt;&lt;/sup&gt;, &lt;em&gt;reduce&lt;/em&gt; is the min function and &lt;em&gt;error&lt;/em&gt; is equals.&lt;/p&gt;
&lt;p&gt;We also need to modify the input slightly, &lt;span class="math"&gt;\(x\)&lt;/span&gt; is still the element to be added but the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; is 1 if the element is in the set we added to the filter and 0 if it is not.&lt;/p&gt;
&lt;p&gt;If you plug these in to the earlier pieces of pseudo code you should be able to convince yourself that the filter performs identically to the standard description of a partitioned Bloom filter.&lt;/p&gt;
&lt;h3&gt;Maxmin-based Bloom filters&lt;/h3&gt;
&lt;p&gt;It turns out if we leave &lt;em&gt;combine&lt;/em&gt; as the max function, &lt;em&gt;reduce&lt;/em&gt; as the min function and &lt;em&gt;error&lt;/em&gt; is &lt;span class="math"&gt;\(d \geq y\)&lt;/span&gt; then we can still get one-sided errors as long as the elements of type T have a total order.&lt;/p&gt;
&lt;p&gt;By a total order we mean that we can compare any two elements of type T&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3"&gt;3&lt;/a&gt;&lt;/sup&gt;. We'll see later why we're being very specific about this.&lt;/p&gt;
&lt;p&gt;Here's an example filter that would satisfy the above requirements. Assuming the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; for each element is a positive integer (think files with a corresponding sizes in kilobytes) then we could use a maxmin-based Bloom filter with T being an unsigned integer. We initialise all elements of &lt;span class="math"&gt;\(B\)&lt;/span&gt; to 0 and don't allow 0 as a &lt;span class="math"&gt;\(y\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To add to the example maxmin filter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And to query:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* empty list */&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* min in list */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For an &lt;span class="math"&gt;\(x\)&lt;/span&gt; added to the example filter, a query returns a result greater than or equal to the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; seen with &lt;span class="math"&gt;\(x\)&lt;/span&gt;. For &lt;span class="math"&gt;\(x\)&lt;/span&gt; that wasn't added to the filter we will return &lt;em&gt;none&lt;/em&gt; or with some probability, a random number from the filter.&lt;/p&gt;
&lt;p&gt;There's actually two types of error here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We test an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; that we haven't added to the Bloom filter and get a value back for it instead of &lt;em&gt;none&lt;/em&gt;. We call this a false positive.&lt;/li&gt;
&lt;li&gt;We test an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; that we &lt;em&gt;have&lt;/em&gt; added to the Bloom filter and get a value back that is higher than the associated value &lt;span class="math"&gt;\(y\)&lt;/span&gt; we originally added.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let's start with the false positive probability. We can reuse most of the reasoning from the partitioned Bloom filter false positive derivation earlier. Instead of the bit in &lt;span class="math"&gt;\(B\)&lt;/span&gt; having been set by a different &lt;span class="math"&gt;\(x\)&lt;/span&gt; we're instead interested in the element in &lt;span class="math"&gt;\(B\)&lt;/span&gt; being greater than zero, which means it has been set before.&lt;/p&gt;
&lt;p&gt;Since we have &lt;span class="math"&gt;\(m\)&lt;/span&gt; elements in &lt;span class="math"&gt;\(B\)&lt;/span&gt;, the probability that an element is set to greater than zero on adding to the filter is still &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;. After &lt;span class="math"&gt;\(n\)&lt;/span&gt; additions the probability that it is still zero is &lt;span class="math"&gt;\((1 - \frac{1}{m})^n\)&lt;/span&gt;. So we again have the same probability of giving a false positive as the traditional case:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;What about the second error? For this to happen each of the &lt;span class="math"&gt;\(k\)&lt;/span&gt; hash partition locations for an element &lt;span class="math"&gt;\(x\)&lt;/span&gt; must contain a value that is higher than the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt;. They all must because we take the minimum. There's a bit of difficulty involved in calculating this directly since this kind of error requires a hash collision in each partition &lt;em&gt;and&lt;/em&gt; for that collision to result in a higher resulting value. The probability clearly depends on &lt;span class="math"&gt;\(y\)&lt;/span&gt;, if &lt;span class="math"&gt;\(y\)&lt;/span&gt; is very low (or even the minimum we could see, which is 1) then any collision may lead to this error. If &lt;span class="math"&gt;\(y\)&lt;/span&gt; is the maximum we could see then &lt;em&gt;no&lt;/em&gt; collision will lead to this error.&lt;/p&gt;
&lt;p&gt;For now let us go with a very pessimistic assumption that a collision results in a higher value, implying &lt;span class="math"&gt;\(y\)&lt;/span&gt; is the minimum we will see. This gives us an upper bound on the probability of the second type of error.&lt;/p&gt;
&lt;p&gt;Assume we add &lt;span class="math"&gt;\(x\)&lt;/span&gt; to the filter and we now add a second item.  Again we start with a single hash function &lt;span class="math"&gt;\(k = 1\)&lt;/span&gt; and element array &lt;span class="math"&gt;\(B\)&lt;/span&gt; of size &lt;span class="math"&gt;\(m\)&lt;/span&gt;. What is the probability there was a collision? We picked a location randomly (using &lt;span class="math"&gt;\(h_0(x)\)&lt;/span&gt;) for our element &lt;span class="math"&gt;\(x\)&lt;/span&gt; and now we're picking one again for the second one - the probability of picking the same one is &lt;span class="math"&gt;\(\frac{1}{m}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now we add &lt;span class="math"&gt;\(n\)&lt;/span&gt; items, what's the chance we &lt;em&gt;didn't&lt;/em&gt; collide? Not colliding after one is &lt;span class="math"&gt;\(1-\frac{1}{m}\)&lt;/span&gt;. After &lt;span class="math"&gt;\(n\)&lt;/span&gt; items we end up with &lt;span class="math"&gt;\((1-\frac{1}{m})^n\)&lt;/span&gt;. Similar to earlier on with the traditional Bloom filter but reversed, an intuitive way of looking at this is the percentage of unset elements in &lt;span class="math"&gt;\(B\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;So for a single hash function, our estimate (&lt;span class="math"&gt;\(d\)&lt;/span&gt;) for the associated data &lt;span class="math"&gt;\(y\)&lt;/span&gt; is exact with probability at least &lt;span class="math"&gt;\((1-\frac{1}{m})^n\)&lt;/span&gt;. Specifically:&lt;/p&gt;
&lt;div class="math"&gt;$$p(d-y &amp;gt; 0) \leq (1-\frac{1}{m})^n$$&lt;/div&gt;
&lt;p&gt;What is the situation with multiple hash functions? As we are taking the &lt;em&gt;min&lt;/em&gt; then we only need one of the partitions not to have a collision to get an exact answer e.g &lt;em&gt;not&lt;/em&gt; where there has been a collision in every partition.&lt;/p&gt;
&lt;p&gt;The probability of having a at least one collision in a partition after &lt;span class="math"&gt;\(n\)&lt;/span&gt; elements is:&lt;/p&gt;
&lt;div class="math"&gt;$$1 - (1 - \frac{k}{m})^n$$&lt;/div&gt;
&lt;p&gt;for &lt;span class="math"&gt;\(k\)&lt;/span&gt; partitions this is:&lt;/p&gt;
&lt;div class="math"&gt;$$p(d - y &amp;gt; 0) \leq (1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;Which is the same as the equation we worked out for the first class of error! If we step back though this should make intuitive sense. Both class of error depend on the proportion of data elements that are non-zero in &lt;span class="math"&gt;\(B\)&lt;/span&gt;. In the first class of error we might read all non-zero elements and incorrectly return a value instead of none and in the second class of error the more set elements we have the greater the chance we have of colliding in every partition.&lt;/p&gt;
&lt;p&gt;I should point out at this point that this is a very pessimistic bound. It assumes that any collision leads to an increase in the stored value. There's also a question we've skirted around in this discussion and that is if we make an error of the second class, how big is our over-estimate? I think there's a follow-up blog post on that - though at this stage I'm not sure we can make statements on the over-estimate without making assumptions as to the distribution of &lt;span class="math"&gt;\(y\)&lt;/span&gt;. I may be wrong, let's discuss on twitter: &lt;a href="https://twitter.com/intent/tweet?screen_name=sadiqj&amp;ref_src=twsrc%5Etfw" class="twitter-mention-button" data-dnt="true" data-show-count="false"&gt;tweet me&lt;/a&gt;&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;.&lt;/p&gt;
&lt;p&gt;Another thing to note about this filter is that while we only specified it for elements &lt;span class="math"&gt;\(x\)&lt;/span&gt; with accompanying data &lt;span class="math"&gt;\(y\)&lt;/span&gt;, you can add &lt;span class="math"&gt;\(x\)&lt;/span&gt; multiple times to the filter with &lt;em&gt;different&lt;/em&gt; &lt;span class="math"&gt;\(y\)&lt;/span&gt;s and the filter will return an estimate for the maximum &lt;span class="math"&gt;\(y\)&lt;/span&gt; it encountered.&lt;/p&gt;
&lt;h3&gt;Generalising this model further&lt;/h3&gt;
&lt;p&gt;Just to recap. For Maxmin filters we have &lt;em&gt;combine&lt;/em&gt; as the max function, &lt;em&gt;reduce&lt;/em&gt; as the min function and &lt;em&gt;error&lt;/em&gt; is &lt;span class="math"&gt;\(d \geq y\)&lt;/span&gt;. Our elements are of type T and have a total order.&lt;/p&gt;
&lt;p&gt;We can go further than this with a technique &lt;a href="https://arxiv.org/abs/cs/0306046"&gt;Boldi &amp;amp; Vigna showed in 2004&lt;/a&gt; called &lt;em&gt;Compressed Approximators&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For Compressed Approximators we have &lt;em&gt;combine&lt;/em&gt; as the least upper bound, &lt;em&gt;reduce&lt;/em&gt; as the greatest lower bound and &lt;em&gt;error&lt;/em&gt; is still &lt;span class="math"&gt;\(d \geq y\)&lt;/span&gt;. We'll define these terms in a second. The elements are of type T and form a lattice. For T, this means two things.&lt;/p&gt;
&lt;p&gt;First, it means we have some way of comparing two elements of type T, a &lt;em&gt;partial order&lt;/em&gt;. The partial part means not all elements are comparable - this is contrast to a total order, where all elements are.&lt;/p&gt;
&lt;p&gt;The second is that for any two elements of type T we can find:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the smallest element of type T that is greater than or equal to those two elements (the least upper bound)&lt;/li&gt;
&lt;li&gt;the largest element of type T that is less than or equal to those two elements (the greatest lower bound)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is convenient because we need to be able to do those two things for &lt;em&gt;combine&lt;/em&gt; and &lt;em&gt;reduce&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We'll look at an example now to try to build up an intuitive feeling of what's going on. We base our example around the &lt;em&gt;inclusion&lt;/em&gt; order of sets, which is a partial order&lt;sup id="fnref:4"&gt;&lt;a class="footnote-ref" href="#fn:4"&gt;4&lt;/a&gt;&lt;/sup&gt;. Inclusion order means that if all elements of A are also in B i.e A is a subset of B (&lt;span class="math"&gt;\(A \subseteq B\)&lt;/span&gt;) then &lt;span class="math"&gt;\(A \leq B\)&lt;/span&gt;. For inclusion order, the least upper bound of two sets is their union and the greatest lower bound is their intersection&lt;sup id="fnref:5"&gt;&lt;a class="footnote-ref" href="#fn:5"&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h3&gt;A multi-member Bloom Filter&lt;/h3&gt;
&lt;p&gt;Armed with this lattice, let's turn to a practical application. Imagine you have assets with a key &lt;span class="math"&gt;\(x\)&lt;/span&gt; that may be cached on one or more of multiple caching servers all of which are infront of some authoritative source (an origin for a CDN, for example). The caching servers may be ephemeral and so we don't want to simply rely on hashing the key to a single server.&lt;/p&gt;
&lt;p&gt;The most naive option would be to maintain a Bloom filter for each of the servers but this requires us to potentially do as many tests as we have servers. We can construct a Compressed Approximator for this problem which we only need to test once.&lt;/p&gt;
&lt;p&gt;To add to the multi-member Bloom filter we do the following, assuming &lt;span class="math"&gt;\(x\)&lt;/span&gt; is our key, &lt;span class="math"&gt;\(y\)&lt;/span&gt; is the server it is now cached on, &lt;span class="math"&gt;\(k\)&lt;/span&gt; is the number of hashes and &lt;span class="math"&gt;\(B\)&lt;/span&gt; is an array of sets.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So for each hash function and partition, we simply add &lt;span class="math"&gt;\(y\)&lt;/span&gt; to the set at the hash's index. Assuming &lt;em&gt;add&lt;/em&gt; adds to the set if it exists or if not, instantiates it to the singleton set containing just the parameter.&lt;/p&gt;
&lt;p&gt;To query the filter we do:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* empty set */&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;intersection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i*k+j&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We loop over each hash function and partition, taking the intersection of all the sets at those locations&lt;sup id="fnref:6"&gt;&lt;a class="footnote-ref" href="#fn:6"&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Again we have a data structure with two possible types of error. As with the maxmin filter, the first type of error is that we test an element we have not added to the filter and we will mistakenly return a set of servers it may be cached on instead of the empty set.&lt;/p&gt;
&lt;p&gt;The second type of error is if we test an element we have added to the filter we may get back a set of caches that contains servers the item is not cached on in addition to the right server.&lt;/p&gt;
&lt;p&gt;We can use the derivation from earlier for the first type of error, the probability of a false positive is:&lt;/p&gt;
&lt;div class="math"&gt;$$(1 - (1 - \frac{k}{m})^n)^k$$&lt;/div&gt;
&lt;p&gt;For the second error we can also make a similar argument to the maxmin filter, our probability of getting an extra caching server back is at most that of our false positive rate&lt;sup id="fnref:7"&gt;&lt;a class="footnote-ref" href="#fn:7"&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h3&gt;Recap and conclusion&lt;/h3&gt;
&lt;p&gt;So to recap, we've discussed the standard Bloom filter and derived a probability for the false positive rate of the partitioned variant. We then looked at maxmin Bloom filters which generalise them to elements that have a total order, including deriving probabilities for the false positive rate and the event that the value the filter returns is higher than the original value added. Finally we looked at a further generalisation for elements that have a partial order, Compact Approximators, and looked at one specific data structure using that model.&lt;/p&gt;
&lt;p&gt;We should be able to use this knowledge to come up with other novel probabilistic data structures based on Bloom filters that have properties which make them better suited to practical problems. I have a whole laundry list of other ones to write up for the next holiday. Want to stay tuned? Follow me on twitter: &lt;a href="https://twitter.com/sadiqj?ref_src=twsrc%5Etfw" class="twitter-follow-button" data-dnt="true" data-show-count="false"&gt;@sadiqj&lt;/a&gt;&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Hopefully with uniform probability, if it's a good hash function.&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Technically it doesn't have to be the max function, you're effectively ignoring the existing state but the symmetry with min as reduce makes the narrative a bit easier later on.&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;There are further restrictions on how the comparison must work, see &lt;a href="https://en.wikipedia.org/wiki/Total_order"&gt;the wikipedia page&lt;/a&gt; for more information.&amp;#160;&lt;a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;We're just going to casually steam past this but Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Partially_ordered_set#Formal_definition"&gt;has a page with the formal definitions&lt;/a&gt;. We're also going to handwave a bit around the set definitions in this bit to keep things short. The take aways should be how to use the framework to develop new data structures.&amp;#160;&lt;a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;This only works if all the elements that could be in either set come from some other set, say S. More specifically we say that both of the sets belong to the power set of S.&amp;#160;&lt;a class="footnote-backref" href="#fnref:5" title="Jump back to footnote 5 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;We could optimise this by early-outing if we ever get an empty set from a hash location.&amp;#160;&lt;a class="footnote-backref" href="#fnref:6" title="Jump back to footnote 6 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:7"&gt;
&lt;p&gt;We can probably make the bound stronger by making some assumptions on how we use the filter and how many caching servers we add items to. That's material for another post though!&amp;#160;&lt;a class="footnote-backref" href="#fnref:7" title="Jump back to footnote 7 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="posts"></category></entry><entry><title>Getting OCaml running on the ESP32</title><link href="https://www.toao.com/blog/getting-ocaml-running-on-the-esp32" rel="alternate"></link><published>2017-01-15T00:00:00+00:00</published><updated>2025-06-27T14:55:09+01:00</updated><author><name>Sadiq Jaffer</name></author><id>tag:www.toao.com,2017-01-15:/blog/getting-ocaml-running-on-the-esp32</id><summary type="html">&lt;p&gt;&lt;img alt="End result" src="/static/wemos_board.gif" title="End result"&gt;&lt;/p&gt;
&lt;p&gt;I was looking for some small Christmas stocking-fillers to give to techie friends and decided to try to find some interesting electronics boards from China.&lt;/p&gt;
&lt;p&gt;In the end, I went with the &lt;a href="https://wiki.wemos.cc/products:lolin32:lolin32_lite"&gt;WEMOS Lolin32 Lite&lt;/a&gt; which features Espressif's ESP32. If you're not familiar with the ESP32, it's an awesome little …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="End result" src="/static/wemos_board.gif" title="End result"&gt;&lt;/p&gt;
&lt;p&gt;I was looking for some small Christmas stocking-fillers to give to techie friends and decided to try to find some interesting electronics boards from China.&lt;/p&gt;
&lt;p&gt;In the end, I went with the &lt;a href="https://wiki.wemos.cc/products:lolin32:lolin32_lite"&gt;WEMOS Lolin32 Lite&lt;/a&gt; which features Espressif's ESP32. If you're not familiar with the ESP32, it's an awesome little chip that features the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dual core 240Mhz 32-bit Xtensa LX6s&lt;/li&gt;
&lt;li&gt;Wi-Fi (802.11 b/g/n) and Bluetooth (v4.2 + BLE)&lt;/li&gt;
&lt;li&gt;520kb of SRAM&lt;/li&gt;
&lt;li&gt;A separate ultra-low power processor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Lolin32 Lite couples that with 4mb of flash, micro-usb connection and Li-Po charging circuitry.&lt;/p&gt;
&lt;p&gt;Espressif has a gcc-based toolchain and an &lt;a href="https://github.com/espressif/esp-idf"&gt;"IoT Development Framework"&lt;/a&gt; which provides a port of Newlib, FreeRTOS, LWIP and a whole host of other frameworks.&lt;/p&gt;
&lt;p&gt;My friend &lt;a href="http://anil.recoil.org/"&gt;Anil&lt;/a&gt; suggested that with a gcc and libc, porting of the OCaml interpreter would be fairly easy. He was mostly right.&lt;/p&gt;
&lt;h3&gt;Caml runtime&lt;/h3&gt;
&lt;p&gt;It took a little while to understand how OCaml's build system worked and thankfully it seems there's been good support for cross compilation since 4.02. The configure script has a pretty funky way of determining features of the compiler and runtime by compiling lots of small C programs and seeing what builds. This required a few small changes where features were detected but only partially available via Espressif's port of Newlib. Posix signals and BSD sockets were two cases where this happened. I should expand the code for the tests to cover the missing functionality and try to upstream it, which would avoid the configure script hacks.&lt;/p&gt;
&lt;h3&gt;Rebuilding Newlib&lt;/h3&gt;
&lt;p&gt;Unfortunately either I was failing or Espressif's build of newlib doesn't seem to include signal(). This meant a rebuild of newlib was required without the SIGNAL_PROVIDED flag, which includes an implementation of signal(). There's also no support for directories in the IDF, so I had to stub out some parts of sys.c and unix.c. With those changes it was possible to get libcamlrun.a compiled. &lt;/p&gt;
&lt;p&gt;Once I had a cross compiled bytecode runtime, I was most of the way there.&lt;/p&gt;
&lt;h3&gt;Building an image&lt;/h3&gt;
&lt;p&gt;Next step was to get some OCaml compiled which could then be incorporated into the image to flash. This is actually pretty simple with &lt;a href="https://github.com/sadiqj/hello_caml/blob/master/main/component.mk#L12"&gt;ocamlc and custom runtimes&lt;/a&gt; and you end up with a C source file you can then throw in to the rest of the IDF component build system. I wrote a &lt;a href="https://github.com/sadiqj/hello_caml/blob/master/main/hello_world_main.c#L34"&gt;little bit of C&lt;/a&gt; that kickstarted ocaml via caml_startup and had a buildable image to flash.&lt;/p&gt;
&lt;h3&gt;Debugging&lt;/h3&gt;
&lt;p&gt;I flashed the board and immediately got an abort after malloc failed. First things to tweak were the &lt;a href="https://github.com/sadiqj/ocaml-esp32/blob/2798033d8e113f5da6c03ff8ef5ac9edec3e54f9/byterun/caml/config.h"&gt;garbage collection settings&lt;/a&gt; which were not designed for 512kb of ram. I tuned many of those and was still getting an abort but after some instrumentation it turns out that the runtime allocates a 64kb buffer for both stdin and stdout. After reducing those buffers considerably, the interpreter no longer aborted! It didn't, however, print anything out - which concerned me.&lt;/p&gt;
&lt;p&gt;After a fair amount of debugging, I still have no idea where stdout goes. It's certainly not the same place as printf, which makes it to the monitor. Once I had that figured out, I realised I had a functioning interpreter!&lt;/p&gt;
&lt;h3&gt;State of play&lt;/h3&gt;
&lt;p&gt;There's a &lt;a href="https://github.com/sadiqj/ocaml-esp32-docker/blob/master/Dockerfile"&gt;Dockerfile&lt;/a&gt; for the whole build process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installs the prerequisites, Xtensa gcc port, Espressif IDF&lt;/li&gt;
&lt;li&gt;Rebuilds Newlib&lt;/li&gt;
&lt;li&gt;Installs an OCaml via OPAM, then builds the OCaml ESP32 bytecode runtime&lt;/li&gt;
&lt;li&gt;Finally builds a simple Hello World OCaml project and builds an image&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should be able to then flash the resulting image with &lt;code&gt;make flash&lt;/code&gt; if you have a dev board connected and have passed the USB-serial device through to the container with &lt;code&gt;--device=/dev/ttyUSB0&lt;/code&gt; (on Linux).&lt;/p&gt;
&lt;h3&gt;Short term TODOs&lt;/h3&gt;
&lt;p&gt;There are a couple of TODOs that probably need to be cleaned up or fixed. As I mentioned earlier, we could expand some of the hasgot tests to include functionality Espressif's Newlib build doesn't have and this would simplify some of the configure changes. Figuring out how to redirect stdout and stderr to the monitor would also be incredibly useful.&lt;/p&gt;
&lt;h3&gt;Longer term plans&lt;/h3&gt;
&lt;p&gt;A native compiler backend for Xtensa would mean we could produce a more compact and hopefully more performant image which would be very useful in environments with tight power budgets. Speaking of low-power, some kind of DSL for programming the ultra-low power core on the board would also probably be very useful.&lt;/p&gt;
&lt;p&gt;In terms of networking, the Espressif IDF ships with an lwip port for networking but there are sufficiently &lt;a href="https://github.com/espressif/esp-idf/blob/3a271a4ae7df8a9049fbbb801feafca5043c31eb/components/esp32/include/esp_wifi_internal.h"&gt;low level interfaces&lt;/a&gt; available for the Wi-Fi device that could work with &lt;a href="https://mirage.io/"&gt;Mirage&lt;/a&gt;'s &lt;a href="https://github.com/mirage/mirage-tcpip"&gt;tcpip&lt;/a&gt; direct driver.&lt;/p&gt;
&lt;p&gt;Any volunteers?&lt;/p&gt;
&lt;h3&gt;End result&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Hello from OCaml!" src="/static/hello_caml.png" title="Hello from OCaml!"&gt;&lt;/p&gt;</content><category term="posts"></category></entry></feed>