PageSourceSearch

https://warriorlifepodcast.com/

html warriorlifepodcast.com collected 2026-10-09 01:09:28 UTC 23,431 bytes, 467 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/index-BhRMDBBT.css" data-rsc-css-href="/assets/index-BhRMDBBT.css" data-precedence="vite-rsc/importer-resources"/><title>KM4SPL Amateur Radio Downloads</title><meta name="description" content="Amateur-radio software, documentation, and station resources from Mike Hutson, KM4SPL."/><link rel="shortcut icon" href="/favicon.svg"/><link rel="icon" href="/favicon.svg"/>
2</head><body><main><header class="site-header"><a class="brand" href="#top" aria-label="KM4SPL home"><span class="brand-mark" aria-hidden="true">K4</span><span><strong>KM4SPL</strong><small>Amateur Radio</small></span></a><nav aria-label="Primary navigation"><a href="/projects/">Projects</a><a href="/projects/help/">Help</a><a href="#downloads">Downloads</a><a href="#about">About</a></nav></header><section class="hero" id="top"><div class="signal-field" aria-hidden="true"></div><div class="hero-copy"><p class="eyebrow"><svg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-radio" aria-hidden="true"><path d="M16.247 7.761a6 6 0 0 1 0 8.478"></path><path d="M19.075 4.933a10 10 0 0 1 0 14.134"></path><path d="M4.925 19.067a10 10 0 0 1 0-14.134"></path><path d="M7.753 16.239a6 6 0 0 1 0-8.478"></path><circle cx="12" cy="12" r="2"></circle></svg> KM4SPL • Savannah, Georgia</p><h1>Radio tools built for the shack and the field.</h1><p class="hero-summary">Software, documentation, and station resources from Mike Hutson, KM4SPL. Downloads are published here with clear version and safety information.</p><div class="hero-notes" aria-label="Site highlights"><span>QRZ Connected</span><span>ARES</span><span>Open station resources</span></div><div class="km4spl-project-actions"><a href="/projects/">Explore my projects →</a><a href="/demo/">Try Digital Command Center</a><a href="/projects/help/">Help guide</a></div></div><article class="featured-download" id="downloads"><div class="download-heading"><div class="app-icon" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-monitor-down" aria-hidden="true"><path d="M12 13V7"></path><path d="m15 10-3 3-3-3"></path><rect width="20" height="14" x="2" y="3" rx="2"></rect><path d="M12 17v4"></path><path d="M8 21h8"></path></svg></div><div><p>Featured download</p><h2>Digital Command Center</h2></div></div><p class="download-description">A modern station interface for FT8 monitoring, radio setup, live waterfall activity, safety controls, and future automation.</p><dl class="release-grid"><div><dt>Release</dt><dd>Windows Alpha 1</dd></div><div><dt>Platform</dt><dd>Windows 10/11</dd></div><div><dt>Size</dt><dd>20.4 MB</dd></div><div><dt>Safety</dt><dd>Receive-only</dd></div></dl><a class="download-button" href="/downloads/Digital-Command-Center-Windows-Alpha.zip" download=""><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>Download Windows Alpha</a><p class="release-warning"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg> Transmit is locked in this preview build. CAT and FT8 decoding are still being completed.</p></article></section><section id="km4spl-project-feature" aria-labelledby="km4spl-project-title">
3<div class="km4spl-project-overview"><div><p>PROJECTS · BY KM4SPL</p><h2 id="km4spl-project-title">Digital Command Center</h2><span>Explore FT8, FT4, JS8, WSPR, PSK31, and RTTY in the browser demo. Find downloads, radio setup, and a complete searchable help guide right here.</span></div><a href="/projects/">Explore the project →</a></div>
4<div class="km4spl-project-shortcuts"><a href="/demo/">Launch demo →</a><a href="/projects/#downloads">Downloads →</a><a href="/projects/help/">Full help guide →</a></div>
5<section class="help-search" id="home-help-search" data-help-search aria-label="Search project help">
6<form role="search" action="/projects/help/" method="get"><label for="home-help-search-input">Search projects &amp; help</label><input id="home-help-search-input" name="q" type="search" maxlength="200" placeholder="Try ALC, FT4, radio setup, or saved profiles" aria-controls="home-help-search-results" autocomplete="off"><button type="submit">Search</button><button type="button" class="help-search-clear" hidden>Clear</button></form>
7<div class="help-search-examples"><span>Popular:</span><button type="button" data-search-example="first contact">First contact</button><button type="button" data-search-example="ALC">ALC slider</button><button type="button" data-search-example="no messages">No messages</button><button type="button" data-search-example="install windows">Install</button></div>
8<p class="help-search-status" role="status" aria-live="polite">Search needs JavaScript. You can always browse the complete guide below.</p><ol id="home-help-search-results" class="help-search-results"></ol><button type="button" class="help-search-more" hidden>Show all matching topics</button>
9<noscript><p><a href="/projects/help/">Open the full guide</a> and use your browser's Find command.</p></noscript></section>
10</section>
11<section class="content-section release-section"><div class="section-heading"><p class="eyebrow">Current files</p><h2>Downloads</h2><p>Each published file includes a release label and integrity details so you know exactly what you are installing.</p></div><div class="file-list"><article class="file-row"><div class="file-type" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-archive" aria-hidden="true"><path d="M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5"></path><path d="M14 2v5a1 1 0 0 0 1 1h5"></path><path d="M8 12v-1"></path><path d="M8 18v-2"></path><path d="M8 7V6"></path><circle cx="8" cy="20" r="2"></circle></svg></div><div class="file-details"><h3>Digital Command Center — Windows Alpha 1</h3><p>Portable Windows preview. Extract the ZIP and run DigitalCommandCenter.exe.</p><code title="SHA-256 checksum">SHA-256 5fa3a94d5a9b…e566bfa1</code></div><a href="/downloads/Digital-Command-Center-Windows-Alpha.zip" download="" aria-label="Download Digital Command Center Windows Alpha 1"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg> Download</a></article><article class="file-row muted-file"><div class="file-type" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-radio" aria-hidden="true"><path d="M16.247 7.761a6 6 0 0 1 0 8.478"></path><path d="M19.075 4.933a10 10 0 0 1 0 14.134"></path><path d="M4.925 19.067a10 10 0 0 1 0-14.134"></path><path d="M7.753 16.239a6 6 0 0 1 0-8.478"></path><circle cx="12" cy="12" r="2"></circle></svg></div><div class="file-details"><h3>Digital Command Center — Raspberry Pi</h3><p>The first public Raspberry Pi package is being prepared.</p></div><span class="status-pill">Coming soon</span></article></div></section><section class="about-section" id="about"><div class="callsign-block" aria-hidden="true"><span>CALLSIGN</span><strong>KM4SPL</strong><small>Savannah, Georgia</small></div><div class="about-copy"><p class="eyebrow">About this station</p><h2>Practical amateur radio, emergency communications, and digital experimentation.</h2><p>I’m Mike Hutson, KM4SPL. This is the home for the radio software and station resources I build and use. Digital Command Center is the first project published here, with additional releases added as they are ready.</p></div></section><footer><div><strong>KM4SPL</strong><span>Amateur Radio • Savannah, Georgia</span></div><a href="#downloads">Download center</a></footer></main>
12<!-- KM4SPL QRZ INTEGRATION BEGIN -->
13<style id="km4spl-qrz-styles">
14#km4spl-qrz {
15    max-width: 1180px;
16    margin: 0 auto;
17    padding: 72px 24px 90px;
18    color: #eef7fa;
19    border-top: 1px solid #183743;
20}
21
22#km4spl-qrz .qrz-label {
23    color: #43d7ee;
24    font: 700 13px/1.4 monospace;
25    letter-spacing: .16em;
26    text-transform: uppercase;
27}
28
29#km4spl-qrz .qrz-heading {
30    margin: 12px 0 12px;
31    font-size: clamp(32px, 5vw, 58px);
32    line-height: 1.02;
33}
34
35#km4spl-qrz .qrz-description {
36    max-width: 760px;
37    color: #aad2df;
38    font-size: 17px;
39    line-height: 1.7;
40}
41
42#km4spl-qrz .qrz-actions {
43    display: flex;
44    flex-wrap: wrap;
45    gap: 12px;
46    margin: 26px 0 32px;
47}
48
49#km4spl-qrz .qrz-button {
50    display: inline-flex;
51    align-items: center;
52    justify-content: center;
53    min-height: 48px;
54    padding: 0 22px;
55    border: 1px solid #2c6775;
56    border-radius: 12px;
57    color: #07131a;
58    background: #f9b936;
59    font-weight: 800;
60    text-decoration: none;
61}
62
63#km4spl-qrz .qrz-button.secondary {
64    color: #dff8ff;
65    background: #0c222b;
66}
67
68#km4spl-qrz .qrz-frame {
69    overflow: auto;
70    border: 1px solid #214854;
71    border-radius: 18px;
72    background: #ffffff;
73}
74
75#km4spl-qrz iframe {
76    display: block;
77    width: 100%;
78    min-width: 640px;
79    height: 540px;
80    border: 0;
81}
82
83#km4spl-qrz .qrz-note {
84    margin-top: 12px;
85    color: #789da8;
86    font-size: 13px;
87}
88
89@media (max-width: 700px) {
90    #km4spl-qrz {
91        padding: 54px 18px 70px;
92    }
93
94    #km4spl-qrz .qrz-button {
95        width: 100%;
96    }
97}
98</style>
99
100<script id="km4spl-qrz-loader">
101(() => {
102    const removeIncorrectClass = () => {
103        document.querySelectorAll("body *").forEach((element) => {
104            if (element.children.length !== 0) return;
105
106            const text = element.textContent.trim();
107
108            if (text === "QRZ Profile") {
109                element.textContent = "QRZ Connected";
110            }
111
112            if (text === "Savannah, Georgia") {
113                element.textContent = "Savannah, Georgia";
114            }
115        });
116    };
117
118    const mountQRZ = () => {
119        removeIncorrectClass();
120
121        if (document.getElementById("km4spl-qrz")) return;
122
123        const section = document.createElement("section");
124        section.id = "km4spl-qrz";
125        section.innerHTML = `
126            <div class="qrz-label">QRZ.COM</div>
127            <h2 class="qrz-heading">KM4SPL on QRZ</h2>
128            <p class="qrz-description">
129                Visit my QRZ callsign page or browse the latest public
130                contacts from my QRZ Logbook.
131            </p>
132
133            <div class="qrz-actions">
134                <a class="qrz-button"
135                   href="https://www.qrz.com/db/KM4SPL"
136                   target="_blank"
137                   rel="noopener noreferrer">
138                    View My QRZ Profile
139                </a>
140
141                <a class="qrz-button secondary"
142                   href="https://logbook.qrz.com/lbstat/KM4SPL/"
143                   target="_blank"
144                   rel="noopener noreferrer">
145                    Open Public Logbook
146                </a>
147            </div>
148
149            <div class="qrz-frame">
150                <iframe
151                    src="https://logbook.qrz.com/lbstat/KM4SPL/"
152                    title="KM4SPL QRZ Logbook"
153                    loading="lazy">
154                </iframe>
155            </div>
156
157            <div class="qrz-note">
158                Latest public logbook entries supplied by QRZ.com.
159            </div>
160        `;
161
162        const footer = document.querySelector("footer");
163
164        if (footer) {
165            footer.before(section);
166        } else {
167            document.body.append(section);
168        }
169    };
170
171    let timer;
172
173    new MutationObserver(() => {
174        clearTimeout(timer);
175        timer = setTimeout(mountQRZ, 50);
176    }).observe(document.body, {
177        childList: true,
178        subtree: true
179    });
180
181    if (document.readyState === "loading") {
182        document.addEventListener("DOMContentLoaded", mountQRZ);
183    } else {
184        mountQRZ();
185    }
186})();
187</script>
187
188<!-- KM4SPL QRZ INTEGRATION END -->
189
190<!-- KM4SPL-REPEATERS-START -->
191<style id="km4spl-repeaters-style">
192  #repeaters.km4spl-repeaters {
193    width: min(1180px, calc(100% - 40px));
194    margin: 0 auto;
195    padding: 92px 0;
196    border-top: 1px solid rgba(100, 220, 236, .18);
197    color: #eaf5f7;
198  }
199  .km4spl-repeaters-head {
200    display: grid;
201    grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr);
202    gap: 52px;
203    align-items: end;
204    margin-bottom: 34px;
205  }
206  .km4spl-repeaters .km4spl-kicker {
207    margin: 0 0 12px;
208    color: #51d9ed;
209    font: 700 13px/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
210    letter-spacing: .12em;
211    text-transform: uppercase;
212  }
213  .km4spl-repeaters h2 {
214    margin: 0;
215    max-width: 700px;
216    color: #f5fafb;
217    font-size: clamp(34px, 5vw, 58px);
218    line-height: 1.02;
219    letter-spacing: -.045em;
220  }
221  .km4spl-repeaters-intro {
222    margin: 0;
223    color: #b8d7dd;
224    font-size: 17px;
225    line-height: 1.7;
226  }
227  .km4spl-repeater-grid {
228    display: grid;
229    grid-template-columns: repeat(2, minmax(0, 1fr));
230    gap: 22px;
231  }
232  .km4spl-repeater-card {
233    position: relative;
234    display: flex;
235    flex-direction: column;
236    min-height: 420px;
237    padding: 30px;
238    overflow: hidden;
239    border: 1px solid rgba(91, 191, 208, .28);
240    border-radius: 22px;
241    background: linear-gradient(145deg, rgba(15, 40, 49, .96), rgba(8, 27, 34, .98));
242    box-shadow: 0 18px 55px rgba(0, 0, 0, .18);
243  }
244  .km4spl-repeater-card::before {
245    content: "";
246    position: absolute;
247    inset: 0 0 auto;
248    height: 3px;
249    background: linear-gradient(90deg, #f8bc43, #53d9eb, transparent 80%);
250  }
251  .km4spl-repeater-band {
252    display: flex;
253    justify-content: space-between;
254    gap: 18px;
255    align-items: center;
256    margin-bottom: 22px;
257  }
258  .km4spl-band-label,
259  .km4spl-call-label {
260    color: #74dceb;
261    font: 700 12px/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
262    letter-spacing: .1em;
263    text-transform: uppercase;
264  }
265  .km4spl-call-label {
266    padding: 7px 10px;
267    border: 1px solid rgba(116, 220, 235, .28);
268    border-radius: 999px;
269  }
270  .km4spl-repeater-card h3 {
271    margin: 0;
272    color: #f8bc43;
273    font-size: clamp(34px, 5vw, 52px);
274    line-height: 1;
275    letter-spacing: -.045em;
276  }
277  .km4spl-repeater-card h3 span {
278    color: #c6e0e5;
279    font-size: 16px;
280    font-weight: 600;
281    letter-spacing: 0;
282  }
283  .km4spl-repeater-specs {
284    display: grid;
285    grid-template-columns: repeat(2, minmax(0, 1fr));
286    gap: 1px;
287    margin: 25px 0;
288    overflow: hidden;
289    border: 1px solid rgba(106, 200, 215, .22);
290    border-radius: 14px;
291    background: rgba(106, 200, 215, .16);
292  }
293  .km4spl-repeater-specs div {
294    padding: 14px 16px;
295    background: #0b252d;
296  }
297  .km4spl-repeater-specs dt {
298    margin-bottom: 5px;
299    color: #77bac5;
300    font: 700 11px/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
301    letter-spacing: .09em;
302    text-transform: uppercase;
303  }
304  .km4spl-repeater-specs dd {
305    margin: 0;
306    color: #f0f7f8;
307    font-size: 14px;
308    font-weight: 700;
309  }
310  .km4spl-repeater-copy {
311    margin: 0 0 24px;
312    color: #b8d7dd;
313    line-height: 1.65;
314  }
315  .km4spl-repeater-actions {
316    display: grid;
317    gap: 10px;
318    margin-top: auto;
319  }
320  .km4spl-status-button,
321  .km4spl-cars-button {
322    display: inline-flex;
323    justify-content: center;
324    align-items: center;
325    min-height: 52px;
326    padding: 12px 18px;
327    border-radius: 12px;
328    font-weight: 800;
329    line-height: 1.25;
330    text-align: center;
331    text-decoration: none;
332    transition: transform .18s ease, filter .18s ease, border-color .18s ease;
333  }
334  .km4spl-status-button {
335    color: #06141a;
336    background: #f8bc43;
337  }
338  .km4spl-cars-button {
339    color: #9eeaf5;
340    border: 1px solid rgba(94, 215, 232, .34);
341    background: rgba(21, 72, 82, .35);
342  }
343  .km4spl-status-button:hover,
344  .km4spl-cars-button:hover {
345    transform: translateY(-2px);
346    filter: brightness(1.06);
347  }
348  .km4spl-http-note {
349    margin: 22px 0 0;
350    color: #7faab2;
351    font-size: 13px;
352    line-height: 1.55;
353  }
354  @media (max-width: 820px) {
355    #repeaters.km4spl-repeaters { padding: 68px 0; }
356    .km4spl-repeaters-head,
357    .km4spl-repeater-grid { grid-template-columns: 1fr; }
358    .km4spl-repeaters-head { gap: 20px; }
359    .km4spl-repeater-card { min-height: 0; }
360  }
361  @media (max-width: 520px) {
362    #repeaters.km4spl-repeaters { width: min(100% - 28px, 1180px); }
363    .km4spl-repeater-card { padding: 24px 20px; border-radius: 18px; }
364    .km4spl-repeater-specs { grid-template-columns: 1fr; }
365  }
366</style>
367<script id="km4spl-repeaters-script">
368(function () {
369  const sectionHTML = `
370    <section class="km4spl-repeaters" id="repeaters" aria-labelledby="repeaters-title">
371      <div class="km4spl-repeaters-head">
372        <div>
373          <p class="km4spl-kicker">Savannah repeater resources</p>
374          <h2 id="repeaters-title">W4LHS repeaters and EchoLink status</h2>
375        </div>
376        <p class="km4spl-repeaters-intro">
377          The Coastal Amateur Radio Society supports amateur radio in and around Savannah, Georgia.
378          Use these links to view the live EchoLink status pages, or visit CARS for club and repeater information.
379        </p>
380      </div>
381      <div class="km4spl-repeater-grid">
382        <article class="km4spl-repeater-card">
383          <div class="km4spl-repeater-band">
384            <span class="km4spl-band-label">VHF repeater</span>
385            <span class="km4spl-call-label">W4LHS</span>
386          </div>
387          <h3>147.330 <span>MHz</span></h3>
388          <dl class="km4spl-repeater-specs">
389            <div><dt>Offset</dt><dd>+600 kHz</dd></div>
390            <div><dt>CTCSS tone</dt><dd>203.5 Hz</dd></div>
391          </dl>
392          <p class="km4spl-repeater-copy">
393            Located at the WSAV tower on Victory Drive, this repeater covers much of Chatham County,
394            with especially strong service around downtown and eastern Savannah. EchoLink is linked to the Georgia Conference.
395          </p>
396          <div class="km4spl-repeater-actions">
397            <a class="km4spl-status-button" href="http://echolink33.w4lhs.ampr.org/" target="_blank" rel="noopener noreferrer">Check 147.330 EchoLink status</a>
398            <a class="km4spl-cars-button" href="https://coastalamateurradiosociety.net/wpW4LHSblog/?page_id=10" target="_blank" rel="noopener noreferrer">View CARS repeater details</a>
399          </div>
400        </article>
401        <article class="km4spl-repeater-card">
402          <div class="km4spl-repeater-band">
403            <span class="km4spl-band-label">UHF repeater</span>
404            <span class="km4spl-call-label">W4LHS</span>
405          </div>
406          <h3>442.700 <span>MHz</span></h3>
407          <dl class="km4spl-repeater-specs">
408            <div><dt>Offset</dt><dd>+5 MHz</dd></div>
409            <div><dt>CTCSS tone</dt><dd>123.0 Hz</dd></div>
410          </dl>
411          <p class="km4spl-repeater-copy">
412            Its antenna is about 850 feet high at the WSAV tower on Little Neck Road, providing broad regional coverage.
413            CARS holds its Sunday ragchew net here at 8:30 p.m. local time, and all licensed amateurs are welcome.
414          </p>
415          <div class="km4spl-repeater-actions">
416            <a class="km4spl-status-button" href="http://echolink700.w4lhs.ampr.org/" target="_blank" rel="noopener noreferrer">Check 442.700 EchoLink status</a>
417            <a class="km4spl-cars-button" href="https://coastalamateurradiosociety.net/wpW4LHSblog/" target="_blank" rel="noopener noreferrer">Visit Coastal Amateur Radio Society</a>
418          </div>
419        </article>
420      </div>
421      <p class="km4spl-http-note">
422        EchoLink status pages are provided on HTTP addresses and open in a new tab; your browser may mark those status pages as “Not secure.”
423      </p>
424    </section>`;
425
426  function mountRepeaters() {
427    if (!document.getElementById("repeaters")) {
428      const holder = document.createElement("div");
429      holder.innerHTML = sectionHTML.trim();
430      const section = holder.firstElementChild;
431      const footer = document.querySelector("footer");
432      const about = document.getElementById("about");
433      if (footer && footer.parentNode) {
434        footer.parentNode.insertBefore(section, footer);
435      } else if (about && about.parentNode) {
436        about.parentNode.insertBefore(section, about.nextSibling);
437      } else {
438        document.body.appendChild(section);
439      }
440    }
441
442    const nav = document.querySelector(".site-header nav");
443    if (nav && !nav.querySelector('a[href="#repeaters"]')) {
444      const link = document.createElement("a");
445      link.href = "#repeaters";
446      link.textContent = "Repeaters";
447      nav.appendChild(link);
448    }
449  }
450
451  if (document.readyState === "loading") {
452    document.addEventListener("DOMContentLoaded", mountRepeaters, { once: true });
453  } else {
454    mountRepeaters();
455  }
456  window.addEventListener("load", mountRepeaters, { once: true });
457  setTimeout(mountRepeaters, 400);
458  setTimeout(mountRepeaters, 1400);
459
460  const observer = new MutationObserver(function () {
461    if (!document.getElementById("repeaters")) mountRepeaters();
462  });
463  observer.observe(document.documentElement, { childList: true, subtree: true });
464})();
465</script>
465
466<!-- KM4SPL-REPEATERS-END -->
467<link id="km4spl-project-links" rel="stylesheet" href="/projects/site-links.css?v=1860eb431fc5"><link rel="stylesheet" href="/projects/help.css?v=ed0a5b4b99f4">
467<script defer src="/projects/help-index.js?v=96ba0cb71630"></script>
467<script defer src="/projects/help-search.js?v=fc970f5b4665"></script>
467</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.