From ed2192b2d3eb3c753eedb118baddade86b5a5208 Mon Sep 17 00:00:00 2001 From: zdomke Date: Mon, 2 Mar 2026 16:32:42 -0800 Subject: [PATCH 01/11] ENH: Add X-API-Key header to all backend interaction --- .env.local.example | 1 + package.json | 1 + pnpm-lock.yaml | 13 +++++++++++- vite.config.ts | 51 ++++++++++++++++++++++++++++++---------------- 4 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 .env.local.example diff --git a/.env.local.example b/.env.local.example new file mode 100644 index 0000000..8c7d65e --- /dev/null +++ b/.env.local.example @@ -0,0 +1 @@ +API_KEY=your_secret_key_here diff --git a/package.json b/package.json index 9c80bf0..383b669 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "devDependencies": { "@tanstack/router-devtools": "^1.166.11", "@tanstack/router-vite-plugin": "^1.166.19", + "@types/node": "^25.3.3", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@typescript-eslint/eslint-plugin": "^7.18.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eec1269..242c743 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,10 @@ importers: version: 1.166.11(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/router-vite-plugin': specifier: ^1.166.19 - version: 1.166.19(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.166.19(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(esbuild@0.27.4)(@types/node@25.3.3)(tsx@4.21.0)(yaml@2.8.3)) + '@types/node': + specifier: ^25.3.3 + version: 25.3.3 '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -803,6 +806,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/node@25.3.3': + resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2347,6 +2353,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + unplugin@2.3.11: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} @@ -4976,6 +4985,8 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + undici-types@7.18.2: {} + unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 diff --git a/vite.config.ts b/vite.config.ts index 727ecfd..0318c20 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,26 +1,41 @@ -import { defineConfig } from 'vite'; +import { defineConfig, loadEnv } from 'vite'; import react from '@vitejs/plugin-react'; import { TanStackRouterVite } from '@tanstack/router-vite-plugin'; // https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react(), TanStackRouterVite()], - server: { - proxy: { - // All /v1 routes including WebSocket - '/v1': { - target: 'http://localhost:8080', - changeOrigin: true, - ws: true, - configure: (proxy) => { - proxy.on('error', (err) => { - console.log('proxy error', err); - }); - proxy.on('proxyReqWs', (proxyReq, req) => { - console.log('WebSocket proxy request:', req.url); - }); +export default defineConfig(({ mode }) => { + // Use '' prefix to load all env vars (not just VITE_-prefixed ones) + const env = loadEnv(mode, process.cwd(), ''); + console.log('API_KEY loaded:', env.API_KEY ? `[set, ${env.API_KEY.length} chars]` : 'MISSING'); + + return { + plugins: [react(), TanStackRouterVite()], + server: { + proxy: { + // All /v1 routes including WebSocket + '/v1': { + target: 'http://localhost:8080', + changeOrigin: true, + ws: true, + configure: (proxy) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const p = proxy as any; + p.on('error', (err: Error) => { + console.log('proxy error', err); + }); + p.on('proxyReq', (proxyReq: { setHeader: (k: string, v: string) => void }) => { + proxyReq.setHeader('X-API-Key', env.API_KEY); + }); + p.on( + 'proxyReqWs', + (proxyReq: { setHeader: (k: string, v: string) => void }, req: { url: string }) => { + console.log('WebSocket proxy request:', req.url); + proxyReq.setHeader('X-API-Key', env.API_KEY); + } + ); + }, }, }, }, - }, + }; }); From bba921c9cb43c9588eff8804910c6422e6b5f486 Mon Sep 17 00:00:00 2001 From: zdomke Date: Tue, 3 Mar 2026 10:39:02 -0800 Subject: [PATCH 02/11] ENH: Add api-keys route & navigation --- src/components/Sidebar.tsx | 41 ++++++++++++++++++++++++++++++++++++++ src/routeTree.gen.ts | 21 +++++++++++++++++++ src/routes/api-keys.tsx | 9 +++++++++ 3 files changed, 71 insertions(+) create mode 100644 src/routes/api-keys.tsx diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 3ddfecb..aed001b 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -18,12 +18,14 @@ import { PhotoCamera as CameraIcon, Search as SearchIcon, Label as LabelIcon, + Key as KeyIcon, ChevronLeft as ChevronLeftIcon, CheckCircle as CheckCircleIcon, Error as ErrorIcon, } from '@mui/icons-material'; import { Link, useLocation, useNavigate } from '@tanstack/react-router'; import { useSnapshot } from '../contexts'; +import { useAdminMode } from '../contexts/AdminModeContext'; const SIDEBAR_WIDTH_EXPANDED = 240; const SIDEBAR_WIDTH_COLLAPSED = 60; @@ -65,6 +67,7 @@ export function Sidebar({ open, onToggle, onSaveSnapshot }: SidebarProps) { const location = useLocation(); const navigate = useNavigate(); const { snapshotProgress, clearSnapshot } = useSnapshot(); + const { isAdminMode } = useAdminMode(); const menuItems = [ { title: 'View Snapshots', icon: , path: '/snapshots' }, @@ -72,6 +75,8 @@ export function Sidebar({ open, onToggle, onSaveSnapshot }: SidebarProps) { { title: 'Configure Tags', icon: , path: '/tags' }, ]; + const adminMenuItems = [{ title: 'Manage API Keys', icon: , path: '/api-keys' }]; + const isActive = (path: string) => location.pathname === path || location.pathname.startsWith(`${path}/`); @@ -184,6 +189,42 @@ export function Sidebar({ open, onToggle, onSaveSnapshot }: SidebarProps) { ))} + + {/* Admin only Navigation Menu Items */} + {isAdminMode && } + {isAdminMode && + adminMenuItems.map((item) => ( + + + + {item.icon} + + {open && } + + + ))} {/* Snapshot Status and Save Button at Bottom */} diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 2216516..3ab66cf 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -14,6 +14,7 @@ import { Route as SnapshotsRouteImport } from './routes/snapshots' import { Route as SnapshotDetailsRouteImport } from './routes/snapshot-details' import { Route as PvBrowserRouteImport } from './routes/pv-browser' import { Route as ComparisonRouteImport } from './routes/comparison' +import { Route as ApiKeysRouteImport } from './routes/api-keys' import { Route as IndexRouteImport } from './routes/index' const TagsRoute = TagsRouteImport.update({ @@ -41,6 +42,11 @@ const ComparisonRoute = ComparisonRouteImport.update({ path: '/comparison', getParentRoute: () => rootRouteImport, } as any) +const ApiKeysRoute = ApiKeysRouteImport.update({ + id: '/api-keys', + path: '/api-keys', + getParentRoute: () => rootRouteImport, +} as any) const IndexRoute = IndexRouteImport.update({ id: '/', path: '/', @@ -49,6 +55,7 @@ const IndexRoute = IndexRouteImport.update({ export interface FileRoutesByFullPath { '/': typeof IndexRoute + '/api-keys': typeof ApiKeysRoute '/comparison': typeof ComparisonRoute '/pv-browser': typeof PvBrowserRoute '/snapshot-details': typeof SnapshotDetailsRoute @@ -57,6 +64,7 @@ export interface FileRoutesByFullPath { } export interface FileRoutesByTo { '/': typeof IndexRoute + '/api-keys': typeof ApiKeysRoute '/comparison': typeof ComparisonRoute '/pv-browser': typeof PvBrowserRoute '/snapshot-details': typeof SnapshotDetailsRoute @@ -66,6 +74,7 @@ export interface FileRoutesByTo { export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute + '/api-keys': typeof ApiKeysRoute '/comparison': typeof ComparisonRoute '/pv-browser': typeof PvBrowserRoute '/snapshot-details': typeof SnapshotDetailsRoute @@ -76,6 +85,7 @@ export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath fullPaths: | '/' + | '/api-keys' | '/comparison' | '/pv-browser' | '/snapshot-details' @@ -84,6 +94,7 @@ export interface FileRouteTypes { fileRoutesByTo: FileRoutesByTo to: | '/' + | '/api-keys' | '/comparison' | '/pv-browser' | '/snapshot-details' @@ -92,6 +103,7 @@ export interface FileRouteTypes { id: | '__root__' | '/' + | '/api-keys' | '/comparison' | '/pv-browser' | '/snapshot-details' @@ -101,6 +113,7 @@ export interface FileRouteTypes { } export interface RootRouteChildren { IndexRoute: typeof IndexRoute + ApiKeysRoute: typeof ApiKeysRoute ComparisonRoute: typeof ComparisonRoute PvBrowserRoute: typeof PvBrowserRoute SnapshotDetailsRoute: typeof SnapshotDetailsRoute @@ -145,6 +158,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ComparisonRouteImport parentRoute: typeof rootRouteImport } + '/api-keys': { + id: '/api-keys' + path: '/api-keys' + fullPath: '/api-keys' + preLoaderRoute: typeof ApiKeysRouteImport + parentRoute: typeof rootRouteImport + } '/': { id: '/' path: '/' @@ -157,6 +177,7 @@ declare module '@tanstack/react-router' { const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, + ApiKeysRoute: ApiKeysRoute, ComparisonRoute: ComparisonRoute, PvBrowserRoute: PvBrowserRoute, SnapshotDetailsRoute: SnapshotDetailsRoute, diff --git a/src/routes/api-keys.tsx b/src/routes/api-keys.tsx new file mode 100644 index 0000000..e03aeea --- /dev/null +++ b/src/routes/api-keys.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router'; + +function ApiKeys() { + return
Hello /api-keys !
; +} + +export const Route = createFileRoute('/api-keys')({ + component: ApiKeys, +}); From 426b4e67b0417177b8fa229f8ac8bc36cc828b59 Mon Sep 17 00:00:00 2001 From: zdomke Date: Tue, 3 Mar 2026 10:54:44 -0800 Subject: [PATCH 03/11] ENH: Navigate away from /api-keys when admin mode set to false --- src/routes/api-keys.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/routes/api-keys.tsx b/src/routes/api-keys.tsx index e03aeea..2835608 100644 --- a/src/routes/api-keys.tsx +++ b/src/routes/api-keys.tsx @@ -1,6 +1,19 @@ -import { createFileRoute } from '@tanstack/react-router'; +import { createFileRoute, useNavigate } from '@tanstack/react-router'; +import { useEffect } from 'react'; +import { useAdminMode } from '../contexts/AdminModeContext'; function ApiKeys() { + const { isAdminMode } = useAdminMode(); + const navigate = useNavigate(); + + useEffect(() => { + if (!isAdminMode) { + navigate({ to: '/snapshots' }); + } + }, [isAdminMode, navigate]); + + if (!isAdminMode) return null; + return
Hello /api-keys !
; } From b835c768a6b2c52d155244e32942137f9bd20370 Mon Sep 17 00:00:00 2001 From: zdomke Date: Tue, 3 Mar 2026 16:29:06 -0800 Subject: [PATCH 04/11] ENH: Add ApiKeysPage and apiKeyService --- src/config/api.ts | 1 + src/pages/ApiKeysPage.tsx | 95 +++++++++++++++++++++++++++++++++++ src/pages/index.ts | 1 + src/routes/api-keys.tsx | 18 ++++++- src/services/apiKeyService.ts | 42 ++++++++++++++++ src/types/api.ts | 23 +++++++++ 6 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 src/pages/ApiKeysPage.tsx create mode 100644 src/services/apiKeyService.ts diff --git a/src/config/api.ts b/src/config/api.ts index cc5a45e..6ad68b5 100644 --- a/src/config/api.ts +++ b/src/config/api.ts @@ -12,6 +12,7 @@ export const API_CONFIG = { pvs: '/v1/pvs', tags: '/v1/tags', jobs: '/v1/jobs', + apiKeys: '/v1/api-keys', }, timeout: 30000, // 30 seconds }; diff --git a/src/pages/ApiKeysPage.tsx b/src/pages/ApiKeysPage.tsx new file mode 100644 index 0000000..c9b735e --- /dev/null +++ b/src/pages/ApiKeysPage.tsx @@ -0,0 +1,95 @@ +import { + Box, + Chip, + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Typography, +} from '@mui/material'; +import { ApiKeyDTO } from '../types'; + +interface ApiKeysPageProps { + apiKeys?: ApiKeyDTO[]; +} + +export function ApiKeysPage({ apiKeys = [] }: ApiKeysPageProps) { + return ( + + + API Keys + + + + + + + + + App Name + + + + + Status + + + + + Read Access + + + + + Write Access + + + + + + {apiKeys.map((key) => ( + + + {key.appName} + + + + + + + + + + + + ))} + +
+ {apiKeys.length === 0 && ( + + + No API keys available + + + )} +
+
+ ); +} diff --git a/src/pages/index.ts b/src/pages/index.ts index 5e1b4ed..4fefcef 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -8,3 +8,4 @@ export * from './SnapshotComparisonPage'; export * from './PVBrowserPage'; export * from './PVDetailsPage'; export * from './TagPage'; +export * from './ApiKeysPage'; diff --git a/src/routes/api-keys.tsx b/src/routes/api-keys.tsx index 2835608..fad807f 100644 --- a/src/routes/api-keys.tsx +++ b/src/routes/api-keys.tsx @@ -1,20 +1,34 @@ +import { useState, useCallback, useEffect } from 'react'; import { createFileRoute, useNavigate } from '@tanstack/react-router'; -import { useEffect } from 'react'; import { useAdminMode } from '../contexts/AdminModeContext'; +import { ApiKeysPage } from '../pages'; +import { apiKeyService } from '../services/apiKeyService'; +import { ApiKeyDTO } from '../types'; function ApiKeys() { + const [apiKeys, setApiKeys] = useState([]); const { isAdminMode } = useAdminMode(); const navigate = useNavigate(); + const fetchApiKeys = useCallback(async () => { + const keys = await apiKeyService.listAllKeys(); + setApiKeys(keys); + console.log('Fetched API Keys:', keys); + }, []); + useEffect(() => { if (!isAdminMode) { navigate({ to: '/snapshots' }); } }, [isAdminMode, navigate]); + useEffect(() => { + fetchApiKeys(); + }, [fetchApiKeys]); + if (!isAdminMode) return null; - return
Hello /api-keys !
; + return ; } export const Route = createFileRoute('/api-keys')({ diff --git a/src/services/apiKeyService.ts b/src/services/apiKeyService.ts new file mode 100644 index 0000000..a7bdf79 --- /dev/null +++ b/src/services/apiKeyService.ts @@ -0,0 +1,42 @@ +import { API_CONFIG } from '../config/api'; +import { apiClient } from './apiClient'; +import { ApiKeyCreateDTO, ApiKeyCreateResultDTO, ApiKeyDTO } from '../types'; + +export const apiKeyService = { + /** + * List all API Keys, optionally filtered by active status + */ + async listAllKeys(activeOnly: boolean = false): Promise { + return apiClient.get(API_CONFIG.endpoints.apiKeys, { active_only: activeOnly }); + }, + + /** + * Create a new API Key + */ + async createApiKey(data: ApiKeyCreateDTO): Promise { + return apiClient.post(API_CONFIG.endpoints.apiKeys, data); + }, + + /** + * Deactivate an API Key by ID + */ + async deactivateApiKey(keyId: string): Promise { + return apiClient.delete(`${API_CONFIG.endpoints.apiKeys}/${keyId}`); + }, + + /** + * Bootstrap an initial API Key (only allowed when no keys exist) + */ + async bootstrapApiKey(): Promise { + return apiClient.post(`${API_CONFIG.endpoints.apiKeys}/bootstrap`, {}); + }, + + /** + * Get the current number of API Keys + */ + async getApiKeyCount(activeOnly: boolean = false): Promise { + return apiClient.get(`${API_CONFIG.endpoints.apiKeys}/count`, { + active_only: activeOnly, + }); + }, +}; diff --git a/src/types/api.ts b/src/types/api.ts index 7fa7a08..a748d64 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -154,6 +154,29 @@ export interface FindParameter { tags?: string[]; } +/** + * API Key DTOs - matches backend app/schemas/api_key.py + */ +export interface ApiKeyCreateDTO { + appName: string; + readAccess: boolean; + writeAccess: boolean; +} + +export interface ApiKeyDTO { + id: string; + appName: string; + isActive: boolean; + readAccess: boolean; + writeAccess: boolean; + createdAt: string; + updatedAt: string; +} + +export interface ApiKeyCreateResultDTO extends ApiKeyDTO { + token: string; +} + /** * Job DTOs for async task tracking */ From f47bccab99620507212386805a3e86b412ee99bb Mon Sep 17 00:00:00 2001 From: zdomke Date: Mon, 23 Mar 2026 15:11:23 -0700 Subject: [PATCH 05/11] ENH: Add Create Key button/dialog --- src/pages/ApiKeysPage.tsx | 162 ++++++++++++++++++++++++++++++++++++-- src/routes/api-keys.tsx | 13 ++- 2 files changed, 168 insertions(+), 7 deletions(-) diff --git a/src/pages/ApiKeysPage.tsx b/src/pages/ApiKeysPage.tsx index c9b735e..d250eb7 100644 --- a/src/pages/ApiKeysPage.tsx +++ b/src/pages/ApiKeysPage.tsx @@ -1,27 +1,94 @@ import { + Alert, Box, + Button, + Checkbox, Chip, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + FormControlLabel, + FormGroup, + IconButton, Paper, + Stack, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, + TextField, Typography, } from '@mui/material'; -import { ApiKeyDTO } from '../types'; +import { Add, ContentCopy } from '@mui/icons-material'; +import { useState } from 'react'; +import { ApiKeyDTO, ApiKeyCreateDTO, ApiKeyCreateResultDTO } from '../types'; interface ApiKeysPageProps { apiKeys?: ApiKeyDTO[]; + onCreateKey?: (keyInfo: ApiKeyCreateDTO) => Promise; } -export function ApiKeysPage({ apiKeys = [] }: ApiKeysPageProps) { +export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { + const [dialog, setDialog] = useState<{ + appName: string; + readAccess: boolean; + writeAccess: boolean; + } | null>(null); + const [createdKey, setCreatedKey] = useState(null); + + const handleOpenDialog = () => { + setDialog({ appName: '', readAccess: true, writeAccess: false }); + setCreatedKey(null); + }; + + const handleCloseDialog = () => { + setDialog(null); + }; + + const handleDone = async () => { + handleCloseDialog(); + setCreatedKey(null); + }; + + const handleCreate = async () => { + if (dialog === null || !onCreateKey) return; + const keyCreateDTO: ApiKeyCreateDTO = { ...dialog }; + try { + const result = await onCreateKey(keyCreateDTO); + setCreatedKey(result); + } catch (err) { + // eslint-disable-next-line no-console + console.error('Failed to create key:', err); + // eslint-disable-next-line no-alert + alert(`Failed to create key: ${err instanceof Error ? err.message : 'Unknown error'}`); + } + }; + return ( - - API Keys - + + + API Keys + + + + @@ -90,6 +157,91 @@ export function ApiKeysPage({ apiKeys = [] }: ApiKeysPageProps) { )} + + + {createdKey === null ? 'Create API Key' : 'Key Created'} + + {createdKey === null && ( + + setDialog({ ...dialog!, appName: e.target.value })} + /> + + setDialog({ ...dialog!, readAccess: e.target.checked })} + /> + } + label="Read Access" + /> + setDialog({ ...dialog!, writeAccess: e.target.checked })} + /> + } + label="Write Access" + /> + + + + + + + )} + {createdKey !== null && ( + + + Copy this API token now — it will not be shown again. Once you close this dialog + there is no way to retrieve it. Store it somewhere safe such as a password manager. + + + + {createdKey?.token} + + navigator.clipboard.writeText(createdKey?.token ?? '')} + aria-label="Copy token" + sx={{ alignSelf: 'flex-start' }} + > + + + + + + + + )} + + ); } diff --git a/src/routes/api-keys.tsx b/src/routes/api-keys.tsx index fad807f..a391414 100644 --- a/src/routes/api-keys.tsx +++ b/src/routes/api-keys.tsx @@ -3,7 +3,7 @@ import { createFileRoute, useNavigate } from '@tanstack/react-router'; import { useAdminMode } from '../contexts/AdminModeContext'; import { ApiKeysPage } from '../pages'; import { apiKeyService } from '../services/apiKeyService'; -import { ApiKeyDTO } from '../types'; +import { ApiKeyCreateDTO, ApiKeyDTO } from '../types'; function ApiKeys() { const [apiKeys, setApiKeys] = useState([]); @@ -16,6 +16,15 @@ function ApiKeys() { console.log('Fetched API Keys:', keys); }, []); + const handleCreateKey = useCallback( + async (data: ApiKeyCreateDTO) => { + const result = await apiKeyService.createApiKey(data); + await fetchApiKeys(); + return result; + }, + [fetchApiKeys] + ); + useEffect(() => { if (!isAdminMode) { navigate({ to: '/snapshots' }); @@ -28,7 +37,7 @@ function ApiKeys() { if (!isAdminMode) return null; - return ; + return ; } export const Route = createFileRoute('/api-keys')({ From b9a10777ace6bd549ac6763e3e2ed39acb6d81d4 Mon Sep 17 00:00:00 2001 From: zdomke Date: Mon, 23 Mar 2026 15:59:33 -0700 Subject: [PATCH 06/11] ENH: Key deactivation button --- src/pages/ApiKeysPage.tsx | 37 +++++++++++++++++++++++++++++++------ src/routes/api-keys.tsx | 18 ++++++++++++++++-- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/pages/ApiKeysPage.tsx b/src/pages/ApiKeysPage.tsx index d250eb7..63751f3 100644 --- a/src/pages/ApiKeysPage.tsx +++ b/src/pages/ApiKeysPage.tsx @@ -20,18 +20,20 @@ import { TableHead, TableRow, TextField, + Tooltip, Typography, } from '@mui/material'; -import { Add, ContentCopy } from '@mui/icons-material'; +import { Add, ContentCopy, RemoveCircleOutline } from '@mui/icons-material'; import { useState } from 'react'; import { ApiKeyDTO, ApiKeyCreateDTO, ApiKeyCreateResultDTO } from '../types'; interface ApiKeysPageProps { apiKeys?: ApiKeyDTO[]; onCreateKey?: (keyInfo: ApiKeyCreateDTO) => Promise; + onDeactivateKey?: (keyId: string) => Promise; } -export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { +export function ApiKeysPage({ apiKeys = [], onCreateKey, onDeactivateKey }: ApiKeysPageProps) { const [dialog, setDialog] = useState<{ appName: string; readAccess: boolean; @@ -55,9 +57,8 @@ export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { const handleCreate = async () => { if (dialog === null || !onCreateKey) return; - const keyCreateDTO: ApiKeyCreateDTO = { ...dialog }; try { - const result = await onCreateKey(keyCreateDTO); + const result = await onCreateKey({ ...dialog }); setCreatedKey(result); } catch (err) { // eslint-disable-next-line no-console @@ -67,6 +68,18 @@ export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { } }; + const handleDeactivate = async (keyId: string) => { + if (keyId === null || !onDeactivateKey) return; + try { + await onDeactivateKey(keyId); + } catch (err) { + // eslint-disable-next-line no-console + console.error('Failed to deactivate key:', err); + // eslint-disable-next-line no-alert + alert(`Failed to deactivate key: ${err instanceof Error ? err.message : 'Unknown error'}`); + } + }; + return ( + @@ -145,6 +159,17 @@ export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { size="small" /> + + handleDeactivate(key.id)} + aria-label="Deactivate token" + > + + + + + ))} @@ -175,7 +200,7 @@ export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { setDialog({ ...dialog!, readAccess: e.target.checked })} /> } @@ -184,7 +209,7 @@ export function ApiKeysPage({ apiKeys = [], onCreateKey }: ApiKeysPageProps) { setDialog({ ...dialog!, writeAccess: e.target.checked })} /> } diff --git a/src/routes/api-keys.tsx b/src/routes/api-keys.tsx index a391414..806cf80 100644 --- a/src/routes/api-keys.tsx +++ b/src/routes/api-keys.tsx @@ -13,7 +13,6 @@ function ApiKeys() { const fetchApiKeys = useCallback(async () => { const keys = await apiKeyService.listAllKeys(); setApiKeys(keys); - console.log('Fetched API Keys:', keys); }, []); const handleCreateKey = useCallback( @@ -25,6 +24,15 @@ function ApiKeys() { [fetchApiKeys] ); + const handleDeactivateKey = useCallback( + async (keyId: string) => { + const result = await apiKeyService.deactivateApiKey(keyId); + await fetchApiKeys(); + return result; + }, + [fetchApiKeys] + ); + useEffect(() => { if (!isAdminMode) { navigate({ to: '/snapshots' }); @@ -37,7 +45,13 @@ function ApiKeys() { if (!isAdminMode) return null; - return ; + return ( + + ); } export const Route = createFileRoute('/api-keys')({ From 51bca044e7624c9707d4586a510734fb02901f86 Mon Sep 17 00:00:00 2001 From: zdomke Date: Mon, 23 Mar 2026 16:02:52 -0700 Subject: [PATCH 07/11] ENH: Conditionally disable key creation button --- src/pages/ApiKeysPage.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/ApiKeysPage.tsx b/src/pages/ApiKeysPage.tsx index 63751f3..18c88ec 100644 --- a/src/pages/ApiKeysPage.tsx +++ b/src/pages/ApiKeysPage.tsx @@ -218,7 +218,11 @@ export function ApiKeysPage({ apiKeys = [], onCreateKey, onDeactivateKey }: ApiK - From 5153e014df04a2a55c9c83dd8990e9bde4b66132 Mon Sep 17 00:00:00 2001 From: zdomke Date: Mon, 23 Mar 2026 17:34:35 -0700 Subject: [PATCH 08/11] ENH: Display error banner if missing/invalid API Key --- src/components/ApiKeyErrorBanner.tsx | 21 ++++++++++ src/components/Layout.tsx | 4 ++ src/config/api.ts | 10 +++++ src/contexts/ApiKeyErrorContext.tsx | 59 ++++++++++++++++++++++++++++ src/main.tsx | 56 ++++++++++++++++++-------- src/services/apiClient.ts | 5 ++- vite.config.ts | 4 ++ 7 files changed, 142 insertions(+), 17 deletions(-) create mode 100644 src/components/ApiKeyErrorBanner.tsx create mode 100644 src/contexts/ApiKeyErrorContext.tsx diff --git a/src/components/ApiKeyErrorBanner.tsx b/src/components/ApiKeyErrorBanner.tsx new file mode 100644 index 0000000..2112e88 --- /dev/null +++ b/src/components/ApiKeyErrorBanner.tsx @@ -0,0 +1,21 @@ +// src/components/ApiKeyErrorBanner.tsx +import { Alert, Collapse, Typography } from '@mui/material'; +import { VpnKey as KeyIcon } from '@mui/icons-material'; +import { useApiKeyError } from '../contexts/ApiKeyErrorContext'; + +export function ApiKeyErrorBanner() { + const { hasApiKeyError } = useApiKeyError(); + + return ( + + } sx={{ borderRadius: 0 }}> + + API KEY INVALID OR EXPIRED + + + Requests are being rejected. Check your API key configuration. + + + + ); +} diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index d6e07c8..7e18348 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -10,6 +10,7 @@ import { Sidebar } from './Sidebar'; import { CreateSnapshotDialog } from './CreateSnapshotDialog'; import { LiveDataWarningBanner } from './LiveDataWarningBanner'; import { useAdminMode } from '../contexts/AdminModeContext'; +import { ApiKeyErrorBanner } from './ApiKeyErrorBanner'; interface LayoutProps { children: ReactNode; @@ -100,6 +101,9 @@ export function Layout({ children }: LayoutProps) { + {/* Warning banner - shows when API Key is missing or invalid */} + + {/* Warning banner - shows when PV monitor is dead */} diff --git a/src/config/api.ts b/src/config/api.ts index 6ad68b5..22bedd6 100644 --- a/src/config/api.ts +++ b/src/config/api.ts @@ -34,3 +34,13 @@ export interface PagedResultDTO { continuationToken?: string; totalCount?: number; } + +/** + * Thrown when the backend rejects a request due to an invalid or missing API key. + */ +export class ApiKeyError extends Error { + constructor(public status: 401 | 403) { + super(status === 401 ? 'API key is missing or invalid' : 'API key does not have access'); + this.name = 'ApiKeyError'; + } +} diff --git a/src/contexts/ApiKeyErrorContext.tsx b/src/contexts/ApiKeyErrorContext.tsx new file mode 100644 index 0000000..03557fa --- /dev/null +++ b/src/contexts/ApiKeyErrorContext.tsx @@ -0,0 +1,59 @@ +/** + * API Key Error Context + * + * Tracks whether any request has been rejected due to an invalid or missing + * API key (401/403). Components can use useApiKeyError() to show a banner + * or otherwise respond to auth failures. + */ + +import { createContext, useContext, useState, useCallback, ReactNode, useMemo } from 'react'; + +interface ApiKeyErrorContextValue { + /** Whether a 401/403 has been received from the backend */ + hasApiKeyError: boolean; + /** Call this when an ApiKeyError is caught to set the error state */ + reportApiKeyError: () => void; + /** Call this to clear the error (e.g. after a key is updated) */ + clearApiKeyError: () => void; +} + +const ApiKeyErrorContext = createContext({ + hasApiKeyError: false, + reportApiKeyError: () => {}, + clearApiKeyError: () => {}, +}); + +interface ApiKeyErrorProviderProps { + children: ReactNode; +} + +export function ApiKeyErrorProvider({ children }: ApiKeyErrorProviderProps) { + const [hasApiKeyError, setHasApiKeyError] = useState(false); + + const reportApiKeyError = useCallback(() => setHasApiKeyError(true), []); + const clearApiKeyError = useCallback(() => setHasApiKeyError(false), []); + + const contextValue = useMemo( + () => ({ hasApiKeyError, reportApiKeyError, clearApiKeyError }), + [hasApiKeyError, reportApiKeyError, clearApiKeyError] + ); + + return {children}; +} + +/** + * Hook to access API key error state. + * + * @example + * const { hasApiKeyError } = useApiKeyError(); + * + * @example + * // In an error handler: + * const { reportApiKeyError } = useApiKeyError(); + * if (error instanceof ApiKeyError) reportApiKeyError(); + */ +export function useApiKeyError(): ApiKeyErrorContextValue { + return useContext(ApiKeyErrorContext); +} + +export default ApiKeyErrorContext; diff --git a/src/main.tsx b/src/main.tsx index b12e8ac..f379195 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,11 +1,13 @@ -import React from 'react'; +import React, { useState } from 'react'; import ReactDOM from 'react-dom/client'; import { RouterProvider, createRouter } from '@tanstack/react-router'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { QueryClient, QueryClientProvider, QueryCache, MutationCache } from '@tanstack/react-query'; +import { ApiKeyError } from './config/api'; import { HeartbeatProvider } from './contexts/HeartbeatContext'; import { LivePVProvider } from './contexts/LivePVContext'; import { SnapshotProvider } from './contexts/SnapshotContext'; import { AdminModeProvider } from './contexts/AdminModeContext'; +import { ApiKeyErrorProvider, useApiKeyError } from './contexts/ApiKeyErrorContext'; // Import the generated route tree import { routeTree } from './routeTree.gen'; @@ -13,18 +15,6 @@ import { routeTree } from './routeTree.gen'; // Create a new router instance const router = createRouter({ routeTree }); -// Create React Query client with optimized defaults -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - staleTime: 30 * 1000, // 30 seconds - gcTime: 5 * 60 * 1000, // 5 minutes (formerly cacheTime) - retry: 2, - refetchOnWindowFocus: false, - }, - }, -}); - // Register the router instance for type safety declare module '@tanstack/react-router' { interface Register { @@ -32,8 +22,34 @@ declare module '@tanstack/react-router' { } } -ReactDOM.createRoot(document.getElementById('root')!).render( - +function App() { + const { reportApiKeyError } = useApiKeyError(); + + const [queryClient] = useState( + () => + new QueryClient({ + queryCache: new QueryCache({ + onError: (error) => { + if (error instanceof ApiKeyError) reportApiKeyError(); + }, + }), + mutationCache: new MutationCache({ + onError: (error) => { + if (error instanceof ApiKeyError) reportApiKeyError(); + }, + }), + defaultOptions: { + queries: { + staleTime: 30 * 1000, // 30 seconds + gcTime: 5 * 60 * 1000, // 5 minutes (formerly cacheTime) + retry: (failureCount, error) => !(error instanceof ApiKeyError) && failureCount < 2, + refetchOnWindowFocus: false, + }, + }, + }) + ); + + return ( @@ -45,5 +61,13 @@ ReactDOM.createRoot(document.getElementById('root')!).render( + ); +} + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + + ); diff --git a/src/services/apiClient.ts b/src/services/apiClient.ts index 56bcc9c..31576ec 100644 --- a/src/services/apiClient.ts +++ b/src/services/apiClient.ts @@ -2,7 +2,7 @@ * Base API client for making HTTP requests to score-backend */ -import { API_CONFIG, ApiResultResponse } from '../config/api'; +import { API_CONFIG, ApiKeyError, ApiResultResponse } from '../config/api'; class APIClient { private baseURL: string; @@ -33,6 +33,9 @@ class APIClient { clearTimeout(timeoutId); if (!response.ok) { + if (response.status === 401 || response.status === 403) { + throw new ApiKeyError(response.status); + } // Try to get error details from response body try { const errorData = await response.text(); diff --git a/vite.config.ts b/vite.config.ts index 0318c20..8d86bed 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -8,6 +8,10 @@ export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ''); console.log('API_KEY loaded:', env.API_KEY ? `[set, ${env.API_KEY.length} chars]` : 'MISSING'); + if (!env.API_KEY) { + throw new Error('API_KEY is not set. Add it to your .env file (e.g. API_KEY=your-key).'); + } + return { plugins: [react(), TanStackRouterVite()], server: { From dd8f0e16def5c54ddca98f0608be37a827b37867 Mon Sep 17 00:00:00 2001 From: zdomke Date: Tue, 24 Mar 2026 11:15:28 -0700 Subject: [PATCH 09/11] DOC: Add API Keys information to docuementation page --- docs/getting-started.md | 4 ++- docs/images/api_key_creation.png | Bin 0 -> 32992 bytes docs/images/api_key_token.png | Bin 0 -> 53491 bytes docs/images/api_keys_page.png | Bin 0 -> 91892 bytes docs/user-guide/api-keys.md | 55 +++++++++++++++++++++++++++++++ docs/user-guide/index.md | 5 +++ mkdocs.yml | 1 + 7 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 docs/images/api_key_creation.png create mode 100644 docs/images/api_key_token.png create mode 100644 docs/images/api_keys_page.png create mode 100644 docs/user-guide/api-keys.md diff --git a/docs/getting-started.md b/docs/getting-started.md index a568413..7a17bea 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -27,6 +27,7 @@ The left sidebar provides access to all main features: - **Snapshots** - View and manage saved snapshots - **PV Browser** - Browse and search for PVs - **Tags** - Manage tag groups for organizing PVs +- **API Keys** _(Admin only)_ - Create and manage API keys for programmatic access ### Main Content Area @@ -38,10 +39,11 @@ The main area displays the content for the selected feature. Most views include: ### Admin Mode -Some features require admin privileges. If you have admin access, you can toggle admin mode using the switch in the sidebar. +Some features require admin privileges. If you have admin access, you can toggle admin mode using the switch in the sidebar. With admin mode enabled, additional items appear in the sidebar — including **API Keys**. ## Next Steps - Learn about [Snapshots](user-guide/snapshots.md) - the core feature for saving PV states - Explore the [PV Browser](user-guide/pv-browser.md) to find and manage PVs - Set up [Tags](user-guide/tags.md) to organize your PVs +- Manage [API Keys](user-guide/api-keys.md) for programmatic access (admin only) diff --git a/docs/images/api_key_creation.png b/docs/images/api_key_creation.png new file mode 100644 index 0000000000000000000000000000000000000000..fac04d065339ba6d044987655bca93e890e1b72e GIT binary patch literal 32992 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
QOmlXi z)|q+k%Rr<{psMBc0l%oM;-Oe4XJs$*iy{bS&jo=Vkpdpy>Bw;TG~PS)3u&Ephzo5 z&HTv^PzVYGe(j>$^_h@f+#swuDSkkNM{@(f6z2|jH10?P5ZW_vcv0IiCSUshIN7M^ ziS$HYo6bO{biU+{FiN9XThENms0sbTwu%4LtE$nsGhOE$><5xj0o1n54LXOPC(dI9 z(otAl343#qZud;l31hfN&qs>DY{JQ2NdIcd#DcZ6p3W&zayVH)_h_K0%qc$P z4I&TW78X70)PCeN7exl_pwH`dW&ont0YM^KS85WV#gQmsDco<|1SR=*;cz@DOient z-!@W;^QUkOg>67*_fzRX3teA$uWi|mFCM%F!TbS&-42ANh==&cmtu#0-N@7gWs)_q z5cyQVYIDL+i=nLNoGOFmw#H5%1t#|c-SRrX!(PHh zGs0e9DhmYjqYeuq=lf@w0UcBBPj>M^FSQX*HBPslkg&UX$M@%?!tCsAot6g&>Gx&} zrv_UGLglcX<1BDTls0@lOE76ghEcU3-em&WfM3s!jsFI*zF@7Ao@+Vrl>|A+ip<&_ zaMW7Cq6N1Mavd(=QFh+fuC7eD1Gv!F%N?{%0U%Xix2#MXg!fEz`ea-! z8TT?>aPu~@&<`T29X@z8Rw}x7@E5hZ2D!t>PQX1fBFhEztysT=A{p0x94j))u$NQS zRYp=Uv0=dbk;H{YA=7R4me>fw@Z;x6RqjJxRwzoEoEqNQ@wIw9_2QYC67bys%~{lxvEr>w z09vR_0`|mx6o!W3`Gu!nJg^;(r<1+TW!Qf6#HPj;?z%1H28y@64Y$-ligA0lnyg&z&qtbeF~b9_V=<^) zdodqkF6f5}K7$ws#oZgP(t95OfSH(|c<0D-b;4Q9gC_}&lUPFIey^xYoIu$;y)W_q z*WOn~McGAdD_q-Ci!Z!L{c#o9zd@IK~|;6=v@8>N7UZ7x_yTJcg)|$8U)f|gmji+W>-hsV=i@C zB~eXET%W#X3|O z*#(zD?^pNt0ruUv4~ZV)t_NojJ&g{j`N`V%237a&^4xVAlFe$U#%hUv%499d5z$q2 zg$^nAyvpJG+n}@T+FBrOZ4o4@Ex7F~oOm&mPS`QMakFsYZ7?z4_9PKTD@ZWx?J`KY zk*|8v@R^5`E;z2QLZDvB#8}rz&`++5eN{#uAA+0z`kiPX{mTIMV8}cTUDgMjKR8)( z0ZLVjfmJU)wThk?PTgtnS*dP~mkT-FK{;9Ki$qeFp~MBhqf;A1RUkD)fku5P}}?0b>N%ZwBY=MG8SQey0? z<|Sxk5(~yLNNU}67`bQh?IPV%ujtQrn|Ld@=#Wi>!k$&{f*S`z9x#UBFj`WrT8#5z z&nAo0sePSDyfqZd;?Q|c!_OpL$V3GZH+d8)d3`X1%XXDIz;;<6WStPfaMtK}2JQ#i zS0x&M)MEwe1cebBU)utmE+md{ovurCI2y?ghguOEXEQT;h^A8tC-6u z3S)_d%oD^>vpt!|t~y?a0GI6iZby5-Xc?-=g|qqnot$bUhp7Tonm<;xI@wEr32UDIHvc-gxwDuLfjlQ9rmp zfYLCQz;U)5^f<-xU&ts^L)s`8@DbCl3foo^gGP$yzPNJzMTppq>jKeX=U^!i=XKNt z9KQ5u-%mXC9Bp+I zqiUSBvb)bkf%l(^*c%UG&k+4XDOpf0~*f%qWC*!C|+q4^Xl(n{clZF zM(uu-P!nDnTze*IT`a`azpJcBGWooV&?K$?g05Q??E zMH7`x=d6{ebn1G&y;9OvemwEY-$ejjC2kWj%WDPn7hT~cuuySwYGjtQ-s&JrVGFzW zSJl`q2a;CagG?ADj}_uu6TUeahz(!(1gM@Z0(t+2gENQ>E~XbV^Ru(v2w&C>bG})_Q)Z{S8E|0XJstWwBjAWRAo1|Oh10I3OpR~dw^fY!V3ma$N?rA+*xaIV*u{+O zexlv@5{2!)`KH#Ys$l@bq`NVu%9T5Rr}}k9#?2w5PD4QMZBZbcdQ)c6*#T6;oM%MP zM^Vr#3w_6^+%n33yhihW0=vaVYa|sjKpb%(>_O;B0J#+okLslFW)vBh-eXXtoU6-A z`}y#Uxo|jBAXNjEo@rT=!f)e_Wye`t=1w;r896kt7AfE-Qaq$_Ed%Pxt~P4m~$%?Ke{z037H|Dwy7?C+<%144T?w4N{9Z{)t&K0 zR{H>Q#DlDY!pYI5`ew{7fUK`wk)o~m%K%MN{s4L-9h?3Sap`Wo_s*&$J~hz@+Qu^& zm;=P+(n{;uCb>Iy^{5;B3gb@zGL(b5!1CQ&ov6zNx&J$9K+cHp1+=oIR5C>i7HKKy zvGat_Wk%_Y5T^m5s|!HNc5!F4xslJZ;O8rM!QRY1C*+O=MVo0GPc80XpX>U9DDmSt zw2{7pp;tR$;g#Jz8E1OZ2ao?BdQysI_+h(5QY4lBvVz4;jwwkG7O(g$60dm1_=fZf zE$#sG)R|_=rO34x1Xo#b5P>3+pu|pfxCxN%)*H^Qw?UZwCWa_n8Gjluma^=RKQKVL zK-;*)GeKa#q7eXVIbQ42c{I~xLP$_d%`62dc$024V3DS{@VlJc$kxCz2`rOA3f3$PJqV!AVpLs#X*0|}tdbU``5 zsa8c-rWp?gq)f{hGf4}2-^t-ICp)79pZ(}~9*q9uf@SWLP7OK(_r~O&7XOA6oA@kKl=bRQkV;|Mo$x6IvJt(GBpx16 zfgnIP=Dj&bU>X_+s$)r*9}kpA){Y}Q32V!MaBl5}-Sfa>05~J@c3)g~yglO7a18TS zA~7YKrY3OiffPX|90`of`U8M@<$|hph1(?50&U?|{Qq zdv>0&IA`=Y8{+5tS2MlJJP9fMR@CZyXId}`bXS_N@a&pL(^X=YHKis5vATH6D<~7O z59nvd2L!X-d|udpl|mXZ;39}9O7X}2*GVIh2ZAB-L~^vP4=$PzI)a)5$shz}$N!0$IF$A{Ouc}!D*V9~C&*_PrR zF?+lq&lu?rH0{N+tcMih&LKY5BtNcEs-K0!3qTp$?Dd*ahtw{LR)kn`>-*aW3b~-j zey~6EyJ4km!rQ340?on>kic=|W~?E#4aTEbm(>G0k9Aq*ukV2Zw`Ij9Kf}`AZFy94 zia=3z5;E^-k%x8q=l;#1Im`0v@(tAE7gp{4__)!_RXmg9am`|Bpey%&_50pBdGCD; zT+l_1L1Ba~p0^ou%cJSR4M=wQzWmrasH$}=`=J^t^TLY4RAaMJRZY#!i4ETje}AEG zw^^%+_zN#&dMY6^;KZBx1EYc96ZjQ;qpx(Oh6pXt>*n+#xy0M>nQMh4j8Wz>coQxm zdJHgXk1%3d+u9*7o%Mjz!>pH93Pk)kzEyl?$>#|JK&C{UE+o15A$taZT_F;j#o4;q{a>)5$A~S6Ws2cdP6azT(3d`}Ue z<%#6fy3r=?g)2M;N+$2 zZCarScLqZJ{QY-iUmrE;M|#b@;;A2wuXLK6un!JPw)INs@ox;gXn8`(GYx%+Cwy7y ztnFv!I^cdnxLlFJLw|y*k9PtyXZv+non0vlO^~S2Wy}}#8>4tfCRcc?K*H_zd!1cP z1t}b-C~84jn5kTSR*2y($Py9b3DAKghs`l)ks{ZCOo{pjLAN06xvMgOg{H$PQx-46 zPkv^{%p~eNl7`qe(%H)~pg-3G)zg4LQ&aF6xjaHnf>j4xza^pAI0rQezL9H}APWmM zBPISW2vUbl^MMG3CHneiqa)qgYxHON88i*=u%iWXeIxZe`eG2oH^;5DBsJIiq4M>l zK&lsiYJKzHTYg?*Xz8gUmz?o4V*MI8-^SDE<&J;iq-YR&j(%c0#s!6X@QTQQt;xFQ zS9x2k?Y}Ss9v>5e_Y*=-+lBqy!w2p<9P%^F#Dk^iroZ=h4u2|HYSicIW%Hoz7xPq4 zD3D|&-*l7C7jY`75%@TyU*hqX2s6oNiD-QOxV**3qws6`MShRFx{MEX4!3RR$vQrS z`6Z(>zKn$A4=dj?qk*h=fs)b1@esbn7aXqT&3}5>1kIdvBCfT&%2(Eu8lT|rx7b!C z6X{a%QK!e=d*^*ikC2()-vGGH>nv2=A_w3mn2ee$?Ec>w$8gGdFus%x3kUsO$!W6+Flp>mL6f8w5WV6hXXsJQ&aa-yl5vDtM4c zP!84Kmt_dr0%a}f{&pQye{szPg0C;ZgVJSsiT*qHgEMZYL2x$mzf+pN3m&A#VDsX? zb3ewP$(f87VLpFO(A|HA5uQ#=UHLi7pjU7_jW8bV|7a~urQXOEn=zC^gfBZXcjrgC z(ds3zD0=G1^MR-D%g8fCKg&!?q8O6u{jB4$Q{Scq(D?kq?N*fx>}Hp|5{db9Nh~S; z2bq@j$}Fu84!NX`0(pI=ijJ{qcK7?8&8o+@Gi`d2Z#&}P5km6DNcc+!EYZM3dlM?HoQo`_p85_>OFy ziE4s4ApS-po|BM|9mTx6NJvlr6{|3dU)J2NZn7~Ml*NBy|4tO8 zN>tEP4k4;veZ+5ZRHeyx2%7P5&KtXXjiWZrEvH!H8ftSbluiOpR@Fs6d9YO<#@E~t z-@SA|CG;eUQ@=`=U5kUw%B`4Nc(=fzWAb{rMkeK!=ckg)+QEkEiehcOnu*P@^oiV5 zgNfoA@@og{GntjM{b~ubv6n0?4qg{;^oCn(EU)ES8su`2C+#{pT%$qf(IPCy(p5J$ z<_RrY^9)%6rk0Cy6hfyzi-}N)nq^2F&yATF#Z8ZFpx=bG9ciLw(|!Df_rp92nBZ9k zJUXpX-g9X;H=1HPzs5Kq4B0au>9p3{f+lk1X3GB_q#z=uPu5*(qDwz)G|Cn3?N8?7 zDYd^J+2~Jtl`~KKX128zr5v>(eb*n z#+f3B9}WA3aOLK*!%^nV=$O+)l6t)x6q#Cp@+*ytJhsawI`RrC8mU#LTNsiVbQob? z!ag4J@$P$jCB476LS2Phzg|_#X^fRmj-9Mme)7#?TV4L(o3zO+9(XOUww@p-M@-hZ z40~dG+%ER>Dy69x({F2XX9{FSo;MELX>oIF(;F*CJ7jRwIUR6KwNTg?6;}9CnCz+s ze#{$Kk_)(6Ddu}iFHl4@}6lP){M2YTAtHiK^C+Gd*L zVWDgLtjvJ;x0)$)?fqpmJ^xhg_BGsOWmuF#RENfMJp3vkUE__r@N^u<+phm|b>*&9 z=_)E)>pqYV+8Z@Q`mSwuK%hl_{$l1(nn~DeH>Zb2<@) zDBpCLh2;n3IfvJh zK_ZC=wU4aymmDt(sHWFFOzfJx(T7DvsBQnoY1N)9!8ZQ2pfWs_{n60|H8XhxuAM5q2K_6F64EVxEWgrnN8FXy@%INU9(Gq(EHc2?<0Ro)%5r4gRT%E2m$w_zrr4H7!#A#u&U6IR zbH^?tcG?24zlf&$^|c*bMZz?JPo?r8ZOA>?rKONgv$1;V+-?KUNr#-h#$8pD*Gs#f}}}U?R)5whOg6+Lpn+D783}+ zzHTbVu!fc|=lk91e|Lc!zvFN>F3vP%+VfNx%k|gg_~mL_v4#eD=>#dPH%+?a_IhP$ z6cG)!&0$N%Mu+yR-K(8zN)0aV{G!{@_cjz5LYmaB6ePxH=zF%eEc?jT4tvn1QxJSr zQTKwH-4@sNOwl0=FD`kU_hIS>LQ;I=Ioe&k{mR%4%xDIyBsSeN0ijUmsZl1a#&V)e z(XQ3x@lwNFQL@P0f`ZwI>N*Hq`gT zGp2qX^la_xsf1N_Ke5-=x@_;boNT0*f!D~+hfLBDvhRn9DW;;#6D#RAejfw^1Nvc@ zLs!JIOOJ9nw(+jhn`=SiERaiU190VUYFCU;=^*fn4@DODqc;>xk}lV>NR8aNuXT&X z>A0e|(kHx{1urpa9CaEc>1a?K;9($%xaF`o(3s2t`JGY@2>E0%zkdX5~Tkns?m_1GuFw` ziLG0RgJ<((%%otPboeoZ%w+7xn|FI3NC%PeVU5iCwa9i61VohNt3AB zrl5KTcFg+53;1|s7zS{k3cN}dG-(VBsPBH6r#rngYAT@NV_q{L ztKa@3HNTbuGixOVBEVp`8l+*rf;gQ-hz{eF=p+PRxd#$q?T~Z-*f`6U>8w9KC^=E~ z@bEDBI(tpqfV2V^dKr<5k$RA4Iw-X$Iy&sWrRQKHDQR2pS8)j297i^dI2UHwdv9_2 z6ycK(l6TS#{I2PW4Z^X#B+-Ez7lHHDqOg(YFjsl>I^=Y1kMA1i#e5xiBMOYQMkzeN z>7IrY#+lYRM_4Uqql);&e-gtC3RwM|yw5kS6Uj|eoG!-rU8O{go=>|(1=EVKE@YA$l@?YULUs|9) zOsm9@ul&wkQJ>k|qxbfiTLXRWMn+S83YpAb*OeS>E7n$L# zlk$a5;r{j{+;ss`3@QCAE*NGc9@Ddx?~rZt#>SmrkMqzwc<L~k|`Wbi4{1c|RS;Z{yzv0l_G}V)_ zN;CQOmg#N-@waQgz8l2AOfdC%8`QVnfBDbN9IHOs-rPB2U8rfU{X}g_R>GjTth{rz z%j{WckVe5{wkEC-x}#l=%;UjwNY1v6#;aNDP`j#wA06)vpPoL)gFS~ zYriWa-94qr4fJEA0SM34L{Qtp2J+1_v$Hq*p1v{VgtVAw)_OTN5zbHHC3f&PU{@{= z&wpB~MLHSVpYjCdkawOEmp|=ZyA(O&u=6PYsnzF+b9f_$1qp<-t;J8fI<`jBV)dv% zYo!$}aG?gEv0W1vX{JTP`(bs^oI0I93Z`1IopF4#$-O1qf-^B~%DvOGv#+_APx2(d z$13o8Yt-F`PfFvkXX!+BR!C=v?h%vDP+s(CSYAEmra-i3(&_dcQ&Ywj9cY?MYnbRh zh_~HMCI?TyfWxrXf#ch~Fm$_L8tyzOB{x{j>#H z>{)(EMi;Yn7FgSDw|me#k-Lxl;<~j~xQyq19>je0*e@|b7(k0u{ab|BRg7#vZ%jBG z$cJVxTLpWbO%Dv``)F+;)2F4B+~7*NNXGGp`tOfiht@|nU#~7NyEJbs<{iXVHxBCf z!S(mWx{N`lc4w)yq5c^3N;wMgCZvhjFJU~1mAu^M`4c~1GL<%mHOsq?TJ!~-0D(#U2_B?uA$xMW zH@p56jej^cdU|h9Uf*HIqHu4-N?tteD($}$mYEtL*z=$CiJ{66_~qMoQ#D)Y+GSgaG^6#PXfE?MICP(&5l_;S z)L*TfJtaGuedU@PCG~6c3s@+eot5q_D`Q36%1M=gd@P1jwg&^Lb6{+R^jFM3atu(*cPUtH$6lQ3+-th`-Km^root1JJxh=`x zdNX2HQ)YBc&pg`2Z4^1jB(kYwg*fmx?>lmI&@Pk~X3h#=a>zn2)i}V_mLplVxBfK} zuqnf=-^Z(|1UEWM#HHy+j^YeY#1ai*z8a5~MYS4Qv;v~FE2uofPLzSMHR@fEGIQ0M zTYuN#E-Iy8%-`B8KDeVt$!5vQ;j`}Ygz`<=l>E+3QhT0MM>yb!dBKjVif%21V}s2j}f;7{J`JafD<-a)D#c|Z< zWW7wA$tkqkLbW6-;vf~tZ9P6%E7)T9bjj&-26z2Ob9NOyq%*kuRuIc`2|UY#mWX-v;zLDKnnO}l5?dm!f8m9(P0uxL zGqE~*nAOsLh2_Y0Rq6Uq)~@JBY5TB=ao)^Uvq~RlpObI$^uHeT^d{DLUCJtaUfp4b zA9*~g$AgeAvuKFUX!5AszNfmK!RzmF!awNc5e*&?Q(GmpWz8!RvCY_Ct1ncnKU&b! zKxfe{p;-t;V+x;*z%wH!dw&G~UiB$ntQuGN$~e+EAT@n`V|KW((7VXlE@QMnmHt>1 zi${~wu1Wh8j&$dKE15XycSwUC^p6>j#%wt4TOMUHqw3N>`X!twU+YwSYui`$w#aN2 zWA9#4&<;Jc-FDmDe|k8?lk=v&MQp+&YP&x@s~CkRX;zdU`g_tQ8G);NDQ*48t%OIw zQc7H_6Wh`?%V(7x1_qpMS0@6h!6Ds`WO^F!*;&%`Xo#tfxIDsCIz>*Zd5<~j=vjIv zTD=9Yex{Zrhmq{}8Y^QduA(D5>lr-EMtU>-TB{zETz_cRXS^w*ZHvTsZf2yMD$YKu zHuWZq7i!0~T2$DPj6&O@nsu484k}Gbctt&=U4Kdn?4bS0f9yC^Mx%PC{;aVxSYw3G zkPuw7?^X--e)$6=ji5*8yszz}q#cZBDl(B*d%3|JTGX`|F+HM6-5i7IK<(QX7H{uA zGPkQ$h}v8~eC%V}KQw8+gQkST`ee`7S_-EumbPnnd>IA|FgiiJwKB`BwUBm1v7XCs zuFmfC=BruewA|oN+K*Rke3NS=42!lGI&}^$T#Z)~(fvca9+CQoioDDSwDq|Q*-H#u z)qzhwgDVQMw2pX^120nC7l|3HaYx$2eHGneTFj3WS0?jx23dZ_g3fQ6<$ODg-$ZFj z2mSWNqevn)y^4gkZB`EqYu%WAlH_0sqKcxQe%prsji3RZQn3#bTBz? zQVc%mT?8x74bXB`Q0ZEaYvs`gHis~EG%rp2l#AM6>rOP5lB|aH7nZ6YkE6NOyzRA( zV>WA!?fsBLV!N)Ej2ypjiAsXKdN=WBX>rCoTNcLE1r2lX35RX*)`&V=xQq7kKnoa| zejMLnN9&zUgMQZ=znB5B?#xNvK|9Q(m6r5!ho(aok#YU-D$JH&yQL@W?-B9dwG7}{ zQsVI09)P-NqvD*S76v7<7p6-b5r)vBD+5oG+1TN3QV)=iDtGMasiNGTX{4dmk)M;& zIS#S+heQ?pF~3~~f;72WT06x})WJ1Pv``fd_TJ|-=t)%fFs6HvPvJP*S+HA?uE7nA z>f)RdtGH9pX*_aoe*p^QgZ&p=~7cWpjM#1J~3uHZhPle;T75V)1Pic5Y?8n^RS^se;(#@{cy}9HPthRYGl_X zX4iO*)3&E;s7YZiO57YJ) zQVUVwYO-UtifHSxEcvQjsLu7tE}AQ2@ZpeMo!`J}rSgy@vtNGmrSnNTV`U?};(1s1 z)c8Awn%(tKV;-)LQ4u@ehEtcWwItn2#MMjluQ1sPT9{V!Mr0{@>Ycuc$AZ1llWlLzpcwpY3kG|Uq*Vq`17m$WbliJ>&@7^N zB{(_MX>RSHsBieBqCL}FaL25!wc>nAM><&B#6z}XY1-AZOQw&q{N|TT6=0E6+e}Sg2IGJNL$5QeOQD?aZ*Yk(Dmy z@PPi6=3ME+4((P^#d&4@9e&5WQzeYbNlZz#J(P28)ZkjAqZMc#vD=aYx2+?F>vew! z*R+>nHndHLkHRn+hSKHP@iO1xs6R<9@E$txv+9I$aw+b*uGgKd+9l#+J~(wm)cnbf7AXRWKn z9quhk+Q;riRY;)@E1wqg$rA(&&X(xfw|jZ$86_F2StQ?=Im$J65LWE56_s0EQ)xf@ z1@C+gt^_|bcMSvF@>2Ht&86pQMjkynq9fT}7e#;ET%5gB{fwr0BZ(Fn?3wex{U}a{>+`zQ zQ)Rv}wT%`rw z!TAwPmuvLg6dkGWc2V%36=Ck)Ekx9ZnpR_=#IFf^Fcc#z-|>2@J+R4fkqwkDXwG9{ z3dW}`hO0D=#xn!b{d{bRY0KY(T;kHgI$WQlaSLp7jKx z6R{m#wWC{4!ml-@79*g(HNdvjbc+SJ>0-hE0Tw1@=VCLMQD z__ey8`n{{diIO74`RrLqhikxx&Rlp-GfyK0$Jp?iH)b3Ur=lVTB~NDr;_Hs2jf12X-zT%_4nkIqC`;|FrDtdSIpgbU3Z>`>MPt9s{KAF^<= ze*5*HH{e>HXH}I?^#sb@Bel2P$uFE5`ER|({=ESg@xNW&>#ilcd2S%6b;5*@G2*5%kYsKMu&qP_d}@qm#^I(KIJ?WC*@lZ{5{KW~hNe%Dn*3 z(BpEpx8|;?YkU2PW-~wC`SV+*;jGYocVW%j>C=4ssIjSLrqlA()0ebJ$2_ypHVN~* zD*Q9Cz$-p+H&4oCiy_6XJ_6H2&l9_%(fHc5Z6obl)rO&AZ1Z)Bb=#tWF?KuRb_?&L zH7mklbsDKGFU5diMk!%yIQ)o$nBEp6;Ei+*JDMqM4?p{o(ZG7YqcomaTKE|RCi!My z5F3f2(#Kf=7E9Mza%p-5JXYRIXnL58{N=OHQ5g^DW!5qJxVi)P)P5VYfvUTsZ)(yS zPA;iyB80CxophzjwD=%jNVU}f;7y&{AAG#2F+t*0HCC4}k&ywT23^B}fd`v|L4mHo zK`$K83k(eM`)4p%(B~V_OEd%G*HehA49H*C;1NF?3Mq+5NPs?-4DF4LtsTs49B;R0 z4nU-4&6U+1)n%l)4Q;IG^^I%{jOksiY=3qE<8|c*U0NAC>JzzISz0@AyYi9z(}Ejx z{qr^h3DG}I94+`r)Mey}L~QJhiP-5G=^07*5r~M0cpGnf9`_h%#Xm!@O#bp5hjXRh`_)E!6Zb5lwHA(QeizYdanCW z-UXrx!=plE-T-nWUVkmi$WpJ&H1Il5s^q#G;3T1~K#>hO3zTIw~qEESJ6ZoBj{6L2P)F8vaMbf^bF- z5Lwfvm$;NGSP=i=Cu@4>?Z0yQHN--SFXh$3BaGxt(0|2GdBqI#pGgD?vQrRAda<|r zO?v(6{V#RN*6{yIo%rhr{1?Ua5t|H0-M^P#5bld2!~g5)`uPjOslUG6P4_AJPA2o4 z&KZjzuiM3~M%I_1h@TqL>7s*viRbCCJ^8=+67`{;ZQp2;LvfkBz4au{ntljpbb!9S z5c}H57eD)lO1?ZX(ytIy&Q`O9okMH2eDa7MK#RSa_^PJd+O z0dYGbCn>3j(CSq zLGgTC5MeZaF1t>&@CGj4CdeV1IUTorp_C{TUhyn?zkG*dldyc1l+E^_Zm+(*VaT8Z>f9(C=k} zHwv5={FNJxywg3%BwNSeQW3`kR^1ALV1Dch^&)Nhh( zWx0ZW5Jr|tH)9DqLsvU>O}34GK>%F@zFRk&%`qz=U(3f=&U|ZpB?k_6D|P34)$*_Z z?CJ(FF#i4hQpmSHn@-E6qizat7j`nL#I5C1MI%RPy_~TqeA?EJ`k8aQc#=;cXcRH0 z@uQ3ca_RiX6QntpyJJe8o-GQ2p}MW^v9hV$vE+RDWJbMUbA)@tW<2>T0*wT}6c6yG zjk#H$eDDX=fuIRviebA zeA?Q<;^R!@%GGv^qor1ej&%uU5Ba;53_B^=31j|)ifvooktNTxIkv3{i8%3KMVmwq zmP)nqkJC94Xr^NCqTr2w=)K3im&^EL`ZdD9oLlTD*6MlL*;SwNbQ^4mBb*5D&O94j z&kbH0fB%m?!`(;7F+8}9dK2`MLHjndB(WPe91U&)whHYhlx>-kU&+}$jD9pmEw z$LqLBTz1F) z&Sw8Bbv*y zUGN}{N>R*Y>3IE2v6|915;3@@84xe<%$ZZfj)$`&uhrl`zbv=1m)7@_XhQOepfkjE z@dKSRMOLzamyc+UK+iW;Ja5Ef2Lt7?)1b8Vp?!`n%)BMk37Wbjy^KO0r&D9S0?&)b z_f$tBpuAF0P^d8-BTzx!eQOy_A(w}ML5)fd z(d=?ce!CXWp!+ebmRHy>*d9=ADi_;s*oVxP+2Pw8Zns!t?)dU_Q|!#-ipy%20mDL0 zuvBlO205>2OaAVl^KdM0N+hrOX=u1^b zV)&)&Fd|&yz9dn}$hiQ#gSm3K2wV=;0r_4;Oxh3lJkH9yD#fa~>E8DP+GI0a=y>MiCXg@uKu_4?KT%`OZoMal!tn2AN1uQ<;g zeVY%yw{IsdN!i@(TyOpH|0>9RIqHNn#eKVwE%?0iGm~|i97ASHwerLBzjW)sV0u}K zW;wB`&*_J_U}R_s=?4>Is@_#pFa}#gi_l)6uC)bl4BWG1WJ zV=k({M^(J&(FVoB@&n}=2JcI7l*xdjHT63 zOfSOChba>KNh?z}rU6HoZZ&fl{A(J$w=2qyj$W z(_h}tjb3syzI4V41|E&jpw>+k2Bt>P@F>_8D_zX0GSTDXe4(v8RJkB@ck$-B(8Z** zuV;6+eh3pzQgv^}ty8dQw2X6+u-&@RU-{iTUkF!q-kCP#Pq_eG_lm4;2Eg0!Foy7b z?&q^^6q*~HhCMw!ebq01S8D+%)PxK=vV`XidpD~-YSpTnuT*wTffJAV7r9R*)I;$W z-kY>^Woh#>8adN$lb!iNn0@M=u~Ch7}!Mg6$r(MHN^su+Z7l_xv~=b-c! zicAC=;I2WrV%VpF-m6#-1_eDqMx9pgSZ6}1Go8XdQleL1SWHI?gfdP2oKpjvk!a7} z`kpNX%L%}s5FqK>1v_v0dC0DJ1IB_CXPZa3nKTD&&!aw*t@$R~s zko|^JuIWox*sdvbJEL7pMYe2O^GVZTx|Vfg5DXHIXq3QnL$@No=_p?A2g6DzOtZDu zs4znfcAL|BOw@C(jo^=MjL88s$ksTIfXdtMx3X!xh3I$uUiSq?l;_RP$0U}CAx$hM z!}4t(3sAV!_apiQ;SypE+C702i5^kZDUmOkHf^6vNV-!G&%||C%*6+P`#SJYXU+SA zhMk_N?=2dbP^`x_QJC{ck)iP=8yd@=SJ?BD$09D|VK3I$^s(d#(O#L_A06OKd6nA4 z#OiF$KbbsVBTknpFb%aH=;&bC_(KxX)=lO&>}1HMq43|X5&D2Tv)^hv$?qO|DUYy7 zQ@)%rbw~0hVgO-#;;+5FtxM??^FL^%so;Jmhx*qAuYc{!zjYuclg4}=U-sF#^;-}; z6!}}gG@EX*fKh_6Nxs8;@Z5RUoM#JIon6lslHudTi=dBxZL*B}q{7pOesxoj8T(`> zK3Ap_F@TM86AW=w`pV|eTyW=p$3aIn@|QLT`kq4RB}~7UT+LmOI#Ugva`$b%Qjpa; zSD0IIcjmhZe#Nt}K%8o)*o^>fzHk!eNO_N-LZ5gPyJ4}abnLxZTmdYKiZ|46mdTdW zaIcO1XnzIUk9G%`_VaYP?!U?*R8;-#q1&c|#e96reFdR*W3d=tGYKDVZZ@T4tTpGN zGG>`6&Zp*dRQ`?&q@mii-(oK-FJ-(`k2vr{l~#bk2I+J$?zg+9s^gG=rR&zhQ}fht z#SOmW`1;|Tv|oYrkt`Tbk0ADEn#l8;DK+EyNW?|P`b}%CrnE-hQ9C46L?eYhZ9tig z^ZxT!eF`3)9C38`tln4=^M`M)OK-8L*QXVap*YO2QenhscAa^@>Nm2iu> z%4sRKILoJ1vy%7~cl#|1f($vXc)|6cT3iHXbdMwbD2k(#M}no;bLEg( zIiSK=8U1ADqag`I5MU+5*8)PZ3j@4igSA}o%co0zpn@ry`P_tS7c!T`qd&ErKjjsB z%@O|x_8uiN55>9ED#}gSM&;B7w+$;k8jauDCHdT~4rcn8`bdf0aWpl47l_>IfNb^R&9zUIEspsf9mji6xF{H*t)Q%A$;B z_n8<(%7>FXM^C;PtzTE!Gq)Z&+Hl zADY`WWYQ?Fyc^K5y!kFle6l_dNUQd-TnKr!Guc%xqR$R&9XZXM-KQY9$I6Ps@76y zxz9WJeMA@Ju8L!2B|6;qo3wH_SjNj#yJfs|YJUuj;Lhucd#kz7+D5gs7%`og`e@^L zn-atDIz? zUvqjta?)v31v;Msjv3(=scuvy8)s#X4jN|Qsbc7%F7m>rEy^?|?kSQJ4VrhFJ7x&N|O^%@v03>Uk9=MWh<=_~c5fo`FW>!5u;0Dar zf2aDRExxD~qBUDmKAE)lf0@MTW5^p#Aw< zy?s&7VtqAs$9M0|;!e$*8rvv#ovqwRNb6%TashHKi!&M3L-mq#=J$K~^r3Hm#o3_l zoN#ZiUK!#+5AQ}w(vtvY9f(z{R*1e@#JbzSr0U><*fTj%-TzR1AuwfpH9;#i`UhPh zUSoiG@74V_*fT|IpPGBD2&KR<&X9JOc1&G%BMl9%#dh6)x7J<|$p$7?1>Z1<$y(G% zmLvVJihIR#`p*7Wko^;1XonMoowoTrBi_&6>!fv(hkd9u!?a_uaDsPi)TqQ!9|Qji z5pjraF6n@~b|Zy)Vjx7t%^~RyZ)4c}UYjsN=76))@xD7(Ox(&tA# zpN4$+n?DB#z#cJR+75ttxE%heuj%UO8?|IB*3AHK#qh2wi4(RLYn)Kh^VI&1Ln^)a z-@^s?&Ps%fm-_6n8uD6jfYuTyeq^XhJrj+Vz4yTlXXx=RC{OJeoFTABTv^L?%u<4^y;xxvq+T#CN zVMOriw#+M3oKeH zy##dNr8Wssngo+hX|gN?soU5?cQk1e$9Ki6*ks}{_l`tXYd;2^HEM;X%(9WN(V?0ek-(@eARuAe}5D}QGlILv!HyxTiib`gHZZOy-^aS?I+ z;ZHD!3IRa%1!TU+ua*RxC7O7N#$7^mV#T&2WD^PYkL-BWyy_Bm!By>Z`H-tC5% ze!sU;hYWUl4||13qYO!0ulqhkO1>UI6l+qwENYMI>urUx`mk89eV zA3uy<5WmsL>|YTTa=D3cFFx%in&Q=sO}IWo&k2t$r{k5Z!TD5omTywQ*vd z?L2zB+sj(a-IjL@XiWx1AJQODCC4<~i#?Vz6$=kf`sw~E8w88w4a${Aiv%N2oUM18 z55>_r?oW~xsg@=ktSZUziRtU>@6T9%9$ne=3 zNj5kXb5G-S3l~f6U72?V+rn11Rfc68tuuPdK~$A>^7j*_k}DiExGI8ZTwPbBVO?AQNP)d z-5r9&OVIm;^DbbvI+|jC0P4q6Zxm^#^;gZ@WRQpCeH5parH6ewm5*|~R4+$0FJCsI zKbFQIw)8^wFcs$Su8XM~E9@&iVI@yluZOCCrriXc2jN#$ufUUv_Kut~O^Po&X9 zg>jO<0ijsgpzv6iLg~W?I4|IYxZ~rkU6Ozgzf3ZF1cCb=aT1dujL`bYOfi-fpd~Sm zUPlrHmE?eci{hpPDB6!L>N--Jy%95L!9UI67RmR7gb$!F_MNtppdi>xsaE_+!zQv5 zUjlD99+x5&kdns+z#AGGngxmy!vOW1Kg47R+IKeH8Yo7| zM~-r%d)KSp4_4bI5Itz2HC!!sJISne8=|qV$Zq=xeR2+FifP1f`EOv6@iNNW?nBqw z3`3_Z@<5tOL(`%`Kk9NcpZWdeVf97R7;RFk_LEqyRJ`h4`|~}G)pEl(`j0Ii zL_WV#Fz*S&Qj>hjk%)%#f))TeOcyAil9@G9TunU)4fOj^#-y7=Y>7t3fxrL1(2cqE~0^S&T?cGp>4hrTuP zOe>gKyUo)Lht*6z37Z|=loD7m+CApARA&V|C@!a#x`!C)?@HSI<5wePXt3EHOZMPeUnjjdN@1mcy zM!y^8e$3}tBv&#vYkw-AW*av;s#vYO$O%H-Gt74Y7X7}>>tXWxcnKcUrN7td>Aa6n zxkR0bZDMb^v6}kjxPG}0u7xz17}w;~$_&b11R zi~tQGM&zDj)iZm;{Y@sqpwBPU%ADvsE8xhXotmA}7+!XGGBJ05QWu>(7@~OEvvNHr z=t$P5(uSoYrvz@2OWZK(`qwby$at3RQ0T03XuPD{3j3k>~!ZsL$pki+e_?!i|s(F@h4QwdCl zdzF0zN;&~5ny{tg2bU1g2=X9Zq@<^pCDSLSDp>>ReJylVN5`mSl%%beUsqI5>8-t= z%JK@>P$N?ZPE-cQr&L%m{8?8W@1yxj;OlbS4u5s^+jVP)ondU9<$ZAk2`z1akZfXJr1^HA_G~2d&nRu@{7VR5U;R?MeQB_E@%OpQuE;$ECzbL?=gCx^ zFHqJMIIi~wZ>&s%+C;y3{)Eh^QMVFFY>r}Y*di3)rG55|-7t}6>77#Efl|9ub@G%6 z5RSx>>#Ta(2xBNB@s`QI!XmQnYql39V2=m0vTFreOJ)PHQ=_9x zNxk;`T9dLBl+a6OXn$0svz$Rxi@59MbS@X_h=wujh=y!!9$W7Yjty!fv1u;EaE}Q> zY2jLvfPx^Wa`aHe@z*x49m8*fS#1VWaJ)&+DYQ+27>}Q1U~hF=^=w3uFP+b2Y-6KJ0?2Y$wT>b zT$s*fTJ^GbNt@8h^Oewp>?M;R6JFv@tO81J&15MZIYPEOH^l6LrQ0>sJc0mgYIw=E zV&A9z%oY?pPWe_9Oy=`o9lLRulEaF%%>ln^-w?PoWIfpQ09X`i?5~K>cyhQEGsdp2 z4erc-9P@1#gEWC59iW8Cv?f@!r8G$e4XX2tUo+Cj;UIk5HIqOIuvt_+5~%u2cr^0y zAVe%YIkJ!5cg9z$A4?c~hh($gM@+M)*bXsiiVa&0{sJKUhTnmC{dnYoHYD^GAKBl_ zS8+4lPjs`=D70!=?hw{(wiGJTo@_jyTJa9c1$7c(G9Q;)+^ z{y0ruQ0BL^ zu90=9N9i*rohBs*&e0>J1usM$SPy2BD>x=OiTwS#NuVJJMOMa^w(NKnjmBFkh&PLT zR&}qa9J}?$nhJI#0x~Zvnzh}b=mhwTOjQzjZ4~)|wvFfU!ci6@-H5nKc+F3qS7&|x zQPtk&U(_ewe*e((gdXh}|zg-CGkoNzc+>K^8aF zb{Z7c$Ofkc+4r*I&lxL|znGTTNKe^qP85|et>SUi8;_11?9MOz#JA)4flTl%aei!< z2GB}8Q+S*Bc9IyQ;(p-Q$yQJX3dAvQS`G+Q#e85INIP)uA1}vvFc7y1myivj94G~C zcYO&t>NFiG^iFM$R8Fkj`hOr(s(Mrf1o6<5?syBGhlPeJ;???F(}KW+;W@h)hx(GT z=x^e;eTIFw#l9H- zsAAvNvvZ1HHCBSEWMC^IG()`&mF?qm6)U;)ro)$P)^mB~_SFVnf9J{zX|nhCN54fr z(gkmtUv{dyH;G)ZuQ|`5yWXt0&exSoNoo&o%j{9`iV1Yi| zycL+>JP057CPLtdEwU#_voJWF2@`GOeK!KKR2#CZJ_;t0FnF(XpgLzE>KM1T4TL^kR=@k!`3i8eBarg5g%k$5FtE(C!Cd z3r>CO3mA-MW}luAk1eE7`q?xQ35jrQH!a4jS%Y;)Fs_yW3FsZ1r_>kYT5Jyd;>f?6 zx0zdm4L_8Z|44nj=+s#CxELt)EAT@ls^x+KQdnxiL$`yXM{4U_PK!Bx7LMYo9cKG9 zVXza9`CtIOV}VwTcbboXWSU%-mH0-1Vj?Ov8m6e4dM9BsZ&JiK?`y*_@1MExr#K@o z=f?w>g zhUs>X`o;WEEni@t_ciU1kdet_0%q`hY(pkgtzN-B3Qc^D#S0LoY4}=sEB({hxV#)SbBJ~gaEXxQ_^$50rRX4A z;K&QV=4atA_EApTwv2+HRI6S!%)L^E7?hh4DARG{1?3t4Boc&)Sl~Nmu$wf+t|J9I zCKjfg6(%vr(_at=RU

M6`oj8{jc4Vz#r0JtbL^NNrBEyycLwgKF5sjbiBG(S@fbMUdSh4nD?{caZVNLkVZl% zt{cTIJ#uZPD49KLj|vGhb_BL752o<(eisJnoEj# zSisbHruEw%-A38&9fJH!hsY@^=XNTccVBL5#>D3p#OYdl(l+GfE7cxB$UxbK{JhWI zHkR?#=k5DQo)dX1LkKWvyjds8>-Sj6^g2zbn32f1?9wZ)v`K+tOB%kyKBuiWMc_g8 z)>(9~UNww#%=9FKVWogPc}hZ8n*&1~FmeomCt&me;&K>cXNMsL???xmK`MBfZOx|{ z$t&#R3>}awRE7^ew=p1ilT-3Z@cCB(&d;DD9;!n1bs9EfuQ05GNks5y9wZP0RE`A7 z*2rS7Sj%#%8nnB%cotbNp!R(Ps?N<6I}Iog*jBq0h;g2ibILO+wSGAuwshM+im38^ zb;yOT4hkJwRk#N`yHM2dT&(L9%BneBaE2N~yI~1zSiN=mIVm??t$$)0guY@{2c>6-V{5>c|n69vt!(XDj5Xc&o|=NH#@cweD;}S47Z!zAr6~ zq@yc+2a#|NgEKUroBhhf9njHhh;OrO9RAdW%WD}9HwCV_abgKA9GP>cDz6^IQe8*_POK!g_Gn4ma^L$P-$wQDolK=7$x>A z?WA8i_caVoZwjTg8wuTYQv#^b!-%lzg~nljLr1L_F)%CL#)LNo|N;$-+3FKmL>|y;Z;6)`WfnyOl%XY2yvA?KRVS_5Z1HSkpyoUa4RGlW} z!V&t6nk+dQSi0khp?q{-@B~R#*@laC^fo$B6Z&2LMks00C~-J`l0#OZQhQ z)X!2_(7V2RAYyRYI#e;e@sTCh$*yq#{b;h_muSl2`cLcB=IwRJ6b>9#=;9GEA%4vW zq^bSpP!J5-4PU3q1}@xr-3}K(C3dvNL<&O_;)Y3OIhQH;5pLX(_jBdCY6f3-N(h_i zeuJ7IraN#U;^}p=K!xn`fR+LFk9c;GzS&IHvei7|O~^av1hJ-f;(JezRGflmBJfd&A|p6_{XPS6e|m|}1Y)(nnCm~VJThAb(BA~u3(7@i}d$~__^-5Keg`vGx7Wz zHr>|m0J<-p|M2o_UXVWv78u_h5JK2Fv}YB=s@{tye0cr$%GgSPe##O5CC8Tns!WV9 z;|JXkrS&Y4cl0cqT#=;4e~2-FW_C)(S!g0dWZjEJy?Nh*=;(H3b|~!qfvqiQ4rRmh zO{LG=`zGhBqTKNA2N(Ir+_yt5C20w+TxnU?)9*?@REL@H< zn#A67!|;b%A&Rca<`G0wxru$l;1nQ{hbi`HZhP4~8n5=d!zAs2fumDg(@mhH0mQlk zi4dHT6G(ifS3EHh_whBGa!t;Ua2RHjeh^`?8MoWfd+E2A-mU&fL#9eE9PSe=E&$>3 zt4~sfFh0^8%(o#O*H=>eio+UxPDri~ZcVn=Ih)IG@6Ipl&F|8E-bOD+5(4T|2@d5c zB7__D7ieRjXVFsOd~{o$I7^cR28gll1g?En?5x96qWC3ztaPlTt0K}lTcX+?_EeT0 zm%lR^9--oJ9I-ex&VBz5XE+{@iscY_-~L2`&sQTJ!W2npxE#+O?!;8di&;CD5JR0t zV17zVy#=B(B}T48-q)sweSg5!c+qEyBw%zVq3nD4Xj5|H$?P|ugDAvoy`EECg+Ha z9j{ZuJ6hwLJPg*yA(Z_(dOowWAI89IQ_{V&wp5@G9Kdxq(osC z-rE))v8fmhZjTm8Eq;o-0>mFZA9KDaz6SPEi0scqwdLQ-*km(_z)mKKDXF~PN;lqK zq3$TU?UREnt$H`|xdW~I+Hka6*;@Mu`u=3I{;u!ovyA!NK&DvO)ELX0LQs*D4%W3u z2(*%TZW8cLDCbLqM2GIpo9F=WQ(lqGpwMv--Iw=}-ibnNha8zU{I?uWUbgXPvak?o zp7cp|$Fc&Cl`$7v1JTHQufGX*_&`B`GFdm@UVd!9lECJ|1pynp;w_-`-*a%1i*haKqB|SZU1VjcIwQ}t|^X&F) zw`iZt0NQqgtEQqc&ARh1`6#3?-h$=cXJjL9Us#-u7naTg>|IxpRTrbCQc?KC#k#r* zKc)6M?(=G`xs>E%9-pqm_aSrR)J82jwyshtYCP>o-zLi93&{4NoMzgqd{XQb7K;rV zIXdq)yK4zSC&U%OD4tQWTDJo>8T%;CJ)|qzvzI4{Tf|ALNn2|-%Od7SWpSZ>t}baW zaBQSTc3w;2ko(w%lC8e;uI(9&TBWWk`=v>#Vt6E-`#Y$;B$_yK4qEVyqG+O|^4bnx zMRPo^+Ax{=!k|i7uILC3M*=;?4?Eo0>AS$!PgJ~BElunzaSVNQ#aN8lrOGv;P!R+` zCVU?Igwa&qA9EN5Wl}?*c}5r@S2NvZ7UjWqQw@d=bJE+lm==XFxEd_bO0~F^BCx~j z7b7$k_1cKoytx5Sj5qZkiW=g=HhZ@nrrAzc+9FL}&PmCB=;ZWYsLad@dk;4%@$UE- zrL`*nLnx`WD#@X@QSy3N-a8~;?hWswIc{|zf11uB4b4Y*+dg7_*uUulSDL_)7~l1d zYd(u8?d=F2Pr@vHTIbDI<>o@DWnM0a3!5b15LV#8UZRqCq2{p`r5vE8CaQ0nOjVPi zPdCTh5QZwQzq^)n{>p1-Ug+_TQcx^RoDy-LLAO<8n|ek*1tgWpJwkrvxy=(-5v{jV z4HRJ}k(t@BE=sYQ5qM9&xt_hJ0cPjJl`#yu{EM}ATsjir`Dc^c@N#A*7o5pF`cUfx zqA_J1t28}C-+`^K*2eC>FaUDCf7>>@V1P7#_?)|Z^S$V$C?opi`RzH^wy`Qh>kA(S zwW73FT+xh`Bz%09`Q7q>W&d8`Th8dH({Sj=#BS3!UbGrTE!j~A)kc?YGb>%9GYdBv zE4#0+>{h!&#W)w2YA)nLH%?bCR6bdpM`r5?jI44vZ$kJV_2OJCW0$L@Bbsiar*Gdq zw(8{DS+EK*MoMGfA(iSdN3ZOaDJ)2`skpnp#8VV}Sxrvh^QgPGo<+mN8?h^9U3qOt zFzKjc*v7S@-K#!JFBi{504gRdiI3hiC>$Gb;Rq-@em^WBsm>PwAr+gs)_XJ2qfjp2 zl|_v14y$!|7ffxvGsk}eB~U~WnVOMjb@G9%*mmO0^viBzAZge5*o#cEDqWVA&8h6& zU16uG&2`>XU$!z}wpPkq{iXg+oL7L&22_Nj&6$c3fO0EE$?!5SUOmaI6Wi?*W)hxx zh-uA-lw5BpMw;+x+G5ye1aCY4`5Ka@d89!4jvDCIUXOQzyfjO_M(uHr2WhZ>0*y<=;rg$zQc{m{%&&WI)9b@Ca!@Er|B?5FA6@vfkP zeJdT%uTmJVAa8qo(((<~Ur*;anQC&Il0;ww6+SI^ekR;M?}k-eqDLuWI8KLY6VsZb z&%~@>6{~FV-UxF^Q;fz`hT8qM>fM2sEU8?pD&pOA0ZxN$G1bqD>*c>Amn>+Zu3-t- zk>&Q(LqWP*wTQHL2AS%dpsC&>dwEoo$d}mIn$;PunAW=~3Z=@8Tzq@a2+{L*=BJSn z${B(}pXOUi-^>Nx#qM}my>fHwa@`u|&;3E-wKAzu<2p(koa=-{0|tLSfOfErxTB<~ zm{r*{#YyhBDefr}PoI|ETgpArg}rHZeM?+4y4@fJ)L5l(HE@a4bUElmYib2F`KWaY$6hyT!MGneBvfy(1>bWcj z2PH7AemY2-&)N5)VusgdViJAwf?iUcEA@NbXhz0o7Z0yY3Jnu5In>ZtT0&}ipseU$h3sP6f#>|?8?2g9k?h7-=@i;gkhO1lT-jKy*ca;0J*;X`{} zS>~tOPetD5cbp_BVJq4}9lnBt@$J6GOgVE_-%F-BJ}pR43GMh_CDr7tl-SPdTRe?M z6c>oxG`oGTPN0i(QXg0lZPmT&*X}vKyofEH^pd+)*}jB3ko;56nUd7hDl}#p;GH+^$WBkKTx!TOyNq9M>s5WPJs&X@llF~y9{m;4HicCwRgS!V8r-V& za9jiGPwZgYl=}H-^>(H^nbQ0eb5J*32VQbUvXQ7xlr*sBP(-bcF0TPPyFmR|R#a#f zK}k~VP@PjivTd-8?Tjyouvo=ctXA2GDtG+wF?8mj%DzE4y^1;Qf>fI~i&m>sWPYPQ ze#Nw@!s$-Qc;WtGO_w(R6%7dn-j%kP|ba)1x_l*IZZ>--Fc&+2#TaCY%%?5r` zu2)cUws2FW65O$$r!&1wszo1tO1@s=aEzoNFUF+H$zT0o+i;k|>;1iSbF83fJy&un zo8dYa6aR!Q%-+qL^^*Y22Gt;qLQ4TEl; zOWMi7SD*VWbLZ3fZTSOI5~X>u7^*SJ8(DD;!yNUH4arP#oD&QAXChV6(Fu5fRqx5i z9mD$Xk~2k>VxIU`OBLZdjEgjLP`v!XRl#g9JHF7ttDavk&^uDf$1K>)1Z_O;tNE{P z=QA`s>XyAS$x-bp;|rw5^7nVk0okKBd@{RZDY=73&Kp*63>fr4b`3%gU|!BkRX)}bA8*0kocIC8 zCSCxp-@8JwHYsrG6*$r;yU36;12a!wACbqpaxJ(Ymz=sRzwpvD+Y}BgjmlW;trDW> z58Y%R!2jT{yS{N_aeD)KcM{HFyU^m!U#iKNx)LBe-pI1MHyFDW(l?N;P$HPm>()8d z+>d}ktQiz7jxt_y-o5{0Rl(B+jcNx%j`waqQ{@YzH`bYxF0W5-k$O?hn_NjnU}1Y9 zLh~ec_dc4B5~Be2Gy>m6$rk81kaHQ%D0)YoDgT9Xl$0?Riy(&R92SR>5Lu9&of~XirkF+{Tk8EVLxI)CK zAFmF&)(<~2lcYFXYNkoL1wmuBbsR4gsfRz!GW7h&`R;SxrQzHI=aPf%qqk0qGln3k zP{$9ug_x69xwi_i%ymp{@+2(6#jbYVXNrl3(Jird-T5oF@Hq%4*rsg>sAj*vguGWwB z#q$jh-9vh=$cmzf1oLC$HOj5v54BAZ3q1#ciaDRy%(6UB*56lI9g}>#ogZiNI~P$x ze%&)~^U$HYgunYmyUF&W7l9%fH&^HV8}+jPi?X+liep*3hXX-Eun-6?Nl1cgke~xe zfB?bW-QC?n0>Rzg-Q6L$2OZpf(7~C3`E|~{_ndpb_pfiQS&Lb$p6;&duBV==y`R1D zPT%C)uFD$5Sx=Xev=}*MbGf|Js7?Es+2Y>zb(zvT3g>v`qk@>vIP+6PHUjIb^JZ1a zZt2O*SLGtLkQap_tve6&u>6GV11GXcWo1?t=x%FkAZFNg4c|Zo$Wyw)2hOBaw)~xD zxPK4i}Pp;)td^knXjhFP-!_4R>=@6P5Z*Zk0B}X z)lI_SFt)~h8|bv63AJjMUEfM(HFH> zYuHFMjz2~k!X{ox#^3BZ z`zE->Rhw>js^42I%7~ic;l}F3H8OrI?N`JwSUx0Nz_LZ9@QYmi+)=}5!%!zK6ql+a zmyqwH+rbdwl0_+_W?TGKzs*~X=NUeb$IaJ++~htotruu8cA19fM{=Zuv*`j}>S`c4 zJmsSw@B8pQRRPhGZv&GfDBI66TUClDd><}X9+95Sh_xmcQwfI&h7PC?^vg=^w#_vJ~F)}4)R4*kl= z)4&KF#bD{WW+~S)5pHkw7a94fJY7nw6M~u@=G>O$#azvo&d!6k=@n&BYO%xTAw*+^ zG!9A-4ki43)G2R=X#mXCx*YpFb&BNWrgz|ax6?7sUazoQ7|dxH5Dg(l)5D6ThwDK}60*X~;?h7?TKbspsM z%T@lfPSw+kbMs4qy@PXNJhgZ*--ycUpl!zDkVR1Gw?8i;9~seDUvkUl3#+E{Ce|zQ zemmTLocqrLKg^e!8CafFjIZ)l@oI#Be5ru(Gfz(c~HRJU-kY#Ph?8#>)vs zqHjN{Z--{&H8c)Fe|xNCCB9;jTS~1cvaRsrozF2y;iJ^Em{z+xKxoTfGSj?~|1lJ| zSM~rZa$r>SEI~xH&Q-IVf@>~*@~<(Nc;Ai`jfKs>NEkwe$1 zsrrvmXUxG;m&6+2nf~zW3;7Vj>yw4A6`mgyY4`*_&Ue4=L9zi2w`dULGaR-<=Q{54 z&33n<9y`JZX)S7ZL3VW8%F69&U^jU*^gbK z1boP~&~BCkZ4z;(Rz4;gP40>r#_7}d4(ZlGoF%Mmc$~B3J=-z4&Lu*elYp$~$`(xL zi)gU#wpNFl;oaZk;*Vy{rc<>~W~AvVwi#6NxgWSc#zA_lKNZ|8<9ks-z9J#H&14@D zts>~duo@rhU8jRRoD7YEGFa_`OjafABE%Kef%|SZ(7#w*tJo_7^A?ky&QrnXVQ|MC z9=@pheeC3AX-Q**Fw3Q7R(XyTxP`)q&3gr5jMbr_k9=R}_1LMcf}3fr7y9Hhr5%zb zwvW(u|I(B{V`E?9ZoXG|Xl#fL!uU{WlA;bVD1ScKeqP}P#||Tz%;-b(v^bt62YqbK zY`bQ#;nTv*+FpZgA3ac;o+7k&DFOn{O`!A@t8S4rCS{6vGJ+M#tN!JJ5!V8@Hh0lP ziXDzRlJx3~q1Z@uPGEUpO*ggYy=e~Qo4}%ufp>ds_qEclP5Sg&9SAc&EGyxbkE2nD z6@ykL6E9#VNb zADmd6jZQP?jl;LHCfBI+Ws3>t@+y`Wv6*nPnP!r{E@I(QZN#g5uL|KO*Q4-&4KiPB zF(Aa8QtCO4)%x^iM#$D~TZv_!W_~s_X1%5Wd%r!iFTQ+oe1S{o&G_;nz@HB)*LR@Z ztijzjmMCP%BjyGGnK7xvNCFwsbh?zY3vPUm3Ry(*kX`*T*1xWI+eT!cmOd}SVeAPot) zT)S#(^V!yGS;wQHB@aFAr-Fazf-Ks9-a@_2Xj5yh4tb+ zl&DtobCxY7euM@V653LQ`Fxq)E%xo@sW;|C6Ck|6bL(qtD%DD_N)7jrR|XFj_kUJi zX`l=$FxV}Z1xk~Hu`shYvit~ASvX}>?i&yRE=mee2PQv@f-CwTf-DRUD!5jPKBB~x zlhnEz!;0%WfdbZJxCB=fJLWCJino-hpDT@it5wQ>b#(K@>%23@YH29V9fT)R#hbej zxKCdyM~zzkSSdb{eU$mcmGtnPQu>gc^2&UhqcV%Yc_~5uh2^-`yz^6m13rblC|rwD z3JXn^rBqGS0al-S&6$bYvAgo&n@!UhoU54C8Yc>dt0~%QO;qii%D{uA$;9FsC1rG4 zSYME@^!3)>SR>Nzx2@zltrlf)!Ep0kYxB8)DYxkF0Gd^+vAZHzNRAediNWad+0)x{ zK_Xg%7wqy$4dx($NgOeRRDnTuk+Vh3QAbI?z+pZ^c+vONJHJPo*1B2O0Oge#sF(;Oiz)exvX$c*r$8yb zTWpaK^5WlUVkG91H_+ituFqE4^_=%DUKY$kyR&cgtE?@Sk$6daK2QH~$Sm11tes z>r+o`gWJy(+6brJszXpX1!t55FC;(es^=b{yKNU^%tr5j#^Vt$QwUeuLWJ zn8msq_>HD;Px(DYFEklXC+M*$nL;wF++opfO_V-gq{G9ZBZnPLR-U`Mh`YmQl~jCpB^~eImyDBK zQlzSZ6P6d4H25dY5?HjQ*`T~kv`LhBogsOZxNTZ{vJJEp5$#{a#%U&gQLrf%eSH$Q zF5dY<`BaQqP~<&#dJdbU%oJn&3WU}BlB8Pc0C5M9BOC2<kuZ`O1fuCkbA~nd zUd+G{_MxDb0AOeKbBxdZEb}7d;s}zEFTc@`bst+_ntW2nZ$m#u%=f(y8#a&3&Cy-6ntA>vru=?w7+vO^;W+)0tBR_CtPRmB40TG7~I1h=foZ>(RDkh@T(*|r94=fy8tgUehC@jithSkR;Yqe{f<4rLb}6!ZP2BltQo-I7Sy zi#IOcwEl)FR64h&>M(HJZrBWY$?7yPa{P2wAobJ4$#fBZ9FqoN0Ra(_nC!)3orRd} zLj*a`M}PzW=4MBwSdmW3OGzBye|f+AU2ElH?rIUJ2;04D!YJ7I1LL}H#3AJGjgL~} zCC5i-w2#EN%T3DPatT!6R&VOF{C1)0kjf!i>AGH+eYc)q&6vm={PaAs!B6Mcth$rN*fFqeHhD1JAXp84kq%=(a9vtR(7gl8c7;C}8nYdc6`5~88>*shP zO?VSwEfJA+%U2}z25#R2#V2|2(k<#k5b>~03JxG&6wP!|)jBRfxTIX#^>B-dOzRtW z7NIzpg6K+nM^7J2>2)C&ybJa^nXd^n2bY)GS7^25mtM#&HCQc*YSdfGN$|5nX3Hc` z`$5i!#7brAae%CwC_q6Oi;utasRYZSp*m>vIrIRcSjUL;H(Jn+5v<5Rtc4wEa%l&e z(9Cm_aQu|*efa#;bgPyNZ!a_FISt~Y6KR98K$pP|9d$=`9A>`!;SbYd`I0D!)dm9r zjp=c@DK3}7^TM`80Itxh^<4QJ91)fUY|Zh!L$jSqI)lAb=XWSgPCZ^|Of7%Yr{KB| zEh@jdesyoUT7CqdOzxoL+QCvPnfk8Glq!)oq?pNMLHPSyQOAUc^NV727@=5OH>`eY zq{`pyXoF;lQqJ(UnBHa+%7emi2yAZdjf-~_T67zn|Ckb+NX6*hzghnakBzr^SgLkM z5;aE;1wb=c2kDkGEbOTVx(s0Kh7T$wtId;41CiXM(sg)tGNk zbiRZApEQ<4NmzfV$K74evfg<=gC3_c?_60~lEm1 z>);pVV+g&d$?Xpdhj;L=1>sb?RdsM}~; ztT0;9*JRx(AqYKff(2IWj|YLyP4pkHf|W<$wWR%fH0><(Glep4jEseU69M2}F1F)@ z#j0)0+qlx+$<~)`=q?Fzs|YHJ?bS<3B55di2Rpb_cJ#=@d1q^tV?Tk#bpPW$=I+y!PeUYQo(%gx4E?ge9e# zm%BdCNAmyVuk`(GmR=Pjgx5kum^#z&jW$!XQMkby20@sU zQ-77-xidV6bi^jd>JL=B?;}n5NhCx>w(VV++3a_@TGP7<`jfq^WscJ}q8lTX?IPyg zdqGEEdHtv$s{N{NG$<~d#N5t{ZQ5<1-__rekY5GRwIQyder?m~Jh~q4V)WJ`h_yXxELdbwA_(waD+3c(*94TrIJu z;KV4K`I6Hzy;ZjZV--BPUGf`1Z#^^8GbMM&Y{rj386UZaP((CUmW!z?Dh)N2UA=`$NeW11!|Rm@>#xc^Z|_nt|Sb_8|G z$MhBs+KE9behtYQT`8K30-a4;(pgtwc z*0`a2hkVTTPVYFJuXKIy`heOz)$#ZYb#S4<0bk_Ir4WZ`EMvnX7ETd5 zIK68l*wvSyFx_l`d$kGrdcW$bNR+p%!8I}1fh&JruXW33fxp__K;hOmP>EDA<)@`l zctn9)C~n#Trc}5lG&=l13^5?T@VL}Vzd@B>EXO@{I?3tEXw_$ohHM&zh)jauEU8_n8vYx_bGeX)VUPx@I_*72z>of^Zq}Dr*i&$KfEkDt;X?B8$ z;?qdK0ZNn${1!)n8vG)I{_x^CpiaMtRl^VXBZi7en7h#%QX*0d$UlJfw`fs3-`R#U z1-H~&=5^sG&@nhoaV_t0AS%^RTUWeJdtTtE{AiRUGF=RK;kf&WC7-@s_n>0B9o80p zk$h>B2X=SL5}RAr@2;LN{T-Lnud`nOV9m=vRy-NqMhc$)q5-D;ETA^;{7p8VQv2=a zM@GrZvwplw=ilkQ_b)@y# z%4r_*g7vS}e<-INXV<%2$*U#Smg;bc(Rq&DWU}z01Xku{N*Do;R-nO!AuU8uD$ZhB zzP-ihhN;~|TBO9g^O>QG4!{lYn`KTeU)gcn>XdFC8~QwoHW=@-EZq)ARYj6iJ|L?* z?3qn(HD^~Ww8cBPzcVSGV=8O@&DX{^wPIyah{GVcvxcGZ^=i#~3P6Jci4DBOUW;ii z7yN3ie=@rUkg6Dl9b)3GTs_fR$T9o499uumG@HLRKTa9rrkX&QX!~T)Xy@!Tbm=JE zN^I}fk6oYMc*FzD0Dx3BoBz0_fwvDoJ$jC<%bd5jTP0=DBA6od7?4Pl;scSD6yWZhZ8_(+^>!v__<bsY5%KF} zqBx;(19Mof)ls-pZ?5ewV~VAT2Jmnbx@wtKB+F+{)i>aNmYS@!1t)FajDAv)qDuK$lIR0`zbD!k?%%xDs%~at z{?xNb>4RW;4iVjIet(2+iQ^aIurDA5ZP?DC-$T6QQJ`7MVrR-8f?L$cK~X~nI%M0#Uz z#LO9Ee*4DH*^v0P%jF#r_WdEYdyxqPAPQ(A8Ii}z2ct$=`s1dO&h`cYF4ynJ+lLDig z4Iu6&{m0u1Vqx(OF56W0DLN!#HbFdxdZ=u@BIr&4OHo4Z@RwoUG;C;Ab@ey4QI(@J zu%)ctVi+$k&s~}*)0Qq%|Erl47!0044STjM>$vfEGl!&HN7os1FW$x zgfh3KyO>Y&*Vd53`FqYTuw|N0+khO!hMt?5pmVp_{YbsIly6fF^9Os`C)a)U(#F1~ z*a)bt|D+z`n5i~IOTFr+T3|_Q$=E8o^ErN0KCd_h)xY8YoBh=<#fybS$;7(P*N?9$ zzc+e}SK@5^2i(>w4?c^jUMwUd6RT~JDGn!*#yMFXT}2v<5qz_2wB3B}CBp{@V8q!U z;TbWUxoAQa1jYPPq5!D6GG)frxi>@~-2XYa$u^4Sg*ZJp++Pl@9ha*HwpffhHQ#9a zZ7hwaVCj39k-di}sD+&uR$L}uZEr0W%M8{Dy5HEf=@4=n4p2Q-svtX>Y0eEVruLAX z{KWJth`UQp<{vcy9zEu zg^P`z*_~Oog&I;_(_6ksPKxf2u#2D&>>=zngk(~8hkVH~9-Uh*z^`kXs_Uf<^;(yV zWfXoaMgy9i9c_|#U7v(@;l{)cW5YvzZZ0U?OAyZjmE?!*oE`i6HE}~?`>`IrKgZvg z`L;d8Nm>o-8TRy^?;4r+>U#6)?>M;Ai|Rc$$T^ibOO-_8>?xqeow z`%>*NZnDST;&Hf=dT4A!xJx&6(TK*6;eOV3q8cTso6xd7B=t`4;rXR2obxH2sxJ*> zLNPew*{e=OtEp<@EqiMEW|7R7u4i{0Hhq;A(oGyj%OvAw^d!$U2e}E9CZh9(<%h2* zra8&ZO9gimQ+;}U=92B%d>Src*9IJhlk~{~dW9OR9+4-50xc!r;pwAwqWzaL{Q2Pz z=^*eQARDfAJ45p>mzX+Qb$>SN^WbEy%dWB4!3>^7kf28mE{Mk~?C#<|_33xQd=)B* z+lRVMUC-b~pIy=SkxoZ)k8(1}7is*=%L~Lw{hIpa zIVz6i0Ng#v;oa~8n+I4beT?Y9==YBz!PT5*9a_%C7YLgZ{j#>^DoWSkn8a+()9adT{y(=*Fs@HQ2uYW3{qN3!9pI{wj=meY(eD^qk zytmo8hu)6lrloFq+pM(EG>NB|UDuh698S~okqO-SuNyNVezUWanwiWp8f3!f3lmBi zhp<}C$9U$3(d0&zm98<}?mY(sw7uk4WAlg?u&9MDpASO^EAnKmCG^`hws2)BY|qjt3lHW#^b1af0bL6k@QwRkF0n?j4EQIH{v{p0?YB20x)l7HukU%Z-^$(HSGSGGXNw#3CkpUQ9qxLj&%g2B z)fuaL|4`1j;C{WzT%EFC6}uI=InIT}H53pA!GBosZ~uHkg7dNwW<#{lrIeuEGVdj5 zG1^H{9+#w-!TuoGl8biqD+}eI@~idGjh!<-*<`p$V;EN;GRpiOa{97m&>Ek zg2Wedz8!`W&o!8X{Y!{pKUrNDt4w@aJngm^B3kCL#GcWz4|Bp?4vAiMl{!9II~rg< zf(&GDlNt8?y4)|MSKvB^rm#=iy-wqGihj67RM`;tLda1bXjEr4>%Z~ zYuuw<8b#dW)EBJY1P3IdFI$1rX^5yg3Z}XGORwg=SZW@i=sI6D^g=2bSk$}H5}V`a+f~0Z)&^mnVZ#*Zy>$1 zoeUh1X%_fqn6oTiv7v=1fBj=zUhRkT2+5lJ!0&?Q+7PpzXv9fQY314nu)(OIE*77goo$;$)-Z-=HA z-O;3nR84!|+qPsH1Po!y#8dK*=Vq9ri!5yGoR0*AMBAacn)(ZhiY)`JZf49hY1d*5 z_A6A@oMQIchENF^wfz+nBA)wf$nplpkMWkiJrehA+N~S=ZPKw?fJ8 z->8qVaLk_Ik`Y?HR9}CCuu|is8GPRKw%vI9X%~?P_>cOwAu(w-iz?LNeq?10J{Zbtk%!u2U-T+xn<$=dr3dL$xtmx zB^5!A-;|*H$L7_fq|X6rp#oC(xn8;+bXdBGqQ_RHe*&zM?!b zBa0L-+Q%(NudK-Gs>Y@HL6^8rP3xJiPAA05UJu0;Mr*J!@X;>JPNg72MQtM`%&b}0 zE$Az&m=c$jtb%)OxV8b+N%M0b`QE7>&*!u>$ilesnZ>~9x<{?g z-yEQ;-e(v*hdon|vC(x*BF~bGg>jeVEMwUAHus?wpEiLGW!kN0`WZCT)o;f4;T!u1 z>c9IDUXMz0PVWyH{5~9;URnR91hjXKm&-Sh8K{}P{VHWopgUJ+&P9CM1l{R-+$ZhV zI03G)Y?OUnGihHz&coXpji1h)Cp#2Cbj*xn4U!d=kTUC);97H4Nzxg*$TOfN-S9$1 zn6b#@LTd0-uC?%1#TXiAvZ&Xy7x~))Nc@MDBv>W|EZV0vJnGgo9)_AL{)5kbrHykA z--0h|Ko4xK*_+BZp_Va$qxpT5Xf5R9+lTqGpapT@q`oMz zox*&$T*Gt4iy)~S9X6CoH$sraj0yVrBEgMhmz73j@<%bpyTse+Pd_>tsJazq%=M;r-`_UlJaL-8o`Z^JC5IxJrBFwOZYRf#kP-;4#7_j@)UX7rJwPJ>1M$ zV$|s!DB0158`PC3c*}6Rc4=Z5HVBz8apBo(1aM!f_On{g_d5nfTAGaLl=l|$>ehbduHOgdih_}Ee%hR3-4V?(VEBR)qgc2^{}zF{Clr&RSS zUV+59^3irl#7eAPMh63+T$B&bn)JB7FU6Xal$afi7CATSYrx;W2IIy!S*Q#TBv3_B z<$F`}T`tVP=^J=rxjOgjC_R^wpktB|>P4I5%^!D0AB0yp!72sT0z5kxtKu>7c_0!> z=Vb>IshIK6Mc?wayWv3U2O6sdr+6=1J`qw*D>DmhhQJXz9iP`3VeY-Q^Do6xJ^fk{ zcT@JYMK!{kJJn|0qHfo9{o5@;2DwtOG5gLalP}%xm;fLr1K!Y7?;WttC*LAX!Lxn{ znsa=h{?9uwz>G9DZIZxJXA;^;c)OR@u>FvNc**B{LcQ#M!i>9o#!X@ss@&)X@@8q! z_V9B&nALEm;`l6z?W4TnX`MJqc01Y4Zhtdn|C_Bqa@V?LKuQIn9M5tuvNMwS+68e> zzuy2BX16_+gDyRGQTK1p%*+pU-!{{5KF<$>F4RPjP+!rJ>9iQUYi`CalryfZcGbYtw;r@Xk zBgw6!1W8C`lF>t)HsrM6xXNnLbisBrt|LCGLhzMGO0~sk<~9h?Iuif0`B(&VcZjco zpCzM%TNCZjA#vo+yLidr6Wo3^9P#zI`QfSAVpYi@yDrFWXN7Frzd<{JlR;&Um#X#1 zoCMJe+i4DujT=rFLTEX}TeAAUY&_HPe2Kei*T!MCBJaFnMU~R$^Y>_)r|C?(JA7}9 zP4dRJhi-SM+ylFc6w{n=;3pAP0uqes?Wl%JB;w)3ph!)1ai>hZYIQ)S#p@FtFFrZ zoG(K{&36r9dEcJ$I)&RN+NR$J&?|9?0d|A7MiBz^yP9V%`x7>iOe&@a-siW0M%)HM z-A>1|pQJln3$cL+7W4JNz13_pP+n0}s3t@GBH>KW*jROw}TZvt6KFibLibvw;{A~+-N@fExXULr`bYw(I_8u zI>cx$Ol3f%|HLRh;3B%qc>imL0GcF1IB@u8f@;91fa2v5uX8LCjFKLm(j%YEw?wj^ zS<7&tXTn(bH0xsd{83kQq8WZiEZt@YYacK$-nZF4uuK+t=valjNmhpN-<_oBpY@GO zB;>x-yTVn-HG;&?W~%sw^Ib+KO}#U7lq@LDW^{1vZ-G$gaim} z=1Y|dN7!m9v@7c|snzLMO>_Atv1()PjKvG!et0fYYB8BzMgXR(UkA>VX!O})JGrKT z$wQsh#t(jTzm+Jrn(GEBd%GX?2qW^ZPb?7-wYNo*FAcwU+P_x_oi}gXmV9Py+Fc=V zPj$O99I>5RVjVwwiZt7CMZb7((X?jfw81HzyG@Z)0 z4Bk0ej8rE^Y|X=LVt{S<0X7rOcYN2Y8u^~*O==E^JaVUl6T^_CJj71O^$0JtDu0CH zDon^OZNd0am8^PllFNtMGQAv8u0uq3^7)J5_&9Oxc1O7+SNfXUlN2?AAih#jC#dHiYZtq(f z0b9#7-5Kx*t$6>dR_leSl2u>THtS5Sf^_G4Dl+GF?<8)GcGnKa-|Itf$-y&@6@@ayGb{SjUmRHyCS*Q~Y-yAgOD2l{ECM~#|cJe(& z`{v@HQ>7@_71}vM<;{ADtq+I(JI&}rMg>@ejF<95D_>#p>6LPsNYO|pfWp6 zWr|ji>FXC#+Yfl zJ*9%J-xcs{3w0^ z!p{qD%sJoB7>>vDEOK%~dE$?DPYtXD{?!S`FDW*SD00N`X^`ZwbG~lSKj?6 zrT;TMr2=`bE!W8ZWY~TZ!oH$jd5uz*Z~o^T-|;i$sKx?#{^xqKbU+?lLC_Es_U7-~ z1itv$0@v%FXAS(%aQN$b^r%2@$8B&K)kn<~gNI5#n*SXs2S||w8)^dTCFt_ybn>iC zz7Z*uXn*@g@b>|Qw#c5=DmP4pSlG0MSYd`_@4sedsusT>Nqfs+G`tgy#Zd5f0`K?r zS>^i+*1b`OlyH;{Jm9t?WR*tyiBLje#qM6M%>U%<1JuZx-Z5g_DG3t)r1o!QIWd4n zC11y>i2T=oBgKH8-JKZS$@}~D0XkPv3TSD`j@P!*KQF)|j4eE%rEZQjZbkpyTS_sH zWIBreKj)1?nJw31m?>6@0Wf5Zj?7FU^XbA@r%}=>-YE5!cxp}7F(aC_(u9mmQU6+5 zjf!&u&quzI_Uk`4rxejiXrN@hP%F-5v%*LQY)t~jm=XY`#B?d4yG+|8^!f}`9-l#2 zk#IE{oV$zTlqa=8{{4)N_b)f|%1*Cs27%5baPfJIKM||U$MD6>QJ27iKRyZPlqHuiaKI`2- z53A4~IF~`1fR^zSUC-~F7pnF#K_u>0O46j40A7e+x(!_}Rw^;vpUm@S-~8`8QhW2L zCA8);2`N;;x{|J546-poyHxy^ChSf{+f4)*t5wTC0An{bK?MB#Xfo-4R+U=F!uaL$ zWmV?p{Z(-vw%?g599DCZ84VsB(bW5}_iI`&5wxKMlNps5`vkSpht{6W8UU)D)z-_r z;jPqWY%%{H07Ds%#)4Sr>7xO4Pf5Vjz+uBwoZL-3K@chRQ-lG7|59@FC=^PAxqaxb z(I5IyVNw=v2P%!NL2tmKe=f;D%%=bSVt-0Zy`J$!&u#8ze?$V{#j2LfVWxk6FilrR z+_whS@v%COtRH4>nHxj1vTg$0?Y;o63s!DhUT3{T)!jIJ0|1psH*64aTaeftON%mE zPUUeh1UwFu`>k7!@(1ni*$n#T!U2N_7qvF`I?wY_?rOkz)eMl+zc^Y1dp~+Pl`Vp) z0V2?snuDEmumGCR^`OdU4bk+pkNmv>W&W#&HBA5T|BU#T*H3geumR6r_savLGQSV& zXjgK8F$Xoow@eIZHoTHxEDP7ZjBGYqdWR!53O{~Ou7xw+iHv*LBqm{y?Qu%b1NmIE z5?S5=xtH1@g^wCVA3TJmoz`Nuw5nNeYdn=l0pMi3yUD9c&~~S*Z@({VScwMQB($9u z%xGZ#DB}XxshpE?&)irS^eQ(K2DDw*QPt`#lV&iyPTFDR9OlylIFzE{{+tB&17JSa4|@hfjVT|8Hq`JlVO8VI`L>2_4o3*AD;+`6<|yz8yW zxPOhBn0GRf6Uf=awutS2^9_@^vStntyN@bJcbD*npNa7;hP9rL@r{#Su%@SQS{P%S zEujz}1Df~k_o(c|3k)jdv4Ah}P^Pf|p};T8JD@q1-FvC5<$wgO#p=_G<7JJz>l2%E z))K%yBx2Eat|LP5Zh&;BpWGqz-fR=-Hfey>%7jjC>&rA*WgylBNdH@rgSh~~a*LZy z@I<~$2D7Q8ARm^u>F-?!+_k!xzvfv*LS$F%&89T$z(Kh=??7_!)Rdf$RDXOC!BYP^x}y@J=O3JO79!J&t=`sEVX2k zb^sN@D9jB@-Zm_d%DXXmJ8yg$;^wyKHu10M5*I5}pS}oi$?JyW0dE3}K{zxd>4>w0 zX|Gx`Q+f2@o5MklF+jsCV#?_#c_pw2j{9h^)h)#hIUwU?iUxNur)B9hmG-1(Pi2+N zJ8HB95a$kjbSoOA;s;mc@ z|CY^vN&QcVloi3~r2N%m0=qgodhzR>BaO}daJjYs4X)HhO49k+UEd=e%h_H7aj94a z4vQTNFg@qqD;3oOA!l}=k8GI0!#`aM2pYGq*QTaZ zN4yna&EIVDzQ4m*LFT{s{mJ?FBZD@;5m%dS9w2U(W`)-S7RXV~M}k;xSWhbXJb)k& z-uCe$O%JF3k$~sl*$UG00T*OI!M9$N-;!?Rm%)D6@eeHh?mQl0#b_CbY5ecj_j*Ma z<{IRD_3U^|{vMpsL?gT~kJY>R@;aN@T-mEbc^zAKf$+gn=Vd3bl^@#)U+C=V(|5GE z?{8d<@M8nF-xo33bUi{wb8Dt}XNkYJXw$)@dVoKp7AHI%C3QzA>=k>~O&S5^#C0+w zZoa@$&3(mhImi0OWLl5z`IYSNzZ07+L8L>uo}%wb&VcJfe%-e2xL!43OtJZ5mkUBS zqv_T(WXGZfzRgq495?YlX)be~!8ydVMzB3!jbXLo6Fl$0dvWyD2UfwnOi?vhn>#T9 zqOa*`cc|AuuKw>Fa^tBf&b_RD&QTf-52GPDT^|uz1ld#?udXPef_|5cx<&U>Qk0i6%KAlv=j0ak< zR9KW+$FKjjQ=gPW-;ZciUt!%HZ?I7|j3~8~Z+HnMhh=h27UE|A;`k>4vVF29#%yQk z65Ac>49ws;pY6GDYoMkb$9CV@A~>24@jK;HkpfkTnU6aGy?tHXh4@~%CL0gKH3z(Z)CYxphDoaOQHyFTv zd_O!hc8vv9EJqO4l=0(#IxrH1av{dU0(k5UgzPMwf8ie)VfUl&kmDML7Ya%tC*F5f z%s1iK<+kizx7_OK#RlEIZLPG|+rKG8+nesl1eXK0){%f!tI|pD&ez++n(?95 za;+-;A0uge+*ckbk^L+$$5XgjlocTgR8E~`noaV+G}oV)iUvqeQx7MwG<2Zc0G>Vy zKnh)=#s<=!Pt+B91n`CHZ#q^h0lz5^CfaXT79Q&@M}Vkt{93bCppNS-#D1##*Ucyz zT)%EyVS7T<7W?3RBklqh{CC>P@AyCS{vU52&~Tp|A^3o=)@-TKj@|uYPiUw7kH|9f zoyF3Zehbg(pn6oEnJ^1zns&$?vltw$*XQA!s^iN?yNg$~403_(`5D}{sA5j0poKt( ziY)LEZsdd~yc~o4W&<79izlV&5?}|8#z}I7wr68$QDwaN;8`At1FXP#|F{+{;y#m} zZUg3W=z>MXTYBjx@|T&bOngVRF>AOT9{5|oaRFBiW5h4PRpISKQRJkTz<%vl+1&70 zj3xVFrmMOP7_|m)KN)3Nn4f6nu9qCfF^04pCq(RfU#PrMXOzc5n{3)mw=e?gPu{WW zdta95%zp@t1HzUvkP?}JWj0)%h4UWJE~0tf>UiI7LkDRx=5iFH0wIeA5dvG~EyvM+ zEG~h(kqgE!!WxS!a3RZAnZ#ihJ>xZ}7bp&Z`}zgg~ z{vF@aD?!US$(Kl4+_zgMd=q_j?YQk)+fNSxyfX_QLisf}bsnHZ!=3L$;r{EP7RdOi z`ka7$wA;h&?op9)Bg+lv0gxmO;gGlA?vOF;7V~X}zDEHi1`5x=3M79G%!@6feVm!t zHto0hZGo(&=(v=O+$*jIr8j_{n&-_AE8=9pbB+K`iRPWw z0#wtnk#PI24s~Kt9#6a<=QlW^@eU*Fvjx)Kqx(g>ehMqRO5Xd6sXTzvs0{LEgW34N zG`?!7B78glq~!CO_JeQP+(4&3h-;t8S~CS6*kR4E;riWa$r80_C~XWSp|H;5MbR+Q zc}SNoG~MI4Y6BnwMf>9l&K>*`Z2^j)HUHS-z({-_#j~vuF?LaAIMiZvSO&r7TiqO* z)&s~6S>iu&9n=KC6)6@%xW0A3$mo3Fn^fD4o8d7E(mcK1%$JAOa0#9}%yJ?eD{o-I zkS7vCc=eFuqvxCOv-=Smw6Vc4F5=OOpFjssPt(FqaCx88;sUGRVSjeWleeef zj)xgib=D+rmsQJF2Y znJrC9bNjxI6`14!@A~lTF#^yne|A1Rdes~mA*EQ+@zBg^dS)9ax7ShTJ8@uBk4#1E zPV3NvCngl<2|V0c)g|Dit)J3Et$zqnnT@;bX3a&M27=~P*prxjS348?5xb>qV-~UN)m@cE`Hl|7-3oZ?SVa+~j;{Ccd7?W9@D0nj-M0rb)uBFFYJ zJCap0ohAHGxoYG`+2}zzoM__Mbm_wlIIiSf+ZTh1&!1Zok~m^i2q8Ka+MajF=J89q z>Rug{Q-~gULkyoIs2aveQwRv@LHnNhK;wjA%E2-9;~26LqC2ZnO9?LKOP@W;gSjkG zJ4@AoC@u3T-LBOvUJH9fkX!%7af9&+lNLFbE)HRNlx@WVDcci}8Jp zODKPZyu=Ud&Fn5SoXC%N`|8_S5#yFYOeV;MuKTUb=dyi?0;N4gIw zUN>!}gi9AY$Wg-P-us2VS_Rg0Zqb&eg>U++EN{L?lJDUaLn^{c#PdBSbZHj8%!FK< zRC;E~ad2cj^`s)m`~3WIlc~+ebk+NRklE8Od79@ z(b=An`4*?2J7dTtYI4+9Ffx2bRvor=!;L0lg@w$zk`QDMWvHLuHVP7%~z~Q2^}M;l0#RHRVZTHufFxOsz%;PXw-kw_Sy)1)O3&H}*$7 zU?3!Ahw7gIEkmO9rJ>$MlXxxnm}bEWlS1EPt|&?)0tv)upq?+jB{!|p!FkQ4>89NLhDlVxeE^$PctOGy! z5d~C%OG4hCT)^=Ql^vc#Wo8c@=-$t+%N@(Rf(J&D@KzEHZ^5w@^lLY zOFrUTqZZx^K4>0Ic&q=MrcICjy<73BBP00oj_DBk4mMcUBFIN*(bcGi7b^GqWEkh5 zF%wtDtukF=t9GD%tXHTe4kok=RtDD)QS1E(5}I@bcQ(-x-rKwcH_jz>X9QVwN}E;T zj9-Ql@LVirBjwr=pBX9sjGNwh5UpjWWeSrJyHPAa@QwyjSr!-(rCe9wCuFa*@_dz| zzzSlmkeMCdJ_5{ekM;*w8gEGE^I?X~H#dw6y}!^C@-Z9|BzNh_ht|VXs==4%Ou3$8 zt`o-VDTYchdeR5=keGw@kiNG4sUg0|H-72f>P*2B9muDz{b+U^m)|?a%pvL7LBbH% z6t%4PtIQEiZbsfKY3{N?fl&Kp`4h)*$hr;9&I1N%MfSakne*X8?qkPIq2>W-6YY4g z2-W!A2GDf1sjy+_Ik2dNO2>w#ten`-n;x_>ezj+Yaw6lP!{gI0;Xg`(>L~M}a-kKM zu(}oYQ+mQ6zuM2=&tSOWBJz$eWTx?EH?9*_(ZtMn%=i{LhY)OInys!mh!iou{T0mi z-vJ0TqaZI0CIMG)?v4RH1(=3()imJ8K^4!#fScEZOR_C|m?>064}_QnqKsN)3Oe2#&TR5t%(4EV6< z!9zxn=peqC0wW6t6Nr<8W6!{B$I%T_%n(raK4lCW%vuweOJs|L@Q9T zV3UXtWWx@aVkQb2Y4B?|&5YrYli;o*uroM?RQ{Sk>T2QU*^sVDR7tluik#T7XYdSI z&N6&lE}^DfhR)|}oovD?Kgd3a)0l(XkgD10Ri4tq@4kkwN_{_TbfyE{8hZNX%Uj$_ z!VzDkCpBpf9cf}3U$n+w>XbF(#my%P8fyeuiJ&X98Y^I;|%@g4Sv=60&S+Q0>c&ydfjs7E>oeUKf}If8zu1GYWr( zk|4e;Pe3nDse38D9nzV7pVa4&O*Nr%iq4V?69~oKl;DcI-!Lcx`aXD*%ytvfo5Eb_ zz}z>oqd<6IrgjN&8xm{umE4yMpBRMWRv7a_zvCikmZbz(06DFgaz@--#@5}-oud$8 zMhXEMGDlA`@_9LC<(Mj%Qw#|a{`IxUp(+X$8dS`i77)Yvwk+(!>sVz`8a*&M-wFL9 zn3Y)matQ`PK5_}EVFibdlkR6ADD-BMD{wDd!hi;o|DU=nyow zo-RcS%Zrt;0{Kv_)K<=TVhWQ6W>_FhH6)s z-|w|g=hvVlI?Yk=WqFzFFx;f>Z`oh+T9sFeZw|dr)2nQVXjPW{R=EUb8iH8g_z_do zyo4Xj4!RHWOg15ko~2-w=$vEv8jkdYF%=>~^@oprx}SPPkghWK28z&%IuR;O7$)`x zmRCWuS?c`g;8wo#P)Yx%Z+ar0g-^fw`~h|)JT!GAUPRLKeF|!-lxe-aX_puD(e>%O zTF)dQkdG5Z6Ggm}I)!HyJ=G31A-?i*OBvfd_*kC#`!gz^BvVYpRx%YTb{o^;%qco4 z&lq!Svsj*i9CdvsnCJ{Y|S9ijv{S#V2XH<&nI;= zN`Y{_uh3X0kFhIoTpC}nFoooHBa6@%Yjukh&(|D+w3Y6qMC2_Z`8O1}HW?YigkZ>Z zAyqc#8SpIA57*0eYMUevMkVl&AiGw+)MIEZogLWJEu3JJD$H`omr-vskk*}M7@Szt z(CF&|b(>|!hXoRBw zxt4IlofDJ^kkm>xrS?P22l~*RupWP+y%us``jV9xxse{adfsi{fGwQb$CsUFlij|J z;D&ILCXNn3U%jiNuGBfJhcZm-Jm1c85GeFw9J%DX{E8;vg#73RKHfgJkJZ3!}bnFR@B-rPw zlc(u7&+lB)gtubckVskuafV@eWahX-!`VxQpQgl+5F(Ilf;%qsYVc*%E~k+R*0AD; zW)L?aSxi;)M-m#k(bRWtdtjbk@}K)3_1+lcC@{d8KSAXJgy+8$C|v%|=R%Am!?Y)2 zuWAdwgN=0ZtC!-lU8^c-i22aU#X)EW&Mf>+Xcvs^6eJV_?>qVzo|4p>f{>MNGsXdo z2=At4dD^yQhrlZgAg+YAujEId7Ey$0W6bL>WL}fZ4C?R5YE}yqY0*v;PDwk$i>Z;S z#b>0!w>DX^@5Q+oo0J8HPmqoel3qiCy$f|Fq(Uww5xuN^eTCReBUEZRXeU_TqV`gw zDM14GtriTeq<6??+K3|&AlJ}OHW{){F@&$PETLx`c3$A%)@x4_>uHP6$~2OVdbNGG z(-W9_cemdmPvI&*;jE=g)kmZS{b!Iffqd>@iAD9NQxm>JJ$LhIQAPVT1jWm!ZKotBUZ`Iq$Zhu3C2vP*>GAm0c=m=mxD^7Y{{2}+UTj|A z_#+lyyrE9p=Khs}eK&L|;b*i`>W6%%AE+FrgAZH(sWVnMU#8v!LD>h$DU?Rq9%;!~ zn)4w?n>ycBwS*yHPWbaA8Fh`LKC^*DxlLa&E61}0W=s^Gx&E-52)KL=#OGTjvCXRp z9zzPabSFnJnMN;9XD%|i*R3&|R3IQGsu`cYg(d8b@^{Exx{@I<%~YV~Eep;kgud5H z_F~ZAxdh-l<_wmrkc5Y{f^D!XAhUbwM0GTJjW3#|E<0DkM*Ra%K=PvML{sdrSFZzK zZ#5De@x54qPn!+WYEf4|rB>j;2CkL9e7H~H6TDs32=a*ln2?j#TLI=LvJuiE+^Z#v z9Z^;^GZZgwY??*LOJiNX&WOp0#~@x2Y%5%W>K(ZjCF?w&g`pi|_8*Nv8aH@Ulys92 zt&0wl&)kXu+pc@O$=vb65Ov}-G{0yoCZjUHdQvSY)d`a{(#K24;zdD=i1EM%zR02L ztuL>i8^UOnrWRJxS>bo?Y=Y8~!bL3~I=yDH6e!Xnte$k~gmw_5H6@b@tOhN7pmvq2 z=c;e~X6az+3VDn}NB|DL>IUA`pmn{IEko}Np50&W*4j6tmgz`_snS%oi!X<^UOl43 zA2Mfjt#NQT-8H>x-Yd`Z;T3}=;HC^aD5d|1iE^Kz!+7&~_Urr0@J@LST5%gqWg#f& zCo}6kF&v7&G<*CP(uce38m;aGrk&s3wuswwu3xIk#0~0@CmP;ey^51NbU;MT5uYP% z+%)hT7uO=gi@Dh{;d(>~OXfu0(@RhxzlAJ)38)T|xQo5=M`jYDImkPw2^r<1v!xM# z^bCQn#HQh-Vb@!Xzp%q9ltP%I7}8)~w4lW3cslq_f)U<)EOh zGDrr`rFMZ(fy% zO9}H&AN+V*{5v^;-hDofX`#lNPC@_Z5h~MN7V$rHipHIQl;ciC~P+Bi={on92^~7NLasGMSDT9jR6M=>IYw&~yiM z3gZ7%H8>>ZA8}N_KyNZz4A!)i((sj@+ueYq%h8iW4#yV6&ISr7O4Jn}!%h}%!oE+i@%6_GdO|3cRQ!ygfT zq2`z~T3Y-lS-Vne{tIOfe4-T4v+?BBT1VL&fNNd%u-DSj(z*?l>_LUL6kh*F0em6Y zu5I}ramn@0)*hXULR!JT*J~?kZ~q=FTONl{DsjZqe&B2gKARnRo;Ll?L_!?r;G`JpM+`sm0ba-5U>Es2xkV#^xODd0#`e2T3&pG;0 zbnX zrx^}%foL=%j zTAc_oyb|he#3dAUN2C3#M-vKm#p;*bya|Nk$1s;rO6Ea)%kjdQ_h3hMTxGU*tlDZg zG_EoS0XGj!A;@*6E$TibXDYR2i*q0*Z^ zYGEtf@o|X0Vtyx5Y|(lCu0S*M9LHp)KY;RG6wK3&1Cj0FX|8 z>YfLt0HR*(jP8iZR+Gj&SnNsS1sH{QX?%YbJ3P1}0i;SE7BuO7%tJ)quo3abOmi5e zrD#PVFI}SUFAh_gIG*8vZGuUk+Vs4wPa=C`o5*x(kGvk^hlSKoQ)H5&Ylib;7WP#7jB#bkBtU&9MNCD-r{_-Ci@JK z9^I%x0K%{ips0d*cY;`v_|4Pi8z!UWDQ6IJW}A^Jr`O@4KZr%*A-@e6!>w6As}y}d zNiJ>}PoPRWA70^SpQQ|plZkZSao5qb%}XKHJngu*gjYr@y(0JRM^NJ~y&>LH)zBaI zQye+la$bnIYP{kvS{ieh+IC#mji`eeZ`t<~wmJ{JzuTE92GWxf7N8!T$A+ z!ba<|1`CXk#{Gcs=hCp5N`a3Xm%kGud^D6kw2+VeN^oG^e3*oR*$MF2r3yeZt*Nxs z)CU(>{xer(Fj z1-MM~rYYT+2(Fm+MlHTMlYhlmD0(<*mR9LG5tpH!qR`$ME3i?P3l#hereL=Bf^0)^ z-}rq=>28l?Qv&ucGTT)A*C~{}b2oYBsFL9InT+!7If_WRQ&#AMlYm3|1{us5Hx={e zauox`?0aK+S7UoR2Z?9@-z7tqmi~2o+ss}L^|gmX&%Jh`mv*aT>vWIStr{LpGAGfA zIwlKR_dhVzlG$#=ckX}8rq2pssOh`ksnqn01~Swt1p4*J@rlgNreAGc4`sD$i@3R+ zyK_DZr5MM>nI>+`gxQ}qG5Tyb4ac++gIXjAsbgYWb0q+n&s)A>Ydbhux4^i+!QVf= z>_TNGPa$<1Ah6Vw2kr28!Nh&E$1xEkrY+3=jxUnLYXckMrvUTF325^xHUKtg$sCY$ z^k-?Zp)QpiWS#)RvS@&d9^2g{Qg`e7Eq%?bC79fDBSXUG2$#~er*q6vobPa6vd|of z)04&HL-sjUT##AiCH@&k7U#v7Vrx`+8dKKl^Qz7(nc7cP4mSq$rfJUJS1sMLVm1^% z4*I|7ioOf2^6imjwB+&Jkuz+l1($@;?g7dlQTK<-@M;}nHx{ar>6pM)E{_Pg&@_I% zmJ)zsZlcF&lhc)ik(GjThla8=TUT4-aVyQo11LJ~WhC56Q4FWL;d*d2e#Ptpjh^L+2x=SU!uzbd=R`c8=V^on#@AaW>Qq_ zXwQtuR>tb{uhFqG+hZv>)6@rUd7Z8G(_*7gPuA~=Ggil`R9IT8;=;Auz=@ie{-&!` zTzO*ag-9*!&ZFp~@BDap$G5)oC)OQJKO+}kW~nh|b|AXyM8joz*N8D6Ki;@cxU-FI zetQ_l;nw!>EI^-q?2-9tcsS{zCIN1oofT=osL-l*fY!G8T*A{tMp<#@6Mwsx$u?Jd zw|tI|2S|9hjC@_c->%wfE?8L74`IYnFKgSj;a5pkfh{_p@6@!%%6pI1g@G51pv-5y zjQIZFzpEG9Ol9|4iewt`3Wn2WQ8kVqH(MG>A_gB+eKQ#9A`vSxBG>pMP;!m5D_~rG z1pPs$frR7sh$p9MwRRpCTcoiH=E|!zyDj%N@yPYf-~B?hHnDT*Mh~Q%Y1fg)G#Lbk zyliZ~NWDnj92bPm^G329}lux}}%d z6c*sLnmi|DCU+CEpVR}`blPV}4g$yFzg&alCzOo>II6yN>_W>0HD@Yx`VZSpervRaLoUgfC*d!FWUj<7vTy= zU15eBF<^-0nLd-2P{-J{^2dATt0hSvx-upNLFezC9IUaa$()r6trjgZtt}6I@f}Tg z1zf)t0A-O@wi)doU;4gml7}ZMbg9Xg7oK&S+e(0wKJcV#B58ogqvSBO zdpP5H0cNDG-2AiH$t0K4v@orqLaNK29V!lG4*p0T7-mV*B|(LFQc&I;Xf*`8$2^(y zq1JSGZ02ORr)8Sj`nU9HCh;}Yj6dfh)q>QLW*eQlwut<6=Oa@&M$lM)uz*pkfdx4Z z+}o~VKQa$gKCH4 z^oQ1#t}z-mgYj<(CCXp&p19MSuRT567J^rwRyxFI$iN2{OXxK+^}9%Ot8n| zi@-@}Jp2vFg+Hrg;}P_> z_Kr-}F9i#Dg*+^~oaW!^7pwKyh#VJ`>Zp45r%HpW>hmT%vpS;BPR#zk%FnU)EQnnN z744qWM%0+UHT~`7W#7f6(Td4}eR(6L<9a(n1yA%8KN4{)-|#+eRyl{UWtL&ojiQ9> z_9;wYpuguE0!Oue#SU~*B=AIp!^6fHYnHz<`$av8T&jTU5NB4&Sh3q!IOTVIrTsR* zZ)WXk0*9-0?I(uY0kPiuLZ=p}?o6YSr-bek^5eobkx+tc<46O+%sXe|Ls2Avv^~vM z_)++9dtT8|NN?s*$imY}lj%r#6*J9WX$}P>jfFwb@L2EDz7Mj(B&J)zHK&BW6sRZx zw78%H+nK~ctra_#b>)b1k zSKjSqQ2tGrX65`ZVY;hWdJkW_U6k&iy|*KXOQGC{#vGSR`ywciMUZUQNT33;q(8}~ zW2b?1X&#q%sxRJjwu$4uOl%IA?o_oeeV z(^Q+(RGn<7S)a}eRZg_<`?4EVwA;UJ*YNgPiDjUn&v3o-D3ej@tCPFCJFk-#syx`* za|*&kv#O5Q&(PSC!w(LAdZvlbZc$lseNr?zF}NF+WNi^KlWhNC@_4JlyeDvKfq7}; z24_y7K>jPa#V+I9mFGGtPof#PjLM9qKZBo5pSxE3NO+aML+pInGKnVt;Nrl)F&Hmocnw{I26ISN-c-DGEO}>n}WtS0$$E3)Uhp9#x)VtemtsPY&Eu8oKrx8+zpa#U<(AAF5(Tuk;&R4uJ7SmU+RcvB8!@x`LbfX(4 z#SJ5uBV}8F#FHLT4URv_G=U4mu3NoYaf0kpZssLL5ht$p5H)dqN&l$9Ok?>lnZoGF zbs7MWTD{BoOz7j5G9AdL&BX8MQ7mS!U$1$5ni-V{h7vUquamF=i=RqNQP!G^#Jlt(yv6)vtJF_M7~|U7N9q=YA0l{+ z?dB`bJz6>=M5Gh%cF~P|xQQ>0Vpe5jZ#~};qdjXb<+q>=tXIvW@7Pis*X-VbV@tv| zf!1EaT;omnYf3Cpz;M!ILM#1$(!+SEZw z@c5f0^+^t>*Jn8cg<+H4eWqe3=_BYe5hbfBKFvDodFrZe8f>`qN!I#sLrFrRg9z>R z#0k1J4_p89kWIfX|G{R}4@xhyg$Mc--g$XH(!v`e`Ak$R<|t$mxN1BcxLf1Or=G*T zXY9snA4;FOW+yScSBt4G;)Ee1UrJeO;RJ^KZ}a6}N^S=7XVe z*Ohd}KN&oH{62@a(%1(+4@IcUz;eoq4q8);-o6*Q$1dpyoY^ zb{5-S6mho3H>g6Y5u85{(tQq=FF89jsPaQjxiBMWSet)W<2Qd+O3fAkuX~F#GH6A7 zd+2YH!(HNBlM>@;jE!Yy1mpSiZR>&3#Pz|HJZ+O6nxc~6tE3W6MB+_gjmMkF>z??-kV z>jjlK+l5>k21!dWX1uE0kQeQc+Wz+9UbZ&NMn(Bp^ye3d6G`FcUlTlE%;*g_og77| zn_0EL<+F%h0M%Kgu9s_aioJYfQgwDDzpxeVd+Ys;m#=cJXwDL-in@DL9gq4sFQC=F z6OzR-x^c^N8M1pw${1`4I^c)NWH*%B>6qC2&iZmcNg^m#2oN~Xm#5E<5jdKA8S~5j zVN{d9cfL(>$ISDAl&HBPDe7an6}Lv@&mDFd#2mNs`5ksRV)wgpV?cP!=SQ9VJAq45 zT9%B`{57Qx91UD1thTyQ-KEj@3WfS}G+kn!BPNgS5BT?TqB%#}RT<-&SEsAY1gyu( zvj+2xG{Z(KYSzco(oU^MYy8ydd3kd0xlGsJMN~irEUoKiWS%?86ndU(=r=$j?F6Q; z5mdoo;Zd#m5~@sIi)Jo(ebiNro&7V1`&Q1~>SrBqc}+_1pW7g=N@15$7G9M+Sn0Ep z=8oJ_45J^^-X^NBJn)v8IF;4hFFQTyqd@ONy~jl8Jvoal(QzBD3-|8}M-Q57dhisY znuP&-)oAqPLn7{5ExBJfCgqda_6oK(H%racyd!voNi3Q>Jf7BurYL{n=!c?3@K|Yf zzWK&s%ksLHQkwPI^DJ#GC9o&4^UTjut;3Z8`x>s!T#;FR1WhxPsR zi#yf@Ua%+m>~6R#NOj1Z{diHeQ+tLU&X5VOyF@bZ-gUcnZC4&GE$~8g<6SFiJIsSy zFMF@xr|&)8#9CPG`EX^X%`QiHu%EkwNc4<3P;uf9-Y7dxpx`Gult8YjOGv)XL$p3_ zY%G|uaBLr{Uyg64@zW=Td3VOQLAKB}bqgpwe{H7d*|R1RZlO+v(Sn9}PTv~AXhM~> z=nrGa+%ninw|+&q(18S~UT&PxGljve3A)?ewlR_R#Pqu@&;iJ##4fbDqw*Yba#TvM zX(f741-SJ~QoO!*8iWM)8pMi|B)7*!YhJfS%lky?8@w*tw!Kd%U>`fTxbXQNmEX05 zZs@_$QeshfyxkhmIm@;)@okx9kGzFcA5S#dwxRvA*f5RmE8T<90**S0f1v30tBt#4 zG;v2~JC3p9ubgIsN6Q!4JKfeQ?AVR$5vW`vefQX|eiH=B7ukRy`sw;9VW%S6d^c6B zzut`0YnivTO}8ZmHh0p#G|6i5U=|AHh}VLPrVJTYHc4^{gC8&BrkOqua+Y18*FVW ztC*k5iYetyy!_kcxq54R|1F90sk9OL&`N=*qrqoB#G>E-sNl-(`g@a4kLAsmKRb+; zF8y@+YNV=J3@MR>sFqf3c8l1FBhU%XT>{P{%;6u^J(3_J;XNkR224J_wWl-wih8kH z=R?A4y=>CHPO)Flda8MaWihCNBkEJg)H$pr;Ji!5B&uQtlMeTJYToruX!rC)Gp%e) z`4lyINA8w&THX2Z$nN^4L`S52cx0XOtGORWN(R?;oV)(Vy9Xa3=_Pm794qelUY@mH=>Zh4pt*@%heHi_6ji-9~E5CTM+UHdT!?j+=m@RTp&^LQJ z*UIj^2^EUViYp`^d!hxq2id$b`aTTes1>s}|H(sUu_89@I{TJ%L$REw<@{Dj6+k{2 z;?=8fv>NFLqrw}@Z|Y-)V)ukBzPj9p<+PIF2Qc?|vA<;bi(|_gUnMTl|JJ{ERfF76 zFciyBN%9i!?|=TnQ&KOaa^m~^dc({c*d370L+w8o}hk>zAk=ksO)s-pw$Vf$d$8@Hmy+m z<{Y5<4@+RSTENVT_D`mz)$2N1GdY>wE(g*J1~r!vJY7jf8zG4XDXoY%Q@MpcCJnqx zE!x9s1FYO1^5+WOf#EMUW%6^9%ny;BPCnNso(~)AlOz|cn55_9Di&2M>e|S-uaS_Z zkhQt^(mVB^Rd(1`uh~ukWSr;|HN9AXeS0yOsV;4pQKul3I&V~H`+}%F7)_K`6I>M^ z4rbUDf{S)b1-n?-;r;y0TP}cbX;`pl`3h=l?kX0W>kq{S6ogY(DP?EwC%KTBh$O5= z{g`~Utj;<{X4{~{>{dBfSecI0U5XxX9Z_5KP7b$!h38drYI&lhCUu7jur%Tt4S0y( z{?w!B06LCsNJN5g>a%JN{X_yhk_1=N=os~aGoGhl(hxMH;FBVwzHFomhxH(A^5aX_ z!k5b+Yw5_}yP_iy$8Si}e{8SN=viBu6**;RcK-+2yTqmAUqTF>6=Z1pYeEKd^#|w< zmmOk@+4$4gs79VJu29Xch^z>}ts7xTqbF1-N4$EtUvg6)pHA@>OFrgA_M;M{@uIO%1S*T z@sW{UG8>Mqy!~2WPAhyX$6jT`Ga~7&@>8+&G&Nw4VL_}y$u2ofO!wN9{~#cbWyuP^ zeY-za2!Wn;D~=n?N2` z%=6w$4e~3pGlB9ygK!H<4rstXD4b|cBcRH{Mt2XEvh!c=<`7SLSq!FVqJQL8P4JLe z?czVZ!ua0pSE#9dJ9(zBQusB*Gz&tJ!qh_DFREm6eajDHNQI3$12i1zmZwU zaY4o*G7H?~q!SZ8F(Jb%C<~z_9 zsQ(ALm2)0pCAtSNwpNMOPv~~!8lxMwfMo5Sejp3xlWQ^MZ@j}DI6ZF+w$DOE;b5VK zp&onA%)0C=vNHGmHRPF`j(Dj?NKd}GWvYFq9~Q(`U98!=qel`x#R3=u#*S7_(%37k z3T0I8-ot{n+XT<%89Q!;!_A&94B?1juBRcka8-gFWWhP*IQy|A!nCmF6J=2fX$-?v|T`v)Ct_1F} zLTpUpMLiCZ!uv$3!(cMb`HT}MK_ctbZQR#4w>qr#_67?*P+9Or>l2}=JjK0I)e+s# z>iqdWPxagg(0rkP$k*La*{?khb$Qrxt+%JZo`h*tEA@c|=&4t8=~WP21vjkq&JT6$ zk0=X2Fz{hbh993iY*ijyR?!-c9;jSP`Cv0@J8DN{?q)et$C8T7%5BkB7!V?#iFVqf zBeZ*$5K7s|R-a^8uhw{F<9p?6(u!~!i$2kClZeP?gwmfy7%~(i+z3N zb}|JQsxW?rYx@IJ{2VFuyg4gbSar9wYylG#x=cMh?2~nhfU;HbNt zr;(~)>HZH}BWuxpYq~Q-(IJHF9RMfnar0Fx#h?M=t5Bc zB){C8RtLdKJ4}%7K)(_-jvL7b9||~%Pg%((t)42RJ7Ql-XI-yAhT4u6sLlJ;uMYbh zAp3=qr2o9e0w?ZI{cMJB{X#Nr6dWnmt0@V=NS`RV`i{zjH)*zFy2C1@{b&?_q7j~# z!(a;4UE7#+jh2mLgQSAi(3&~VU@7x6wCE$Kyiq<+=tO58hAwPZJBgPHv5DgQYYlEk zFa#!BarFxt`I_W#LM3%o_XJgZhvr(Q3JVm`DgBXAPH0-yMA>Qj1NFAv*dZJ>9iHr$ zdWn9XrK-BBRts(dx$&@a>w3h{VRm=2XEtH|>Q^1pX+fUk>OIutz7>Iz&0JBZmE0*7G2KoYw^y)4>Zxx=N@ap)vhVUjGfRq&(F6$ z@E<#7UfEn5*j=r`$XT~3R?}^9Y?aev42D%kish`c6@e8$N|jm9|JC(Nx=0;(&-{6~MCAIL9%43a(|BGC=&dFoA_jR{WCRTwhdUv#Fd!y29mojO%ky z(MNlNfF|vL01Zn^GvHA+kxm`R40nm{%lZb=73m?X;V9EoSPAfXT8}u`E8`KF$)kdF zL5<0Bl=b2k+2&8GBkw8c|9J_PzzveuQqRs@W%A<$r;d=jLPlqW&T$knFNaM~)x~mi z570p!{M<2sVk*zDw<-v-P0kY?xC4R)>1uXJ3*iPLd$g&%{;45ZA=p@tS z5Dxs1qGV!NGQYA?I8LZHj9EO{R?t>QuR19ylcD2M`z?vOQ+ws}TPkkS0`mVM{l6Hja3TJ`_o&YfPkvE>W z=B?m--CX#UjisCU-a~3yEzy865-lAftML|^QW@ZnqrN+j%98Z`H`AS0-g=XtlvNhn zk4Ehc2<6vz5H_C)Mrku+cFeU9ei)#HR1%Ae>krSCdiVVY=%;18IR};1f-3Q=OIb`J zMiz4?D|8+fl;k$=d6B;ooqkEX4uSQ{p;FNmJD8$Av3`4E9pM4YaE=l(uAn~s#81ml zE3p8!vjIHxOk&8!_xeD37V4PS z2Iw`_qXn@wgzAIoC?{m^eCwHDm#$2v{lzXTrVEQMaNaMu2qE1ogKZwdJVNcxa4N0Y z*E_O6{m_L|*C<^^Kiak&P5sc5dK2NqT9ZVlf3snVw<4)omW#C~1CHB>>%mlM^6t*U zB>zhARCWJQQ~~-T`0;YhXMql@k#d9?&22swmgBdNb2m4sm?8YWb0c*kTKmjEVLlUC zptuL54E%R8GxhMWk~%WELJ-WOqrFp6SDQF2+{aHOZMFs@wFu zGQf8IjpqP=UuC7-63fA?o*1O`BX@lm>0mzm7C!ni`Q9rTs=ylJt@rL|2nAm(iQ6v= zxHef$#Z9F>-8E4743_>!Zvuq!?EZN5jFiK8y4_?%?L=r+ZgwLS4BgC`fkvK!>ma+z zYH+|@d>0*4EePfnPYI^tvTqLRxRjO!)B&f+aKk!9>6+}7!Rd8ry9PXC;ENe+wi5$G z$lX6S{AnLS@mVLRx;|MP+J9Os#~+toZ$h|JSX;Qy!Wf5mLd&fr;{?PJR8~>Nx5Z27 z%EpU?$kXJk4fLPtFMRRQ604{UE=y=Bt8MX}u}evceko~e)V`V``S;qsgBK#nM)g7c zZvD$zPra&SSCi^9%C0gnXFKIb*OBF7 zA=q_bq%XnA{!}Oyww*zKlu8K~dCLOcwICdRhX?U$qac;%p%EgGhBMEd_}hTUVlX%mG1^ zCa^N1r|h5Yr|fC}x^V#n9WdG6l8HPqV`+1$4gZX7ymyRWh4RzU5vtqBe`P-c-vPl>$vE$P z>r_rihYNbL@L3C44L`^V2JAqP)5BJk<^a`H!(P~}zUtHB5Cn>nI{RNezcxzTpRtLV z1`P?!6#bDGScQsGMeXXBq>DH!q~skZQ0dF0kk)vMvpi^l#tq5MjXWfUL#a?u~}&3AnDsTMc%1+iU3;=7$c5RY05Va`76 zANhI@#eM9RPGbF?=(|wm0segYomBR)h}BS5opkR14bp(k93ov)GK5#*Cz6nd%@h&1 zz+!^Uo*3){x~g3{>wEXqiX(>O&H3K_yH~Yv0UJ8on$vhk2crah4t|B6jHq0TRNPYf zlB~-Z!9P2|abMPsvW`I}e`Vh#37AxdYQ;^WcA*8p#XxgXPMa)g!1#)R&Tj3{iqyp1M zv_CbzbsRhYcmHdt;;FmKj$TjGxT}0)z~$mtO;+9bz}-h-${$>f2+?Br7^^IGlOyKe zG)CYAx+ad0WQK=)(v>Q@Ov|o&Q3d0=2R5pTx$Pz0w7t|yMI7C~h2jXpNm{xtSND81 zRo#SdQb5CYlt?JP#ZQ4w_0GR{qrF3ENo8Jol>_LzEV$}|Jxm?0)RG=$AWm(GOZzhv z%K(9fSC~~b*`O}wBB#OUh>MeZ@x~*aLXCTWw>b{UC(^)Gv<4~XKO=AfO#?=f4wx~0 zd8OumA9?Y`Q|XIsMqxGludL56Ew%nd{a)J_S^t2DUs(km7jv^a*J<$Y)h@nZvAx&} zWZc*Pt^6;i4Fg04CejJ|r2jn`@O|@8V2Io=Y0v+z{;y|azW~ipFag{D$1?}!UOD!c Y-B4VQB?Str1AiVrRDFz>% literal 0 HcmV?d00001 diff --git a/docs/images/api_keys_page.png b/docs/images/api_keys_page.png new file mode 100644 index 0000000000000000000000000000000000000000..078b04b9f91a8c95fdf7b0f07b00b66e29dd03bb GIT binary patch literal 91892 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 **Admin only** — the API Keys page is only visible when admin mode is enabled. + +## Accessing the API Keys Page + +1. Enable admin mode using the toggle in the sidebar. +2. Click **Manage API Keys** in the sidebar (under the admin section). + +![API Keys page](../images/api_keys_page.png) + +The page shows a table of all existing keys with their status, permissions, and available actions. + +## Creating an API Key + +1. Click the **Create Key** button in the top-right corner of the page. +2. Enter an **Application Name** to identify what the key will be used for. +3. Check at least one permission: + - **Read Access** — allows read operations + - **Write Access** — allows write operations +4. Click **CREATE**. + +![Create key dialog](../images/api_key_creation.png) + +## Copying Your Token + +After the key is created, the generated token is displayed **once**. You must copy it immediately — it will not be shown again. + +![Token display dialog](../images/api_key_token.png) + +- Click the copy icon to copy the token to your clipboard. +- Store it somewhere secure, such as a password manager. +- Click **I'VE COPIED MY KEY** to dismiss the dialog. + +If you lose the token, you will need to deactivate the key and create a new one. + +## Deactivating a Key + +In the API Keys table, click the **Deactivate** button in the Actions column for the key you want to revoke. The key's status will change to **Inactive** and it will no longer authenticate requests. + +Deactivation is permanent — a deactivated key cannot be re-activated. + +## Bootstrap Key + +If no API keys exist yet, a **Bootstrap Key** option is available. This creates an initial key so you can get started without needing an existing key to authenticate. + +## API Key Error Banner + +If Squirrel detects that the configured API key is missing or invalid, a banner appears at the top of the page: + +> **API KEY INVALID OR EXPIRED** + +Navigate to the API Keys page to create a new key or verify that a valid key is in use. diff --git a/docs/user-guide/index.md b/docs/user-guide/index.md index 25f36f9..625513e 100644 --- a/docs/user-guide/index.md +++ b/docs/user-guide/index.md @@ -19,6 +19,10 @@ This guide covers all the features of Squirrel in detail. 5. **[PV Details](pv-details.md)** - View detailed information about individual PVs 6. **[Tags](tags.md)** - Organize PVs into groups for easier filtering +### Admin + +7. **[API Keys](api-keys.md)** - Create and manage API keys for programmatic access (admin only) + ## Quick Reference | Task | Where to Go | @@ -30,3 +34,4 @@ This guide covers all the features of Squirrel in detail. | Add new PVs | PV Browser → Add PV or Import CSV | | Restore saved values | Snapshot Details → Select PVs → Restore | | Filter PVs by tag | Any PV table → Tag filter dropdown | +| Create/manage API keys | API Keys (admin mode required) | diff --git a/mkdocs.yml b/mkdocs.yml index 69e5303..58db93c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -93,3 +93,4 @@ nav: - PV Details: user-guide/pv-details.md - Tags: user-guide/tags.md - Restore: user-guide/restore.md + - API Keys: user-guide/api-keys.md From 2e980e68bd4753c84d184259b6c02c41fe7f329e Mon Sep 17 00:00:00 2001 From: zdomke Date: Wed, 25 Mar 2026 10:45:21 -0700 Subject: [PATCH 10/11] DEP: Removing bootstrap endpoint from apiKeyService.ts --- src/services/apiKeyService.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/services/apiKeyService.ts b/src/services/apiKeyService.ts index a7bdf79..dd37b78 100644 --- a/src/services/apiKeyService.ts +++ b/src/services/apiKeyService.ts @@ -24,13 +24,6 @@ export const apiKeyService = { return apiClient.delete(`${API_CONFIG.endpoints.apiKeys}/${keyId}`); }, - /** - * Bootstrap an initial API Key (only allowed when no keys exist) - */ - async bootstrapApiKey(): Promise { - return apiClient.post(`${API_CONFIG.endpoints.apiKeys}/bootstrap`, {}); - }, - /** * Get the current number of API Keys */ From 0f16d6dc5dfbe7ede408b28a008b1f15e9c7de9d Mon Sep 17 00:00:00 2001 From: zdomke Date: Wed, 25 Mar 2026 17:24:21 -0700 Subject: [PATCH 11/11] BLD: pnpm install --- pnpm-lock.yaml | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 242c743..5d03e3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,10 +47,10 @@ importers: version: 1.166.11(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/router-vite-plugin': specifier: ^1.166.19 - version: 1.166.19(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(esbuild@0.27.4)(@types/node@25.3.3)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.166.19(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3)) '@types/node': specifier: ^25.3.3 - version: 25.3.3 + version: 25.5.0 '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -65,7 +65,7 @@ importers: version: 7.18.0(eslint@8.57.1)(typescript@6.0.2) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3)) + version: 6.0.1(vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^8.57.1 version: 8.57.1 @@ -104,7 +104,7 @@ importers: version: 6.0.2 vite: specifier: ^8.0.2 - version: 8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3) packages: @@ -806,8 +806,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@25.3.3': - resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==} + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3097,7 +3097,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.4(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/router-plugin@1.167.4(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -3114,7 +3114,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - vite: 8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -3132,9 +3132,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-vite-plugin@1.166.19(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/router-vite-plugin@1.166.19(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@tanstack/router-plugin': 1.167.4(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/router-plugin': 1.167.4(@tanstack/react-router@1.168.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - '@rsbuild/core' - '@tanstack/react-router' @@ -3158,6 +3158,10 @@ snapshots: '@types/json5@0.0.29': {} + '@types/node@25.5.0': + dependencies: + undici-types: 7.18.2 + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.15': {} @@ -3257,10 +3261,10 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@6.0.1(vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-react@6.0.1(vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3) acorn-jsx@5.3.2(acorn@8.16.0): dependencies: @@ -5008,7 +5012,7 @@ snapshots: dependencies: react: 19.2.4 - vite@8.0.2(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.2(@types/node@25.5.0)(esbuild@0.27.4)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -5016,6 +5020,7 @@ snapshots: rolldown: 1.0.0-rc.11 tinyglobby: 0.2.15 optionalDependencies: + '@types/node': 25.5.0 esbuild: 0.27.4 fsevents: 2.3.3 tsx: 4.21.0