diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..24a8e87939aa53cdd833f6be7610cb4972e063ad
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.png filter=lfs diff=lfs merge=lfs -text
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0b84d1c2b6fadac98045761d74c265f4892fc43
--- /dev/null
+++ b/README.md
@@ -0,0 +1,18 @@
+---
+title: agy
+emoji: 🌋
+colorFrom: blue
+colorTo: red
+sdk: static
+pinned: false
+---
+
+# CWA Seismic Warning & AI Agent Swarm Showcase (AGY)
+
+This Hugging Face Space showcases Taiwan's Central Weather Administration (CWA) next-generation seismic monitoring and earthquake warning technologies. It presents four key PowerPoint documents through an interactive, premium dark-mode web application featuring:
+
+1. **Slide Showcase Viewer**: Side-by-side slide viewing with extracted text outlines and key takeaways.
+2. **Blind Zone & Warning Lead Time Simulator**: Interactive physics calculations for travel times and warning zones.
+3. **AI Agent Swarm Flow Diagram**: Dynamic interactive visualization of CWA multi-agent automation loops.
+4. **大型地震模型 (LEM) Panel**: Context and details for the Wav2Vec 2.0-adapted SeisWav2Vec self-supervised deep learning model.
+5. **Universal Keyword Search Indexer**: Search through all 164 slides text content instantly.
diff --git a/index.css b/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..61a59c8a4e7c1ec2fd7d511c8d77d8f90bb8810f
--- /dev/null
+++ b/index.css
@@ -0,0 +1,1070 @@
+@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Noto+Sans+TC:wght@300;400;500;700;900&family=Outfit:wght@300;400;500;600;700;800;900&display=swap');
+
+:root {
+ --bg-color: #080c14;
+ --card-bg: rgba(16, 22, 36, 0.7);
+ --card-border: rgba(255, 255, 255, 0.08);
+ --text-main: #f1f5f9;
+ --text-muted: #94a3b8;
+ --text-dark: #64748b;
+
+ /* Accent Colors */
+ --accent-cyan: #06b6d4;
+ --accent-cyan-glow: rgba(6, 182, 212, 0.15);
+ --accent-blue: #3b82f6;
+ --accent-blue-glow: rgba(59, 130, 246, 0.15);
+ --accent-amber: #f59e0b;
+ --accent-amber-glow: rgba(245, 158, 11, 0.15);
+ --accent-emerald: #10b981;
+ --accent-emerald-glow: rgba(16, 185, 129, 0.15);
+ --accent-rose: #f43f5e;
+ --accent-rose-glow: rgba(244, 63, 94, 0.15);
+
+ --font-sans: 'Outfit', 'Noto Sans TC', sans-serif;
+ --font-mono: 'JetBrains Mono', monospace;
+
+ --sidebar-width: 280px;
+ --header-height: 70px;
+}
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ background-color: var(--bg-color);
+ color: var(--text-main);
+ font-family: var(--font-sans);
+ min-height: 100vh;
+ display: flex;
+ overflow: hidden;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* Custom Scrollbar */
+::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+}
+::-webkit-scrollbar-track {
+ background: rgba(8, 12, 20, 0.5);
+}
+::-webkit-scrollbar-thumb {
+ background: rgba(148, 163, 184, 0.2);
+ border-radius: 99px;
+}
+::-webkit-scrollbar-thumb:hover {
+ background: var(--accent-cyan);
+}
+
+/* Glassmorphism Panel styles */
+.glass-panel {
+ background: var(--card-bg);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+ border: 1px solid var(--card-border);
+ border-radius: 16px;
+ box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.6);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.glass-panel:hover {
+ border-color: rgba(255, 255, 255, 0.12);
+}
+
+/* Main Dashboard Layout */
+.dashboard-container {
+ display: flex;
+ width: 100vw;
+ height: 100vh;
+ overflow: hidden;
+ background: radial-gradient(circle at 50% 0%, #0e1726 0%, #05080f 100%);
+}
+
+/* Sidebar Navigation */
+.sidebar {
+ width: var(--sidebar-width);
+ height: 100%;
+ background: rgba(10, 15, 26, 0.85);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ border-right: 1px solid var(--card-border);
+ display: flex;
+ flex-direction: column;
+ z-index: 100;
+ flex-shrink: 0;
+ transition: transform 0.3s ease;
+}
+
+.sidebar-header {
+ padding: 24px;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+}
+
+.sidebar-logo {
+ width: 38px;
+ height: 38px;
+ border-radius: 10px;
+ background: linear-gradient(135deg, var(--accent-cyan) 0%, var(--accent-blue) 100%);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 4px 15px rgba(6, 182, 212, 0.3);
+}
+
+.sidebar-logo svg {
+ width: 22px;
+ height: 22px;
+ color: white;
+}
+
+.sidebar-title-container h2 {
+ font-size: 18px;
+ font-weight: 900;
+ letter-spacing: 0.5px;
+ background: linear-gradient(to right, #00f2fe, #4facfe);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+.sidebar-title-container p {
+ font-size: 10px;
+ color: var(--text-muted);
+ font-family: var(--font-mono);
+ text-transform: uppercase;
+ margin-top: 1px;
+}
+
+.sidebar-menu {
+ flex: 1;
+ padding: 20px 14px;
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ overflow-y: auto;
+}
+
+.menu-item {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 12px 16px;
+ color: var(--text-muted);
+ text-decoration: none;
+ font-size: 14px;
+ font-weight: 500;
+ border-radius: 12px;
+ transition: all 0.2s ease;
+ cursor: pointer;
+ border: 1px solid transparent;
+}
+
+.menu-item svg {
+ width: 18px;
+ height: 18px;
+ transition: transform 0.2s ease;
+}
+
+.menu-item:hover {
+ color: var(--text-main);
+ background: rgba(255, 255, 255, 0.04);
+}
+
+.menu-item:hover svg {
+ transform: translateX(2px);
+}
+
+.menu-item.active {
+ color: #white;
+ background: linear-gradient(90deg, rgba(6, 182, 212, 0.15) 0%, rgba(59, 130, 246, 0.05) 100%);
+ border-color: rgba(6, 182, 212, 0.3);
+ box-shadow: 0 4px 15px rgba(6, 182, 212, 0.05);
+}
+
+.menu-item.active svg {
+ color: var(--accent-cyan);
+}
+
+.sidebar-footer {
+ padding: 20px;
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
+ font-size: 11px;
+ color: var(--text-dark);
+ text-align: center;
+ font-family: var(--font-mono);
+}
+
+/* App Main Body */
+.main-content {
+ flex: 1;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ position: relative;
+}
+
+/* Header */
+.top-header {
+ height: var(--header-height);
+ padding: 0 32px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+ background: rgba(10, 15, 26, 0.3);
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+ z-index: 10;
+ flex-shrink: 0;
+}
+
+.header-title h3 {
+ font-size: 18px;
+ font-weight: 800;
+ color: white;
+}
+
+.header-title p {
+ font-size: 12px;
+ color: var(--text-muted);
+}
+
+.header-badge {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ background: rgba(6, 182, 212, 0.1);
+ border: 1px solid rgba(6, 182, 212, 0.2);
+ padding: 6px 14px;
+ border-radius: 99px;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--accent-cyan);
+}
+
+.header-badge span.pulse-dot {
+ width: 8px;
+ height: 8px;
+ background-color: var(--accent-cyan);
+ border-radius: 50%;
+ box-shadow: 0 0 10px var(--accent-cyan);
+ animation: pulse-ring 2s infinite;
+}
+
+/* Scrollable Viewport Container */
+.viewport-container {
+ flex: 1;
+ padding: 32px;
+ overflow-y: auto;
+ position: relative;
+}
+
+/* Tab Sections */
+.tab-section {
+ display: none;
+ animation: fadeIn 0.4s ease-out forwards;
+}
+
+.tab-section.active {
+ display: block;
+}
+
+/* Grid Systems */
+.grid-container {
+ display: grid;
+ grid-template-columns: repeat(12, 1fr);
+ gap: 24px;
+}
+
+.col-12 { grid-column: span 12; }
+.col-8 { grid-column: span 8; }
+.col-6 { grid-column: span 6; }
+.col-4 { grid-column: span 4; }
+
+@media (max-width: 1024px) {
+ .col-8, .col-6, .col-4 {
+ grid-column: span 12;
+ }
+}
+
+/* General CSS components */
+h4.section-title {
+ font-size: 20px;
+ font-weight: 800;
+ margin-bottom: 24px;
+ color: white;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+h4.section-title::before {
+ content: '';
+ width: 4px;
+ height: 20px;
+ background: linear-gradient(to bottom, var(--accent-cyan), var(--accent-blue));
+ border-radius: 2px;
+ display: inline-block;
+}
+
+/* CSS Cards */
+.card-padding {
+ padding: 24px;
+}
+
+.card-title {
+ font-size: 16px;
+ font-weight: 700;
+ color: white;
+ margin-bottom: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.text-content {
+ font-size: 14px;
+ line-height: 1.6;
+ color: var(--text-muted);
+}
+
+.text-content p {
+ margin-bottom: 12px;
+}
+
+/* Overview Dashboard Components */
+.ppt-grid-card {
+ height: 100%;
+ cursor: pointer;
+ overflow: hidden;
+ position: relative;
+}
+
+.ppt-grid-card::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 4px;
+ background: linear-gradient(90deg, var(--accent-blue) 0%, var(--accent-cyan) 100%);
+ opacity: 0.7;
+}
+
+.ppt-grid-card:hover {
+ transform: translateY(-4px);
+ border-color: rgba(6, 182, 212, 0.3);
+ box-shadow: 0 15px 30px -10px rgba(6, 182, 212, 0.15);
+}
+
+.ppt-tag {
+ display: inline-block;
+ padding: 4px 10px;
+ background: rgba(59, 130, 246, 0.1);
+ border: 1px solid rgba(59, 130, 246, 0.2);
+ color: #60a5fa;
+ font-size: 11px;
+ font-weight: 700;
+ border-radius: 6px;
+ margin-bottom: 12px;
+ text-transform: uppercase;
+ font-family: var(--font-mono);
+}
+
+.ppt-grid-card:nth-child(2) .ppt-tag {
+ background: rgba(16, 185, 129, 0.1);
+ border-color: rgba(16, 185, 129, 0.2);
+ color: #34d399;
+}
+.ppt-grid-card:nth-child(3) .ppt-tag {
+ background: rgba(245, 158, 11, 0.1);
+ border-color: rgba(245, 158, 11, 0.2);
+ color: #fbbf24;
+}
+.ppt-grid-card:nth-child(4) .ppt-tag {
+ background: rgba(244, 63, 94, 0.1);
+ border-color: rgba(244, 63, 94, 0.2);
+ color: #f87171;
+}
+
+.ppt-title {
+ font-size: 15px;
+ font-weight: 800;
+ color: white;
+ line-height: 1.4;
+ margin-bottom: 12px;
+ min-height: 42px;
+}
+
+.ppt-info {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 12px;
+ color: var(--text-dark);
+ font-family: var(--font-mono);
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
+ padding-top: 12px;
+ margin-top: 8px;
+}
+
+.view-btn {
+ background: transparent;
+ border: none;
+ color: var(--accent-cyan);
+ font-size: 13px;
+ font-weight: 700;
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ cursor: pointer;
+ transition: all 0.2s ease;
+}
+
+.view-btn:hover {
+ color: var(--text-main);
+}
+
+/* Slide Viewer System */
+.slide-layout-wrapper {
+ display: flex;
+ gap: 24px;
+ height: calc(100vh - 160px);
+}
+
+.slide-selector-pane {
+ width: 250px;
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 0;
+ height: 100%;
+}
+
+.slide-selector-header {
+ padding: 16px;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+}
+
+.ppt-selector-dropdown {
+ width: 100%;
+ background: rgba(8, 12, 20, 0.8);
+ border: 1px solid var(--card-border);
+ color: white;
+ padding: 10px 14px;
+ border-radius: 10px;
+ font-weight: 600;
+ font-size: 13px;
+ cursor: pointer;
+ outline: none;
+}
+
+.slide-thumbnails-list {
+ flex: 1;
+ overflow-y: auto;
+ padding: 12px;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.thumb-item {
+ padding: 10px 14px;
+ background: rgba(255, 255, 255, 0.02);
+ border: 1px solid transparent;
+ border-radius: 10px;
+ cursor: pointer;
+ transition: all 0.2s ease;
+}
+
+.thumb-item:hover {
+ background: rgba(255, 255, 255, 0.05);
+}
+
+.thumb-item.active {
+ background: rgba(6, 182, 212, 0.06);
+ border-color: rgba(6, 182, 212, 0.3);
+}
+
+.thumb-num {
+ font-family: var(--font-mono);
+ font-size: 11px;
+ font-weight: 700;
+ color: var(--accent-cyan);
+ margin-bottom: 4px;
+ display: block;
+}
+
+.thumb-title {
+ font-size: 12px;
+ color: var(--text-main);
+ font-weight: 600;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.slide-viewer-pane {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ gap: 20px;
+}
+
+.slide-display-card {
+ flex: 1;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ background: #020408;
+ border-radius: 16px;
+ border: 1px solid var(--card-border);
+}
+
+.slide-display-card img {
+ max-width: 95%;
+ max-height: 95%;
+ object-contain: fit;
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
+ border-radius: 4px;
+ transition: transform 0.3s ease;
+ cursor: zoom-in;
+}
+
+.slide-fullscreen-btn {
+ position: absolute;
+ top: 16px;
+ right: 16px;
+ width: 36px;
+ height: 36px;
+ border-radius: 10px;
+ background: rgba(16, 22, 36, 0.8);
+ border: 1px solid var(--card-border);
+ color: white;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ z-index: 5;
+ transition: all 0.2s ease;
+}
+
+.slide-fullscreen-btn:hover {
+ background: var(--accent-cyan);
+ border-color: var(--accent-cyan);
+}
+
+.slide-info-card {
+ height: 200px;
+ display: flex;
+ overflow: hidden;
+ flex-shrink: 0;
+}
+
+.slide-info-text {
+ flex: 1;
+ padding: 20px;
+ overflow-y: auto;
+ border-right: 1px solid rgba(255, 255, 255, 0.05);
+}
+
+.slide-info-takeaway {
+ width: 300px;
+ padding: 20px;
+ overflow-y: auto;
+ background: rgba(8, 12, 20, 0.3);
+}
+
+.slide-info-card h5 {
+ font-size: 14px;
+ font-weight: 800;
+ color: white;
+ margin-bottom: 12px;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.slide-info-card ul {
+ list-style: none;
+}
+
+.slide-info-card li {
+ font-size: 13px;
+ color: var(--text-muted);
+ line-height: 1.6;
+ margin-bottom: 8px;
+ position: relative;
+ padding-left: 14px;
+}
+
+.slide-info-card li::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 7px;
+ width: 5px;
+ height: 5px;
+ border-radius: 50%;
+ background-color: var(--accent-cyan);
+}
+
+.slide-viewer-controls {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ background: rgba(16, 22, 36, 0.5);
+ border: 1px solid var(--card-border);
+ padding: 10px 20px;
+ border-radius: 12px;
+ flex-shrink: 0;
+}
+
+.nav-btn {
+ background: rgba(255, 255, 255, 0.03);
+ border: 1px solid var(--card-border);
+ color: white;
+ padding: 8px 16px;
+ border-radius: 8px;
+ cursor: pointer;
+ font-weight: 700;
+ font-size: 13px;
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ transition: all 0.2s ease;
+}
+
+.nav-btn:hover:not(:disabled) {
+ background: rgba(255, 255, 255, 0.08);
+}
+
+.nav-btn:disabled {
+ opacity: 0.3;
+ cursor: not-allowed;
+}
+
+/* Simulator System (Blind Zone warning lead time calculator) */
+.input-group {
+ margin-bottom: 20px;
+}
+
+.input-label {
+ display: flex;
+ justify-content: space-between;
+ font-size: 13px;
+ font-weight: 700;
+ color: var(--text-muted);
+ margin-bottom: 8px;
+}
+
+.input-label span.value-display {
+ color: var(--accent-cyan);
+ font-family: var(--font-mono);
+ font-weight: 700;
+}
+
+.input-slider {
+ width: 100%;
+ height: 6px;
+ background: rgba(0, 0, 0, 0.5);
+ border-radius: 99px;
+ outline: none;
+ appearance: none;
+ cursor: pointer;
+ accent-color: var(--accent-cyan);
+}
+
+.calculator-summary-box {
+ background: rgba(6, 182, 212, 0.04);
+ border: 1px solid rgba(6, 182, 212, 0.15);
+ border-radius: 12px;
+ padding: 20px;
+ margin-top: 24px;
+}
+
+.lead-time-large-display {
+ font-size: 48px;
+ font-weight: 900;
+ color: var(--accent-cyan);
+ font-family: var(--font-mono);
+ text-shadow: 0 0 20px rgba(6, 182, 212, 0.4);
+ margin-bottom: 8px;
+ text-align: center;
+}
+
+.lead-time-large-display span {
+ font-size: 20px;
+ font-weight: 700;
+ margin-left: 4px;
+ text-shadow: none;
+}
+
+.warning-status-alert {
+ text-align: center;
+ font-size: 14px;
+ font-weight: 800;
+ padding: 8px 12px;
+ border-radius: 8px;
+ margin-top: 12px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.status-safe {
+ background: rgba(16, 185, 129, 0.15);
+ border: 1px solid rgba(16, 185, 129, 0.3);
+ color: #34d399;
+}
+
+.status-blind {
+ background: rgba(244, 63, 94, 0.15);
+ border: 1px solid rgba(244, 63, 94, 0.3);
+ color: #f87171;
+}
+
+/* Blind zone graphics */
+.blind-zone-canvas-wrapper {
+ width: 100%;
+ height: 380px;
+ background: #020408;
+ border-radius: 12px;
+ border: 1px solid var(--card-border);
+ overflow: hidden;
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.blind-zone-canvas-wrapper canvas {
+ width: 100%;
+ height: 100%;
+}
+
+/* Agent Swarm System Visualizer */
+.agent-swarm-wrapper {
+ position: relative;
+ width: 100%;
+ height: 480px;
+ background: #020408;
+ border-radius: 16px;
+ border: 1px solid var(--card-border);
+ overflow: hidden;
+ cursor: grab;
+}
+
+.agent-card-overlay {
+ position: absolute;
+ bottom: 24px;
+ left: 24px;
+ right: 24px;
+ background: rgba(10, 15, 26, 0.9);
+ border: 1px solid var(--card-border);
+ border-radius: 14px;
+ padding: 20px;
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.7);
+ display: flex;
+ gap: 16px;
+ align-items: flex-start;
+ z-index: 10;
+}
+
+.agent-icon-box {
+ width: 48px;
+ height: 48px;
+ border-radius: 12px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ box-shadow: 0 4px 12px rgba(0,0,0,0.5);
+}
+
+.agent-details h4 {
+ font-size: 15px;
+ font-weight: 800;
+ color: white;
+ margin-bottom: 4px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+.agent-details h4 span.agent-role-badge {
+ font-size: 10px;
+ font-family: var(--font-mono);
+ padding: 2px 8px;
+ border-radius: 4px;
+ font-weight: 700;
+ text-transform: uppercase;
+}
+
+.agent-details p {
+ font-size: 13px;
+ color: var(--text-muted);
+ line-height: 1.5;
+}
+
+/* Search engine layout */
+.search-container {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ height: calc(100vh - 160px);
+}
+
+.search-input-box {
+ position: relative;
+ width: 100%;
+}
+
+.search-input-box input {
+ width: 100%;
+ background: rgba(16, 22, 36, 0.7);
+ border: 1px solid var(--card-border);
+ color: white;
+ padding: 16px 20px 16px 54px;
+ border-radius: 14px;
+ font-size: 15px;
+ font-weight: 600;
+ outline: none;
+ transition: all 0.3s ease;
+ backdrop-filter: blur(10px);
+}
+
+.search-input-box input:focus {
+ border-color: var(--accent-cyan);
+ box-shadow: 0 0 20px var(--accent-cyan-glow);
+}
+
+.search-input-box svg {
+ position: absolute;
+ top: 17px;
+ left: 20px;
+ width: 20px;
+ height: 20px;
+ color: var(--text-muted);
+}
+
+.search-results-viewport {
+ flex: 1;
+ overflow-y: auto;
+ padding-right: 8px;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+}
+
+.search-result-card {
+ display: flex;
+ gap: 20px;
+ cursor: pointer;
+}
+
+.search-result-card:hover {
+ border-color: rgba(6, 182, 212, 0.3);
+ background: rgba(255, 255, 255, 0.02);
+}
+
+.result-image-box {
+ width: 160px;
+ height: 100px;
+ background: #020408;
+ border-radius: 10px;
+ overflow: hidden;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+}
+
+.result-image-box img {
+ max-width: 95%;
+ max-height: 95%;
+ object-fit: contain;
+}
+
+.result-content-box {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ min-width: 0;
+}
+
+.result-meta {
+ font-size: 11px;
+ font-family: var(--font-mono);
+ font-weight: 700;
+ color: var(--accent-cyan);
+ margin-bottom: 6px;
+}
+
+.result-title {
+ font-size: 14px;
+ font-weight: 700;
+ color: white;
+ margin-bottom: 6px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.result-snippet {
+ font-size: 12.5px;
+ color: var(--text-muted);
+ line-height: 1.5;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+}
+
+.no-results-view {
+ text-align: center;
+ padding: 60px 20px;
+ color: var(--text-dark);
+}
+
+.no-results-view svg {
+ width: 48px;
+ height: 48px;
+ margin-bottom: 16px;
+ opacity: 0.5;
+}
+
+/* Fullscreen lightroom modal */
+.lightroom-modal {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ background: rgba(2, 4, 8, 0.95);
+ backdrop-filter: blur(12px);
+ z-index: 1000;
+ display: none;
+ align-items: center;
+ justify-content: center;
+ cursor: zoom-out;
+ animation: fadeIn 0.2s ease-out forwards;
+}
+
+.lightroom-modal img {
+ max-width: 95vw;
+ max-height: 90vh;
+ object-fit: contain;
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.9);
+ border-radius: 6px;
+}
+
+.lightroom-close-btn {
+ position: absolute;
+ top: 24px;
+ right: 24px;
+ width: 48px;
+ height: 48px;
+ border-radius: 50%;
+ background: rgba(16, 22, 36, 0.8);
+ border: 1px solid var(--card-border);
+ color: white;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ transition: all 0.2s ease;
+}
+
+.lightroom-close-btn:hover {
+ background: var(--accent-rose);
+ border-color: var(--accent-rose);
+}
+
+/* Animations */
+@keyframes fadeIn {
+ from { opacity: 0; transform: translateY(6px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+@keyframes pulse-ring {
+ 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(6, 182, 212, 0.5); }
+ 70% { transform: scale(1); box-shadow: 0 0 0 10px rgba(6, 182, 212, 0); }
+ 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(6, 182, 212, 0); }
+}
+
+/* Download Center */
+.download-card {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20px 24px;
+ background: rgba(255, 255, 255, 0.02);
+ border: 1px solid var(--card-border);
+ border-radius: 12px;
+ margin-bottom: 16px;
+ transition: all 0.2s ease;
+}
+
+.download-card:hover {
+ background: rgba(255, 255, 255, 0.04);
+ border-color: rgba(59, 130, 246, 0.3);
+}
+
+.download-meta {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.download-icon {
+ width: 42px;
+ height: 42px;
+ background: rgba(59, 130, 246, 0.15);
+ border-radius: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--accent-blue);
+ flex-shrink: 0;
+}
+
+.download-details h5 {
+ font-size: 14px;
+ font-weight: 700;
+ color: white;
+ margin-bottom: 2px;
+}
+
+.download-details p {
+ font-size: 12px;
+ color: var(--text-dark);
+}
+
+.download-action-btn {
+ background: var(--accent-blue);
+ color: white;
+ border: none;
+ padding: 10px 18px;
+ border-radius: 8px;
+ font-size: 13px;
+ font-weight: 700;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ text-decoration: none;
+}
+
+.download-action-btn:hover {
+ background: #2563eb;
+ box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..0d78112ded14e1af322dfd7a8e15103d7a8e2907
--- /dev/null
+++ b/index.html
@@ -0,0 +1,629 @@
+
+
+
+
+
+ CWA 次世代地震預警與 AI 代理系統展示平台
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
中央氣象署次世代地震測報技術專案
+
+
本專案旨在匯整與展示台灣中央氣象署(CWA)地震測報中心在強震即時警報系統(EEW)效能、大規模地震觀測網架構、以及引領次世代地震觀測發展的最新技術。本平台彙整了四大關鍵技術簡報的精華知識,涵蓋從基礎開源框架(Earthworm、Seiscomp、Grafana)到前沿人工智慧技術(大型地震模型 LEM、SeisWav2Vec 2.0 自監督預訓練、以及 AI Agent 協作群組),幫助您全方位、多維度地理解次世代地震測報核心架構。
+
+
+
+
+
+
請選擇欲查看的專題簡報:
+
+
+
+
+
+
即時監測與架構
+
Real-Time Seismic Data Processing and Monitoring at CWA
+
探討中央氣象署的全面性地震監測基礎設施,說明如何利用開源監測軟體 Earthworm 與 Seiscomp 進行即時波形處理,並展示結合 Grafana 建構的即時系統狀態、數據延遲與 availability 儀表板。
+
+
投影片數量:26 張
+
+
+
+
+
+
+
+
效能統計與案例
+
2026年5月 地震預警系統報告
+
詳細整理 2026 年 5 月 CWA 強震即時警報系統(EEW)的效能,透過 5/1 東部海域地震、5/12 東部海域地震、5/17 埔里地震等三大案例,探討幾何中心定位法誤差、應變盲區、測站觸發率及預估震度準確度。
+
+
投影片數量:17 張
+
+
+
+
+
+
+
+
AI 代理與大模型
+
AI 代理群與大型語言模型在次世代地震測報之整合與應用
+
重磅展示 CWA 最先進的科學研究:將語音處理領域 (Wav2Vec 2.0) 遷移至地震波形分析的自監督模型 SeisWav2Vec 2.0 (大型地震模型 LEM),以及由四大 Agent(預警總管、整合工程師、地震學助教、科學研究員)組成的自動化協作群組架構。
+
+
投影片數量:71 張
+
+
+
+
+
+
+
+
預警演進與宣導
+
臺灣地震預警系統的演進與發展 (嘉義災防宣導)
+
回顧台灣強震即時警報的發展歷程與原理,說明 P 波(傳播快、振幅小)與 S 波(傳播慢、震幅大)在預警上的幾何學,展示災防預警發布條件、推播管道(PWS、電視、中小學軟體)及花蓮 M7.2 地震案例。
+
+
投影片數量:50 張
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![Slide View]()
+
+
+
+
+
+
Slide 1 / 26
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
物理物理參數控制
+
+
+
+
+
+
+
+
+
+
+
預估警報黃金時間 (Lead Time)
+
1.4秒
+
警報覆蓋安全區
+
+
+
盲區半徑 (Blind Zone Radius): 35.0 km
+
震源距離 (Hypocenter Distance): 42.7 km
+
+
+
+
+
+
+
+
+ 地震預警波前傳播幾何示意圖 (下半球立體與剖面)
+ 動態向量演算視窗
+
+
+
+
+
+
學術原理說明: 預警系統解算地震參數需要一定時間(簡稱「預警解算時效」)。在預警解算完畢前,S波(破壞性切變波)已經從震源向外傳播了一定半徑,這塊無法提早收到警報的圓形區域即為應變盲區。盲區半徑等於 解算時間 × S波波速。若測站或城市位於盲區外(震央距大於盲區半徑),將獲得寶貴的警報黃金前置時間。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EEW 多代理群組 (Swarm) 協作網絡圖
+ 互動點選可查看代理職責
+
+
+
+
+
+
+
+
+
+
+ my_agent
+ 預警總管
+
+
維護監控 Cron、處理異常推播(Telegram)與撰寫每日 EEW 系統運作日報總結。協調 seismo 與 secondary_agent。
+
+
+
+
+
+
+
+
+
EEW 自動化閉環工作流
+
+
在 PPT 3 報告(第 48-66 頁)中,展示了 CWA 引進的 AI Agent 多代理協作系統。這是一套整合了地震監控、自動化派遣與科研分析的閉環系統:
+
+
+
+
01
+
+
事件偵測與觸發
+
seismo 偵測 CWA 預警系統目錄下的新 `.rep` (Earthquake Report) 報告產出。
+
+
+
+
+
02
+
+
跨節點調度派遣
+
secondary_agent 透過 conducter 自動化路由派遣訊息,指派科學計算任務。
+
+
+
+
+
03
+
+
科研分析與繪圖
+
seismo_agent 負責資料轉換成 CSV/JSON,分析時效與延遲,並輸出統計圖表。
+
+
+
+
+
04
+
+
異常通報與日報發布
+
my_agent 整合報告,產出每日摘要,若有異常(如解算時效過慢)則推播 Telegram 告警。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
SeisWav2Vec 2.0 大型地震模型架構
+
+
大型地震模型 (Large Earthquake Model, LEM) 是地震監測的新紀元。在 PPT 3 簡報(第 32-47 頁)中,展示了基於 Wav2Vec 2.0 語音對比學習概念的地震學創新應用。透過特徵編碼器 (CNN)、Transformer、遮罩與離散量化編碼器,系統能從無標記的海量連續波形中提取通用的地震波相特徵,並進行微調。
+
+
+
+
+
+ 原始地震波形資料輸入 (Seismic Waveform Input)
+
+
+
▼
+
+
+ 特徵編碼器 Feature Encoder (多層一維 CNN)
+
+
+
▼
+
+
+
+ 遮罩預測 (Masking)
+
+
+ 離散向量量化器 (Quantization)
+
+
+
+
▼
+
+
+ 上下文編碼器 Context Encoder (12層 Transformer 全局自注意力)
+
+
+
▼
+
+
+ 任務解碼器與分類任務微調 (P/S 波相辨識、震央距與規模預估)
+
+
+
+
+
+
+
+
+
+
自監督學習的核心優勢
+
+
+ -
+ ✔
+ 無標註學習 (Self-Supervised)
+ 無需人工標記正確答案,直接利用數據本身的時序特徵進行學習,極大地解決了「深度學習需要海量標註數據」的傳統瓶頸。
+
+ -
+ ✔
+ 學習通用表示 (General Representations)
+ CNN 特徵編碼器捕獲局部波形,而 12 層 Transformer 捕捉波形全局上下文,提取出地震特有的資訊 Embedding。
+
+ -
+ ✔
+ 高效任務微調 (Task Fine-Tuning)
+ 在預訓練的 Wav2Vec 模型上外接 CNN 解碼器,僅需極少量的標記事件(如 P/S 波相精準到時),即可達到領先(SOTA)的辨識效能。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
請輸入關鍵字以檢索四大簡報共 164 頁的文字大綱
+
+
+
+
+
+
+
+
+
+
+
簡報核心重點與圖表擷取
+
本單元為您從 4 份簡報中,挑選出最關鍵的圖表與重要原理說明。每個重點皆附有簡報的重點截圖與文字摘要,您可以點選「定位簡報」來查看該投影片的完整脈絡。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
原始檔案資訊與下載
+
以下為您在本地電腦中儲存的 4 份簡報,點選即可下載或查閱對應檔案大小與內容說明。這些簡報已重構為網頁展示。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![Zoomed Slide]()
+
+
+
+
+
+
+
+
diff --git a/index.js b/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..93c452627c13adca215a59563698ff007d21f827
--- /dev/null
+++ b/index.js
@@ -0,0 +1,908 @@
+// Application Entry State
+let currentPptId = "ppt1";
+let currentSlideIndex = 0; // 0-indexed index inside the selected PPT's slides list
+let searchIndex = [];
+
+// DOM Elements
+const menuItems = document.querySelectorAll(".menu-item");
+const tabSections = document.querySelectorAll(".tab-section");
+const tabTitleEl = document.getElementById("current-tab-title");
+const tabSubtitleEl = document.getElementById("current-tab-subtitle");
+
+const pptSelectEl = document.getElementById("ppt-select");
+const slideThumbnailsEl = document.getElementById("slide-thumbnails");
+const mainSlideImgEl = document.getElementById("main-slide-img");
+const slideIndexIndicatorEl = document.getElementById("slide-index-indicator");
+const btnPrevSlide = document.getElementById("btn-prev-slide");
+const btnNextSlide = document.getElementById("btn-next-slide");
+const slideTextLinesEl = document.getElementById("slide-text-lines");
+const slideTakeawayEl = document.getElementById("slide-takeaway-points");
+const btnFullscreen = document.getElementById("btn-fullscreen");
+
+const lightroomEl = document.getElementById("lightroom");
+const lightroomImgEl = document.getElementById("lightroom-img");
+const btnCloseLightroom = document.getElementById("btn-close-lightroom");
+
+// Calculator inputs
+const sliderDepth = document.getElementById("slider-depth");
+const sliderDist = document.getElementById("slider-dist");
+const sliderVs = document.getElementById("slider-vs");
+const sliderProcess = document.getElementById("slider-process");
+
+const valDepth = document.getElementById("depth-val");
+const valDist = document.getElementById("dist-val");
+const valVs = document.getElementById("vs-val");
+const valProcess = document.getElementById("process-val");
+
+const calcLeadTimeEl = document.getElementById("calc-lead-time");
+const calcWarningStatusEl = document.getElementById("calc-warning-status");
+const txtBlindRadius = document.getElementById("blind-radius-txt");
+const txtHypoDist = document.getElementById("hypo-dist-txt");
+const blindZoneCanvas = document.getElementById("blind-zone-canvas");
+
+// Search inputs
+const searchInput = document.getElementById("search-input");
+const searchResults = document.getElementById("search-results");
+
+// Tab configuration
+const tabMeta = {
+ overview: { title: "知識庫總覽", subtitle: "展示台灣中央氣象署強震即時警報與 AI 技術整合之演進" },
+ highlights: { title: "簡報精選精華", subtitle: "彙整四大簡報最關鍵的核心圖表與重要原理,支援一鍵定位簡報脈絡" },
+ viewer: { title: "投影片展示", subtitle: "逐頁瀏覽 4 份核心簡報精華、提取文字與高畫質圖片" },
+ calculator: { title: "預警盲區模擬", subtitle: "互動式物理參數計算,深入理解應變盲區與警報前置時間的幾何關係" },
+ swarm: { title: "AI 代理協作", subtitle: "解析 2026 年 CWA 強震即時警報系統中多代理群組自動化閉環工作流" },
+ lem: { title: "大型地震模型 (LEM)", subtitle: "介紹以 Wav2Vec 2.0 為基座演化的次世代地震自監督深度學習模型 SeisWav2Vec" },
+ search: { title: "全文大綱搜尋", subtitle: "高效檢索四大簡報共 164 頁的文字內容,快速定位知識點" },
+ downloads: { title: "簡報下載專區", subtitle: "查閱本地原始 PPTX 簡報大小與詳細檔案路徑資訊" }
+};
+
+// Initialize Application
+window.addEventListener("DOMContentLoaded", () => {
+ initNavigation();
+ initSlideViewer();
+ initCalculator();
+ initSwarmVisualizer();
+ initSearchEngine();
+ initLightroom();
+ initHighlights();
+});
+
+// 1. Navigation Controller
+function initNavigation() {
+ menuItems.forEach(item => {
+ item.addEventListener("click", () => {
+ const tabId = item.getAttribute("data-tab");
+
+ // Update sidebar state
+ menuItems.forEach(mi => mi.classList.remove("active"));
+ item.classList.add("active");
+
+ // Update viewport state
+ tabSections.forEach(section => {
+ section.classList.remove("active");
+ if (section.id === `tab-${tabId}`) {
+ section.classList.add("active");
+ }
+ });
+
+ // Update header titles
+ const meta = tabMeta[tabId] || { title: "展示平台", subtitle: "" };
+ tabTitleEl.textContent = meta.title;
+ tabSubtitleEl.textContent = meta.subtitle;
+
+ // Special canvas re-draw on tab visibility
+ if (tabId === "calculator") {
+ setTimeout(drawBlindZone, 100);
+ } else if (tabId === "swarm") {
+ setTimeout(drawSwarm, 100);
+ }
+ });
+ });
+}
+
+function jumpToTab(tabId) {
+ const item = document.querySelector(`.menu-item[data-tab="${tabId}"]`);
+ if (item) item.click();
+}
+
+function jumpToPresentation(pptId, slideNum = 1) {
+ currentPptId = pptId;
+ pptSelectEl.value = pptId;
+ currentSlideIndex = slideNum - 1;
+ renderSlidesList();
+ jumpToTab("viewer");
+}
+
+// 2. Slide Showcase Controller
+function initSlideViewer() {
+ pptSelectEl.addEventListener("change", (e) => {
+ currentPptId = e.target.value;
+ currentSlideIndex = 0;
+ renderSlidesList();
+ });
+
+ btnPrevSlide.addEventListener("click", () => {
+ if (currentSlideIndex > 0) {
+ currentSlideIndex--;
+ updateActiveSlide();
+ }
+ });
+
+ btnNextSlide.addEventListener("click", () => {
+ const pptData = slidesData.find(p => p.id === currentPptId);
+ if (pptData && currentSlideIndex < pptData.slides.length - 1) {
+ currentSlideIndex++;
+ updateActiveSlide();
+ }
+ });
+
+ renderSlidesList();
+}
+
+function renderSlidesList() {
+ const pptData = slidesData.find(p => p.id === currentPptId);
+ if (!pptData) return;
+
+ slideThumbnailsEl.innerHTML = "";
+ pptData.slides.forEach((slide, idx) => {
+ const thumb = document.createElement("div");
+ thumb.className = `thumb-item ${idx === currentSlideIndex ? 'active' : ''}`;
+ thumb.setAttribute("data-index", idx);
+
+ // Find slide title or summary
+ let titleStr = slide.title || (slide.text && slide.text[0]) || `Slide ${slide.slideNumber}`;
+ if (titleStr.length > 22) {
+ titleStr = titleStr.substring(0, 20) + "...";
+ }
+
+ thumb.innerHTML = `
+ Slide ${slide.slideNumber}
+ ${titleStr}
+ `;
+
+ thumb.addEventListener("click", () => {
+ currentSlideIndex = idx;
+ updateActiveSlide();
+ });
+
+ slideThumbnailsEl.appendChild(thumb);
+ });
+
+ updateActiveSlide();
+}
+
+function updateActiveSlide() {
+ const pptData = slidesData.find(p => p.id === currentPptId);
+ if (!pptData) return;
+
+ const slide = pptData.slides[currentSlideIndex];
+ if (!slide) return;
+
+ // Update main display image
+ mainSlideImgEl.src = slide.image;
+
+ // Highlight active thumbnail and scroll into view smoothly
+ const thumbs = slideThumbnailsEl.querySelectorAll(".thumb-item");
+ thumbs.forEach((t, idx) => {
+ t.classList.remove("active");
+ if (idx === currentSlideIndex) {
+ t.classList.add("active");
+ t.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
+ }
+ });
+
+ // Update indicators
+ slideIndexIndicatorEl.textContent = `Slide ${slide.slideNumber} / ${pptData.slidesCount}`;
+
+ // Update disabled buttons
+ btnPrevSlide.disabled = currentSlideIndex === 0;
+ btnNextSlide.disabled = currentSlideIndex === pptData.slides.length - 1;
+
+ // Render slide texts
+ slideTextLinesEl.innerHTML = "";
+ if (slide.text && slide.text.length > 0) {
+ slide.text.forEach(line => {
+ const li = document.createElement("li");
+ li.textContent = line;
+ slideTextLinesEl.appendChild(li);
+ });
+ } else {
+ const li = document.createElement("li");
+ li.textContent = "(此頁投影片無主要大綱文字,可能為全圖表展示)";
+ li.style.color = "var(--text-dark)";
+ li.style.fontStyle = "italic";
+ slideTextLinesEl.appendChild(li);
+ }
+
+ // Generate key terms or takeaways dynamically based on slide content
+ slideTakeawayEl.innerHTML = "";
+ const takeaways = generateTakeaways(slide, pptData.id);
+ takeaways.forEach(p => {
+ const li = document.createElement("li");
+ li.textContent = p;
+ slideTakeawayEl.appendChild(li);
+ });
+}
+
+function generateTakeaways(slide, pptId) {
+ const points = [];
+ const textJoined = (slide.text || []).join(" ").toLowerCase();
+ const title = (slide.title || "").toLowerCase();
+
+ if (pptId === "ppt1") {
+ if (textJoined.includes("earthworm")) points.push("Earthworm:USGS 開源地震處理模組化系統,為全球實時監控基準。");
+ if (textJoined.includes("seiscomp")) points.push("SeisComP:先進地震圖形界面與定位波相拾取平台。");
+ if (textJoined.includes("grafana")) points.push("Grafana 觀測:即時視覺化海底觀測網水壓計、波形延遲及預警推播狀態。");
+ if (textJoined.includes("ebear")) points.push("eBEAR:CWA 自行開發的 Earthworm Alert Reporting 自動速報系統。");
+ if (textJoined.includes("docker")) points.push("容器化部署:CWA EEW 與 Seiscomp 已打包為 Docker 映像檔上傳 Docker Hub。");
+ } else if (pptId === "ppt2") {
+ if (textJoined.includes("pws")) points.push("PWS:災防告警細胞廣播發布範疇統計(如 M6.1 地震第一報與第二報範圍)。");
+ if (textJoined.includes("幾何中心")) points.push("定位法:幾何中心法在早期預警解算中對震央與震度有誤差修正之探討。");
+ if (textJoined.includes("盲區") || textJoined.includes("應變")) points.push("應變盲區:最快解算耗時乘以 S 波平均波速(3.5 km/s),該範圍內無警報前置時間。");
+ if (textJoined.includes("觸發")) points.push("測站觸發率:針對特定震源以半徑搜索,排除共站干擾計算實時觸發比例。");
+ } else if (pptId === "ppt3") {
+ if (textJoined.includes("agent") || textJoined.includes("代理")) points.push("AI Agent Swarm:my_agent, seismo, seismo_agent, secondary_agent 四協同代理職責分工。");
+ if (textJoined.includes("wav2vec") || textJoined.includes("lem")) points.push("SeisWav2Vec 2.0:對比學習 Wav2Vec 結構遷移至地震波形,自監督預訓練模型。");
+ if (textJoined.includes("transformer")) points.push("Transformer 上下文:12 層注意力機制學習特徵的全局上下文,無標記資料自學習。");
+ if (textJoined.includes("telegram")) points.push("Telegram 通訊:整合 my_agent 自動推送 eew_health、異常日誌及 daily_report。");
+ } else if (pptId === "ppt4") {
+ if (textJoined.includes("p波") || textJoined.includes("s波")) points.push("強震預警原理:利用傳播快速的 P 縱波推算震級,趕在破壞性 S 橫波抵達前告警。");
+ if (textJoined.includes("電視") || textJoined.includes("推播")) points.push("多元傳播管道:國家級警報、電視台即時插播、中小學預警軟體及手機 APP 四大網絡。");
+ if (textJoined.includes("花蓮")) points.push("花蓮 M7.2 案例:回顧強震預警警報實際發送實例、各縣市震度與警報時效。");
+ }
+
+ if (points.length === 0) {
+ points.push("地震預警核心知識:解析地震波傳播時序與即時資料串流。");
+ points.push("技術重點:結合自動化解算模型,縮減預警盲區以求減災。");
+ }
+
+ return points;
+}
+
+// 3. Lightroom Lightbox Modal
+function initLightroom() {
+ mainSlideImgEl.addEventListener("click", () => {
+ lightroomImgEl.src = mainSlideImgEl.src;
+ lightroomEl.style.display = "flex";
+ });
+
+ lightroomEl.addEventListener("click", () => {
+ lightroomEl.style.display = "none";
+ });
+
+ btnCloseLightroom.addEventListener("click", (e) => {
+ e.stopPropagation();
+ lightroomEl.style.display = "none";
+ });
+}
+
+// 4. Blind Zone & Lead Time Warning Simulator
+function initCalculator() {
+ const updateCalculator = () => {
+ const depth = parseFloat(sliderDepth.value);
+ const dist = parseFloat(sliderDist.value);
+ const vs = parseFloat(sliderVs.value);
+ const processTime = parseFloat(sliderProcess.value);
+
+ // Display value update
+ valDepth.textContent = `${depth} km`;
+ valDist.textContent = `${dist} km`;
+ valVs.textContent = `${vs.toFixed(1)} km/s`;
+ valProcess.textContent = `${processTime.toFixed(1)} s`;
+
+ // Geometry math
+ const hypoDist = Math.sqrt(dist*dist + depth*depth);
+ const sTravelTime = hypoDist / vs;
+ const leadTime = sTravelTime - processTime;
+
+ // Blind zone radius (ground distance when S-wave wavefront intersects ground surface at the processing time)
+ // S-wave path distance at processing time: s_path = processTime * vs
+ // If path is less than focal depth, S-wave hasn't even reached the ground surface directly above epicenter.
+ let blindRadius = 0;
+ const sPath = processTime * vs;
+ if (sPath > depth) {
+ blindRadius = Math.sqrt(sPath*sPath - depth*depth);
+ }
+
+ // Render text
+ txtHypoDist.textContent = `${hypoDist.toFixed(1)} km`;
+ txtBlindRadius.textContent = blindRadius > 0 ? `${blindRadius.toFixed(1)} km` : "0 km (未傳抵地表)";
+
+ if (leadTime > 0) {
+ calcLeadTimeEl.innerHTML = `${leadTime.toFixed(1)}秒`;
+ calcLeadTimeEl.style.color = "var(--accent-cyan)";
+ calcWarningStatusEl.textContent = "警報覆蓋安全區";
+ calcWarningStatusEl.className = "warning-status-alert status-safe";
+ } else {
+ calcLeadTimeEl.innerHTML = `0.0秒`;
+ calcLeadTimeEl.style.color = "var(--accent-rose)";
+ calcWarningStatusEl.textContent = "處於預警盲區內";
+ calcWarningStatusEl.className = "warning-status-alert status-blind";
+ }
+
+ // Save to window state for canvas redraw
+ window.calcState = { depth, dist, vs, processTime, hypoDist, blindRadius, leadTime };
+ drawBlindZone();
+ };
+
+ sliderDepth.addEventListener("input", updateCalculator);
+ sliderDist.addEventListener("input", updateCalculator);
+ sliderVs.addEventListener("input", updateCalculator);
+ sliderProcess.addEventListener("input", updateCalculator);
+
+ updateCalculator();
+}
+
+function drawBlindZone() {
+ const canvas = blindZoneCanvas;
+ if (!canvas) return;
+ const ctx = canvas.getContext("2d");
+
+ // Set resolution based on DPI
+ const dpr = window.devicePixelRatio || 1;
+ const rect = canvas.getBoundingClientRect();
+ canvas.width = rect.width * dpr;
+ canvas.height = rect.height * dpr;
+ ctx.scale(dpr, dpr);
+
+ const w = rect.width;
+ const h = rect.height;
+ ctx.clearRect(0, 0, w, h);
+
+ const state = window.calcState;
+ if (!state) return;
+
+ // Drawing coordinates mapping
+ // Earth surface is a horizontal line at y = 100
+ const ySurface = 80;
+ // Center is epicenter at x = w / 2 - 100
+ const xEpicenter = w / 2 - 80;
+
+ // Scale pixels: 1 km = 2 pixels
+ const scale = 2.0;
+
+ // Draw Earth crust layer
+ ctx.fillStyle = "rgba(10, 15, 26, 0.4)";
+ ctx.fillRect(0, ySurface, w, h - ySurface);
+
+ // Draw ground line
+ ctx.strokeStyle = "#475569";
+ ctx.lineWidth = 2;
+ ctx.beginPath();
+ ctx.moveTo(0, ySurface);
+ ctx.lineTo(w, ySurface);
+ ctx.stroke();
+
+ // Epicenter
+ ctx.fillStyle = "#94a3b8";
+ ctx.beginPath();
+ ctx.arc(xEpicenter, ySurface, 4, 0, 2*Math.PI);
+ ctx.fill();
+
+ // Hypocenter (Earthquake Focus)
+ const yFocus = ySurface + state.depth * scale;
+ ctx.fillStyle = "var(--accent-rose)";
+ ctx.beginPath();
+ ctx.arc(xEpicenter, yFocus, 6, 0, 2*Math.PI);
+ ctx.fill();
+
+ // Glow for Hypocenter
+ const gradientFocus = ctx.createRadialGradient(xEpicenter, yFocus, 2, xEpicenter, yFocus, 18);
+ gradientFocus.addColorStop(0, "rgba(244, 63, 94, 0.6)");
+ gradientFocus.addColorStop(1, "rgba(244, 63, 94, 0)");
+ ctx.fillStyle = gradientFocus;
+ ctx.beginPath();
+ ctx.arc(xEpicenter, yFocus, 18, 0, 2*Math.PI);
+ ctx.fill();
+
+ // Target Station (user epicenter distance)
+ const xStation = xEpicenter + state.dist * scale;
+ ctx.fillStyle = state.leadTime > 0 ? "var(--accent-cyan)" : "var(--accent-rose)";
+ ctx.beginPath();
+ ctx.arc(xStation, ySurface, 5, 0, 2*Math.PI);
+ ctx.fill();
+
+ // Label for target
+ ctx.fillStyle = "white";
+ ctx.font = "bold 11px sans-serif";
+ ctx.fillText("目標觀測點", xStation - 25, ySurface - 12);
+
+ // Wavefront propagation circle
+ // S-wave wavefront path distance
+ const rSwave = state.processTime * state.vs * scale;
+ ctx.strokeStyle = "rgba(245, 158, 11, 0.4)";
+ ctx.lineWidth = 1.5;
+ ctx.setLineDash([4, 3]);
+ ctx.beginPath();
+ ctx.arc(xEpicenter, yFocus, rSwave, 0, 2*Math.PI);
+ ctx.stroke();
+ ctx.setLineDash([]);
+
+ // P-wave wavefront path (approx 1.73x faster than S-wave)
+ const rPwave = state.processTime * state.vs * 1.73 * scale;
+ ctx.strokeStyle = "rgba(6, 182, 212, 0.25)";
+ ctx.lineWidth = 1;
+ ctx.beginPath();
+ ctx.arc(xEpicenter, yFocus, rPwave, 0, 2*Math.PI);
+ ctx.stroke();
+
+ // Shaded Blind Zone on surface
+ const rBlindPx = state.blindRadius * scale;
+ if (rBlindPx > 0) {
+ ctx.fillStyle = "rgba(244, 63, 94, 0.15)";
+ ctx.fillRect(xEpicenter - rBlindPx, ySurface, rBlindPx * 2, h - ySurface);
+
+ // Draw surface indicator for blind zone
+ ctx.strokeStyle = "var(--accent-rose)";
+ ctx.lineWidth = 3;
+ ctx.beginPath();
+ ctx.moveTo(xEpicenter - rBlindPx, ySurface);
+ ctx.lineTo(xEpicenter + rBlindPx, ySurface);
+ ctx.stroke();
+
+ // Blind Zone Label
+ ctx.fillStyle = "var(--accent-rose)";
+ ctx.font = "bold 11px sans-serif";
+ ctx.fillText(`預警盲區半徑: ${state.blindRadius.toFixed(1)} km`, xEpicenter - 65, ySurface + 24);
+ }
+
+ // S-wave wavefront intersection with ground
+ ctx.fillStyle = "var(--accent-amber)";
+ const intersectDist = state.processTime * state.vs;
+ if (intersectDist > state.depth) {
+ const xIntersectLeft = xEpicenter - rBlindPx;
+ const xIntersectRight = xEpicenter + rBlindPx;
+ ctx.beginPath();
+ ctx.arc(xIntersectLeft, ySurface, 4, 0, 2*Math.PI);
+ ctx.arc(xIntersectRight, ySurface, 4, 0, 2*Math.PI);
+ ctx.fill();
+ }
+
+ // Draw ray from Hypocenter to target station
+ ctx.strokeStyle = "rgba(255, 255, 255, 0.15)";
+ ctx.lineWidth = 1;
+ ctx.beginPath();
+ ctx.moveTo(xEpicenter, yFocus);
+ ctx.lineTo(xStation, ySurface);
+ ctx.stroke();
+
+ // Annotations
+ ctx.fillStyle = "var(--text-dark)";
+ ctx.font = "10px sans-serif";
+ ctx.fillText("震央 (Epicenter)", xEpicenter + 8, ySurface - 12);
+
+ ctx.fillStyle = "var(--accent-rose)";
+ ctx.fillText(`震源 (Hypocenter) Depth: ${state.depth} km`, xEpicenter + 12, yFocus + 4);
+}
+
+// 5. AI Agent Swarm network visualizer
+function initSwarmVisualizer() {
+ const swarmCanvas = document.getElementById("agent-swarm-canvas");
+ if (!swarmCanvas) return;
+
+ // Node details
+ const agentNodes = [
+ { id: "my_agent", name: "my_agent", role: "預警總管", color: "var(--accent-emerald)", bg: "var(--accent-emerald-glow)", x: 200, y: 120, r: 48, desc: "主控監測流程,定時健康檢查 (eew_health cron)。判讀並處理異常事件,異常時透過 Telegram 主動發送告警,並彙整所有 agent 資訊產出每日簡報日報 (eew_report_daily)。" },
+ { id: "seismo", name: "seismo", role: "數據前向轉發", color: "var(--accent-blue)", bg: "var(--accent-blue-glow)", x: 450, y: 120, r: 42, desc: "維持持續運行的心跳循環 (heartbeat loop),即時偵測及提取中央氣象署 EEW 流程產生的最新地震 `.rep` 報告原始檔,將資料進行結構化轉換輸出 (轉為 JSON/CSV)。" },
+ { id: "seismo_agent", name: "seismo_agent", role: "地震學分析助教", color: "var(--accent-amber)", bg: "var(--accent-amber-glow)", x: 450, y: 320, r: 42, desc: "負責科學數據分析與處理流水線。解析速報效能與測站延遲統計,呼叫自動繪圖模組繪製事件散佈圖與序列圖,同時儲存備份二進位原始數據檔。" },
+ { id: "secondary_agent", name: "secondary_agent", role: "系統整合工程師", color: "var(--accent-rose)", bg: "var(--accent-rose-glow)", x: 200, y: 320, r: 48, desc: "本地調度與訊息轉發中心。負責部署與維護容器重啟腳本 (eew_fault_recovery.sh)、Cron 排程及 Telegram 機器人核心,負責在 my_agent 要求時調用 delegate_task 指派任務。" }
+ ];
+
+ const links = [
+ { from: "seismo", to: "secondary_agent", label: "地震.rep JSON 輸出" },
+ { from: "secondary_agent", to: "seismo_agent", label: "分發科研分析與繪圖" },
+ { from: "seismo_agent", to: "my_agent", label: "回傳延遲時效日報" },
+ { from: "my_agent", to: "secondary_agent", label: "調度容器故障重啟" },
+ { from: "seismo", to: "my_agent", label: "心跳狀態報告" }
+ ];
+
+ let selectedNodeId = "my_agent";
+
+ const updateSwarmOverlay = (node) => {
+ document.getElementById("agent-overlay-name").textContent = node.name;
+ document.getElementById("agent-overlay-role").textContent = node.role;
+ document.getElementById("agent-overlay-role").style.backgroundColor = node.bg;
+ document.getElementById("agent-overlay-role").style.color = node.color;
+ document.getElementById("agent-overlay-desc").textContent = node.desc;
+ document.getElementById("agent-overlay-icon").style.color = node.color;
+ document.getElementById("agent-overlay-icon").style.backgroundColor = node.bg;
+ };
+
+ window.drawSwarm = () => {
+ const dpr = window.devicePixelRatio || 1;
+ const rect = swarmCanvas.getBoundingClientRect();
+ swarmCanvas.width = rect.width * dpr;
+ swarmCanvas.height = rect.height * dpr;
+ const ctx = swarmCanvas.getContext("2d");
+ ctx.scale(dpr, dpr);
+
+ const w = rect.width;
+ const h = rect.height;
+ ctx.clearRect(0, 0, w, h);
+
+ // Set node positions dynamically centered to canvas
+ const xCenter = w / 2;
+ const yCenter = h / 2 - 40;
+
+ // Re-adjust node coordinates relative to canvas center
+ agentNodes[0].x = xCenter - 150; agentNodes[0].y = yCenter - 80;
+ agentNodes[1].x = xCenter + 150; agentNodes[1].y = yCenter - 80;
+ agentNodes[2].x = xCenter + 150; agentNodes[2].y = yCenter + 120;
+ agentNodes[3].x = xCenter - 150; agentNodes[3].y = yCenter + 120;
+
+ // Draw Links
+ links.forEach(l => {
+ const fromNode = agentNodes.find(n => n.id === l.from);
+ const toNode = agentNodes.find(n => n.id === l.to);
+ if (!fromNode || !toNode) return;
+
+ ctx.strokeStyle = "rgba(148, 163, 184, 0.15)";
+ ctx.lineWidth = 2;
+ ctx.beginPath();
+ ctx.moveTo(fromNode.x, fromNode.y);
+ ctx.lineTo(toNode.x, toNode.y);
+ ctx.stroke();
+
+ // Draw dynamic animated pulse dot on links
+ const speed = 0.001;
+ const t = (Date.now() * speed) % 1;
+ const dotX = fromNode.x + (toNode.x - fromNode.x) * t;
+ const dotY = fromNode.y + (toNode.y - fromNode.y) * t;
+ ctx.fillStyle = "var(--accent-cyan)";
+ ctx.beginPath();
+ ctx.arc(dotX, dotY, 4, 0, 2*Math.PI);
+ ctx.fill();
+ });
+
+ // Draw Nodes
+ agentNodes.forEach(node => {
+ const isSelected = node.id === selectedNodeId;
+
+ // Glowing shadow
+ if (isSelected) {
+ ctx.shadowColor = node.color;
+ ctx.shadowBlur = 15;
+ }
+
+ // Node fill
+ ctx.fillStyle = "rgba(10, 15, 26, 0.9)";
+ ctx.strokeStyle = isSelected ? "white" : node.color;
+ ctx.lineWidth = isSelected ? 3 : 1.5;
+ ctx.beginPath();
+ ctx.arc(node.x, node.y, node.r, 0, 2*Math.PI);
+ ctx.fill();
+ ctx.stroke();
+
+ // Reset shadow
+ ctx.shadowBlur = 0;
+
+ // Text
+ ctx.fillStyle = "white";
+ ctx.font = "bold 12px sans-serif";
+ ctx.textAlign = "center";
+ ctx.fillText(node.name, node.x, node.y - 4);
+
+ ctx.fillStyle = node.color;
+ ctx.font = "10px sans-serif";
+ ctx.fillText(node.role, node.x, node.y + 14);
+ });
+ };
+
+ // Click handler
+ swarmCanvas.addEventListener("click", (e) => {
+ const rect = swarmCanvas.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+
+ // Check if clicked node
+ for (let node of agentNodes) {
+ const dist = Math.sqrt((x - node.x)**2 + (y - node.y)**2);
+ if (dist <= node.r) {
+ selectedNodeId = node.id;
+ updateSwarmOverlay(node);
+ drawSwarm();
+ break;
+ }
+ }
+ });
+
+ // Animation loop for swarm
+ let animId;
+ const loop = () => {
+ if (document.getElementById("tab-swarm").classList.contains("active")) {
+ drawSwarm();
+ }
+ animId = requestAnimationFrame(loop);
+ };
+ loop();
+
+ // Select default node
+ updateSwarmOverlay(agentNodes[0]);
+}
+
+// 6. Search Engine Controller
+function initSearchEngine() {
+ // Build slide index
+ searchIndex = [];
+ slidesData.forEach(ppt => {
+ ppt.slides.forEach(slide => {
+ searchIndex.push({
+ pptId: ppt.id,
+ pptTitle: ppt.title,
+ slideNumber: slide.slideNumber,
+ title: slide.title || "",
+ textLines: slide.text || [],
+ image: slide.image
+ });
+ });
+ });
+
+ searchInput.addEventListener("input", (e) => {
+ const query = e.target.value.toLowerCase().trim();
+ if (!query) {
+ searchResults.innerHTML = `
+
+
+
請輸入關鍵字以檢索四大簡報共 164 頁的文字大綱
+
+ `;
+ return;
+ }
+
+ const matches = searchIndex.filter(item => {
+ const matchTitle = item.title.toLowerCase().includes(query);
+ const matchPptTitle = item.pptTitle.toLowerCase().includes(query);
+ const matchLines = item.textLines.some(line => line.toLowerCase().includes(query));
+ return matchTitle || matchPptTitle || matchLines;
+ });
+
+ if (matches.length === 0) {
+ searchResults.innerHTML = `
+
+
+
未找到任何相符的投影片內容
+
請試著搜尋其他字眼(如:Earthworm, Grafana, 盲區, 代理)
+
+ `;
+ return;
+ }
+
+ searchResults.innerHTML = "";
+ matches.forEach(item => {
+ const card = document.createElement("div");
+ card.className = "glass-panel card-padding search-result-card";
+
+ // Highlight matching snippet
+ let snippet = "";
+ const matchingLine = item.textLines.find(line => line.toLowerCase().includes(query));
+ if (matchingLine) {
+ snippet = matchingLine;
+ } else if (item.textLines.length > 0) {
+ snippet = item.textLines[0];
+ }
+
+ // Highlight text snippet helper
+ const queryIdx = snippet.toLowerCase().indexOf(query);
+ if (queryIdx !== -1 && query.length > 0) {
+ const start = snippet.substring(0, queryIdx);
+ const match = snippet.substring(queryIdx, queryIdx + query.length);
+ const end = snippet.substring(queryIdx + query.length);
+ snippet = `${start}${match}${end}`;
+ }
+
+ card.innerHTML = `
+
+

+
+
+
${item.pptTitle} · 第 ${item.slideNumber} 頁
+
${item.title || '(無標題)'}
+
${snippet}
+
+ `;
+
+ card.addEventListener("click", () => {
+ jumpToPresentation(item.pptId, item.slideNumber);
+ });
+
+ searchResults.appendChild(card);
+ });
+ });
+}
+
+// 7. Key Highlights Section Controller
+const highlightsData = [
+ {
+ pptId: "ppt1",
+ slideNum: 6,
+ category: "network",
+ title: "中央氣象署即時地震觀測網分佈",
+ description: "展示臺灣陸地與海域鋪設的極其密集的觀測網。包含強震儀站點與鋪設於東部海域、南部海域的 OBS 海底電纜觀測系統,是提供即時測報之根本基礎。",
+ keyPoints: ["島內密集陸地強震儀分佈", "東部與南部海纜觀測系統 (OBS)", "即時連續訊號在發震數秒內傳達中心"]
+ },
+ {
+ pptId: "ppt1",
+ slideNum: 11,
+ category: "network",
+ title: "實時地震波形歸檔整合數據流",
+ description: "展示 Earthworm 處理器如何透過共享記憶體 RING,將 Field Stations 的資料利用 tbuf2mseed 模組壓縮,並同步保存至本機 NAS,確保高可靠度與極低資料延遲。",
+ keyPoints: ["共享記憶體 (Shared Memory) 機制", "支援跨網絡與跨節點資料交換", "Docker 容器化保證部署彈性"]
+ },
+ {
+ pptId: "ppt1",
+ slideNum: 12,
+ category: "network",
+ title: "eBEAR 自動化強震即時警報軟體",
+ description: "CWA 自主開發的 eBEAR (Earthworm Based Earthquake Alert Reporting) 系統,已封裝成 Docker Image 並提供在 Docker Hub 下載,具備模組化警報回報流程。",
+ keyPoints: ["Docker Hub: cwadayi/earthworm_ubuntu22.04_eew:v1", "高整合性的地震波相拾取與規模演算", "支援自動化的警報派遣與日誌紀錄"]
+ },
+ {
+ pptId: "ppt2",
+ slideNum: 2,
+ category: "eew",
+ title: "2026年5月 強震即時警報系統 (EEW) 效能",
+ description: "彙整 2026 年 5 月份 EEW 的統計數據。最快解算時效達到驚人的 9.7 秒,PWS 細胞廣播發送 6 次,展示了防減災技術在即時解算上的優異成果。",
+ keyPoints: ["5月份地震預警最速時效達 9.7 秒", "PWS 發布 6 次,電視台即時插播 6 次", "對外通報管道觸發穩定,無漏報異常"]
+ },
+ {
+ pptId: "ppt2",
+ slideNum: 14,
+ category: "eew",
+ title: "應變盲區 (Blind Zone) 與 S 波幾何學",
+ description: "地震發生後,P 波與 S 波以球形向外傳播。在系統花費時間解算並發送警報前,S 波已波及的範圍(半徑 = 解算時間 × S波速度)即為預警盲區,此區域內前置時間為零。",
+ keyPoints: ["盲區半徑 = 解算時間 (s) × S波速度 (3.5km/s)", "極淺地震(如大埔或美濃)的震央周圍多位於盲區內", "加速測站密集度與算法能有效縮小盲區"]
+ },
+ {
+ pptId: "ppt2",
+ slideNum: 15,
+ category: "eew",
+ title: "測站觸發率 (Trigger Rate) 半徑篩選",
+ description: "以定位震央為中心、事件最遠觸發測站為半徑作圓,評估該圓形範圍內觀測網測站觸發率,排除共站造成的比率偏低誤差,是評估觀測網效能的關鍵指標。",
+ keyPoints: ["速報震央為圓心,最遠觸發測站為半徑作圓", "剔除重複計算共站,反映真實觀測網覆蓋", "輔助評估密集強震時之儀器健康度"]
+ },
+ {
+ pptId: "ppt3",
+ slideNum: 4,
+ category: "history",
+ title: "臺灣過去 10 年災害性地震損失統計",
+ description: "展示臺灣過去 10 年內數次引發嚴重災情之強震(包括美濃、花蓮、池上、大埔地震等),凸顯了台灣極高地震風險性與建立次世代預警系統的迫切性。",
+ keyPoints: ["美濃地震維冠大樓塌陷、花蓮地震統帥飯店受災", "高鐵與捷運在預警下成功採取減速避災措施", "災害地震平均每 30-40 年發生一次"]
+ },
+ {
+ pptId: "ppt3",
+ slideNum: 44,
+ category: "ai",
+ title: "大型地震模型 LEM 與 SeisWav2Vec 2.0",
+ description: "介紹將 Wav2Vec 2.0 語音自監督模型遷移至地震波形特徵提取之架構。由一維 CNN 編碼器與 12 層 Transformer 構成,從無標記波形中自主學習震波語意特徵。",
+ keyPoints: ["自監督學習 (SSL) 無需人工標註海量資料", "Wav2Vec 離散向量量化與 Mask 遮罩學習", "微調後於波相辨識精度與噪訊過濾上顯著提升"]
+ },
+ {
+ pptId: "ppt3",
+ slideNum: 50,
+ category: "ai",
+ title: "EEW Swarm 四位 Agent 角色與職責矩陣",
+ description: "次世代地震系統中四個協同 Agents 的核心分工矩陣:包含主助理、科學前向轉發工程師、地震分析學助教與本地排程容器整合工程師,建構多代理人體系。",
+ keyPoints: ["my_agent、seismo、seismo_agent、secondary_agent", "實現跨系統的多代理協調派遣", "個別 Agent 維持獨立的指令執行環境與日誌監控"]
+ },
+ {
+ pptId: "ppt3",
+ slideNum: 54,
+ category: "ai",
+ title: "EEW 代理群多模組自動化閉環工作流",
+ description: "當系統產出新事件的 `.rep` 報告後,自動觸發 seismo 解析資料、seismo_agent 繪製散佈圖、secondary_agent 協調排程、最後由 my_agent 生成簡報推播至 Telegram 的自動化流向圖。",
+ keyPoints: ["事件驅動 (Event-driven) 觸發運行", "Telegram API 即時回報與 eew_fault_recovery 恢復功能", "全流程無人工介入,秒級產出簡報與日報"]
+ },
+ {
+ pptId: "ppt4",
+ slideNum: 18,
+ category: "eew",
+ title: "強震即時警報物理原理 (P/S 波速差)",
+ description: "圖解地震產生之 P 縱波 (速度快) 與 S 橫波 (破壞大、速度慢) 的傳播物理機制。利用兩者速度差,可在 S 波抵達前數秒解算位置並以電磁波速度搶先警報。",
+ keyPoints: ["P波波速約 6 km/s,S波波速約 3.5 km/s", "電磁波傳輸警報以光速前進,遠快於地震波", "提供關鍵數秒至數十秒避難避險前置時間"]
+ },
+ {
+ pptId: "ppt4",
+ slideNum: 21,
+ category: "history",
+ title: "2024/04/03 M7.2 花蓮大地震國家級警報實況",
+ description: "回顧花蓮強震當日預警系統運行狀況,說明系統於極短時間內完成解算,並透過細胞廣播 (PWS)、電視插播與中小學防震系統即時推送警報的實際情境。",
+ keyPoints: ["全台多個縣市獲得寶貴避險前置時間", "電視台實時彈出插播覆蓋全螢幕", "分析極震區盲區覆蓋以及大眾運輸系統防災減速反應"]
+ }
+];
+
+function initHighlights() {
+ const container = document.getElementById("highlights-container");
+ const filterButtons = document.querySelectorAll(".filter-btn");
+ if (!container) return;
+
+ const renderHighlights = (catFilter) => {
+ container.innerHTML = "";
+
+ const filtered = catFilter === "all"
+ ? highlightsData
+ : highlightsData.filter(h => h.category === catFilter);
+
+ filtered.forEach(h => {
+ const card = document.createElement("div");
+ card.className = "glass-panel";
+ card.style.display = "flex";
+ card.style.flexDirection = "column";
+ card.style.overflow = "hidden";
+
+ const slideImgPath = `slides/${h.pptId}/slide_${h.slideNum}.png`;
+
+ // Category tag display
+ const catLabels = { network: "觀測架構", eew: "預警效能", ai: "AI與代理人", history: "地震與案例" };
+ const catLabel = catLabels[h.category] || h.category;
+
+ card.innerHTML = `
+
+

+
+ ${h.pptId.toUpperCase()} · Slide ${h.slideNum}
+
+
+ ${catLabel}
+
+
+
+
${h.title}
+
${h.description}
+
+ ${h.keyPoints.map(pt => `
+ -
+
+ ${pt}
+
+ `).join("")}
+
+
+
+ `;
+
+ // Lightbox click handler
+ card.querySelector(".highlight-img-click").addEventListener("click", () => {
+ lightroomImgEl.src = slideImgPath;
+ lightroomEl.style.display = "flex";
+ });
+
+ // Slide Jump click handler
+ card.querySelector(".jump-to-slide-btn").addEventListener("click", () => {
+ jumpToPresentation(h.pptId, h.slideNum);
+ });
+
+ container.appendChild(card);
+ });
+ };
+
+ // Filter Buttons binding
+ filterButtons.forEach(btn => {
+ btn.addEventListener("click", () => {
+ filterButtons.forEach(b => {
+ b.classList.remove("active-filter");
+ b.style.background = "";
+ b.style.borderColor = "";
+ });
+
+ btn.classList.add("active-filter");
+ btn.style.background = "var(--accent-cyan-glow)";
+ btn.style.borderColor = "var(--accent-cyan)";
+
+ const filterCat = btn.getAttribute("data-filter-cat");
+ renderHighlights(filterCat);
+ });
+ });
+
+ // Initial render
+ renderHighlights("all");
+}
+
diff --git a/slides/ppt1/slide_1.png b/slides/ppt1/slide_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebcad45d1baa6ae7bfe890d6ebd12dd0c45bd8d0
--- /dev/null
+++ b/slides/ppt1/slide_1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d52ade2861f4e9ba22a0cb5ef3b654fbc6ea5cbb48a1833c8c672b10f8ed0db0
+size 798844
diff --git a/slides/ppt1/slide_10.png b/slides/ppt1/slide_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..afca9af47304077b83121c043e572baff13657ed
--- /dev/null
+++ b/slides/ppt1/slide_10.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9caa4b8a5737336a30ca8084be1fd4a4c60de225f1f79826d0ac7e0858a6196c
+size 800187
diff --git a/slides/ppt1/slide_11.png b/slides/ppt1/slide_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..6884d7753bec64947cc343bb89109ef00a70f772
--- /dev/null
+++ b/slides/ppt1/slide_11.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6fc3386afa50dd590f7560165f9a965b007beef63fa779e07c0c22b624d827fa
+size 245145
diff --git a/slides/ppt1/slide_12.png b/slides/ppt1/slide_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea443ce53548b59c4b1c06367adc6893b338087f
--- /dev/null
+++ b/slides/ppt1/slide_12.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6469f838f2e605cc6f9e75012a5fb71acad820d155287c160a884db8c38dde0a
+size 295005
diff --git a/slides/ppt1/slide_13.png b/slides/ppt1/slide_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..46c8a6b7c4db47a8d18179a6988f96f4a0a5d8ea
--- /dev/null
+++ b/slides/ppt1/slide_13.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:441e01178e391d277bc77c3f04e229cb3082fd508995bd6ac7e3d5a9d1646974
+size 1444623
diff --git a/slides/ppt1/slide_14.png b/slides/ppt1/slide_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..faf817fba9f065c68997213065675d330d684ed9
--- /dev/null
+++ b/slides/ppt1/slide_14.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f605e70d51b957dbfd84ad54c143a8508007ee537f9e2ecb734963d57a3b8700
+size 439352
diff --git a/slides/ppt1/slide_15.png b/slides/ppt1/slide_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..c56a000f15faed88a8c99a8dd99c918d9e9cdb66
--- /dev/null
+++ b/slides/ppt1/slide_15.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6af031529709cfe9a3d3612dd9578378530b671bf0f89cca086f549ced4989c
+size 570093
diff --git a/slides/ppt1/slide_16.png b/slides/ppt1/slide_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4edef13852b3864cf16666785387b3aeaea88f2
--- /dev/null
+++ b/slides/ppt1/slide_16.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2279c8c61b5d935a2e708c187775cd60557a25cc657c3a28dcbaa5f07600719
+size 442065
diff --git a/slides/ppt1/slide_17.png b/slides/ppt1/slide_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..6cbdb56a820c135e458797494c4b3fdc621b2233
--- /dev/null
+++ b/slides/ppt1/slide_17.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be0482592dbd7e73a1b57155ba6c4313c96395562fb3b86472617dacc6bf0b7c
+size 380528
diff --git a/slides/ppt1/slide_18.png b/slides/ppt1/slide_18.png
new file mode 100644
index 0000000000000000000000000000000000000000..7aec25064056eb686d7534364d72489f653c0f11
--- /dev/null
+++ b/slides/ppt1/slide_18.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be94202c3854da255bdcf1e585b0482e10e36402804807c1d6234e4afe32692a
+size 879296
diff --git a/slides/ppt1/slide_19.png b/slides/ppt1/slide_19.png
new file mode 100644
index 0000000000000000000000000000000000000000..c157073e86c066853758f3e793604e99b398abdd
--- /dev/null
+++ b/slides/ppt1/slide_19.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1300f8501d1f4d240e7f867db95a654b253843fe1d877965f00400a5c4e8e413
+size 586085
diff --git a/slides/ppt1/slide_2.png b/slides/ppt1/slide_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ece4e9980c14e7853e0a4c3b3dc940657553f03
--- /dev/null
+++ b/slides/ppt1/slide_2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2afbfdb3193d800826e6908f419f249ca2efe6d1c193027e0e1a2c67f0a7ba8b
+size 685893
diff --git a/slides/ppt1/slide_20.png b/slides/ppt1/slide_20.png
new file mode 100644
index 0000000000000000000000000000000000000000..b686151ae658cdafc707273885adac84ae0660c2
--- /dev/null
+++ b/slides/ppt1/slide_20.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28c27770e768e53b451b8abb12e4bc900f260d0af3d83c2f70c0c7f69531900e
+size 389079
diff --git a/slides/ppt1/slide_21.png b/slides/ppt1/slide_21.png
new file mode 100644
index 0000000000000000000000000000000000000000..1fb6abbc46565a8fbe7044451d568a737d2a6ff1
--- /dev/null
+++ b/slides/ppt1/slide_21.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2df69350943565f5ca0b43ca0ce4126568a8d74d10a4754770785083157fb69b
+size 753590
diff --git a/slides/ppt1/slide_22.png b/slides/ppt1/slide_22.png
new file mode 100644
index 0000000000000000000000000000000000000000..0dc7ab95e61136f9da260f4a8900bd0a2679ce45
--- /dev/null
+++ b/slides/ppt1/slide_22.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af25911e2303b9be039c7e298972b9eb9a2dc6539560764e33bfe6bb30ca70c6
+size 609065
diff --git a/slides/ppt1/slide_23.png b/slides/ppt1/slide_23.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe34d6a1e41eb49103a92074ad09c34536cd3399
--- /dev/null
+++ b/slides/ppt1/slide_23.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9055de7872f92a82860ca0fe18b3dd4e58cfdc91cb6056bc1849c78ff9381d22
+size 1063492
diff --git a/slides/ppt1/slide_24.png b/slides/ppt1/slide_24.png
new file mode 100644
index 0000000000000000000000000000000000000000..9312f2e11b7795bfb6cb0bbc4cf82e46699f29cc
--- /dev/null
+++ b/slides/ppt1/slide_24.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c735ff492fef00b8cfd8ac4eedc0ff6e4db2c5e577f02f20327a62f17dc17c61
+size 703879
diff --git a/slides/ppt1/slide_25.png b/slides/ppt1/slide_25.png
new file mode 100644
index 0000000000000000000000000000000000000000..1069ad569c8c375d830d93b742a79d8510fb327a
--- /dev/null
+++ b/slides/ppt1/slide_25.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57799b9f88f2faa87974641e57733c7f38f9d91c00be150cfc171ba7323ff45e
+size 513595
diff --git a/slides/ppt1/slide_26.png b/slides/ppt1/slide_26.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e5ef45ffcfc61bfa16d6b2961852d61deed1df7
--- /dev/null
+++ b/slides/ppt1/slide_26.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e95674ba46c72dfb49c1ff689ea737f71e2fea75f162b3addf2c9e67fd863193
+size 1609475
diff --git a/slides/ppt1/slide_3.png b/slides/ppt1/slide_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..20a9fb6b266d8a4c1706b8cd761e997a125b3fb2
--- /dev/null
+++ b/slides/ppt1/slide_3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c1278a95f9fafb4d24801c009d3453d9d3505dbffbc6386d14826934cbd5acf
+size 1064048
diff --git a/slides/ppt1/slide_4.png b/slides/ppt1/slide_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..47389163cbce80b7fb4841be76c03f82fc98809c
--- /dev/null
+++ b/slides/ppt1/slide_4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a96cc3226b099820026bd50e85db1aaec28f3d89da34e7d1c6c43f61eae253b
+size 1409152
diff --git a/slides/ppt1/slide_5.png b/slides/ppt1/slide_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..afbccd36bbc867978a198e530d28189253f4ad51
--- /dev/null
+++ b/slides/ppt1/slide_5.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9d18da84a8c5d0dcdbb8b2d8914bd152708b0aebd46f68f3ec47524076f3161
+size 1239217
diff --git a/slides/ppt1/slide_6.png b/slides/ppt1/slide_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..2bf9ce0fa0fb5262b9700bb6f4ae28180e668347
--- /dev/null
+++ b/slides/ppt1/slide_6.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51ee9fbdcdd9e947e250e0313821dfe6c5024380ca27dfbbff7829c210bedfe0
+size 1294037
diff --git a/slides/ppt1/slide_7.png b/slides/ppt1/slide_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..215a6fdd1390ca9e0ddce8b5fda72b654ac58679
--- /dev/null
+++ b/slides/ppt1/slide_7.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0727d8307f3ea304b558c1189a2ce3db579d00183ad10a9b06a2936e66003620
+size 366619
diff --git a/slides/ppt1/slide_8.png b/slides/ppt1/slide_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..32832f8240675cea97814151e853922db3f8d94d
--- /dev/null
+++ b/slides/ppt1/slide_8.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:85863c181ad94df2e417f9ae134cae836e7167f3c0b7a83a6816ffe87762222e
+size 747421
diff --git a/slides/ppt1/slide_9.png b/slides/ppt1/slide_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..4662101a4674ab6dced7e31a18467b25b6eec039
--- /dev/null
+++ b/slides/ppt1/slide_9.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d476fba47eb98fca29cc0e49ab985c56090e6552a4feb16f6c3e5e60a17dbf6b
+size 290747
diff --git a/slides/ppt2/slide_1.png b/slides/ppt2/slide_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3220813b7fb4f54b60aa64c1bf22cb963bdea42c
--- /dev/null
+++ b/slides/ppt2/slide_1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f904d2c651fdb6a2b554bfe8ce63b58e7394e9a90db85c194a6cd246f68196b
+size 76077
diff --git a/slides/ppt2/slide_10.png b/slides/ppt2/slide_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..4295c81f384a2477f99d33048468a65bd2c5b178
--- /dev/null
+++ b/slides/ppt2/slide_10.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3034327a8e5083bf7e3b2d25d515f950216fb569a359ac5605a74b6d243f22c
+size 743761
diff --git a/slides/ppt2/slide_11.png b/slides/ppt2/slide_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..96741008f3beaa83818e18aa3e7b4bdbfd7a07c8
--- /dev/null
+++ b/slides/ppt2/slide_11.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7be9706d32b75c879ae2c7282a2d2ac3c9311af214b883316784e46bfe999c77
+size 134360
diff --git a/slides/ppt2/slide_12.png b/slides/ppt2/slide_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..afa56a03909c1bf722de55290a90f98c18303b06
--- /dev/null
+++ b/slides/ppt2/slide_12.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea4d83f83a9c21484db73e4080b504169ff479a00e1e82063fbcf495869b993b
+size 250972
diff --git a/slides/ppt2/slide_13.png b/slides/ppt2/slide_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..30e07ec771b766868a83707042350d5435fd4c46
--- /dev/null
+++ b/slides/ppt2/slide_13.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f147631e550c565a9faf228dc6b1801173ca6affc1813f28eef9ba2dd6eb3c3
+size 293743
diff --git a/slides/ppt2/slide_14.png b/slides/ppt2/slide_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8bd64579e447c3aaa19fa281bbc75ac7fc0d21c
--- /dev/null
+++ b/slides/ppt2/slide_14.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62dd55c079643869717be32706cc7d96520f39cbec0f219b2501f13c8e35be16
+size 269891
diff --git a/slides/ppt2/slide_15.png b/slides/ppt2/slide_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..807335eaefcbdf813ec60927b441dbc577ebb694
--- /dev/null
+++ b/slides/ppt2/slide_15.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04529c5bd922ea50c2d2e182db6ca93d00106deb8f7f1e1a2abab159183306f2
+size 210412
diff --git a/slides/ppt2/slide_16.png b/slides/ppt2/slide_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..9557fdf1cd72848388a96bb0d0b7a8035a12c6fa
--- /dev/null
+++ b/slides/ppt2/slide_16.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac54433601d749e43da3bc411b8ad1e3534d775db9494a7b59b380a25062f9c8
+size 347100
diff --git a/slides/ppt2/slide_17.png b/slides/ppt2/slide_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..62a3a320eddf0e1486f22b3f64b8d77b911ab9ae
--- /dev/null
+++ b/slides/ppt2/slide_17.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:144c3351f69b4f739a6b61fa0bff069dff34f7d14e2ef798b61579e1c506b2f8
+size 79605
diff --git a/slides/ppt2/slide_2.png b/slides/ppt2/slide_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e7998c7209ceca0f68ea3ed68513fbb48b58194
--- /dev/null
+++ b/slides/ppt2/slide_2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:695121e0bc48216f8f6cbcd6fd8cfcb0b60262b22b679fa597d7a011a11d0fda
+size 174021
diff --git a/slides/ppt2/slide_3.png b/slides/ppt2/slide_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..90df7390bc5d5c2948d93910371ef0dcec3a99c8
--- /dev/null
+++ b/slides/ppt2/slide_3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c86a8dcd165247ce389c3507adb8f5e2b87613d6379c529274ed20af0e8015b7
+size 368839
diff --git a/slides/ppt2/slide_4.png b/slides/ppt2/slide_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a7941a2c64cec9dd0f08773251d6af8a6d4af32
--- /dev/null
+++ b/slides/ppt2/slide_4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:476435fb87b93825c4b260e1b3a942d34fecd1d3dde908e9f2b38f564ca8445c
+size 741670
diff --git a/slides/ppt2/slide_5.png b/slides/ppt2/slide_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..366f6f0e9e8058406ec5a4954827b84be6842567
--- /dev/null
+++ b/slides/ppt2/slide_5.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3679f5079c1c757dc990426a867cf4038290a2d5fb3a9b787b42ad831d3a919d
+size 137196
diff --git a/slides/ppt2/slide_6.png b/slides/ppt2/slide_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..d40018d19b97adf6451bc02d87a7b5c606eccf1e
--- /dev/null
+++ b/slides/ppt2/slide_6.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf99375e8763951b0b6d0d3c75224767a229c9b170d74786ab1ae7aeb84dd521
+size 368940
diff --git a/slides/ppt2/slide_7.png b/slides/ppt2/slide_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb490e836448bb615e4f3e8bbfb951dac0a6393b
--- /dev/null
+++ b/slides/ppt2/slide_7.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1a04bb84a77ba866f4347f7537662416a66aa045f37e5299f28e8ed052a884e
+size 739319
diff --git a/slides/ppt2/slide_8.png b/slides/ppt2/slide_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..775189b42f085f2f0697853f33c316d9886a9195
--- /dev/null
+++ b/slides/ppt2/slide_8.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81fd6f054634b74b856b248c9e0101bb3f065ca66063f82534879fb0ce2d0e32
+size 136357
diff --git a/slides/ppt2/slide_9.png b/slides/ppt2/slide_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2b3a023aacdbb5b6dfe998c88d42dff98b545dd
--- /dev/null
+++ b/slides/ppt2/slide_9.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:965a594d43b6d20070d2337e792e057c2c7634ed00bdc962147b4e59c7974834
+size 378803
diff --git a/slides/ppt3/slide_1.png b/slides/ppt3/slide_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b5a96e8fb7f2358a63e845e410345dfcb810078
--- /dev/null
+++ b/slides/ppt3/slide_1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf73782f298f750cf33ee817ebdbd2e00290ed4ac590b7e5f6dd33c45a72db47
+size 293844
diff --git a/slides/ppt3/slide_10.png b/slides/ppt3/slide_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..31599f5caad35eeec277eddd21d5e006b78847b5
--- /dev/null
+++ b/slides/ppt3/slide_10.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:732a1408e114658c49071da45afd22a970ba35a72d4ab195f379d00cb820ce78
+size 959518
diff --git a/slides/ppt3/slide_11.png b/slides/ppt3/slide_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab24eedfdb39e693a73bb66c28ca8a20f5897713
--- /dev/null
+++ b/slides/ppt3/slide_11.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:614367791361aa959745e8a07c75ec43890e96e6d9d660a34649299358125d31
+size 1299205
diff --git a/slides/ppt3/slide_12.png b/slides/ppt3/slide_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..b53c419f053e503a41469b0bfdc0f2d2f590243b
--- /dev/null
+++ b/slides/ppt3/slide_12.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb795eeddd3519ac4ae890e69ec583c72184e4ee4c385c10c1ffc78b5ec9ed3a
+size 1037037
diff --git a/slides/ppt3/slide_13.png b/slides/ppt3/slide_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..cded75b545b72bcf2ebd82b1e400c23db7b3179d
--- /dev/null
+++ b/slides/ppt3/slide_13.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc6199fdb29226ba60cb3a9b7d3f9712e2ae38c464cd33733d70bee9fe343ff7
+size 1198605
diff --git a/slides/ppt3/slide_14.png b/slides/ppt3/slide_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..d77ffc3ff7b58f1c808abc1f79de5e97c237a5b0
--- /dev/null
+++ b/slides/ppt3/slide_14.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c1fb30e18d89e0eaf1531a426ce9bec0e9eb8aa4f16ba47796dceb829a86898
+size 641827
diff --git a/slides/ppt3/slide_15.png b/slides/ppt3/slide_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..b46b782938e80bb725c2d4a5b3212fcd444293cf
--- /dev/null
+++ b/slides/ppt3/slide_15.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35716f1fa96185eb213f25104dc143153e35e484422bc55c570ca530c259b4ee
+size 195576
diff --git a/slides/ppt3/slide_16.png b/slides/ppt3/slide_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c9185326a9e238d3483ca768eeb8b89643451f4
--- /dev/null
+++ b/slides/ppt3/slide_16.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67437bbf62a3013b8652c503bb504a7c6b3f2ade29ae964e59f95479a6e2cea4
+size 220796
diff --git a/slides/ppt3/slide_17.png b/slides/ppt3/slide_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..84c5aa90d3818e5a0905da1301f4f55856892b1a
--- /dev/null
+++ b/slides/ppt3/slide_17.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:881d24a0ee5055e01cdd503b80af261057160c52ec98ebdd91e97d23dd1b353b
+size 694877
diff --git a/slides/ppt3/slide_18.png b/slides/ppt3/slide_18.png
new file mode 100644
index 0000000000000000000000000000000000000000..5fd75e2c14dda5c32af8060fc50dd0240cc54b3c
--- /dev/null
+++ b/slides/ppt3/slide_18.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:baf943b440b67632ba41d6da0d86088d7dce3bce095a454cbf9150039bcc2f2f
+size 256664
diff --git a/slides/ppt3/slide_19.png b/slides/ppt3/slide_19.png
new file mode 100644
index 0000000000000000000000000000000000000000..2522ef0af80417d65c31a02afc93698f0525a069
--- /dev/null
+++ b/slides/ppt3/slide_19.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a55e4e1fc18267f772b55638bb8f1a30ca85a5f651d719d50bad803490c6132a
+size 295771
diff --git a/slides/ppt3/slide_2.png b/slides/ppt3/slide_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..da737d388ebef0c6c80d978aec8d7f5d6e13a221
--- /dev/null
+++ b/slides/ppt3/slide_2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6410a25e06311b5d08c79d86d617c1b86c2bbbffb351c4f4c098ccfc020b467f
+size 916961
diff --git a/slides/ppt3/slide_20.png b/slides/ppt3/slide_20.png
new file mode 100644
index 0000000000000000000000000000000000000000..d87e3dad5d4aa683bacc93de276b5c45b5b6c76d
--- /dev/null
+++ b/slides/ppt3/slide_20.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8eff074b76abe50e5e2a30f3351c5faaa60c6334124e0beacbe2a66298bdb173
+size 452535
diff --git a/slides/ppt3/slide_21.png b/slides/ppt3/slide_21.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9e67a94291acaa2e9cdfec1a880226dcf06cd48
--- /dev/null
+++ b/slides/ppt3/slide_21.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fee9b54465f83259e4890499a0fdc14be323cf3c9236cd2205656d0df9ef4482
+size 273473
diff --git a/slides/ppt3/slide_22.png b/slides/ppt3/slide_22.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a1810533f24ef8924a5af8e846a868157eee414
--- /dev/null
+++ b/slides/ppt3/slide_22.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55a7cfb668925a45fc811d808423bc99aed356ef3e3885e8581d19e62bd2cafc
+size 776513
diff --git a/slides/ppt3/slide_23.png b/slides/ppt3/slide_23.png
new file mode 100644
index 0000000000000000000000000000000000000000..abff720e329103e5d951c003e89ada88b53eb8f3
--- /dev/null
+++ b/slides/ppt3/slide_23.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6215e64567e5d6b625368f6b1e8e9bacc969526303db12cb9befadbf2534da7
+size 484593
diff --git a/slides/ppt3/slide_24.png b/slides/ppt3/slide_24.png
new file mode 100644
index 0000000000000000000000000000000000000000..beaedcc1150e23e455cd25c28d82c7953287b70d
--- /dev/null
+++ b/slides/ppt3/slide_24.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7c2440139c81848efe70ac43e8298af7b92260190c4da08cfac92e8e716a80b
+size 648509
diff --git a/slides/ppt3/slide_25.png b/slides/ppt3/slide_25.png
new file mode 100644
index 0000000000000000000000000000000000000000..bfe8a286b364f7c9a736d8131e7a85ee9b052051
--- /dev/null
+++ b/slides/ppt3/slide_25.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e65ee514fd61c28bfd4f3447ad52bfd00748e39732387ad28d8ea93b56f4c47c
+size 504352
diff --git a/slides/ppt3/slide_26.png b/slides/ppt3/slide_26.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d1c072f51ba5a869f69dcb23aa07fd10448dbf4
--- /dev/null
+++ b/slides/ppt3/slide_26.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf5ec3757a52c22c1fec208b281d6287f3a02b6c807d3c53d375d1ca69522271
+size 337967
diff --git a/slides/ppt3/slide_27.png b/slides/ppt3/slide_27.png
new file mode 100644
index 0000000000000000000000000000000000000000..bad1390bec734f52ecb2af33a6988a2de98c700a
--- /dev/null
+++ b/slides/ppt3/slide_27.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73720f607b4d235e51f6b31054fb6d728376bf2aabc4b933f2c9a24ae816a561
+size 970988
diff --git a/slides/ppt3/slide_28.png b/slides/ppt3/slide_28.png
new file mode 100644
index 0000000000000000000000000000000000000000..43a04377a5692759af4b166bc4afb0ae08f72ee8
--- /dev/null
+++ b/slides/ppt3/slide_28.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:302c9a27521ced8b563c4a9bab7b7c44c555250cef6a37749b59e6a0d625fc12
+size 156778
diff --git a/slides/ppt3/slide_29.png b/slides/ppt3/slide_29.png
new file mode 100644
index 0000000000000000000000000000000000000000..73158c03392ad4e5667c155bd776d6c2e8412148
--- /dev/null
+++ b/slides/ppt3/slide_29.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9cee0688ecb61278d3c27dbf5d90956db7e20145d058b21fc8179ec7d7f1a472
+size 125067
diff --git a/slides/ppt3/slide_3.png b/slides/ppt3/slide_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d5ae6a5b38b2f452fbacd310d50e8a6ef5580a4
--- /dev/null
+++ b/slides/ppt3/slide_3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b63bb4544c7e93430c5e065b6fcad4e4834dc38c0d31a8c92294420d93608357
+size 846789
diff --git a/slides/ppt3/slide_30.png b/slides/ppt3/slide_30.png
new file mode 100644
index 0000000000000000000000000000000000000000..91eb92fa1c79b47e89600bbe86cbdbd1ff356379
--- /dev/null
+++ b/slides/ppt3/slide_30.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8fb9dfa02f04ef7c309ea3619165a3e6e855c7dc078aea553956acaebc4f2e0
+size 129836
diff --git a/slides/ppt3/slide_31.png b/slides/ppt3/slide_31.png
new file mode 100644
index 0000000000000000000000000000000000000000..582f03b9fa80ff93e609db9cb1a485c839dda1ec
--- /dev/null
+++ b/slides/ppt3/slide_31.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e76c3ebe33685ec46c766c77ed11528e7371889361cefcd19d8f783590140ab2
+size 1345209
diff --git a/slides/ppt3/slide_32.png b/slides/ppt3/slide_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddf11a14ff9553aa46c731c203fd268ba7d57c84
--- /dev/null
+++ b/slides/ppt3/slide_32.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:88b5cc797c23a4518ba48e713975b9824989629def41473c0c080dff1c53f54e
+size 56223
diff --git a/slides/ppt3/slide_33.png b/slides/ppt3/slide_33.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c6bcb175bf65d1aab9d8d8f6974af05620a9b75
--- /dev/null
+++ b/slides/ppt3/slide_33.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93a8364117c562bb2c2c285f5b0bec98f51677355208e548125a8f2c9be40699
+size 146084
diff --git a/slides/ppt3/slide_34.png b/slides/ppt3/slide_34.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc6ba15d5d7ab596a9c34498517645de744f5386
--- /dev/null
+++ b/slides/ppt3/slide_34.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6ae2c58c36220d0cea418abd6ee6f80937054ffa2cf15c572d3706939fc60626
+size 319756
diff --git a/slides/ppt3/slide_35.png b/slides/ppt3/slide_35.png
new file mode 100644
index 0000000000000000000000000000000000000000..099a3d1da299b6f192e745bd9b6a5b94bf17dce1
--- /dev/null
+++ b/slides/ppt3/slide_35.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2945e1ed7f8cf49bc2ee420c384b29b2241523e1e0eb4225a94c0e7521015435
+size 164882
diff --git a/slides/ppt3/slide_36.png b/slides/ppt3/slide_36.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f8036ea43e2f791259d97db987ec28cdb5dde99
--- /dev/null
+++ b/slides/ppt3/slide_36.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02eafb734e6200dba1be3207f869adc86703994e41d31e8c98e4d9bd6aca9240
+size 91003
diff --git a/slides/ppt3/slide_37.png b/slides/ppt3/slide_37.png
new file mode 100644
index 0000000000000000000000000000000000000000..b95d711a6878252a2406f341bef29f42d8cac267
--- /dev/null
+++ b/slides/ppt3/slide_37.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3536c92ce417c8039dfec23cc748c767b5e8b8f7240b2b229c70bc7da3484a47
+size 1359779
diff --git a/slides/ppt3/slide_38.png b/slides/ppt3/slide_38.png
new file mode 100644
index 0000000000000000000000000000000000000000..74502bc95332c0c429ad5b33382607f1839cb08d
--- /dev/null
+++ b/slides/ppt3/slide_38.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42a39814d5ca979388b34d827b35889501c2a64f4ea081971b5a92aff3258559
+size 939718
diff --git a/slides/ppt3/slide_39.png b/slides/ppt3/slide_39.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d624189133636e4eed3f2ea6034114cf0ccb405
--- /dev/null
+++ b/slides/ppt3/slide_39.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dce7561465d51df2f8b9d30857524374b92992d313b2b5baf2db06716d946afa
+size 451850
diff --git a/slides/ppt3/slide_4.png b/slides/ppt3/slide_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..29fbce740a34dae96c0b856badb5a26634514887
--- /dev/null
+++ b/slides/ppt3/slide_4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68002fa8374ae2af1e45386a3016cf98e79efc477693172787651031f7d4acb3
+size 939638
diff --git a/slides/ppt3/slide_40.png b/slides/ppt3/slide_40.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b658f9511e72b5bf093003cb108001bf0ad20b6
--- /dev/null
+++ b/slides/ppt3/slide_40.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95c1127fd882629a8493513cd1722572bb3ca25195c4616669143b62198aa690
+size 279298
diff --git a/slides/ppt3/slide_41.png b/slides/ppt3/slide_41.png
new file mode 100644
index 0000000000000000000000000000000000000000..318bf1ad04327efe091a8a1d29f8ad146a4deb5a
--- /dev/null
+++ b/slides/ppt3/slide_41.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb645c75a69c9d3bc4fdfac9ba06f7dac60420c7f3603cefc019d6792030bb25
+size 105650
diff --git a/slides/ppt3/slide_42.png b/slides/ppt3/slide_42.png
new file mode 100644
index 0000000000000000000000000000000000000000..66bd614da105cc799001cf402e52f6c138ef970e
--- /dev/null
+++ b/slides/ppt3/slide_42.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3a910713377911c2cf8d522e940efeba9dbad0d209e67209db23f1086560f8d4
+size 71115
diff --git a/slides/ppt3/slide_43.png b/slides/ppt3/slide_43.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc335e4bf10f81d1e71ed219ff7df803cfb96376
--- /dev/null
+++ b/slides/ppt3/slide_43.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2ec41cbc92e56a205f374edfbba1f360caf655e9908bed6a5666c99236808587
+size 123779
diff --git a/slides/ppt3/slide_44.png b/slides/ppt3/slide_44.png
new file mode 100644
index 0000000000000000000000000000000000000000..bad183484f32228a995fcad53325ee614b05af8c
--- /dev/null
+++ b/slides/ppt3/slide_44.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bbcedce8dc89fb01fca027f01d109d360c41de60fe320900a7feb81e56888d15
+size 72524
diff --git a/slides/ppt3/slide_45.png b/slides/ppt3/slide_45.png
new file mode 100644
index 0000000000000000000000000000000000000000..862b4d00c4f00b91a88c55d764dcd43f78de938d
--- /dev/null
+++ b/slides/ppt3/slide_45.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a95d606dc6a0709b16e180f87f5b8c6e470ef7f0a71fb4ccd3362c3b00c81d5
+size 217169
diff --git a/slides/ppt3/slide_46.png b/slides/ppt3/slide_46.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c824c1d7ce4309b426ebd705fe929f73f432365
--- /dev/null
+++ b/slides/ppt3/slide_46.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84c48e598d1c52c0d0040e566430a1e526a663becb8091996fda4c4a7a3f78a5
+size 57317
diff --git a/slides/ppt3/slide_47.png b/slides/ppt3/slide_47.png
new file mode 100644
index 0000000000000000000000000000000000000000..3159415ec69b155054120e692b49be2447c7f976
--- /dev/null
+++ b/slides/ppt3/slide_47.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:184899f8fc03b166d8444493eda3b6883f034ef199113e2a3d8c53349e908aff
+size 242287
diff --git a/slides/ppt3/slide_48.png b/slides/ppt3/slide_48.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea7eb46e43906754bdbe12673aa48cc03271d9a9
--- /dev/null
+++ b/slides/ppt3/slide_48.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4cb68d5d48ee1045a9eb662c4a5f0ba87a8e8613c42c1dde2a18e9bfbb88b44a
+size 208088
diff --git a/slides/ppt3/slide_49.png b/slides/ppt3/slide_49.png
new file mode 100644
index 0000000000000000000000000000000000000000..400156845cabec37a7f233226634f468657a91ac
--- /dev/null
+++ b/slides/ppt3/slide_49.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eac56aea11894c80dbd35517c95454f7bcb24f7a8da71c54013e3b5794b4aeae
+size 182783
diff --git a/slides/ppt3/slide_5.png b/slides/ppt3/slide_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..d70533980227acb493059ef8bb6b74c59aeeb8ba
--- /dev/null
+++ b/slides/ppt3/slide_5.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25592cf785ec4149ceb6defc1ea4a9d8c5015cb574477f3d4c1f23526451268f
+size 513462
diff --git a/slides/ppt3/slide_50.png b/slides/ppt3/slide_50.png
new file mode 100644
index 0000000000000000000000000000000000000000..67d5fa7a3e01f8728684a270cf72bdde17a6274f
--- /dev/null
+++ b/slides/ppt3/slide_50.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0582aa7b25ecadd894f13ce03d1c8f46b332e6a29b167ae0dc9a98f98bd17522
+size 228057
diff --git a/slides/ppt3/slide_51.png b/slides/ppt3/slide_51.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd2e1889ac13ab01fea5cfeb3a9b32124efd0c7e
--- /dev/null
+++ b/slides/ppt3/slide_51.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7cb1943aa8a87bd5034d012247d3bf8890b3b5327b569e3e8b1602172fce7bb
+size 503876
diff --git a/slides/ppt3/slide_52.png b/slides/ppt3/slide_52.png
new file mode 100644
index 0000000000000000000000000000000000000000..59cdf9052672303a616b6e3c9cfb8c3642dbaaf3
--- /dev/null
+++ b/slides/ppt3/slide_52.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c44db3c8ecb53b8cefd276cad8a911f9e0d7ff2cec948ad913eddd1944ce325
+size 209573
diff --git a/slides/ppt3/slide_53.png b/slides/ppt3/slide_53.png
new file mode 100644
index 0000000000000000000000000000000000000000..48f58525ee404a12c7dd65eed2499f5eab1d94aa
--- /dev/null
+++ b/slides/ppt3/slide_53.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4603bdb2b36b87388c918359e6f22760b19dbf9a6952fc424280eed3411dce42
+size 545358
diff --git a/slides/ppt3/slide_54.png b/slides/ppt3/slide_54.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b98003a267e89923df078f142f0c6d79bd90c29
--- /dev/null
+++ b/slides/ppt3/slide_54.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0a5e4d69103602eba61b6b1c72c0b06df01f7e5bed09f63306979157590aca0
+size 199597
diff --git a/slides/ppt3/slide_55.png b/slides/ppt3/slide_55.png
new file mode 100644
index 0000000000000000000000000000000000000000..88483f0a332ccc79e7923b01c8e95fd40d05459d
--- /dev/null
+++ b/slides/ppt3/slide_55.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cbd179e0ab8437f0a2f6cecd18685f61b049db4ba4e0f0840ac98f7d4fc3045
+size 248099
diff --git a/slides/ppt3/slide_56.png b/slides/ppt3/slide_56.png
new file mode 100644
index 0000000000000000000000000000000000000000..e56065db1bb106a5c3974f1e2383090c284968a9
--- /dev/null
+++ b/slides/ppt3/slide_56.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5127cabafece932d9928f8041680a6845bfa6f015711dd400f737695a97fa77a
+size 305871
diff --git a/slides/ppt3/slide_57.png b/slides/ppt3/slide_57.png
new file mode 100644
index 0000000000000000000000000000000000000000..cff51a9c109b5527197e65a70844af63f2acefd5
--- /dev/null
+++ b/slides/ppt3/slide_57.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:234a824a7b856013b7ed666ef9971953e7df6f99d73a5905ad3b19761c4c529f
+size 137595
diff --git a/slides/ppt3/slide_58.png b/slides/ppt3/slide_58.png
new file mode 100644
index 0000000000000000000000000000000000000000..ecdee6e18c8578360f1308ba57fcf0a1356ab7e2
--- /dev/null
+++ b/slides/ppt3/slide_58.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6144ef6964d6f78b48c1ae62f160e4b2edf9a26b194297f5f0d892c697e8b9e6
+size 458887
diff --git a/slides/ppt3/slide_59.png b/slides/ppt3/slide_59.png
new file mode 100644
index 0000000000000000000000000000000000000000..acd122e77ccd50e2377b35274f6609dbbc814f24
--- /dev/null
+++ b/slides/ppt3/slide_59.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:69b3b4bdb68ba675f5e3c7714fe733c89d63c3e694ed2bcbc206ae760b9e8689
+size 16885
diff --git a/slides/ppt3/slide_6.png b/slides/ppt3/slide_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb2abf63355e7a2fc80e70863bfd49a8298033ff
--- /dev/null
+++ b/slides/ppt3/slide_6.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7b4491ca112751653e0ae624e9bd8360201d7bde7335bd7e4826312ce7514fd
+size 682800
diff --git a/slides/ppt3/slide_60.png b/slides/ppt3/slide_60.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddcb4a642da10652db0955bad2ec73b9473dcf4e
--- /dev/null
+++ b/slides/ppt3/slide_60.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ec757ee021b9c0e1ec3da16b870846592a499007c4d2f83104463395ccad678
+size 19578
diff --git a/slides/ppt3/slide_61.png b/slides/ppt3/slide_61.png
new file mode 100644
index 0000000000000000000000000000000000000000..696af125a086090dc3302847ed5faca9b15470e2
--- /dev/null
+++ b/slides/ppt3/slide_61.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01af8c7ecef89e416b0e437def986fc4188e4c024cee831b00e688bf1836410a
+size 28910
diff --git a/slides/ppt3/slide_62.png b/slides/ppt3/slide_62.png
new file mode 100644
index 0000000000000000000000000000000000000000..abbe9a347efc689c6fd3729a4dbca6f04873298b
--- /dev/null
+++ b/slides/ppt3/slide_62.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2eb08e2026bc6a87d305342f0ed7b620ff72a6b475664bf799e68e86ccab330b
+size 28388
diff --git a/slides/ppt3/slide_63.png b/slides/ppt3/slide_63.png
new file mode 100644
index 0000000000000000000000000000000000000000..44fbfba555f74c328f53c2dad20776dba137e5d1
--- /dev/null
+++ b/slides/ppt3/slide_63.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07fa963c2327ba141e5365cd0f8df7c293439bf625bc40a0809ff19a32799a6d
+size 23930
diff --git a/slides/ppt3/slide_64.png b/slides/ppt3/slide_64.png
new file mode 100644
index 0000000000000000000000000000000000000000..f107a47b6ba6c2ec8054aa4090dfc63484ea7985
--- /dev/null
+++ b/slides/ppt3/slide_64.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68bb1a420da82e06923b0441ce136bc7e0f5f6998e91ca23ba1cd272c75e544a
+size 28712
diff --git a/slides/ppt3/slide_65.png b/slides/ppt3/slide_65.png
new file mode 100644
index 0000000000000000000000000000000000000000..050867e3ee0d35dc7ab68c4f354b87f72f49347d
--- /dev/null
+++ b/slides/ppt3/slide_65.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b87f256ca6a645ac55810b1d594dc67789c92f7a98f9fda931bffa8aa769c4db
+size 26985
diff --git a/slides/ppt3/slide_66.png b/slides/ppt3/slide_66.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6508a391714a47960d1a70d20bea8a390cbdf87
--- /dev/null
+++ b/slides/ppt3/slide_66.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:144714464d87660e3f1bd5d11bd8fdbbe46eef69e4e6273f2d7a2a00d31b284c
+size 31189
diff --git a/slides/ppt3/slide_67.png b/slides/ppt3/slide_67.png
new file mode 100644
index 0000000000000000000000000000000000000000..26338ffc196f163c575b7a7e8b6276d2dd15324e
--- /dev/null
+++ b/slides/ppt3/slide_67.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9782e27d5fc1dd4510ce78fa41ede24cb31c43ad1f4af648c3a3439c9ec764fa
+size 422788
diff --git a/slides/ppt3/slide_68.png b/slides/ppt3/slide_68.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a629b2469fadce529cfd95a68f18a6a5163bcbb
--- /dev/null
+++ b/slides/ppt3/slide_68.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb8abc5e7aa6eb4d7c5b3be77c1b49454cdf1e490b56093d7e798e863c343603
+size 318631
diff --git a/slides/ppt3/slide_69.png b/slides/ppt3/slide_69.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd844e3f04d33042fe45826f43efcfeb7ce5b40b
--- /dev/null
+++ b/slides/ppt3/slide_69.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2cca12364b71a08714dfbb11340bea6d57e40095c931b37e25844396dc5ea711
+size 73048
diff --git a/slides/ppt3/slide_7.png b/slides/ppt3/slide_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..07984971be44a22b15cc7ed1a8155013436c70fe
--- /dev/null
+++ b/slides/ppt3/slide_7.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b391fc245b15ec9b520d3356ccc192f99adce5fc8e621d3b3e4d71e98f584ed9
+size 611306
diff --git a/slides/ppt3/slide_70.png b/slides/ppt3/slide_70.png
new file mode 100644
index 0000000000000000000000000000000000000000..53deea8ceadef365397232ca16faead57ae4d5db
--- /dev/null
+++ b/slides/ppt3/slide_70.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abd8daea6f708cc02a4a59f1e15efb5e4bbd926551b000a62e704cfa801d088d
+size 209691
diff --git a/slides/ppt3/slide_71.png b/slides/ppt3/slide_71.png
new file mode 100644
index 0000000000000000000000000000000000000000..dcb29cea6f62e6658339ad8b8a02a2eb85cb193b
--- /dev/null
+++ b/slides/ppt3/slide_71.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:316e9bbe4c08fe57191a905dbc94934fb48f03ab0c712e6436075ece1a088a67
+size 1577294
diff --git a/slides/ppt3/slide_8.png b/slides/ppt3/slide_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..28b3b55c150598b4e2491cf56ba1ee78136bed8a
--- /dev/null
+++ b/slides/ppt3/slide_8.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:18f774dd7decd9a41997bc66da1ce59dd7c69fd21ec8aa3fab7c4a6493e7027d
+size 1107632
diff --git a/slides/ppt3/slide_9.png b/slides/ppt3/slide_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca4f71fa9d212929738dd943201c7359294d8b48
--- /dev/null
+++ b/slides/ppt3/slide_9.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26c95042053522bea1aaa30f54248dd88718dacd40e38ff705c4375783d2296e
+size 1072199
diff --git a/slides/ppt4/slide_1.png b/slides/ppt4/slide_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..a297b608b62325a74167e87d0ce2187a44dbb6fb
--- /dev/null
+++ b/slides/ppt4/slide_1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91421b5457e7126cf253ef15e4ed812c1dc61ae8945cfe775a86416f2bc383e1
+size 295194
diff --git a/slides/ppt4/slide_10.png b/slides/ppt4/slide_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3068b97dacd3580c153dc4742b0da4d61708e7d
--- /dev/null
+++ b/slides/ppt4/slide_10.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f30577d06bb93ef4d6ad44d9b3d5e59529b6f81767ae8c5474396befa3ada599
+size 939736
diff --git a/slides/ppt4/slide_11.png b/slides/ppt4/slide_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..d04af4ca043848ca2afaa03a9eef3531afc000af
--- /dev/null
+++ b/slides/ppt4/slide_11.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:570885810771fa10358c214b2a4aa78f6693d20c3f7066063ae65ed88832a030
+size 611265
diff --git a/slides/ppt4/slide_12.png b/slides/ppt4/slide_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..fbfc0760fbdaa42960a2bf90d2cdb49cee04bd10
--- /dev/null
+++ b/slides/ppt4/slide_12.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef3ba1b7785f0661511d91e3dbc06c7ce35c88de9a145d2225ec54e71fe25309
+size 1107647
diff --git a/slides/ppt4/slide_13.png b/slides/ppt4/slide_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..385ed274048e238b66c9af929a9ea4740d88150f
--- /dev/null
+++ b/slides/ppt4/slide_13.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3b5bfcff3d4638e62bdd7c0f7760e57a919dbab471ca4cc114d997334d6b6b8
+size 1072215
diff --git a/slides/ppt4/slide_14.png b/slides/ppt4/slide_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..e56c709a292f9cfefc13a84be471d2d2bc193f7f
--- /dev/null
+++ b/slides/ppt4/slide_14.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ae09b642b6ca03929fc2cf12927ec2ae94a541b44e61cb2f8807ad900d44dcc
+size 959466
diff --git a/slides/ppt4/slide_15.png b/slides/ppt4/slide_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..d991d0cb9118359fe0518aad355449330ac861ad
--- /dev/null
+++ b/slides/ppt4/slide_15.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b643ee2563f9f4042be6e3b7f9d0f0caa5134a43209e29de5e1cf053329da073
+size 1299247
diff --git a/slides/ppt4/slide_16.png b/slides/ppt4/slide_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..80959b6f90e54a0daf19a57ff30cc1ab68be4dd9
--- /dev/null
+++ b/slides/ppt4/slide_16.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01f41ab698be3b56ee86a41bd3ceaa492cd9cc5cb4f65ac83d5531396cf3d15d
+size 1037080
diff --git a/slides/ppt4/slide_17.png b/slides/ppt4/slide_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..6eff2e6713d7a06ca74493a412e2fe07c0712108
--- /dev/null
+++ b/slides/ppt4/slide_17.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf2ecf487572aa942e89aef6d4a5e75c4737c8cdd0d720a3ec800276b19dcc07
+size 1198591
diff --git a/slides/ppt4/slide_18.png b/slides/ppt4/slide_18.png
new file mode 100644
index 0000000000000000000000000000000000000000..1472e24efcaa567f11c1d6747ec17dc9762de562
--- /dev/null
+++ b/slides/ppt4/slide_18.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d6a8610b021ecde755d93208d0e8a99a5f9b7b8d09c07c83e8ff428a20c1eb5
+size 149477
diff --git a/slides/ppt4/slide_19.png b/slides/ppt4/slide_19.png
new file mode 100644
index 0000000000000000000000000000000000000000..3aaf003ed6d6269545e2c9cb28f8ee2da946ad89
--- /dev/null
+++ b/slides/ppt4/slide_19.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9219db462d22f9118b17a5762ea7775d2ca1153f365c121d0aca5e97c8a554aa
+size 515840
diff --git a/slides/ppt4/slide_2.png b/slides/ppt4/slide_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..da737d388ebef0c6c80d978aec8d7f5d6e13a221
--- /dev/null
+++ b/slides/ppt4/slide_2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6410a25e06311b5d08c79d86d617c1b86c2bbbffb351c4f4c098ccfc020b467f
+size 916961
diff --git a/slides/ppt4/slide_20.png b/slides/ppt4/slide_20.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3d74ad5bc815459ae8d5896f57d8008c67d0c0e
--- /dev/null
+++ b/slides/ppt4/slide_20.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72d452be7ec66e2cc41e1df25f318989482bddd4bc657d08b37f3b509bf9e7c6
+size 674232
diff --git a/slides/ppt4/slide_21.png b/slides/ppt4/slide_21.png
new file mode 100644
index 0000000000000000000000000000000000000000..319178f5c3d00a94365cdb1393e9e91bec457d4f
--- /dev/null
+++ b/slides/ppt4/slide_21.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05f18c0f1092e089e05a3bf9a8377b0b086a902ebe5bf288e560a456bb92d8b0
+size 200557
diff --git a/slides/ppt4/slide_22.png b/slides/ppt4/slide_22.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a9ca239f202490f597c4e9e0dd529fd1e527f0b
--- /dev/null
+++ b/slides/ppt4/slide_22.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ca037cada377963b69548e228652d9c8f7f2abd45fa37e9cbb3edfc79371b09
+size 1201045
diff --git a/slides/ppt4/slide_23.png b/slides/ppt4/slide_23.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff2673fe74fe0f99d9ee496b3345e4c9ebbbfa6d
--- /dev/null
+++ b/slides/ppt4/slide_23.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e77c9e21df0c0c5f8b3c4b5300926b9591afa0c7d7f6944c79a34f137d62688d
+size 534207
diff --git a/slides/ppt4/slide_24.png b/slides/ppt4/slide_24.png
new file mode 100644
index 0000000000000000000000000000000000000000..72f373dad6e8c796411556e01484df513cace852
--- /dev/null
+++ b/slides/ppt4/slide_24.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df71c5fa7ce5d3ad31318580f63544815b3dd6378d4634889f2d5330d8f97274
+size 483925
diff --git a/slides/ppt4/slide_25.png b/slides/ppt4/slide_25.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef352917dc4fef1d0cb730e14dfde26d29379a6a
--- /dev/null
+++ b/slides/ppt4/slide_25.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfa95cb531798d3b14783a5f76043392807a6af7036069e53bbb4141adf6d7b2
+size 554205
diff --git a/slides/ppt4/slide_26.png b/slides/ppt4/slide_26.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b30df60954608f500ce87e1e77d2b48b54ead86
--- /dev/null
+++ b/slides/ppt4/slide_26.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f2ac7ad079953e4316ef665554044fcdae2cd876deee597db19b5e252d88683b
+size 865122
diff --git a/slides/ppt4/slide_27.png b/slides/ppt4/slide_27.png
new file mode 100644
index 0000000000000000000000000000000000000000..84853a5273113e5dfaf87ec50afc9a266cd35493
--- /dev/null
+++ b/slides/ppt4/slide_27.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c7fd19210dcbc0eab3ce476e795c253c17b893fb57e8aea48d6760c429f0514
+size 209497
diff --git a/slides/ppt4/slide_28.png b/slides/ppt4/slide_28.png
new file mode 100644
index 0000000000000000000000000000000000000000..7561bf8936bf7e157bf98657998aadd68a238c33
--- /dev/null
+++ b/slides/ppt4/slide_28.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b26e67b453ee97f69c295546405a8f9ae26e3e23dc70a87ba53b6e214c8eb58f
+size 631601
diff --git a/slides/ppt4/slide_29.png b/slides/ppt4/slide_29.png
new file mode 100644
index 0000000000000000000000000000000000000000..786b6629e7e33c264a43cff9be3fa53378b7ace5
--- /dev/null
+++ b/slides/ppt4/slide_29.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:23243ec52f8c207bfe226a07f59e782448ccc790660a26e62fa8a51dd7d485fa
+size 194844
diff --git a/slides/ppt4/slide_3.png b/slides/ppt4/slide_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d5ae6a5b38b2f452fbacd310d50e8a6ef5580a4
--- /dev/null
+++ b/slides/ppt4/slide_3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b63bb4544c7e93430c5e065b6fcad4e4834dc38c0d31a8c92294420d93608357
+size 846789
diff --git a/slides/ppt4/slide_30.png b/slides/ppt4/slide_30.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd12974169322dfd602f666cb2a33f98edc6539d
--- /dev/null
+++ b/slides/ppt4/slide_30.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6c0150365eb2302abca2e6e0f75aa5c93f31eb116244923fbd57deb10fa3fed
+size 1185303
diff --git a/slides/ppt4/slide_31.png b/slides/ppt4/slide_31.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ac60adad77ad22c5b5514041a2b5435ceecf0e1
--- /dev/null
+++ b/slides/ppt4/slide_31.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e17645c9f869ac2599dd8c77b3dec2166d8e61f051966e4cd3fc816dfb47709
+size 691838
diff --git a/slides/ppt4/slide_32.png b/slides/ppt4/slide_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d10b1ce01284ee3d6033bce84eae98854630422
--- /dev/null
+++ b/slides/ppt4/slide_32.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f92861c77d01a90d7b1070e15ba8ba684837e0d1f0b465980d8b58413c713dc6
+size 364527
diff --git a/slides/ppt4/slide_33.png b/slides/ppt4/slide_33.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf7f6dcddd3c48053a176cb5b4eb5073db02ad3a
--- /dev/null
+++ b/slides/ppt4/slide_33.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:645f86e900f07110cc4cf0f956e27b5bdfd7ff1cd2f23fea3f1ec1d602168ca2
+size 328202
diff --git a/slides/ppt4/slide_34.png b/slides/ppt4/slide_34.png
new file mode 100644
index 0000000000000000000000000000000000000000..8892dd0ed529c75e209ac96419ef87006d4843cc
--- /dev/null
+++ b/slides/ppt4/slide_34.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:15400600696ac96ca674cb5d22ede1a4392abed1102749f08943cc87275e580b
+size 421431
diff --git a/slides/ppt4/slide_35.png b/slides/ppt4/slide_35.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e1bcc196c460ae500dc0ca6530919058d02103e
--- /dev/null
+++ b/slides/ppt4/slide_35.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:80ed2e513517f00ef3be5304fe55a0d9ff7fa2371f47f936194d06742310ac24
+size 387503
diff --git a/slides/ppt4/slide_36.png b/slides/ppt4/slide_36.png
new file mode 100644
index 0000000000000000000000000000000000000000..e43631d2f291ffe6c816e041d4dd77b1539a80eb
--- /dev/null
+++ b/slides/ppt4/slide_36.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6e3769aa665045ed76d2a32d578694b571c5cc4e6dcc44edd9ee31596eec08d
+size 665218
diff --git a/slides/ppt4/slide_37.png b/slides/ppt4/slide_37.png
new file mode 100644
index 0000000000000000000000000000000000000000..39893090ac3353b06823a1ccf41e1cc786b9c928
--- /dev/null
+++ b/slides/ppt4/slide_37.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fb79e67ee3b070f231698a235e2062e051366a49324d22a6cfbddcae21669ba
+size 465744
diff --git a/slides/ppt4/slide_38.png b/slides/ppt4/slide_38.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d1f674f7e626ca7f312128068d923b894e13088
--- /dev/null
+++ b/slides/ppt4/slide_38.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28eaf45143985a1022543f69a8f66be9dab488843c7d0eaa38717d55b4805f09
+size 1209816
diff --git a/slides/ppt4/slide_39.png b/slides/ppt4/slide_39.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5ebe7c4697088cb836019aa4fec57da2117eff3
--- /dev/null
+++ b/slides/ppt4/slide_39.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6a78db8b0ab212b22cf1af998a45e671721b90c55a7f3a5397e211feaa4aaf7
+size 481455
diff --git a/slides/ppt4/slide_4.png b/slides/ppt4/slide_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..5114312973c2be19cdefc3a291c791d815acae50
--- /dev/null
+++ b/slides/ppt4/slide_4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:171540c7d2475f8e0f16c8fc5c3f7ab8910630a075afbefddd3a9b711d1315cb
+size 688700
diff --git a/slides/ppt4/slide_40.png b/slides/ppt4/slide_40.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3934349b09977c9615e49e87efbddd00504ed02
--- /dev/null
+++ b/slides/ppt4/slide_40.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:acf3e4ba2e83baedba20fa6ef2f64cfb5299c3debac8c9af12de5ba54276d439
+size 937710
diff --git a/slides/ppt4/slide_41.png b/slides/ppt4/slide_41.png
new file mode 100644
index 0000000000000000000000000000000000000000..42a8ce6c2670cda594f04590d67e610dd56d5e30
--- /dev/null
+++ b/slides/ppt4/slide_41.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e01c41ed813a7300f7c00d275cfef41147fe39fee57f28d3fc032c7333f173d8
+size 610033
diff --git a/slides/ppt4/slide_42.png b/slides/ppt4/slide_42.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3c05d4c4d5d0d0206ab862f58d4a84684c7d12e
--- /dev/null
+++ b/slides/ppt4/slide_42.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dbd850b4cdadba362d3ef9a1854b9bdc7a2cfc593f05ba0cb8b1bc8a35f5cd22
+size 495092
diff --git a/slides/ppt4/slide_43.png b/slides/ppt4/slide_43.png
new file mode 100644
index 0000000000000000000000000000000000000000..71a61dea92a3002b79de4abd9bd937d57296e784
--- /dev/null
+++ b/slides/ppt4/slide_43.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba280c95348b0d549eacaa9146357f3e13bcb5da79c8a27dd9c59b5cb37f7cbc
+size 256679
diff --git a/slides/ppt4/slide_44.png b/slides/ppt4/slide_44.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8ba059e044894aec4bcc20687cde0d47cd640e4
--- /dev/null
+++ b/slides/ppt4/slide_44.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec93d407cb9e9004f110b08e679fff7e758f63cd22e203bb63c42f2830f65152
+size 295715
diff --git a/slides/ppt4/slide_45.png b/slides/ppt4/slide_45.png
new file mode 100644
index 0000000000000000000000000000000000000000..487e999814ccebacb7664befc3e5b7936ee51698
--- /dev/null
+++ b/slides/ppt4/slide_45.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3cfbd67a0e4cefd32bb547df9d614c90151dbff2194b431ac6b4621cb8713958
+size 452445
diff --git a/slides/ppt4/slide_46.png b/slides/ppt4/slide_46.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5e7843fce9cb9a47e4ec609f5680550d7ad3d68
--- /dev/null
+++ b/slides/ppt4/slide_46.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:985c58dfc47a23cc628a0e590c1d484a80bcdf51c68c41883ee765597b080349
+size 337973
diff --git a/slides/ppt4/slide_47.png b/slides/ppt4/slide_47.png
new file mode 100644
index 0000000000000000000000000000000000000000..bad1390bec734f52ecb2af33a6988a2de98c700a
--- /dev/null
+++ b/slides/ppt4/slide_47.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73720f607b4d235e51f6b31054fb6d728376bf2aabc4b933f2c9a24ae816a561
+size 970988
diff --git a/slides/ppt4/slide_48.png b/slides/ppt4/slide_48.png
new file mode 100644
index 0000000000000000000000000000000000000000..15da82f24c458d06ebd247cf3d7b811831917a12
--- /dev/null
+++ b/slides/ppt4/slide_48.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63b8692bd658a6ede6e6aac13e4bc1b244bc8ae2903d3bea012dca7e66ef3a20
+size 1067942
diff --git a/slides/ppt4/slide_49.png b/slides/ppt4/slide_49.png
new file mode 100644
index 0000000000000000000000000000000000000000..6390a4d2a6a878800c5ec177fae9d71bd48376fb
--- /dev/null
+++ b/slides/ppt4/slide_49.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bd62284c341e3fccdcdb9cb1a6dd20af3202965baef20bf631b5b2c661e7d6e
+size 763316
diff --git a/slides/ppt4/slide_5.png b/slides/ppt4/slide_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..df73f2062c5bad63f540e98820df6933c3489bf6
--- /dev/null
+++ b/slides/ppt4/slide_5.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f78e196cfd347b7d35a04c4b1f1ef9b46c10042f89a1edace22e4d1e20e22553
+size 340188
diff --git a/slides/ppt4/slide_50.png b/slides/ppt4/slide_50.png
new file mode 100644
index 0000000000000000000000000000000000000000..dcb29cea6f62e6658339ad8b8a02a2eb85cb193b
--- /dev/null
+++ b/slides/ppt4/slide_50.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:316e9bbe4c08fe57191a905dbc94934fb48f03ab0c712e6436075ece1a088a67
+size 1577294
diff --git a/slides/ppt4/slide_6.png b/slides/ppt4/slide_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f7e785df338b1d687abc1f74cb488c35137ec6f
--- /dev/null
+++ b/slides/ppt4/slide_6.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b073d4822e30e5d09e5f2fcb45ccb69a2a4b88b7a5df1705ee341f235e6288f
+size 513540
diff --git a/slides/ppt4/slide_7.png b/slides/ppt4/slide_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..59ceaeab82933c647a3535052af62ec31b9b7e13
--- /dev/null
+++ b/slides/ppt4/slide_7.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:854a6e5c55781123fa574f9bc330fd89954a297723ba055d21e9d9ad0f517287
+size 467055
diff --git a/slides/ppt4/slide_8.png b/slides/ppt4/slide_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..84dc56a5916bc1e5f9c82904f4e4fb15a5619a88
--- /dev/null
+++ b/slides/ppt4/slide_8.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:569fdeea4a83adbd52a2102080eaee94f0a29acb165efd6d09e7076aec29e600
+size 769708
diff --git a/slides/ppt4/slide_9.png b/slides/ppt4/slide_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..161d95738a8c766c31522527683adc25e2a86543
--- /dev/null
+++ b/slides/ppt4/slide_9.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:70701a989ccd7038fb3228449205aca53a3b1b7deb6b94eab498d1d8d6eb31db
+size 1221243
diff --git a/slides_data.js b/slides_data.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee10fcab23a75aaec33d3e000a1323042a82a894
--- /dev/null
+++ b/slides_data.js
@@ -0,0 +1,1905 @@
+const slidesData = [
+ {
+ "id": "ppt1",
+ "title": "Real-Time Seismic Data Processing and Monitoring at CWA: Current Status and Future Directions",
+ "slidesCount": 26,
+ "slides": [
+ {
+ "slideNumber": 1,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-Time Seismic Data Processing and Monitoring at CWA Current Status and Future Directions",
+ "Seismological Center, Central Weather Administration, Taiwan",
+ "2025.05.29 @ JPGU",
+ "Da-Yi Chen, Guan-Yi Song, Yu-Hsuan Chang",
+ "PPT file is available here."
+ ],
+ "image": "slides/ppt1/slide_1.png"
+ },
+ {
+ "slideNumber": 2,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Comprehensive Seismic Monitoring Infrastructure",
+ "Open-source software : Earthworm and Seiscomp",
+ "Dynamic Real-Time Monitoring via Grafana",
+ "Summary",
+ "Contents"
+ ],
+ "image": "slides/ppt1/slide_2.png"
+ },
+ {
+ "slideNumber": 3,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Seismological Center",
+ "About 60 people working in the seismological center"
+ ],
+ "image": "slides/ppt1/slide_3.png"
+ },
+ {
+ "slideNumber": 4,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Earthquake Monitoring in CWA",
+ "Our team of approximately 10 staff provides 24/7 coverage, with three individuals on each shift."
+ ],
+ "image": "slides/ppt1/slide_4.png"
+ },
+ {
+ "slideNumber": 5,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Earthquake Monitoring in CWA",
+ "news, seismic waveforms, observed intensities, and disseminations of the earthquake early warnings"
+ ],
+ "image": "slides/ppt1/slide_5.png"
+ },
+ {
+ "slideNumber": 6,
+ "title": "",
+ "text": [
+ "‹#›",
+ "CWA Seismic Network"
+ ],
+ "image": "slides/ppt1/slide_6.png"
+ },
+ {
+ "slideNumber": 7,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Seismic Monitoring infrastructure",
+ "First Layer",
+ "Second Layer",
+ "Third Layer",
+ "Field Stations",
+ "or",
+ "Institutes"
+ ],
+ "image": "slides/ppt1/slide_7.png"
+ },
+ {
+ "slideNumber": 8,
+ "title": "",
+ "text": [
+ "‹#›",
+ "For Earthquake Early Warning System",
+ "Total 632 real-time stations"
+ ],
+ "image": "slides/ppt1/slide_8.png"
+ },
+ {
+ "slideNumber": 9,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Open-source Earthquake Monitoring software",
+ "Earthworm",
+ "Open-source system for real-time seismic data.",
+ "Modular design, highly customizable for networks.",
+ "Global standard for earthquake monitoring.",
+ "USGS developed, widely used globally.",
+ "Robust, real-time processing and alerts.",
+ "Modern, open-source seismic data platform.",
+ "Integrated workflow: acquisition to alerts.",
+ "Advanced algorithms for precise earthquake processing.",
+ "Intuitive GUIs streamline analyst review.",
+ "Global standard for real-time monitoring."
+ ],
+ "image": "slides/ppt1/slide_9.png"
+ },
+ {
+ "slideNumber": 10,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Open-source Earthquake Monitoring software",
+ "Earthworm"
+ ],
+ "image": "slides/ppt1/slide_10.png"
+ },
+ {
+ "slideNumber": 11,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Dive into the First Layer",
+ "Field",
+ "Stations",
+ "RING",
+ "MSEED RING",
+ "Export",
+ "Second",
+ "Layer",
+ "NAS",
+ "tbuf2mseed",
+ "mseedarchiver",
+ "shared memory",
+ "shared memory",
+ "Using Earthworm software to integrate and archive data"
+ ],
+ "image": "slides/ppt1/slide_11.png"
+ },
+ {
+ "slideNumber": 12,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Dive into the Earthquake Early Warning System",
+ "Earthworm Based Earthquake Alert Reporting (eBEAR) system",
+ "CWA EEW System is available in Docker Hub :",
+ "docker pull cwadayi/earthworm_ubuntu22.04_eew:v1"
+ ],
+ "image": "slides/ppt1/slide_12.png"
+ },
+ {
+ "slideNumber": 13,
+ "title": "",
+ "text": [
+ "‹#›",
+ "A case of the M6.4 Dapu Earthquake",
+ "2025, January 21st"
+ ],
+ "image": "slides/ppt1/slide_13.png"
+ },
+ {
+ "slideNumber": 14,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time observed intensities for alert issuance",
+ "2024, April 3rd",
+ "First EEW alert",
+ "Second EEW alert",
+ "A case of the M7.2 Hualien Earthquake"
+ ],
+ "image": "slides/ppt1/slide_14.png"
+ },
+ {
+ "slideNumber": 15,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring in Seiscomp",
+ "Map view of seismicity",
+ "Manual Picking",
+ "Data Access"
+ ],
+ "image": "slides/ppt1/slide_15.png"
+ },
+ {
+ "slideNumber": 16,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring in Seiscomp",
+ "Check travel time curves and residuals of stations",
+ "CWA Seiscomp is available in Docker Hub :",
+ "docker pull cwadayi/seiscomp_ubuntu22.04"
+ ],
+ "image": "slides/ppt1/slide_16.png"
+ },
+ {
+ "slideNumber": 17,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring via Grafana",
+ "Open-source platform for data visualization.",
+ "Create dynamic dashboards from many sources.",
+ "Supports diverse databases and data types.",
+ "Real-time monitoring of metrics and logs.",
+ "Customizable panels and query builders.",
+ "Alerting capabilities for threshold breaches.",
+ "Interactive graphs and data exploration.",
+ "Community-driven, highly extensible.",
+ "Visualize time-series and operational data.",
+ "Enhances observability across systems."
+ ],
+ "image": "slides/ppt1/slide_17.png"
+ },
+ {
+ "slideNumber": 18,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring via Grafana",
+ "Using pressure gauge to monitoring wave height",
+ "CWA OBS network"
+ ],
+ "image": "slides/ppt1/slide_18.png"
+ },
+ {
+ "slideNumber": 19,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring via Grafana",
+ "Monitoring data latency"
+ ],
+ "image": "slides/ppt1/slide_19.png"
+ },
+ {
+ "slideNumber": 20,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring via Grafana",
+ "Monitoring data availability"
+ ],
+ "image": "slides/ppt1/slide_20.png"
+ },
+ {
+ "slideNumber": 21,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring via Grafana",
+ "Monitoring disseminations of earthquake early warnings"
+ ],
+ "image": "slides/ppt1/slide_21.png"
+ },
+ {
+ "slideNumber": 22,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Real-time Monitoring via Grafana",
+ "Monitoring seismic waveforms for a specific station"
+ ],
+ "image": "slides/ppt1/slide_22.png"
+ },
+ {
+ "slideNumber": 23,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Large Language Model for EEW",
+ "Training large language model by using historical data"
+ ],
+ "image": "slides/ppt1/slide_23.png"
+ },
+ {
+ "slideNumber": 24,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Global Collaboration and Data Access",
+ "Current continuous seismic waveforms will be available after 15 minutes"
+ ],
+ "image": "slides/ppt1/slide_24.png"
+ },
+ {
+ "slideNumber": 25,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Summary",
+ "Robust Monitoring Infrastructure: CWA operates a comprehensive, 24/7 seismic network across Taiwan",
+ "Real-Time Processing Excellence: Leveraging Earthworm and SeisComP software",
+ "Advanced Observability with Grafana: Grafana dashboards provide dynamic, real-time visualization of system status, data latency, and earthquake warning dissemination, enhancing operational awareness"
+ ],
+ "image": "slides/ppt1/slide_25.png"
+ },
+ {
+ "slideNumber": 26,
+ "title": "",
+ "text": [
+ "‹#›",
+ "Thank you for your listening",
+ "PPT file is available here.",
+ "‹#›"
+ ],
+ "image": "slides/ppt1/slide_26.png"
+ }
+ ]
+ },
+ {
+ "id": "ppt2",
+ "title": "2026年5月 地震預警系統報告",
+ "slidesCount": 17,
+ "slides": [
+ {
+ "slideNumber": 1,
+ "title": "",
+ "text": [
+ "2026年5月 地震預警系統報告",
+ "報告人: 林育謙"
+ ],
+ "image": "slides/ppt2/slide_1.png"
+ },
+ {
+ "slideNumber": 2,
+ "title": "",
+ "text": [
+ "5月中央氣象署強震即時警報系統(EEW)效能統計表"
+ ],
+ "image": "slides/ppt2/slide_2.png"
+ },
+ {
+ "slideNumber": 3,
+ "title": "",
+ "text": [
+ "PWS發布情形",
+ "115年5月1日 規模6.1臺灣東部海域地震",
+ "第1報 發布範圍",
+ "第2報 發布範圍"
+ ],
+ "image": "slides/ppt2/slide_3.png"
+ },
+ {
+ "slideNumber": 4,
+ "title": "",
+ "text": [
+ "案例探討",
+ "第一報預估震度",
+ "觀測震度",
+ "第一報: 18.5秒/幾何中心法/預估規模5.0",
+ "115年5月1日 規模6.1臺灣東部海域地震",
+ "預估減觀測震度"
+ ],
+ "image": "slides/ppt2/slide_4.png"
+ },
+ {
+ "slideNumber": 5,
+ "title": "",
+ "text": [
+ "震度正負1級準確度 80%",
+ "案例探討",
+ "5/1 規模6.1臺灣東部海域地震",
+ "第一報: 18.5秒/幾何中心法/預估規模5.0"
+ ],
+ "image": "slides/ppt2/slide_5.png"
+ },
+ {
+ "slideNumber": 6,
+ "title": "",
+ "text": [
+ "PWS發布情形",
+ "115年5月12日 規模5.6臺灣東部海域地震",
+ "第1報 發布範圍"
+ ],
+ "image": "slides/ppt2/slide_6.png"
+ },
+ {
+ "slideNumber": 7,
+ "title": "",
+ "text": [
+ "案例探討",
+ "第一報預估震度",
+ "觀測震度",
+ "第一報: 9.7秒/幾何中心法/預估規模5.3",
+ "115年5月12日 規模5.6臺灣東部海域地震",
+ "預估減觀測震度"
+ ],
+ "image": "slides/ppt2/slide_7.png"
+ },
+ {
+ "slideNumber": 8,
+ "title": "",
+ "text": [
+ "震度正負1級準確度 95%",
+ "案例探討",
+ "5/12 規模5.6臺灣東部海域地震",
+ "第一報: 9.7秒/幾何中心法/預估規模5.3"
+ ],
+ "image": "slides/ppt2/slide_8.png"
+ },
+ {
+ "slideNumber": 9,
+ "title": "",
+ "text": [
+ "PWS發布情形",
+ "115年5月17日 規模5.1臺灣東部海域地震",
+ "第1報 發布範圍",
+ "第2報 發布範圍",
+ "第3報 發布範圍"
+ ],
+ "image": "slides/ppt2/slide_9.png"
+ },
+ {
+ "slideNumber": 10,
+ "title": "",
+ "text": [
+ "案例探討",
+ "第一報預估震度",
+ "觀測震度",
+ "第一報: 11.9秒/幾何中心法/預估規模5.0",
+ "115年5月17日 規模5.1臺灣南投埔里地震",
+ "預估減觀測震度"
+ ],
+ "image": "slides/ppt2/slide_10.png"
+ },
+ {
+ "slideNumber": 11,
+ "title": "",
+ "text": [
+ "震度正負1級準確度 85%",
+ "案例探討",
+ "5/17 規模5.1臺灣東部海域地震",
+ "第一報: 11.9秒/幾何中心法/預估規模5.0"
+ ],
+ "image": "slides/ppt2/slide_11.png"
+ },
+ {
+ "slideNumber": 12,
+ "title": "",
+ "text": [
+ "網頁版面簡介",
+ "地震基本資訊展示",
+ "地震預警解統整表格",
+ "應用圖資:",
+ "預警震央地圖 / 算解誤差 / 測站觸發率等",
+ "選擇地震 - 表格資料同步",
+ "地震報告"
+ ],
+ "image": "slides/ppt2/slide_12.png"
+ },
+ {
+ "slideNumber": 13,
+ "title": "",
+ "text": [
+ "前月範例:0501東北外海地震M6.1"
+ ],
+ "image": "slides/ppt2/slide_13.png"
+ },
+ {
+ "slideNumber": 14,
+ "title": "",
+ "text": [
+ "Part2. 分析:預警結果 / 地震報告(P file)比對",
+ "Part3. 應用:應變地圖 (最快解解算完後S波到達時間)",
+ "應變盲區:最快解解算花費時間 * S波平均波速(3.5km/s)"
+ ],
+ "image": "slides/ppt2/slide_14.png"
+ },
+ {
+ "slideNumber": 15,
+ "title": "",
+ "text": [
+ "Part4. 應用:測站觸發率",
+ "(測站列表重複計算共站,故觸發比率偏低)",
+ "以該解內 最遠測站 與 速報震央 為半徑做圓,",
+ "尋找該圓內所有測站的測站觸發率"
+ ],
+ "image": "slides/ppt2/slide_15.png"
+ },
+ {
+ "slideNumber": 16,
+ "title": "",
+ "text": [
+ "16",
+ "Part5. 應用:預估震度",
+ "第1報 發布範圍",
+ "第2報 發布範圍"
+ ],
+ "image": "slides/ppt2/slide_16.png"
+ },
+ {
+ "slideNumber": 17,
+ "title": "",
+ "text": [
+ "5月地震預警時效最快約9.7秒。",
+ "5月預警產品對外發布次數,PWS 6次、TV 6次,APP及中小學軟體11次。",
+ "總結"
+ ],
+ "image": "slides/ppt2/slide_17.png"
+ }
+ ]
+ },
+ {
+ "id": "ppt3",
+ "title": "AI 代理群與大型語言模型在次世代地震測報之整合與應用",
+ "slidesCount": 71,
+ "slides": [
+ {
+ "slideNumber": 1,
+ "title": "AI 代理群與大型語言模型在次世代地震測報之整合與應用",
+ "text": [
+ "陳達毅 科長",
+ "中央氣象署 地震測報中心",
+ "2026年臺北市立大學資訊科學系演講"
+ ],
+ "image": "slides/ppt3/slide_1.png"
+ },
+ {
+ "slideNumber": 2,
+ "title": "在地震中心工作面臨的挑戰",
+ "text": [
+ "2"
+ ],
+ "image": "slides/ppt3/slide_2.png"
+ },
+ {
+ "slideNumber": 3,
+ "title": "競速開始",
+ "text": [
+ "3",
+ "1999.9.21集集地震",
+ "2024.4.3花蓮地震"
+ ],
+ "image": "slides/ppt3/slide_3.png"
+ },
+ {
+ "slideNumber": 4,
+ "title": "臺灣的地震環境與風險 – 過去10年災害地震",
+ "text": [
+ "4",
+ "臺南維冠大樓 (自由時報)",
+ "2016/2/6 M6.6美濃地震(7級)",
+ "花蓮統帥飯店 (中央通訊社)",
+ "2018/2/6 M6.2花蓮地震(7級)",
+ "2024/4/3 M7.1花蓮地震(6強)",
+ "2022/9/18 M6.8池上地震(6強)",
+ "東里車站鐵道 (經濟部地礦中心)",
+ "臺南市楠西國小 (公視新聞網)",
+ "臺北市大樓 (端傳媒)",
+ "花蓮天王星大樓 (自由時報)",
+ "621人員傷亡、749戶房屋損失",
+ "308人員傷亡、 195戶房屋損失",
+ "108人員傷亡、 34戶房屋損失",
+ "1069人員傷亡、207戶房屋損失",
+ "2025/1/21 M6.4大埔地震(6弱)",
+ "2019/4/18 M6.3花蓮地震(7級)",
+ "29人員傷亡",
+ "1810戶房屋損失"
+ ],
+ "image": "slides/ppt3/slide_4.png"
+ },
+ {
+ "slideNumber": 5,
+ "title": "臺灣的地震環境與風險",
+ "text": [
+ "5",
+ "菲律賓海板塊與歐亞大陸板塊每年約以7至8公分的速度聚合,兩板塊持續擠壓碰撞導致臺灣地震頻繁發生。",
+ "臺灣東部海域菲律賓海板塊向北隱沒到歐亞大陸板塊下,南部海域歐亞大陸板塊向東隱沒到菲律賓海板塊下。"
+ ],
+ "image": "slides/ppt3/slide_5.png"
+ },
+ {
+ "slideNumber": 6,
+ "title": "臺灣的地震環境與風險",
+ "text": [
+ "6",
+ "1900年以來共發生7次大規模災害地震",
+ "(罹難百人以上) (規模以ML表示)",
+ "罹難人數",
+ "❶",
+ "❷",
+ "❸",
+ "❹",
+ "❺",
+ "❻",
+ "❼",
+ "每天 100個地震",
+ "每年 100個顯著有感地震",
+ "每30~40年 1個大規模災害性地震"
+ ],
+ "image": "slides/ppt3/slide_6.png"
+ },
+ {
+ "slideNumber": 7,
+ "title": "近年來嘉南地區災害性地震",
+ "text": [
+ "7",
+ "2010, March, 4th M6.3 JiaXian Earthquake",
+ "(Wu et al., 2011)"
+ ],
+ "image": "slides/ppt3/slide_7.png"
+ },
+ {
+ "slideNumber": 8,
+ "title": "近年來嘉南地區災害性地震",
+ "text": [
+ "8",
+ "2016, February, 6th M6.6 Meinong Earthquake",
+ "(Kanamori et al., 2017)"
+ ],
+ "image": "slides/ppt3/slide_8.png"
+ },
+ {
+ "slideNumber": 9,
+ "title": "近年來嘉南地區災害性地震",
+ "text": [
+ "9",
+ "2025, January, 21st M6.4 Dapu Earthquake",
+ "(Su et al., 2025)"
+ ],
+ "image": "slides/ppt3/slide_9.png"
+ },
+ {
+ "slideNumber": 10,
+ "title": "地震測報中心工作環境",
+ "text": [
+ "10",
+ "員工人數約60人,24小時作業,全年無休"
+ ],
+ "image": "slides/ppt3/slide_10.png"
+ },
+ {
+ "slideNumber": 11,
+ "title": "地震測報中心工作環境",
+ "text": [
+ "11",
+ "員工人數約60人,24小時作業,全年無休"
+ ],
+ "image": "slides/ppt3/slide_11.png"
+ },
+ {
+ "slideNumber": 12,
+ "title": "地震監測畫面",
+ "text": [
+ "12",
+ "地震發生時值班同仁可以立刻掌握相關資訊"
+ ],
+ "image": "slides/ppt3/slide_12.png"
+ },
+ {
+ "slideNumber": 13,
+ "title": "即時地震觀測網-巨量資料",
+ "text": [
+ "13",
+ "約有3000個觀測頻道,每個頻道接收100H取樣率資料"
+ ],
+ "image": "slides/ppt3/slide_13.png"
+ },
+ {
+ "slideNumber": 14,
+ "title": "地震監測系統架構",
+ "text": [
+ "14"
+ ],
+ "image": "slides/ppt3/slide_14.png"
+ },
+ {
+ "slideNumber": 15,
+ "title": "地震預警系統架構",
+ "text": [
+ "15",
+ "CWA EEW System is available in Docker Hub :",
+ "docker pull cwadayi/earthworm_ubuntu22.04_eew:v1",
+ "透過獨立運作的模組與共享記憶體,建構地震資料處理系統"
+ ],
+ "image": "slides/ppt3/slide_15.png"
+ },
+ {
+ "slideNumber": 16,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "16",
+ "偵測地震P波 >> 分群 >> 地震定位 >> 計算規模 >> 預估各地震度",
+ "(Chen et al., 2019)"
+ ],
+ "image": "slides/ppt3/slide_16.png"
+ },
+ {
+ "slideNumber": 17,
+ "title": "",
+ "text": [
+ "17",
+ "科技極限與複合型災害 – 誤報",
+ "115年2月23日 馬來西亞婆羅洲外海地震導致誤發中小學EEW"
+ ],
+ "image": "slides/ppt3/slide_17.png"
+ },
+ {
+ "slideNumber": 18,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "18",
+ "採用機器學習模型預估震度"
+ ],
+ "image": "slides/ppt3/slide_18.png"
+ },
+ {
+ "slideNumber": 19,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "19",
+ "採用機器學習模型預估震度",
+ "Epicenter",
+ "Use 3 sec P wave",
+ "Have 15 sec leading time",
+ "Use an AI Model",
+ "Provide Warnings !!!"
+ ],
+ "image": "slides/ppt3/slide_19.png"
+ },
+ {
+ "slideNumber": 20,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "20",
+ "機器學習模型預估震度—實際案例"
+ ],
+ "image": "slides/ppt3/slide_20.png"
+ },
+ {
+ "slideNumber": 21,
+ "title": "利用Grafana建構監控系統",
+ "text": [
+ "21",
+ "Open-source platform for data visualization.",
+ "Create dynamic dashboards from many sources.",
+ "Supports diverse databases and data types.",
+ "Real-time monitoring of metrics and logs.",
+ "Customizable panels and query builders.",
+ "Alerting capabilities for threshold breaches.",
+ "Interactive graphs and data exploration.",
+ "Community-driven, highly extensible.",
+ "Visualize time-series and operational data.",
+ "Enhances observability across systems."
+ ],
+ "image": "slides/ppt3/slide_21.png"
+ },
+ {
+ "slideNumber": 22,
+ "title": "利用Grafana建構監控系統",
+ "text": [
+ "22",
+ "CWA OBS network",
+ "即時監控海底地震觀測網水壓計資料"
+ ],
+ "image": "slides/ppt3/slide_22.png"
+ },
+ {
+ "slideNumber": 23,
+ "title": "利用Grafana建構監控系統",
+ "text": [
+ "23",
+ "即時監控地震觀測站資料延遲狀況"
+ ],
+ "image": "slides/ppt3/slide_23.png"
+ },
+ {
+ "slideNumber": 24,
+ "title": "利用Grafana建構監控系統",
+ "text": [
+ "24",
+ "即時監控地震預警系統發布情形"
+ ],
+ "image": "slides/ppt3/slide_24.png"
+ },
+ {
+ "slideNumber": 25,
+ "title": "利用Grafana建構監控系統",
+ "text": [
+ "25",
+ "即時展示特定地震站地震波形"
+ ],
+ "image": "slides/ppt3/slide_25.png"
+ },
+ {
+ "slideNumber": 26,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "26",
+ "地震災害必須同時考慮強度與持續時間",
+ "First EEW alert",
+ "Second EEW alert",
+ "2024, April 3rd"
+ ],
+ "image": "slides/ppt3/slide_26.png"
+ },
+ {
+ "slideNumber": 27,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "27",
+ "利用地震發生初期的觀測震度分佈評估是否該發布警報"
+ ],
+ "image": "slides/ppt3/slide_27.png"
+ },
+ {
+ "slideNumber": 28,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "28",
+ "利用地震發生初期的觀測震度分佈評估是否該發布警報"
+ ],
+ "image": "slides/ppt3/slide_28.png"
+ },
+ {
+ "slideNumber": 29,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "29",
+ "利用地震發生初期的觀測震度分佈評估是否該發布警報"
+ ],
+ "image": "slides/ppt3/slide_29.png"
+ },
+ {
+ "slideNumber": 30,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "30"
+ ],
+ "image": "slides/ppt3/slide_30.png"
+ },
+ {
+ "slideNumber": 31,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "31"
+ ],
+ "image": "slides/ppt3/slide_31.png"
+ },
+ {
+ "slideNumber": 32,
+ "title": "",
+ "text": [
+ "基礎地震學研究發表",
+ "探討自監督學習在構建地震預訓練模型之有效性",
+ "大型地震模型 (LEM):\u000b 地震監測的新紀元"
+ ],
+ "image": "slides/ppt3/slide_32.png"
+ },
+ {
+ "slideNumber": 33,
+ "title": "",
+ "text": [
+ "傳統演算法於自動辨識地震波相上有大量參數需調整,且準確性難以提升",
+ "背景與緣起"
+ ],
+ "image": "slides/ppt3/slide_33.png"
+ },
+ {
+ "slideNumber": 34,
+ "title": "",
+ "text": [
+ "背景與緣起",
+ "近年來機器學習技術用於波相辨識有極大的突破"
+ ],
+ "image": "slides/ppt3/slide_34.png"
+ },
+ {
+ "slideNumber": 35,
+ "title": "",
+ "text": [
+ "背景與緣起",
+ "近年來機器學習技術用於波相辨識有極大的突破"
+ ],
+ "image": "slides/ppt3/slide_35.png"
+ },
+ {
+ "slideNumber": 36,
+ "title": "",
+ "text": [
+ "背景與緣起",
+ "近年來機器學習技術用於波相辨識有極大的突破"
+ ],
+ "image": "slides/ppt3/slide_36.png"
+ },
+ {
+ "slideNumber": 37,
+ "title": "",
+ "text": [
+ "資料來源",
+ "中央氣象署地震觀測網",
+ "CWBSN+ real-time TSMIP",
+ "TSMIP",
+ "(550)"
+ ],
+ "image": "slides/ppt3/slide_37.png"
+ },
+ {
+ "slideNumber": 38,
+ "title": "",
+ "text": [
+ "資料來源",
+ "中央氣象署地震觀測網",
+ "CWBSN+ real-time TSMIP",
+ "TSMIP",
+ "(550)"
+ ],
+ "image": "slides/ppt3/slide_38.png"
+ },
+ {
+ "slideNumber": 39,
+ "title": "",
+ "text": [
+ "資料來源與資料前處理",
+ "人工標記P波與S波到時"
+ ],
+ "image": "slides/ppt3/slide_39.png"
+ },
+ {
+ "slideNumber": 40,
+ "title": "",
+ "text": [
+ "資料來源與資料前處理",
+ "資料擴增,增加資料集的多樣性"
+ ],
+ "image": "slides/ppt3/slide_40.png"
+ },
+ {
+ "slideNumber": 41,
+ "title": "",
+ "text": [
+ "地震預警是災害減災的核心組件。隨著深度學習 (Deep Learning) 的發展,許多研究已成功應用神經網路於監測任務中。",
+ "傳統瓶頸: 深度學習需要海量標註數據。",
+ "資源浪費: 地震台站產生大量數據,但多數未經標註。",
+ "新技術: 自監督學習能從未標註資料中提取特徵。",
+ "地震監測的挑戰與機遇"
+ ],
+ "image": "slides/ppt3/slide_41.png"
+ },
+ {
+ "slideNumber": 42,
+ "title": "",
+ "text": [
+ "無標註學習",
+ "無需人工標記正確答案,直接利用數據本身的結構進行訓練。",
+ "通用表示",
+ "學習具有信息量且通用的特徵表示 (Representations)。",
+ "高效微調",
+ "只需少量任務導向數據即可達到 State-of-the-art 性能。",
+ "自監督學習 (SSL) 的核心優勢"
+ ],
+ "image": "slides/ppt3/slide_42.png"
+ },
+ {
+ "slideNumber": 43,
+ "title": "",
+ "text": [
+ "LEM 延續了 Wav2Vec 2.0 在語音處理上的成功,將其核心思想遷移至地震波形分析。",
+ "SeisWav2Vec 2.0 是一個基於對比學習 (Contrastive Learning) 的自監督模型,旨在區分正確樣本與干擾項。",
+ "從語音到地震:SeisWav2Vec 2.0"
+ ],
+ "image": "slides/ppt3/slide_43.png"
+ },
+ {
+ "slideNumber": 44,
+ "title": "",
+ "text": [
+ "特徵編碼器",
+ "將原始波形轉換為連續 Embedding,捕捉信號的局部結構。",
+ "上下文編碼器",
+ "內含 12 層 Transformer,引導向量學習全局上下文資訊。",
+ "遮罩與量化",
+ "離散化特徵並進行遮罩預測任務,模仿自然語言處理的學習方式。",
+ "核心組件:模型內部的運作邏輯"
+ ],
+ "image": "slides/ppt3/slide_44.png"
+ },
+ {
+ "slideNumber": 45,
+ "title": "",
+ "text": [
+ "工作流程:從預訓練到任務微調",
+ "在預訓練之後接上一個任務導向的 CNN 解碼器(Decoder),並採用三種策略 進行微調"
+ ],
+ "image": "slides/ppt3/slide_45.png"
+ },
+ {
+ "slideNumber": 46,
+ "title": "",
+ "text": [
+ "在預訓練之後接上一個任務導向的 CNN 解碼器(Decoder),並採用三種策略進行微調"
+ ],
+ "image": "slides/ppt3/slide_46.png"
+ },
+ {
+ "slideNumber": 47,
+ "title": "",
+ "text": [
+ "性能指標與效率提升預測"
+ ],
+ "image": "slides/ppt3/slide_47.png"
+ },
+ {
+ "slideNumber": 48,
+ "title": "",
+ "text": [
+ "MEETING ARTIFACTS",
+ "EEW 多代理協作\u000b 技術戰略簡報",
+ "整合地震監控、自動化派遣與科研分析的閉環系統"
+ ],
+ "image": "slides/ppt3/slide_48.png"
+ },
+ {
+ "slideNumber": 49,
+ "title": "",
+ "text": [
+ "Agent Matrix",
+ "核心代理角色與職責"
+ ],
+ "image": "slides/ppt3/slide_49.png"
+ },
+ {
+ "slideNumber": 50,
+ "title": "",
+ "text": [
+ "my_agent",
+ "預警總管\u000b 維護監控 Cron、異常推播與日報總結。",
+ "secondary",
+ "整合工程師\u000b 負責 Hermes 鏈路轉發與跨代理任務派遣。",
+ "seismo_agent",
+ "地震學助教\u000b 解析 .rep、效能延遲量測與自動繪圖。",
+ "seismo",
+ "科學研究員\u000b 專注地震數據建模、實驗設計與趨勢預測。",
+ "四位 Agent 的技術定位"
+ ],
+ "image": "slides/ppt3/slide_50.png"
+ },
+ {
+ "slideNumber": 51,
+ "title": "",
+ "text": [
+ "監控面 Cron: 每 30 分鐘執行健康檢查。",
+ "Log 判讀: 異常時推送最後 50 行日誌至 Telegram。",
+ "即時警報: 確保 EEW .rep 及時更新觸發分析鏈。",
+ "摘要統整: 負責所有 Agent 回報後的彙編。",
+ "my_agent: 監控與警報核心"
+ ],
+ "image": "slides/ppt3/slide_51.png"
+ },
+ {
+ "slideNumber": 52,
+ "title": "",
+ "text": [
+ "標準化架構",
+ "完成四個 Agent 的啟動腳本、模型設定與環境隔離。利用 delegate_task 實現跨 Agent 互叫機制。",
+ "路由分發",
+ "開發 seismic-conductor 模組,將結構化數據導向 seismo_agent 進行後續分析。",
+ "secondary_agent: 自動化調度中心"
+ ],
+ "image": "slides/ppt3/slide_52.png"
+ },
+ {
+ "slideNumber": 53,
+ "title": "",
+ "text": [
+ "seismo_agent:\u000b 數據科學流水線",
+ ".rep 轉換: 原始檔轉為 CSV/JSON。",
+ "圖表產出: 自動生成散佈與序列圖。",
+ "雙重存檔: 同步保存二進位原檔與數據。"
+ ],
+ "image": "slides/ppt3/slide_53.png"
+ },
+ {
+ "slideNumber": 54,
+ "title": "",
+ "text": [
+ "事件觸發",
+ "偵測 .rep 更新",
+ "數據派遣",
+ "指派跨節點任務",
+ "科學繪圖",
+ "生成事件散佈圖表",
+ "研究建模",
+ "進行長期趨勢預測",
+ "彙報發送",
+ "產出日報並推播",
+ "EEW 自動化閉環工作流"
+ ],
+ "image": "slides/ppt3/slide_54.png"
+ },
+ {
+ "slideNumber": 55,
+ "title": "",
+ "text": [
+ "資料來源:Seismo-Agent 延遲統計模組",
+ "處理階段耗時分析 (ms)"
+ ],
+ "image": "slides/ppt3/slide_55.png"
+ },
+ {
+ "slideNumber": 56,
+ "title": "",
+ "text": [
+ "科學研究驅動開發",
+ "針對「密集小震群」與「深部無感地震」建立統計模型。透過長期趨勢分析,為預警閾值提供動態調整建議。",
+ "定期產出科學驗證報告",
+ "學術論文數據鏈路追蹤",
+ "seismo: 科學研究與數據建模"
+ ],
+ "image": "slides/ppt3/slide_56.png"
+ },
+ {
+ "slideNumber": 57,
+ "title": "",
+ "text": [
+ "eew_report_daily 整合規劃"
+ ],
+ "image": "slides/ppt3/slide_57.png"
+ },
+ {
+ "slideNumber": 58,
+ "title": "",
+ "text": [],
+ "image": "slides/ppt3/slide_58.png"
+ },
+ {
+ "slideNumber": 59,
+ "title": "",
+ "text": [
+ "Hermes Agent 團隊會議",
+ "EEW 日常交辦會議記錄",
+ "日期:2026-06-03",
+ "主持:地震總管(主助理)",
+ "出席:my_agent、seismo、seismo_agent、secondary_agent"
+ ],
+ "image": "slides/ppt3/slide_59.png"
+ },
+ {
+ "slideNumber": 60,
+ "title": "",
+ "text": [
+ "會議議程",
+ "1️⃣ 確認各 agent 職責與角色",
+ "2️⃣ 每日 EEW 工作項目交辦",
+ "3️⃣ 回報機制與時程",
+ "4️⃣ 後續優化建議與行動方案",
+ "5️⃣ Q&A / 討論事項"
+ ],
+ "image": "slides/ppt3/slide_60.png"
+ },
+ {
+ "slideNumber": 61,
+ "title": "",
+ "text": [
+ "## Agenda 01|my_agent",
+ "my_agent — 地震預警總管",
+ "角色定位:監控 Earthworm EEW 流程、分析 .rep 事件、執行延遲量測並主動推播異常與摘要。",
+ "監控 Telegram 指令與異常告警,接收 eew_health 與 eew_report_daily 輸出。",
+ "判斷 .rep 事件是否需進一步處置(延遲異常、遺漏事件、格式錯誤)。",
+ "協調 seismo、seismo_agent、secondary_agent 的任務分派,並彙整每日摘要。",
+ "Agenda 第 1 項 / 共 4 項"
+ ],
+ "image": "slides/ppt3/slide_61.png"
+ },
+ {
+ "slideNumber": 62,
+ "title": "",
+ "text": [
+ "## Agenda 02|seismo",
+ "seismo — 地震資料處理工程師 (heartbeat / forwarder)",
+ "角色定位:負責 .rep 事件資料結構化轉出,維持 heartbeat loop 穩定運作。",
+ "從 /home/ubuntu/EEW/sysop/params/*.rep 擷取最新地震事件資料。",
+ "持續將 .rep 事件結構化轉出,供 my_agent 與 secondary_agent 後續處理。",
+ "維持 heartbeat loop 穩定運作,異常時回報 my_agent。",
+ "Agenda 第 2 項 / 共 4 項"
+ ],
+ "image": "slides/ppt3/slide_62.png"
+ },
+ {
+ "slideNumber": 63,
+ "title": "",
+ "text": [
+ "## Agenda 03|seismo_agent",
+ "seismo_agent — seismology assistant(原始設計)",
+ "角色定位:管理 EEW Docker 容器健康、恢復流程與 .rep 事件圖表。",
+ "管理 Earthworm EEW 容器健康檢查(eew_health cron)。",
+ "異常時執行 eew_fault_recovery.sh 自動處置",
+ "產出 .rep 事件圖表與日報摘要供參考。",
+ "Agenda 第 3 項 / 共 4 項"
+ ],
+ "image": "slides/ppt3/slide_63.png"
+ },
+ {
+ "slideNumber": 64,
+ "title": "",
+ "text": [
+ "## Agenda 04|secondary_agent",
+ "secondary_agent — 系統整合工程師",
+ "角色定位:在本地環境整合、測試並自動化 Hermes 流程,協調多代理間的訊息轉發與任務派遣。",
+ "彙整各 agent 回報,產生團隊每日工作記錄(artifacts/)。",
+ "負責 host-side 腳本維護(eew_fault_recovery.sh 等)。",
+ "統籌 cron 配置與 Telegram 推播流程,回報異常給 my_agent。",
+ "Agenda 第 4 項 / 共 4 項"
+ ],
+ "image": "slides/ppt3/slide_64.png"
+ },
+ {
+ "slideNumber": 65,
+ "title": "",
+ "text": [
+ "每日回報機制時程表"
+ ],
+ "image": "slides/ppt3/slide_65.png"
+ },
+ {
+ "slideNumber": 66,
+ "title": "",
+ "text": [
+ "後續行動方案"
+ ],
+ "image": "slides/ppt3/slide_66.png"
+ },
+ {
+ "slideNumber": 67,
+ "title": "",
+ "text": [
+ "67"
+ ],
+ "image": "slides/ppt3/slide_67.png"
+ },
+ {
+ "slideNumber": 68,
+ "title": "",
+ "text": [
+ "68"
+ ],
+ "image": "slides/ppt3/slide_68.png"
+ },
+ {
+ "slideNumber": 69,
+ "title": "",
+ "text": [
+ "AI × WORKFLOW · 2022 → 2026",
+ "用 2026 年人類思維的方式",
+ "去思考每一項工作",
+ "2022 – 2024",
+ "對話時代",
+ "問它、貼上、執行",
+ "ChatGPT 登場,寫程式、查指令、翻譯、寫英文信都用「問」的。",
+ "產出仍需自己手動複製、貼上、在本機執行。",
+ "AI 是助理,人類是手腳。",
+ "2024 – 2025",
+ "整合介面",
+ "Agent 進入 IDE",
+ "Cursor、Windsurf、GitHub Copilot Agent Mode 等 AI 原生編輯器登場。",
+ "能直接改多檔程式、執行終端機指令、跑測試、部署到雲端。",
+ "AI 開始接管「執行」那一段工作。",
+ "2025 – 2026",
+ "自主 Agent",
+ "任務交給它跑完",
+ "模型能力持續增強,事情愈做愈好。",
+ "專門化 agent 出現:OpenClaw(訊息介面)、Hermes Agent(自學技能)、Google Antigravity(agent-first IDE)。",
+ "Claude Code 等 CLI agent 功能愈來愈強大,能獨立完成多步驟任務。",
+ "BASE",
+ "VS Code ── 貫穿三個階段的基座平台:Copilot Chat 住在這、Cursor / Windsurf / Antigravity 都是它的 fork。",
+ "思維轉換:別再問「我要怎麼做這件事」,改問「要交給哪個 agent、怎麼驗收?」"
+ ],
+ "image": "slides/ppt3/slide_69.png"
+ },
+ {
+ "slideNumber": 70,
+ "title": "地生系同學作業分享-hugging face space",
+ "text": [
+ "70",
+ "https://huggingface.co/spaces/Sapphirejimmy/seismology_HW10"
+ ],
+ "image": "slides/ppt3/slide_70.png"
+ },
+ {
+ "slideNumber": 71,
+ "title": "",
+ "text": [
+ "71",
+ "謝謝聆聽,敬請指教",
+ "26"
+ ],
+ "image": "slides/ppt3/slide_71.png"
+ }
+ ]
+ },
+ {
+ "id": "ppt4",
+ "title": "臺灣地震預警系統的演進與發展 (嘉義災防宣導)",
+ "slidesCount": 50,
+ "slides": [
+ {
+ "slideNumber": 1,
+ "title": "臺灣地震預警系統的演進與發展",
+ "text": [
+ "陳達毅 科長",
+ "中央氣象署 地震測報中心",
+ "嘉義縣政府115度",
+ "天然災害停止上班及上課通報作業講習"
+ ],
+ "image": "slides/ppt4/slide_1.png"
+ },
+ {
+ "slideNumber": 2,
+ "title": "在地震中心工作面臨的挑戰",
+ "text": [
+ "2"
+ ],
+ "image": "slides/ppt4/slide_2.png"
+ },
+ {
+ "slideNumber": 3,
+ "title": "競速開始",
+ "text": [
+ "3",
+ "1999.9.21集集地震",
+ "2024.4.3花蓮地震"
+ ],
+ "image": "slides/ppt4/slide_3.png"
+ },
+ {
+ "slideNumber": 4,
+ "title": "競速開始",
+ "text": [
+ "4",
+ "2024.4.3花蓮地震"
+ ],
+ "image": "slides/ppt4/slide_4.png"
+ },
+ {
+ "slideNumber": 5,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "5",
+ "地震災害必須同時考慮強度與持續時間",
+ "First EEW alert",
+ "Second EEW alert",
+ "2024.4.3花蓮地震"
+ ],
+ "image": "slides/ppt4/slide_5.png"
+ },
+ {
+ "slideNumber": 6,
+ "title": "臺灣的地震環境與風險",
+ "text": [
+ "6",
+ "菲律賓海板塊與歐亞大陸板塊每年約以7至8公分的速度聚合,兩板塊持續擠壓碰撞導致臺灣地震頻繁發生。",
+ "臺灣東部海域菲律賓海板塊向北隱沒到歐亞大陸板塊下,南部海域歐亞大陸板塊向東隱沒到菲律賓海板塊下。"
+ ],
+ "image": "slides/ppt4/slide_6.png"
+ },
+ {
+ "slideNumber": 7,
+ "title": "臺灣的地震環境與風險-GNSS絕對水平速度場",
+ "text": [
+ "7",
+ "菲律賓海板塊與歐亞大陸板塊每年約以7至8公分的速度聚合,兩板塊持續擠壓碰撞導致臺灣地震頻繁發生。"
+ ],
+ "image": "slides/ppt4/slide_7.png"
+ },
+ {
+ "slideNumber": 8,
+ "title": "臺灣的地震環境與風險",
+ "text": [
+ "8",
+ "1900年以來共發生7次大規模災害地震",
+ "(罹難百人以上) (規模以ML表示)",
+ "罹難人數",
+ "❶",
+ "❷",
+ "❸",
+ "❹",
+ "❺",
+ "❻",
+ "❼",
+ "每天 100個地震",
+ "每年 100個顯著有感地震",
+ "每30~40年 1個大規模災害性地震"
+ ],
+ "image": "slides/ppt4/slide_8.png"
+ },
+ {
+ "slideNumber": 9,
+ "title": "臺灣的地震環境與風險",
+ "text": [
+ "9"
+ ],
+ "image": "slides/ppt4/slide_9.png"
+ },
+ {
+ "slideNumber": 10,
+ "title": "臺灣的地震環境與風險 – 過去10年災害地震",
+ "text": [
+ "10",
+ "臺南維冠大樓 (自由時報)",
+ "2016/2/6 M6.6美濃地震(7級)",
+ "花蓮統帥飯店 (中央通訊社)",
+ "2018/2/6 M6.2花蓮地震(7級)",
+ "2024/4/3 M7.1花蓮地震(6強)",
+ "2022/9/18 M6.8池上地震(6強)",
+ "東里車站鐵道 (經濟部地礦中心)",
+ "臺南市楠西國小 (公視新聞網)",
+ "臺北市大樓 (端傳媒)",
+ "花蓮天王星大樓 (自由時報)",
+ "621人員傷亡、749戶房屋損失",
+ "308人員傷亡、 195戶房屋損失",
+ "108人員傷亡、 34戶房屋損失",
+ "1069人員傷亡、207戶房屋損失",
+ "2025/1/21 M6.4大埔地震(6弱)",
+ "2019/4/18 M6.3花蓮地震(7級)",
+ "29人員傷亡",
+ "1810戶房屋損失"
+ ],
+ "image": "slides/ppt4/slide_10.png"
+ },
+ {
+ "slideNumber": 11,
+ "title": "近年來嘉南地區災害性地震",
+ "text": [
+ "11",
+ "2010, March, 4th M6.3 JiaXian Earthquake",
+ "(Wu et al., 2011)"
+ ],
+ "image": "slides/ppt4/slide_11.png"
+ },
+ {
+ "slideNumber": 12,
+ "title": "近年來嘉南地區災害性地震",
+ "text": [
+ "12",
+ "2016, February, 6th M6.6 Meinong Earthquake",
+ "(Kanamori et al., 2017)"
+ ],
+ "image": "slides/ppt4/slide_12.png"
+ },
+ {
+ "slideNumber": 13,
+ "title": "近年來嘉南地區災害性地震",
+ "text": [
+ "13",
+ "2025, January, 21st M6.4 Dapu Earthquake",
+ "(Su et al., 2025)"
+ ],
+ "image": "slides/ppt4/slide_13.png"
+ },
+ {
+ "slideNumber": 14,
+ "title": "地震測報中心工作環境",
+ "text": [
+ "14",
+ "員工人數約60人,24小時作業,全年無休"
+ ],
+ "image": "slides/ppt4/slide_14.png"
+ },
+ {
+ "slideNumber": 15,
+ "title": "地震測報中心工作環境",
+ "text": [
+ "15",
+ "員工人數約60人,24小時作業,全年無休"
+ ],
+ "image": "slides/ppt4/slide_15.png"
+ },
+ {
+ "slideNumber": 16,
+ "title": "地震監測畫面",
+ "text": [
+ "16",
+ "地震發生時值班同仁可以立刻掌握相關資訊"
+ ],
+ "image": "slides/ppt4/slide_16.png"
+ },
+ {
+ "slideNumber": 17,
+ "title": "即時地震觀測網-巨量資料",
+ "text": [
+ "17",
+ "約有3000個觀測頻道,每個頻道接收100H取樣率資料"
+ ],
+ "image": "slides/ppt4/slide_17.png"
+ },
+ {
+ "slideNumber": 18,
+ "title": "強震即時警報原理",
+ "text": [
+ "地震發生時會同時產生P波(縱波)與S波(橫波),其中P波傳播速度快震幅小,S波則相反,因此若能藉由P波所提供的資訊推估地震大小並且快速地發送訊息,就有機會於災害性震波抵達前收到地震警報,採取應變。"
+ ],
+ "image": "slides/ppt4/slide_18.png"
+ },
+ {
+ "slideNumber": 19,
+ "title": "強震即時警報發布條件與管道",
+ "text": [
+ "113年8月16日 07時35分55秒",
+ "規模6.3 地震位於東部海域",
+ "或規模6震度3級",
+ "地震對高樓層建築物的影響"
+ ],
+ "image": "slides/ppt4/slide_19.png"
+ },
+ {
+ "slideNumber": 20,
+ "title": "強震即時警報",
+ "text": [
+ "2024.4.3花蓮地震"
+ ],
+ "image": "slides/ppt4/slide_20.png"
+ },
+ {
+ "slideNumber": 21,
+ "title": "強震即時警報",
+ "text": [
+ "2024.4.3花蓮地震",
+ "國家級警報"
+ ],
+ "image": "slides/ppt4/slide_21.png"
+ },
+ {
+ "slideNumber": 22,
+ "title": "強震即時警報",
+ "text": [
+ "2024.4.3花蓮地震",
+ "網路推播",
+ "電視臺推播"
+ ],
+ "image": "slides/ppt4/slide_22.png"
+ },
+ {
+ "slideNumber": 23,
+ "title": "",
+ "text": [
+ "與地震波賽跑–警報發布時效從 102秒縮短至7秒",
+ "搶在地震波抵達之前,全力爭取每一秒寶貴的應變時間",
+ "臺灣歷經三十年的測站布建、演算法革新與加密觀測,警報發布時效已從 102 秒大幅壓縮至 7 秒,下一階段正邁向 AI 驅動的預警技術與現地型預警系統。",
+ "預警盲區大幅縮小",
+ "發布時效從10秒縮短至7秒,盲區半徑由 35 公里縮減至 25 公里,面積減少逾 50%。當都會區發生地震時,數百萬人口可以提早收到警報。"
+ ],
+ "image": "slides/ppt4/slide_23.png"
+ },
+ {
+ "slideNumber": 24,
+ "title": "以114年12月27日規模7.0地震為例",
+ "text": [
+ "24",
+ "國家級警報 第2報",
+ "國家級警報 第1報",
+ "0秒",
+ "20秒",
+ "40秒",
+ "60秒",
+ "80秒",
+ "0秒",
+ "20秒",
+ "40秒",
+ "60秒",
+ "80秒",
+ "科技極限與複合型災害 – 深震"
+ ],
+ "image": "slides/ppt4/slide_24.png"
+ },
+ {
+ "slideNumber": 25,
+ "title": "",
+ "text": [
+ "25",
+ "科技極限與複合型災害 – 誤報",
+ "111年9月18日 雲嘉南地區誤發國家級警報"
+ ],
+ "image": "slides/ppt4/slide_25.png"
+ },
+ {
+ "slideNumber": 26,
+ "title": "",
+ "text": [
+ "26",
+ "科技極限與複合型災害 – 誤報",
+ "111年9月18日 雲嘉南地區誤發國家級警報"
+ ],
+ "image": "slides/ppt4/slide_26.png"
+ },
+ {
+ "slideNumber": 27,
+ "title": "",
+ "text": [
+ "27",
+ "科技極限與複合型災害 – 誤報",
+ "短時間內發生兩個地震造成誤報"
+ ],
+ "image": "slides/ppt4/slide_27.png"
+ },
+ {
+ "slideNumber": 28,
+ "title": "",
+ "text": [
+ "28",
+ "科技極限與複合型災害 – 漏報",
+ "短時間內發生兩個地震造成漏報",
+ "兩個地震相差 4 秒,地震預警系統僅處理第一個地震,因此後面大的地震就漏掉了"
+ ],
+ "image": "slides/ppt4/slide_28.png"
+ },
+ {
+ "slideNumber": 29,
+ "title": "",
+ "text": [
+ "29",
+ "科技極限與複合型災害 – 漏報",
+ "短時間內發生兩個地震造成漏報",
+ "兩個地震相差 4 秒,地震預警系統僅處理第一個地震,因此後面大的地震就漏掉了"
+ ],
+ "image": "slides/ppt4/slide_29.png"
+ },
+ {
+ "slideNumber": 30,
+ "title": "科技極限與複合型災害 – 海嘯",
+ "text": [
+ "30",
+ "2004年南亞海嘯",
+ "(圖片來源:網路照片)",
+ "2011年日本海嘯",
+ "地震規模夠大",
+ "震源深度夠淺",
+ "海床垂直錯動",
+ "(圖片來源:網路照片)"
+ ],
+ "image": "slides/ppt4/slide_30.png"
+ },
+ {
+ "slideNumber": 31,
+ "title": "科技極限與複合型災害 – 臺灣海嘯威脅",
+ "text": [
+ "31",
+ "國家科學及技術委員會(2012)研究報告",
+ "臺灣東部 :琉球海溝",
+ "臺灣東南部:亞普海溝",
+ "臺灣南部 :馬尼拉海溝"
+ ],
+ "image": "slides/ppt4/slide_31.png"
+ },
+ {
+ "slideNumber": 32,
+ "title": "臺灣海嘯警戒分區劃分與預估波高分級",
+ "text": [
+ "海嘯警戒分區:",
+ "根據海嘯威脅可能性與周圍海底地形等因素,並輔以行政區域考量,劃分6個海嘯警戒分區",
+ "32",
+ "預估波高等級:",
+ "參考國際海嘯預警作業,以及臺灣海嘯觀測經驗,制訂為4級",
+ "(114年2月1日修正)",
+ "科技極限與複合型災害 – 海嘯警報作業"
+ ],
+ "image": "slides/ppt4/slide_32.png"
+ },
+ {
+ "slideNumber": 33,
+ "title": "",
+ "text": [
+ "33",
+ "年度+序號",
+ "警報報序",
+ "發布警報時間",
+ "說明海嘯地震資訊與提醒沿岸地區提高警戒",
+ "臺灣6個海嘯警戒分區",
+ "預估海嘯波到達時間",
+ "預估海嘯波波高和分級",
+ "海嘯地震資訊",
+ "發震時間",
+ "震央位置",
+ "震源深度",
+ "地震規模",
+ "資料來源",
+ "範例",
+ "科技極限與複合型災害 – 海嘯警報範例"
+ ],
+ "image": "slides/ppt4/slide_33.png"
+ },
+ {
+ "slideNumber": 34,
+ "title": "",
+ "text": [
+ "34",
+ "地震",
+ "2024/4/3 07:58:09",
+ "M7.2花蓮地震發生",
+ "海嘯警報第1報 (08:11)",
+ "海嘯警報第2報 (10:00)",
+ "海嘯警報解除報 (11:10)",
+ "地震後時間",
+ "波高與到時",
+ "模擬資料",
+ "氣象署潮位站",
+ "觀測數據",
+ "科技極限與複合型災害 – 海嘯警報實例"
+ ],
+ "image": "slides/ppt4/slide_34.png"
+ },
+ {
+ "slideNumber": 35,
+ "title": "",
+ "text": [
+ "35",
+ "科技極限與複合型災害 – 海嘯警報實例",
+ "M8.8",
+ "海嘯消息 (07:38)",
+ "海嘯警報解除(17:10)",
+ "地震後時間",
+ "海嘯消息(08:23)",
+ "海嘯警訊(09:12)",
+ "海嘯警報(11:40)",
+ "波高與到時",
+ "模擬資料",
+ "114年7月30日7時25分 堪察加半島東部外海 規模8.8地震",
+ "2025/7/30 07:25"
+ ],
+ "image": "slides/ppt4/slide_35.png"
+ },
+ {
+ "slideNumber": 36,
+ "title": "",
+ "text": [
+ "36",
+ "地震報告",
+ "網路推播",
+ "手機細胞廣播",
+ "電視台插播",
+ "App",
+ "臉書粉絲團",
+ "強震警報",
+ "氣象署官網",
+ "手機簡訊",
+ "LINE Notify",
+ "受限於傳輸能量限制,紅色標註管道僅提供特定使用者",
+ "震度速報",
+ "網路推播",
+ "掌握關鍵應變與整備 – 最後一哩路"
+ ],
+ "image": "slides/ppt4/slide_36.png"
+ },
+ {
+ "slideNumber": 37,
+ "title": "掌握關鍵應變與整備 – 直送防救災需求單位",
+ "text": [
+ "37",
+ "師生緊急庇護",
+ "地震 資訊",
+ "~4100所",
+ "高中小學",
+ "公路局、高公局",
+ "~40個",
+ "防救災單位",
+ "臺鐵、高鐵捷運",
+ "地震速報資訊直接發送單位超過 4500個",
+ "(教育部)",
+ "(公路局)",
+ "(臺鐵)",
+ "(NCDR)",
+ "國家防災日演練"
+ ],
+ "image": "slides/ppt4/slide_37.png"
+ },
+ {
+ "slideNumber": 38,
+ "title": "",
+ "text": [
+ "38",
+ "掌握關鍵應變與整備"
+ ],
+ "image": "slides/ppt4/slide_38.png"
+ },
+ {
+ "slideNumber": 39,
+ "title": "掌握關鍵應變與整備 - 防災教育宣導",
+ "text": [
+ "39"
+ ],
+ "image": "slides/ppt4/slide_39.png"
+ },
+ {
+ "slideNumber": 40,
+ "title": "掌握關鍵應變與整備 - 防災教育宣導",
+ "text": [
+ "40"
+ ],
+ "image": "slides/ppt4/slide_40.png"
+ },
+ {
+ "slideNumber": 41,
+ "title": "掌握關鍵應變與整備 - 防災教育宣導",
+ "text": [
+ "41"
+ ],
+ "image": "slides/ppt4/slide_41.png"
+ },
+ {
+ "slideNumber": 42,
+ "title": "– 以114年12月27日規模7.0地震為例,屏東縣竹田鄉履豐村 鄉下長輩沒手機,屏東青年自架「村里地震廣播預警系統」",
+ "text": [
+ "42",
+ "常見Q&A – 民間業者APP比較快收到警報?"
+ ],
+ "image": "slides/ppt4/slide_42.png"
+ },
+ {
+ "slideNumber": 43,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "43",
+ "採用機器學習模型預估震度"
+ ],
+ "image": "slides/ppt4/slide_43.png"
+ },
+ {
+ "slideNumber": 44,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "44",
+ "採用機器學習模型預估震度",
+ "Epicenter",
+ "Use 3 sec P wave",
+ "Have 15 sec leading time",
+ "Use an AI Model",
+ "Provide Warnings !!!"
+ ],
+ "image": "slides/ppt4/slide_44.png"
+ },
+ {
+ "slideNumber": 45,
+ "title": "地震預警系統演算邏輯",
+ "text": [
+ "45",
+ "機器學習模型預估震度—實際案例"
+ ],
+ "image": "slides/ppt4/slide_45.png"
+ },
+ {
+ "slideNumber": 46,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "46",
+ "地震災害必須同時考慮強度與持續時間",
+ "First EEW alert",
+ "Second EEW alert",
+ "2024, April 3rd"
+ ],
+ "image": "slides/ppt4/slide_46.png"
+ },
+ {
+ "slideNumber": 47,
+ "title": "利用即時逐秒觀測震度輔助地震預警系統",
+ "text": [
+ "47",
+ "利用地震發生初期的觀測震度分佈評估是否該發布警報"
+ ],
+ "image": "slides/ppt4/slide_47.png"
+ },
+ {
+ "slideNumber": 48,
+ "title": "結語 - 持續精進地震速警報效能",
+ "text": [
+ "48"
+ ],
+ "image": "slides/ppt4/slide_48.png"
+ },
+ {
+ "slideNumber": 49,
+ "title": "結語 - 持續加強公私協力合作",
+ "text": [
+ "49"
+ ],
+ "image": "slides/ppt4/slide_49.png"
+ },
+ {
+ "slideNumber": 50,
+ "title": "",
+ "text": [
+ "50",
+ "謝謝聆聽,敬請指教",
+ "26"
+ ],
+ "image": "slides/ppt4/slide_50.png"
+ }
+ ]
+ }
+];
+
+if (typeof module !== 'undefined' && module.exports) {
+ module.exports = slidesData;
+}