From 737f83cd5f3bd204d0a168ee490673a4b3d70585 Mon Sep 17 00:00:00 2001 From: landaiqing Date: Sat, 12 Jul 2025 22:14:35 +0800 Subject: [PATCH] :bulb: Add docs --- docs/changelog.html | 75 ++ docs/css/changelog.css | 312 ++++++++ docs/css/styles.css | 717 ++++++++++++++++++ docs/img/favicon.ico | Bin 0 -> 7019 bytes docs/img/logo.png | Bin 0 -> 7019 bytes docs/img/screenshot-dark.png | Bin 0 -> 48343 bytes docs/img/screenshot-light.png | Bin 0 -> 50087 bytes docs/index.html | 205 +++++ docs/js/changelog.js | 494 ++++++++++++ docs/js/script.js | 138 ++++ .../components/toolbar/DocumentSelector.vue | 23 +- 11 files changed, 1963 insertions(+), 1 deletion(-) create mode 100644 docs/changelog.html create mode 100644 docs/css/changelog.css create mode 100644 docs/css/styles.css create mode 100644 docs/img/favicon.ico create mode 100644 docs/img/logo.png create mode 100644 docs/img/screenshot-dark.png create mode 100644 docs/img/screenshot-light.png create mode 100644 docs/index.html create mode 100644 docs/js/changelog.js create mode 100644 docs/js/script.js diff --git a/docs/changelog.html b/docs/changelog.html new file mode 100644 index 0000000..53fc0cf --- /dev/null +++ b/docs/changelog.html @@ -0,0 +1,75 @@ + + + + + + VoidRaft - Changelog + + + + + + + + +
+ +
+
+

VoidRaft 更新日志

+
+ + +
+
+ +
+ + + + +
+
+

正在加载版本信息...

+
+ + +
+ +
+ + + +
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/docs/css/changelog.css b/docs/css/changelog.css new file mode 100644 index 0000000..5620b03 --- /dev/null +++ b/docs/css/changelog.css @@ -0,0 +1,312 @@ +/* 更新日志页面样式 */ +.nav-links { + margin-bottom: 30px; + display: flex; + gap: 15px; +} + +.loading-container { + text-align: center; + padding: 40px 0; + background-color: transparent; +} + +.loading-spinner { + border: 4px solid rgba(0, 0, 0, 0.1); + border-left-color: var(--primary-color); + border-radius: 50%; + width: 40px; + height: 40px; + animation: spin 1s linear infinite; + margin: 0 auto 20px; +} + +.theme-dark .loading-spinner { + border-color: rgba(255, 255, 255, 0.1); + border-left-color: var(--primary-color); +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.error-container { + text-align: center; + color: var(--error-color); + padding: 20px; + border: 2px dashed var(--error-color); + margin: 20px 0; + border-radius: 4px; + background-color: rgba(var(--card-bg-rgb), 0.7); +} + +.error-container i { + font-size: 24px; + margin-bottom: 10px; +} + +/* 更新日志容器 */ +.changelog-container { + display: none; + position: relative; + z-index: 1; +} + +.release { + margin-bottom: 40px; + border-left: 4px solid var(--primary-color); + padding-left: 20px; + background-color: rgba(var(--card-bg-rgb), 0.5); + padding: 15px 20px; + border-radius: 4px; +} + +.release-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 15px; +} + +.release-version { + font-size: 24px; + font-weight: bold; + color: var(--primary-color); +} + +.release-date { + color: var(--text-color); + opacity: 0.7; + font-size: 14px; +} + +.release-badge { + display: inline-block; + padding: 3px 8px; + border-radius: 12px; + font-size: 12px; + margin-left: 10px; + background-color: var(--primary-color); + color: #000; +} + +.release-badge.pre-release { + background-color: var(--warning-color); +} + +.release-description { + margin-bottom: 20px; + line-height: 1.6; +} + +.release-assets { + background-color: rgba(var(--light-bg-rgb), 0.7); + padding: 15px; + border-radius: 4px; + margin-top: 15px; +} + +.release-assets-title { + font-size: 16px; + margin-bottom: 10px; +} + +.asset-list { + list-style-type: none; + padding: 0; + margin: 0; +} + +.asset-item { + display: flex; + align-items: center; + padding: 8px 0; + border-bottom: 1px solid rgba(128, 128, 128, 0.2); +} + +.asset-item:last-child { + border-bottom: none; +} + +.asset-icon { + margin-right: 10px; + color: var(--accent-color); +} + +.asset-name { + flex-grow: 1; +} + +.asset-size { + font-size: 12px; + color: var(--text-color); + opacity: 0.7; +} + +/* 资源下载按钮 */ +.download-btn { + margin-left: 10px; + padding: 3px 10px; + background-color: var(--primary-color); + color: white; + border: none; + border-radius: 4px; + text-decoration: none; + font-size: 12px; + transition: all 0.2s ease; + display: inline-block; + text-align: center; +} + +.download-btn:hover { + background-color: var(--secondary-color); +} + +.markdown-content { + line-height: 1.8; + overflow-wrap: break-word; + background-color: transparent; +} + +.markdown-content h1, +.markdown-content h2, +.markdown-content h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +.markdown-content ul, +.markdown-content ol { + padding-left: 20px; + margin-bottom: 15px; +} + +.markdown-content code { + font-family: 'IBM Plex Mono', monospace; + background-color: rgba(128, 128, 128, 0.1); + padding: 2px 4px; + border-radius: 3px; + font-size: 90%; +} + +.markdown-content pre { + background-color: rgba(128, 128, 128, 0.1); + padding: 15px; + border-radius: 4px; + overflow-x: auto; + margin: 15px 0; +} + +.markdown-content pre code { + background-color: transparent; + padding: 0; +} + +.markdown-content a { + color: var(--primary-color); + text-decoration: none; +} + +.markdown-content a:hover { + text-decoration: underline; +} + +.data-source { + padding: 10px 15px; + margin-bottom: 20px; + background-color: rgba(var(--light-bg-rgb), 0.7); + border-radius: 4px; + font-size: 14px; + text-align: right; + opacity: 0.7; +} + +.data-source a { + color: var(--primary-color); + text-decoration: none; + font-weight: bold; +} + +.data-source a:hover { + text-decoration: underline; +} + +/* 移动设备响应式优化 */ +@media (max-width: 768px) { + .release-header { + flex-direction: column; + align-items: flex-start; + gap: 8px; + } + + .release-assets { + padding: 12px 8px; + } + + .asset-item { + flex-wrap: wrap; + padding: 12px 0; + position: relative; + } + + .asset-name { + width: 100%; + margin-bottom: 8px; + word-break: break-all; + } + + .asset-size { + margin-left: 25px; + } + + .download-btn { + margin-left: 10px; + padding: 5px 12px; + } +} + +@media (max-width: 480px) { + .release { + padding-left: 12px; + } + + .asset-item { + flex-direction: column; + align-items: flex-start; + } + + .asset-icon { + margin-bottom: 5px; + } + + .asset-size { + margin-left: 0; + margin-top: 5px; + } + + .download-btn { + margin-left: 0; + margin-top: 10px; + width: 100%; + text-align: center; + padding: 8px; + } + + .markdown-content pre { + padding: 10px; + margin: 10px 0; + } +} + +/* 确保日志页面页脚样式一致 */ +.footer { + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; +} + +.footer-text { + margin: 0 0 15px 0; +} \ No newline at end of file diff --git a/docs/css/styles.css b/docs/css/styles.css new file mode 100644 index 0000000..18d2914 --- /dev/null +++ b/docs/css/styles.css @@ -0,0 +1,717 @@ +@import url('https://fonts.googleapis.com/css2?family=Space+Mono&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&display=swap'); + +/* 浅色主题 */ +:root { + --bg-color: #fefefe; + --text-color: #000000; + --primary-color: #F08080; + --primary-color-rgb: 240, 128, 128; + --secondary-color: #ff006e; + --accent-color: #073B4C; + --card-bg: #ffffff; + --card-bg-rgb: 255, 255, 255; + --border-color: #000000; + --light-bg: #f0f0f0; + --light-bg-rgb: 240, 240, 240; + --shadow-color: rgba(240, 128, 128, 0.5); + --success-color: #27c93f; + --warning-color: #FFD166; + --error-color: #ff006e; + --info-color: #118ab2; + --code-bg: #ffffff; + --code-bg-rgb: 255, 255, 255; + --preview-header-bg: #f0f0f0; + --preview-header-bg-rgb: 240, 240, 240; + --grid-color-1: rgba(0, 0, 0, 0.08); + --grid-color-2: rgba(0, 0, 0, 0.05); + --header-title-color: #000000; +} + +/* 暗色主题变量 */ +.theme-dark { + --bg-color: #121212; + --text-color: #ffffff; + --primary-color: #F08080; + --primary-color-rgb: 240, 128, 128; + --secondary-color: #ff006e; + --accent-color: #118ab2; + --card-bg: #1e1e1e; + --card-bg-rgb: 30, 30, 30; + --border-color: #ffffff; + --light-bg: #2a2a2a; + --light-bg-rgb: 42, 42, 42; + --shadow-color: rgba(240, 128, 128, 0.5); + --success-color: #27c93f; + --warning-color: #FFD166; + --error-color: #ff006e; + --info-color: #118ab2; + --code-bg: #1e1e1e; + --code-bg-rgb: 30, 30, 30; + --preview-header-bg: #252526; + --preview-header-bg-rgb: 37, 37, 38; + --grid-color-1: rgba(255, 255, 255, 0.08); + --grid-color-2: rgba(255, 255, 255, 0.05); + --header-title-color: #000000; +} + +/* 主题切换和语言切换的过渡效果 */ +.theme-transition, +.theme-transition *, +.lang-transition, +.lang-transition * { + transition: all 0.3s ease !important; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +@keyframes gridMove { + 0% { + background-position: 0px 0px, 0px 0px, 0px 0px, 0px 0px; + } + 100% { + background-position: 80px 80px, 80px 80px, 20px 20px, 20px 20px; + } +} + +body { + background-color: var(--bg-color); + background-image: + linear-gradient(var(--grid-color-1) 1px, transparent 1px), + linear-gradient(90deg, var(--grid-color-1) 1px, transparent 1px), + linear-gradient(var(--grid-color-2) 0.5px, transparent 0.5px), + linear-gradient(90deg, var(--grid-color-2) 0.5px, transparent 0.5px); + background-size: 80px 80px, 80px 80px, 20px 20px, 20px 20px; + background-position: center; + animation: gridMove 40s linear infinite; + font-family: 'Space Mono', monospace; + color: var(--text-color); + line-height: 1.6; + padding: 20px; + transition: background-color 0.3s ease, color 0.3s ease; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; +} + +/* 卡片容器 */ +.card { + background-color: var(--card-bg); + background-image: + linear-gradient(var(--grid-color-1) 1px, transparent 1px), + linear-gradient(90deg, var(--grid-color-1) 1px, transparent 1px), + linear-gradient(var(--grid-color-2) 0.5px, transparent 0.5px), + linear-gradient(90deg, var(--grid-color-2) 0.5px, transparent 0.5px); + background-size: 80px 80px, 80px 80px, 20px 20px, 20px 20px; + background-position: center; + border: 4px solid var(--border-color); + box-shadow: 12px 12px 0 var(--shadow-color); + margin-bottom: 40px; + overflow: hidden; + transition: transform 0.3s ease, box-shadow 0.3s ease; + position: relative; + z-index: 10; +} + +.card:hover { + transform: translateY(-5px); + box-shadow: 16px 16px 0 var(--shadow-color); +} + +/* 卡片头部 */ +.card-header { + background-color: rgba(var(--primary-color-rgb), 0.9); + border-bottom: 4px solid var(--border-color); + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; + position: relative; + z-index: 1; +} + +.card-title { + font-size: 24px; + font-weight: bold; + margin: 0; + color: var(--header-title-color); +} + +.card-controls { + display: flex; + gap: 10px; +} + +.btn { + display: inline-block; + padding: 10px 20px; + background: var(--secondary-color); + color: #fff; + text-decoration: none; + font-weight: bold; + border: 3px solid var(--border-color); + box-shadow: 4px 4px 0 var(--shadow-color); + transition: all 0.2s ease; + cursor: pointer; + font-family: 'Space Mono', monospace; + font-size: 14px; +} + +.btn:hover { + background: var(--card-bg); + color: var(--primary-color); + border: 3px solid var(--primary-color); + box-shadow: none; +} + +.btn-secondary { + background: var(--light-bg); + color: var(--text-color); +} + +.btn-secondary:hover { + background: var(--card-bg); + color: var(--primary-color); + border: 3px solid var(--primary-color); +} + +/* 卡片内容 */ +.card-content { + padding: 30px; + position: relative; + z-index: 1; + background-color: rgba(var(--card-bg-rgb), 0.5); +} + +/* Logo区域 */ +.logo-container { + text-align: center; + margin-bottom: 40px; +} + +.logo-frame { + width: 150px; + height: 150px; + background: var(--card-bg); + border: 4px solid var(--border-color); + margin: 0 auto; + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 20px; +} + +.logo-image { + width: 130px; + height: 130px; + object-fit: contain; + border: 2px solid var(--border-color); +} + +.logo-text { + font-size: 32px; + font-weight: bold; + margin: 0; +} + +.tagline { + font-size: 16px; + margin: 10px 0 0; + color: var(--accent-color); +} + +/* 介绍区域 */ +.intro-box { + border: 2px dashed var(--border-color); + padding: 20px; + background-color: rgba(var(--light-bg-rgb), 0.7); + margin-bottom: 30px; + text-align: center; +} + +.intro-text { + font-size: 16px; + margin-bottom: 0; +} + +/* 按钮组 */ +.button-group { + display: flex; + justify-content: center; + gap: 20px; + margin: 30px 0; +} + +/* 特性网格 */ +.features-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 30px; + margin: 40px 0; +} + +/* 特性卡片 */ +.feature-card { + background-color: rgba(var(--card-bg-rgb), 0.8); + border: 3px solid var(--border-color); + box-shadow: 5px 5px 0 var(--shadow-color); + padding: 20px; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.feature-card:hover { + transform: translateY(-3px); + box-shadow: 7px 7px 0 var(--shadow-color); +} + +.feature-icon { + font-size: 24px; + margin-bottom: 15px; + color: var(--secondary-color); +} + +.feature-title { + font-size: 18px; + font-weight: bold; + margin-bottom: 10px; +} + +.feature-desc { + font-size: 14px; +} + +/* 预览区域 */ +.preview-container { + display: flex; + flex-wrap: wrap; + gap: 20px; + margin: 30px 0; +} + +@media (max-width: 768px) { + .preview-container { + grid-template-columns: 1fr; + } +} + +/* 预览窗口 */ +.preview-window { + border: 3px solid var(--border-color); + border-radius: 8px; + overflow: hidden; + margin: 10px; + flex: 1; + min-width: 300px; + background-color: rgba(var(--card-bg-rgb), 0.7); + display: flex; + flex-direction: column; + box-shadow: 5px 5px 0 var(--shadow-color); +} + +/* 预览头部 */ +.preview-header { + background-color: rgba(var(--preview-header-bg-rgb), 0.9); + padding: 10px; + display: flex; + align-items: center; + border-bottom: 2px solid var(--border-color); +} + +.preview-controls { + display: flex; + gap: 6px; + margin-right: 15px; +} + +.preview-btn { + width: 12px; + height: 12px; + border-radius: 50%; + border: 0.5px solid rgba(0, 0, 0, 0.1); +} + +.preview-btn:nth-child(1) { + background-color: #ff5f56; +} + +.preview-btn:nth-child(2) { + background-color: #ffbd2e; +} + +.preview-btn:nth-child(3) { + background-color: #27c93f; +} + +.preview-title { + font-size: 13px; + opacity: 0.8; + color: var(--text-color); + font-weight: normal; +} + +/* 预览内容 */ +.preview-content { + padding: 15px; + flex-grow: 1; + overflow: auto; + background-color: rgba(var(--code-bg-rgb), 0.5); +} + +/* 代码块容器 */ +.code-block-wrapper { + background-color: rgba(var(--code-bg-rgb), 0.8); + border: 2px solid var(--border-color); + border-radius: 4px; + overflow: hidden; + margin-bottom: 8px; +} + +/* 块头部 */ +.block-header { + background-color: rgba(var(--light-bg-rgb), 0.8); + padding: 8px 12px; + border-bottom: 2px solid var(--border-color); + display: flex; + justify-content: space-between; + align-items: center; +} + +.block-language { + color: rgba(128, 128, 128, 0.8); + font-family: 'IBM Plex Mono', monospace; + display: flex; + align-items: center; +} + +.block-language::before { + content: ''; + display: inline-block; + width: 12px; + height: 12px; + margin-right: 5px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23888'%3E%3Cpath d='M9.7,16.7L5.3,12.3C4.9,11.9 4.9,11.1 5.3,10.7C5.7,10.3 6.3,10.3 6.7,10.7L10.5,14.5L17.3,7.7C17.7,7.3 18.3,7.3 18.7,7.7C19.1,8.1 19.1,8.7 18.7,9.1L11.3,16.7C10.9,17.1 10.1,17.1 9.7,16.7Z'/%3E%3C/svg%3E"); + background-size: contain; + background-repeat: no-repeat; +} + +.code-block { + font-family: 'IBM Plex Mono', monospace; + font-size: 13px; + line-height: 1.6; + margin: 0; + white-space: pre; + tab-size: 4; + -moz-tab-size: 4; + padding: 10px; +} + +.theme-dark .code-block-wrapper { + border-color: rgba(255, 255, 255, 0.15); +} + +.theme-dark .block-header { + background-color: rgba(255, 255, 255, 0.05); + border-color: rgba(255, 255, 255, 0.15); +} + +.theme-dark .block-language { + color: rgba(255, 255, 255, 0.6); +} + +.theme-dark .block-language::before { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23aaa'%3E%3Cpath d='M9.7,16.7L5.3,12.3C4.9,11.9 4.9,11.1 5.3,10.7C5.7,10.3 6.3,10.3 6.7,10.7L10.5,14.5L17.3,7.7C17.7,7.3 18.3,7.3 18.7,7.7C19.1,8.1 19.1,8.7 18.7,9.1L11.3,16.7C10.9,17.1 10.1,17.1 9.7,16.7Z'/%3E%3C/svg%3E"); +} + +.theme-dark .code-block { + color: #d4d4d4; +} + +/* 代码高亮 */ +.theme-dark .keyword { color: #c586c0; } +.theme-dark .function { color: #dcdcaa; } +.theme-dark .variable { color: #9cdcfe; } +.theme-dark .string { color: #ce9178; } +.theme-dark .comment { color: #6a9955; } +.theme-dark .class { color: #4ec9b0; } +.theme-dark .parameter { color: #9cdcfe; } +.theme-dark .built-in { color: #4ec9b0; } + +/* 浅色主题代码高亮 */ +.keyword { color: #af00db; } +.function { color: #795e26; } +.variable { color: #001080; } +.string { color: #a31515; } +.comment { color: #008000; } +.class { color: #267f99; } +.parameter { color: #001080; } +.built-in { color: #267f99; } + +.preview-image { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + border: none; + transition: opacity 0.3s ease; +} + +.theme-dark .light-theme-img { + display: none !important; +} + +.theme-dark .dark-theme-img { + display: block; +} + +body:not(.theme-dark) .dark-theme-img { + display: none !important; +} + +body:not(.theme-dark) .light-theme-img { + display: block !important; +} + +/* 技术栈列表 */ +.tech-list { + list-style: none; + padding: 0; + margin: 0; +} + +/* 技术栈列表 */ +.tech-item { + padding: 15px; + margin-bottom: 15px; + border: 2px solid var(--border-color); + background-color: rgba(var(--light-bg-rgb), 0.7); + display: flex; + align-items: center; +} + +.tech-icon { + margin-right: 15px; + color: var(--secondary-color); + font-size: 20px; + width: 30px; + text-align: center; +} + +.tech-name { + font-weight: bold; + margin-right: 10px; +} + +.tech-desc { + font-size: 14px; + color: var(--accent-color); +} + +/* 页脚 */ +.footer { + border-top: 2px solid var(--border-color); + padding: 20px 0; + margin-top: 40px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + background-color: transparent; + position: relative; + z-index: 1; +} + +.footer-text { + margin: 0 0 15px 0; + font-size: 14px; + opacity: 0.7; +} + +.footer-links { + display: flex; + gap: 15px; + justify-content: center; +} + +.footer-link { + color: var(--secondary-color); + text-decoration: none; + font-size: 14px; + transition: color 0.3s; +} + +.footer-link:hover { + color: var(--primary-color); + text-decoration: underline; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .button-group { + flex-direction: column; + align-items: center; + } + + .btn { + width: 100%; + text-align: center; + } + + .features-grid { + grid-template-columns: 1fr; + } +} + +@media (max-width: 480px) { + .card-header { + flex-direction: column; + gap: 15px; + } + + .card-controls { + width: 100%; + } + + .logo-frame { + width: 120px; + height: 120px; + } + + .logo-image { + width: 100px; + height: 100px; + } +} + +/* 针对移动设备的响应式优化 */ +@media (max-width: 768px) { + body { + padding: 10px; + } + + .container { + padding: 10px; + } + + .card { + margin-bottom: 30px; + } + + .card-header { + flex-direction: column; + gap: 15px; + text-align: center; + } + + .card-controls { + width: 100%; + justify-content: center; + } + + .button-group { + flex-wrap: wrap; + gap: 15px; + } + + /* 预览区域优化 */ + .preview-content { + max-width: 100%; + overflow-x: auto; + } + + .code-block { + white-space: pre-wrap; + word-break: break-word; + font-size: 13px; + line-height: 1.4; + } + + .block-header { + padding: 6px 10px; + } + + /* 日志界面导航链接优化 */ + .nav-links { + flex-direction: column; + gap: 10px; + align-items: stretch; + } + + .nav-links .btn { + width: 100%; + text-align: center; + } +} + +@media (max-width: 480px) { + /* 特性卡片优化 */ + .features-grid { + grid-template-columns: 1fr; + gap: 20px; + } + + /* 预览窗口优化 */ + .preview-container { + flex-direction: column; + } + + .preview-window { + margin-bottom: 20px; + width: 100%; + } + + /* 技术栈列表小屏幕优化 */ + .tech-item { + flex-wrap: wrap; + } + + .tech-desc { + width: 100%; + padding-left: 40px; /* 图标宽度+右边距 */ + margin-top: 5px; + } + + /* 日志界面资源列表项优化 */ + .asset-item { + flex-wrap: wrap; + padding: 15px 0; + } + + .asset-name { + width: 100%; + word-break: break-all; + margin-bottom: 10px; + } + + .asset-size { + order: 2; + margin-top: 10px; + } + + .download-btn { + order: 3; + margin-left: 0; + margin-top: 10px; + width: 100%; + text-align: center; + padding: 8px; + } + + /* 页脚链接优化 */ + .footer { + flex-direction: column; + text-align: center; + } + + .footer-links { + margin-top: 15px; + justify-content: center; + } +} \ No newline at end of file diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..613d22351886f3b3382d9c1cb1442702def45659 GIT binary patch literal 7019 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 JPDHLkV1ljL1djj! literal 0 HcmV?d00001 diff --git a/docs/img/logo.png b/docs/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..613d22351886f3b3382d9c1cb1442702def45659 GIT binary patch literal 7019 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 JPDHLkV1ljL1djj! literal 0 HcmV?d00001 diff --git a/docs/img/screenshot-dark.png b/docs/img/screenshot-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..dee08b569cd2b88bac61454c2901b859678ac606 GIT binary patch literal 48343 zcmce;2Q-|~_codkL~jv&1QCfY(V|9AB7%s{2%;M`7{(CM>!c!T^b(8_MjO2*qD42# zFi{6HdgqS({{L@%_gnX_@2-2-y6;++<(+x=d(J**muElwh|zzpO-sc=b>+$x+9!`S zUR=3Cg1T~r^!9af;vMtDok`-at3EHZ)vlEHbFC8pxaO#;t9s=M0!DpmLq`0Y((|#I z&y_1oZ!UkX&N}dbuUtX7J<(8o2?nm8LG@qyH;JEbh75!(!*>SCQZ2UTUE=wQu3ih* zYFR2?T{1IoA!lS^xE2=8_*zOsYb(@lT2h|l$z$Z^(CtLDV*K=0mppa|dLMga@2I$0 zsd&WgU+EKNbre=teBXX_?1SXDU_{GFx3 zc|hjpVuk5dpX&mA6p}# z{+*SJo}FbHe$zswmPoGe$(>kixHpO!UoHCmsaew7@02WZY*`2Ky_{lL-Ycj0Ub>w( zQJWYzIJ$Rjw@{!a_Y6PZO}CSk+k0UF7!3#A=sn%*{{}i99vYB!u(i0<$ZE(b>>?C_ zKt$8f)1$|-sF5J_9dy7U!3M3U{^A8w@CkZu;m3e-`&6|nXveY5kZjf@S+tw8cjj;= zcJHv+_*#X309|Tw!|Q0PA0n+tRLLtdzSN`!!pSw2Z7dULC+j;qCCYs8$F&(4PwYsP zD!TH=@GdF-*5;|vOr)H6NN0xnS|xEL;$n=~nhzJK(QkfCO_`sos%1 zIJQ8+G!?^4A;M;CZyPHmZm3?7*`KLoD_9LtIxxe7r&C~R-_GxSEwSGvfL+-RI&}#E zC_ld28oKC?t{fPRCj$yhG=2*mpK93f1QNF!&{JFu!_pQpAXCET?ax#ftdp6dj zmr>)r6va!!d!fPNGdJ#Y2Xc${Ua$;8Nw<2Cu+H^o7lvqp z)X4r*7npa^=SL@5zDKGXw@uq>jF-M$;6tqcJ!aQ%ygz~@N9S)|z-xD^ePaWkUFxWW zRe(U{Qfs90y?3ChkP0AmEiCP4g_cJSF2778*R43iP{G;L$~qY}~bq>SLr=kn)- zC>6~92Kv+S>CS)w5a^EXvLx`40b9Ae@zZrXzuU?QFNuyo@Fn(5(1)PMx+C-ZUGPus z?_+p>j@Xk)UYpdWT=b5vyukkwy&J95@g22f$7Lewi+yU_9A>7_w<|F9`+fC&t;nQ79+qR;~y8n~k6j)_F5HBoQR*}&?y z_Xt!A*;0&t7u(6rn8t(IAAPVSq6&4r#7=p$&6V@^4T8Rkcug>8@z0gstZ`%ig*EQI zkWD)16u<_y1x~h~G@HoW65KRmf8UVoh;5AxMDGjQQoc!ID2}uVdkFqY>XGtxoeiAf z-ptw9nth=wOECXM#f7$=GA5+7Q3U#;yWZ$vXor;xTX1g_*CZbhh-R*o!757V{|W#y zy2W8X4mB&XYA;ahGbM{?yEEid+x8$JIlp<8>DhaYdyZ#Ao)@+LT#R6g75|LIkBR8D z1Mod zgYlIUJE=3O`L0VnKD-_zLbn_d9lb(!KwPM52a~f>F_mGWnNiuU&m{B?SICR0lF#*d zt=1;#$B_2=*neYDYEdbj=HqdJ2sbfUBspT5;YF&NmQ=x<)}gJ3LFsV^3q9LGXr!P+ z_?@kbrCS{3{ttrai?ACZ(wLI0gcc_=Jz9UdRWDnQPj&WT1a?8;Ih_6n+ zO(+?zifZG#j#~38P`@_X99y(Ded0!!x~A?jHW26>xoXL=@l}FQqH2Z|C+hM!KhftS z8n1`?SL!QFo_^gP2{kFQ&P;?e%jAf;)AkD-5)9PXksbCuuTE@&D8&RmV`aDO<+$;k z`*N($J6IR|)DkSu-B9!%-H^Yy$kC1Gzj#N;R$GM+RiZLYb;K*|kD_Y1o;(SA(QrJj zkSvIwmwuOjn8h(t*a3JMHZtG#Inz}7ibbL>ec7jEsqlA*(=5>42Zb%J!0zDZM1=u0 zf`(Ha#u}abZn*@^nP$d8gmDJk$*~t4*3lP`MTb-Mpkl5MHtLo_Ysv7|*2TI*7fn$u z=CSr4B2SX!rXLgd#eWyk5luxy;{oVt==d#w<;ilmxs=$zdtU$B*&52V`)9FQr|4gO zwFuj=px#vQ+l`v7#lzv)1VV?vB=TSUydgSFg%VEc%vN$2RklI^Sg|_xedR0jEYc{2 zB*$MvY_oCVT~2CWg2)hT$tE-8moeQyN>`Xb<<-0Jp1X#suh(jur48S8LI@6$oYlMA zMGT;CLd zCJjm~Iqp*E-KA@!c%3+=rSu5+?Moqyy3zk{rT+J@M1O_KQuZ2BW6YPsg!$WT&UcFv zcrOR`LQ|9=7AQ^O>K$a-&>#2gKf?`to^umyZG{UHen8QSy-FQOd_S37-yCdLktgZS693PgQxg2w`m{&g6kyyvkLCXKutSGsT}2_+>SqV6z^;KA z*)84j`k-~QH@UQA*fhpv2@hMq?TbVCAQd;QHlyaHUh>xozU>EpeQ!)3*x4ZJ`{Qy* zoUs`_P4kGp9oCVny1s{so$_amC3n7+Gg%=)_v8nNQ|~VN?)6Wh6vU0*Z}Fx0;^c^Y zHjcLDZKNuC*U^!IzTU%TdTw3<-$~fs7{@^V#Dk*(n1@O6VNcPh2$Py@%ugKQwC=YI zzEhua{L}achy^XGu9ne>T;}scFYB0l%Rrw6q5GMy1=Xb)#7Y`aqj(4I5eod~mGEAt zh{cI4kleG{J}cC_Pyn6^JfyrEwkvGaa`YpoRLd>9(b4s~Up)?9c>uTm^6}bWS?c3wplH4S&?8 zDZca-$=?k3+i8;J*WUG3DH;uI>fE*kK4k|;%VG_((X&e$;!Trd@mmW|eyLu%p1WNg z?wCHs2yF$Ah2?UKN8`GuBIh%2s2XD?R}L-!6O!@4z4F|()$P;F-}iniyVQ!*Z0+p3 zvf*mUqGzY}3TCH9R29Lx=q&)`8q6yhLXdv#sgj0Olhw~y*%^Z_GRr@03 zk2)G>zR${=?{Th+2^ zA?JDQO@bg#rIn8--Y{S1<)w4-(viZ&pgCt1YsPd#_P-%+TF3M=caK-4{|526Xs2JF zW|hr-Wr@ym3M&N#zf91yJ@b`*~lO7|h>~7%BB)i!_ISh?BP5q`wPS@WXk~=nghd4sQ==|a< z4?D4i=BfB=lRt{dfOA*}9SKW9r{7^FDst2#EzoMt`BBsL?ktz=H?!#Kp5WKB?lMWi zGn8}KGSh+(KQZT?&R^Q__5(Z8q?Eu{$_Q8ATI=v(M@B2i}G9`^+aIXm=4E2|TgKf5J`hzT6rGGUHnU_3W;}*=+hpcl)4s<8KPSis!DQ|V&;Uzs^6mylfE0G> zw-K+tGm@tUuqf~I4qqME?V@0k78yR7C_vyi*{p=)E7GR`c04wu zaHdBaLR;fm=OL=LsYgFnKvk0OOuVix;9YAL%X-7xvh6UV5IYchv`(3^x0qLN2zAvg zNBe-@d?hY~IM=!3jo#IhkLapv`ht3_;IOQWB!dG`Rd;sdlFu5rDSlt`2Dtr;)JkX# z^0%K2%V)$@miDaqiDk!m<7HwV&}Tq{QZ=MS5o1*ow3*iiiM{a}M>jF1cL2Ov-`pa4 z^!n@#iN^}EK0{j3IopKV@l(RPid~%8A;6>idn?807?}rJ4*+iXu-^nt<7K7*mRWvd z{ysOR-1~@4#7aW)fJ3i-ZiQm@XMZvFC{~K_Ys)XKExzV^!a&?!!AE+*Ag6@rXxrb^ z>|pyo*NSJ4lFwbuGKpwccI!&hq%U=miW7GoZyj4i>%i1~$!6U|PJC*N`M&Ma3{a0v%TxRbc#5$Ct6wt|Xkkg_ zJ=?K)p+!sT1DQ+qhST#5uS^)-kOAP(^(rS)*uIIF(c=XF7&7wHRd$nEQgNCwZol<(Q9jKp_vmH?mT$KA z#*RW&=*6f3#|s$t16x40v#EuWo zAa`8|LnE}GSbCFY7iuo+{G(o%Qe#B3SWSBbvsT}xv}>5zzFHBkEUGx5&~(+z_S!Wc z!YApDnH~<7lYPu$*m1jA$jbX%{?|~mcbXeG33zW@_({gyV+0W1K1zzO;ruHpuK4m@ z?f2@(542Pco2Irargb`%%Wm#>gC5I$5I?Bi?R9tvgdeHOh_dN}wC`bY zcLVkBspCJwJHmW29yk2`a56eoTIC!YD*Mrg!wfTu3k{i$w~x}`RBX-M@Dxvx06zB8 z4B(BRy#yMaDXb3&zdqb3pLdj8PiBj;sR1)j0W2p^cSB9$rzK1SG&#?ox#>7HMjt%G z;*NbH7bR?`f}mE?gxKwfcr5sqw$0$iF$q0t$t$D~0PdWq@Ul*G1vPxQ=(!$mLjqT( zQXi|`cX+VsC0N-cl>it7z8h6ZS#FN35|xRKv?N^nply55%CvY>`{wC z_Fs;wvdL1^v`tB@fnXrmFk!y!<B~3d?Q`Jvw|Ej_s!jv+SsW?2~P z5(WS5(_T%zuQ+81vk;3~Yy;clZcT{=$A^B$dsdMX9p4Tc_-Eul>|;wwDn5B>9E=7c zL|n=F4_3tr(4bzo|3jCE@X%zpe;Dg-k_6%7zm;d~WFiMv{zIWTrfn@cGXG%74IMV{ z6DHnq%Jkr=RKwfT7=>*ac3DP}yF6$5TiJmlbl6 z_zDNu%C%V|K&jX^f9^N7-j5F?#UJv(Z@z3bdYKq*MAxhLVJd~y>emODm)ou)if*UJ zWhMj?FMAF%8fZQhmT8g=C!_2A)Md?jrGISRCs|pv@fv-$WUc*Y>d?4eZoI(9Y|v#@^z+A>`LaLs ze;)=huyu9*wuJ&89`C@gv5++1qYni|n@qi-wvjAf!PO?sJI`$KFsg&OG9LotBj-1_pGlFQE{RxxMGj`blR8NiCe3g zCf8TakU90D=;)wj)1qbH8n+WcH$CM=jipVN9P_1Csj+UK*iZA$ASV9v;|HVG#h~To zCEw5eqxcKdO7(C=FNp&0PphV<#|#Xp2j@DR&hw%fuF4Ei6HNE4Pe zI*`5Nizrz!;G+Q+P)3urbSm;o+-Ga6KS3?rt%9-p+fw<=kDha;!G- zCkpGh$6??>C^d{jtk>@xb;i*pzw0}eHui+OBW&FLs#SCM#8NMKL@22)h9Xn`Ve{Mt zB&KDwXqUipGN3Gen&_LGUS4j{QN{EvS4qfqaS}B z*?uAB0&UiY9UfQ%>`o|V3ij&fj~vTHY%#3|6I;t(?CBIu^^qp=nTBZPxvs9L5cPo- z^zpLm#8z^%&A7>&?W1*Es~ouoY{!2tXT4H+W8flGcGo%crk%p5=~-vUwS&epVdz(i zkTw_o-C%+!-NhorjkUYTV>#LOYjeDvU9+jfb=<`w0+~6H2t=bctR(g5t35u;rNiCQ zSDi^B$0+d6J7z+-n*h&1922x3-!+g{(AqxI=qu^r%)aA`}1F7(qXTUquP@y zpj&{2VpnwgBj}tz;k_ghp@zsTe3aM z+>ui}W;aJJy9~=@ba3)rL$iy;l2K`PwYkgmKsV@_Pbawm%r$(vv&R?orQ?uCtQSiV_ILg%>Vy`M8|Rt!1=i+(N4x|XF>!RV5$&51nP`_jnN-;mt>4>B`bjHZ43E&UgEuzx2Z$)hKghAk-YSd+wM>$I z8PuiXG{gyOHseO7@9Yh(H@urlDSprEv*Xo$g+s)M;6J(iH7u18Oe`fVR=qDIX6t#5 zT-~GralqX-=K#AX zRd#Uti@|NTRKZX^bM!jL#lW2BVHVsuYwyJsSRKIlPuP};?L*fqzS~kn^PO~N_nixb zXoy!Z+htX9YaOW_VpH!DB88pbhmIqfh}H6yqqyf7t1qxTH5JQD@6ulk9_A0s8poPW zZxkndrDDIY`N}(mm8P=5Vlna!p5@W5$S-+x4~d88%xD?-`z~LXM%kJxabtwYZ8($Q zTPPtFRTMyj`fue~)cA^`A@0wO!S@M3#k{$C*drI#*-!MN51HvVC&xbU(W3aON^m9J zx7y0&;O3Marjrh4$F~No&s0agSpGOb3g4kYHJ_W9K^k^skHcQyzk5zG=3m_Fq69aW z7$Ygl-!#c4*RkV#a1$IRz-IGInBYK6fcmxtn4e#iJ(D74p(_D#M9d_l^;%-KqTrW! zrKpM#adWHfGx&vsa;`3|M%;Zi76`Qe88(~7mTDalM=KkeNH1|$MVkrSd7TzgDxIHX zv3J~bhZYsM+V;gCQ>pl}AX(^|D_CJ@`^c9|dB)jFrI12Fr8!YHGWGBBVkO{^$wjB^ z#Pogk_+fv_brO$1szE<=gdr8XwSp|U`s~u!#^bb>G1p4L1D~^Zyh;~2rHsKNZ>V9h z?PMOh6D_Wa>37zA6P&FA8`q^5Pd3I~ToYc2^irLlStI)YFr!$gcO{|B&4Xci_J6N| z(8IJS;qn-Yu_kRZ0sf$eA@RpFvDH z{i2^@pvEIz&z}6b8pI!Ht_cDm+04I_;*a3-%QMy(QJ|I z%e}?hgZXJcu(PGGfCDIrG9HNL%FaG{EXdU9?W^R(m_2cN%i^h^xiZlhO!{;4p1XYq zZ1S^uf_LpkM&;HazlhY_!dPw4ApQ>E%R!E8HPv~Qn5FY!BZ^^AOib$jbnFWXAH8xw zN*I0ZWFoHyHR|GBX?d^+UOvv3)!i0rGF3zs#d9t^X7&w429@17$47%JrEB>TJrHf~b1=jjQ`KIK+oxjy2>EaquK8H0ha~dHxg9vNe zNUV7@w~)dEPA7<4$W~@;x*dGGt=d^-?uNTe0^LxY1zLRvG(Y(FOPS!%PTk7TC{2(= zw6xOl7ca06!h66B#T&^!oU9OZB!XIeiZ3hV6iu$??aiCB>MRe2BoKBrZh|{|Xv4mk zRPj#5@7(UXLzftABX_I4Z0eIRS2`^f7kxlt6I;winGVRt$0n%3CL0l2;Dl=EU+ z@O80LiMEGbVbO(j(#e6B+ex*gi@LONTulmD%@$ijd8X#pMS5t9FlwI?sZ@b1UT%gm zx#;DE%6c($UKobp(g~x|O11S~TM2i}>KW<{=cW4ClGdef^B^{fEZa)JD~$9L>#|10 z*5em3@7qTDoOFBuHuKIs8>Pjn+3hII=}T$M!=IhD1LPtDsimji7~s)>*`GnVRvB7I>pJF3Ea3B8c04xwa-_ zdwNKYN;V8v0eEzT$)5;EutE{sWGXLrbX|#|LzsvahiH1cKgKDGh!__#6QAVyf6Gc$ z6;aHReV+k8l&09>TGCCPV!LDq`HV(L@Tgs;yuee>0AEd($Ik|;L}j^M>@F#==$Av3 zsGpjT@BN=KU-Y0w;x*q%XMN6pTy0+LbBwO2+Ebf{OvYae?33CTtzda?q81Au{}=Bk zL;DqdmBR!M`2fsO%1c`Qge9EwNwQMb;U0>xUs8ceKE!F;vQ<9Y z({;rm0?X3q%PwyZJz%MBaW(x9%65=i`5!ON0f2L#{Qtpm8h-d3RyJ8zr1OvP()jV~ z!FAL_aCHm4iK^sH^pY-YDuvx>I`*T|%;TS4DYC+DZ(Rq1Z@BF~{QV%neIuH1SkMvm zdH?M0WM!+(tdvGj`E>1JmocXA{)m7Bwj+z)=2W$@-TTJK4_f*xu9g+Xr~tY@$iTr7 ztg0pg3Lt7=m{?}WNH$BP!3W;XM=ujMQ40HL0H9k-MawFo9c7kHp`Z=V#Xrt%SN!C; z(Nm=Tb5%#~v;ik4Q}U4LM4p~T?1P>?3Ga49o-@?Lft_!2@H4zOJ};*xUFJ8$oNoqj zB2&OWUH9S;N76DWAGG;L8Q%cC#ReWutXY_cLADISTis7-(@L z-~d3sFw07|A3)4R_3ja=aGoasmHXR@DUNBfP!~Igm*MlvM==um^40usVw@#LiY%a7 zZ(4>acIK@#nqugVTArz2?nBGxM#RAxKL~Fc!mT_+@CZPpShV|dwYk18)@C|l_WnmP z0XO^_bLNw9>fbrq$QI&#-M{}ku1|?2xn4r%3zBOp5`v}hTFwcmzm9^|j$tc;*rXRM z&qrdI*B6PzsdKCg#wy+FYH|$;yc{`@MtM0vjrrw(SPA{9DFowr9N&6ol&qeaOg^J; zb6xBv=_j`be2jpsuK=*WpV08mzTNop(%Ta*Qg}1D+<3G_=AaZKxVgc~!FpfQH;-jb ziM?Y+@At4KW+rTBt&&;j(M3Kv*Q((^|Bz<@1LxysJV6Zd6Me zCdVzN&2I*^ z>_uZ$`_Me}PVVwcfDem&tdiW8z2N37zN6ZIdmSX1q+=PC_#?p_(t+Um12fpA;-Sa1 zB|{|kUo+6-WiV}{-xc1_!e!wX+U7 zHgJ1<@y5KH?r-U2tfIAUduw{I{oXz;t|tAns=oWqf&fkQZ2z3)$6>Y5`;~rqT#Q-T z7+&>7pBdMMBN)3twrhFx%)J?JG6qEVB#N`%Yp%~5r?U2RcTH(&c=bu#VLlVp++>WT0m-dE z*)&(r>@Kbz#KiBlNpUGz&O{oFJ?Z%A7py5X?8YnBW8;pusrDZ65!3r0HdZQpVugX`bW_E^V-3Yua`?F1~6df#&R8UkZipP8;_bz^~7rE&a7i3%A$5KTSWr2mz4m$ zmn0sR?ktwGLV1hH`~rHPmbTg#i#47C?-}P!jen&g`kHy=J@!N^D215)@h@3Ty>E=c zK}ClcqKXK2ZYqfR196gHvUh}#AOzm=1$(~frf4UL5~|ULvXTxh!mRHhxAr`CDzol1kXa9*p$}FcY++tTw zcgzhep>v}FuyE5w-d?>^zUhSMK$`*S6k6%y4T|fs@V+j&4^x`E= zNIdenfy#7D(f}Mwa2EKxy!&c-xu72H%xx`mGi88Sy7m8l*Fxf{$mbT$O%x9OKr7F5 zRy=W@$t58bc#oC({w_hh88%R%11|>NOO_oK7Ier3o!r5=U19yim1v-^mQ9oP6k5Lj zD3$4Y8mFh;XR>McP9-0u(jiC*>Sx&kwdmvCvuH++S>zZCzF`KoC1~Z%R#Cvo_bjcZ z_~(N)&vr61-}=*a!rKfWKbIQ}X#1aC(D{HGHS|r!;i-51&>g_~ao>~LaStMZSDMxq z>xs&zOAE_kqu%!)_d4W>++9r7_k2OEkxen_UHwWikOicqYq~k}wgbughDhW>qpC3` z$ro1vZt|hQh@gu8Y9r2B5j)c90z-2f^ud^dU)H!ujzV~#n#FPalP{sMjcx!eCpglbI)A@^Mh z?C!TYh6_)4d#vMiT3`SCXgfx>!-*;@Q#*A1i7}6PZ-ndP&n_wbCrPTH5po~1cjs?s z5W>p_FIeTZTX*aluG|}Ssp;GBHL+c{WNs=p4%Q|Yxb31;Lm_dTIHr&`ZW5Me=kg?M zsj8@&MSv2u(pe-e*J# zA2M`-n3h3F-Os;8*(iC=9#t~Wksa`_g=@Z*9z8gph#7{cp&v8nYOb_@aYi$AXTzqx z0eotaY*}#kVbU7+Qs%-hn5nJR*}*Nv*{~hov7@;2!K-t`9>KlN+xgPOVE5o{==f{Z zSz-x++A#Q=*s_7PxPIPY72uc1B7NWsmNnz=CwDu9pZAu$<9{gk`$0?<_eZaEW-*l? z-3Kp>1(G1b8P-#hR)G+pS71QYqFcd*KC;i9nld$#C}HUhp!s_ z(G?$;!N!U2tX8MnAr=oDB>w}pWB<3E(f?B;?TYj77S7?!ulE41z?0V=Z-~wEsTMh` z;9;Hjn|tl{28k?d-oxKy?o4gdjbf%utZI+!Y4<_Z1BGlRmXSjU)gb={8s|0C#X{eG;wc(C*V}}qkWg-7*3PW#-mR1W6N}H} zYRfp_UMl`u8CEO1W{)SH((3$7Y{j+T-17{0TJhUv_L%`Evl6ir-i84S<1nyGJ8)ZX z8j3?~Jx@nI8xJIOHP1!fiSo5Iq}`0?>1gB>NLrmD`^h`~5H6;oo=Wu3;jQ9S>pKp0 z!y(GyTRi4>LT0vTn&eZ6by%4gbBu1!PP-ANT`?-)fhOqL?q{1_?G0ljboK`?gf$?I zU0h%cyZOoS!b)mpWw`&sa&1N$^@G_?@7QYx6cylbSy8%?n{xyF08v7$B^a>WkF7eM ziEr~RHUG3)u|86q5EFX|v!>oPV8hrTgYT$KI6db}S;Ykcz5cq8Chk5IwPsn@{VoS+ ziHNf=y1S3*S$RI)I2X}iEuGUmV`E({Aa`c(^pzjdv8%Y=F!9!vUIS#$;~slP>>2GF zPVBDASRmdXiB+&wu&!A+-BNU=btJHj+tfJM4O4I@{_LviHxZSCI$0gcj3;5*h^r0> z5$wk;-vha__s?y&=F8h`$3gQe!O4I_t*CBG#Nb{lrRF5mRSd{-~Krm59k63>Umx4-v3&zMRn zs-1{Ic%7+cc2g`icQ=(&?n}*{X_x^cBlY!4*T0^5(Qn3njLtgVBAk%2L5K~k5j$FP z4_x#+ce~HPhu>J|&Ta#^2Ek@(&_yeL zVMu134*B!VDI*fGaQ57+Mrfd6Ylet18j=7|B?+O%Umt>NPP8EQX9p7pkaf^~9$c6@ z+r{dYCeGo3tuw8lJUz%^<31-BMBn4y_pgK?vgBbM@88YL6fD-!cm(};;QFQ0SgO2B zHY;uVJ~b}cuPlbsOV#O%9y)%DTdIw%I5o&q3-%vK2CK z8~8-d%)$fmb?fN@EH19NHh)zzYe$)xx+-&ci+hE2S#vf} zB^+X+l)X2_X}_^PVZw4OZ}XIcixhtwBvRhW?PX&FESLzRUf?p{&)#^j3%$3IPH5P} zoMxSP9+VXC*E9~*#|M`#Nw~T}PSJx^iQ=6{^kjc}`jeMVNjDAz#Od5na?l29`p&w; zVD#VWCSrW?c{V}<<m{U7iq-m3FbqajXxmVdeQ6cQVkG!a6q`j%D)$}F>e%B z0(ca!e|vl~jv6`D%dot0cm64*2J(zORGT(x2^vnT`Fy#hYW6iqCeV`Gxtk9*B%{Zw zSYAkp`c!3bRIWAxEy@yfDmJ$c#3a!uIQjXoT5}yyjm~CKabLcf zi;D$8u47>eUTPVa2Q9ia1qtQbuY5o7u#<556LEbe^j zM-#gg`|Zlj1JBY)k~qjgRnUZ)vdTU~nC_W~=Ac%<^WYS>Xz68wv+Jj0Ge>%q3w_zJ z^6pOQXNVlq@XQ^8bZ+dl9>2!(QU`4wk+y{ITQ%jUMSaQ?Z#_B$r6&^04R^^k1PNX6 z*2`-98o$)zOsd-j1FZ%ew+mZ1J!ydbH3$6En)J<8iOBcH4PvHg>|8f{=WEp(W2V}T z_$ExX?48P!tG~C__e-=o5c&U_zWoKVMoZgD8Js-{(#y?toD64O%`plL%8U1YZ^Bu^ zPIqwSYnkqvV@7_0P2#}cuL{aP!V(e2%YlQ*n9Jr1nX244~(d(H}4Owh9x^RJW1al#M%>EZAdb48C3l#;V zfl5I)h38H?Q*VF?Dg5TU6VE;=nhYO>FL)VKddmnZuWWr>=W2s(<0{2$Prr$b&|eQ* zIM==Qpmdq%-KxaENJ?ZJa&`Xc0JxX#V zm;7r?WZn$yis@kmQ36@&7#2V4jXzPCKMB6`?*dLIi3|6q#dRciEmU8j%Q)yZ46-ew zP;C%iJzRhQ5AR>|)aFUj@wq++<*tYqwb<&X1A!krY_@idn!2;+Q!8^5qML2SnYq3> zdUKNB<*aG%Bb^~Wpw_QsZevq?|60_S2TkJ!UI?j~7S5rgN*;gH?VMkA;6qH9TWAx zBz$dF;d(disA0j3fgi3Dy@6$Siw>g>`p4DWnlf=^aIxG-uVTRUEYO(E!6c+QY)H+4s}_5`ZZ)urGyWuts4uj5i4q}dQ+ zH<8PI__%4ImdrnRaLqgG&dWZ)F{yt}{JhS_mp-1E+3%zGggvB)Ib=>KWM6o<1!a1Dx;BdfR6zr||DEh=P})EG@&3T-46LF=?~xe* z{MR)|Y|uM5gXC|;Hy)=FmzVCc`}2}e@K^fyXJe;82SlT5a`iu6kV9P@Xc}^T#sr>| zZ)IgXeojYT4tyKZ*pBl2@8eUHI{^i+rLq@hU|y!z)K`fR407G|eraz$*AZK{mUxS` zqHLf)Ep;q?He^@+I8iFKz#lV~Xz{51mFLudr^2xt=v%}FQ$`J0qQmFS?}5GXS6(XK zad$Rn@Y;z3V2+WYviD;0ekpw!GdY3>+YB#WsP+Du{R4}7Z;S478;`DsjRKuT35h2PYQwR;635tEfLVgP z+ogZq*OVkU@bSW_#Psehm=IqcdHHgHe-_O`1KOT$Cli)hLt5);Ot0-DO>pOG(=hhXi=1n3M@gF(?JLYZ8B4#-g z6QxHkx&MufwOrl|Kws@-NEz~B>&xfn=~O!-)-3jeBD zEw6y+K{*UO|8iGlTsD6asTcltjw!w)124pGj_-ck{2Ne}0j2QGNHBF<`;sxT|AW|v zCdnZaJFvttYbnwr!5wFZ+2hTJs!+)s6FwHQu&6Jv^%EJJG(v2BR)^Yccb*QJq5dC& z1_=AGMb*kq&IW@&v(cUGd&fr%pyKf)uharJ$YPT09!NnHdjm}EW&eZNzU5~U()C5ChIC zt+TJn{10c(#NuPll-D{N(JV>WfI~2Y9WkMuPeEoOPC^T*9~x4kI4S-Q+TJ>o_dVaa=X`g3#$pD@^) zwdS1bna}*y8odN~$BXOUEk17VwBjs}3&U~Cai2V3t#MXj&Ab=Z*>@mpwL@CKDK~Ry zXv3?CA(j5{h2JsIfv(NRV)y}xNb@vv#b=kp@%U97LcXa$)!{;Q)msREt8dz(Ti)B@ z87mq#+RZ-@K!N6@Hp=Wq#7(ao+n-==X6$~{OE&GIVJ@}!#**7z?4myknXz=Uig8do zSnK7XhULv8edC@nK??Gy@5O3lZ}&WYM85O36RK=0^{d*oyhj<2lXtt3<{mv&(*Rst ze0h-fdDAzql&W)wlwaG0==MY@2UvWgFdJ9VFK~H@lF}}QWJ7p4AKO!L<~U31Ze9$Y zHp~uXX?r?T=cIP-2WNUZbs{R{x5I<=LUNmj4?>`x^s{BnaF-d0Ew9Vzd^JX!2`|Eh zb}UsT&C2~>4unL|@bwNG%_6^FPgthvi?S0J+f5fjqI(o>ZYiN&62aYk0LD|!zsKzY zB<~Wm&b#QP=Y*=@z+i3#r;8|*s09SJq{#_aSrPPOidBI+?RO75m|>y1-izjhO6-~* zhHuH2WA$_^XtH@|1_ScQWR#z=&(cApTqPb@MZ8IbIZ4=n7!;~65 zV4Y8BafYPfoEsq;0Z_|Xy2EGN0)WIICP3P2tcQ^?mjFx~Ahyfh`Dct?Y@pAL7$teE z3`1)2S7X=d-HOjog3{)JFcHr(TfQ{0&`Ib#S?Se5AMt^Q0dE@8wpaaTw@1vLt&O1X zMP4(uE_CahmS({qbjs8(wIg(Q2Zl9! zB`o`wTxfcPf_26w^uSZn%OGG~Pl%%yvP>P%C`lR8&TYW^*@ccSqmu_EnFrgDb2ClL zRvUGtVaO4Zx4tjjB|`g=p!bc$qi-A>2{etLV@SKS{MJxTzqSmJl>dAZ)VX+^eY?(p zGTq<3812UwWf+jN$q_$`YOh;5Lt&T&P4ps=dW0s!p!*rSH|Ffh!kEo4J&(68)5m2;>u4c@R_&7eOa!Hp}SggzpR#jd-SeK&f_x} zIZA@8m8c@mWRu-%vwVF&T`a#%F5&kq1D3)Iu7spa)?Lcr|J zt^-_7I>Ym7&Tmcpf#3z%6#iv_ACoY94;63FJux%Ka5V>f0KO9wBAdduCNLI=X~|Jt z@AOI9cZPq;u-=(C$*|@to4!jNdU?s=xFiyEf7DEI0@w;% zZY!li!j8~|Y|0k_qd5gu3f6g39>UCQe}r4x^J4%>k+8}Z<6EQ9;~C|ACuT8y{+Zfr z5vSJ?>EZWC)x{D%ow(+Ua#f`}VB;`HkEH!@(9L#S6%3>#*g_H3UHI=Fh_!d60JI#_ z96Yodx|rDe%8_e`t9i36#9Fc`!iv+e*j?}I$`FomCWI1jqZ_D?zp!R040ZA7gd4EP z*+*Im<9nB|@v8Nf>lJ>mTFCd?Av8|61hzI%wph*ft<~ADkzyGfYs2CQ^ya~Xc51K! zwSvv>JITde4!7&KSh$AAMY{#*ekb=P%u|&f4~(-H38IP(HK?uc%d?lPOuAtRhGoay zGf>}Pe?5oUsnc{#Hx56+f;p6W!l+$t(=(g&fT$9*X3~$=_}z4zImri3YL&Z#6l3bm zrPGcowC)_=taY21^!vKs!v3wnUG29a0s0w_U@SxY2lWymnQ#Qw+Fxh0 z-V&3^KNQ^_X^VA@NgQ4tRL&c(Udr*Zt}J>d;!8)^@_w1op0$OERqd(92C;E?yp3lZ>wucpU>kR z8ayITI502h2W1fMZSEUhlwWWTR4a(7$;Xo34xVmZUs1u!Ci&kb{g{7WZm_f}W#Vd| z-!->Lq4e#w6Z)sUVOAPb;(xwD0(r5pJ&N~Ydx)*Q_6xtZePuik)i0YHMWhppvB!yf z{XfmN`0qXPq0yPz?X2$gQ)q_0AYhtQ<V8cLfH`l{_c{P&KnOo)KvO!_ z^d=x~!x$~WP6awJpLnGO)iT8#*W!qj<%&o7aA1-qJs+4Q;23BFfD0p-nuyl!Dqa$-<#3rP;0=9g5 zLneJTVT-CgaLyg~wNMOifm4Fq(~T&6ePLaNUZ~5jSZxnrygliB&sWLy_1z!yyG7)BB2YOy?;+fZ}kO@Fe`o*Ki5WqCZZ=zjcR- z?dN1I8HAKBZ^Ut)Pp9%{qn86ly2q(h6rnu&Y+&lh$rJ?WB&i}b8+7>^;?lHyf7BW0 z%l@l1 z`I7&B9?&W(IKpW|UpAZJdDDO-478y<;g;6`^!bm_QgZ2DwtnWGAg!L0snC{w-SRimsn~3P62Qz{ZCWy|EGlU zzbj9Z41-Q93VVH$G$AhZS-3nPmwh4@hjkK}MBUMK0VTjvastfi=wrYLaW-rr5x=&s zjskfUv%N*X3}hDfw=y9hyPBZ-$}tcu{&=oJ{iIjj)r_a~?GznN|85REKE2TrP_p^I zG>yZmIc?)v?bSiEwNC2>pj&eN4Ka7WuzcjqY5=3-8fgyJ zb)Lv)q z;I3D7&prW%6>U?<4bqXO#rcQWs?|_O4qhL_d2m_r{oHYe$1D!k(?6YR4C9#uQ1|+h zct|)As=?hHyfTLc&|R7236mcU^;1Fmn}{T~6En99$;D4^BI|}MwLAb}v9Q({H!ALZ zBeD~4J7>U#HgFnzT5+gIeJ~FQ1Ix8+9~y2l!f?dO*p|fg*iO*k1n0hQ)%s!fdz7hW z^x08!5V*JlA`oiEHe`0O;*m_AwKZHtvlb4fMx`>c@WT;UbQC`Tk=|FElS2Zir}4P! zD)=Vz>QURe=Quepi94#sl?wo3dx$cN4mliL1c8(;$sJ#D`*19Vw8%8Ri; z^TW06+qC9TQ>}jQUZ=}qQNkI+fw9)~WPTI_H#hV$9ZQA@M)Oly(A1?Nq0kD~9-I4S zKKkq&^TKK7C|Fzs-Nr-{Pt=pJ+sVmk1sW|de=Eq(mZ=UqBrt#ft|qjvm0QEdwG!n` zEqMcR{9NFvyS|6ihNI_%_ZVc-Ph+SX@f=bzmTYyVeSh7-aH@e=J_K96UGZ&Z!lhRgxo);Q=zH)GRKidY{Lf5Xf zZXaYE9diVr%f(;_KT*^v=pl0e>vQcZyF(A09^lYFt*&SD{qW&cQOEpcE+U!_?yU#< z0Uy`5%3dE_5b`<4!Gi&Pk8n9u4#8$P;g1r|P_mi6<#Kk5E;I_{>Gld8^mQ4UFnvfe zf1lHySqk`GqwZV38W9lvx(_%VfgE%kC2 z6lS`4yL``kHRMJEF5O+Yg`64A1drB}nP)qH+sWiO0082{2O=IqoW&WSIN+R`+kCmp zm@In_VW4>6g$A25WtcANRP?esqhyUQWlXAmPqT|;C_U9D2N^J5M*KqPdL&X?;?EQe z3*wdi`vC-A@15|;Lf_&*xT}rYU6|)ySIZ%{ZRX5!eazMmKkM2>%Pn>{`9G}`h|MR? zr6fFGOY%+~3#D$M*3Ns6pi@%T7OXA_BYLqNb>u;zpg&?$l@t3^>-=N?5*H+Q$>p1G z*6Gkv5WWDXr5xG8 ze0i_cXuqp4&v6-C`KO4o()I#G$~=f?2}$lpWMTe;k8Oo&hd*^N=q`WBXV*<(JCn_p zt07y(-IoZp@nG9$jLn*i=i~o|9>#3$LRG>G_rU?RaJsex^E{10umA@Z#L2&}&td&OSQ`BF3|rIvave?F(VR3T+BZZtb*mYSNo-HO27u@LLE)tFvbv z4qXj?=%4YBn%RoD<@%Ov4FM0ILZKv=jQUHgL(3q^lCksECfB}%Iy6>ZxXGsXzz#8n z)zVH7Gn-=ui<8|Pc(>uX z(pIn@`TwzAuDN<3MQS$V4s9>KxC7iDgBgGo!zFPY*tkhJyOf8yg@C%%`_4=Fq2pl6 zI#^4iYfRYlNT`Es{}b=Queswa_687o8`?zTuYLF3BjPAbd>Rsw^nBiVqfJ~EK>s!B z5$ou?#hYLjo@a-==={^H%COR%?JZ=MO^P5?S3^uvi|l3dMV*=P^P9#o9+2!>Wnh{X zp2uLO9(tB%nLv^$%KQ>nw7b)ebx$`J@0};|@+A7G6nGr@nG4}XFaoggBw{VJHx<3= zGcfY!87A}?n|)WGvJSGiZNKRRR`ZRPWkB&ym~s-!V&`YYO2yCLoW~93wPzFg{MIr@ zZyxH!iBnoiwP@4#3FaLE)}gHZ7N>Ifj|+`}oKQPnSM)ry&o2(ghau4{*{JD3&>db5 zYjA?Xg)jd>w~NBgC$5KzxwI{I!xb!NOD9T;eon;8w<1?90OlhjhV{bwvyF3AqMQ7n zw54>-&$<2ZCYxC%%}%bhzFFye?Ak3I=JF|RdULMc)}oPo5p3sVXkkTIq1j6c&C+B;ZMGrC?-0y%^?sIlS zEjkt*4^WmcAgKUfhjrb+YuHP*2X5R>WL1mEP!W5R{e{ubjI&6ATZnZStm$mx<`WU*ED;v}t=8b*ws z4->ElcTkUVUpMLf@g8^lb!O=1Z{nA; zZ(VIp-R~W%@wZ49%IAj#<_StaM)RPfHc(G0!KAGsBb>!^hy1A!;_oE~IBGQloljNm z1QG;4l3Ti8c*_Aw%iNb1vq_L7Ay(XbU01(yxy3N-SLlEMll;ULO6#)%oWs8kL$Z1H z%e<6Kzm3|LTu_PKEQsJbhbjhCS`&=Y&*uE8XSf&>W(DGx=6dEP^cpalKVW5Bj(V?P4Uhbce;L}qinmW>>mVXiBUph7{t&E*80y9w2TIu4zBk8vpR(ZBp~BvQ!z z+3L`bk)Ln|h&7{PJ;(?(`V9vQ&`cO>5Rw%B)Atma;;`Y87hMUvHqV&}^>!y=QSJU-SmwNqt<_FJ2rf{W8aC(OmYI!4#r$sW2_(y5E**1}Us^ zAG>{-J!Y+))B71QMKn`KI%^H+zRsQHNvvHVE+d6HAyy>*B-P!BP zacysxV$R#XR}G<}uNG%Ei+C&QQ*fPwyckF{IaR|RrE_JLtVp1l(X!UAs>IDMz3awd zVNJL5ioWHl_04U}%_V?4EH&LqBF44cg*IG9w`@GhmAG)7O?!SKw02wGmgCzBG$&n3 zxyK+K=QZ?!P0qPY6?!sSChIY>7lUxbq>n@!G^{i?SK%hkWZTagzdTkVKxWEZ@a%o- zywBm<3+Wz?&Ks>2i~iX_d?@$gCBm*vZ_mZj?Dcm%N7gZJ5O5bP%ujhL|C>C{|Kssh z0lgVnwdvT-3~hsRAepX~k(u;IXx*OnRW#wFxDHs2%%$zz^b*|?9ax@+ zQ6ui!6%&nAS{m#KYNl!k`c+BgK)XS{xvGK@!kZhQw_ec#96XrG_s<(HonKwHGPI2L zR}-yn)~yhXX^-;aiCYR_BoeI#`l;#>plb#>;Cu1GA*82M@l&YETrw%3 zzgMw$pzrbA=|&o()?3`Qgb7p5>emNSQGnKiI}h7g&Dh_}E)}LcMHOIhPQiZS7gs<; zWxcg^5MW->d45CBx+I=%syPFH=Vpccpq@qd7v<>#v?>5XsuQE5pL`K~<@V0y&So8F zrk+s*a5%-`ET)+DIJlQN%XaSN8`|fP;Y0NBJ-7q z-Rv{b*r=yHe$nTAV4F7qCe6Oa&OhC?S)5&F%Aed7wNGq(9RS&YXjy|L2l@J3G>*6J zBJoV+b^bUGxKtaB|tiOY2}CtCcbT#bMML40tHyPvO(pe@2GaO~QVZ5-F$SSe|=CB{>PV;Qqk&U!< zGlloail{pfgM8kK+e=Tc(Yq@Z?Ws}>&q9)c=-9Y14gfBy`}<*>1;8^r+bJ(ornKZh zDrgr12bI#YdcJ?S8qw7}V5?Z+h;(PCTPKN5?)=ML-K|Hq0oXK%#?I|;J>(} zziNGC+#zb2R{SQPiod(7C;Z4}?6zU8Y<$Z6M`6{Upr%qFwALe-zW;&xp>XdNS}E!v zckJuW{6IEjv(VN1#oYpXhvjq_(6at2q#?#IDQ%Q+)@kXG@m)P{B4){qJ&fgHE99a+ ztmE|uTeN0#>IhRBryba!U24KQm2bvgyak@SyftmNM4Hg)z;|PeG=FL^%97Xr4)QK< zbbIocz3k*|8V3V1NR#>+aq9sKy?!2+%M;>henV@86Cm%5g3fLIT!;M#q{ZLaw%-8v zb+NlEN|Z(d&e)VMIdl48 zNbcBr&eO+J(>w|4h`iP8^=JBl+mb&OwEWvQvmPxL{l0m~I|Pg6-#l|wb!HsDVn$#c`)`OPB`@LQ0|hP+wq2{nd1e@9#? zd539#U0OT6m`DRFj5XXZfBvpYxkaJGVfCrt9Oxww&cIw#>so87wJ6$#*wHIE^B4;4C;lFMO7NYxW1A+3&l`Us)#}_-#&Q zA*i7@`?YoMW=|d8c+~o4K0l8yTb(|lU;i?^4UqcjL+zGx;cuU6$DrdVax-}PeyQd4 z^eev#>VnWjOgv%hCC4&T%`$8Y({wrs$UA1OL2Hx z(?3c1GvzkeTLdUtydHU?Hw1|A8@$CeWza5>FMs4XR(ZjY}9#syn>$b zLT{A=IJ6vywR_wj9sgF{1WG_lN$RZnM|Se!A=#53tz;pfv1IC4POBU7<)NXtUS9Q% z()R;iYaFg>z24`XSTmw`V{D8?o%vV4$3lko=-kv#DLtUHzeuv)IEx(aGhTn2ErJ7061^r7n!P|BegZ6^9W^KA7=-YrAgGE zgw~&*invC&SA1RuBK4p0)DL%hD*x0j#-ra@F$NRwbDjO3atlTYfj)i=2o8L_V_-SU zApbL2D9tQ@6X>x$n){d8NgjJl1haVTKeCYi{pG)n1@<}M5UwSl&)@iz*44bNNMIPb z(q(rDSYLhtG2)LO!Re_1!X%W@qh1y*ox~aXanZN@3*N(Fjxk%#C7{(ZVzUZu5da2! zAk7H?KL0XhU=m=%FS8@-(D6bk2jPjJd9i;-q!jTm!oo7tu%meFgC}4x!2OXKR_6HQ zJ<~Z?5$-2cVWEIa{>P&x5U^V`7s5dSVJ(gdG38jOi^lpzd$Oi)OsCzu5+<2`to~9l z#m26SJaNmA?4eT*wj0JBv%gKe!a%Yn5L$#+)aUTB84Y_=xpTd=y}0kfMJbo92jgj| zMv*PeyrwKV0Ve8-2BhntM!c{q*2wKC3er^~SpA#azvYL$-mc|4L8P!sz2h`RMoxV= zg8<$CV(WYc*jWGOH3&1(|MHruz?QP_7P3-NPvv~#hHPVg2gb<(g&`Jsx~?1}c;bm| z!y5Z9aTX!f+9mT&MAml){}_p%D8?XTpd&s7+OMeHE`$CmKXDHtuPIkVUIQ9vrYgJ1S@HHki;8?SCg82=sn>8^a^N4J;vbKrH%r z&HwY)Ed1B@wY;yR7|x>sAj+oMtik_sjgKAY_sFHPkN#8PAz6Vh4x0z;jGU*)C>Qwt z7aR6pnpe43&Zm)U$7E!~J}z}GWB;;>tN=Sj#f%mR zDH`o19hCs1(WYcAV*cLs7&3CP+e^R-^bbv^`N-&!Ym2O_N0zwjMjk?_+kUn_03h!_ zoa6g{w3Iat-#h*>QJwJs^heKnP$WT7M4Vn&43A6_z?%xjpEpo28|VdpFa* zkBnWdq~*_K4HYk*4)10K0zqpSocMWaT`>+Bh84iC6;EK)3uJLN>-IjJynJufCSpgq zQk7EoCX66>(zlfxSYF>hX?i*779mK$so1#mR|=-4>w14J2hkxz*7F1`rD-&xs*x!< zW9zn=O9dvSsz^dy0Ttu+Ry`p_viU)>f}#q#>YOXAopa0S z$wcuD4`qjtcC{r2dO_-9h{9rn8uA@RKsguWMrHwxq!td2TXcy!WvOWZiaeaBRA7ZC zn&A$6{+0}p<>1HfZi%6EeFmBrc&6AL#v# zc0?1#R1v{#pOj(eIh8#>)ts2TIU2sH$j6{;+D~*!V5m1`8KTHoGLF zZxCM>MZ^4@HgAnBhZ!x~ig)NDJR|C4h%din+Jl?Y(d%OFazzQ?AXa^RCngl%i zWChR<-a$}%6{c^$CNakAYA_BP9423&5o zxZ`YG18bAvhO5}R<6JoD45B~NCl22fLPmGkSYtVbYRXQ-A9%O>26#DH)7j*bct+wU z{hush8)x5=)}Z&NZB*#fOTfn1+kC<6b%EEQD~-vlGlZR(u+%J{Z+x!ofI>33l`F*z z6Ah)-tn8cg`B1M{UGhjlWaEHW2r zSQTMEIKKt&?S?j`lZ`#Y)R2+0Oe*j4&D@PKYAw zT2hR~+c=yruNMPJfHG$QY(4{k8s0#~3sjaxWrSsV-h}73u3k$q_O!ty#vsa;W=-|+ zAG5qJog7{cx0WQ}DJ8}71xsv}n+i+*_;%-$s5a`AyVIp+(26e@MIE`cTVE3Wp)+CI z@#J?EGt;y8MZI6f!!^y=PAlK#6IfkCT%T#cO(a;)c(T6~w$8-}vD>ZWvBps>s&NFn zX{y^5xu!7T6$lp)2udnauK0MBfO5G->MKkT&$Ym{rxajcE%*wiVo)r% zKL*2sV;s&)+1d)Q_z;pmed%Roj&uAS+Wuk-=Mm*xl-JlSS?TBjX288x>!OYDcF#rj zhlpL2Ux)9af>B+b*BMR|VWt-3GW!V?So6ZAQ%>h@)@NpDXtUHL9B|e2&0RAEuwV8g zlZ|!}q4@T^@P9o*2Ommwl210JLjRM3n0{#hCm?zR+=)=3*zyUf$lsiK*C{Z-Kq3al z8jw1WuEiOM_!H27!P0lgL~IB4@V$!AM~s%S9vizZN$A@ci(m74+2r#^A9Q@vdF8YWyZHx$UmhW3^9)G8uUY>5YUzV5+q#@NEemyk520BzK^g&_A>BqjYD{rpH z-UfJloT5R5eld*s10%SQOVG2vRYaiOC0aZwn97ftW zL(&AjxvWm&vh`RnzQS>YhH)*nx3Og*;;xIOdSct+Z$nBm(HAmVb!sl^lD^9JS4?1# z2z_NSesEMQRMLe6W5cly%3VNIY%gbv3l29Euu`hLE3R5Bi?md@AAsq zPIQe_tE2p?fR%G;mLFuVgzv^s>ej@HNJq#U4QQml%OUl@&jHCN^N2 zBsn=o)#85g97HzXfbkxjpeffGYy497gsqq}#iTaBqatF48Z=Z?!s3VO4*T5JRjYKd zw8-q``Nz`zk8y||`&~!C;!eO>N6&IwrK5QX56iDj`YhQ8f^uY*Fcvn5?Vl%u+~h@j z|8vg5lR*mJanznVtgjG3OWev^>QDnqUkY|}XAo!yutvZ%$>E)E_GpPjC32xc&2;1D z)R)!w$^{U+)9>==2D1D`b3d-p?%|ElKQ+wFfLlyl5)0MT4?D_2avn6afyY!Jw;^Lx z3T5p_4B|Sl4OX5LCi~L94)9fN(>h>3&)N(cr5~@riHgsEaLNpa!9el8u?Fu(l)n2o zVpdk`Pz!muQ{Pb}Qt!t)U;DB&#CTZ&JTPjW-x$>6Fnh3eo!+BVWANMo8cBPp|Kc6( z9P^H69pRL*&q5el0x4Uzd~%L%i6N~i@chWVw98QXr7-fGI2Za|O_FcgxOhj84NBGdG?mS12q*UU4n)Qv&U4 zTU$~|TNo4M4`f2mmUUTK%8Q+n)^^2rMA5~It5x6(IhEI#3Aol(h<3x=-p*{N6vafU zAri>~)2+j0Z41Xt37VxD=s(fVa8thq${eZ?oNpqDcWM7q2mvFJR)|t`ZZ+n#QI+ z_{4B{@Y3ipiLR>WN6T0Ysk=@>=n}NF*d(U7tuVEl)F7!~_}WN<7=CCb)YSDE+S_C$ z^_rx%vMKBeqo0^9rD**Keezid-0n#z&=VfBUY2Darz`{qpq-2b3iIsuNia>QA_VIX z<#;{Hc1sIw=FPSZAl)W%)gYr0igy0kPm)p`0=@m!QuR<<*GeEoar-uR#@u+~*r`@? z+=e$;)7rgZlrUuOD9oYPdkfWxYJu^RDR?-mPMwF?WapS|8r({Dw*X5XYvwSNCB`e3 z5-r-mW=hVs0%O=(OwbDS5tdsbZtwJ+@Xwo&>KYg153BmO+b{q&Xbd7MLB-Z`0Pp|g;3yk z54AY^txdhRpQU)z41{Z+e*b| zHz7A`gKMN0F><@>Z)!)*7xFMMznoTs6{sYMs0M1QG(XjcNtEz@H1$08w|y@FD(ut; zy`Frlwc`X_1jR1{%`=48=fpZ=-q#uiC`S9*#k&NxE>DKxQ9|C@Drq z)7Y>#djY^>tbjvhh1O!5Tzo>zB!UOX+Vq^vX5k1e-(|5hI6=P+%l03d{9N=sq_cp!mS-S`U;WF0ds>DEJD68< z_QJ<<1Z035_w2)YQ=Cmo9dg<}xTVf}zrEMYvq;jy=gMj~Zirus# znm1l{|JS@%|A*psi|eNYO;*I8xI+> zwcn|cx!g-A2M0IK>ZtE9nMJvaWAnCg%WCw$rFd<6e=uu>RnXy>jsG>g6Q@Fsd5YvU z#^^jN06=6)(_mVwYqd=3L(d9B6*!-UOOaH&@8c(sJ-bH>ZoU&PIiF?7R4(VjQ2?>g zL9UXy(RwhbMr+yjgl&f+XFN^7p}1k8c=C{I{C(b@VBi)8GfV_@PGjHtcaOWwg<&qA zS$EEPlW3o)VL4A+ZsJ2lrkUgbIgG^f9BZPw6aw@6vdOs*K1~I;3yd_29u)P4_?~KR zbs-$UK3Gcr8vnKczRIY38&&s2y^D7w2lYJez3AdAhnd=ifY)s=vZ2Z;n|T5`1w!8g zk<)4OBXao%KIq|;@-xKgQqx(LtZtj}maTMd=8!v^t)j}E+2lTKFhGLiL|krt=oNnU zVXVFgo;?@=2Uj&NV=T5^@z$mb33w#57f-bYjnK^P{FZbi)GMUvg|O+UlLtdqYesZh zBn~BT#s*ssd#r`h7IiL2?o)hk4-H9sDp`^aBa967mtVnf4`mv)blG?V@ZY8g=aDFo z2ODezId(|R6A>(*VF~|E@a{oAn20}nv&0>DeWIy^HMK5HW&ceVuozoqjU5P7%lHjT z7g4p+3(zG#kEc@HR8(pD;-6lCBd364QQ7Egi;|`vnM3wmXGHUBM!X{y{6T9=B0i4N z9a;lf@0qTijZu^g(4)5gW*0cCB0vw?UVqkMs0uq*pl9L>R)DPA*iK@wH%5~85*_$! z5$aWx&4pfX8)&a*pJ3Oc7=${+@EHlhT z|4p8l$`^ukjy|6T@B5>^4DOKMK@>ESbRt0yJ>NAM_vSS18Q9FMWm;yy&&n1^MNPKi zYsXCOP77^ya0~cTQ&)4G{fFc2KdC@Y0uGJrqM;qRYTR3qSenpLZ|nJ-az6^7+aYy)aabLv zU38Wv@-Zy$6_{YEM#j*UNnMr=b{q?r{N*vwtXdLvOXfn{Oh*-B*v+5k+KnkRAeZ8h zRe5N(!GQ?9WiCw8eWl>vBZ$h|Hpc4Ag$pZ5K%5a7aHHx7MZh*Docp!EpC4!W2O)Nb zBSwn6_+ZT#U*((4%fW6N@CIhK!cLa8Z9ErE z$l9cf9eJFzst5D(^$3w-^&a&M^RbA6;zRf8X2Nyh^3Wh`6a`Yxqq5 z>0PX{!34o}w+g=-Ku8$P!k=2HKe?|TNvn@}mzb@VDk?2UmMfoMv2hOAS0QcJ`iN^4 z%i{Q)vybDS*R5d-aZyx?Spx`0#vGazxpoFE(Mf!;3`vsOH zHGcX-F1&xqeSrm@pr$6<#+QA;pfRo90Y$B)A`|2X|257J=HSMA{y|Q3OiNy$9U0fk zZZ>+R)2Z{$DUNU5l=ly(l{Fcl?cMS1$mH~i;HZskafwO*T+f;YDC7SmHCblRi+-|2 z0EreBPqN3f!ZowUQkStx$m93?cGq%(U2nTwnU;Q1FO|A0>_$^{LLx^Fn@Fiq;Wwi< z=HZw>t`LAAtTa%)-QbMa=LlrUUy9%k_}KeOk@O`iQH~|PKt|&a{WMa_Zz&X~#m>c% zwGO~xdcwJ{7H6H?U#R>o8fJ&K`$7qJRD4{b?t6XpPz<`3Ij=Bqpw?`>w(}hdK#2q2#q0pL!8tSSMF?6Ziv8+I73dY${FfF4YvV zIy~RQiPfrsv;x#n**i+x;O7qB{T_Q;CjxLDod8=+#f~}u=I7B(qymfWf3eC-cPlz| zOxeL7ION#?@1arPi^E3EGK1V8C{)(sNYU=PM9{$Whh>Y)j_Q4<7E*jx)`OvZtJMkF zh|xKkerU({$1nj2+=uByTsGx(=De;0t-5izefcwWeJ?PSE$tH2T(RIJhs#k+Wp2;w z;35>?YEIUR)EuHnO7G@>Dcl^+@Wa*Xc-N8yd`=}zz#RY$Ly1#skXys_vDSiy`Q9m~ z3b^0mtr;b@Hl4M6Fy(}39`n|sXRGpq$Xm^51{eHd1gl$)Si&E^;z$7CV3>TtN%^hBpCl)jI~^UbVos))B)p#kA#dF-=@rg} zH(8WD(KqwzbM|+``n}>ugh{d3YFd-=i?LlUi2=0V9-$|au(5=Vo?rOKbNJoAKF!s% zgAl)d$}B~dtywQFo}<{u(9__x;HAL$rUm~h9rI(>aWc><=^m}YdJ2Uq9oz#Ya0}pD zfLA<$72u+n782rBi1_|nV!%%mUSqFzx-pPszG=`q^pzlZ`Bt4FhHUOHGBV$TLLf7?sXUSV_MW^OnGNg;2gK z;_)+Z=Z~5)e_mJP0((CAez|ZV_^O6&4Yq6l6_p76{3MCervovA2FE@kesXcHNM8HR zr6IOdx$kA)<7Xf-J0v-Ck}z&nVq@4w_6YK|wIHOPFEdhf7y8gcy0t(ymK0?FtL9F# z<``&b6adCq@6_FSM6sihRn&rxI}DQw*yRyDGgl~;=^DEaMK3ycoe*GWkWCL{oXE75&S#sqX&_RRl~7+vsC>33@?9qW`LcT^700l?CRBD!j+yoqkVM86;W5Y_(Y{ZfdVyW zrrZQjUHq_g(+?fcG*Cm|eMh3Z?)~$w2!MSSY_QUPvC%NmM~^?(Yr_B5S$%;8iTn*O zSA1XBg2J8EE2G2r9SeD|LkO0qMU1y5Wm3!JpkquD`G$7xHETZUUH~#7S$95;nSMPJ zgRdEx@B3I%5#NPFld7e7d8jO%AZ<$%D_i3651Zja+>0 z(4r(G)!os~_c!GuKt=YdB439@BCLQ8rO$)^+H48Cchuh-Xep59ipwKfj)cUk;f|i! zb^FDR-qO}Dc&D^`lwjdRtym49-5v_6M`fqU$w1?PDaWgji9dnKv@gEg`T{4V((MhwCnO~i|j@&7Yc&)IaN#hYRdUh%?v5X z&7Nz;rZMH4qHVm_avj|GQb)|$M&Po-=5fpLtJsP2@+8OVQm2_!gQi&NrUYtF*lakd0xz1_Siz#smqn`-H8J&9noEk>gP} zHJA}-3PnpDS**!t&t_1aRvC8c(*?J&TQ=#`bqx-3Cx+tpU2Ea&OVz5tEnPyc;9)Zr zhiL2oMeYa{8o@XZi_&~~y4L8@7vhMnm012LA^K*SJ|XrQ9%6Yn3pH$50X7Z1Zk)ap zQTAmB+oiV{)=dFbQP1ZP=LG93^P|F|;Zxbx6X7-i@2RTf6LR*^WWc0Q$ruOD>-s|CRvzmrYq}gWOmz zjU_*-D}Fw-jc&0C^W4f8d#F_PvBh0B;~C`jJ!$4FF*j~oFG(zkV*wqD(iRlV#ni8e zy)r?Kh54yFwR0~XotcA*L}xyH@teu={!^j9LMJgy=yYBs{Y*PSu$wtq!&mv%mDBm3t_oT|WlCztkbSPT{VSC3J|mzHrxs3@c)5dbi-b5iZGJzRK1* z0U35*phUv8nWBVzLP%!!)yo~o+h4S2(7`|=G-e{IF%Xp<+|V|!JyFg$0qf5^t>15N zEX~GV>8+43UhCAL5a;e;6%}c|(yIWa_1IUXc;K(}5 z?N1cylY5&tai0ns9|7RkX{rdO?#_LtNw1GHf)E>e7z`tUY|}G}M62vzMa1*)LS}Q? zO+iMqQcJuqNcw-C?eaRuA(X+ku-o=hx(?4Ip*6h7moKenuQ-2q62vWSjQ{yop~?_8 zcH%Xt*S9uj#fyB#=S$4Hg8Ix_CX_iJS@@O%wKG_A5-H^6Sw}XK(jE^jopFlbL*|C^ zajTd;4miD!Z91uIalBPtlS)S_Ux{VQyVwHot<*|6#4@>#C=py>Y*(QFK& zgAKALZVPtXwd;#j*RaK`B^_W#H90TYY19Ws4Rx$=krmfrtOL0<|HJ!=5i!82ZlWX%+KFaM&roCW(r?Y$bV^de;<_;GAb`~j|{0}1Jjv)Reibe-wrl08T@IxcWt=6f@7z!o> zG|k*|Q0_@8F|DIf<~!ylB&@pC(yHn;^3jHk`G_oIkWRk>@7z7Y(c+_t(r3fMj>p=< z(U=?V3r5%C6bJ&@(i!hXBoIDg-GZqFbLNFt1anh==X<`;PDI0!QSAJ;w zL#aD02!yRG0nU0iz9`{AD}72##iCc%Q%Wqzfah`Bwrz6wbgQPe~k^-WyiPDFFZWQ;HK-!*`a6~48?l2Mym^1E-0!u zpR1eD2x{L`e_@(?E-7QTtLiB(7lV?seh{@fEc?(NErhOb_WJkB(oE_zQn=e25@2iL z8lQ#dgoO^E<>28EOI#J3q(inpHl8u!WM+GI^vE(m9Tl7H<%;jX@<^kR)rtW0dpf5Qd z?7|mpvpY_3r8y*6*tNPM_NDpFA4i1pP?nP$F%HidqHxKHoAAqMv&uBu5xDIM0yD&1V{)>{N20e&i&stYu3!Gd2#b9*~!W}XP>>k`;Y|Fb0ZAR zuKxIEd;9hF>L+*oBYUa&JaC1gFHaKhjT<^Rk#Ok+=qCwpr&-e%?ms&&r8KSEQJQI8 zwJOl%?|Wo0%qu`zbT~4*XzT(QNeQ68PwQ>-niH$PMku2%KcjuLddN3g2njY?h}Y^k z=?+e!!?~Fa;p>5`2*RM8z=)G#G+6!si~Q~HX;F^!Hp!~IFiV?Z2L9v`72toZdsXe| zY@-Hw(`T1kdQDUGZSLjK(UF{n&mT3l(b#YEDyUUZP9uVNWrxCuV4gxb3Z%X$cOuN9Fktp zfBdo5RW7yUqpYofBuA`0n|M;a>MZAVD|PC-S~Qe~e5ivvj$F^9TVs{qG!~gIIGiAU zt6)6rcE|#uMweZfsPa7vCPz&-WqaAyvn{nNDL|gWXG(=a#zHFBmG4e=pw#zU?WNvj z%DHB4yaw#}JQ1+6(QWCT*8{z!i4pxCmCjX#NiDwQbmt13Kc{=TP}Td_Bj>!h;^3LM zhsb*-ztBmFO&j3A{mO~GwYX)X}pcx?Em~D*o?Hic=iL2lTXeBK`5={ipp+!*~gO8%}P_HOHR*g8h_qxq6}I1 ztX~R~{>wO$K(m}n^#IMYeR|sKZc^70s90LE1iI`*sSg8|hOQHJ8QQ%=;WP-YU&_l6 zz1Lely@;~y5Ldwv-yob>lPG&sB0r}zb=n(AHAZgT?ewk}G%a@IY9<$D5s9Luoc54h zL+ZP0I`^%Hz6#lvB-DO|>fV6{8$I$*@6GzARD0tce`5}(Kt1-=V_FXuw{Z&7s}Qgn z{f|jZTADupS`d@0Xq7ZO`prwXvUk!=)t36wDLMi_H$IJuWxm&GDd*yICW3VyteMyF zw_Le$EaepaxUl%F9}qmM*PbHj&C^BM?vf`>g?95NfZr9x>LW=HkyKT z*=ESF8!hbS5A8i^*_`;J#h#{zqG3vUgZfw~`!a@^a(3UK{(1yd*6P%F9lP+6@XJ0d z&|SG%mnrwT(wcb#czF!?Lzv0m0+;eoJ3n1aDg?jQmnb%Zeni?ofkdwUgA20$16b1a ziv61-H-)?3b#VET{5T*dtn|s}86j=O&y>_7!jFw7F8S;PKPYj^V`9W|*YLgr@fbz* z3>6OWS9xbJvD9hjg)pT_{|t~gs1s{q0-aV^cv%)*Rx6i_&JNtFjOmcd z^63@c8kEf7>7KRSoNn{+3{`Fpek>ZB&6ls`CIuoQ$4cCV$0~u}(y5YC zb^kFk{$7#fM<$s(+~b*Ns&6ko2P$vBDAL@k&}aEMHSArKC;SLQ!(#-k)nlbMHewLG_cl`du4#p z3PUPKu-pN@HxPrS*N?2OxJe6ZYj)5`jnA;d=&ZbGj+xn1NL%e|i5@SQy8q=(0>%kH!nw^O{NtzI{<+k_0jN*U|Ey&|eWs;nG%! zd9m8@Uw`yJ9u^*(a@eAa)RklD34YC-l8v+zt)abF{O4*I=IOAXeHO;|!xV;ZnL9IA z%SJsT=su{tr|>cA$31d^F46bd_QZss0yd2{#j+jd@S565Xmtw1UvSU4(kyJk(2%yU z!@Xu&(bW`W7mvK+$`j_+Ps04*O(qr#;SXIN*9|4P4s+MX75O4!$z%E&ZjMn`ThS(JfGg9ANO(?&a>rDiFA*sE?B(>4+AdIIWgak*H zXZ)|q+@k=`)bCq&g_{0}(FSX}4DqLjV zJV^ptIFsE`Dr3Af>T=zKZ-IA1lG4Z9QQrNIBJY3~RX`L-a2`ryWA|kC9}2HRT~FKI znfkgC88t4OHB{}UsOc>eQ^slsA@kqAKUBcCN{)Zc1(=B+w29GL7juTEF~;QfkhIIn zOEtGO#!1l=6IFzayg8ee=79<>m7v41-^!|E!6^-~UptN-j0?U7un9k;tQ`-0{VI@Q zs=%R6eWx8TsH;w{WZaOGPSP2+*Se=;9tSK>d9sHtg3E6^9ns{^H#56%sX)5hHX%f{ zC-L{n>2~djHut|VJv>@at6}uH^CRVBBpJMo%l*Jp?z0OCzciRL@|3@g&BcwYZ=GsX z)?GB!mYt*=wGEI}AMy4ZAj6HL zSyvlHl8iG#CcU?iPMJB32hU$?QA>3^r>pqc-r%oo^vRze_`V8Kkn-%>l;|@)p!M^5 z+L)h>)%DX@UT2d0Dcmn+adq{#Ao|p#o!5;+VaML{#e2?QE;3=EqL$eApq<|FpQJSj zuJA`F*6GRdE7bkJOC#t@p=$8c`cEw{jDI9(J{)ILWV&}~0b6w9RIt{Nzs++dL_u86 z*WKyL$++R-OqRStu3pm;?3#vB@F)*H&sqd=Di|0f3$6>BqE#~m!0WU}xDr+$j>kz~ zuX@nI5t?hR!|#C&YZO>iHtk^O>&a*j#<@!2FmUqOPKCnM;`MC3jw_G{C2a*aqdvvu zd#=Gh$wqu;B*hz^p~7&e2t06xQaWtyWe#8;{GQ~J@%YD2_OFp$FNex4CrA(4CIFY~ zo(JDJ@jpXVaqr5-V+v*rx0H|W_}9MG6u*6-7+MhA&ypgMJLW&Eg!ytFfgHEx{ZP(Z z{$$25bIa$D&dU3CBMD43M-^f9v$|VOsy@YUR#?1st4mXLtWtQj!i>ivr5XXk>=3O< z(<{zGNUWla_*Tqd*~Ln5&XHpRnb51e)Zup%1+bx!R4&rN~3T9H(4}N zTZ3557IR&Bw2Df(G%=UY|BYh)3uJU!V;->!alk+03=HVP&tX9+%nFjV!ybVLCs`3X zwSLCaRjr;J&LJa9=2}mW3`>n{UwCvhs!WPBur>U4z<6azJ}_HnVwpN;jNsJDpOolz>B?%&4h#>-}Y0^cy574YI|8MxkiQx+X6guvy!AMQB$;-MuEgt~Gyd1@Fw3h%<1ef8G!TFR z?bdVR7o80SQ-JzptBr1^^>vr1DfQ9fZ6`y2DZ7M{F+>IRI~npj#QTcv#cuX~Uk4RD z$OiAI>OSO5bdkQEt~WrdfpG(K{(hd}c23T&A$7kBWiWt>T898Em`g2R?ZdUC=zmO&p+AdbaCIL!Dq@8=`x8f7`OkJv}`{Vaxdw1*^+ zNb@}O^tjXw;c@AY4(={g4;4&PjF;FVjm-^}m4ZUauozy_WN}SN>TlTcD6P@!YnF8* zS){bNB`2W6G*Y$HY3XA*>Q2bw47R|0zBR3ouIva#f(@~esivH7sms&)t^F2X-Wwu! z26$WNbN*_S)&;CO?1rg^FT74+&=vzhfRh83E7mnoRU{*T@|lbAL|;oI*4#VteZj}u z5gVXVk)Rb`I{(3NyLVUjYb_#f9H&C@4sIVmJd|1(aFKoVp^-7Rdp>$*nAsI^>yID1 z!iIlDu1Yd_gyk!fp?u4RW`AA24yIw|0sQgiBq@q$n%|cOOUAGI_-%*dHIX0HzO&i_ zl|;rk)bG#rdP^G0e@^do_Nxn+BO)dD-=gDRlY3_?T3SB5?GmnQ`YNv2uJlhNN6Z1G zuFK=3Cqm~9)I3BO<7<7KfQ)(bY&iEsd`K{y$FHj(Ze1jjVUA{J`PVlR!;jGZ!C@b3 z{dd}p1TAXf?oIu((M1sQ25IT#*KIm|0d6))ZEAj3V)glA^7_$jpao4a8MU7BXt}AP z%WqZV3|{8q)S*Qdb~f>1IupFx*`__6=#HYUpu3wWaIa(+QHBzy2;vSLw6xsGr~(dN z1sG1>DC|JWWqztc<$M)Wx_%YTQ#8eo{LF>LG@Ad;1hFS;@jnmVSWjz6a`1x zz~UHIGm(6i+oPmi(&D9rvu%a zZ8cSuu|wU?q{%b>6->7v{`sO9i9>VHru95b2EwVX+qmkR)C62jwZT%*J^3S9iNos! z+=O)9+be0fJAx|_X-_vylXDH@zl*F$!^oaj(-{wAkp_s4DWr23H){MLwEW08qWsDf z*V}q|ojW9^MK{m6ZSQ#+rDJ=`p@nH&{q~^Y41H*me`i&14)`N1P<)*gp17uCX>FWg z=yU-J>wl!8dP}h*=Oh2H9OIz|AM6jfM2ThO*<|K4;4wG%iMFOrr%QpABdP9(${=3n z*}qs;sP?2HkunUP8`12FGyY@T!mB;TzgFF2Nr-^nSX`=09IBL(?}(eX95BStqZsJ# z)D{0)f7+#Sa9Wfi?qq>N0%v3Q8erIpWh#}lpvnlza)BpW`sw4U%>qI-(HQt@&U4Gb z;G(@HagqdE!h02Y`9VOzVQnVK+?6x&SBKz9+@A2~&Kh+T4_CpwUbRdaLUg-L<9kyq zcpc}#er`2zZpMNIyu{4jkl8pizrMlJv=nb)CiPKNDa{SF6s|Ba__hW&ea+dr@n@Fr znT72F9s>XH3Xc6faHl{lzrl6lPrL8^`A__|R5)nG3PqoYBkfR>wIPd+Khp&K4dy_p z`^zAvxW$U)i;eRU?0#Dxp=VfJMF(~iE3kiyKx6blFkZN3P*P5$$fRrpx9_8UA7~+u z+F484&u;VxOMMuSlmX*1fP5G@h)FNQI^VM(KdvWXdhT&CS9MsnE1a(38enhJ0yFBO4K={ z5Sr1|beBiq<*)wn`y#lFS{&Teq}%Cw;wG2Z3dNnrb29d^dw0RAGT5)IUInYULhYb& zBkP6S8}?m9#Ic~2C><30T{wd8TdMH`ibNrmP)8E;Q+g;db^^Qqb+A_E*7fAoh+p2! zHMfxosV+RbD=9!YJ^71aM;0wCafq6UPSi~69=Kg1-YvDvg z`_k8)5{!qWrH8osMBHnA0L}La-Y|dq`pkxLYC1{fw@hm~R}J=aSUU?FNXrwdOG0y> zQvC?JFk_ypIpn$`ejZQ5?QgR7z^jP>ndX%6&@_B(qca(m#<4#_MTtxqyret|-{4DLrx?*4e?No!u+ELe$Jz0>ZHbf*+(_dPFdAUNhwZ=^<%lsWEy{{I{(^k1p8+hZ4%!$XuPpee<|vTi4p&Ix>@yN!We-&%e%Gr1-CY z@vn{0?ydj{OWEU?X5UkF^R~D7!w3Bn=hkFoUl-yjFu#YNib#1r6tc)o;On9$`z|zB zw-|Ifp4u!aPA?p99%*DxE=)!Sv+WN%UVCH-B3kTSCaVqb7Vw>+A|14M!vEn2fT4>E zQaiL)$;jaUagzUfg#VoRe>eWiQ26f-`R@+-pLOBC2gCo@g8|CgR{E=hRORMOZXz8* z#wkhf=-SB0-e{7_WuiE#us)mqTSrak|96eD?iYdQ&jkb*qWQrBN*AFYIEI^&NyU{{ z>U8-_Ji=Rg;C!r268~y)>&R;i(ecasb{pB=T>@ocY18n|n+@E7N88)=^;X2IlwwI2 zt79kcH|t8au!+2#;oJrrvuI+*WdH@()KCeG_q4}Zv4v=dKtmGx@A+~mgF~=DdFCJ@ zaSJT(E0VT(RF=K#!9@l&7~Sj5fXQ-Ru}Bk-Q(mb{7`)=Xec&S}6!*fE!$r)w=Vs$Knu6~mKXm_i4!EIA8w2ca?2z z0ej~=7vrs{UNa`?PL$#nNAw|JOSkhW7ri27mNq9L!luE4AM~;@_a!I5mlE73V>O=; zaB&LlSJ3GJz3Q=n`|JoaOn6JX_A1uMqU0Q03>$X3srbP-_;%x&Dc8Dj~ z_N>Z#Cz7lQbC?&vxy+!;A)mcShZ z)X^3pCHxQFag`$C!W#E@>eF%+3q|}7_BIa{QAtr5>Ig{yy{#%-g@HCZax8hpZ6_wT+hr?(CccIi*^$qz zwROxHKcuI-1;F+C-eBn8Za8l_ZMNv-oN(x~#rDLA1lmJImd&I9 zoP`e3O(BXwwz@4@D)Vb-eXH~p?E#fKGu~Ab5M%pBiyPh_2S(n{pxc#$I6b0iXOFF>~U~fHm36`LNFpFO}I9P~AV!y>i3gQ-) z3cKCWtIL}#hcW5rc3wmqP7IQ52?*pmTA5=G@{_A*G}Xt5X*U}17gkbMV}$y8 zN+@?5laM1Hd_>daVO+<%L~$NmlW+h-zpZl%XH#i{kBQ+p71B%uC^x~ZTP~quwW-@_ z0tZk&Lia5=|BSow4%wMS9TKNKQHJZk7&~b_J?TvF87iFC8}X7m9eF29NWO?n7{_1C znRjmJ2%N8w3dL&7i8A4s5?3oo4!-c!-!-)LZf+K&cq>g~WLxeb()a6SA2w^M%*d?J zC8$uu2%^05@{oDz@ZkAmx=`<;V$ZN4M*xJ8za}mP#1>fx*mU19KfLC?_rqq=rO9SD zb)Pw?__ju)|9tb4257K9h!1#-&CX45Zf6AuY4@$4^p**T=eZbu0B{thuNEGxdYHpx zS?Eg>`oF2#FMID8>I=Q>S^qMa0kcTJpZOlPY@CkydIgIZZVuNa+MJxdX_NL52hF&+ z+jg*cqgAE3i~#+XmDO@}Ml-g%8sY``*=A-s0COR2j;BMTHI;zDH+*q<<>^dX7sin=bZig1{ zQ)@AVFr=AffX!4}BrGMD8XX^P)b01x-~R;&5TM-}qyXc!<>c$|LoJxpO5Gaa9^%?(-Jb67Iu6PBCeu*VZ7B=HNd@*70JKx)vsi@zJ8htOk91*9#HLv=vbO- zw#dEk3Y4fg@)yWnfX|nP!j0nk32Xj`bvFPd{Aaf?zaWr_iR(yh6v2RWU7OG!#4e7% z(Q0%i3>u#e(~>3!VYG94-lc5=HcD`&t<-U!4QYt=&wn|f_welTdELgqz47i~!Qb4k z>zfBI^930nB_5-$_GYC+rELt!2UNE5DjMSY zN>IHehvfj#TcwX7r>ngIwvTOL-V*g0GMPm|wYm%?N6}-*hFwtS7f9Oz8-;Ix5(qmB zHN%_i5FTmTsv(kWNb*WA#^nMZI&cu z-Y@0KEc}8HZ6)0D^n_Ky*zz8&+|nRjt^17=_Qi$ z3ECHv+1-S$c0!!jZVUkqL}53Hrx5A@WFK9)=D4lYsr!*|&XaPYzJ^)#KIf-^O%AYqNrp1R=RH z;$wSxu^-f@bEbjC@e-eG_UI1u)2+NL>D_OQL6&M00z*bP z6TO(Bjhuz11zBGIrrWR=s(U=`l;~MftxsBgjA~&;M@VCuEDw+8TELqY!N=N`ehf`i z-|n*m*oX_7Y|0o=FX(fyebdG@KG1}l(;EQkqe^fLfnke@aPGds)V8IC@i949jae9!(P}GUY$2@4FV^hlpx9>yDC;Skbp~5 znzjs`L3t_fUIOPHI?3P3Ps3T9UZKOuA3yKM!^)|UMUhAw>0wY0$fRjU&C`2AES#ZJ zd7CHT`0-8cC%yr@5^HUshBMt_-N>6Y<2vlM(1*UXy*fz(R=u!nWRW^7IFL~64kpM}%cW8XIaZ)Ymy(*|tzDuyU!)Wy(IBian3 z)7Glrqw>_eLPol@{*Dp=$n&jl0vT(iSvSQq&5nSwBij3PrEjP+Lo4v z!dP&HT#!Y4%ZS)7R&znkVM%E^`feADrj+QnHov`HuBeTy9D;35)>HR4uo51*5*uel z!u(9jkgzSb_#4L-Cj4L>M3>&%5W5rKuc~YAN4m=bMKf6;ST+#MZBN}F1mTTM_Fudq z4awZ37Gu+n)-D6qUp+lpnEvI3V>F~Mt7f1Yz{WM z?RH`B!ztF8C5!mfl`pGGL4 zU(6q^Mp_cEQCH9+>D3K7l@d_T1xn%rHzOxs-0v1+wf>EUUuwqyjQbN1Y%#aGV??S*;oi32&K=Hyv?fK2%%D$m9rL%YIHs&VP;yCnX)1bu;!WmYJMJlbggS9>FE4zEjI>yxRBO1Sr2_0D(* zY4*)ko90A+kavOz`m!DVR4=8Oak6+-RXJ_TY8>Ar=c014DR+#=BL;LSFnbm5#5&IJruk$1fYVcLe&B2@3XjLTWFWg#P_TBJ5aI z94kZ5uo%63_!<_r^%7YHq5jgt(hCqQKMWLsKMD zzq=-9|{+wh=)h2)TwA7f#0XXmNOs&Wgx?z9pS zSN66~*m&qWmWX#d_3yfnSiU=CWTdB!xJ*-VahEOU8*CfRmqxkED2 O>xHtGQuTA|u>S#@O1N(T literal 0 HcmV?d00001 diff --git a/docs/img/screenshot-light.png b/docs/img/screenshot-light.png new file mode 100644 index 0000000000000000000000000000000000000000..54612a51711e38b5c7a39f8bff463530589a8a85 GIT binary patch literal 50087 zcmce-2UL^I*DtD66#^o?izuQXy+c3+L8Xgy2u(nGhfrfcdb7~0h=9^UuYrWFRFM*D z2tTF&jri-5ENO2ZPl#S2OX`#oz549t zyUusa8Sk!>NO&)Yf05UeyZtbN?z(%cwmHgVwgoLW>+kS%YEysjTP4b*1>KY$gc?Km zlm+q;AOzZ{^yjpv2vULoVIFd70mkQ@vnLXiM)2Ar_Lki?2(}MJc4t!(ni*T{@U&e% zkg3eHf^Zh=uyk;@8@@e58t>*dAT_|w%@rH-M?44VMmP+F6VQnHbc@Vo+OA#J#QA8* z5ogX>YLUi{>f;TpJfg>`qr8%_W1UK;d zEHnPM_YPd%^_co}HGNs+ARE$wAUG(3;vtN}rvzzm&=U1d)v(Cf)qZ0!?(_X3!>!Co z-kGJ{9(-pkqDx#@F`9Kmt)W~5WLk@qcrX*RUZZnfmMz5rJ!rM(TmE+L#Na3wAGdX` z1W}BGSp4Wr8`&UvulvM+F?|nmns}~mX9US%oE*>f+8mCYJ&!rxgq$mFA-D-@@Do=O zG4XSH#$PGnx2l>;wf+S#b}hg1r>D8b3s_co_0_- zU-T}4j@A&UDtm#(TO=b-5ZobeZK*GwGl;9yF|ry`fJE8C__rm6E}p4K~vqS|A2{GKbAFQQ7zm#+BbYi7Fp1VAAPWhr^h9|dh3C}TSl_Qa++#6l%hv%IG=Ynkm zRoDjOvAE2W#QE`*$1?=%azpYKr|YhnSWD`K;QS`4ckl#oE2UCPPQ-NX6h6P6R+yfG73<}%l3QX@ilJyG@5-D3_gP#VR zD`zSAbW03v9>;TUjiDMR8pSD<%wn|^IZQB|hXSta-;nE!=?!NlY_5}z?$rxquCU(j z#8!O4HKn=$kLoJcdTiZ7&puV*k>A)?GSHosKcTLZo~H-)b@^j8YZDUN$Z6A=-~Yhs$HCU4tIZo&j?0{~7CIT41PX4I^}~aC{kkS}eBvlp5vw-7*MU%3fdfJehrJ91?FD*fY_9$Y%lr+BWRj zzQ7iTv%h$o-I(br~yRTVZU|P<`b3Jw*^16=ac4-gYp6{V|X*g@+nkkia zF)?T`-h6l2aHi8&T@Z!&06iKv)Ng30`K`Ux?MX&=yY{la-t(J(9v41=<+~ou z&F_dQWAI;ICu?|UZ0HXDTDQAXkc(MJ4d5Q0AYl)1 zT~~Z-YHWM>$3iK^YJWe&{IK%dSWW58UMAO`;DpRB-&3L%hIm_auKS(SOCw5pw7rx> z9&mqnGBH9fE^9Ft#vf*ObB2`!#x@c9NH-le9U;0xG44b?Ikj%G`zpbN7A88wHtr(F zCy8-P_`w3+TjmG%cO#t?4$4eZ*%Ky%geE(PXRgDiwVEo|c_J#whdZ(s+c$gIH-^X< z7v(z5B7uDZG;#+W4s%j9x4$ESt<1O7-m^e|;ahcgThi~d`ri5ORkv+8cW|nQ)4GtX z%A|I+0k%g<*tLvsLpnBLp~&KHMhfi!OL5KR-p>b8{bDJ=?(Pp1vDaPfsQsAQTt`V@ z{)pPVIT`J|IVE$9WVp|c+}ZMMkSk?i;#Srn$_C9uNB5qQ0{zM88a%Y&p61(G2XU^R zycl^u4drWaB`!ti^m(f>QJ}}0+En81C7-nXtEPw=Z=)W0I)~i0pFMQ&FZ|UZe?U6f zaWc|u+>mY&n+tj>S_TnmdRRpDzFTCi2mqQwvfsLCN&za#ojYr3d&CQXH&v1J*$kHo zRA}dsws_1E{xl)k7Y<8FU}FT9gLEj-GQ55r;tKVf*~Q0Lp5*6KNqf;?4fZdef(!K$ zW^SsPt*|4tg^L!J2E%$QZ0}CtN7yryGN;52u=^*nhg%b}GfbCd>e-aeM7P;M&*(V@ z^7`*<0Jy-KJVGCkB`JWnG=5AcHy&Z)v+T~A_Sg=1U;jipRaz{0Ihn!49=z19-fK0= zV!k+Yjk$Ul$?-Kd3-(lQ7iB7V`l$#p|dA6y1qN#@69mLCQX=zX9BcNclVi2 zCFFI{qrN*kk7r6<+t$Nb54T=Xx*`tlxUS2*F=cOUD--VR$8jYoNkpHIQ4H&}Wab4v zd;lRxQU}71JMU4xhX{=*@Z?U zGL=jsxWG?bTxVHNcUOBFjF*vR+Aa;*HB?Fl*-35ts?Zw>Bc!BEnqsR>uHVXr@#tEVH@SB?GnS=p0@v!1fU zN}D*KZTyA5vL45iz@E=E_@2aT9#%FziI|z@UhHK@g&gm(o$mIV$a<%PdovoK>*K}F zr!_Y@m71C~aXc4(D<*}G9L)}CiO4MINzNQsoZxlxwWWoD*`}e`hGajodd1$Z_45g$ z6J-41;jf9i`S+#I@5w>)-I}K>jZxgR((?ue_go8t!%V-OxSwFnX3%C)nc-?%*h!(8 zhLDa^&|m+^&+d;IJD!(wHEWH*osn)s7ULZ<;&B@Ur;s>brVE9mqwA9RAHUA>w;%pOQT&aIS2U=|Ko)bhe>CiClzM@x0z~4Q-GxY zZFOm`)NtqjG|^cW@Z`k5&ALexUsd^U>++8E#I(c^2I;@vfAD0iF(megx8uK!R{rDx z9<+|@j4pnWl)}}XC-&clXdd~@1fGpA_$oIXO(;2&IRO5bFw?URx>Ur8jh)Z^H#z)Z zPlWLlBL6k~Y|H=Qsm(%>?7;sv;(P`*e1!GCO}-|&wC}&ouloP+YX1MWZU2vfn6AL> z2eVlH*x1;94i7*2tD`S&;`hz|u=-6kO^djD{YAd~xBpj)X@j{#)XL9k-N=6sFmZMM zYBn3GurBop?hbAF-roEwt)f};N*gT^0aF*&BRE~quDd4vyti(#34i7Qx2!mqJ$hCN zxKkwmU@5U*hh%dxc3@>HJ)ti9WH@;KvxA~;Y2(!USVT)TTfH2Gh&xu$^^Pz_)p~G!0|ag*--A*}Yf zft+Q@HoSO{>j2biPt&$@zG)et6=Sq4QeQ%{}|+v#)JHCv8i= zT4h~t676UQ*f?ghUgoC{N)gpO5bcNl)}ePYTj;O!(&Z9*@=a#y?g*scLT+N?<>G zbB@X)m0^4ONnL9sd5Oqe*eU5VqS@2%tB7b zX#MS(@T!vqyRTt=+r9Dpjq{i=&gY5MV-mCbluAXdG2aK zf7!#}^Z@d^SLbK-4nPJp4dt2*9Q=fpbkQ#TC5|&YxH>o(L}Nb}6}D5bjJZDIDbZ4! zO7nS7)|P$nt>miMP=4(;35DZ`hwsMDHZY+GG``;P(DoX~2>RzJ9`x`ar9Ro#A|?!% z2)7v%(B`~nIck*&foL74OjK_Bvn|4shUJ#y%=TuHR>c8ILHKLE3i-@t9M%J zyuCR#Uj~LM6G0k@8>HaHh(K6XQ~zQt?v{Q_ogmN>ANPGwm@{viH<^Y_~~H8-r*u z3A4YS%%x-DM3rL#GvB{f1;%8{ zd1N3LoxKAY6lPOOj%0q!*!v{~mU>T~;fJjLpdo;;45~#LH2l03=p8n%sPattEEn2! zuYvJ!aCP?7S@d02ERJc1!nH16!HaQeFfG)gH9bsfB#3ALw<4j2^`$--U~_>nLd!*` z<()tuW7eIp_|xmpFfCDoZztVv2RW@4>@9Y;iSm-Wvht51oy^K@C+}aS z51S2f6}Mik7xKtF2feyYoO0q2%X1dFcPtiRfpsj(D|Zf$TUL(y?nqKgS=O_KJ|Kln z$)Ai`DgSvGdBem)o)4tP1U@@?k*!BuJXxqC)>CugaIAvOvH7y{Rruc1(S$0VgIV{S zv4eYkPkgnKcWe!n5g~}sW$Oy$iT%uInbK1VbZs7q+r5;iyzh4XJwkkJ?+dr~ZsC=qf zpar33CtCE6j6nzu5e^dyP_6WM4QMQOFC+L0Blz5tLOYskmc;f;=u8|@TZXMbTC*u; zMM7^(SWPehqMmm*tX~=Wws^G7ZJ`2{e)%kn4J@59PZ{g~Ys@#O#hHx{_~BKnI}uj1 zMY4c>`e>x_iivgDrFDvMqr@lg7z?Pn4=faGC=wjp^7926vbMmtsNik6V;2J67~E}X zwR?UP%E=04A3Of(Q^C`YG>w#|Bn9kz|biH;I`2+ciKL1=%rlX(`$n{^cy1nfta5aQ0CzE@K^ql9pN(+4-b zZD03kxVu4C>~rFMwUzrcU*3rFMXpKFDs9N%*+MN3(%f%hpxzNb=SiK5-BUaynXU#Q ze)=4f6-H&Y)MZg6QSwiVCQjWXef3GGLErUYvrc{wcbcbdp2&Xh^Af5;6VkwCjEVo9 zrOF0Q#)^=G&Yx1xnZ$L9tX!dCyWkKE${Pd~&*N@thX$?$zu z!!*%Rr2M5^%^8t>g)Dg|Nn8e?hmvya=XCT=tbNCpiQJ62b!%ThQiS@+e1+Qbc4j>GLtzD&&5f1RE`g5Bru$e-yl~EdOOb((OH%Zbt zdPY?YR6Hasgtr{a5T-Y~G!1(LY~KW)$oQV9fLqBdmRS{eRp0!iP^yhM{3cept~DY2 zRob30>bh~Heaw{m_H*H&GtP;Y0>v=Cc4mGg`JpPO`a|ma(su~b98&97wW;u)#tVF#mKFM6!xH`ZO)c|ezMh&>~{d% zc3K51=J9}@jIuA=F*PJ5OuyR=+SCmJk&5r*qd7g zhq$ktdrvvN1v;)g+t`7pwlGj{#^YadM4@D(^+*2s5~%}YUpAA5DY zJb`;pcim9iqU~*-6eFbf;u84g^L`91jCe8aToBXr+$R{$Q43+rLO4}Kq&zk1$!;_k zT0KwIS!e0sY)oc$?N@=885}%(`X+YRy@lDFd2E;=ZiiyN`Bs2N@Hmg&p?ca8!S=XJ zRc+I4!eJt1mp6JBg|i!4plw5W#4Wo_gX%>684`#3TNfQ(Vf zi2Z6lXM4*5lse)NO!Hr;;S3>wsP?!A&RExS7BvO^$nn^^*!*JDz}72U(&ss^pP_9#m1)7DzFSO6KPyD1m33ugeAA zxIi8Zn%5bHq_KbpIMRn~F4#+5np(hKW^v`Q#qNt6Y>YBDyZyl@P!RAk56?^B|@kcez8?|%tMS~CSFk$~VH-hmTx;~(s`dw|(L7{c0P;wSmt zaJ4jWRG>#YVy4N3UlHY0S$=u9PT%sRTi>WMfN^|T3TY!lz#I!LEQAmKe7sTZ88Po?BoLRor|d;7F~z$S7)9iJr^?pMa`bILJp|a>%1~aWI-`WLE}A+Cehg@kzE2=qn+#_!wAsg`xQOZ) zu&0gtG?8zv0V#_dE|MSexCAngcA(_780W9<@w1uZa9OtwQ5Pu=;jXr1ywqP}vFV2t z=x8VRb{pVZ;1 zqp(65E&NQ<=)9dlqY1*6V^%>Xd>)VyG&ECcH+!u0swLDyDUJsf4tT2c&;N0dCC5!A&6GTd80E7CU#drhl z_x+tfpqA#eLZTbfOP+hv7Nj_23Z(q;)QRuyD3=GNPeNBb2-%#Jv7-)~qgJ(YWyc>N zz*KjsB7=KBjNBPaQN?}m$+y*np~_zg4UqDV@lnUpwES}W1epYrpb@^5KkWp@v8UHZ zIz_+M4#+!oDoBoQoTC?l0GOUIbtufs!#p^{MNxy%)Qro8hWSjFUR< zqn8ss&{yJ3Fu;%ZNVB|_(=D~J1!1q%=Mr-eG@lS+>u>*c6 zN^~7ilTEeHf9$Dp{eo|_*$xtpj4b6-g+pTN5^36tC_X$@XPep|ya-TWN5tFEQ)qG4 zG_P|8P0acek5dVaj7pBKv$lhP=c(A?ABi?&x;`fAY+RWNS>T;aW zqS_Y$)pY%c{h+h=GmH{+=WR?CMdE&~lmdFK<6EgoC(t^J`cp^?qBhG)Y6 zhJ1B)Rgn)r)R5UOTl49SksM%52f+bN|MYD6{+A_R0hl&tk7MOJ>8jKGuY1lxRo6l zTdH25vZ+9qlVn;;TBwljvE`J(7ic}FMXMtDN2cXGln5-SY^6<~bTe52F6(~{Ehv&A zQe$%>peJ&#^<`^$2!x2$-%~U@$meTbh1=J!1g28n*ZUnFx)z<>QdK=KD4N7mbD#N6 z+1Ns@C)ZHO7m)M!gU&qOz+^rdfj${8KmjcqG1e}v&A&4ylJ3=8F|$`)b=T->$?U|r z7URMVt#Il|BE@-Tyq;k@Rk^u$zmzaz8k4-cOcy3@w|RRT?TI8#UX~zNbCR$ zQBc7l@}FlTZ?b|Bhh8EV0q=M^qPq>I8BLnBEOAy*V`wiIF@YLJ^mm4(T$cDLkm<4| z-Xit&h}7-ZqYlsK-}Q*-N63#`rQ|dkwCmkUV}D$acMRE%7sTguEzQMnO;#8BH?g7X zT++mkjDrFO4+)nUdbHcV%(;ejoX_=L)9iaYnoLzB*jTaDUrVC`MLG%kzhfp}^{3Vo znpa9Zqf}`)Qz0%x&P-QhgG>c?IjiFkj4d=d$H%GrUD5L6LBva*4duvf6N;{U8Rz?3 zI$>KU*0RBuYQ?@F*}*QgaURpFTTviO0fI{}R_1ex@LM#jjhJHkK*0)rfD0sM3^vMF z$k2V9uS;v%d@Cr5gd65J##Y!{ipt|1F^te3)}Wij3Ee+v4tfnBMq*SWORI^Kqd?1J z9{W9#%ld4vM~o7bNCyD!;1%og+9ZZJz(wTh%o5wF_avL3$ddrA-?SwxGNkqJZ-W^P z9z(la_kJNy6s8i`=bUCJ>0G<~^`GC&k}9}sn58tl6Il5wxv_rM@+Z=C?xvHKbjnxh z58rBGCxLN&_kpnIA_gR1%QsL+7D2{t5&2LgJAd01D-~kYMfyOP=IC8?+Y%9F&1&ji zg=gFMhH4v$%dLt$P%_JB1l!W)9X^AbDxG~WQNFLvHHz-UoW{D}1=9A!rsI22@5#}z z_8EIhez=fg!+J(3d~pGlc0pVD^xfK*JUShwVfu+0ZOTppyPJp?F?Wc6+ps4iOGil& zq3f<^QUPkUA%;;m@gUffX}#x@VdXt%$4|_}cFUWT0=N?1>bq;1hHLGG&TkKEyYGLK zbU*8HZlHO44IM)y$`G#%1ogue*>9tLA&cX}(}kns$6=L%0^qvKJ>Dl%k&1iGqZz!8 zA?shqQ+j)0pVG_N}s(-|Jr#2@HCYrPxEDnO#tA~1gfsNwYavA)al82o0X zr3G@0%RD8F9_?G>pZOkfY^)%s95-{Fqo7R>PKL-jm07YkK=P!>>&5&we%|B!orM3y-%6!nv6CoUm6i~H#$7`oRYq%l0Yt|G+AObFv138ZK zCgqj}o$u}f&pB&=jgFQyGZ?$6i?eH?lt2%h#qZW&C!l(Vb}nTc`aBzB6dWVuJ?b*a z{$w87Ty5i|>-b&o{MsY3I=E%S`+>k4->hFooWE|b-02OVg@DOCyw<)l<)L^Sp(Pc^ zdXy$zzMMssd-|f!+rN`;BHxgj+UmGHtj%W+CI!AOb9+3sSzNLBj*Y-e4JYkUq4krL zn(C~~=`pUK8kseGg9xr8NpgNqZcQS= zoE_5@y(V`%>S3u6LN4#>-8f)z0{z5cm0gRMV`Vj3$+6>3*1%XP_J`w_#kwEteX1Pb z@SN(2dxb~!XRjDvNM!@Kw7)jnK{BN`kZVw8k|9Q0D!`;*fbU_Wt# z^WXeeF6w_y{Qk!*>wlOd(;gDH?$r@I?3AI%_V1UnR>;v*17GDV|6zbjR7`#Gm;NE4 z;q=+a>CK0l-vH!311l@cF!`TmnY5-3K(lUJwSR?ZkJiHM$?EI`0|(8=HE_jGLUgaP z1ro^`-#;0)Yj@?KsL*9Ia_1+EujzoTOgoWb|A^ln?TPWpFWZwa(K5_y_#RO;!pYP} z&HbOD7m*GskL-Toat|0L<=XY!B& z-k;{*5mRoeuu|xM#vw|Wt*U85rO@=pr6P4w$Fpe!ek$@Wt(I}bWLsVP$op#~s_GVd z%z9C>2Uxh#V?%}2nIk3cBImau^4>>H2_IwieJ1|+ZrQr9a&Tl%&CJukE}c$ShL|V| zK`TnnFt-%`$^X9x4Zy_zX9*(zclYaml6?GsZFq;zzoecRvm`2qgxw4jiF>482B@22 z0uw7N`BtH***B*P*RmR{Mcp)BN47LvUtA7&u;egPi;Z$Wk0@ZiTYT;P+^DOl8`&*I zL&cdH1P8y|TW(jHPeHSfHH?g{Dmlo(JEA*K#>0wP>zrf(SD6;q!*bKViO$d!N_4pi z14Hts${uU3hU*!OkqnHs6r&JTf#vtUt5$QuVdK{)@;^#LZr4 zJ$-zn3%|@pRhqOXHJpy(c?ot!xa$L}o`^%Yz*Dq2l;~ZuWIn{}4=KbwJ5Wj-SQZ=? ze?_;EYw%A})Jy5UN=W4bu3sN~WT;1d;v-G!M&-I`PW`e5Q!J-Rh7LrH{W#y}eA@Ar zl8JYtVJjG$2)o6309ZDX+Yxmdf6=M$R1}NMj2ZyNE-J6cy^9FUorv??-@ZXNd__eP zA7I8ezT@>zNB4a zw3S&9)gmJF7_(hsHd<HS!^BuY?#vX>$4Q_J@Ww zBw#4ndZ+0kkiaR$?WzjX-y9jM=AX-sV6+Zq_p&@N7R)!dHzlugW5Ah(?==EmH#>st zkf=Api({Meh0b}Grv@lvj$%IP_A{y+r9~s) z)DH7~{4wbU)ima3s}u#gWW8e9aj+Q`U=hD8UqRdLb!S&PzoFrJmwnSBj-3%gvcJ|2 zh~0ahL-9L_18QzaITQJ@)<4Q3GvUYyfm|XwsZsydeYx1ha2k$#_mp)5bGMJ1*wvoz z-_k0@=C^$JDjqqb-tp3E)I8yBD#Lg8@-vX-zQY!pw6IRdXz3)b5tfnr?zvS;YLQ%o{*PTyF z=2r|s@(ELx@LZs*cqo^i(NRw_0Ps2Gs9|Gv2D*)$aIUttqn2cwe$S13wbz zF3Xj1DwFb>G^uGOe-rg}gsp;b&&G0Hb*tNl$CU!7x^=Qs`T1q_Ac3PlSAkr3Q(x_7 z11L;iybzOT8{U@l9XIiG{qR#9UM2=hEb?$W0~Un+xdxQ>pX}9G=`jt&FS!|?k6_heybfCvV^|I(6 z!qMR`NQY_c1ZAam1`=%%vxmDjf4yb32{|2a?Lpmy_4|ju?_*Bl<9I3$t}qdJIAt@u zCiVtS(yo8CUw<@SMV^LV0A-DqswJG_1Gut2qjq0%**(zh_y!4?dZCfl%DT8vE68J1 zTvEG!zrXX8)GllzMyo!hjP`Iq7(5c&vN^)P+Urc$HpG0PO@u*wm1? z?VXH>{E3#B0E|rgB0gVLYB>zpV$d+jiUgG`ZdfE()2Y5{M2;BEy+Ugl88%-aHy9f_ z=Trk=n>YSvu-i=YQ{0+N#C0(2H&K_5bu6h@*Cz-ue9j5(=i8|c&lv?>P3Q|K)tM9? z1lr~XAxOB66qPZ_R#Vp8<%X7Hyz>V z^>QRzksQodd?VQM-og`DF*vw|hN?&y>2+s`?pjcbt9SGb(#C9w-%*>{9NSKpLn^EK zKTA9Y3{|%x>9DQGKYSi^K5icKw!xT3h1W(b630Z3lBYFlKghQv)**csy?q~QIF2iR zLsuy4i6#9uipWL7X8iI7w!wPlem4~DYwwt=%{);(nR_@ zAgAjCxIm)Q$mGV#Jm-sN%Cx=J<2Il9d9JtQv$Z{(h&z;}a^IxveM;-eIU=3U|I-Ey z&7w6}K!5A@A*;tKyi1@g5*T?h`8cakRoZQlL<3yk4~Ov_$aZ>TahL8Y26;TP{BrFA zA+o7|z5yAPv7Nx;558-46!UiPv3|$@p-l^D0!`+v&EaHUi@WyJXyTCa?kzgi ziX})VA9Uu{H<{EDNvK~%@H-rxWZ#hWm}`O1Q6+%TWYslr7JJ#0uAFraXMZJJ%eb|I z#G^KYeJleZLjHI;M@1v8iObk9=|-f*D>C8oUL}*bt0P4Gfl;kh^j?J3Q|BsblS)C7 zqN4SfF|D;~zol$3XUeUDi6ZN;F2%?!*C5WHafilKBL0~sVr>_A)#eJR+o#)BS6ij1 zhxJAEvb*CTS5B@2Am8h7QB6zxlEkEp%ck3WL1nl zZTJ$cNeNIoj2s=|Q$;YiS1Ce<)>$?;&xNSO)V1u0I&2F}lm|wIPf+e57MDc<>Z2Ks zw*Hze+XI))s*5hk6XG(Z1^0DD-aclP0_-*R0vsY9f(xjJqO0DNwxlg0j5P=K0<`0` zJ$D!#Nnk8_ZFz`41Ff2)V}*TI$gGnawgc|&*{gD=J)HNyvlaEBn4~AZNw!0=y6S=# z;QqB>gAG)gjTladxm0f*!J>Z?u(&)uyabHh?hglhcVod%*%?l#wwA*5@GF_qql+23 zr|%oE77$+3y_3W~u6D+*f!8~A9UiaPmxj_pWmmsbFeloz*SabNbZ!&mP(y4<^8@8| z`DUC~ZyDwMj9nN@wD}bVvpjoW-R47B^^j$Ij47-jE~ZQ>?}5WF7?bsxm95hBV3PG2 zB9?t1^zx7%T!m}ywEvpSsO<*}{|TLGxtg=g-F7+IPQ%S)*S#5qxI4u3G>-PGRONZG zIOCz5muwD0{=I&qaO=sB&Tt2pOZ)Ldt3!c$QYlfC2Cw^WjIyusodqy%54|3I4`Bd| zkUy<|(Od>Zx00N$#}+iW=&tgx27+ye)}NQk7VHil!+oM4Ka75T;y-@KIeW8Q<|jKx z8bO846TT{!)dk*&wtN-_dj;gvFpoL9WB=1fe|Nih8f>~g#wgileYE`RJ@$Iyn$Kr` zT=0yv&mBbupU!Se_64I;s9_w1=y@hZ)^5|hcal{r%cFLsg|Hyli?AR!GsQKKw3b|0 z%k*VVd;DMm6Nki^*h3=KXnKV?E6NSTFwXcJeg2kzwkVF%36dc7ihDF{{#7Bq-y-n% z`;L*mUj-1q=CPClUf_6dCW3 zP6f>1)(_=CjUMVk2bk)oie_QjkP_~Ffd%aKAjt{1QMFd(sh)a8P?epcXR}DZ7Y1r>}l;nz=FK=(Uv3#qX{a^CkZ-(p3b=7jpI zufPd8FGdC&&j3;9VQdk$7&B-CFnzmQ+E)Iv)?u)5_jMyXSHA54N!$uBR7N%{9m1); zl_i&y=8&t*8G9Ts01fI75Njw4wCGiNKd&IK{wwrk=PBDZwT*hNpiE34sH{ydQu*|l zSh_0lTxHxAGq$qsre+E`R6=^nTBI$OAGBj#B6}vne9mqiQ^fT}8jbUdds~|(yC8wUic1HIjSTdVTF;j`Qj(s) z?FsSlKb4-n7l`MB zbLJ;j)q0b85CQHuSCMOz=c6hXkDmCx#18_tVAoZW{`+g9L+scXMWd*zu;uXcgt&$L zFycVnF<;3+sI8!hRqf2e#6o#?aP}d-i##o>fY#XW!b}08*NM3;V6||e6#+*jI&UZ-vQw7au=$<{-c{tbYouFc4;FMqgO6YI2l)ZH zPRAY-G0Y8ax$Fu2{tJyPA=ld`Q74`I_79$z)q-<>?I>8;K5+*U4I8s9jUMv?vs)Rl z>XxbZ0NAALm7hG*vzK<>X6>&*+nO9@5w#b)4q)@mnmDa%_~yW~5hzI~zAV)JmS`p+ z>j5~M5aP37A-ZbxR2+v#Db&U++SqAC#4F*PC2YE4)99XCM$#XLnJfxRgVn~#8-~42^OXN zevP=x6coPTrO{~z^XDQO127|T6G+`)>^XfI4y}9~f>n9#i;@rI&HM!M&kgPXl&`=S z?j8w!+IXEl=c#f|VQMAr zVMeJNV5Z^rfyd>I;CjIccJSVnC2fm0fs~E;7KGAs&+f!&i63~I0F z_mTEg`9A8RJZXpD5#w0?lv~E`kGmmy{-$u>kmI8-tB*yk)p)C>aXr!HXLu#boM${_ z8$NpRyXzN*~ua(YHuG0LUk%3RHzF1-}k*k>Z8SwPv9+>`^x6-AP#}CHlY|(`H>m~h30|3MG z61LtmVYY`;EA%a}XR~SQLnCr1}_t!l$NtMTmLw=mj-l@_vu>e6&hwB|Ac%81uxMCXv9H zH?)}LYJl*w2VW135AbYZ#cU6~FG~Pq3#a;S;`UhDlX%7;c` zlgh8(QMgdj*5bEf#?m*E6Uihb`w|NvSO1*{dp9bKqiCy|5xCZKupq13YNfz8yX-b$ zxK}NqO%<|yOWq>G_JNQANxAP$+-x{8Y9Zbm|F;ya@*?LcG@3G{ql1d0(XF1IgDy3N zZkcun7>BnE)4;<}S|+fb`*@)m4ljKa&YrO%&g!Sif9xb1WHDS*ibg7M`n$Ut7uy4wx#FfOPZ)rpNK0`#6p9;2@P71PT!q&&T11r z%lq{WQ_L$qNs`5SDBeDiUZ}Pg*W=lTc5-}Jr{oP5<#oL>exILi$|lUze?TmN>T~ zWolCnyEGVlVz6HKfmz))Vy$%wsy?|~#?gl+MH}!~n_t0bF|xbXVRlC1IIKiao#WRK zcT@48g~#)blrd8Gc?IGm@T$J86d3xst8{Uiz)1>&lMC=SNDQT`j?B`+7ZMKTItRu^ z?FI)_-kZ-jGYFlglfqayZ*Jx%_u}n6gQ-MCg)GD!!@gF&jQstg=1DStw>=eiE_9fn5Mfzld%I1bV(9d3T+rpQlb^sjo>Y6*AG4{ zWoem5Q7XxOW;Y#2!PQyO8bZ}1PMsbsi9Zfan%$;s;1^WClTeHcd_}&*{k@t$Q)h55 zIHT%~PLIQ>b9T5xue%l0DYUW$xQ{ z_pAx^mGF<*n(^Aiajns5p|%wIAw-ZiNQCWOf2;8$ps5kvt*i$>a(^QprUZ3*a4mG| zwNY!Uvn$CZ1z75KSE%{F@-i^U2-?orinhDR%_xfEf4z(5Li)ps6HQVQg$GAbl!?-x zBM$OaG?)@SnItO^Cei+ZY%IPPaF6WYQqce9CCdM#_lW5tCHev*G5>2R91>cn)$pF_ zggOF9bg2yID8fxpqs0%x+ zF-i*S(Z6h}%gRPfzNp3!xqQI8osGvDQ35oI;Q1h_C8aHi4<&JZ#l_?Em3Nt}PyA#3 z^Em!Z7}Z^esr8N71+ktha5Y%~A`i4XvJN@2L=>1N-X9T-FM`Y>phs=9+yW*|>4sJ! zR#FW)7Un+caUx#MGGtA&o2w(CUkZZqq6RLm!N&Lu1K?-GTAL{y&*BaRH-=6v3^25T zh@hMjiRjt5OM$*E-|+1hg$@PCo^)^SyR?YF4X3LB&w1XQ|H zDV0(r1f;vWL}1g>odPN;pmcY4Nh7i86p2lDbLLjRzxO@w@1A?kx%c1wS!?aJ=6dFw z&ojn&#(I;~@ryW9??;%wnl8{sgNNUq;^|A}ME#&M5rChtOYio|s}6!a@}#r2Y~oVW zu&5jlI=C%_pX79fHC|tRi~Gb;E#DWIR8&gv?$$;SH#-eQRQCRI$)IsUvPJy`mf8MqaytaB{) zOh?d*+fj*NYatAbr8G_XB>w1k6%@52M?^wbB=xLN=cp#~dSCzC^e$?^+Or(t6wN@A zb8H+`_r?*G21)LE&`l<(_Vt_u?sI9by){t3?9B@OjEzNo9z5vMPWuI=Dx-e8IXZ@m zVh`&}Z%SY_IAa=ymFiS8XJR$5YkMJ6{Dwxc4N|X~ppaC9&8&iuo<1(VKy!)QtH?dk zV&p5*^e4=N=^reb9AdA~pJlv+n(ddJ9wtExiWawcV|hLy+p^2OAxyv2Vn=g_oW2E? zFUo4E(^!%Ag8XiafPXt$5>U-r?9FtV4L537Ws1@r3!BR`9Xp_jSjjI98{=uKolbZ= z>Zr+TNC-tAiZjE7LXyxMUpF!T?m8-YAnmQ%piq!aqMW5^S6gw1H?SQpW=7R9Bv^@5 zgiqaAed~j2=5mV^(VyJb(U?nS!a2VkaCQrGAIA-^>w-U>b_1-^oPCqFUfI-ODZk_G zwcmOur~SC1jJqH;y)E{F(fC~%sD06;?T8anLyPpzZhpl&NVz+p95%u!y%ytJgBg)5 z?H&&JoCnIrf+q#ST;);RNzHD6$q^Ai{XpeHWm~8d@iEnvv@D5lgAPWGvi7BJx^E2u6 zL7&I2zR+Qxd%ch?nJ19NQE6-E-bpsyTS-JfTk^{*#(Bj?EhBF~KmNSL{W?DSsAZ6) zD~6b=6SU=^I(P}oQo)k?o?FF_0EsH`<%rJ?{^}R#(efvrGku{-y~ipnDi+by;p}66 z+fMFh=LpC>3$u0mtDQG27)KXxzNVjnzaKQbhOiFbsTU3}b*^e%xg%HSj$LtK-7UJ! z#V#si$hj*A)k7T@;2lY9YGwy1yUWAvh4O2IzJ%IaP2IbJzmtVZ)Qk;rZc zrjH;886wRgxd$W_IuK2TU~?n1E(LO{xbQU|HZVwByVo?LuRHI@7HJ0ELC^wi`;T{+ z8tSD#QMxQNIBO>#UAGg$-5jP*4EDj)-HGz_LIXT-4K*Qc(?qKjEs8~J9?L^089WgS z&ZsO_K+>;2)SP!*P3Fq#UpZT(_v5Npfx?`<2(&)XW7B^(jA}V)F^zUtgZy|~2L{Op z>kXWZWVG3GCh(bS-3my-v2<&~nqph2p&#jV>jw9=SXy9H&5S1}kn>oI_UC?5p z;Bz0zC6ucOmKcc8$cfda7{aI23|Wg=8oIT7x_BD8J+F-~y{pvfsCZ`*vepN^?UQdO zT;+P|9%8X~!4hc3e#=LEfYiU}UHV?}T7Si|RuQrAM~Txk+$}i#Ak3Y&TXczCX$WNu{!Pt*q;A}OM8gR5&)^4L zy%fQ#S171rgvduIE>sAiKN-JRuki3Wu=oPfp7WYe#f7bBgA(W)E8!NoOL(K@HT}Ke z%}|W`0pZ|J9FD@J??gZ1G&?I_jOIOINwUE%pzr9nQ5uQLx?-I9Kri)dQ9{`3Ftjc<4Kfqi<8#%s;d@PJx8SnN^A6Oc+LNk{H7+P6(3T^eYk%7sX^J?Y`NsR31x zV;H&)u1v=o5|B~+Z0q0ETK8Xd_h)%{YFz)M)q7946L#efJ!oNs9`;)^h|Wjw*>Z=7 zx=PF?5mrZUh2RHk%Ilr@zxw47180ciuaP|;d!8>^53voo*I0LZ`i9}yTBPxf?Jizl z3-6mKp2OXqgr(Iz^H4>(A$UQv>t1oF0!ICQeW(KI^(V;1na!cjdS~#GGIamh7D=nh zh0E>jb)gm+-TdKVbF+ zi(72!_vYYcp1k{vBo@%3s%1E||9r=b;^4$&EuPeAf$;XZ4Bs4qSnV0?W?=;C;9T}g zvJ$L@t!n3XSk_ISAzfbXp`o=NFvY-!ZucQBnFvWxiNE)WT|+J5b@ zF_fXTc`SuvhrI0%qHK!Nru%&u$2}pf2I+i(rF7X#a=&^8-Xl;ywOC*78rpGB4`=!N zsr6~?OFIz?aYZ$zQpl1)BVr@FXen$l?q4{KO5R6488+MD1$C^2vj z?--eHU4M4g8TZMIY#;(;Q^y>;KdM*WJyG!B6u&BbDY)6;Uu?PI!LmAXivI{R(=V5svB$<~e6N`mhdaB=AG#TfyZT;LCY`~sPR zBj+#b4bDL@y8%PX4BDY$(6@D}QnGFvOZXQfBygF6L{R@c$_a`pAW)bI{m_Yc8$h8Y zLBFf9X2uq<^@Wm>=pXzSq7ok(LY0{s+ zRD6S6G;Pnp#GiLIyWZTJIF8WMby5TKHYFY;Tl7uz42QCWe=~9D>fOA0{*j=xuW=hfhEw4&% zTVDyU)ogm_<)BnvjoAgkGFJlsssUSr6&D=8)OH7KfHsOb6AC7#fLTi|r+U`0_Y&LyDE!Z0;Uh3hc{j-2P%DNUpx!FE8%r>4w<{B9UK9P#y&z0! z3M~kTrlWK{F$l*xx``L7_9%pida;TBQCTK8!|{)5&$4aC!g}n|aE&GS-qZlmD=@b~ z1mRtJraww1i7~siOt)c0OT<ZHyhD)Y}}-T@c0l_S2ijrYG^T6R3lHXp%K z;=B8g+!K%yqPD5z+d4S)ARhlRK&>E3|C_)vfef0J*!mOt+rvX#eDSYBQ|6zy`G2CP zL_F8X-@ncT7>w)1jGgXbLS`fy+8l{p1CF*1e{G>g-^JsQmV-sObKB&!Y04Ztpln_U z=;6)EflH8UgX|wU?VsTI{X!u9t3p0WF=zs;za-j6-Y3P-73-FK;(s(Q-_;9)Fn zV1gobexT53L-Qy}U0pRF~o_jKl030Jc_og6Sdj=CB*lCldB?z5sfD?jV5{e2C3U$GK92;=wy4fI! zU)nwJhuzNTQTGP_Ah`pA>#}9-=+l-1li5IsdY?Pi`vgnmvQ1HDz>K58biwsEb@5%D z=wgMn)1geoK(@?9Qw(?A`DK$9>M!#~(YJH>i3*A8`RYe-)I5z)ld-!`$WqB%spsuch1pqzbVp6E94Fkp3IzzT$s#UG=ri|c#we1!yjHS&n+J9 z`LWNNA2+dK!=3k&Xl<6*jfgxI69Xs{8KCgfu~r=!c}jt72C;OEsgIHd8?AMDentNrahqj zu@m!ncVnLJ#BqSQ7(NH{&96qRPgo+Mj)=aWfNYexlw*sD5a}ViXWacTKVJzxiYIVB zkQD>s(J7g!Es*+~;q{b^yV~ODO?2ZNx?6`%I}pKLMjq1+n%C20Axla3*tK)t(sctI z%~*gA`?8aC!tl2XM(8aOTVy`dpff~$e_O6iRxX}q#R5IT{lMQna;C{?`P$qMqkge6 z&#Ei9K3~T8v#_Ipi{q_S3%Vy^@45c{t%QTa3XB^}-OcglVgr+t-C>dNn9ew#bJx6{@y zk~Hf6OG4!+n@))O?zg~q>4j1=pjy;=|DC+4IUk)!PbIC^w)N<4Ut;a818h_n?snM+ z-f9HVw;>*(wT=1H<+=OE@~-6Q!1UwBd%fn}LydUUP8(T*Cl3u;M-LY+&dG}x>5Qj; zLn08dcRo#M z0U^?fBkX~w0=mn~{5H@_1nJgSP;sYfGJN!S*G1a@M7#)w)Tfac5e&-tc2)eb6{3X} z$`-P|4|OU%Cvxu0kb`BFrA8?tz1CMPR8ppkt~2zmN1hdUWtRu3GEym-MB@Y^=gb^8 z-vJxf4H!6n$}%0iY3(qVKpvWxy|lZMrL*40?tSjhtxP$o+?jDdcvZY+D9-5J7O9xRGrBs%3640=L2I!m3 zlf$@A6?_oxRhD+Y9Ok_=r9M#v+!eQ+P?i~e$8|sG9oIEm+nr!C^|Jw=l7^)RQp#oquH8}xld|- zV{&8xYbZL4iu7{)RL{SAKPQN1qT>xS*(tQ62UNLHg9NlkN=t>ZwlI%>UMM;f^PV>P z54(Bfsk)K4As&5KvbRVLAs*mWzE-l#Ih>M}85s>Z26Ag(E&&O4+Y22TqT7#O;eRdS zGYrR=PDu1Rq>+G#vwPmI%Txt@h9QYx^Cb;9(B^_Fr_)gQXPwUV<{u%|^9?a}trf{b zifubRa9G;w@nnbAS=)qgNo2j9z4hM(VnpoKD$+C06R&Zq&S%|;0bVgG-mv1rJSh&Z z+T&_Ts7RQ_QOoP`wcLhQX?FA7ve>Sz8!g)N&CB`EsGsU(-J(q{*>a{`5der!!>ULZ zn~;FAyBrvzBMJ-l?FWuGzf@1Ng3~5l)s}#!CgTw>o@&PI8g~E9^7GglZEGzkyDgLp zn`x+q^ougSqMW$zNri(#zJk+uZE9{<{iceS9*|ryLC-wT`TS_KUnsbZ%UrC^7-Nv7 z9W%CW1x!V_w#9HRkV+9n34bD*w%b-fiWk{s8^v)Tw3wbU#8N;Pw0oM*eyZg56A*H2 zv!Enb@>^|dw_E-=p>qEL+*LmA=*;Z}-T5ZcJgEa~vB++~b=B)b?==M+YN%{i4w{bA zAi`dfA=q-TY|LQ22V=h@RIjulIn`BQKTs zhW8^M4Sq?rJW;A?bncaz<_tgsH^0ir&;MB+4I;J>ZdTX1jPZIP72La5D~`*DxRR>L zQ;jm}PQww(j45Wze!F~JRGotoCga;1ZcJe}LpYj9yIF)H# z3ULR8mDhZ&&2VRlnfGzQQWDx5`0L$u>34)WJva`>6OfCJuKkS&p>5XuMs}R&Px6kw zn-d8Kc6x9&5YaxCJQH!i$sAron_Eo9d39~bFcapMl}RJ-z@4#qC$*8(C4KZ+*$oX$ zc*0q-jcGT*^BV`NDb1)U!Q$$3ut8}lKoH&ml2?+v1%kxTvDE1-TghmfazBw%BkRn4 zrLs-!k;WYaF{k@p*XXqEnUQxDe3aBfU>F7enGIKfE>ecje*}pLE<1NtCz;e<3Lzl(S`X!3XO_7gddmo2{vT)l zEH#MneF&an*a>(jyr-w;?#RZn-H}kpBA44C{h3dQgZx5jZtV8E9R7;_zTCE#MdWf) zs7pHhfSr4`(4ZKwn#tD8J|5pPH&5^863SNy*0ddFVZEi!yc!_9sd@KPpxslz-bkM8 zk=)pPtPvI?y>k%xH=^YlVTi!wJi2aC?Tv#oBfq7#sBeCSxtgJB+ZWCuiCXQF;95g+MQ1Ie9qdmClyu*4 zw38iAcegs;&R?d%yp&Y53Y0tt=#5`fNG?#WpB0b#<{S51$hOSRJ6LThM;w-ga_ole zI ziii|d3Vxf~8C)c*NL-RJ?tU5oOUrn zU1H*)BR=F`XnRPjb-K#l;h+vlz{O;F9zsH?H|Q!ex;gLn7+%uimF2OjBXkPVYy%Z< zHlMAYw2sobkNVPV+>V?k#)NbOZ!*Z1N=nl`T?&6u49ZFk6kI*)c(Rj0AwdIqyy&@&gW(Z&d*d2%{CNFX|0`IlC1oF^&fYt9MHdacYrIy~{AtW{ zgTuad@yAyY0q2Jaf$RwHM$ooJrmTJ3a5{9#fmwkzX~7dzD7OCT(js&Jpu)XXwK0va z9R2Z*#@J{C4&4)KA~<X@D zjy+0MCdLGGQbGyN@{gzp9c$Q0kt0znxR;jOs~dnEX{TSVNZtbN`~b~@#5(zR$T~g3Sj+d z$vFQMaR2gY{imY&-WPWZIq_J?-5@>lvb!pdT0HiYDNto#{>xs3^ z@)`XKvdOTQ>t9itU5Zdw(k7MS&Ddc)tLA}UuF=3w&y^q zHYzmSn-~guUn#1RiF$uy5Y?RZ&C{T5ukHBp6H-2RC_47|(kSK`tZLE?iTATJi6_(nrO3dQW%1q#vM7eiRxbWID?)6^j0eBl@b@eYjT?n`?+CkdOg z#{T1BBbka&MuFFjNrzLf4@H!~qp^Hp>1OD2)CqjI1o;+z>H3V+Cde&S2+`NF#Q(;? zO6WJd`4fQkgYOEKD(^^~{`ZaO*1+Eu!r_=$^)#15)wd^(OlK%K`Yu|+%YSCP7#4~C z?T_5af~LdVV0>!6BUNpDx8mc1(9HWLd65o!V0s2_0v|v@OA?M^=(UC9S%1){|KGq4 zUum=3uzzR5^NA2303G;H|38_vV*SNOxa*tUCXr$5cL|6lU#qDA*;T{8`LA;SHZdNa z{m(EYg;GjcGdy-8Oa2JL;nN>1WIJLJb*?wz1{)XZ+xrKY7@h^!&m&|)7y%>fkcVg6 z{%`RrfbY*q{Dn~>fWhzIX)gJ{o91NyYoOG;eY<9r>bn4dGk_qU3Uec@h{0a}1tWd;qO;p`>eWCjVTB|Lt_j2_=j5S2)`5wTrA5>?;@33T4iO zI#*lV(4!-lUqF%IE3fNY5OB(jp{uu#}a(S*11)pbp7Q^Ik2PgnEK` zjXrY7?}6co56%}n1Pm-aQ7DzBo1iO`QlEEK#VyNuK0i$@MwbYFU1T6aGH?(18!UBS}UOGu&kz;|xL2~FqEO=f_btf0lJm#v#8t9uA3 zkQ&l~qHJF~2&5j|(c1CysWjXOcWPL*6FK3op3}vFbxjZ3cX}buJx*fp3xtPH+Fjc4 zPTf5i)`8wiPWKZ_c5dWtcN&Gw#Uq;)nfX*zp>8F@+K#SG*UZLbc0>c^ZYueA#7wI? z8WZ28AdJobY*j8wn&0 za<`!oZ4_7;FrYgl8z|6-bSM(V>?&VfWWw*Vzg0NjfYQ|m{D+}L*n9I$ngNv#2FVh3 zvWXDY&tpz8!)cA%JsP*V^1j;z9}T#nuM!nWxkZ|slMl9XTHYRDy>>Phbch+IL3U&? z-91|R3|MEc{u3TluF5jJ*XJAr?QEv3k}fuqJd???n%qGnE-_~>rLoDwXZ8VYG>ByNRD=G z|1Zy%#t0>gcgWr+W0bhU`F~iC&QbuYDe1Cfi|F^SE&Kj*#8P^LZ0m)pB|p$P8Q$_l z!?>1QM>g{4Y;=_sY3FveNnht={-ar^CnD}5A>OL2+E6aSdARH7n4($RG>&{rn0)MS9~QsCq;uq*G*iLUSR%GTPOk9+P%5$;9s3nJ)LWcn*?iC>a#J|xQeq*D>ezF7^Zlhcn@u>P>Q(Ze(nMBWa!{c>WU+1Z%v)!6`);)kww!bQ<((%M9S~auta{o$s+S%0 zffA90OVsmy?F!S1zz8G@Q)T%MXWysV88HXdWlJ$zo53@1OR6)wz#C*i>9pL{!opLv1F7C{AD3DkVl8W27Uwj=tZ9v5 zOxH{3QPE$l%dNps+yr z??&n&7>EfNuG)rK4{Tuwp{&pW$P7XTN>js=-N1k1QB<0n+)xWQPznMJXzltOf=pk&lZ?E!o5QduQ3OMz{ z1m+7{tZG0wxw`!7caH%=xi^80P|h{FQ6gNOUjhRtnRpUSTE^8z2lXT2*UVqS`)TW4(~-4GxO<*Fg>WXFJc3 z{%Ao_HO_$+6!?!Ka(Vy18Ly6w@6{JbM?dAh%=|G!94Jg9L)A=$e>?y74xA<_#KtubhbA+PB_p}=O&z=9D zbH@MIEF+`0GkCSLFB^(K5@(FALu3TKMgv$;A-h4aD{TR<{?in@+Sf<@R6hmJhu=a4 zD`TrPS@7RAno#q3C__Fvorga%^16Kdmhvid1$}JwskuI<#RbbRiEfx;7^`5U+kqRMilg=35E>by%U$-GyYZXpnM zz{d0CYd2bA1n3yJ2lqay&mdcgU>i9c9)->NUD`U)))kYnUi~^#7%oNcUE-&OZKaNf z{usoIj)FHg%Mu?KzG_b&H4v~dn}Q5*8z*?5>$aSV4zJ0hW_2nTyVW>!6 zIYy3bw^m$`tYhao*}z+?Gb=j07{ztE~rT^LP#{oKGYRD2}_zYm?vbHH><%w)RGr!T&% zkvem#ugd8oKsuzDi2DjLZeSSX@{9iZrv76i&dO}GHLSbDi*6~N-cVhUDZb#lk|GT}(B56sB8q5@tBDqwu_ZMvNEOae~u7H)`iPz?w^3@h| z=)y;3R4iZN<#f*4w2D2fuIkBr4_F4D4&QI+r`4i2ichOAyd6HPb9&jZzSOWsI`J)_ z{j%>~+IawGO-`^{`L^Iudb>BRVfUD)98s!&QB$vb3RX{9ObJ6?%b|{a3xO%FjMytl zlh8Avpq-a95w0UnzPTk2^^J(R0N~As#lCyYlb)ZC6s}FhJCT6=UyY8Za|%3{&C{R* z+^F5yLM(rbN5aK~mgt*1dZ4-RbK;O6_^k7${r(M%!D^Kap1Uh`q0!|+gmp>R=8y@z z)F3|=+&7~sdB_)08eaxW3R6*mTMHK<_TZE z#@sd$l;*uX>YR`DjrefKacr|~ZkhI{%gW>V-G+%1ol%o-YJL=PnSrm5Lo^1cjVSYu zo7v`z{A5Nhi+S|n<&YgxHZ=l9uI7#cJ~>sZ^SOIg=u9QgPG&J;8scf1@_hEMrr*v8 zc-&fj#l>@5b=|QFYs?30oUvQz@kB>F-p_*ZMYt8mQR_yWzEaE$H(w#l$933fvjRtU z{f=(D4fgtN%?{MX1!5d9Y$9OTbjB~8gPP$_QgAe{%n#h8hV77xc24D3LgynCWg|1k zctjsE7-#fYXfI_=Drd|KGQr4G!LbysRFcz9a+y19R{!a7e7Hm}ca-(r;IVEwu!fX-B$%@T;J{Y5rhe$< z6d9J&KJC(5VLo%$?^oV-Z6_ON+;J|476aB8Z#B&`510mw$FL7f3(6jWOAk(z>oBKX zd-&1zzE+I3z^Wl5SNu?7rfvU8*8o(&LL@p1V|Q`?dyi`9Nn~>|NSfvHB#J&{@{L<0 z1SrBy_qv?F+}2cqyQQ7Gvof&H(BJ5p5Q9Xm{!F@$KOo8y;G*U0b4rPE*%yx|E4=84 zI(Ebh>~EelDQ!qO@+Mvh>}0pIodvp4zm2TOkgvLuHVT=O_TqTrLc}UN#xO|O^*Mkw zFs|50`9#2q>viz!kKy~|I^`5c=%qVR2~j~OPAUnliF})97L|qy8lT_JiAUPSK#s?E zqGF@M1o{UD_Mf-p5~&3I_n?DG~oqp!A0g@ zi?4SkSQ+)4Y(}TPd_YXTkHkXLL4j95^2&6hw8ZR4(&`6FUHUSlTSiW@b^B3&5jJFh z)t$6mLc46LjS9o>nj8x~O$+PXtvgV%5e9w6hv9NNtKlh@*ma`Z9D3cJ&%-a2XNhV} zufz$M(+Qx002U4Kp>q9dO!!@h4 z?-)-deiMH&7QjAvk$sHkT-D~#Kcva%c1!FsiIttJ?}98hYa(VUBVqCf9=NND3VXpe z)cj`~&UE+T&MW=i3G2x#-E8(K>>)^_I$OOyyy4Vn9gP>%CCe^rp{-h z9#Wd@H(c)+?2C+IlNpKKTwq8X&lQnvraxok4*rP*_>#^>2GH^Wb(`HadqwRoE1+g1 z=HF|n)5QUKyxa37eQO1iv;W2T2$}1}Pl!m1-7>>WkVKxSlxN-}f$yp66^r6I!Vo{y zs<#d*ir$Z`vgt5_Qmev`>ULHtQQW>v!K0adblvY(QebX>Ts@WhYNXtTkAb1xO)TnQ z=^Kc(+sTo&naGG0u2zRtXHPvH)$rZjFdl0&eN|=igECH~T?Oiy#b7#yCanOy)l~3i zg44GyE*JWJ#cpPxR6J)ey&;%Qi;*JhZv#&UZ$ zDck9oo$(aK=gWDroH9EXR&0W$@nmD~l4J#2buENHzeYmXh0N)3xo|$)gy!h}2fJ_h zZTa(*JbjXO2h<=3q6S`mCX{9ZMq=OBFZK|N?|EB=4)ol0*c5A$u3&y^Br^Wq z>mLTgVhjSsmX@3pFmVRX!x)@V!w(GP+3S=>pI9OG_N7du_6hrVlgt~Ud@lM1$`)S^ zLo96XerTBV#=SL4{sW8O%Kus?J2m-SsR>Vyt{RuK*orIWt>(|to?WfFyt{>5m{kH#gBc1SKDn)1lkyAa#CljL7ENt6`c-@ZjHRFr;@yU>X+xZJ!c>V z(%IFiHI1fS=3%i&_o%qJB`)j-etUgXmq6vF zPPd68TiV4T6LfGgM;uGX{TR2mQf0}#dPkwDMrB;!x==Bc%wiPstx9Cn4Es8Dkrf_+ zI!tb(T${0FOjIOcZT~#M_&v{&yVPmJo$5u2vtt4lJmC#&dpU~k8=14l5X`W~ZD}iw z4`Ifn#%7%3O@SQw=d%RlWU`KR3Fq2*UUXnFv6Jz zvbo+kAmKR2nenDFn7VJ&pNfIGap9x?VtuQE%<|pBR}AEq)Ktf#x-RD)@^%?f*+kbf zmJR$dV+10$4v`Ld0{rq0(!`K(mdT(M?wXXD3#uGishR>97R)HHBKcmdJ+)Ec++12DUvj|j#UcA5 z&R(Q}*-)XV^xUAJr~)e|PlD99Qbpy?<~e6@963Wj&fM-z%$JBa`X%Ad;1Q6cI*+S# zmduw8oC=U1f{8=)HYj1L0~LE$KBvz2*3KH!uF3TCdsW7^<;0|emDyd`$s$!VE)xgi z24%Da+#k7mO3d1jRgRj8Tokihd#I6`Juh^%C!%PZbYIMzhuEH8U=g3`O=GuuEZgY(8 zY_!^Y@mA(5z_lHhcXEZ}y`$J%tqa_Yjb9ApW7lKzBfZ~rtf+mjaO4OxRFw?DGJQ!a z6#QO|l_szg^KN8w6cUPiH>tn%%pvMUKghpwLZSS#3z;u=lUI>9oA#r<4pvsPA9Hc6R9Vvhi+Xa3WhA8SW~ zf5sz2wet(%%Y_OuU6_T28m(6FQ$5aKHog1?Npl2N*>7x0?H@ChNTASIvnQ8Gs)(FE zJ7b(loBOKNNC&x-*D=`8d9EFL-tKK-bx+vf`qtO@7eUPrx;z@DQ0pjoX?@PMy}nDj zex4y#HC63?&C4={=S|K=U@bkIOzv@2_+y&E_hQV|O8P~#yyyq`a99(w4qTEV>ZtBK z=8nJ18)S7ZgCi97nxZrtGsOVcUZMISa*CsH9{6OUXGgnKOvs8%|WDSe=}li9VIXbHT63WU{Wua6mb z@g06is{5qPH2-{mRn5QqV!qQSyoJ1D^zAL{CCP_xnI#tT z+u2II5^A>_F%7gs|y-;brPp zd*PF-j-dQh6)zv)Y4FIcTvVzNOOELBS;t1!CgpsZio@a}6D*AG!k#aLN31uvOS&r< zotHrJo~L+F{$yb6S0k~>P{NhYnijGAh3AbVs*|~ys+Jf>bv`U!#hd+aY}^Ub2Gw$h z_C3^#O;xIg{r7Dv>An;2@Ef$HaPe4(tTyH)?8G_6`uT--S8P;l+del>cD1R^i?%+; zqAS5!u?Vks7dp+w5S3DQqUm}4d{*cM=x2c-vr8mn{n%eb?FpCbJZr-vaq0)oKU^YF zw2JzXN-o*H>@leWMUIQ^)%%GYt70=>GpENZu3OkcZ2Ufp4jgJ@d)Pb=Nn56;J+Jvs zQ1D+ZFTatw{}X(R5;cX0obRhwV5gnD9Uk(6bKPMi1r-DU53~60xuZizt&Lvvl@#Nm z>dZXoAx@jm%G58WUWHfn=u@o`GM#TE!mYd?~6RTTzjx9I2i0yKD_;c7BoK8$)B`#jq;$ zl){n>PlUP4Wu(6QFqy3_^Ux!ka@=$b2gXSrB1fJjRS0%5@|ZFO5j{i?Ov!)4K_wk3 z{_#ovRfs-kxy3La9Z=EEL(%ecwSxEjcvBO-RTq!Ld)r}Tc3l4=5B$?jEP(s zdC5LY+v0_Vl&32#UZcfb$^`V>l8!_4aduSuJpd;$br|R{;W>@=I+n+3`ibhpCEHo$ zJKa*%`=(3qKgXRveJD2d$h4E{3_jgO0 z2Ms+yc5+7xao^yn(YO8^ni;* z>DCULR^tUV?6VI24I^r^}VFHq$3)%m!yh4>rv)rs-_vlk?~4ao>NiG9$H1 z8^1|D`{mGHFcs0@z4N-a*sUozh@lp|7&kHn6&3GJHXPTfJTY|85n>??R48NmDg1W> zsG)HwrPX~F{nXNV=4kxqi`igJG)+OyeK__MQz<#rir18^2P$E(V^Efl1Ed+}@;Hg>pH@W&IOyzlo+kCu_aYJK7 zyW%NV%+_t2=bl#2Mm!kC{8+1v|EWo=fRDlAJC&$dRQV4^*G{F9UUT=N%8xa~D|KZG zMof2JyYk3Bt2Cybdv%2!ehn-AI8zL9<}K~uH2P|w@H_!)Z_;s#r22I*BoDu2txS6M zB#Vg|)jo%o;4BL=PR`)h_I@Lqe8xu6lP)`3!Fx;sh4~3XB;ROjq?!_ zQ<%5n@`S{98cqv~_);wyU8py`9T}dvs=My0@qc}kNBl_JEcT|5Df)9lkg;ayn3t)n zoy3n`8SoK?j$Nc3<9;t3Jg9aTrkYI18PHoWuk!vB32`-8b~DHe4~4wo*Q# z_vd%hwftsz1&>xRRHyZ;s&Cz4_#O|Rcw>+RyA|loanr8!>#}PN#bkAdb~+(ky$+VYN60zUdBV==A2q1zDnF_`*3BFoBj}6M z`R-@S(nC55KAw8a!|1*CR`_kNM7QFJ^^xS){8ydnZ^+5SbXffFBO3;3tlheK%;71S za6WsDW)z}x!kgAha|yreH86HR`J7UNg)P0@;=~Ne`8{#Pyv89K4(*%ouf~qs?>$o# zriV9@e|^{1?XCT?(}BbX<1(*`j(?YOE--e5JbJo7$LxEGhXVC=@+F~EQjy(iEaEFZ z45&Isk`?I&Z<1|V*2f=>Qs5Qgq`44??bsm|?RRO-w;A)Y#y0kDnF;9xXs24oI)>Z7 zB%L^%lzdL?%wF}y`BS; zJ)MTvqN#y-54WUVwMZIMrrRi86Ql-JkF_Y?nuOP8k$mHd<@r*gIbXIl#XeWWIJWzd zBj_pJ`1*YO=J2ZyHl4SzXLX$cy)7+l5hCiNtj~Q*?31iomAs_NAVTE(t1rqq#D;- z<oAPxQ5%1Gu-=3X})HYQrT$YT64cv#BXD`N%;KiCx((}U2rcCeRrCAAB4QsLn zWLU6EhODu&nDcKHtvzGydC{3ZCa6H34pTU+?I@UzfT*v~u-|JBSJQW^Zyk;4d0plz z$W@i87OR=vkmx&0@vA9ErXhzxlv{c0GhE_K#S2pUi++7&V{kNqrmTG4RC=LTgQ6DDCwDMe)P+zucOFL@c|j8 znhHm*U7(h@FT!heNA~F_2ezDNPps6XzxL+*EU_u#m!*!azxT48tKa!MAO?HIt!>k4 zV)Z$=gvbZe{9mu!d!8X5tIp7LzZ+B3UT9y)?{Sv6_&XQ?S9;7JW=4}zNLd#v^QDhe zN9dDjEGP$*{Ftvd;_VNqR**o^y5TU44*Q{pF`SS(d@&=NDVjNcSdk>ciCth$Y8g&r z`(DXy_Z`319Sd6nABn-wMO1ZM+)-cRAwel)oBQW_p92P*CyJSHU%H{qM?SNB*#UV~ ziaz)){sD%{i2ZI|+0fKujXqApNc;t9o#f(Z< zHRl083@NHy>G%l86I~A^AkNp=_7Ogg3oWjeE1mhVtqT&-)g&>ZlYw`=0Zc!buG=(I z!8U;@+Qo(Y3$_LPQp0y3`a=%e{4wX+qU!t&_{!c6JbrJHC>`J6A9eDiwmo7uz;nu5 zd8qQUiF>)Jqs1(;#easU-#_cLF^@RKpu6OUiozW2K=_XXb~nck4tL+R*}sq-h~S`|-H0uj~7Yor~Qy)MrRrx$c^b6>m+9*VN>3M51Y*Az9ZzeE?V zMSEVNVtW)N>bp|$KWnmfh_qtR-t}iFx@Sb{U;SZzUU0Q(@jKJz-L4ZFV=2xa z<`Wbt$u%~qT#3QAts6$Nq|dTB{o2N2j$7%UXKV_WZFm%YblwfTG@sKB8{Jx&NZiIz zU&?ZC!@!ahQFv7l5ldr>_o_2sN7HBl`%=rp@ab`FLWH_8Maru>(M*L$tvXgmt#oZx z94slKng64`_lj!jd%H$eeu@gBNbd?NMT+!Jl-`lvK`GLSfDl@Os309dnuH>~m(Xhv z>4YM^h6s@sAfdOA@Wub{jPst0_ndJqzMF51mpfQ%vG!iOto_Vq&iU9lRFLw%A5^3} zpEIx`!(rLtTPznDPaUf2UYkij^`882uYJP%w7MdFOm{NNqJULJNm4}dre}Q-M5mPU z>|?lf=RPX(>;u=2(<@Y7UMI;0@CSlo@A8!EQtT1LC#Qd^6j>5NUSG*VqwXw+3Xtx` zMpCs>n@wf(>oKTXU$c!+pkTnS|6Arlj;oNSA0Nk#O#r|BGVH zKgd8md<^E$WFxYCO?nGW(hpB@BT*(@-KjyC=wGuQ;>3~=_wgsQ9di*nD9HgpVG3XX z+M8H|NL7&zF7q3!VLy>so!g+&16Ea$5f9Yxj_(vw65<^d2be1prTq3i5rMAEp{+|HBP8 zO#l3Xvc)!MardW9V#Tp@NSuycKLEBA@1ewpzQ;eBlgvW3ooKJU@QYK?JNSm*z}uxO zY9X?v@H1A#eSt*pA0BPU~dYN-(@a}|DgVVp`_v4rNvtUy-)Tg zJQevQXkCMX?o77)Z2IJ|8cIvGN6Wjl`%o#rWW>Oy3+jcG8JsP6==Qir!4#{cnRs6_ zrNG0KBljUOh+|N;;%7^?%H5pviOU)!k=xXq-@bFw(0u@qpEd<6emxd)^?NwY4%y8= z0b)})=9#?2yToU<4xfVOQs)@42bRc zY_1gUsAQIOb=;pgsfG)eIib$!=2$0v zESBVT?K)l!bhjX7SRdYaONwj{NVL;D9{1nvZ-n8MQ*|%;Vcz(*w-IV%?A5Qe-rQLF z>RTEap*8Z{&yix}?!4@Ld$Rr2HY!xZJIm1ZRY-UdtJ&R>Oa~i(&=<{LV;L9!C@bQc?J2Fx#`lZw_+y^B# zsv&(io7digzNeKcca4QX0ao;I^cQhyHJ=S%%{%8ml0@<8x3uu&C#WP*h-6lEZ+nCM8;TfQfi7V)5{#PnAH&F91Q$-l<^xqY%)* z$aR*$^`g4~`vN{Y^OaQ8_jd?o)7%;2qcsodDL1>f5DKF0UlQBv(_7>@BxQT4AENWM z7_5Hou?eX{+;-!0H|nDo^nvGHo7AM0oi4mx1CeAY=v|Es@xKcVX-QsoHZJv^F#rCj z>!)~q-#MCgE}H)4ml~ozQ=E>R=G>t|eU{0Mdt(y<9D}c{RJGV%clyVuKHLHs=Yr1c z>x*P+$6qeYQN&lKj=$wfZQJBwTv|z_)KjNXoWvEfKciYVi50kI0>G&~cuP5;UL(_p zTuHs+b1Q6AKU@bxCV7#lP@A)8cFA&&^d5AJ>QcCG7Jx}>fHdO%u=CUC`OCT#e>M%d zo)GUu&kz+J-I_mooMXifW$ypV+5G;{HlH`tqWSHPnth~7TI{E$TRVjetCoiElroQe zO%VwiNnjJAPMTr|C322O5&|Oe6^35_Zl`dlf*HRu31ZiY|A!vE&WwA~Xa~#K+k8vi zJnhD)YG+^Hc%@8{pPfE2={)Yn2`Cr1Z$sc&V!e`R#|4LN!r8u`l{v%e=AF}(`@+9s5 zo$t2P+B5TE|Laa@=z)A+M^_4vC8@7oRq7@@uZFQ;2QyJ|&Rh-ZQ%C|qQ)?#;VsvB& ze-#H^QDulyScni%;|ki|uSRZs)@!x4mG|2@rK%?kx}k(wYTQ1oKamr1?Ld+$2o9sc zpVi%cCQPT^nh&*#o-fOohg*NX6Q9hU=$C|>i)`;Zisz)-45z5?vr4%;yvvIEoK&&; zdPGfV8xP{VJbcE^OmbU&M^36c`d`$yx`~Cd*H3HA`J|C9HlxpwV?Ul=bG5Et(kGY0 zisUo1e`Btr4q~Ij4A;)S{59pP%AaEV7N)E>4Fymn$isqZ1TnM2 zL*Q2laCocAWWgEmVJ0@vJxZ@T1-%v!_j5FX8SB+2nf|4D{xZ!X`s~SHA{k`*9Sudt^hF=!J5*D zm@=hOXNNM7NtS+$FPom-ZC@ViA+b}bNi^gCr(W+F`H~iCb3q1X-AJON`-z4970&SN z+En%y=Eu$!>}1xY7s`bAw^9lrx;ZvK(LU~XFh;lCyrD7IFB!fJ1gKdBOO(bueDNug zluX(DP(Tr6I0-nmvqS;=YF2q?jTmx^u;COzGmq`&u!TRw@K^_aO(E032yw(58~wu< z|17M!^!q|*zEu}pUB|cWdo@Ek`}&XbVBH)Jja)7yNYkK^gnmwF5C(psOFgmrQ)4<%_VCR{@_x8`5zXal-^aObJ z;^$AR3;LzEdiOsFK)7AW@RRQa_AsCt5`>)S?z}hpl|ig?heRyCGqrmSsK+%p$oFe@ zRX@n*PUwuHnvbwM`OZdlnxs|N-L^G$lP#AwtKTBk`|l99`2$y1CV$VJ>M;KWQD1Qe zwZvRCx|d_|kDLc^>iJ^{e!U(+r?=8-uO&qEEI!FIc^XzbAFY~LR?L*FqlG+P>0^8`5U=H?YLvLxOov5VGu#>0?TDXly{TL-;1 zfYaQ{brPO=+nKxi?C>J0+F3@3YFkqz`>vr->2{=K7W(Eta4nl8&-$CI#Ap}^sI5&) z{c_I6Ou)bG3bh`<^e8(COSo4kk9qEuDMlpTqke7(|EL7Vs!hciJu26o25SA|%cT7^ z;k<%)k&G3)wA@W{+8B+d{H+;ZllMSi7syu)_PFwd#Ba#`SECpAXxB#J^E^R<^<5Lm zW9wB@=nN>hXtOA&%;k+{KSj9o<3H}DG?x`S1;#-ww_~s7{>AjyUJ8&U<&bMPO_R2h zUX#i6H}-S;Mh}Lr)>xTm{uv>wN_}eP*m< z-J=ufUrah|p@75;29K({8KUU6&JHrtE8-&yi9{FmfTVym{!axAlpOF;IGuk5M!cfX zJi)g%{TZn;KoId)(H%Kgy;NArxPI|ru4n1i=c+2U*uJUfFnPM@`{Q5IvkDJWB9}yu z?zUI>K`+pMkm!YY_^#f1FQ^2Q^N07VPfcBWj&(+E#8IVf*%Mp4LrVf zRLj5zdtE<|PB!;YC`@v9@YGBYFKe~ncMYjuw$hzAG_iH=J1ZlcGmqWNvCdgKl<59a zo@e9mD0s?YtgGZ%9Q)g)*OdCX!8xq0B1zE26$5d{I~FyMURZ{-(OA}q{8@)>quqUe zh|i<)oBbJI5Gq4?;)Ri7eqE14uA8MyJ#%)6&2EZ_(h~aIW!teu!(cbFus>xgWh;f0j*GMGjZ zkHcK`V_ttBsNyCsZ76WA&~A1rr#;4@SVP_LXG^uOef8n@4icI}**=gf_JU^G^@K4{ z&{3~8C)M!S`8>$d_*-(y3zhJ9XuWxh7M65=E8m>bXDqnKk2pQ8CH5;6i4PorK{YzJ zUeg~a)$p%IR6}N-L-dq^?Qb~#Kq{6Z=WhnKuMWqS)$0422TkP8`&b@+H%7+P#T- z*4Q6r9Zy|@R5J5TK_8)B9PcDEm?A_%9nFt+2W;kFWjfnBkw`Iy5KYueh0~_`-j`g! zx3>>nqqBQd^sJs;!E~jIj8s&vdpFoCe!s}HINDW^|ruB zUo0d8WW*^eZ+ye;G2`b`UK;`XXBA3c7^DZ(3B9>R`gvoysYWT@j6xPIBqDb(m$$F| zgR<0g#>(7zNyqoONZb z*LWbpGC6AdiI6L(@WIh@S*yoP-rZEAd-7(5ya~Iu7rYGG7$wzc93SXc&;0{6sHG1b+e;(jR9Qfy5*@qRUaa0D(oY${;P-r$X z_hu$@X+7e4-PrKy`P+VSyZ-TbW8VD`!`s${_itX_u~o_KHHmR?Uu+nJ0lHYfkR{n* zRQ9r=ziCAKu|)i-qFv#9sB6Qs z{bFiQKEg6J{KNqWzqzUTmVx2<%8KrxqNVk{L0s;WQ^ZW~{OdEI@&T~0{l4Y+L{fBx zaf$kzeoU$E!M*onl5HfHk7wootU2;B&3b=#{6!%{618@cYTUN4k>`2WrvDX(c|Vq5 zRC`#RE^%|NwkW(AUPc(adE3t2$h@kRTEp(}I`y+jFB2Vk!$M{YK=cpUU!M%3xnr+u zaj^EI1hYz~f%3#kKy^xSds(3eOHf&u%~_HlOt+vOx?ohtlmQ34> zW7n^-j<-LYF7-GjciNcV3Tiz6OibyelM>|Rz0gPAC?(#59tvZEb;3B$DE z{=ouXL4mq_;tR&DPmS?PwXG%0VGae`mG)Z3CQ%Nww@SPVREasR(Nm6B?O7G&o9w^$ zE}4_ZP|rT3NrH(s@OJjzxYnzEtusvs)>p&bApAt)*6-JSKkoDQ&5vTFPqLPWnnCa@ zWMq0aLYp34?Vz=+pf^n?;B0)xdiQ(<)DHTQK zXmyXdSW~ta^Bx0_CD?Q$#=5u`>|FNtcHs#J40?n|CLj-1ulc3(h}knSh4adhWdVgm zPjkL9Va)|kq9@{A#Qc48ffM<85$9prRk(shs)0~BS0zgj0lDus0S$lm-6$ZS*}DgY zT4K`523HjPX?&F2I#wu58Q(Bn#E`V`OX{T{U2U9r{aDXee3Wl=pT$V|X>+~{2bW++ z(^+dt+c6+pw-Wa3jZk}4+DZa8s7`v;1wSolGr0(_%bz>zTWld>)BVq9hEZh;sSV}p z8HF_4$QA*=6JXSJ6gIMtLyKE~Zk%VcqzO>_1-Tr;Ju9VE=)TBQcMiw*BWm{_oGqCG1gC091X~)Yu=uAfV#}FPU`>?Eh$*y;Kv_duUDA8nrrrD ztvpVGQ+9sbH*XkK5kEhJ10+w1=^ed7VzuHZI5jDdR zFXXA+t{x^zcT#sZIyW6sxQZJakcW95o!BF%v%8l*vgGBRMZSP}_fEgtkL!)tJ(ETb zi((7N7@^$u8u58HuFP zZ|^^LIT&hpdHParDFZks^>I!Kw!Bfbg3KfAITIYnhI#*~H~_I|lu6~sd*jTIEO(a{ z<{Ez88AVmt*k~K8Yq@~|>>&ztnF26DFh4lxXir@4_@(?S0lIul|H7U;?6q4SzlS=) zxL~5mq)7DQ{LKHsFoCsVJ5D_0Bvb5mma34X%H^*}|D9EVF7ix5e4IE8+tWK43&KnG zjKAY>vGFzqy6a9bSPVL$|FGLv@O-(AbO!QcnB;1>*=-LxSf1)G!i#+;8x!ri8=7NG zkM>iq zd%tM&CSZYq(3LkmOsC@75#6)l@3o(VIUjI&{AG`WBqr@wP6RDyZnxD7)8}*Uw`X^= zOi?!xmzua@N5rEC*`7+Og!tyyI#PMabK9+R4c9xUovF7oUau6gKJFBSSqZMX!CR1S4*h8 zR{YkFRxjdHm|Gj}avV~IFpz&PEmESVrv5h1)Am>An&?Yw^H+>JAalEl6p=(Yu!WhD z;yC4+xSvn|wwtRh(~+7J%JX)kNX_cg`u-}U=0{uqKZiRt?Pkdb9j7Dq(0ycAuJnpn z`P+hzrrZSa$2-wopYKNhoiv7-tL@4a2c6~XS01?C7P@l9+|d8(mHzaf6jz>4)7o6Q zQd78l?aCMNForAd%X$B+YijduR^(ST2)nE#FfOx0YHsaZE1ERuhrgiZvb?DOBM98b z$9<_yz5%FD`iE)EsTI3$pI1KH7iS4l0c#Eyxq752U%6T}{0ut2ObIdh+es$1YL`mw z@82;z|25TrdsKecZ{t?~o$&wTDF54`|NRO5PuKrhf&W>7|5<_mlUATB>|~<~_1B7x zdO(o$%i^W%Uvn_dMC<=8J4^G*+1Q!~th)9oapof`Ht%DfMP>HTzq?QJh5Kb_3PKR{ z5O1x8q6o5I+m53yXoNrqV*c)4A~qvz(K&Y)tOU*9K>BL@4>B9otWq@1`J9dxY=#3? zV{K^{GKsbwSk0ov6mLM`2k32JOC^8%<|QiVaA0M0^YRGi#jEcx^n|0GgF8H~CsNc& z)rMFW3w!IQRz8bbb5mA!Fc3Y&^qL)+*|s6qT2%ddqO>5o5CD~21OJu`Px($jZc`g;Y};bqm#>-LtySUU&|_;&z8V+k;283qHM6|l zf|;jV0CZq+O@p@$2*gBviK-_AFvk(e2czb)&ZWozSMEH74PmLZ-d?4)B8pV(BnAvR@oJ;S{GF zf@*2PS0=;GX8X5v+ggNM=zS%!im+Dn)|NL`-a&C*73(`rt#)f4vNnJ|)?8m-`hRZd zmak1!8O_^?)o@t?- zh;J08eG^q33;ugjARfO;YkCmS8J=e4x=i>zyg^(bjS%vTzK$I2o?iOAG7WW$Uv9+P zxwLGr0sHog8u|>~;B2<7uLFZC+)%qG(&vBL>^O$aE|lGo$I6QY)6JlvXzsYiWe=@25OMfQ-{L6ByM*a7{uEw5_Zzn zDdmMB^k$E?vk=JfD?buCDOkLuf@)4fcPyuP;9L|yDC?#E1yW}Mor0CLtZI#*jrYP1 z&iWM|wJeKK;7UKn_5~Mr2pt!C2VcE>j|%b%+GZ@bIv!W@^5LsOdC0{Xj`ByjNG{&j zvXu*g5{*M>COp#^htF9kgGJLX`5fTg@nn>RETW|1rlR5O~hzn{Vm3Y3yPUp`GFxw2VE}!33%uom3zF`~bv5D(}Z$vjDnp-xHEvI`g<`8*7dbZo!fO|nF zhrOg*ygNz&4D->mJv7a(>KmN1hOLZ0joQ+q-sRwKzUcn8;7 z)soTn$IL28t&2zoJA!>IVRl0D9=G7{`YQieo$DSVT8EDcEGEYz?9UIJ@o)IPHt-TI z#*a-9o=4{;eC?ZX#C=O_tLfc#>gW_f4r2GkXBLS&D0oI+&`#_w)|N#Shl$JtShM-8 z`Sxan#m3LCm4jcOM!IhNZb|cTGL@5Gqd7TCSb|aD2K+H`q`Q0?%XsQRXo((pI_6`l zMsgxbmY6X%pk1omz*=&EMz9eHx+K`nK$r+v1v9Eh5I4v?FGiC^pZB}pDBQWaab$1r&#OzCvpwESxbO>>r^Mb7Xb*np2Bsz^(-Bj zt3K(3r)K;;m;)aMn)>#X&uOhJ8HHzqp9Hq1_FcT=C}ZyNJXoIYn-V04{K~LPw82AO zl1hpTqLYy#=;Wn#mg%1MXc@cd@u^tJTe3G+7U$p_=?hHO&~cW~^<1ZbnQq(l8;#xa zK2XE!>w@vaG+-JprmyTL&OI>xAND(WPcyxh8@0jEvc{*4;5O990Zre9((4k*$RMmO z6W#_A;BSkYZ7*u7j*`xvg^Royv0++B$Gy|rRu93&U_&Kr zZ3jNx#%&>ciZ>PoiY%&H(=xzA#BSQu`faTQ7n0Lc)QJ+qP{xWtVqKy)VhQF zPSfK;WHrBEUGrV)W)soCWgQ=W(~9jVX^>#FaZo8oo}_9pZpV#wo^uoZM^-j>t0?w^ zNS%}KkmmK%F2dgK2h7EkhVErcn(unc0f#-qXgvbGY2<%Ha%yd)aJ^;8uCBgGfzWQ@ z4~@^^N2n;2>bN*7sDTJ|q#_mzQ#ka6o8eYc_}Ix=F|RF4xKF4p;1=&)oAiwcbMxn_ ztpu!^YaVRVNq8+7Gqw-ehWxpJh9;TEZ!-(KhCDVLVbjsTzp67x^E8b+E?m$(>U5vl zVXt^UqxHu*-lOI#whSIJE*4(LR^;P#$nXr9=QugOKwAFw zyd%)=Y2WogX6 z8ih@e9gp4=G$(XTz?j1tiNOs%zG_3v>;bI&sut@)7T({~xC}Mq0Ub?@I@oywZBZU# zuqlu-rU{ImXjtz2?79qg0`r&CPjT+t2G+NwNYkj~Q$AWsI1KfsZZ} z!Gy}fD*Ff5EB#B#Lh|J-2C16^HA)H#b_?}x(ED{~;DhWe12PcG25p_ixNOAf6Ss^c zm4=HA0HMRC0h8BZir@j7Q%y)rH5OU;RT+&57-A819EcrFAHRu)q=TIJyX_1<@cKvW z_|&4$9hEZj_96{urF?BP1E*n)(m&^f_qhmKgV*DB<4pazQ@+B`*#;WzkFiVQ-udT~ zvI}TpNK=K>Ghi=Ud@mf771`Xy)mFm85e;sSMo+K&Za0U$TS%B~#6VU3Rca93gQn>+ z&n|=sJYkY_Y2QefpNRiKgNV{Yw)oAcDsfAbZKaAAiHjAACglzF+@=($dK&A|fuG}w z?J%Xlb@~d|77Xc<-eYrgWrLe+1TrtX@1Q?!hKLz$_v}=S3I5Wj_zXR#@>xJ>Tpa}2F9yk~z!&BXj}ixqWTGtTYip$9#Ls1u znJNx-jpuYUPUbuV71L{>f?8ayCEFu}>2bS1jThw4&;xVstylG`f(}$b zLf9X>+qe?OQ*8N)m+ppFTSH;mPuMFp=vF$aDsAFo23bFLpSrn06t*wEFWq9j>><~8 zhhabrlTs*lc+#D5-Oc{QjC{++m8vTK40PNbYWFHfL=k#>d$AtYDuaBWqo1}Q_e|>V z;}`D{(`tF#a~dW&T)`$B-$b0B+!v==SXWU9d>lBQ@jLL_)7oOm8-iVn8+#%ao0-mY zIxd#}pG6sEO+j(~WK)7YJP>fU(YVNwLsa6iq50%Eye#Y9>)oOLsq2L@j>|f{T0rSc zN4`N%@tp>);W?cNM$#9xxu0Pr(wMo@VHpYY-`)}uaiO)FG-e*;F4y2|BSQ|?;E|z& za*Jbz+RIHY`tEEy{V23vcSSPqUCu-;3&hMXqOaHJ{GcWo2bD5z9206VY|Ij9%d8MZ z+=x%j4uRk|ULFbxB2@F5hMLQL_*lrtD$H7C-rR{-%od7vk!4A}qZ$I7=}(ke`Ci|P z)?AqPw{lw9flu`a)7aB3wY$mMnVe9>#{UM$(359bD0r7Nrc}8M(Xk7Y2PUy1VIpg& zdx z*RxsP*^VW?JBGOqiYDlM-=$*Pjtm0{a5yH18wyuD1-T;|4eWm&*-i=aY!NX<4DZY1~j$)uieN)RrZEV*D*OQ@{%tn5Em8Jwr{wu|SK={JXk1cYc$pZ}qP@DCO@0RS{WVgB2}mP9+_oA0 z$>PZ?x&4oQmhd&rLJL1cq8Zyx<_60*#5Zr*alZnW+pF1#EkyIgDsA|o*%O~u?yB7e zxigcskEAO@e^5Ut?rw=i4{yMaE;P7HOG5sjY=?|11Qx{2r4J0sf$%R$@m?3A6;ro? z!lUK;W6Kd@skCm;HT&~d-=zk6cUL8cBP`*y!0vC;OAALYht#=|&P!`gLz;QA(sIeJ zD3cztX#j@|y;7G-qqd`_l2`g6g%u6>w)eR<)UY`|VWNl>?NTr?xn~Iy6{od@8cM8e zi6HS|6bu7F_;w_%!YqFLC!)Pug@283K1DvCa1L z;pM%Js}llCLjtx_Nj}AM8Id_|s~j2!9A{y2S51A+Cm*%_5Yy}4TPiLS%!oP}cR3G# z;^HDfJ@9B}Z8xgl-v#vDf_W|zQv)6MT&N`N4Uq`yMNC~7CIh+ecU0AplphCe!TQ>s z{$#KZLLH~DkWgw*5=!lWG0gPV=aA3d{aCvG z#<|#@k58q#cnhpWPZUP>)9DgWISv`;ZmW-qmhL(vP2%4?E`b)trMI|Z%1c^PWDHaHioK#bIj>*u)G3YqYpqZ{oL;^)Aha#zBGw>AHu zQ^h+#;%g_B$_jqN>$Z_rN+p*>8@3XFkk$1P0Ef->k`7O82&O71_2JPBuI#~4mZ&F2 w9>b^J4x}pDE*Q?TcsIRVBkTQ6a`lo7_S4!STo?hnLi*8A(N(TgeD&df0q*37PXGV_ literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..4bc9c7a --- /dev/null +++ b/docs/index.html @@ -0,0 +1,205 @@ + + + + + + VoidRaft - An elegant text snippet recording tool designed for developers. + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/js/changelog.js b/docs/js/changelog.js new file mode 100644 index 0000000..46081b7 --- /dev/null +++ b/docs/js/changelog.js @@ -0,0 +1,494 @@ +/** + * VoidRaft - Changelog Script + * Fetches release information from GitHub API with Gitea fallback + */ +document.addEventListener('DOMContentLoaded', () => { + // Repository information + const REPOS = { + github: { + owner: 'landaiqing', + name: 'voidraft', + apiUrl: 'https://api.github.com/repos/landaiqing/voidraft/releases', + releasesUrl: 'https://github.com/landaiqing/voidraft/releases' + }, + gitea: { + owner: 'landaiqing', + name: 'voidraft', + domain: 'git.landaiqing.cn', + apiUrl: 'https://git.landaiqing.cn/api/v1/repos/landaiqing/voidraft/releases', + releasesUrl: 'https://git.landaiqing.cn/landaiqing/voidraft/releases' + } + }; + + // Error messages with i18n support + const MESSAGES = { + loading: { + en: 'Loading releases...', + zh: '正在加载版本信息...' + }, + noReleases: { + en: 'No release information found', + zh: '没有找到版本发布信息' + }, + fetchError: { + en: 'Failed to load release information. Please try again later.', + zh: '无法获取版本信息,请稍后再试' + }, + githubApiError: { + en: 'GitHub API returned an error status: ', + zh: 'GitHub API返回错误状态: ' + }, + giteaApiError: { + en: 'Gitea API returned an error status: ', + zh: 'Gitea API返回错误状态: ' + }, + dataSource: { + en: 'Data source: ', + zh: '数据来源: ' + }, + downloads: { + en: 'Downloads', + zh: '下载资源' + }, + download: { + en: 'Download', + zh: '下载' + }, + preRelease: { + en: 'Pre-release', + zh: '预发布' + } + }; + + // Element references + const elements = { + loading: document.getElementById('loading'), + changelog: document.getElementById('changelog'), + error: document.getElementById('error-message') + }; + + // Initialize + init(); + + /** + * Initialize the changelog + */ + function init() { + // Try GitHub API first + fetchReleases('github') + .catch(() => fetchReleases('gitea')) + .catch(error => { + elements.loading.style.display = 'none'; + showError(MESSAGES.fetchError[getCurrentLang()]); + }); + } + + /** + * Get current language + */ + function getCurrentLang() { + return window.currentLang || 'en'; + } + + /** + * Fetch releases from specified source + * @param {string} source - 'github' or 'gitea' + */ + async function fetchReleases(source) { + const apiUrl = REPOS[source].apiUrl; + const errorMessageKey = source === 'github' ? 'githubApiError' : 'giteaApiError'; + + // Setup timeout for GitHub + const options = { + headers: { 'Accept': 'application/json' } + }; + + if (source === 'github') { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout + options.signal = controller.signal; + options.headers['Accept'] = 'application/vnd.github.v3+json'; + + try { + const response = await fetch(apiUrl, options); + clearTimeout(timeoutId); + + if (!response.ok) { + throw new Error(`${MESSAGES[errorMessageKey][getCurrentLang()]}${response.status}`); + } + + const releases = await response.json(); + + if (!releases || releases.length === 0) { + throw new Error(MESSAGES.noReleases[getCurrentLang()]); + } + + // Display releases + elements.loading.style.display = 'none'; + displayReleases(releases, source); + elements.changelog.style.display = 'block'; + + return releases; + } catch (error) { + clearTimeout(timeoutId); + throw error; + } + } else { + const response = await fetch(apiUrl, options); + + if (!response.ok) { + throw new Error(`${MESSAGES[errorMessageKey][getCurrentLang()]}${response.status}`); + } + + const releases = await response.json(); + + // Hide loading indicator + elements.loading.style.display = 'none'; + + if (!releases || releases.length === 0) { + throw new Error(MESSAGES.noReleases[getCurrentLang()]); + } + + // Display releases + displayReleases(releases, source); + elements.changelog.style.display = 'block'; + + return releases; + } + } + + /** + * Show error message + */ + function showError(message) { + const errorMessageElement = elements.error.querySelector('p'); + errorMessageElement.textContent = message; + elements.error.style.display = 'block'; + } + + /** + * Display releases + * @param {Array} releases - Array of release objects + * @param {string} source - 'github' or 'gitea' + */ + function displayReleases(releases, source) { + // Clear existing content + elements.changelog.innerHTML = ''; + + // Add data source indicator + const sourceElement = createSourceElement(source); + elements.changelog.appendChild(sourceElement); + + // Create release elements + releases.forEach(release => { + const releaseElement = createReleaseElement(release, source); + elements.changelog.appendChild(releaseElement); + }); + } + + /** + * Create source element + */ + function createSourceElement(source) { + const sourceElement = document.createElement('div'); + sourceElement.className = 'data-source'; + + // Create source label with i18n support + const sourceLabel = document.createElement('span'); + sourceLabel.setAttribute('data-en', MESSAGES.dataSource.en); + sourceLabel.setAttribute('data-zh', MESSAGES.dataSource.zh); + sourceLabel.textContent = MESSAGES.dataSource[getCurrentLang()]; + + // Create link + const sourceLink = document.createElement('a'); + sourceLink.href = REPOS[source].releasesUrl; + sourceLink.textContent = source === 'github' ? 'GitHub' : 'Gitea'; + sourceLink.target = '_blank'; + + // Assemble elements + sourceElement.appendChild(sourceLabel); + sourceElement.appendChild(sourceLink); + + return sourceElement; + } + + /** + * Create release element + * @param {Object} release - Release data + * @param {string} source - 'github' or 'gitea' + */ + function createReleaseElement(release, source) { + const releaseElement = document.createElement('div'); + releaseElement.className = 'release'; + + // Format release date + const releaseDate = new Date(release.published_at || release.created_at); + const formattedDate = formatDate(releaseDate); + + // Create header + const headerElement = createReleaseHeader(release, formattedDate); + releaseElement.appendChild(headerElement); + + // Add release description + if (release.body) { + const descriptionElement = document.createElement('div'); + descriptionElement.className = 'release-description markdown-content'; + descriptionElement.innerHTML = parseMarkdown(release.body); + releaseElement.appendChild(descriptionElement); + } + + // Add download assets + const assets = getAssetsFromRelease(release, source); + if (assets && assets.length > 0) { + const assetsElement = createAssetsElement(assets); + releaseElement.appendChild(assetsElement); + } + + return releaseElement; + } + + /** + * Create release header + */ + function createReleaseHeader(release, formattedDate) { + const headerElement = document.createElement('div'); + headerElement.className = 'release-header'; + + // Version element + const versionElement = document.createElement('div'); + versionElement.className = 'release-version'; + + // Version text + const versionText = document.createElement('span'); + versionText.textContent = release.name || release.tag_name; + versionElement.appendChild(versionText); + + // Pre-release badge + if (release.prerelease) { + const preReleaseTag = document.createElement('span'); + preReleaseTag.className = 'release-badge pre-release'; + preReleaseTag.setAttribute('data-en', MESSAGES.preRelease.en); + preReleaseTag.setAttribute('data-zh', MESSAGES.preRelease.zh); + preReleaseTag.textContent = MESSAGES.preRelease[getCurrentLang()]; + versionElement.appendChild(preReleaseTag); + } + + // Date element + const dateElement = document.createElement('div'); + dateElement.className = 'release-date'; + dateElement.textContent = formattedDate; + + headerElement.appendChild(versionElement); + headerElement.appendChild(dateElement); + + return headerElement; + } + + /** + * Get assets from release based on source + */ + function getAssetsFromRelease(release, source) { + let assets = []; + + if (source === 'github') { + assets = release.assets || []; + } else { // Gitea + assets = release.assets || []; + // Check for Gitea-specific asset structure + if (!assets.length && release.attachments) { + assets = release.attachments.map(attachment => ({ + name: attachment.name, + size: attachment.size, + browser_download_url: attachment.browser_download_url + })); + } + } + + return assets; + } + + /** + * Create assets element + */ + function createAssetsElement(assets) { + const assetsElement = document.createElement('div'); + assetsElement.className = 'release-assets'; + + // Assets title + const assetsTitle = document.createElement('div'); + assetsTitle.className = 'release-assets-title'; + assetsTitle.setAttribute('data-en', MESSAGES.downloads.en); + assetsTitle.setAttribute('data-zh', MESSAGES.downloads.zh); + assetsTitle.textContent = MESSAGES.downloads[getCurrentLang()]; + + // Asset list + const assetList = document.createElement('ul'); + assetList.className = 'asset-list'; + + // Add each asset + assets.forEach(asset => { + const assetItem = createAssetItem(asset); + assetList.appendChild(assetItem); + }); + + assetsElement.appendChild(assetsTitle); + assetsElement.appendChild(assetList); + + return assetsElement; + } + + /** + * Create asset item + */ + function createAssetItem(asset) { + const assetItem = document.createElement('li'); + assetItem.className = 'asset-item'; + + // File icon + const iconElement = document.createElement('i'); + iconElement.className = `asset-icon fas fa-${getFileIcon(asset.name)}`; + + // File name + const nameElement = document.createElement('span'); + nameElement.className = 'asset-name'; + nameElement.textContent = asset.name; + + // File size + const sizeElement = document.createElement('span'); + sizeElement.className = 'asset-size'; + sizeElement.textContent = formatFileSize(asset.size); + + // Download link + const downloadLink = document.createElement('a'); + downloadLink.className = 'download-btn'; + downloadLink.href = asset.browser_download_url; + downloadLink.target = '_blank'; + downloadLink.setAttribute('data-en', MESSAGES.download.en); + downloadLink.setAttribute('data-zh', MESSAGES.download.zh); + downloadLink.textContent = MESSAGES.download[getCurrentLang()]; + + // Assemble asset item + assetItem.appendChild(iconElement); + assetItem.appendChild(nameElement); + assetItem.appendChild(sizeElement); + assetItem.appendChild(downloadLink); + + return assetItem; + } + + /** + * Get file icon based on extension + */ + function getFileIcon(filename) { + const ext = filename.split('.').pop().toLowerCase(); + + switch (ext) { + case 'zip': + case 'gz': + case 'tar': + case '7z': + return 'file-archive'; + case 'exe': + return 'file-code'; + case 'dmg': + return 'apple'; + case 'deb': + case 'rpm': + return 'linux'; + case 'json': + case 'xml': + return 'file-alt'; + default: + return 'file'; + } + } + + /** + * Format file size + */ + function formatFileSize(bytes) { + if (bytes === 0) return '0 Bytes'; + + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + + return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + ' ' + sizes[i]; + } + + /** + * Format date + */ + function formatDate(date) { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + + return `${year}-${month}-${day}`; + } + + /** + * Simple Markdown parser + * Note: This is a very basic implementation that handles only common Markdown syntax + */ + function parseMarkdown(markdown) { + if (!markdown) return ''; + + // Links - [text](url) + markdown = markdown.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); + + // Headings - # Heading + markdown = markdown.replace(/^### (.*$)/gm, '

$1

'); + markdown = markdown.replace(/^## (.*$)/gm, '

$1

'); + markdown = markdown.replace(/^# (.*$)/gm, '

$1

'); + + // Bold - **text** + markdown = markdown.replace(/\*\*(.*?)\*\*/g, '$1'); + + // Italic - *text* + markdown = markdown.replace(/\*(.*?)\*/g, '$1'); + + // Code blocks - ```code``` + markdown = markdown.replace(/```([\s\S]*?)```/g, '
$1
'); + + // Inline code - `code` + markdown = markdown.replace(/`([^`]+)`/g, '$1'); + + // Lists - * item + markdown = markdown.replace(/^\* (.*$)/gm, '
  • $1
'); + + // Lists - 1. item + markdown = markdown.replace(/^\d+\. (.*$)/gm, '
  1. $1
'); + + // Merge adjacent list items + markdown = markdown.replace(/<\/ul>\s*
    /g, ''); + markdown = markdown.replace(/<\/ol>\s*
      /g, ''); + + // Paragraphs - blank line + markdown = markdown.replace(/\n\n/g, '

      '); + + // Line breaks - two spaces at end of line + markdown = markdown.replace(/ \n/g, '
      '); + + return `

      ${markdown}

      `; + } + + // Update translations when language changes + window.addEventListener('languageChanged', updateUI); + + // Initial UI update based on current language + updateUI(); + + /** + * Update UI elements with current language + */ + function updateUI() { + const lang = getCurrentLang(); + + // Update all i18n elements + document.querySelectorAll('[data-en][data-zh]').forEach(el => { + if (el.hasAttribute(`data-${lang}`)) { + el.textContent = el.getAttribute(`data-${lang}`); + } + }); + } +}); \ No newline at end of file diff --git a/docs/js/script.js b/docs/js/script.js new file mode 100644 index 0000000..a33994f --- /dev/null +++ b/docs/js/script.js @@ -0,0 +1,138 @@ +/** + * VoidRaft - Website Script + */ +document.addEventListener('DOMContentLoaded', () => { + // Initialize components + initThemeToggle(); + initLanguageToggle(); + initCardEffects(); + + // Console branding + console.log('%c VoidRaft', 'color: #ff006e; font-size: 20px; font-family: "Space Mono", monospace;'); + console.log('%c An elegant text snippet recording tool designed for developers.', 'color: #073B4C; font-family: "Space Mono", monospace;'); +}); + +/** + * Initialize theme toggle functionality + */ +function initThemeToggle() { + const themeToggle = document.getElementById('theme-toggle'); + if (!themeToggle) return; + + // Get initial theme from local storage or system preference + const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)'); + const savedTheme = localStorage.getItem('theme'); + const theme = savedTheme || (prefersDarkScheme.matches ? 'dark' : 'light'); + + // Apply initial theme + setTheme(theme); + + // Add click handler + themeToggle.addEventListener('click', () => { + document.body.classList.add('theme-transition'); + + const currentTheme = document.body.classList.contains('theme-dark') ? 'dark' : 'light'; + const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; + + setTheme(newTheme); + localStorage.setItem('theme', newTheme); + + // Remove transition class after animation completes + setTimeout(() => document.body.classList.remove('theme-transition'), 300); + }); +} + +/** + * Set theme to dark or light + * @param {string} theme - 'dark' or 'light' + */ +function setTheme(theme) { + const isDark = theme === 'dark'; + + // Update body class + document.body.classList.toggle('theme-dark', isDark); + document.body.classList.toggle('theme-light', !isDark); + + // Update toggle icon + const themeToggle = document.getElementById('theme-toggle'); + if (themeToggle) { + const icon = themeToggle.querySelector('i'); + if (icon) { + icon.className = isDark ? 'fas fa-sun' : 'fas fa-moon'; + } + } +} + +/** + * Initialize language toggle functionality + */ +function initLanguageToggle() { + const langToggle = document.getElementById('lang-toggle'); + if (!langToggle) return; + + // Get initial language from local storage or browser preference + const savedLang = localStorage.getItem('lang'); + const userLang = navigator.language || navigator.userLanguage; + const defaultLang = userLang.includes('zh') ? 'zh' : 'en'; + const lang = savedLang || defaultLang; + + // Set current language and apply it + window.currentLang = lang; + setLanguage(lang); + + // Add click handler + langToggle.addEventListener('click', () => { + document.body.classList.add('lang-transition'); + + const newLang = window.currentLang === 'zh' ? 'en' : 'zh'; + setLanguage(newLang); + window.currentLang = newLang; + localStorage.setItem('lang', newLang); + + // Notify other components about language change + window.dispatchEvent(new CustomEvent('languageChanged', { detail: { lang: newLang } })); + + // Remove transition class after animation completes + setTimeout(() => document.body.classList.remove('lang-transition'), 300); + }); +} + +/** + * Set page language + * @param {string} lang - 'zh' or 'en' + */ +function setLanguage(lang) { + // Update all elements with data-zh and data-en attributes + document.querySelectorAll('[data-zh][data-en]').forEach(el => { + el.textContent = el.getAttribute(`data-${lang}`); + }); + + // Update HTML language attribute + document.documentElement.lang = lang === 'zh' ? 'zh-CN' : 'en'; + + // Update toggle button text + const langToggle = document.getElementById('lang-toggle'); + if (langToggle) { + const text = lang === 'zh' ? 'EN/中' : '中/EN'; + langToggle.innerHTML = ` ${text}`; + } +} + +/** + * Initialize card hover effects + */ +function initCardEffects() { + const cards = document.querySelectorAll('.feature-card'); + + cards.forEach(card => { + card.addEventListener('mouseenter', () => { + card.style.transform = 'translateY(-8px)'; + card.style.boxShadow = '7px 7px 0 var(--shadow-color)'; + }); + + card.addEventListener('mouseleave', () => { + card.style.transform = 'translateY(0)'; + card.style.boxShadow = '5px 5px 0 var(--shadow-color)'; + }); + }); +} \ No newline at end of file diff --git a/frontend/src/components/toolbar/DocumentSelector.vue b/frontend/src/components/toolbar/DocumentSelector.vue index 2381891..813affe 100644 --- a/frontend/src/components/toolbar/DocumentSelector.vue +++ b/frontend/src/components/toolbar/DocumentSelector.vue @@ -213,8 +213,29 @@ const handleDelete = async (doc: Document, event: Event) => { event.stopPropagation(); if (deleteConfirmId.value === doc.id) { - // 确认删除 + // 确认删除前检查文档是否在其他窗口打开 try { + const hasOpen = await windowStore.isDocumentWindowOpen(doc.id); + if (hasOpen) { + // 设置错误状态并启动定时器 + alreadyOpenDocId.value = doc.id; + + // 清除之前的定时器(如果存在) + if (errorMessageTimer.value) { + clearTimeout(errorMessageTimer.value); + } + + // 设置新的定时器,3秒后清除错误信息 + errorMessageTimer.value = window.setTimeout(() => { + alreadyOpenDocId.value = null; + errorMessageTimer.value = null; + }, 3000); + + // 取消删除确认状态 + deleteConfirmId.value = null; + return; + } + await documentStore.deleteDocument(doc.id); await documentStore.updateDocuments();
+ +
+
+

VoidRaft

+
+ + +
+
+ +
+ +
+
+ VoidRaft Logo +
+

VoidRaft

+

优雅的文本片段记录工具

+
+ +
+

专为开发者打造,随时随地记录、整理和管理各种文本片段。

+
+ +
+ + +

核心特性

+ +
+
+
+ +
+

开发者友好

+

多语言代码块支持,为30+种编程语言提供语法高亮

+
+ +
+
+ +
+

代码格式化

+

内置Prettier支持,一键美化代码

+
+ +
+
+ +
+

自定义主题

+

深色/浅色主题,支持完全自定义

+
+ +
+
+ +
+

多窗口支持

+

同时编辑多个文档

+
+ +
+
+ +
+

块状编辑

+

将内容分割为独立的代码块,每个块可设置不同语言

+
+ +
+
+ +
+

丰富扩展

+

彩虹括号、VSCode风格搜索、颜色选择器、翻译工具等多种扩展

+
+
+ + +

预览

+ +
+
+
+
+ + + +
+
voidraft
+
+
+
+
+
javascript
+
+
+function createDocument() {
+  const doc = new Document();
+  
+  doc.addCodeBlock('javascript', `
+  function greeting(name) {
+    return `Hello, ${name}!`;
+  }
+  
+  console.log(greeting('World'));
+  `);
+  
+  return doc;
+}
+
+ +
+
+
text
+
+
+// VoidRaft - An elegant text snippet recording tool
+// Multi-language support | Code formatting | Custom themes
+// A modern text editor designed for developers
+
+
+
+
+ VoidRaft 界面预览 + +
+
+ + +

技术栈

+ +
    +
  • +
    + Wails3 + 跨平台桌面应用框架 +
  • +
  • +
    + Go 1.21+ + 快速高效的后端语言 +
  • +
  • +
    + Vue 3 + TypeScript + 现代化前端框架 +
  • +
  • +
    + CodeMirror 6 + 支持扩展的现代化代码编辑器 +
  • +
  • +
    + SQLite + 轻量级文档存储数据库 +
  • +
+
+ + + +
+