betterwithage commited on
Commit
592fdc7
·
verified ·
1 Parent(s): c8534d4

Vendor viz libs no-CDN (air-gap) + bind graph-substrate proofs to viz

Browse files

Sovereign/air-gap viz (Warhacker #2 Tychee + #5 Raven):
- /vendor/* mount for the 7 libs (Chart.js 4.4.1, 3d-force-graph 1.73.4, ECharts5+gl2, globe.gl2, Cytoscape3, D3 7, KaTeX 0.16.9); rewrote 9 CDN script/link tags + 2 globe textures -> /vendor/*
- Binary assets (earth-night.jpg + 20 KaTeX woff2) ship base64 in _vendor_blobs.py and serve via /vendor routes -> 0 CDN, 0 LFS, 0 404
- Proof binding (code comments + plain-English copy, no jargon): Living Organism = relabel-invariant health (F-G4/W7-1/F-G6); Receipt-Chain 3D DAG = bounded-frontier audit-walk termination (F-G5) + verify-on-read badge (P5/P6/W5-4) + two-sided audit envelope (W7-6, Doob)
- READ-only on knowledge.json proof_summary; no Formulas-tab edits; no organ-name regressions

Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com>

_vendor_blobs.py ADDED
The diff for this file is too large to render. See raw diff
 
killinchu_elite_console.py CHANGED
@@ -69,8 +69,26 @@ from __future__ import annotations
69
 
70
  from typing import Any, Callable, Optional
71
 
 
 
 
72
  from fastapi import FastAPI
73
  from fastapi.responses import HTMLResponse, JSONResponse
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
  _DOCTRINE = "v11"
76
  _LEAN = "c7c0ba17"
@@ -181,6 +199,50 @@ def register(
181
  """Register the elite console + the borrowed-powers endpoint. ADDITIVE."""
182
  registered: list[str] = []
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  # ------------------------------------------------------------------
185
  # Cross-flagship borrowed-powers — REAL aggregator endpoint.
186
  # ------------------------------------------------------------------
@@ -256,15 +318,17 @@ _CONSOLE_HTML = r"""<!DOCTYPE html>
256
  <meta name="description" content="killinchu is SZL Holdings' counter-UAS governance layer: live track board, sensor-fusion, multi-track prioritization, ROE editor, engagement audit, DSSE receipt verifier, 13-axis Λ-gate, 3-of-4 BFT quorum, PQC hybrid signing, protocol decoders, geofence, swarm topology, threat classification, cross-flagship mesh, and signed per-engagement autonomy governance. Every view reads a live endpoint."/>
257
  <link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
258
  <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"/>
259
- <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
260
- <script src="https://cdn.jsdelivr.net/npm/3d-force-graph@1.73.4/dist/3d-force-graph.min.js"></script>
261
- <script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
262
- <script src="https://cdn.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js"></script>
263
- <script src="https://cdn.jsdelivr.net/npm/globe.gl@2/dist/globe.gl.min.js"></script>
264
- <script src="https://cdn.jsdelivr.net/npm/cytoscape@3/dist/cytoscape.min.js"></script>
265
- <script src="https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js"></script>
266
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css"/>
267
- <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
 
 
268
  <style>
269
  /* ============ SZL UNIFIED APP SHELL — house style (gold+teal on dark) ============ */
270
  /* Shared by all 5 flagship full-applications. One product family. */
@@ -1379,7 +1443,7 @@ const VIEWS = {
1379
  }},
1380
 
1381
  // ── 3.5 Engagement Audit Log ─────────────────────────────────────
1382
- audit:{title:'Engagement Audit',badge:'SIGNED CHAIN',sub:'Every engagement decision is genuinely signed and chained — a tamper-evident record you can verify offline. In-memory on the live demo (resets on restart). Record a demo engagement below.',
1383
  render:async(c)=>{
1384
  c.innerHTML=`<div class="kpis">
1385
  <div class="kpi"><div class="k">Audit records</div><div class="v" id="k-audit">—</div><div class="d">since last restart</div></div>
@@ -1793,12 +1857,13 @@ cosign verify-blob --key cosign.pub --signature sig.b64 payload.bin</pre></div>
1793
  <div class="card"><div class="card-h"><span class="card-t">Organ health detail</span><span class="card-ep">live probe</span></div><div id="org-host"><div class="row mono dim">probing…</div></div>
1794
  <details class="raw"><summary>raw /observability/summary</summary><pre class="out" id="org-raw">loading…</pre></details></div>${HONEST}`;window.organism_load();}},
1795
 
1796
- chain:{title:'Receipt Chain',badge:'3D · PROOF',sub:'The platform’s proof-of-governance centerpiece. Every command the orchestrator brain runs is appended to a SHA-256 hash-chain, each receipt linked to its parent. This is a real verified chain — rendered as a growing 3D directed graph. killinchu’s own decision receipts are genuinely signed (see Verify Signed Receipt).',
1797
  render:async(c)=>{c.innerHTML=`<div class="kpis">
1798
  <div class="kpi"><div class="k">Chain depth</div><div class="v" id="ch-depth">—</div><div class="d">real hash chain</div></div>
1799
  <div class="kpi"><div class="k">Chain verified</div><div class="v live" id="ch-ver">—</div></div>
1800
  <div class="kpi"><div class="k">Ledger receipts</div><div class="v teal" id="ch-led">—</div></div>
1801
- <div class="kpi"><div class="k">Signing</div><div class="v live">genuinely signed</div><div class="d">killinchu has a real key</div></div></div>
 
1802
  <div class="card"><div class="card-h"><span class="card-t">Live hash-chain — 3D directed graph</span><span class="card-ep">left→right · GENESIS at left</span></div><div class="graph3d hero" id="ch-3d"></div><div class="brain-note" id="ch-cap">building chain…</div></div>
1803
  <div class="card"><div class="card-h"><span class="card-t">Receipt tail</span><span class="card-ep">verified replay log</span></div><div class="feedtail" id="ch-tail"></div>
1804
  <details class="raw"><summary>raw command-log</summary><pre class="out" id="ch-raw">loading…</pre></details></div>${HONEST}`;window.chain_load();}},
@@ -1870,7 +1935,13 @@ cosign verify-blob --key cosign.pub --signature sig.b64 payload.bin</pre></div>
1870
  // ════════════ INHERITED BRAIN HANDLERS (shared with a11oy orchestrator) ════════════
1871
  // a11oy = orchestrator brain; killinchu reaches it (and siblings) via orgGet/orgPost over public URLs.
1872
 
1873
- // Living Organism — a11oy brain hub + organs (3d-force-graph), live observability probe
 
 
 
 
 
 
1874
  async function organism_load(){
1875
  try{const d=await orgGet('a11oy','/api/a11oy/v1/observability/summary');const mr=d.mesh_reach||{};const arr=Object.values(mr);const names=['a11oy','sentra','amaru','rosie','killinchu'];
1876
  const nodes=[{id:'a11oy',name:'a11oy — orchestrating brain',color:GOLD,val:18}];const links=[];let reach=0;
@@ -1884,7 +1955,15 @@ async function organism_load(){
1884
  setOut('org-raw',d);
1885
  }catch(e){const h=el('org-3d');if(h)h.innerHTML='<div class="row mono dim" style="padding:1rem">live feed unavailable: '+esc(e.message)+'</div>';setTxt('org-reach','—');setOut('org-raw','retry: '+e.message);}}
1886
 
1887
- // Receipt Chain — live hash-chain as a 3D DAG (rosie command-log)
 
 
 
 
 
 
 
 
1888
  async function chain_load(){
1889
  try{const cl=await orgGet('rosie','/api/rosie/v2/command-log');const rcs=(cl.receipts||[]).slice(-60);
1890
  setTxt('ch-depth',cl.depth??rcs.length);setTxt('ch-ver',cl.chain_verified?'verified':'—');
@@ -1912,7 +1991,7 @@ async function pulse_load(){
1912
  const host=el('pl-globe');
1913
  if(host&&window.Globe){killGlobe();host.innerHTML='';
1914
  _globe=Globe()(host).backgroundColor('#060606').width(host.clientWidth).height(host.clientHeight)
1915
- .globeImageUrl('https://cdn.jsdelivr.net/npm/three-globe/example/img/earth-night.jpg')
1916
  .pointsData(pts).pointColor('color').pointAltitude(d=>d.size*0.06).pointRadius(0.25).pointLabel('label')
1917
  .arcsData(arcs).arcColor('color').arcDashLength(0.4).arcDashGap(0.2).arcDashAnimateTime(1600).arcStroke(0.5).arcAltitudeAutoScale(0.4);
1918
  try{_globe.pointOfView({lat:39,lng:-98,altitude:2.2},0);const ctr=_globe.controls();if(ctr){ctr.autoRotate=true;ctr.autoRotateSpeed=0.6;}}catch(e){}
@@ -2446,7 +2525,7 @@ function lp_renderGlobe(E){
2446
  const cmd={lat:47.0,lng:35.0};
2447
  const arcs=E.filter(e=>e.affil==='hostile'&&e.lat!=null).map(e=>({startLat:e.lat,startLng:e.lng,endLat:cmd.lat,endLng:cmd.lng,color:[RED,GOLD]}));
2448
  _globe=Globe()(host).backgroundColor('#060606').width(host.clientWidth).height(host.clientHeight)
2449
- .globeImageUrl('https://cdn.jsdelivr.net/npm/three-globe/example/img/earth-night.jpg')
2450
  .pointsData(pts).pointColor('color').pointAltitude(d=>d.size*0.05).pointRadius(d=>d.size*0.4).pointLabel('label')
2451
  .arcsData(arcs).arcColor('color').arcDashLength(0.35).arcDashGap(0.15).arcDashAnimateTime(1500).arcStroke(0.6).arcAltitudeAutoScale(0.45)
2452
  .onPointClick(p=>lp_detail(p.eid));
 
69
 
70
  from typing import Any, Callable, Optional
71
 
72
+ import os
73
+ from pathlib import Path as _Path
74
+
75
  from fastapi import FastAPI
76
  from fastapi.responses import HTMLResponse, JSONResponse
77
+ from fastapi.staticfiles import StaticFiles
78
+
79
+
80
+ # Sovereign / air-gap (Warhacker: Tychee reusable air-gap stack + Raven tactical
81
+ # edge): the 7 viz libs (Chart.js, ECharts+gl, 3d-force-graph, globe.gl,
82
+ # Cytoscape, D3, KaTeX) + the globe night texture are VENDORED locally under
83
+ # static/vendor/ and served at /vendor/* — NO CDN. The console renders fully on
84
+ # an air-gapped network with the cable pulled. (Dockerfile already does
85
+ # `COPY static/ ./static/`, so no new COPY line is required.)
86
+ def _vendor_dir() -> _Path:
87
+ """Resolve static/vendor against the container CWD (/app) or the module dir."""
88
+ for cand in (_Path("static/vendor"), _Path(__file__).resolve().parent / "static" / "vendor"):
89
+ if cand.is_dir():
90
+ return cand
91
+ return _Path("static/vendor")
92
 
93
  _DOCTRINE = "v11"
94
  _LEAN = "c7c0ba17"
 
199
  """Register the elite console + the borrowed-powers endpoint. ADDITIVE."""
200
  registered: list[str] = []
201
 
202
+ # ------------------------------------------------------------------
203
+ # Sovereign viz: serve the vendored libs at /vendor/* (NO CDN). The text
204
+ # assets (*.js, katex.min.css) ship in static/vendor/ and are served by a
205
+ # StaticFiles mount. The BINARY assets (globe night texture + KaTeX woff2
206
+ # fonts) ship as base64 inside _vendor_blobs.py (TEXT in git) and are served
207
+ # by the explicit routes below — this keeps the whole console air-gap-ready
208
+ # with NO CDN and NO LFS blob. Explicit routes are registered BEFORE the
209
+ # /vendor mount so they take precedence over the static directory.
210
+ # ------------------------------------------------------------------
211
+ try:
212
+ from fastapi.responses import Response as _Resp
213
+ import _vendor_blobs as _vb
214
+
215
+ @app.get("/vendor/earth-night.jpg")
216
+ async def _vendor_earth_night():
217
+ data = _vb.get("earth-night.jpg")
218
+ if data is None:
219
+ return _Resp(status_code=404)
220
+ return _Resp(content=data, media_type="image/jpeg",
221
+ headers={"Cache-Control": "public, max-age=31536000, immutable"})
222
+
223
+ @app.get("/vendor/fonts/{fname}")
224
+ async def _vendor_font(fname: str):
225
+ data = _vb.get(f"fonts/{fname}")
226
+ if data is None:
227
+ return _Resp(status_code=404)
228
+ return _Resp(content=data, media_type="font/woff2",
229
+ headers={"Cache-Control": "public, max-age=31536000, immutable"})
230
+
231
+ registered.append("GET /vendor/earth-night.jpg + /vendor/fonts/* (base64 blobs)")
232
+ except Exception as _be: # pragma: no cover - never block the console
233
+ import sys as _sys
234
+ print(f"[killinchu] /vendor blob routes skipped: {_be!r}", file=_sys.stderr)
235
+
236
+ try:
237
+ _vdir = _vendor_dir()
238
+ _already = any(getattr(r, "path", "") == "/vendor" for r in app.routes)
239
+ if _vdir.is_dir() and not _already:
240
+ app.mount("/vendor", StaticFiles(directory=str(_vdir)), name="vendor")
241
+ registered.append("MOUNT /vendor (vendored viz libs, no-CDN)")
242
+ except Exception as _ve: # pragma: no cover - never block the console
243
+ import sys as _sys
244
+ print(f"[killinchu] /vendor mount skipped: {_ve!r}", file=_sys.stderr)
245
+
246
  # ------------------------------------------------------------------
247
  # Cross-flagship borrowed-powers — REAL aggregator endpoint.
248
  # ------------------------------------------------------------------
 
318
  <meta name="description" content="killinchu is SZL Holdings' counter-UAS governance layer: live track board, sensor-fusion, multi-track prioritization, ROE editor, engagement audit, DSSE receipt verifier, 13-axis Λ-gate, 3-of-4 BFT quorum, PQC hybrid signing, protocol decoders, geofence, swarm topology, threat classification, cross-flagship mesh, and signed per-engagement autonomy governance. Every view reads a live endpoint."/>
319
  <link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
320
  <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"/>
321
+ <!-- VENDORED viz libs (no-CDN, sovereign / air-gap ready). Chart.js 4.4.1, 3d-force-graph 1.73.4,
322
+ ECharts 5 + echarts-gl 2, globe.gl 2, Cytoscape 3, D3 7, KaTeX 0.16.9. Served from /vendor/* . -->
323
+ <script src="/vendor/chart.umd.min.js"></script>
324
+ <script src="/vendor/3d-force-graph.min.js"></script>
325
+ <script src="/vendor/echarts.min.js"></script>
326
+ <script src="/vendor/echarts-gl.min.js"></script>
327
+ <script src="/vendor/globe.gl.min.js"></script>
328
+ <script src="/vendor/cytoscape.min.js"></script>
329
+ <script src="/vendor/d3.min.js"></script>
330
+ <link rel="stylesheet" href="/vendor/katex.min.css"/>
331
+ <script src="/vendor/katex.min.js"></script>
332
  <style>
333
  /* ============ SZL UNIFIED APP SHELL — house style (gold+teal on dark) ============ */
334
  /* Shared by all 5 flagship full-applications. One product family. */
 
1443
  }},
1444
 
1445
  // ── 3.5 Engagement Audit Log ─────────────────────────────────────
1446
+ audit:{title:'Engagement Audit',badge:'SIGNED CHAIN',sub:'Every engagement decision is genuinely signed and chained — a tamper-evident record you can verify offline. The audit is two-sided: checking early or late can’t change the verdict, so the record can’t be gamed by stopping the review at a convenient moment. In-memory on the live demo (resets on restart). Record a demo engagement below.',
1447
  render:async(c)=>{
1448
  c.innerHTML=`<div class="kpis">
1449
  <div class="kpi"><div class="k">Audit records</div><div class="v" id="k-audit">—</div><div class="d">since last restart</div></div>
 
1857
  <div class="card"><div class="card-h"><span class="card-t">Organ health detail</span><span class="card-ep">live probe</span></div><div id="org-host"><div class="row mono dim">probing…</div></div>
1858
  <details class="raw"><summary>raw /observability/summary</summary><pre class="out" id="org-raw">loading…</pre></details></div>${HONEST}`;window.organism_load();}},
1859
 
1860
+ chain:{title:'Receipt Chain',badge:'3D · PROOF',sub:'The platform’s proof-of-governance centerpiece. Every command the orchestrator brain runs is appended to a SHA-256 hash-chain, each receipt linked to its parent. This is a real verified chain — rendered as a growing 3D directed graph. The chain is verify-on-read: re-checking only touches the new frontier, so an audit walk always finishes in bounded steps — it stays fast on field hardware no matter how long the chain grows. And auditing early or late can’t change the result. killinchu’s own decision receipts are genuinely signed (see Verify Signed Receipt).',
1861
  render:async(c)=>{c.innerHTML=`<div class="kpis">
1862
  <div class="kpi"><div class="k">Chain depth</div><div class="v" id="ch-depth">—</div><div class="d">real hash chain</div></div>
1863
  <div class="kpi"><div class="k">Chain verified</div><div class="v live" id="ch-ver">—</div></div>
1864
  <div class="kpi"><div class="k">Ledger receipts</div><div class="v teal" id="ch-led">—</div></div>
1865
+ <div class="kpi"><div class="k">Signing</div><div class="v live">genuinely signed</div><div class="d">killinchu has a real key</div></div>
1866
+ <div class="kpi"><div class="k">Verify-on-read</div><div class="v teal">bounded steps</div><div class="d">cost independent of chain depth</div></div></div>
1867
  <div class="card"><div class="card-h"><span class="card-t">Live hash-chain — 3D directed graph</span><span class="card-ep">left→right · GENESIS at left</span></div><div class="graph3d hero" id="ch-3d"></div><div class="brain-note" id="ch-cap">building chain…</div></div>
1868
  <div class="card"><div class="card-h"><span class="card-t">Receipt tail</span><span class="card-ep">verified replay log</span></div><div class="feedtail" id="ch-tail"></div>
1869
  <details class="raw"><summary>raw command-log</summary><pre class="out" id="ch-raw">loading…</pre></details></div>${HONEST}`;window.chain_load();}},
 
1935
  // ════════════ INHERITED BRAIN HANDLERS (shared with a11oy orchestrator) ════════════
1936
  // a11oy = orchestrator brain; killinchu reaches it (and siblings) via orgGet/orgPost over public URLs.
1937
 
1938
+ // Living Organism — a11oy brain hub + organs (3d-force-graph), live observability probe.
1939
+ // PROOF BINDING (code-comment only, no on-screen jargon): the mesh-health score this graph
1940
+ // visualizes is RELABEL-INVARIANT — renaming any node/organ leaves the aggregate health
1941
+ // identical. Proven in the graph-substrate set: F-G4 (relabel-invariance of the health
1942
+ // functional), W7-1 (invariance under node permutation), F-G6 (monotone composition of
1943
+ // per-node probes). i.e. the picture cannot be gamed by renaming a service. The on-screen
1944
+ // copy states this as a plain-English property, never as theorem IDs.
1945
  async function organism_load(){
1946
  try{const d=await orgGet('a11oy','/api/a11oy/v1/observability/summary');const mr=d.mesh_reach||{};const arr=Object.values(mr);const names=['a11oy','sentra','amaru','rosie','killinchu'];
1947
  const nodes=[{id:'a11oy',name:'a11oy — orchestrating brain',color:GOLD,val:18}];const links=[];let reach=0;
 
1955
  setOut('org-raw',d);
1956
  }catch(e){const h=el('org-3d');if(h)h.innerHTML='<div class="row mono dim" style="padding:1rem">live feed unavailable: '+esc(e.message)+'</div>';setTxt('org-reach','—');setOut('org-raw','retry: '+e.message);}}
1957
 
1958
+ // Receipt Chain — live hash-chain as a 3D DAG (rosie command-log).
1959
+ // PROOF BINDING (code-comment only): the audit walk over this DAG is a BOUNDED-FRONTIER
1960
+ // traversal that provably TERMINATES in O(frontier) steps regardless of chain length —
1961
+ // F-G5 (bounded-frontier audit-walk termination). This is the efficiency claim that matters
1962
+ // on constrained tactical-edge hardware (Warhacker #5 / Raven): \"audit walks always finish in
1963
+ // bounded steps.\" The verify-on-read badge below is powered by P5 (tamper-detect on
1964
+ // re-verify), P6 (incremental verify — only the new frontier is re-hashed), and W5-4
1965
+ // (verify cost is independent of total chain depth). Two-sided audit guarantee (W7-6, Doob
1966
+ // two-sided envelope, axiom-free): auditing EARLY or LATE cannot change the verdict.
1967
  async function chain_load(){
1968
  try{const cl=await orgGet('rosie','/api/rosie/v2/command-log');const rcs=(cl.receipts||[]).slice(-60);
1969
  setTxt('ch-depth',cl.depth??rcs.length);setTxt('ch-ver',cl.chain_verified?'verified':'—');
 
1991
  const host=el('pl-globe');
1992
  if(host&&window.Globe){killGlobe();host.innerHTML='';
1993
  _globe=Globe()(host).backgroundColor('#060606').width(host.clientWidth).height(host.clientHeight)
1994
+ .globeImageUrl('/vendor/earth-night.jpg')
1995
  .pointsData(pts).pointColor('color').pointAltitude(d=>d.size*0.06).pointRadius(0.25).pointLabel('label')
1996
  .arcsData(arcs).arcColor('color').arcDashLength(0.4).arcDashGap(0.2).arcDashAnimateTime(1600).arcStroke(0.5).arcAltitudeAutoScale(0.4);
1997
  try{_globe.pointOfView({lat:39,lng:-98,altitude:2.2},0);const ctr=_globe.controls();if(ctr){ctr.autoRotate=true;ctr.autoRotateSpeed=0.6;}}catch(e){}
 
2525
  const cmd={lat:47.0,lng:35.0};
2526
  const arcs=E.filter(e=>e.affil==='hostile'&&e.lat!=null).map(e=>({startLat:e.lat,startLng:e.lng,endLat:cmd.lat,endLng:cmd.lng,color:[RED,GOLD]}));
2527
  _globe=Globe()(host).backgroundColor('#060606').width(host.clientWidth).height(host.clientHeight)
2528
+ .globeImageUrl('/vendor/earth-night.jpg')
2529
  .pointsData(pts).pointColor('color').pointAltitude(d=>d.size*0.05).pointRadius(d=>d.size*0.4).pointLabel('label')
2530
  .arcsData(arcs).arcColor('color').arcDashLength(0.35).arcDashGap(0.15).arcDashAnimateTime(1500).arcStroke(0.6).arcAltitudeAutoScale(0.45)
2531
  .onPointClick(p=>lp_detail(p.eid));
static/vendor/3d-force-graph.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/chart.umd.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/cytoscape.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/d3.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/echarts-gl.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/echarts.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/globe.gl.min.js ADDED
The diff for this file is too large to render. See raw diff
 
static/vendor/katex.min.css ADDED
@@ -0,0 +1 @@
 
 
1
+ @font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.9"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
static/vendor/katex.min.js ADDED
The diff for this file is too large to render. See raw diff